From 8f6890d485bf614ecf8d74cf951094c4f05e0daf Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Wed, 4 Feb 2026 09:49:30 +0800 Subject: [PATCH 01/40] feat: turborepo + cloudflare --- .env.example | 18 --- .gitignore | 49 ++++--- .husky/pre-commit | 1 + .prettierignore | 6 + .vscode/settings.json | 13 +- LICENSE | 37 +++-- README.md | 127 +++++++++++++----- apps/web/.env.example | 10 ++ apps/web/.gitignore | 22 +++ components.json => apps/web/components.json | 15 ++- apps/web/eslint.config.js | 3 + apps/web/package.json | 60 +++++++++ {public => apps/web/public}/favicon.ico | Bin .../components/default-catch-boundary.tsx | 2 +- .../web/src}/components/default-not-found.tsx | 2 +- .../src}/components/sign-in-social-button.tsx | 4 +- .../web/src}/components/sign-out-button.tsx | 6 +- .../web/src}/components/theme-toggle.tsx | 12 +- {src => apps/web/src}/routeTree.gen.ts | 0 {src => apps/web/src}/router.tsx | 0 {src => apps/web/src}/routes/__root.tsx | 23 +++- .../web/src}/routes/_auth/dashboard/index.tsx | 1 + .../web/src}/routes/_auth/dashboard/route.tsx | 2 +- {src => apps/web/src}/routes/_auth/route.tsx | 2 +- {src => apps/web/src}/routes/_guest/login.tsx | 17 ++- {src => apps/web/src}/routes/_guest/route.tsx | 2 +- .../web/src}/routes/_guest/signup.tsx | 19 ++- {src => apps/web/src}/routes/api/auth/$.ts | 3 +- {src => apps/web/src}/routes/index.tsx | 13 +- apps/web/src/styles.css | 3 + apps/web/tsconfig.json | 13 ++ vite.config.ts => apps/web/vite.config.ts | 6 +- apps/web/wrangler.jsonc | 10 ++ docker-compose.yml | 14 -- drizzle.config.ts | 15 --- package.json | 93 +++++-------- packages/auth/eslint.config.js | 3 + packages/auth/package.json | 29 ++++ .../auth => packages/auth/src}/auth-client.ts | 3 +- {src/lib/auth => packages/auth/src}/auth.ts | 22 ++- .../auth/src/tanstack}/functions.ts | 2 +- packages/auth/src/tanstack/hooks.ts | 12 ++ .../auth/src/tanstack}/middleware.ts | 2 +- .../auth/src/tanstack}/queries.ts | 0 packages/auth/tsconfig.json | 5 + packages/db/.env.example | 5 + packages/db/drizzle.config.ts | 29 ++++ packages/db/eslint.config.js | 3 + packages/db/package.json | 28 ++++ packages/db/src/index.ts | 16 +++ packages/db/src/schema/auth.schema.ts | 114 ++++++++++++++++ .../db => packages/db/src}/schema/index.ts | 0 packages/db/src/schema/relations.ts | 7 + packages/db/tsconfig.json | 5 + packages/ui/components.json | 25 ++++ .../ui => packages/ui/components}/button.tsx | 20 ++- .../ui/components}/dropdown-menu.tsx | 28 ++-- packages/ui/components/input.tsx | 20 +++ .../ui => packages/ui/components}/label.tsx | 4 +- .../ui => packages/ui/components}/sonner.tsx | 26 ++-- packages/ui/eslint.config.js | 3 + packages/ui/hooks/use-mobile.ts | 20 +++ packages/ui/index.js | 1 + .../ui/lib}/theme-provider.tsx | 8 -- {src => packages/ui}/lib/utils.ts | 0 packages/ui/package.json | 45 +++++++ src/styles.css => packages/ui/styles/base.css | 4 +- packages/ui/tsconfig.json | 10 ++ pnpm-workspace.yaml | 67 +++++++++ scripts/migrations-flatten.ts | 50 +++++++ src/components/ui/input.tsx | 20 --- src/env/client.ts | 10 -- src/env/server.ts | 17 --- src/lib/db/index.ts | 18 --- src/lib/db/schema/auth.schema.ts | 93 ------------- tooling/eslint-config/base.js | 40 ++++++ tooling/eslint-config/package.json | 23 ++++ .../eslint-config/tanstack.js | 14 +- tsconfig.json => tooling/tsconfig/base.json | 5 +- tooling/tsconfig/package.json | 9 ++ turbo.json | 36 +++++ 81 files changed, 1053 insertions(+), 471 deletions(-) delete mode 100644 .env.example create mode 100644 .husky/pre-commit create mode 100644 apps/web/.env.example create mode 100644 apps/web/.gitignore rename components.json => apps/web/components.json (56%) create mode 100644 apps/web/eslint.config.js create mode 100644 apps/web/package.json rename {public => apps/web/public}/favicon.ico (100%) rename {src => apps/web/src}/components/default-catch-boundary.tsx (96%) rename {src => apps/web/src}/components/default-not-found.tsx (90%) rename {src => apps/web/src}/components/sign-in-social-button.tsx (91%) rename {src => apps/web/src}/components/sign-out-button.tsx (81%) rename {src => apps/web/src}/components/theme-toggle.tsx (69%) rename {src => apps/web/src}/routeTree.gen.ts (100%) rename {src => apps/web/src}/router.tsx (100%) rename {src => apps/web/src}/routes/__root.tsx (72%) rename {src => apps/web/src}/routes/_auth/dashboard/index.tsx (90%) rename {src => apps/web/src}/routes/_auth/dashboard/route.tsx (95%) rename {src => apps/web/src}/routes/_auth/route.tsx (88%) rename {src => apps/web/src}/routes/_guest/login.tsx (91%) rename {src => apps/web/src}/routes/_guest/route.tsx (92%) rename {src => apps/web/src}/routes/_guest/signup.tsx (91%) rename {src => apps/web/src}/routes/api/auth/$.ts (88%) rename {src => apps/web/src}/routes/index.tsx (87%) create mode 100644 apps/web/src/styles.css create mode 100644 apps/web/tsconfig.json rename vite.config.ts => apps/web/vite.config.ts (87%) create mode 100644 apps/web/wrangler.jsonc delete mode 100644 docker-compose.yml delete mode 100644 drizzle.config.ts create mode 100644 packages/auth/eslint.config.js create mode 100644 packages/auth/package.json rename {src/lib/auth => packages/auth/src}/auth-client.ts (65%) rename {src/lib/auth => packages/auth/src}/auth.ts (68%) rename {src/lib/auth => packages/auth/src/tanstack}/functions.ts (93%) create mode 100644 packages/auth/src/tanstack/hooks.ts rename {src/lib/auth => packages/auth/src/tanstack}/middleware.ts (96%) rename {src/lib/auth => packages/auth/src/tanstack}/queries.ts (100%) create mode 100644 packages/auth/tsconfig.json create mode 100644 packages/db/.env.example create mode 100644 packages/db/drizzle.config.ts create mode 100644 packages/db/eslint.config.js create mode 100644 packages/db/package.json create mode 100644 packages/db/src/index.ts create mode 100644 packages/db/src/schema/auth.schema.ts rename {src/lib/db => packages/db/src}/schema/index.ts (100%) create mode 100644 packages/db/src/schema/relations.ts create mode 100644 packages/db/tsconfig.json create mode 100644 packages/ui/components.json rename {src/components/ui => packages/ui/components}/button.tsx (52%) rename {src/components/ui => packages/ui/components}/dropdown-menu.tsx (82%) create mode 100644 packages/ui/components/input.tsx rename {src/components/ui => packages/ui/components}/label.tsx (90%) rename {src/components/ui => packages/ui/components}/sonner.tsx (56%) create mode 100644 packages/ui/eslint.config.js create mode 100644 packages/ui/hooks/use-mobile.ts create mode 100644 packages/ui/index.js rename {src/components => packages/ui/lib}/theme-provider.tsx (88%) rename {src => packages/ui}/lib/utils.ts (100%) create mode 100644 packages/ui/package.json rename src/styles.css => packages/ui/styles/base.css (98%) create mode 100644 packages/ui/tsconfig.json create mode 100644 pnpm-workspace.yaml create mode 100644 scripts/migrations-flatten.ts delete mode 100644 src/components/ui/input.tsx delete mode 100644 src/env/client.ts delete mode 100644 src/env/server.ts delete mode 100644 src/lib/db/index.ts delete mode 100644 src/lib/db/schema/auth.schema.ts create mode 100644 tooling/eslint-config/base.js create mode 100644 tooling/eslint-config/package.json rename eslint.config.js => tooling/eslint-config/tanstack.js (80%) rename tsconfig.json => tooling/tsconfig/base.json (83%) create mode 100644 tooling/tsconfig/package.json create mode 100644 turbo.json diff --git a/.env.example b/.env.example deleted file mode 100644 index cc0b24a..0000000 --- a/.env.example +++ /dev/null @@ -1,18 +0,0 @@ -VITE_BASE_URL=http://localhost:3000 - -DATABASE_URL="postgresql://user:password@localhost:5432/tanstarter" -# You can also use Docker Compose to set up a local PostgreSQL database: -# docker-compose up -d - -# pnpm run auth:secret -BETTER_AUTH_SECRET= - -# OAuth2 providers, optional, update as needed -GITHUB_CLIENT_ID= -GITHUB_CLIENT_SECRET= -GOOGLE_CLIENT_ID= -GOOGLE_CLIENT_SECRET= - -# NOTE: -# In your OAuth2 apps, set callback/redirect URIs to`http://localhost:3000/api/auth/callback/` -# e.g. http://localhost:3000/api/auth/callback/github \ No newline at end of file diff --git a/.gitignore b/.gitignore index e9b4731..e9aac7b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,24 +1,39 @@ -node_modules +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. -# Ignore lockfiles we don't use -# package-lock.json -# yarn.lock -# pnpm-lock.yaml -# bun.lock +# Dependencies +node_modules +.pnp +.pnp.js -.DS_Store -.cache +# Local env files .env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Testing +coverage + +# Turbo +.turbo -.data +# Build Outputs +out/ +build +dist +.nitro .vercel -.output .wrangler -.netlify -dist -/build/ -/api/ -/server/build -/public/build -.tanstack \ No newline at end of file +# Debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Misc +.DS_Store +*.pem +.cache +.tanstack +worker-configuration.d.ts \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..dff836d --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +pnpm exec lint-staged \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 109a1bd..2fa5930 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,10 +5,16 @@ yarn.lock bun.lock # misc +pnpm-workspace.yaml routeTree.gen.ts +.tanstack-start/ .tanstack/ drizzle/ +migrations/ .drizzle/ +.turbo +.cache +worker-configuration.d.ts # build outputs .vercel diff --git a/.vscode/settings.json b/.vscode/settings.json index 10f4f31..24e6700 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,32 +2,25 @@ "files.readonlyInclude": { "**/routeTree.gen.ts": true, "**/.tanstack/**/*": true, + "**/worker-configuration.d.ts": true, "pnpm-lock.yaml": true, "bun.lock": true }, "files.watcherExclude": { "**/routeTree.gen.ts": true, "**/.tanstack/**/*": true, + "**/worker-configuration.d.ts": true, "pnpm-lock.yaml": true, "bun.lock": true }, "search.exclude": { "**/routeTree.gen.ts": true, "**/.tanstack/**/*": true, + "**/worker-configuration.d.ts": true, "pnpm-lock.yaml": true, "bun.lock": true }, - "explorer.fileNesting.enabled": true, - "explorer.fileNesting.patterns": { - "tsconfig.json": "tsconfig.*.json, env.d.ts", - "vite.config.*": "jsconfig*, vitest.config.*, cypress.config.*, playwright.config.*", - "package.json": "package-lock.json, pnpm*, .yarnrc*, yarn*, .eslint*, eslint*, .prettier*, prettier*, .editorconfig, .gitattributes, bun.lock" - }, - - // always choose typescript from node_modules - "typescript.tsdk": "./node_modules/typescript/lib", - // use LF line endings "files.eol": "\n", diff --git a/LICENSE b/LICENSE index fdddb29..c16d74b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,24 +1,21 @@ -This is free and unencumbered software released into the public domain. +MIT License -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. +Copyright (c) 2025-present Nathaniel John Tampus -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -For more information, please refer to +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 16b80d0..dd5b88d 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,114 @@ -# [React TanStarter](https://github.com/dotnize/react-tanstarter) +# TanStarter -A minimal starter template for 🏝️ TanStack Start. [β†’ Preview here](https://tanstarter.nize.ph/) +> [!WARNING] +> This is still a work in progress. See the [issue watchlist](#issue-watchlist) below. +> +> TODO: +> +> - [ ] Replace ESLint + Prettier with Oxlint + Oxfmt (blocked by https://github.com/oxc-project/oxc/issues/14557) +> - [ ] Drizzle Relations v2 support in Better Auth (https://github.com/better-auth/better-auth/pull/6913) +> - [ ] `AGENTS.md` +A monorepo template for 🏝️ TanStack Start and Cloudflare. + +- [Turborepo](https://turborepo.com/) + [pnpm](https://pnpm.io/) - [React 19](https://react.dev) + [React Compiler](https://react.dev/learn/react-compiler) -- TanStack [Start](https://tanstack.com/start/latest) + [Router](https://tanstack.com/router/latest) + [Query](https://tanstack.com/query/latest) +- TanStack [Start](https://tanstack.com/start/latest) + [Router](https://tanstack.com/router/latest) + [Query](https://tanstack.com/query/latest) + [Form](https://tanstack.com/form/latest) +- [Vite 8](https://vite.dev/blog/announcing-vite8-beta) (beta) + [Cloudflare](https://developers.cloudflare.com/workers/framework-guides/web-apps/tanstack-start/) - [Tailwind CSS](https://tailwindcss.com/) + [shadcn/ui](https://ui.shadcn.com/) + [Base UI](https://base-ui.com/) -- [Vite 8](https://vite.dev/blog/announcing-vite8-beta) (beta) + [Nitro v3](https://v3.nitro.build/) (nightly) -- [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL +- [Drizzle ORM v1](https://orm.drizzle.team/) (beta) + Cloudflare D1 - [Better Auth](https://www.better-auth.com/) +- ~~[Oxlint](https://oxc.rs/docs/guide/usage/linter.html) + [Oxfmt](https://oxc.rs/docs/guide/usage/formatter.html)~~ + [Husky](https://typicode.github.io/husky/) + [lint-staged](https://github.com/lint-staged/lint-staged) - WIP + +### Structure + +```sh +β”œβ”€β”€ apps +β”‚ β”œβ”€β”€ web # TanStack Start web app +β”œβ”€β”€ packages +β”‚ β”œβ”€β”€ auth # Better Auth +β”‚ β”œβ”€β”€ db # Drizzle ORM + Drizzle Kit + Cloudflare D1 +β”‚ └── ui # shadcn/ui primitives & utils +β”œβ”€β”€ tooling +β”‚ └── eslint-config # Shared ESLint configuration +β”‚ └── tsconfig # Shared TypeScript configuration +β”œβ”€β”€ turbo.json +β”œβ”€β”€ LICENSE +└── README.md +``` + +## Table of Contents + +- [Getting Started](#getting-started) +- [Deploying to production](#deploying-to-production) +- [Issue watchlist](#issue-watchlist) +- [Goodies](#goodies) + - [Scripts](#scripts) + - [Utilities](#utilities) +- [Third-party integrations](#thirdparty-integrations) +- [Ecosystem](#ecosystem) ## Getting Started -1. [Use this template](https://github.com/new?template_name=react-tanstarter&template_owner=dotnize) or clone this repository with gitpick: - - ```bash - npx gitpick dotnize/react-tanstarter myapp - cd myapp - ``` +1. [Use this template](https://github.com/new?template_name=react-tanstarter&template_owner=dotnize) or clone this repository with gitpick, then install dependencies: -2. Install dependencies: + ```sh + npx gitpick dotnize/react-tanstarter myproject + cd myproject - ```bash pnpm install ``` -3. Create a `.env` file based on [`.env.example`](./.env.example). +2. Create a `.env` file in `/apps/web` based on the [`.env.example`](./apps/web/.env.example). -4. Push the schema to your database with drizzle-kit: + ```sh + cp ./apps/web/.env.example ./apps/web/.env + ``` - ```bash - pnpm db push +3. Create a D1 database using Wrangler, with `db` as the binding name: + + ```sh + pnpm wrangler d1 create ``` - https://orm.drizzle.team/docs/migrations +4. Generate the initial migration with drizzle-kit, then apply it locally: + + ```sh + pnpm db:generate + pnpm db:migrate:local + ``` 5. Run the development server: - ```bash + ```sh pnpm dev ``` - The development server should now be running at [http://localhost:3000](http://localhost:3000). + The development server should now be running at [http://localhost:5173](http://localhost:5173). ## Deploying to production -The [vite config](./vite.config.ts#L12-L13) is currently configured to use [Nitro v3](https://v3.nitro.build) (nightly) to deploy on Vercel, but can be easily switched to other providers. +The [vite config](./apps/web/vite.config.ts#L14-L15) is configured for [Cloudflare](https://developers.cloudflare.com/workers/framework-guides/web-apps/tanstack-start/) via the [Vite plugin](https://developers.cloudflare.com/workers/vite-plugin/). -Refer to the [TanStack Start hosting docs](https://tanstack.com/start/latest/docs/framework/react/guide/hosting) for deploying to other platforms. +To deploy, simply run the `deploy:web` script. You can also use this as the Deploy command in the Cloudflare dashboard: + +```sh +pnpm deploy:web +``` + +To apply migrations to your remote D1 database, run: + +```sh +pnpm db:migrate:prod +``` ## Issue watchlist - [Router/Start issues](https://github.com/TanStack/router/issues) - TanStack Start is in RC. - [Devtools releases](https://github.com/TanStack/devtools/releases) - TanStack Devtools is in alpha and may still have breaking changes. - [Vite 8 beta](https://vite.dev/blog/announcing-vite8-beta) - We're using Vite 8 beta which is powered by Rolldown. -- [Nitro v3 nightly](https://v3.nitro.build/docs/nightly) - The template is configured with Nitro v3 nightly by default. +- [Drizzle ORM v1 Beta](https://orm.drizzle.team/docs/relations-v1-v2) - Drizzle ORM v1 is in beta with relations v2. +- [Better Auth beta](https://github.com/better-auth/better-auth/pull/6913) - We're using a separate branch of Better Auth that supports Drizzle relations v2. ## Goodies @@ -61,23 +116,35 @@ Refer to the [TanStack Start hosting docs](https://tanstack.com/start/latest/doc We use **pnpm** by default, but you can modify these scripts in [package.json](./package.json) to use your preferred package manager. -- **`auth:generate`** - Regenerate the [auth db schema](./src/lib/db/schema/auth.schema.ts) if you've made changes to your Better Auth [config](./src/lib/auth/auth.ts). -- **`db`** - Run [drizzle-kit](https://orm.drizzle.team/docs/kit-overview) commands. (e.g. `pnpm db generate`, `pnpm db studio`) +- **`auth:generate`** - Regenerate the [auth db schema](./packages/db/src/schema/auth.schema.ts) if you've made changes to your Better Auth [config](./packages/auth/src/auth.ts). - **`ui`** - The shadcn/ui CLI. (e.g. `pnpm ui add button`) - **`format`**, **`lint`**, **`check-types`** - Run Prettier, ESLint, and check TypeScript types respectively. - **`check`** - Run all three above. (e.g. `pnpm check`) - **`deps`** - Selectively upgrade dependencies via taze. +> [!TIP] +> Check the root [package.json](./package.json) and each workspace package's respective `package.json` to see the full list of available scripts. + #### Utilities -- [`auth/middleware.ts`](./src/lib/auth/middleware.ts) - Sample middleware for forcing authentication on server functions. (see [#5](https://github.com/dotnize/react-tanstarter/issues/5#issuecomment-2615905686) and [#17](https://github.com/dotnize/react-tanstarter/issues/17#issuecomment-2853482062)) -- [`theme-toggle.tsx`](./src/components/theme-toggle.tsx), [`theme-provider.tsx`](./src/components/theme-provider.tsx) - A theme toggle and provider for toggling between light and dark mode. ([#7](https://github.com/dotnize/react-tanstarter/issues/7#issuecomment-3141530412)) +- [`/auth/src/tanstack/middleware.ts`](./packages/auth/src/tanstack/middleware.ts) - Sample middleware for forcing authentication on server functions. (see [#5](https://github.com/dotnize/react-tanstarter/issues/5#issuecomment-2615905686) and [#17](https://github.com/dotnize/react-tanstarter/issues/17#issuecomment-2853482062)) +- [`/web/src/components/theme-toggle.tsx`](./apps/web/src/components/theme-toggle.tsx), [`/ui/lib/theme-provider.tsx`](./packages/ui/lib/theme-provider.tsx) - A theme toggle and provider for toggling between light and dark mode. ([#7](https://github.com/dotnize/react-tanstarter/issues/7#issuecomment-3141530412)) + +## Third‑party integrations + +The template is kept minimal by default, but is compatible with many third‑party integrations. Here are a few I use in my projects: + +- [Cloudflare R2](https://developers.cloudflare.com/r2/) - file storage +- [PostHog](https://posthog.com/) - analytics & observability +- [Resend](https://resend.com/) - email +- [Polar](https://polar.sh/) - billing ## License -Code in this template is public domain via [Unlicense](./LICENSE). Feel free to remove or replace for your own project. +[MIT](./LICENSE) -## Also check out +## Ecosystem -- [@tanstack/create-start](https://github.com/TanStack/create-tsrouter-app/blob/main/cli/ts-create-start/README.md) - The official CLI tool from the TanStack team to create Start projects. +- [TanStack MCP](https://tanstack.com/cli/latest/docs/mcp/connecting) - The official MCP server for searching the latest docs for TanStack libraries. - [awesome-tanstack-start](https://github.com/Balastrong/awesome-tanstack-start) - A curated list of awesome resources for TanStack Start. +- [shadcn/ui Directory](https://ui.shadcn.com/docs/directory), [shoogle.dev](https://shoogle.dev/) - Component directories for shadcn/ui. diff --git a/apps/web/.env.example b/apps/web/.env.example new file mode 100644 index 0000000..3a55957 --- /dev/null +++ b/apps/web/.env.example @@ -0,0 +1,10 @@ +VITE_BASE_URL=http://localhost:5173 + +# pnpm auth:secret +SERVER_AUTH_SECRET= + +# OAuth2 Providers +SERVER_GITHUB_CLIENT_ID= +SERVER_GITHUB_CLIENT_SECRET= +SERVER_GOOGLE_CLIENT_ID= +SERVER_GOOGLE_CLIENT_SECRET= \ No newline at end of file diff --git a/apps/web/.gitignore b/apps/web/.gitignore new file mode 100644 index 0000000..4f4baad --- /dev/null +++ b/apps/web/.gitignore @@ -0,0 +1,22 @@ +node_modules + +# Ignore lockfiles we don't use +# package-lock.json +# yarn.lock +# pnpm-lock.yaml +# bun.lock + +.DS_Store +.cache +.env + +.data +.vercel +.output +.wrangler +.netlify +dist +/build/ +/api/ +/server/build +/public/build diff --git a/components.json b/apps/web/components.json similarity index 56% rename from components.json rename to apps/web/components.json index 6078525..93c1b5e 100644 --- a/components.json +++ b/apps/web/components.json @@ -1,24 +1,25 @@ { "$schema": "https://ui.shadcn.com/schema.json", - "style": "base-vega", + "style": "base-maia", "rsc": false, "tsx": true, "tailwind": { "config": "", - "css": "src/styles.css", + "css": "../../packages/ui/styles/base.css", "baseColor": "neutral", "cssVariables": true, "prefix": "" }, - "iconLibrary": "lucide", + "iconLibrary": "remixicon", "aliases": { "components": "~/components", - "utils": "~/lib/utils", - "ui": "~/components/ui", - "lib": "~/lib", - "hooks": "~/hooks" + "utils": "@repo/ui/lib/utils", + "ui": "@repo/ui/components", + "lib": "@repo/ui/lib", + "hooks": "@repo/ui/hooks" }, "menuColor": "default", "menuAccent": "subtle", + "rtl": false, "registries": {} } diff --git a/apps/web/eslint.config.js b/apps/web/eslint.config.js new file mode 100644 index 0000000..d48e581 --- /dev/null +++ b/apps/web/eslint.config.js @@ -0,0 +1,3 @@ +import { tanstackConfig } from "@repo/eslint-config/tanstack"; + +export default tanstackConfig; diff --git a/apps/web/package.json b/apps/web/package.json new file mode 100644 index 0000000..62f9f80 --- /dev/null +++ b/apps/web/package.json @@ -0,0 +1,60 @@ +{ + "name": "@repo/web", + "private": true, + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "deploy": "vite build && wrangler deploy", + "preview": "vite preview", + "check-types": "tsc --noEmit", + "lint": "eslint .", + "format": "prettier --write .", + "ui": "pnpm dlx shadcn@latest", + "cf-typegen": "wrangler types", + "postinstall": "wrangler types", + "wrangler": "wrangler" + }, + "dependencies": { + "@remixicon/react": "catalog:", + "@repo/auth": "workspace:*", + "@repo/db": "workspace:*", + "@repo/ui": "workspace:*", + "@tanstack/react-form-start": "catalog:", + "@tanstack/react-query": "catalog:", + "@tanstack/react-router": "catalog:", + "@tanstack/react-router-ssr-query": "catalog:", + "@tanstack/react-start": "catalog:", + "date-fns": "catalog:", + "drizzle-orm": "catalog:", + "motion": "catalog:", + "react": "catalog:", + "react-dom": "catalog:", + "sonner": "catalog:", + "zod": "catalog:" + }, + "devDependencies": { + "@cloudflare/vite-plugin": "catalog:", + "@repo/eslint-config": "workspace:*", + "@repo/tsconfig": "workspace:*", + "@tailwindcss/vite": "catalog:", + "@tanstack/devtools-vite": "catalog:", + "@tanstack/react-devtools": "catalog:", + "@tanstack/react-form-devtools": "catalog:", + "@tanstack/react-query-devtools": "catalog:", + "@tanstack/react-router-devtools": "catalog:", + "@types/node": "catalog:", + "@types/react": "catalog:", + "@types/react-dom": "catalog:", + "@vitejs/plugin-react": "catalog:", + "babel-plugin-react-compiler": "catalog:", + "eslint": "catalog:", + "prettier": "catalog:", + "prettier-plugin-organize-imports": "catalog:", + "prettier-plugin-tailwindcss": "catalog:", + "tailwindcss": "catalog:", + "typescript": "catalog:", + "vite": "catalog:", + "wrangler": "catalog:" + } +} diff --git a/public/favicon.ico b/apps/web/public/favicon.ico similarity index 100% rename from public/favicon.ico rename to apps/web/public/favicon.ico diff --git a/src/components/default-catch-boundary.tsx b/apps/web/src/components/default-catch-boundary.tsx similarity index 96% rename from src/components/default-catch-boundary.tsx rename to apps/web/src/components/default-catch-boundary.tsx index 357b6cf..637f5f1 100644 --- a/src/components/default-catch-boundary.tsx +++ b/apps/web/src/components/default-catch-boundary.tsx @@ -1,3 +1,4 @@ +import { Button } from "@repo/ui/components/button"; import { ErrorComponent, type ErrorComponentProps, @@ -6,7 +7,6 @@ import { useMatch, useRouter, } from "@tanstack/react-router"; -import { Button } from "./ui/button"; export function DefaultCatchBoundary({ error }: Readonly) { const router = useRouter(); diff --git a/src/components/default-not-found.tsx b/apps/web/src/components/default-not-found.tsx similarity index 90% rename from src/components/default-not-found.tsx rename to apps/web/src/components/default-not-found.tsx index 5ce5868..11ec67b 100644 --- a/src/components/default-not-found.tsx +++ b/apps/web/src/components/default-not-found.tsx @@ -1,5 +1,5 @@ +import { Button } from "@repo/ui/components/button"; import { Link } from "@tanstack/react-router"; -import { Button } from "./ui/button"; export function DefaultNotFound() { return ( diff --git a/src/components/sign-in-social-button.tsx b/apps/web/src/components/sign-in-social-button.tsx similarity index 91% rename from src/components/sign-in-social-button.tsx rename to apps/web/src/components/sign-in-social-button.tsx index 9b73efd..4d38e54 100644 --- a/src/components/sign-in-social-button.tsx +++ b/apps/web/src/components/sign-in-social-button.tsx @@ -1,7 +1,7 @@ +import authClient from "@repo/auth/auth-client"; +import { Button } from "@repo/ui/components/button"; import { useMutation } from "@tanstack/react-query"; import { toast } from "sonner"; -import { Button } from "~/components/ui/button"; -import authClient from "~/lib/auth/auth-client"; interface SocialLoginButtonProps { provider: string; diff --git a/src/components/sign-out-button.tsx b/apps/web/src/components/sign-out-button.tsx similarity index 81% rename from src/components/sign-out-button.tsx rename to apps/web/src/components/sign-out-button.tsx index 93593d7..009eb6d 100644 --- a/src/components/sign-out-button.tsx +++ b/apps/web/src/components/sign-out-button.tsx @@ -1,8 +1,8 @@ +import authClient from "@repo/auth/auth-client"; +import { authQueryOptions } from "@repo/auth/tanstack/queries"; +import { Button } from "@repo/ui/components/button"; import { useQueryClient } from "@tanstack/react-query"; import { useRouter } from "@tanstack/react-router"; -import { Button } from "~/components/ui/button"; -import authClient from "~/lib/auth/auth-client"; -import { authQueryOptions } from "~/lib/auth/queries"; export function SignOutButton() { const queryClient = useQueryClient(); diff --git a/src/components/theme-toggle.tsx b/apps/web/src/components/theme-toggle.tsx similarity index 69% rename from src/components/theme-toggle.tsx rename to apps/web/src/components/theme-toggle.tsx index b63eb82..8a462f6 100644 --- a/src/components/theme-toggle.tsx +++ b/apps/web/src/components/theme-toggle.tsx @@ -1,13 +1,13 @@ -import { MoonIcon, SunIcon } from "lucide-react"; +import { RiMoonLine, RiSunLine } from "@remixicon/react"; -import { useTheme } from "~/components/theme-provider"; -import { Button } from "~/components/ui/button"; +import { Button } from "@repo/ui/components/button"; import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuTrigger, -} from "~/components/ui/dropdown-menu"; +} from "@repo/ui/components/dropdown-menu"; +import { useTheme } from "@repo/ui/lib/theme-provider"; export function ThemeToggle() { const { theme, setTheme } = useTheme(); @@ -15,8 +15,8 @@ export function ThemeToggle() { return ( }> - - + + Toggle theme diff --git a/src/routeTree.gen.ts b/apps/web/src/routeTree.gen.ts similarity index 100% rename from src/routeTree.gen.ts rename to apps/web/src/routeTree.gen.ts diff --git a/src/router.tsx b/apps/web/src/router.tsx similarity index 100% rename from src/router.tsx rename to apps/web/src/router.tsx diff --git a/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx similarity index 72% rename from src/routes/__root.tsx rename to apps/web/src/routes/__root.tsx index d0ddc26..f480078 100644 --- a/src/routes/__root.tsx +++ b/apps/web/src/routes/__root.tsx @@ -4,18 +4,20 @@ import { createRootRouteWithContext, HeadContent, Outlet, + ScriptOnce, Scripts, } from "@tanstack/react-router"; import { TanStackDevtools } from "@tanstack/react-devtools"; +// import { formDevtoolsPlugin } from "@tanstack/react-form-devtools"; import { ReactQueryDevtoolsPanel } from "@tanstack/react-query-devtools"; import { TanStackRouterDevtoolsPanel } from "@tanstack/react-router-devtools"; -import { authQueryOptions, type AuthQueryResult } from "~/lib/auth/queries"; +import { authQueryOptions, type AuthQueryResult } from "@repo/auth/tanstack/queries"; import appCss from "~/styles.css?url"; -import { ThemeProvider } from "~/components/theme-provider"; -import { Toaster } from "~/components/ui/sonner"; +import { Toaster } from "@repo/ui/components/sonner"; +import { ThemeProvider } from "@repo/ui/lib/theme-provider"; export const Route = createRootRouteWithContext<{ queryClient: QueryClient; @@ -40,11 +42,11 @@ export const Route = createRootRouteWithContext<{ content: "width=device-width, initial-scale=1", }, { - title: "React TanStarter", + title: "TanStarter", }, { name: "description", - content: "A minimal starter template for 🏝️ TanStack Start.", + content: "A monorepo template for 🏝️ TanStack Start and Cloudflare.", }, ], links: [{ rel: "stylesheet", href: appCss }], @@ -62,12 +64,20 @@ function RootComponent() { function RootDocument({ children }: { readonly children: React.ReactNode }) { return ( - // suppress since we're updating the "dark" class in ThemeProvider + // suppress since we're updating the "dark" class in a custom script below + + {/* Apply theme early to avoid FOUC */} + {`document.documentElement.classList.toggle( + 'dark', + localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches) + )`} + + {children} @@ -83,6 +93,7 @@ function RootDocument({ children }: { readonly children: React.ReactNode }) { name: "TanStack Router", render: , }, + // formDevtoolsPlugin(), ]} /> diff --git a/src/routes/_auth/dashboard/index.tsx b/apps/web/src/routes/_auth/dashboard/index.tsx similarity index 90% rename from src/routes/_auth/dashboard/index.tsx rename to apps/web/src/routes/_auth/dashboard/index.tsx index 5c40389..4d91835 100644 --- a/src/routes/_auth/dashboard/index.tsx +++ b/apps/web/src/routes/_auth/dashboard/index.tsx @@ -7,6 +7,7 @@ export const Route = createFileRoute("/_auth/dashboard/")({ function DashboardIndex() { const { user } = Route.useRouteContext(); + // you can also use useAuthSuspense() or useAuth() from @repo/auth/tanstack/hooks return (
diff --git a/src/routes/_auth/dashboard/route.tsx b/apps/web/src/routes/_auth/dashboard/route.tsx similarity index 95% rename from src/routes/_auth/dashboard/route.tsx rename to apps/web/src/routes/_auth/dashboard/route.tsx index 7fc959d..8afe30e 100644 --- a/src/routes/_auth/dashboard/route.tsx +++ b/apps/web/src/routes/_auth/dashboard/route.tsx @@ -1,5 +1,5 @@ +import { Button } from "@repo/ui/components/button"; import { createFileRoute, Link, Outlet } from "@tanstack/react-router"; -import { Button } from "~/components/ui/button"; export const Route = createFileRoute("/_auth/dashboard")({ component: DashboardLayout, diff --git a/src/routes/_auth/route.tsx b/apps/web/src/routes/_auth/route.tsx similarity index 88% rename from src/routes/_auth/route.tsx rename to apps/web/src/routes/_auth/route.tsx index fdd6e0b..bc01ca6 100644 --- a/src/routes/_auth/route.tsx +++ b/apps/web/src/routes/_auth/route.tsx @@ -1,5 +1,5 @@ +import { authQueryOptions } from "@repo/auth/tanstack/queries"; import { createFileRoute, Outlet, redirect } from "@tanstack/react-router"; -import { authQueryOptions } from "~/lib/auth/queries"; export const Route = createFileRoute("/_auth")({ component: Outlet, diff --git a/src/routes/_guest/login.tsx b/apps/web/src/routes/_guest/login.tsx similarity index 91% rename from src/routes/_guest/login.tsx rename to apps/web/src/routes/_guest/login.tsx index a89cb9a..e9b61a6 100644 --- a/src/routes/_guest/login.tsx +++ b/apps/web/src/routes/_guest/login.tsx @@ -1,12 +1,12 @@ +import { RiGalleryView, RiLoader4Line } from "@remixicon/react"; +import authClient from "@repo/auth/auth-client"; +import { Button } from "@repo/ui/components/button"; +import { Input } from "@repo/ui/components/input"; +import { Label } from "@repo/ui/components/label"; import { useMutation } from "@tanstack/react-query"; import { createFileRoute, Link } from "@tanstack/react-router"; -import { GalleryVerticalEnd, LoaderCircle } from "lucide-react"; import { toast } from "sonner"; import { SignInSocialButton } from "~/components/sign-in-social-button"; -import { Button } from "~/components/ui/button"; -import { Input } from "~/components/ui/input"; -import { Label } from "~/components/ui/label"; -import authClient from "~/lib/auth/auth-client"; export const Route = createFileRoute("/_guest/login")({ component: LoginForm, @@ -56,7 +56,7 @@ function LoginForm() {
- +
Acme Inc.
@@ -86,7 +86,7 @@ function LoginForm() { />
@@ -112,8 +112,7 @@ function LoginForm() {
- +
Acme Inc.
@@ -117,7 +117,7 @@ function SignupForm() { /> @@ -143,8 +143,7 @@ function SignupForm() {

- A minimal starter template for{" "} + A monorepo template for{" "} - dotnize/react-tanstarter + dotnize/tanstarter @@ -59,7 +58,7 @@ function HomePage() { } function UserAction() { - const { data: user } = useSuspenseQuery(authQueryOptions()); + const { user } = useAuthSuspense(); return user ? (

diff --git a/apps/web/src/styles.css b/apps/web/src/styles.css new file mode 100644 index 0000000..7bd3079 --- /dev/null +++ b/apps/web/src/styles.css @@ -0,0 +1,3 @@ +@import "@repo/ui/styles/base.css"; + +@source "./"; diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json new file mode 100644 index 0000000..a2398ff --- /dev/null +++ b/apps/web/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "@repo/tsconfig/base.json", + "compilerOptions": { + "paths": { + "~/*": ["./src/*"], + + // for shadcn CLI + "@repo/ui/*": ["../../packages/ui/*"] + } + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/vite.config.ts b/apps/web/vite.config.ts similarity index 87% rename from vite.config.ts rename to apps/web/vite.config.ts index 782c5c2..307af3d 100644 --- a/vite.config.ts +++ b/apps/web/vite.config.ts @@ -1,8 +1,8 @@ +import { cloudflare } from "@cloudflare/vite-plugin"; import tailwindcss from "@tailwindcss/vite"; import { devtools } from "@tanstack/devtools-vite"; import { tanstackStart } from "@tanstack/react-start/plugin/vite"; import viteReact from "@vitejs/plugin-react"; -import { nitro } from "nitro/vite"; import { defineConfig } from "vite"; export default defineConfig({ @@ -11,9 +11,9 @@ export default defineConfig({ }, plugins: [ devtools(), - tanstackStart(), // https://tanstack.com/start/latest/docs/framework/react/guide/hosting - nitro(), + cloudflare({ viteEnvironment: { name: "ssr" } }), + tanstackStart(), viteReact({ // https://react.dev/learn/react-compiler babel: { diff --git a/apps/web/wrangler.jsonc b/apps/web/wrangler.jsonc new file mode 100644 index 0000000..32ffded --- /dev/null +++ b/apps/web/wrangler.jsonc @@ -0,0 +1,10 @@ +{ + "$schema": "node_modules/wrangler/config-schema.json", + "name": "tanstarter", + "compatibility_date": "2026-01-20", + "compatibility_flags": ["nodejs_compat"], + "main": "@tanstack/react-start/server-entry", + "observability": { + "enabled": true, + }, +} diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index b159541..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,14 +0,0 @@ -services: - db: - image: postgres:alpine - ports: - - 5432:5432 - volumes: - - postgres_data_tanstarter:/var/lib/postgresql/data - environment: - - POSTGRES_USER=user - - POSTGRES_PASSWORD=password - - POSTGRES_DB=tanstarter - -volumes: - postgres_data_tanstarter: diff --git a/drizzle.config.ts b/drizzle.config.ts deleted file mode 100644 index ca126ab..0000000 --- a/drizzle.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { Config } from "drizzle-kit"; -import { env } from "~/env/server"; - -export default { - out: "./drizzle", - schema: "./src/lib/db/schema/index.ts", - breakpoints: true, - verbose: true, - strict: true, - dialect: "postgresql", - casing: "snake_case", - dbCredentials: { - url: env.DATABASE_URL, - }, -} satisfies Config; diff --git a/package.json b/package.json index 907513f..0d395c7 100644 --- a/package.json +++ b/package.json @@ -1,70 +1,45 @@ { "name": "tanstarter", "private": true, - "type": "module", "scripts": { - "dev": "vite dev --port 3000", - "build": "vite build", - "preview": "vite preview", - "start": "node .output/server/index.mjs", - "lint": "eslint .", + "build": "turbo run build", + "dev": "turbo run dev --parallel", + "dev:web": "turbo run dev --filter=@repo/web", + "deploy:web": "pnpm --filter=@repo/web run deploy", + "lint": "turbo run lint", "format": "prettier --write .", - "check-types": "tsc --noEmit", - "check": "pnpm format && pnpm lint && pnpm check-types", - "db": "drizzle-kit", - "deps": "pnpm dlx taze@latest -Ilw", - "deps:major": "pnpm dlx taze@latest major -Ilw", - "ui": "pnpm dlx shadcn@latest", + "check-types": "turbo run check-types", + "check": "pnpm format && turbo run lint && turbo run check-types", + "prepare": "husky", + "deps": "pnpm dlx taze@latest -Ilwr", + "deps:major": "pnpm dlx taze@latest major -Ilwr", + "wrangler": "pnpm --filter=@repo/web wrangler", + "db:generate": "pnpm --filter=@repo/db db generate && tsx scripts/migrations-flatten.ts", + "db:push": "pnpm --filter=@repo/db run db:local push", + "db:migrate:local": "pnpm --filter=@repo/web wrangler d1 migrations apply --local", + "db:migrate:prod": "pnpm --filter=@repo/web wrangler d1 migrations apply --remote", + "db": "pnpm --filter=@repo/db run db", + "db:local": "pnpm --filter=@repo/db run db:local", + "ui": "pnpm --filter=@repo/ui run ui", + "ui:web": "pnpm --filter=@repo/web run ui", "auth:secret": "pnpm dlx @better-auth/cli@latest secret", - "auth:generate": "pnpm dlx @better-auth/cli@latest generate --config ./src/lib/auth/auth.ts --y --output ./src/lib/db/schema/auth.schema.ts && prettier --write ./src/lib/db/schema/auth.schema.ts" + "auth:generate": "pnpm --filter=@repo/db run auth:generate", + "skills": "pnpm dlx skills@latest" }, - "dependencies": { - "@base-ui/react": "^1.1.0", - "@t3-oss/env-core": "^0.13.10", - "@tanstack/react-query": "^5.90.20", - "@tanstack/react-router": "^1.158.0", - "@tanstack/react-router-ssr-query": "^1.158.0", - "@tanstack/react-start": "^1.158.0", - "better-auth": "^1.4.18", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "drizzle-orm": "^0.45.1", - "lucide-react": "^0.563.0", - "nitro": "npm:nitro-nightly@latest", - "postgres": "^3.4.8", - "react": "^19.2.4", - "react-dom": "^19.2.4", - "shadcn": "^3.8.2", - "sonner": "^2.0.7", - "tailwind-merge": "^3.4.0", - "zod": "^4.3.6" + "lint-staged": { + "*": "prettier --ignore-unknown --write" }, "devDependencies": { - "@eslint-react/eslint-plugin": "^2.9.4", - "@eslint/js": "^9.39.2", - "@tailwindcss/vite": "^4.1.18", - "@tanstack/devtools-vite": "^0.5.0", - "@tanstack/eslint-plugin-query": "^5.91.4", - "@tanstack/eslint-plugin-router": "^1.155.0", - "@tanstack/react-devtools": "^0.9.4", - "@tanstack/react-query-devtools": "^5.91.3", - "@tanstack/react-router-devtools": "^1.158.0", - "@types/node": "^24.10.10", - "@types/react": "^19.2.10", - "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^5.1.3", - "babel-plugin-react-compiler": "^1.0.0", - "drizzle-kit": "^0.31.8", - "eslint": "^9.39.2", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-react-hooks": "^7.0.1", - "prettier": "^3.8.1", - "prettier-plugin-organize-imports": "^4.3.0", - "prettier-plugin-tailwindcss": "^0.7.2", - "tailwindcss": "^4.1.18", - "tw-animate-css": "^1.4.0", - "typescript": "^5.9.3", - "typescript-eslint": "^8.54.0", - "vite": "^8.0.0-beta.12" + "husky": "catalog:", + "lint-staged": "catalog:", + "prettier": "catalog:", + "prettier-plugin-organize-imports": "catalog:", + "prettier-plugin-tailwindcss": "catalog:", + "tsx": "catalog:", + "turbo": "catalog:" + }, + "packageManager": "pnpm@10.28.2", + "engines": { + "node": ">=24" } } diff --git a/packages/auth/eslint.config.js b/packages/auth/eslint.config.js new file mode 100644 index 0000000..e6835a3 --- /dev/null +++ b/packages/auth/eslint.config.js @@ -0,0 +1,3 @@ +import { config } from "@repo/eslint-config/base"; + +export default config; diff --git a/packages/auth/package.json b/packages/auth/package.json new file mode 100644 index 0000000..073204e --- /dev/null +++ b/packages/auth/package.json @@ -0,0 +1,29 @@ +{ + "name": "@repo/auth", + "version": "0.0.0", + "type": "module", + "private": true, + "scripts": { + "lint": "eslint .", + "check-types": "tsc --noEmit" + }, + "exports": { + "./*": "./src/*.ts" + }, + "dependencies": { + "@better-auth/drizzle-adapter": "catalog:", + "better-auth": "catalog:" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/tsconfig": "workspace:*", + "@types/node": "catalog:", + "eslint": "catalog:", + "typescript": "catalog:" + }, + "peerDependencies": { + "@repo/db": "workspace:*", + "@tanstack/react-query": "catalog:", + "@tanstack/react-start": "catalog:" + } +} diff --git a/src/lib/auth/auth-client.ts b/packages/auth/src/auth-client.ts similarity index 65% rename from src/lib/auth/auth-client.ts rename to packages/auth/src/auth-client.ts index eefd5fa..30b3ef6 100644 --- a/src/lib/auth/auth-client.ts +++ b/packages/auth/src/auth-client.ts @@ -1,8 +1,7 @@ import { createAuthClient } from "better-auth/react"; -import { env } from "~/env/client"; const authClient = createAuthClient({ - baseURL: env.VITE_BASE_URL, + baseURL: process.env.VITE_BASE_URL, }); export default authClient; diff --git a/src/lib/auth/auth.ts b/packages/auth/src/auth.ts similarity index 68% rename from src/lib/auth/auth.ts rename to packages/auth/src/auth.ts index 940d849..ac48519 100644 --- a/src/lib/auth/auth.ts +++ b/packages/auth/src/auth.ts @@ -1,20 +1,20 @@ +import { drizzleAdapter } from "@better-auth/drizzle-adapter/relations-v2"; import { createServerOnlyFn } from "@tanstack/react-start"; -import { drizzleAdapter } from "better-auth/adapters/drizzle"; import { betterAuth } from "better-auth/minimal"; import { tanstackStartCookies } from "better-auth/tanstack-start"; -import { env } from "~/env/server"; -import { db } from "~/lib/db"; -import * as schema from "~/lib/db/schema"; +import { getDb } from "@repo/db"; +import * as schema from "@repo/db/schema"; const getAuthConfig = createServerOnlyFn(() => betterAuth({ - baseURL: env.VITE_BASE_URL, + baseURL: process.env.VITE_BASE_URL, + secret: process.env.SERVER_AUTH_SECRET, telemetry: { enabled: false, }, - database: drizzleAdapter(db, { - provider: "pg", + database: drizzleAdapter(getDb(), { + provider: "sqlite", schema, }), @@ -31,13 +31,9 @@ const getAuthConfig = createServerOnlyFn(() => // https://www.better-auth.com/docs/concepts/oauth socialProviders: { - github: { - clientId: env.GITHUB_CLIENT_ID!, - clientSecret: env.GITHUB_CLIENT_SECRET!, - }, google: { - clientId: env.GOOGLE_CLIENT_ID!, - clientSecret: env.GOOGLE_CLIENT_SECRET!, + clientId: process.env.SERVER_GOOGLE_CLIENT_ID!, + clientSecret: process.env.SERVER_GOOGLE_CLIENT_SECRET!, }, }, diff --git a/src/lib/auth/functions.ts b/packages/auth/src/tanstack/functions.ts similarity index 93% rename from src/lib/auth/functions.ts rename to packages/auth/src/tanstack/functions.ts index 5373497..3e46526 100644 --- a/src/lib/auth/functions.ts +++ b/packages/auth/src/tanstack/functions.ts @@ -1,6 +1,6 @@ import { createServerFn } from "@tanstack/react-start"; import { getRequest, setResponseHeader } from "@tanstack/react-start/server"; -import { auth } from "~/lib/auth/auth"; +import { auth } from "../auth"; export const $getUser = createServerFn({ method: "GET" }).handler(async () => { const session = await auth.api.getSession({ diff --git a/packages/auth/src/tanstack/hooks.ts b/packages/auth/src/tanstack/hooks.ts new file mode 100644 index 0000000..26ab24c --- /dev/null +++ b/packages/auth/src/tanstack/hooks.ts @@ -0,0 +1,12 @@ +import { useQuery, useSuspenseQuery } from "@tanstack/react-query"; +import { authQueryOptions } from "./queries"; + +export function useAuth() { + const { data: user, isPending } = useQuery(authQueryOptions()); + return { user, isPending }; +} + +export function useAuthSuspense() { + const { data: user, isPending } = useSuspenseQuery(authQueryOptions()); + return { user, isPending }; +} diff --git a/src/lib/auth/middleware.ts b/packages/auth/src/tanstack/middleware.ts similarity index 96% rename from src/lib/auth/middleware.ts rename to packages/auth/src/tanstack/middleware.ts index bcbfe76..b7e60ae 100644 --- a/src/lib/auth/middleware.ts +++ b/packages/auth/src/tanstack/middleware.ts @@ -4,7 +4,7 @@ import { setResponseHeader, setResponseStatus, } from "@tanstack/react-start/server"; -import { auth } from "~/lib/auth/auth"; +import { auth } from "../auth"; // https://tanstack.com/start/latest/docs/framework/react/guide/middleware // This is just an example middleware that you can modify and use in your server functions or routes. diff --git a/src/lib/auth/queries.ts b/packages/auth/src/tanstack/queries.ts similarity index 100% rename from src/lib/auth/queries.ts rename to packages/auth/src/tanstack/queries.ts diff --git a/packages/auth/tsconfig.json b/packages/auth/tsconfig.json new file mode 100644 index 0000000..5ba9fc3 --- /dev/null +++ b/packages/auth/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@repo/tsconfig/base.json", + "include": ["**/*.ts", "../../apps/web/worker-configuration.d.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/db/.env.example b/packages/db/.env.example new file mode 100644 index 0000000..4adc59c --- /dev/null +++ b/packages/db/.env.example @@ -0,0 +1,5 @@ +# For remote D1 drizzle-kit migrations +# https://orm.drizzle.team/docs/guides/d1-http-with-drizzle-kit +SERVER_CF_ACCOUNT_ID= +SERVER_CF_DB_ID= +SERVER_CF_D1_TOKEN= \ No newline at end of file diff --git a/packages/db/drizzle.config.ts b/packages/db/drizzle.config.ts new file mode 100644 index 0000000..cd8d11b --- /dev/null +++ b/packages/db/drizzle.config.ts @@ -0,0 +1,29 @@ +import type { Config } from "drizzle-kit"; + +const { + SERVER_LOCAL_DB_PATH, + SERVER_CF_DB_ID, + SERVER_CF_D1_TOKEN, + SERVER_CF_ACCOUNT_ID, +} = process.env; + +export default { + out: "../../apps/web/migrations", + schema: "./src/schema/index.ts", + breakpoints: true, + verbose: true, + strict: true, + casing: "snake_case", + + dialect: "sqlite", + driver: SERVER_LOCAL_DB_PATH ? undefined : "d1-http", + dbCredentials: SERVER_LOCAL_DB_PATH + ? { + url: SERVER_LOCAL_DB_PATH, + } + : { + accountId: SERVER_CF_ACCOUNT_ID!, + databaseId: SERVER_CF_DB_ID!, + token: SERVER_CF_D1_TOKEN!, + }, +} satisfies Config; diff --git a/packages/db/eslint.config.js b/packages/db/eslint.config.js new file mode 100644 index 0000000..e6835a3 --- /dev/null +++ b/packages/db/eslint.config.js @@ -0,0 +1,3 @@ +import { config } from "@repo/eslint-config/base"; + +export default config; diff --git a/packages/db/package.json b/packages/db/package.json new file mode 100644 index 0000000..e837902 --- /dev/null +++ b/packages/db/package.json @@ -0,0 +1,28 @@ +{ + "name": "@repo/db", + "version": "0.0.0", + "type": "module", + "private": true, + "scripts": { + "db": "drizzle-kit", + "db:local": "SERVER_LOCAL_DB_PATH=$(find ../../apps/web/.wrangler/state/v3/d1/miniflare-D1DatabaseObject -type f -name '*.sqlite' -print -quit) drizzle-kit", + "auth:generate": "pnpm dlx https://pkg.pr.new/better-auth/better-auth/@better-auth/cli@6913 generate --config ../auth/src/auth.ts --y --output ./src/schema/auth.schema.ts", + "lint": "eslint .", + "check-types": "tsc --noEmit" + }, + "exports": { + ".": "./src/index.ts", + "./schema": "./src/schema/index.ts" + }, + "dependencies": { + "drizzle-orm": "catalog:" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/tsconfig": "workspace:*", + "@types/node": "catalog:", + "drizzle-kit": "catalog:", + "eslint": "catalog:", + "typescript": "catalog:" + } +} diff --git a/packages/db/src/index.ts b/packages/db/src/index.ts new file mode 100644 index 0000000..ac758cb --- /dev/null +++ b/packages/db/src/index.ts @@ -0,0 +1,16 @@ +import { env } from "cloudflare:workers"; +import { drizzle } from "drizzle-orm/d1"; +import * as schemas from "./schema"; +import { relations } from "./schema/relations"; + +const { relations: authRelations, ...schema } = schemas; + +export function getDb() { + return drizzle(env.db, { + schema, + // authRelations must come first, since it's using defineRelations as the main relation + // https://orm.drizzle.team/docs/relations-v2#relations-parts + relations: { ...authRelations, ...relations }, + casing: "snake_case", + }); +} diff --git a/packages/db/src/schema/auth.schema.ts b/packages/db/src/schema/auth.schema.ts new file mode 100644 index 0000000..28c5660 --- /dev/null +++ b/packages/db/src/schema/auth.schema.ts @@ -0,0 +1,114 @@ +import { defineRelations, sql } from "drizzle-orm"; +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; + +export const user = sqliteTable("user", { + id: text("id").primaryKey(), + email: text("email").notNull().unique(), + emailVerified: integer("email_verified", { mode: "boolean" }).default(false).notNull(), + name: text("name"), + image: text("image"), + createdAt: integer("created_at", { mode: "timestamp_ms" }) + .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + .notNull(), + updatedAt: integer("updated_at", { mode: "timestamp_ms" }) + .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + .$onUpdate(() => /* @__PURE__ */ new Date()) + .notNull(), +}); + +export const session = sqliteTable( + "session", + { + id: text("id").primaryKey(), + expiresAt: integer("expires_at", { mode: "timestamp_ms" }).notNull(), + token: text("token").notNull().unique(), + createdAt: integer("created_at", { mode: "timestamp_ms" }) + .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + .notNull(), + updatedAt: integer("updated_at", { mode: "timestamp_ms" }) + .$onUpdate(() => /* @__PURE__ */ new Date()) + .notNull(), + ipAddress: text("ip_address"), + userAgent: text("user_agent"), + userId: text("user_id") + .notNull() + .references(() => user.id, { onDelete: "cascade" }), + }, + (table) => [index("session_userId_idx").on(table.userId)], +); + +export const account = sqliteTable( + "account", + { + id: text("id").primaryKey(), + accountId: text("account_id").notNull(), + providerId: text("provider_id").notNull(), + userId: text("user_id") + .notNull() + .references(() => user.id, { onDelete: "cascade" }), + accessToken: text("access_token"), + refreshToken: text("refresh_token"), + idToken: text("id_token"), + accessTokenExpiresAt: integer("access_token_expires_at", { + mode: "timestamp_ms", + }), + refreshTokenExpiresAt: integer("refresh_token_expires_at", { + mode: "timestamp_ms", + }), + scope: text("scope"), + password: text("password"), + createdAt: integer("created_at", { mode: "timestamp_ms" }) + .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + .notNull(), + updatedAt: integer("updated_at", { mode: "timestamp_ms" }) + .$onUpdate(() => /* @__PURE__ */ new Date()) + .notNull(), + }, + (table) => [index("account_userId_idx").on(table.userId)], +); + +export const verification = sqliteTable( + "verification", + { + id: text("id").primaryKey(), + identifier: text("identifier").notNull(), + value: text("value").notNull(), + expiresAt: integer("expires_at", { mode: "timestamp_ms" }).notNull(), + createdAt: integer("created_at", { mode: "timestamp_ms" }) + .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + .notNull(), + updatedAt: integer("updated_at", { mode: "timestamp_ms" }) + .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + .$onUpdate(() => /* @__PURE__ */ new Date()) + .notNull(), + }, + (table) => [index("verification_identifier_idx").on(table.identifier)], +); + +export const relations = defineRelations( + { user, session, account, verification }, + (r) => ({ + user: { + sessions: r.many.session({ + from: r.user.id, + to: r.session.userId, + }), + accounts: r.many.account({ + from: r.user.id, + to: r.account.userId, + }), + }, + session: { + user: r.one.user({ + from: r.session.userId, + to: r.user.id, + }), + }, + account: { + user: r.one.user({ + from: r.account.userId, + to: r.user.id, + }), + }, + }), +); diff --git a/src/lib/db/schema/index.ts b/packages/db/src/schema/index.ts similarity index 100% rename from src/lib/db/schema/index.ts rename to packages/db/src/schema/index.ts diff --git a/packages/db/src/schema/relations.ts b/packages/db/src/schema/relations.ts new file mode 100644 index 0000000..bcdb97c --- /dev/null +++ b/packages/db/src/schema/relations.ts @@ -0,0 +1,7 @@ +import { defineRelationsPart } from "drizzle-orm"; +import * as schema from "./"; + +export const relations = defineRelationsPart(schema, (r) => ({ + // Define your relations here + // https://orm.drizzle.team/docs/relations-v2 +})); diff --git a/packages/db/tsconfig.json b/packages/db/tsconfig.json new file mode 100644 index 0000000..5ba9fc3 --- /dev/null +++ b/packages/db/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@repo/tsconfig/base.json", + "include": ["**/*.ts", "../../apps/web/worker-configuration.d.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/ui/components.json b/packages/ui/components.json new file mode 100644 index 0000000..9c2f7a6 --- /dev/null +++ b/packages/ui/components.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "base-maia", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "styles/base.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "remixicon", + "aliases": { + "components": "@repo/ui/components", + "utils": "@repo/ui/lib/utils", + "ui": "@repo/ui/components", + "lib": "@repo/ui/lib", + "hooks": "@repo/ui/hooks" + }, + "menuColor": "default", + "menuAccent": "subtle", + "rtl": false, + "registries": {} +} diff --git a/src/components/ui/button.tsx b/packages/ui/components/button.tsx similarity index 52% rename from src/components/ui/button.tsx rename to packages/ui/components/button.tsx index d597d1a..eec573c 100644 --- a/src/components/ui/button.tsx +++ b/packages/ui/components/button.tsx @@ -1,16 +1,16 @@ import { Button as ButtonPrimitive } from "@base-ui/react/button"; import { cva, type VariantProps } from "class-variance-authority"; -import { cn } from "~/lib/utils"; +import { cn } from "@repo/ui/lib/utils"; const buttonVariants = cva( - "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-md border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none", + "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-4xl border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none", { variants: { variant: { default: "bg-primary text-primary-foreground hover:bg-primary/80", outline: - "border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground shadow-xs", + "border-border bg-input/30 hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground", secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground", ghost: @@ -21,15 +21,13 @@ const buttonVariants = cva( }, size: { default: - "h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", - xs: "h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3", - sm: "h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5", - lg: "h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3", + "h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5", + xs: "h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3", + sm: "h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2", + lg: "h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3", icon: "size-9", - "icon-xs": - "size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3", - "icon-sm": - "size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md", + "icon-xs": "size-6 [&_svg:not([class*='size-'])]:size-3", + "icon-sm": "size-8", "icon-lg": "size-10", }, }, diff --git a/src/components/ui/dropdown-menu.tsx b/packages/ui/components/dropdown-menu.tsx similarity index 82% rename from src/components/ui/dropdown-menu.tsx rename to packages/ui/components/dropdown-menu.tsx index 61d43ab..cc6aad7 100644 --- a/src/components/ui/dropdown-menu.tsx +++ b/packages/ui/components/dropdown-menu.tsx @@ -1,8 +1,10 @@ +"use client"; + import { Menu as MenuPrimitive } from "@base-ui/react/menu"; import * as React from "react"; -import { CheckIcon, ChevronRightIcon } from "lucide-react"; -import { cn } from "~/lib/utils"; +import { RiArrowRightSLine, RiCheckLine } from "@remixicon/react"; +import { cn } from "@repo/ui/lib/utils"; function DropdownMenu({ ...props }: MenuPrimitive.Root.Props) { return ; @@ -37,7 +39,7 @@ function DropdownMenuContent({ {children} - + ); } @@ -134,7 +136,7 @@ function DropdownMenuSubContent({ - + {children} @@ -188,7 +190,7 @@ function DropdownMenuRadioItem({ - + {children} @@ -210,7 +212,7 @@ function DropdownMenuSeparator({ className, ...props }: MenuPrimitive.Separator. return ( ); diff --git a/packages/ui/components/input.tsx b/packages/ui/components/input.tsx new file mode 100644 index 0000000..9afa897 --- /dev/null +++ b/packages/ui/components/input.tsx @@ -0,0 +1,20 @@ +import { Input as InputPrimitive } from "@base-ui/react/input"; +import * as React from "react"; + +import { cn } from "@repo/ui/lib/utils"; + +function Input({ className, type, ...props }: React.ComponentProps<"input">) { + return ( + + ); +} + +export { Input }; diff --git a/src/components/ui/label.tsx b/packages/ui/components/label.tsx similarity index 90% rename from src/components/ui/label.tsx rename to packages/ui/components/label.tsx index 2eb658c..ccff2c5 100644 --- a/src/components/ui/label.tsx +++ b/packages/ui/components/label.tsx @@ -1,8 +1,6 @@ -"use client"; - import * as React from "react"; -import { cn } from "~/lib/utils"; +import { cn } from "@repo/ui/lib/utils"; function Label({ className, ...props }: React.ComponentProps<"label">) { return ( diff --git a/src/components/ui/sonner.tsx b/packages/ui/components/sonner.tsx similarity index 56% rename from src/components/ui/sonner.tsx rename to packages/ui/components/sonner.tsx index 2ecd9c7..2a84643 100644 --- a/src/components/ui/sonner.tsx +++ b/packages/ui/components/sonner.tsx @@ -1,12 +1,14 @@ +"use client"; + import { - CircleCheckIcon, - InfoIcon, - Loader2Icon, - OctagonXIcon, - TriangleAlertIcon, -} from "lucide-react"; + RiCheckboxCircleLine, + RiCloseCircleLine, + RiErrorWarningLine, + RiInformationLine, + RiLoaderLine, +} from "@remixicon/react"; +import { useTheme } from "@repo/ui/lib/theme-provider"; import { Toaster as Sonner, type ToasterProps } from "sonner"; -import { useTheme } from "~/components/theme-provider"; const Toaster = ({ ...props }: ToasterProps) => { const { theme = "system" } = useTheme(); @@ -16,11 +18,11 @@ const Toaster = ({ ...props }: ToasterProps) => { theme={theme} className="toaster group" icons={{ - success: , - info: , - warning: , - error: , - loading: , + success: , + info: , + warning: , + error: , + loading: , }} style={ { diff --git a/packages/ui/eslint.config.js b/packages/ui/eslint.config.js new file mode 100644 index 0000000..d48e581 --- /dev/null +++ b/packages/ui/eslint.config.js @@ -0,0 +1,3 @@ +import { tanstackConfig } from "@repo/eslint-config/tanstack"; + +export default tanstackConfig; diff --git a/packages/ui/hooks/use-mobile.ts b/packages/ui/hooks/use-mobile.ts new file mode 100644 index 0000000..0b3a651 --- /dev/null +++ b/packages/ui/hooks/use-mobile.ts @@ -0,0 +1,20 @@ +import * as React from "react"; + +const MOBILE_BREAKPOINT = 768; + +export function useIsMobile() { + const [isMobile, setIsMobile] = React.useState(undefined); + + React.useEffect(() => { + const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`); + const onChange = () => { + setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); + }; + mql.addEventListener("change", onChange); + // eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect + setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); + return () => mql.removeEventListener("change", onChange); + }, []); + + return !!isMobile; +} diff --git a/packages/ui/index.js b/packages/ui/index.js new file mode 100644 index 0000000..27574bb --- /dev/null +++ b/packages/ui/index.js @@ -0,0 +1 @@ +// empty as we never import anything from here diff --git a/src/components/theme-provider.tsx b/packages/ui/lib/theme-provider.tsx similarity index 88% rename from src/components/theme-provider.tsx rename to packages/ui/lib/theme-provider.tsx index f811cd1..1b67bd6 100644 --- a/src/components/theme-provider.tsx +++ b/packages/ui/lib/theme-provider.tsx @@ -1,4 +1,3 @@ -import { ScriptOnce } from "@tanstack/react-router"; import { createContext, use, useCallback, useEffect, useMemo, useState } from "react"; type Theme = "dark" | "light" | "system"; @@ -91,13 +90,6 @@ export function ThemeProvider({ return ( - - {/* Apply theme early to avoid FOUC */} - {`document.documentElement.classList.toggle( - 'dark', - localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches) - )`} - {children} ); diff --git a/src/lib/utils.ts b/packages/ui/lib/utils.ts similarity index 100% rename from src/lib/utils.ts rename to packages/ui/lib/utils.ts diff --git a/packages/ui/package.json b/packages/ui/package.json new file mode 100644 index 0000000..9463867 --- /dev/null +++ b/packages/ui/package.json @@ -0,0 +1,45 @@ +{ + "name": "@repo/ui", + "version": "0.0.0", + "type": "module", + "private": true, + "scripts": { + "ui": "pnpm dlx shadcn@latest", + "lint": "eslint .", + "check-types": "tsc --noEmit" + }, + "exports": { + ".": "./index.js", + "./*": "./*.ts", + "./styles/base.css": "./styles/base.css", + "./lib/theme-provider": "./lib/theme-provider.tsx", + "./components/*": "./components/*.tsx" + }, + "dependencies": { + "@base-ui/react": "catalog:", + "@remixicon/react": "catalog:", + "@tanstack/react-form-start": "catalog:", + "class-variance-authority": "catalog:", + "clsx": "catalog:", + "date-fns": "catalog:", + "motion": "catalog:", + "shadcn": "catalog:", + "sonner": "catalog:", + "tailwind-merge": "catalog:", + "tw-animate-css": "catalog:", + "zod": "catalog:" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/tsconfig": "workspace:*", + "@types/react": "catalog:", + "@types/react-dom": "catalog:", + "eslint": "catalog:", + "tailwindcss": "catalog:", + "typescript": "catalog:" + }, + "peerDependencies": { + "react": "catalog:", + "react-dom": "catalog:" + } +} diff --git a/src/styles.css b/packages/ui/styles/base.css similarity index 98% rename from src/styles.css rename to packages/ui/styles/base.css index d435aa8..e54f25a 100644 --- a/src/styles.css +++ b/packages/ui/styles/base.css @@ -1,4 +1,6 @@ -@import "tailwindcss" source("./"); +@import "tailwindcss" source(none); + +@source "../**/*.{ts,tsx}"; @import "tw-animate-css"; @import "shadcn/tailwind.css"; diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json new file mode 100644 index 0000000..2037e51 --- /dev/null +++ b/packages/ui/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@repo/tsconfig/base.json", + "compilerOptions": { + "paths": { + "@repo/ui/*": ["./*"] + } + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..a6b7c10 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,67 @@ +packages: + - apps/* + - packages/* + - tooling/* + +catalog: + '@base-ui/react': ^1.1.0 + '@better-auth/drizzle-adapter': https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913 + '@cloudflare/vite-plugin': ^1.23.0 + '@eslint-react/eslint-plugin': ^2.9.4 + '@eslint/js': ^9.39.2 + '@remixicon/react': ^4.9.0 + '@tailwindcss/vite': ^4.1.18 + '@tanstack/devtools-vite': ^0.5.0 + '@tanstack/eslint-plugin-query': ^5.91.4 + '@tanstack/eslint-plugin-router': ^1.155.0 + '@tanstack/react-devtools': ^0.9.4 + '@tanstack/react-form-devtools': ^0.2.13 + '@tanstack/react-form-start': ^1.28.0 + '@tanstack/react-query': ^5.90.20 + '@tanstack/react-query-devtools': ^5.91.3 + '@tanstack/react-router': ^1.158.0 + '@tanstack/react-router-devtools': ^1.158.0 + '@tanstack/react-router-ssr-query': ^1.158.0 + '@tanstack/react-start': ^1.158.0 + '@types/node': ^24.10.10 + '@types/react': ^19.2.10 + '@types/react-dom': ^19.2.3 + '@vitejs/plugin-react': ^5.1.3 + babel-plugin-react-compiler: ^1.0.0 + better-auth: beta + class-variance-authority: ^0.7.1 + clsx: ^2.1.1 + date-fns: ^4.1.0 + drizzle-kit: beta + drizzle-orm: beta + eslint: ^9.39.2 + eslint-config-prettier: ^10.1.8 + eslint-plugin-only-warn: ^1.1.0 + eslint-plugin-react-hooks: ^7.0.1 + eslint-plugin-turbo: ^2.8.3 + husky: ^9.1.7 + lint-staged: ^16.2.7 + motion: ^12.31.0 + prettier: ^3.8.1 + prettier-plugin-organize-imports: ^4.3.0 + prettier-plugin-tailwindcss: ^0.7.2 + react: ^19.2.4 + react-dom: ^19.2.4 + shadcn: ^3.8.2 + sonner: ^2.0.7 + tailwind-merge: ^3.4.0 + tailwindcss: ^4.1.18 + tsx: ^4.21.0 + turbo: ^2.8.3 + tw-animate-css: ^1.4.0 + typescript: ^5.9.3 + typescript-eslint: ^8.54.0 + vite: ^8.0.0-beta.12 + wrangler: ^4.62.0 + zod: ^4.3.6 + +catalogMode: prefer + +overrides: + '@better-auth/drizzle-adapter': https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913 + vite: ^8.0.0-beta.12 diff --git a/scripts/migrations-flatten.ts b/scripts/migrations-flatten.ts new file mode 100644 index 0000000..2c89a2e --- /dev/null +++ b/scripts/migrations-flatten.ts @@ -0,0 +1,50 @@ +// This script flattens Drizzle Kit v1 migrations for Cloudflare D1 +// It moves apps/web/migrations//migration.sql to apps/web/migrations/.sql +// Issue: https://github.com/drizzle-team/drizzle-orm/issues/5166 + +import { promises as fs } from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const scriptDir = path.dirname(fileURLToPath(import.meta.url)); +const migrationsDir = path.resolve(scriptDir, "..", "apps", "web", "migrations"); + +async function pathExists(filePath: string) { + try { + await fs.access(filePath); + return true; + } catch { + return false; + } +} + +async function main() { + if (!(await pathExists(migrationsDir))) { + console.error(`Migrations directory not found: ${migrationsDir}`); + process.exit(1); + } + + const entries = await fs.readdir(migrationsDir, { withFileTypes: true }); + + for (const entry of entries) { + if (!entry.isDirectory()) continue; + + const dirName = entry.name; + if (dirName === "meta") continue; + + const dirPath = path.join(migrationsDir, dirName); + const migrationFile = path.join(dirPath, "migration.sql"); + + if (await pathExists(migrationFile)) { + const targetFile = path.join(migrationsDir, `${dirName}.sql`); + console.log(`Moving ${migrationFile} to ${targetFile}`); + await fs.rm(targetFile, { force: true }); + await fs.rename(migrationFile, targetFile); + } + } +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx deleted file mode 100644 index 610d208..0000000 --- a/src/components/ui/input.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { Input as InputPrimitive } from "@base-ui/react/input"; -import * as React from "react"; - -import { cn } from "~/lib/utils"; - -function Input({ className, type, ...props }: React.ComponentProps<"input">) { - return ( - - ); -} - -export { Input }; diff --git a/src/env/client.ts b/src/env/client.ts deleted file mode 100644 index 9674e79..0000000 --- a/src/env/client.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { createEnv } from "@t3-oss/env-core"; -import * as z from "zod"; - -export const env = createEnv({ - clientPrefix: "VITE_", - client: { - VITE_BASE_URL: z.url().default("http://localhost:3000"), - }, - runtimeEnv: import.meta.env, -}); diff --git a/src/env/server.ts b/src/env/server.ts deleted file mode 100644 index 9c8f67e..0000000 --- a/src/env/server.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { createEnv } from "@t3-oss/env-core"; -import * as z from "zod"; - -export const env = createEnv({ - server: { - DATABASE_URL: z.url(), - VITE_BASE_URL: z.url().default("http://localhost:3000"), - BETTER_AUTH_SECRET: z.string().min(1), - - // OAuth2 providers, optional, update as needed - GITHUB_CLIENT_ID: z.string().optional(), - GITHUB_CLIENT_SECRET: z.string().optional(), - GOOGLE_CLIENT_ID: z.string().optional(), - GOOGLE_CLIENT_SECRET: z.string().optional(), - }, - runtimeEnv: process.env, -}); diff --git a/src/lib/db/index.ts b/src/lib/db/index.ts deleted file mode 100644 index c73cf5c..0000000 --- a/src/lib/db/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { createServerOnlyFn } from "@tanstack/react-start"; -import { drizzle } from "drizzle-orm/postgres-js"; -import postgres from "postgres"; -import { env } from "~/env/server"; - -import * as schema from "~/lib/db/schema"; - -const client = postgres(env.DATABASE_URL); - -const getDatabase = createServerOnlyFn(() => - drizzle({ - client, - schema, - casing: "snake_case", - }), -); - -export const db = getDatabase(); diff --git a/src/lib/db/schema/auth.schema.ts b/src/lib/db/schema/auth.schema.ts deleted file mode 100644 index 92103da..0000000 --- a/src/lib/db/schema/auth.schema.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { relations } from "drizzle-orm"; -import { boolean, index, pgTable, text, timestamp } from "drizzle-orm/pg-core"; - -export const user = pgTable("user", { - id: text("id").primaryKey(), - name: text("name").notNull(), - email: text("email").notNull().unique(), - emailVerified: boolean("email_verified").default(false).notNull(), - image: text("image"), - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at") - .defaultNow() - .$onUpdate(() => /* @__PURE__ */ new Date()) - .notNull(), -}); - -export const session = pgTable( - "session", - { - id: text("id").primaryKey(), - expiresAt: timestamp("expires_at").notNull(), - token: text("token").notNull().unique(), - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at") - .$onUpdate(() => /* @__PURE__ */ new Date()) - .notNull(), - ipAddress: text("ip_address"), - userAgent: text("user_agent"), - userId: text("user_id") - .notNull() - .references(() => user.id, { onDelete: "cascade" }), - }, - (table) => [index("session_userId_idx").on(table.userId)], -); - -export const account = pgTable( - "account", - { - id: text("id").primaryKey(), - accountId: text("account_id").notNull(), - providerId: text("provider_id").notNull(), - userId: text("user_id") - .notNull() - .references(() => user.id, { onDelete: "cascade" }), - accessToken: text("access_token"), - refreshToken: text("refresh_token"), - idToken: text("id_token"), - accessTokenExpiresAt: timestamp("access_token_expires_at"), - refreshTokenExpiresAt: timestamp("refresh_token_expires_at"), - scope: text("scope"), - password: text("password"), - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at") - .$onUpdate(() => /* @__PURE__ */ new Date()) - .notNull(), - }, - (table) => [index("account_userId_idx").on(table.userId)], -); - -export const verification = pgTable( - "verification", - { - id: text("id").primaryKey(), - identifier: text("identifier").notNull(), - value: text("value").notNull(), - expiresAt: timestamp("expires_at").notNull(), - createdAt: timestamp("created_at").defaultNow().notNull(), - updatedAt: timestamp("updated_at") - .defaultNow() - .$onUpdate(() => /* @__PURE__ */ new Date()) - .notNull(), - }, - (table) => [index("verification_identifier_idx").on(table.identifier)], -); - -export const userRelations = relations(user, ({ many }) => ({ - sessions: many(session), - accounts: many(account), -})); - -export const sessionRelations = relations(session, ({ one }) => ({ - user: one(user, { - fields: [session.userId], - references: [user.id], - }), -})); - -export const accountRelations = relations(account, ({ one }) => ({ - user: one(user, { - fields: [account.userId], - references: [user.id], - }), -})); diff --git a/tooling/eslint-config/base.js b/tooling/eslint-config/base.js new file mode 100644 index 0000000..59bc6c4 --- /dev/null +++ b/tooling/eslint-config/base.js @@ -0,0 +1,40 @@ +import js from "@eslint/js"; +import eslintConfigPrettier from "eslint-config-prettier"; +import onlyWarn from "eslint-plugin-only-warn"; +import turboPlugin from "eslint-plugin-turbo"; +import tseslint from "typescript-eslint"; + +/** + * A shared ESLint configuration for the repository. + * + * @type {import("eslint").Linter.Config} + * */ +export const config = [ + js.configs.recommended, + eslintConfigPrettier, + ...tseslint.configs.recommended, + { + plugins: { + turbo: turboPlugin, + }, + rules: { + "turbo/no-undeclared-env-vars": "warn", + }, + }, + { + plugins: { + onlyWarn, + }, + }, + { + ignores: [ + "dist", + ".wrangler", + ".vercel", + ".netlify", + ".output", + "build/", + "worker-configuration.d.ts", + ], + }, +]; diff --git a/tooling/eslint-config/package.json b/tooling/eslint-config/package.json new file mode 100644 index 0000000..7c2bbb5 --- /dev/null +++ b/tooling/eslint-config/package.json @@ -0,0 +1,23 @@ +{ + "name": "@repo/eslint-config", + "version": "0.0.0", + "type": "module", + "private": true, + "exports": { + "./base": "./base.js", + "./tanstack": "./tanstack.js" + }, + "devDependencies": { + "@eslint-react/eslint-plugin": "catalog:", + "@eslint/js": "catalog:", + "@tanstack/eslint-plugin-query": "catalog:", + "@tanstack/eslint-plugin-router": "catalog:", + "eslint": "catalog:", + "eslint-config-prettier": "catalog:", + "eslint-plugin-only-warn": "catalog:", + "eslint-plugin-react-hooks": "catalog:", + "eslint-plugin-turbo": "catalog:", + "typescript": "catalog:", + "typescript-eslint": "catalog:" + } +} diff --git a/eslint.config.js b/tooling/eslint-config/tanstack.js similarity index 80% rename from eslint.config.js rename to tooling/eslint-config/tanstack.js index 14fd0cc..22a85cb 100644 --- a/eslint.config.js +++ b/tooling/eslint-config/tanstack.js @@ -6,8 +6,9 @@ import eslintConfigPrettier from "eslint-config-prettier"; import reactHooks from "eslint-plugin-react-hooks"; import { defineConfig } from "eslint/config"; import tseslint from "typescript-eslint"; +import { config as baseConfig } from "./base.js"; -export default defineConfig({ +export const tanstackConfig = defineConfig({ files: ["**/*.{ts,tsx}"], languageOptions: { parser: tseslint.parser, @@ -17,6 +18,7 @@ export default defineConfig({ }, }, extends: [ + ...baseConfig, js.configs.recommended, ...tseslint.configs.recommended, eslintConfigPrettier, @@ -30,5 +32,13 @@ export default defineConfig({ // You can override any rules here "@typescript-eslint/no-deprecated": "warn", }, - ignores: ["dist", ".wrangler", ".vercel", ".netlify", ".output", "build/"], + ignores: [ + "dist", + ".wrangler", + ".vercel", + ".netlify", + ".output", + "build/", + "worker-configuration.d.ts", + ], }); diff --git a/tsconfig.json b/tooling/tsconfig/base.json similarity index 83% rename from tsconfig.json rename to tooling/tsconfig/base.json index 3e7d3f6..d2634f2 100644 --- a/tsconfig.json +++ b/tooling/tsconfig/base.json @@ -1,5 +1,5 @@ { - "include": ["**/*.ts", "**/*.tsx"], + "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { "strict": true, "esModuleInterop": true, @@ -13,9 +13,6 @@ "target": "ES2022", "allowJs": true, "forceConsistentCasingInFileNames": true, - "paths": { - "~/*": ["./src/*"] - }, "noEmit": true, "strictNullChecks": true } diff --git a/tooling/tsconfig/package.json b/tooling/tsconfig/package.json new file mode 100644 index 0000000..9fa2930 --- /dev/null +++ b/tooling/tsconfig/package.json @@ -0,0 +1,9 @@ +{ + "name": "@repo/tsconfig", + "version": "0.0.0", + "type": "module", + "private": true, + "publishConfig": { + "access": "public" + } +} diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..5053ee2 --- /dev/null +++ b/turbo.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://turborepo.com/schema.json", + "ui": "tui", + "globalPassThroughEnv": ["NODE_ENV", "PROD"], + "tasks": { + "build": { + "dependsOn": ["^build"], + "inputs": ["$TURBO_DEFAULT$", ".env*"], + "outputs": [ + "dist/**", + ".vercel/**", + ".nitro/**", + ".wrangler/**", + ".output/**", + ".tanstack/**" + ], + "env": ["SERVER_*", "VITE_*"] + }, + "lint": { + "dependsOn": ["^lint"] + }, + "check-types": { + "dependsOn": ["^check-types"] + }, + "dev": { + "inputs": ["$TURBO_DEFAULT$", ".env"], + "cache": false, + "persistent": true + }, + "preview": { + "inputs": ["$TURBO_DEFAULT$"], + "cache": false, + "persistent": true + } + } +} From a0314c67ef36e571f40ca3bdf44ed1ed70ab90a4 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Wed, 4 Feb 2026 10:05:49 +0800 Subject: [PATCH 02/40] chore: temp readme --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dd5b88d..6a1fb10 100644 --- a/README.md +++ b/README.md @@ -50,12 +50,21 @@ A monorepo template for 🏝️ TanStack Start and Cloudflare. ## Getting Started -1. [Use this template](https://github.com/new?template_name=react-tanstarter&template_owner=dotnize) or clone this repository with gitpick, then install dependencies: + + +1. Clone this repository with gitpick, then install dependencies: + + ```sh + npx gitpick dotnize/react-tanstarter/tree/next myproject + cd myproject + pnpm install ``` From 0b78db04bd9fafcd035f261e08e3a2bbe4d376e2 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Wed, 4 Feb 2026 10:25:15 +0800 Subject: [PATCH 03/40] update readme --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 6a1fb10..1c0451d 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,6 @@ A monorepo template for 🏝️ TanStack Start and Cloudflare. - [Better Auth](https://www.better-auth.com/) - ~~[Oxlint](https://oxc.rs/docs/guide/usage/linter.html) + [Oxfmt](https://oxc.rs/docs/guide/usage/formatter.html)~~ + [Husky](https://typicode.github.io/husky/) + [lint-staged](https://github.com/lint-staged/lint-staged) - WIP -### Structure - ```sh β”œβ”€β”€ apps β”‚ β”œβ”€β”€ web # TanStack Start web app From dfdffc5543caf073e74627104479985d2bf41171 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Wed, 4 Feb 2026 10:25:43 +0800 Subject: [PATCH 04/40] chore: remove migrations --- .../20260204014616_curved_spitfire.sql | 51 - .../snapshot.json | 471 - pnpm-lock.yaml | 9974 ----------------- 3 files changed, 10496 deletions(-) delete mode 100644 apps/web/migrations/20260204014616_curved_spitfire.sql delete mode 100644 apps/web/migrations/20260204014616_curved_spitfire/snapshot.json delete mode 100644 pnpm-lock.yaml diff --git a/apps/web/migrations/20260204014616_curved_spitfire.sql b/apps/web/migrations/20260204014616_curved_spitfire.sql deleted file mode 100644 index a3cf519..0000000 --- a/apps/web/migrations/20260204014616_curved_spitfire.sql +++ /dev/null @@ -1,51 +0,0 @@ -CREATE TABLE `account` ( - `id` text PRIMARY KEY, - `account_id` text NOT NULL, - `provider_id` text NOT NULL, - `user_id` text NOT NULL, - `access_token` text, - `refresh_token` text, - `id_token` text, - `access_token_expires_at` integer, - `refresh_token_expires_at` integer, - `scope` text, - `password` text, - `created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL, - `updated_at` integer NOT NULL, - CONSTRAINT `fk_account_user_id_user_id_fk` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE -); ---> statement-breakpoint -CREATE TABLE `session` ( - `id` text PRIMARY KEY, - `expires_at` integer NOT NULL, - `token` text NOT NULL UNIQUE, - `created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL, - `updated_at` integer NOT NULL, - `ip_address` text, - `user_agent` text, - `user_id` text NOT NULL, - CONSTRAINT `fk_session_user_id_user_id_fk` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE -); ---> statement-breakpoint -CREATE TABLE `user` ( - `id` text PRIMARY KEY, - `email` text NOT NULL UNIQUE, - `email_verified` integer DEFAULT false NOT NULL, - `name` text, - `image` text, - `created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL, - `updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL -); ---> statement-breakpoint -CREATE TABLE `verification` ( - `id` text PRIMARY KEY, - `identifier` text NOT NULL, - `value` text NOT NULL, - `expires_at` integer NOT NULL, - `created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL, - `updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL -); ---> statement-breakpoint -CREATE INDEX `account_userId_idx` ON `account` (`user_id`);--> statement-breakpoint -CREATE INDEX `session_userId_idx` ON `session` (`user_id`);--> statement-breakpoint -CREATE INDEX `verification_identifier_idx` ON `verification` (`identifier`); \ No newline at end of file diff --git a/apps/web/migrations/20260204014616_curved_spitfire/snapshot.json b/apps/web/migrations/20260204014616_curved_spitfire/snapshot.json deleted file mode 100644 index 6adff4f..0000000 --- a/apps/web/migrations/20260204014616_curved_spitfire/snapshot.json +++ /dev/null @@ -1,471 +0,0 @@ -{ - "version": "7", - "dialect": "sqlite", - "id": "155ea0ac-9b9d-4a57-b122-c3579c79f0e5", - "prevIds": ["00000000-0000-0000-0000-000000000000"], - "ddl": [ - { - "name": "account", - "entityType": "tables" - }, - { - "name": "session", - "entityType": "tables" - }, - { - "name": "user", - "entityType": "tables" - }, - { - "name": "verification", - "entityType": "tables" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "id", - "entityType": "columns", - "table": "account" - }, - { - "type": "text", - "notNull": true, - "autoincrement": false, - "default": null, - "generated": null, - "name": "account_id", - "entityType": "columns", - "table": "account" - }, - { - "type": "text", - "notNull": true, - "autoincrement": false, - "default": null, - "generated": null, - "name": "provider_id", - "entityType": "columns", - "table": "account" - }, - { - "type": "text", - "notNull": true, - "autoincrement": false, - "default": null, - "generated": null, - "name": "user_id", - "entityType": "columns", - "table": "account" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "access_token", - "entityType": "columns", - "table": "account" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "refresh_token", - "entityType": "columns", - "table": "account" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "id_token", - "entityType": "columns", - "table": "account" - }, - { - "type": "integer", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "access_token_expires_at", - "entityType": "columns", - "table": "account" - }, - { - "type": "integer", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "refresh_token_expires_at", - "entityType": "columns", - "table": "account" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "scope", - "entityType": "columns", - "table": "account" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "password", - "entityType": "columns", - "table": "account" - }, - { - "type": "integer", - "notNull": true, - "autoincrement": false, - "default": "(cast(unixepoch('subsecond') * 1000 as integer))", - "generated": null, - "name": "created_at", - "entityType": "columns", - "table": "account" - }, - { - "type": "integer", - "notNull": true, - "autoincrement": false, - "default": null, - "generated": null, - "name": "updated_at", - "entityType": "columns", - "table": "account" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "id", - "entityType": "columns", - "table": "session" - }, - { - "type": "integer", - "notNull": true, - "autoincrement": false, - "default": null, - "generated": null, - "name": "expires_at", - "entityType": "columns", - "table": "session" - }, - { - "type": "text", - "notNull": true, - "autoincrement": false, - "default": null, - "generated": null, - "name": "token", - "entityType": "columns", - "table": "session" - }, - { - "type": "integer", - "notNull": true, - "autoincrement": false, - "default": "(cast(unixepoch('subsecond') * 1000 as integer))", - "generated": null, - "name": "created_at", - "entityType": "columns", - "table": "session" - }, - { - "type": "integer", - "notNull": true, - "autoincrement": false, - "default": null, - "generated": null, - "name": "updated_at", - "entityType": "columns", - "table": "session" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "ip_address", - "entityType": "columns", - "table": "session" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "user_agent", - "entityType": "columns", - "table": "session" - }, - { - "type": "text", - "notNull": true, - "autoincrement": false, - "default": null, - "generated": null, - "name": "user_id", - "entityType": "columns", - "table": "session" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "id", - "entityType": "columns", - "table": "user" - }, - { - "type": "text", - "notNull": true, - "autoincrement": false, - "default": null, - "generated": null, - "name": "email", - "entityType": "columns", - "table": "user" - }, - { - "type": "integer", - "notNull": true, - "autoincrement": false, - "default": "false", - "generated": null, - "name": "email_verified", - "entityType": "columns", - "table": "user" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "name", - "entityType": "columns", - "table": "user" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "image", - "entityType": "columns", - "table": "user" - }, - { - "type": "integer", - "notNull": true, - "autoincrement": false, - "default": "(cast(unixepoch('subsecond') * 1000 as integer))", - "generated": null, - "name": "created_at", - "entityType": "columns", - "table": "user" - }, - { - "type": "integer", - "notNull": true, - "autoincrement": false, - "default": "(cast(unixepoch('subsecond') * 1000 as integer))", - "generated": null, - "name": "updated_at", - "entityType": "columns", - "table": "user" - }, - { - "type": "text", - "notNull": false, - "autoincrement": false, - "default": null, - "generated": null, - "name": "id", - "entityType": "columns", - "table": "verification" - }, - { - "type": "text", - "notNull": true, - "autoincrement": false, - "default": null, - "generated": null, - "name": "identifier", - "entityType": "columns", - "table": "verification" - }, - { - "type": "text", - "notNull": true, - "autoincrement": false, - "default": null, - "generated": null, - "name": "value", - "entityType": "columns", - "table": "verification" - }, - { - "type": "integer", - "notNull": true, - "autoincrement": false, - "default": null, - "generated": null, - "name": "expires_at", - "entityType": "columns", - "table": "verification" - }, - { - "type": "integer", - "notNull": true, - "autoincrement": false, - "default": "(cast(unixepoch('subsecond') * 1000 as integer))", - "generated": null, - "name": "created_at", - "entityType": "columns", - "table": "verification" - }, - { - "type": "integer", - "notNull": true, - "autoincrement": false, - "default": "(cast(unixepoch('subsecond') * 1000 as integer))", - "generated": null, - "name": "updated_at", - "entityType": "columns", - "table": "verification" - }, - { - "columns": ["user_id"], - "tableTo": "user", - "columnsTo": ["id"], - "onUpdate": "NO ACTION", - "onDelete": "CASCADE", - "nameExplicit": false, - "name": "fk_account_user_id_user_id_fk", - "entityType": "fks", - "table": "account" - }, - { - "columns": ["user_id"], - "tableTo": "user", - "columnsTo": ["id"], - "onUpdate": "NO ACTION", - "onDelete": "CASCADE", - "nameExplicit": false, - "name": "fk_session_user_id_user_id_fk", - "entityType": "fks", - "table": "session" - }, - { - "columns": ["id"], - "nameExplicit": false, - "name": "account_pk", - "table": "account", - "entityType": "pks" - }, - { - "columns": ["id"], - "nameExplicit": false, - "name": "session_pk", - "table": "session", - "entityType": "pks" - }, - { - "columns": ["id"], - "nameExplicit": false, - "name": "user_pk", - "table": "user", - "entityType": "pks" - }, - { - "columns": ["id"], - "nameExplicit": false, - "name": "verification_pk", - "table": "verification", - "entityType": "pks" - }, - { - "columns": [ - { - "value": "user_id", - "isExpression": false - } - ], - "isUnique": false, - "where": null, - "origin": "manual", - "name": "account_userId_idx", - "entityType": "indexes", - "table": "account" - }, - { - "columns": [ - { - "value": "user_id", - "isExpression": false - } - ], - "isUnique": false, - "where": null, - "origin": "manual", - "name": "session_userId_idx", - "entityType": "indexes", - "table": "session" - }, - { - "columns": [ - { - "value": "identifier", - "isExpression": false - } - ], - "isUnique": false, - "where": null, - "origin": "manual", - "name": "verification_identifier_idx", - "entityType": "indexes", - "table": "verification" - }, - { - "columns": ["token"], - "nameExplicit": false, - "name": "session_token_unique", - "entityType": "uniques", - "table": "session" - }, - { - "columns": ["email"], - "nameExplicit": false, - "name": "user_email_unique", - "entityType": "uniques", - "table": "user" - } - ], - "renames": [] -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 0fd9696..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,9974 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -catalogs: - default: - '@base-ui/react': - specifier: ^1.1.0 - version: 1.1.0 - '@cloudflare/vite-plugin': - specifier: ^1.23.0 - version: 1.23.0 - '@eslint-react/eslint-plugin': - specifier: ^2.9.4 - version: 2.9.4 - '@eslint/js': - specifier: ^9.39.2 - version: 9.39.2 - '@remixicon/react': - specifier: ^4.9.0 - version: 4.9.0 - '@tailwindcss/vite': - specifier: ^4.1.18 - version: 4.1.18 - '@tanstack/devtools-vite': - specifier: ^0.5.0 - version: 0.5.0 - '@tanstack/eslint-plugin-query': - specifier: ^5.91.4 - version: 5.91.4 - '@tanstack/eslint-plugin-router': - specifier: ^1.155.0 - version: 1.155.0 - '@tanstack/react-devtools': - specifier: ^0.9.4 - version: 0.9.4 - '@tanstack/react-form-devtools': - specifier: ^0.2.13 - version: 0.2.13 - '@tanstack/react-form-start': - specifier: ^1.28.0 - version: 1.28.0 - '@tanstack/react-query': - specifier: ^5.90.20 - version: 5.90.20 - '@tanstack/react-query-devtools': - specifier: ^5.91.3 - version: 5.91.3 - '@tanstack/react-router': - specifier: ^1.158.0 - version: 1.158.0 - '@tanstack/react-router-devtools': - specifier: ^1.158.0 - version: 1.158.0 - '@tanstack/react-router-ssr-query': - specifier: ^1.158.0 - version: 1.158.0 - '@tanstack/react-start': - specifier: ^1.158.0 - version: 1.158.0 - '@types/node': - specifier: ^24.10.10 - version: 24.10.10 - '@types/react': - specifier: ^19.2.10 - version: 19.2.10 - '@types/react-dom': - specifier: ^19.2.3 - version: 19.2.3 - '@vitejs/plugin-react': - specifier: ^5.1.3 - version: 5.1.3 - babel-plugin-react-compiler: - specifier: ^1.0.0 - version: 1.0.0 - better-auth: - specifier: beta - version: 1.5.0-beta.11 - class-variance-authority: - specifier: ^0.7.1 - version: 0.7.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 - date-fns: - specifier: ^4.1.0 - version: 4.1.0 - drizzle-kit: - specifier: beta - version: 1.0.0-beta.13-f728631 - drizzle-orm: - specifier: beta - version: 1.0.0-beta.13-f728631 - eslint: - specifier: ^9.39.2 - version: 9.39.2 - eslint-config-prettier: - specifier: ^10.1.8 - version: 10.1.8 - eslint-plugin-only-warn: - specifier: ^1.1.0 - version: 1.1.0 - eslint-plugin-react-hooks: - specifier: ^7.0.1 - version: 7.0.1 - eslint-plugin-turbo: - specifier: ^2.8.3 - version: 2.8.3 - husky: - specifier: ^9.1.7 - version: 9.1.7 - lint-staged: - specifier: ^16.2.7 - version: 16.2.7 - motion: - specifier: ^12.31.0 - version: 12.31.0 - prettier: - specifier: ^3.8.1 - version: 3.8.1 - prettier-plugin-organize-imports: - specifier: ^4.3.0 - version: 4.3.0 - prettier-plugin-tailwindcss: - specifier: ^0.7.2 - version: 0.7.2 - react: - specifier: ^19.2.4 - version: 19.2.4 - react-dom: - specifier: ^19.2.4 - version: 19.2.4 - shadcn: - specifier: ^3.8.2 - version: 3.8.2 - sonner: - specifier: ^2.0.7 - version: 2.0.7 - tailwind-merge: - specifier: ^3.4.0 - version: 3.4.0 - tailwindcss: - specifier: ^4.1.18 - version: 4.1.18 - tsx: - specifier: ^4.21.0 - version: 4.21.0 - turbo: - specifier: ^2.8.3 - version: 2.8.3 - tw-animate-css: - specifier: ^1.4.0 - version: 1.4.0 - typescript: - specifier: ^5.9.3 - version: 5.9.3 - typescript-eslint: - specifier: ^8.54.0 - version: 8.54.0 - wrangler: - specifier: ^4.62.0 - version: 4.62.0 - zod: - specifier: ^4.3.6 - version: 4.3.6 - -overrides: - '@better-auth/drizzle-adapter': https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913 - vite: ^8.0.0-beta.12 - -importers: - - .: - devDependencies: - husky: - specifier: 'catalog:' - version: 9.1.7 - lint-staged: - specifier: 'catalog:' - version: 16.2.7 - prettier: - specifier: 'catalog:' - version: 3.8.1 - prettier-plugin-organize-imports: - specifier: 'catalog:' - version: 4.3.0(prettier@3.8.1)(typescript@5.9.3) - prettier-plugin-tailwindcss: - specifier: 'catalog:' - version: 0.7.2(prettier-plugin-organize-imports@4.3.0(prettier@3.8.1)(typescript@5.9.3))(prettier@3.8.1) - tsx: - specifier: 'catalog:' - version: 4.21.0 - turbo: - specifier: 'catalog:' - version: 2.8.3 - - apps/web: - dependencies: - '@remixicon/react': - specifier: 'catalog:' - version: 4.9.0(react@19.2.4) - '@repo/auth': - specifier: workspace:* - version: link:../../packages/auth - '@repo/db': - specifier: workspace:* - version: link:../../packages/db - '@repo/ui': - specifier: workspace:* - version: link:../../packages/ui - '@tanstack/react-form-start': - specifier: 'catalog:' - version: 1.28.0(@tanstack/react-start@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/react-query': - specifier: 'catalog:' - version: 5.90.20(react@19.2.4) - '@tanstack/react-router': - specifier: 'catalog:' - version: 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/react-router-ssr-query': - specifier: 'catalog:' - version: 1.158.0(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.20(react@19.2.4))(@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.158.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/react-start': - specifier: 'catalog:' - version: 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - date-fns: - specifier: 'catalog:' - version: 4.1.0 - drizzle-orm: - specifier: 'catalog:' - version: 1.0.0-beta.13-f728631(@electric-sql/pglite@0.3.15)(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/mssql@9.1.9)(mssql@11.0.1)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)) - motion: - specifier: 'catalog:' - version: 12.31.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: - specifier: 'catalog:' - version: 19.2.4 - react-dom: - specifier: 'catalog:' - version: 19.2.4(react@19.2.4) - sonner: - specifier: 'catalog:' - version: 2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - zod: - specifier: 'catalog:' - version: 4.3.6 - devDependencies: - '@cloudflare/vite-plugin': - specifier: 'catalog:' - version: 1.23.0(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260131.0)(wrangler@4.62.0) - '@repo/eslint-config': - specifier: workspace:* - version: link:../../tooling/eslint-config - '@repo/tsconfig': - specifier: workspace:* - version: link:../../tooling/tsconfig - '@tailwindcss/vite': - specifier: 'catalog:' - version: 4.1.18(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - '@tanstack/devtools-vite': - specifier: 'catalog:' - version: 0.5.0(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - '@tanstack/react-devtools': - specifier: 'catalog:' - version: 0.9.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11) - '@tanstack/react-form-devtools': - specifier: 'catalog:' - version: 0.2.13(@types/react@19.2.10)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11) - '@tanstack/react-query-devtools': - specifier: 'catalog:' - version: 5.91.3(@tanstack/react-query@5.90.20(react@19.2.4))(react@19.2.4) - '@tanstack/react-router-devtools': - specifier: 'catalog:' - version: 1.158.0(@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.158.0)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@types/node': - specifier: 'catalog:' - version: 24.10.10 - '@types/react': - specifier: 'catalog:' - version: 19.2.10 - '@types/react-dom': - specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.10) - '@vitejs/plugin-react': - specifier: 'catalog:' - version: 5.1.3(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - babel-plugin-react-compiler: - specifier: 'catalog:' - version: 1.0.0 - eslint: - specifier: 'catalog:' - version: 9.39.2(jiti@2.6.1) - prettier: - specifier: 'catalog:' - version: 3.8.1 - prettier-plugin-organize-imports: - specifier: 'catalog:' - version: 4.3.0(prettier@3.8.1)(typescript@5.9.3) - prettier-plugin-tailwindcss: - specifier: 'catalog:' - version: 0.7.2(prettier-plugin-organize-imports@4.3.0(prettier@3.8.1)(typescript@5.9.3))(prettier@3.8.1) - tailwindcss: - specifier: 'catalog:' - version: 4.1.18 - typescript: - specifier: 'catalog:' - version: 5.9.3 - vite: - specifier: ^8.0.0-beta.12 - version: 8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - wrangler: - specifier: 'catalog:' - version: 4.62.0 - - packages/auth: - dependencies: - '@better-auth/drizzle-adapter': - specifier: https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913 - version: https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(@better-auth/utils@0.3.1)(prettier@3.8.1) - '@repo/db': - specifier: workspace:* - version: link:../db - '@tanstack/react-query': - specifier: 'catalog:' - version: 5.90.20(react@19.2.4) - '@tanstack/react-start': - specifier: 'catalog:' - version: 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - better-auth: - specifier: 'catalog:' - version: 1.5.0-beta.11(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@tanstack/react-start@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)))(mongodb@7.1.0)(mysql2@3.15.3)(prettier@3.8.1)(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11) - devDependencies: - '@repo/eslint-config': - specifier: workspace:* - version: link:../../tooling/eslint-config - '@repo/tsconfig': - specifier: workspace:* - version: link:../../tooling/tsconfig - '@types/node': - specifier: 'catalog:' - version: 24.10.10 - eslint: - specifier: 'catalog:' - version: 9.39.2(jiti@2.6.1) - typescript: - specifier: 'catalog:' - version: 5.9.3 - - packages/db: - dependencies: - drizzle-orm: - specifier: 'catalog:' - version: 1.0.0-beta.13-f728631(@electric-sql/pglite@0.3.15)(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/mssql@9.1.9)(mssql@11.0.1)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)) - devDependencies: - '@repo/eslint-config': - specifier: workspace:* - version: link:../../tooling/eslint-config - '@repo/tsconfig': - specifier: workspace:* - version: link:../../tooling/tsconfig - '@types/node': - specifier: 'catalog:' - version: 24.10.10 - drizzle-kit: - specifier: 'catalog:' - version: 1.0.0-beta.13-f728631 - eslint: - specifier: 'catalog:' - version: 9.39.2(jiti@2.6.1) - typescript: - specifier: 'catalog:' - version: 5.9.3 - - packages/ui: - dependencies: - '@base-ui/react': - specifier: 'catalog:' - version: 1.1.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@remixicon/react': - specifier: 'catalog:' - version: 4.9.0(react@19.2.4) - '@tanstack/react-form-start': - specifier: 'catalog:' - version: 1.28.0(@tanstack/react-start@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - class-variance-authority: - specifier: 'catalog:' - version: 0.7.1 - clsx: - specifier: 'catalog:' - version: 2.1.1 - date-fns: - specifier: 'catalog:' - version: 4.1.0 - motion: - specifier: 'catalog:' - version: 12.31.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: - specifier: 'catalog:' - version: 19.2.4 - react-dom: - specifier: 'catalog:' - version: 19.2.4(react@19.2.4) - shadcn: - specifier: 'catalog:' - version: 3.8.2(@types/node@25.2.0)(hono@4.11.7)(typescript@5.9.3) - sonner: - specifier: 'catalog:' - version: 2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - tailwind-merge: - specifier: 'catalog:' - version: 3.4.0 - tw-animate-css: - specifier: 'catalog:' - version: 1.4.0 - zod: - specifier: 'catalog:' - version: 4.3.6 - devDependencies: - '@repo/eslint-config': - specifier: workspace:* - version: link:../../tooling/eslint-config - '@repo/tsconfig': - specifier: workspace:* - version: link:../../tooling/tsconfig - '@types/react': - specifier: 'catalog:' - version: 19.2.10 - '@types/react-dom': - specifier: 'catalog:' - version: 19.2.3(@types/react@19.2.10) - eslint: - specifier: 'catalog:' - version: 9.39.2(jiti@2.6.1) - tailwindcss: - specifier: 'catalog:' - version: 4.1.18 - typescript: - specifier: 'catalog:' - version: 5.9.3 - - tooling/eslint-config: - devDependencies: - '@eslint-react/eslint-plugin': - specifier: 'catalog:' - version: 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint/js': - specifier: 'catalog:' - version: 9.39.2 - '@tanstack/eslint-plugin-query': - specifier: 'catalog:' - version: 5.91.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@tanstack/eslint-plugin-router': - specifier: 'catalog:' - version: 1.155.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: - specifier: 'catalog:' - version: 9.39.2(jiti@2.6.1) - eslint-config-prettier: - specifier: 'catalog:' - version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-only-warn: - specifier: 'catalog:' - version: 1.1.0 - eslint-plugin-react-hooks: - specifier: 'catalog:' - version: 7.0.1(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-turbo: - specifier: 'catalog:' - version: 2.8.3(eslint@9.39.2(jiti@2.6.1))(turbo@2.8.3) - typescript: - specifier: 'catalog:' - version: 5.9.3 - typescript-eslint: - specifier: 'catalog:' - version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - - tooling/tsconfig: {} - -packages: - - '@antfu/ni@25.0.0': - resolution: {integrity: sha512-9q/yCljni37pkMr4sPrI3G4jqdIk074+iukc5aFJl7kmDCCsiJrbZ6zKxnES1Gwg+i9RcDZwvktl23puGslmvA==} - hasBin: true - - '@azure-rest/core-client@2.5.1': - resolution: {integrity: sha512-EHaOXW0RYDKS5CFffnixdyRPak5ytiCtU7uXDcP/uiY+A6jFRwNGzzJBiznkCzvi5EYpY+YWinieqHb0oY916A==} - engines: {node: '>=20.0.0'} - - '@azure/abort-controller@2.1.2': - resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} - engines: {node: '>=18.0.0'} - - '@azure/core-auth@1.10.1': - resolution: {integrity: sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==} - engines: {node: '>=20.0.0'} - - '@azure/core-client@1.10.1': - resolution: {integrity: sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==} - engines: {node: '>=20.0.0'} - - '@azure/core-http-compat@2.3.1': - resolution: {integrity: sha512-az9BkXND3/d5VgdRRQVkiJb2gOmDU8Qcq4GvjtBmDICNiQ9udFmDk4ZpSB5Qq1OmtDJGlQAfBaS4palFsazQ5g==} - engines: {node: '>=20.0.0'} - - '@azure/core-lro@2.7.2': - resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} - engines: {node: '>=18.0.0'} - - '@azure/core-paging@1.6.2': - resolution: {integrity: sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==} - engines: {node: '>=18.0.0'} - - '@azure/core-rest-pipeline@1.22.2': - resolution: {integrity: sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==} - engines: {node: '>=20.0.0'} - - '@azure/core-tracing@1.3.1': - resolution: {integrity: sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==} - engines: {node: '>=20.0.0'} - - '@azure/core-util@1.13.1': - resolution: {integrity: sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==} - engines: {node: '>=20.0.0'} - - '@azure/identity@4.13.0': - resolution: {integrity: sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==} - engines: {node: '>=20.0.0'} - - '@azure/keyvault-common@2.0.0': - resolution: {integrity: sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w==} - engines: {node: '>=18.0.0'} - - '@azure/keyvault-keys@4.10.0': - resolution: {integrity: sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag==} - engines: {node: '>=18.0.0'} - - '@azure/logger@1.3.0': - resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} - engines: {node: '>=20.0.0'} - - '@azure/msal-browser@4.28.1': - resolution: {integrity: sha512-al2u2fTchbClq3L4C1NlqLm+vwKfhYCPtZN2LR/9xJVaQ4Mnrwf5vANvuyPSJHcGvw50UBmhuVmYUAhTEetTpA==} - engines: {node: '>=0.8.0'} - - '@azure/msal-common@15.14.1': - resolution: {integrity: sha512-IkzF7Pywt6QKTS0kwdCv/XV8x8JXknZDvSjj/IccooxnP373T5jaadO3FnOrbWo3S0UqkfIDyZNTaQ/oAgRdXw==} - engines: {node: '>=0.8.0'} - - '@azure/msal-node@3.8.6': - resolution: {integrity: sha512-XTmhdItcBckcVVTy65Xp+42xG4LX5GK+9AqAsXPXk4IqUNv+LyQo5TMwNjuFYBfAB2GTG9iSQGk+QLc03vhf3w==} - engines: {node: '>=16'} - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.29.0': - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.29.0': - resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.29.0': - resolution: {integrity: sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.27.3': - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-create-class-features-plugin@7.28.6': - resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.28.5': - resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-optimise-call-expression@7.27.1': - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} - engines: {node: '>=6.9.0'} - - '@babel/helper-replace-supers@7.28.6': - resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.28.6': - resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-syntax-jsx@7.28.6': - resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.28.6': - resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-commonjs@7.28.6': - resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-self@7.27.1': - resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-source@7.27.1': - resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typescript@7.28.6': - resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-typescript@7.28.5': - resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} - engines: {node: '>=6.9.0'} - - '@base-ui/react@1.1.0': - resolution: {integrity: sha512-ikcJRNj1mOiF2HZ5jQHrXoVoHcNHdBU5ejJljcBl+VTLoYXR6FidjTN86GjO6hyshi6TZFuNvv0dEOgaOFv6Lw==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@types/react': ^17 || ^18 || ^19 - react: ^17 || ^18 || ^19 - react-dom: ^17 || ^18 || ^19 - peerDependenciesMeta: - '@types/react': - optional: true - - '@base-ui/utils@0.2.4': - resolution: {integrity: sha512-smZwpMhjO29v+jrZusBSc5T+IJ3vBb9cjIiBjtKcvWmRj9Z4DWGVR3efr1eHR56/bqY5a4qyY9ElkOY5ljo3ng==} - peerDependencies: - '@types/react': ^17 || ^18 || ^19 - react: ^17 || ^18 || ^19 - react-dom: ^17 || ^18 || ^19 - peerDependenciesMeta: - '@types/react': - optional: true - - '@better-auth/core@1.5.0-beta.11': - resolution: {integrity: sha512-8fbGKD8RhnKJ6FSUKDj4mHp1RIS82T4vB4AjFj95/XOEExzM9qShbYKFL5+RZrkt+oqSViuFX61iAB+LH/SJ9g==} - peerDependencies: - '@better-auth/utils': 0.3.1 - '@better-fetch/fetch': 1.1.21 - better-call: 1.2.0 - jose: ^6.1.0 - kysely: ^0.28.5 - nanostores: ^1.0.1 - - '@better-auth/drizzle-adapter@https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913': - resolution: {tarball: https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913} - version: 1.5.0-beta.9 - peerDependencies: - '@better-auth/core': 1.5.0-beta.9 - '@better-auth/utils': ^0.3.0 - drizzle-orm: ^0.30.0 - prettier: ^3.7.4 - - '@better-auth/kysely-adapter@1.5.0-beta.11': - resolution: {integrity: sha512-VV5RF0+648leeNgXoNbuoePh6PjmRyVP2qxgDU5gnEzA8x9SqfOUppHhi4ssfOdjaQHf+pLo1sWHFb8Wy7+JlQ==} - peerDependencies: - '@better-auth/core': 1.5.0-beta.11 - '@better-auth/utils': ^0.3.0 - kysely: ^0.27.0 || ^0.28.0 - - '@better-auth/memory-adapter@1.5.0-beta.11': - resolution: {integrity: sha512-Ggq+F2YB2ywTfX/0w5xgFvr73IiihmVF6IUYM0v79BMnEQa72Qc3J/8D/iU33WRNwvYAo4CfDD1OECp/78PjgA==} - peerDependencies: - '@better-auth/core': 1.5.0-beta.11 - '@better-auth/utils': ^0.3.0 - - '@better-auth/mongo-adapter@1.5.0-beta.11': - resolution: {integrity: sha512-32JQTtp/84tZd0ZpWSV4+uaiMhyZGmeyAJF0B4FrHnI8/i/auOrNK3imLP+afv/ne7U+hQEyfUObgtUDr+DLzw==} - peerDependencies: - '@better-auth/core': 1.5.0-beta.11 - '@better-auth/utils': ^0.3.0 - mongodb: ^6.0.0 || ^7.0.0 - - '@better-auth/prisma-adapter@1.5.0-beta.11': - resolution: {integrity: sha512-jAlAql0bZx62IgZ6/UsXXCR6L28tKipLYe4iPutjMAOi9Wl9oM2OsAmr/ZhcrHj9mjmKZXot1mqGcCcROZ1aSg==} - peerDependencies: - '@better-auth/core': 1.5.0-beta.11 - '@better-auth/utils': ^0.3.0 - '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 - prisma: ^5.0.0 || ^6.0.0 || ^7.0.0 - - '@better-auth/telemetry@1.5.0-beta.11': - resolution: {integrity: sha512-DDHXD37FCF+N7Sx80wY1QI351SgCMH7KQ2YsxwF5JDw/DYdY4vbjcEGYB7Ipum+dzEfq5o6cSdWvQqtjcT2o2w==} - peerDependencies: - '@better-auth/core': 1.5.0-beta.11 - - '@better-auth/utils@0.3.1': - resolution: {integrity: sha512-+CGp4UmZSUrHHnpHhLPYu6cV+wSUSvVbZbNykxhUDocpVNTo9uFFxw/NqJlh1iC4wQ9HKKWGCKuZ5wUgS0v6Kg==} - - '@better-fetch/fetch@1.1.21': - resolution: {integrity: sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==} - - '@chevrotain/cst-dts-gen@10.5.0': - resolution: {integrity: sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw==} - - '@chevrotain/gast@10.5.0': - resolution: {integrity: sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A==} - - '@chevrotain/types@10.5.0': - resolution: {integrity: sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A==} - - '@chevrotain/utils@10.5.0': - resolution: {integrity: sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==} - - '@cloudflare/kv-asset-handler@0.4.2': - resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==} - engines: {node: '>=18.0.0'} - - '@cloudflare/unenv-preset@2.12.0': - resolution: {integrity: sha512-NK4vN+2Z/GbfGS4BamtbbVk1rcu5RmqaYGiyHJQrA09AoxdZPHDF3W/EhgI0YSK8p3vRo/VNCtbSJFPON7FWMQ==} - peerDependencies: - unenv: 2.0.0-rc.24 - workerd: ^1.20260115.0 - peerDependenciesMeta: - workerd: - optional: true - - '@cloudflare/vite-plugin@1.23.0': - resolution: {integrity: sha512-Pz3kF5wxUx99NOOYPq/jgaknKQuamN52FQkc8WBmLfbzBd9fWu+4NaJeZjDtFTXUBA0FEA7bOROuV52YFOA2TA==} - peerDependencies: - vite: ^8.0.0-beta.12 - wrangler: ^4.62.0 - - '@cloudflare/workerd-darwin-64@1.20260131.0': - resolution: {integrity: sha512-+1X4qErc715NUhJZNhtlpuCxajhD5YNre7Cz50WPMmj+BMUrh9h7fntKEadtrUo5SM2YONY7CDzK7wdWbJJBVA==} - engines: {node: '>=16'} - cpu: [x64] - os: [darwin] - - '@cloudflare/workerd-darwin-arm64@1.20260131.0': - resolution: {integrity: sha512-M84mXR8WEMEBuX4/dL2IQ4wHV/ALwYjx9if5ePZR8rdbD7if/fkEEoMBq0bGS/1gMLRqqCZLstabxHV+g92NNg==} - engines: {node: '>=16'} - cpu: [arm64] - os: [darwin] - - '@cloudflare/workerd-linux-64@1.20260131.0': - resolution: {integrity: sha512-SWzr48bCL9y5wjkj23tXS6t/6us99EAH9T5TAscMV0hfJFZQt97RY/gaHKyRRjFv6jfJZvk7d4g+OmGeYBnwcg==} - engines: {node: '>=16'} - cpu: [x64] - os: [linux] - - '@cloudflare/workerd-linux-arm64@1.20260131.0': - resolution: {integrity: sha512-mL0kLPGIBJRPeHS3+erJ2t5dJT3ODhsKvR9aA4BcsY7M30/QhlgJIF6wsgwNisTJ23q8PbobZNHBUKIe8l/E9A==} - engines: {node: '>=16'} - cpu: [arm64] - os: [linux] - - '@cloudflare/workerd-windows-64@1.20260131.0': - resolution: {integrity: sha512-hoQqTFBpP1zntP2OQSpt5dEWbd9vSBliK+G7LmDXjKitPkmkRFo2PB4P9aBRE1edPAIO/fpdoJv928k2HaAn4A==} - engines: {node: '>=16'} - cpu: [x64] - os: [win32] - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@dotenvx/dotenvx@1.52.0': - resolution: {integrity: sha512-CaQcc8JvtzQhUSm9877b6V4Tb7HCotkcyud9X2YwdqtQKwgljkMRwU96fVYKnzN3V0Hj74oP7Es+vZ0mS+Aa1w==} - hasBin: true - - '@drizzle-team/brocli@0.11.0': - resolution: {integrity: sha512-hD3pekGiPg0WPCCGAZmusBBJsDqGUR66Y452YgQsZOnkdQ7ViEPKuyP4huUGEZQefp8g34RRodXYmJ2TbCH+tg==} - - '@ecies/ciphers@0.2.5': - resolution: {integrity: sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A==} - engines: {bun: '>=1', deno: '>=2', node: '>=16'} - peerDependencies: - '@noble/ciphers': ^1.0.0 - - '@electric-sql/pglite-socket@0.0.20': - resolution: {integrity: sha512-J5nLGsicnD9wJHnno9r+DGxfcZWh+YJMCe0q/aCgtG6XOm9Z7fKeite8IZSNXgZeGltSigM9U/vAWZQWdgcSFg==} - hasBin: true - peerDependencies: - '@electric-sql/pglite': 0.3.15 - - '@electric-sql/pglite-tools@0.2.20': - resolution: {integrity: sha512-BK50ZnYa3IG7ztXhtgYf0Q7zijV32Iw1cYS8C+ThdQlwx12V5VZ9KRJ42y82Hyb4PkTxZQklVQA9JHyUlex33A==} - peerDependencies: - '@electric-sql/pglite': 0.3.15 - - '@electric-sql/pglite@0.3.15': - resolution: {integrity: sha512-Cj++n1Mekf9ETfdc16TlDi+cDDQF0W7EcbyRHYOAeZdsAe8M/FJg18itDTSwyHfar2WIezawM9o0EKaRGVKygQ==} - - '@emnapi/core@1.8.1': - resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} - - '@emnapi/runtime@1.8.1': - resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} - - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.27.0': - resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.27.2': - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.27.0': - resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.27.2': - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.27.0': - resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.27.2': - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.27.0': - resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.27.2': - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.27.0': - resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.27.2': - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.0': - resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.2': - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.27.0': - resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.27.2': - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.0': - resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.2': - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.27.0': - resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.27.2': - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.27.0': - resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.27.2': - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.27.0': - resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.27.2': - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.27.0': - resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.27.2': - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.27.0': - resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.27.2': - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.27.0': - resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-ppc64@0.27.2': - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.0': - resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.2': - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.27.0': - resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.27.2': - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.27.0': - resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.27.2': - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.27.0': - resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.27.2': - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.0': - resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.2': - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.27.0': - resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.27.2': - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.0': - resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.2': - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.27.0': - resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.27.2': - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.27.0': - resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.27.2': - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.27.0': - resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.27.2': - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.27.0': - resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.27.2': - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.27.0': - resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.27.2': - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.2': - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint-react/ast@2.9.4': - resolution: {integrity: sha512-WI9iq5ePTlcWo0xhSs4wxLUC6u4QuBmQkKeSiXexkEO8C2p8QE7ECNIXhRVkYs3p3AKH5xTez9V8C/CBIGxeXA==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@eslint-react/core@2.9.4': - resolution: {integrity: sha512-Ob+Dip1vyR9ch9XL7LUAsGXc0UUf9Kuzn9BEiwOLT7l+cF91ieKeCvIzNPp0LmTuanPfQweJ9iDT9i295SqBZA==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@eslint-react/eff@2.9.4': - resolution: {integrity: sha512-7AOmozmfa0HgXY9O+J+iX3ciZfViz+W+jhRe2y0YqqkDR7PwV2huzhk/Bxq6sRzzf2uFHqoh/AQNZUhRJ3A05A==} - engines: {node: '>=20.19.0'} - - '@eslint-react/eslint-plugin@2.9.4': - resolution: {integrity: sha512-B1LOEUBuT4L7EmY3E9F7+K8Jdr9nAzx66USz4uWEtg8ZMn82E2O5TzOBPw6eeL0O9BoyLBoslZotXNQVazR2dA==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@eslint-react/shared@2.9.4': - resolution: {integrity: sha512-PU7C4JzDZ6OffAWD+HwJdvzGSho25UPYJRyb4wZ/pDaI8QPTDj8AtKWKK69SEOQl2ic89ht1upjQX+jrXhN15w==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@eslint-react/var@2.9.4': - resolution: {integrity: sha512-Qiih6hT+D2vZmCbAGUooReKlqXjtb/g3SzYj2zNlci6YcWxsQB/pqhR0ayU2AOdW6U9YdeCCfPIwBBQ4AEpyBA==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.3': - resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.39.2': - resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@floating-ui/core@1.7.4': - resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} - - '@floating-ui/dom@1.7.5': - resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} - - '@floating-ui/react-dom@2.1.7': - resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - - '@hono/node-server@1.19.9': - resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} - engines: {node: '>=18.14.1'} - peerDependencies: - hono: ^4 - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - - '@img/colour@1.0.0': - resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} - engines: {node: '>=18'} - - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [win32] - - '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@inquirer/ansi@1.0.2': - resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} - engines: {node: '>=18'} - - '@inquirer/confirm@5.1.21': - resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/core@10.3.2': - resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/figures@1.0.15': - resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} - engines: {node: '>=18'} - - '@inquirer/type@3.0.10': - resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.1': - resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} - engines: {node: 20 || >=22} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@js-joda/core@5.7.0': - resolution: {integrity: sha512-WBu4ULVVxySLLzK1Ppq+OdfP+adRS4ntmDQT915rzDJ++i95gc2jZkM5B6LWEAwN3lGXpfie3yPABozdD3K3Vg==} - - '@js-temporal/polyfill@0.5.1': - resolution: {integrity: sha512-hloP58zRVCRSpgDxmqCWJNlizAlUgJFqG2ypq79DCvyv9tHjRYMDOcPFjzfl/A1/YxDvRCZz8wvZvmapQnKwFQ==} - engines: {node: '>=12'} - - '@modelcontextprotocol/sdk@1.25.3': - resolution: {integrity: sha512-vsAMBMERybvYgKbg/l4L1rhS7VXV1c0CtyJg72vwxONVX0l4ZfKVAnZEWTQixJGTzKnELjQ59e4NbdFDALRiAQ==} - engines: {node: '>=18'} - peerDependencies: - '@cfworker/json-schema': ^4.1.1 - zod: ^3.25 || ^4.0 - peerDependenciesMeta: - '@cfworker/json-schema': - optional: true - - '@mongodb-js/saslprep@1.4.5': - resolution: {integrity: sha512-k64Lbyb7ycCSXHSLzxVdb2xsKGPMvYZfCICXvDsI8Z65CeWQzTEKS4YmGbnqw+U9RBvLPTsB6UCmwkgsDTGWIw==} - - '@mrleebo/prisma-ast@0.13.1': - resolution: {integrity: sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw==} - engines: {node: '>=16'} - - '@mswjs/interceptors@0.41.0': - resolution: {integrity: sha512-edAo9bW53BLYeSK+UPRr2Iz1Fj9DeGMjytvVM0HXRoo750ElWUgPsZPAOTQa12EUiwgDErH2PsFNTLvk1jBxjQ==} - engines: {node: '>=18'} - - '@napi-rs/wasm-runtime@1.1.1': - resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} - - '@noble/ciphers@1.3.0': - resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} - engines: {node: ^14.21.3 || >=16} - - '@noble/ciphers@2.1.1': - resolution: {integrity: sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==} - engines: {node: '>= 20.19.0'} - - '@noble/curves@1.9.7': - resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} - engines: {node: ^14.21.3 || >=16} - - '@noble/hashes@1.8.0': - resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} - engines: {node: ^14.21.3 || >=16} - - '@noble/hashes@2.0.1': - resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} - engines: {node: '>= 20.19.0'} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@oozcitak/dom@2.0.2': - resolution: {integrity: sha512-GjpKhkSYC3Mj4+lfwEyI1dqnsKTgwGy48ytZEhm4A/xnH/8z9M3ZVXKr/YGQi3uCLs1AEBS+x5T2JPiueEDW8w==} - engines: {node: '>=20.0'} - - '@oozcitak/infra@2.0.2': - resolution: {integrity: sha512-2g+E7hoE2dgCz/APPOEK5s3rMhJvNxSMBrP+U+j1OWsIbtSpWxxlUjq1lU8RIsFJNYv7NMlnVsCuHcUzJW+8vA==} - engines: {node: '>=20.0'} - - '@oozcitak/url@3.0.0': - resolution: {integrity: sha512-ZKfET8Ak1wsLAiLWNfFkZc/BraDccuTJKR6svTYc7sVjbR+Iu0vtXdiDMY4o6jaFl5TW2TlS7jbLl4VovtAJWQ==} - engines: {node: '>=20.0'} - - '@oozcitak/util@10.0.0': - resolution: {integrity: sha512-hAX0pT/73190NLqBPPWSdBVGtbY6VOhWYK3qqHqtXQ1gK7kS2yz4+ivsN07hpJ6I3aeMtKP6J6npsEKOAzuTLA==} - engines: {node: '>=20.0'} - - '@open-draft/deferred-promise@2.2.0': - resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} - - '@open-draft/logger@0.3.0': - resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} - - '@open-draft/until@2.1.0': - resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - - '@oxc-project/runtime@0.111.0': - resolution: {integrity: sha512-Hssa3lXfhczG0Qx0XB6NXLQTKrKeWSPDxcHqddCmBVnOQnlgE8Z+omcPHiewvvvZjSw8RgUPQCU5a+rx/vZ1YA==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@oxc-project/types@0.111.0': - resolution: {integrity: sha512-bh54LJMafgRGl2cPQ/QM+tI5rWaShm/wK9KywEj/w36MhiPKXYM67H2y3q+9pr4YO7ufwg2AKdBAZkhHBD8ClA==} - - '@poppinss/colors@4.1.6': - resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} - - '@poppinss/dumper@0.6.5': - resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} - - '@poppinss/exception@1.2.3': - resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} - - '@prisma/client-runtime-utils@7.3.0': - resolution: {integrity: sha512-dG/ceD9c+tnXATPk8G+USxxYM9E6UdMTnQeQ+1SZUDxTz7SgQcfxEqafqIQHcjdlcNK/pvmmLfSwAs3s2gYwUw==} - - '@prisma/client@7.3.0': - resolution: {integrity: sha512-FXBIxirqQfdC6b6HnNgxGmU7ydCPEPk7maHMOduJJfnTP+MuOGa15X4omjR/zpPUUpm8ef/mEFQjJudOGkXFcQ==} - engines: {node: ^20.19 || ^22.12 || >=24.0} - peerDependencies: - prisma: '*' - typescript: '>=5.4.0' - peerDependenciesMeta: - prisma: - optional: true - typescript: - optional: true - - '@prisma/config@7.3.0': - resolution: {integrity: sha512-QyMV67+eXF7uMtKxTEeQqNu/Be7iH+3iDZOQZW5ttfbSwBamCSdwPszA0dum+Wx27I7anYTPLmRmMORKViSW1A==} - - '@prisma/debug@7.2.0': - resolution: {integrity: sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==} - - '@prisma/debug@7.3.0': - resolution: {integrity: sha512-yh/tHhraCzYkffsI1/3a7SHX8tpgbJu1NPnuxS4rEpJdWAUDHUH25F1EDo6PPzirpyLNkgPPZdhojQK804BGtg==} - - '@prisma/dev@0.20.0': - resolution: {integrity: sha512-ovlBYwWor0OzG+yH4J3Ot+AneD818BttLA+Ii7wjbcLHUrnC4tbUPVGyNd3c/+71KETPKZfjhkTSpdS15dmXNQ==} - - '@prisma/engines-version@7.3.0-16.9d6ad21cbbceab97458517b147a6a09ff43aa735': - resolution: {integrity: sha512-IH2va2ouUHihyiTTRW889LjKAl1CusZOvFfZxCDNpjSENt7g2ndFsK0vdIw/72v7+jCN6YgkHmdAP/BI7SDgyg==} - - '@prisma/engines@7.3.0': - resolution: {integrity: sha512-cWRQoPDXPtR6stOWuWFZf9pHdQ/o8/QNWn0m0zByxf5Kd946Q875XdEJ52pEsX88vOiXUmjuPG3euw82mwQNMg==} - - '@prisma/fetch-engine@7.3.0': - resolution: {integrity: sha512-Mm0F84JMqM9Vxk70pzfNpGJ1lE4hYjOeLMu7nOOD1i83nvp8MSAcFYBnHqLvEZiA6onUR+m8iYogtOY4oPO5lQ==} - - '@prisma/get-platform@7.2.0': - resolution: {integrity: sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==} - - '@prisma/get-platform@7.3.0': - resolution: {integrity: sha512-N7c6m4/I0Q6JYmWKP2RCD/sM9eWiyCPY98g5c0uEktObNSZnugW2U/PO+pwL0UaqzxqTXt7gTsYsb0FnMnJNbg==} - - '@prisma/query-plan-executor@7.2.0': - resolution: {integrity: sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==} - - '@prisma/studio-core@0.13.1': - resolution: {integrity: sha512-agdqaPEePRHcQ7CexEfkX1RvSH9uWDb6pXrZnhCRykhDFAV0/0P3d07WtfiY8hZWb7oRU4v+NkT4cGFHkQJIPg==} - peerDependencies: - '@types/react': ^18.0.0 || ^19.0.0 - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - - '@remixicon/react@4.9.0': - resolution: {integrity: sha512-5/jLDD4DtKxH2B4QVXTobvV1C2uL8ab9D5yAYNtFt+w80O0Ys1xFOrspqROL3fjrZi+7ElFUWE37hBfaAl6U+Q==} - peerDependencies: - react: '>=18.2.0' - - '@rolldown/binding-android-arm64@1.0.0-rc.2': - resolution: {integrity: sha512-AGV80viZ4Hil4C16GFH+PSwq10jclV9oyRFhD+5HdowPOCJ+G+99N5AClQvMkUMIahTY8cX0SQpKEEWcCg6fSA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@rolldown/binding-darwin-arm64@1.0.0-rc.2': - resolution: {integrity: sha512-PYR+PQu1mMmQiiKHN2JiOctvH32Xc/Mf+Su2RSmWtC9BbIqlqsVWjbulnShk0imjRim0IsbkMMCN5vYQwiuqaA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-x64@1.0.0-rc.2': - resolution: {integrity: sha512-X2G36Z6oh5ynoYpE2JAyG+uQ4kO/3N7XydM/I98FNk8VVgDKjajFF+v7TXJ2FMq6xa7Xm0UIUKHW2MRQroqoUA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@rolldown/binding-freebsd-x64@1.0.0-rc.2': - resolution: {integrity: sha512-XpiFTsl9qjiDfrmJF6CE3dgj1nmSbxUIT+p2HIbXV6WOj/32btO8FKkWSsOphUwVinEt3R8HVkVrcLtFNruMMQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.2': - resolution: {integrity: sha512-zjYZ99e47Wlygs4hW+sQ+kshlO8ake9OoY2ecnJ9cwpDGiiIB9rQ3LgP3kt8j6IeVyMSksu//VEhc8Mrd1lRIw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.2': - resolution: {integrity: sha512-Piso04EZ9IHV1aZSsLQVMOPTiCq4Ps2UPL3pchjNXHGJGFiB9U42s22LubPaEBFS+i6tCawS5EarIwex1zC4BA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.2': - resolution: {integrity: sha512-OwJCeMZlmjKsN9pfJfTmqYpe3JC+L6RO87+hu9ajRLr1Lh6cM2FRQ8e48DLRyRDww8Ti695XQvqEANEMmsuzLw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.2': - resolution: {integrity: sha512-uQqBmA8dTWbKvfqbeSsXNUssRGfdgQCc0hkGfhQN7Pf85wG2h0Fd/z2d+ykyT4YbcsjQdgEGxBNsg3v4ekOuEA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-x64-musl@1.0.0-rc.2': - resolution: {integrity: sha512-ItZabVsICCYWHbP+jcAgNzjPAYg5GIVQp/NpqT6iOgWctaMYtobClc5m0kNtxwqfNrLXoyt998xUey4AvcxnGQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rolldown/binding-openharmony-arm64@1.0.0-rc.2': - resolution: {integrity: sha512-U4UYANwafcMXSUC0VqdrqTAgCo2v8T7SiuTYwVFXgia0KOl8jiv3okwCFqeZNuw/G6EWDiqhT8kK1DLgyLsxow==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-wasm32-wasi@1.0.0-rc.2': - resolution: {integrity: sha512-ZIWCjQsMon4tqRoao0Vzowjwx0cmFT3kublh2nNlgeasIJMWlIGHtr0d4fPypm57Rqx4o1h4L8SweoK2q6sMGA==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.2': - resolution: {integrity: sha512-NIo7vwRUPEzZ4MuZGr5YbDdjJ84xdiG+YYf8ZBfTgvIsk9wM0sZamJPEXvaLkzVIHpOw5uqEHXS85Gqqb7aaqQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.2': - resolution: {integrity: sha512-bLKzyLFbvngeNPZocuLo3LILrKwCrkyMxmRXs6fZYDrvh7cyZRw9v56maDL9ipPas0OOmQK1kAKYwvTs30G21Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@rolldown/pluginutils@1.0.0-beta.40': - resolution: {integrity: sha512-s3GeJKSQOwBlzdUrj4ISjJj5SfSh+aqn0wjOar4Bx95iV1ETI7F6S/5hLcfAxZ9kXDcyrAkxPlqmd1ZITttf+w==} - - '@rolldown/pluginutils@1.0.0-rc.2': - resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} - - '@sec-ant/readable-stream@0.4.1': - resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - - '@sindresorhus/is@7.2.0': - resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} - engines: {node: '>=18'} - - '@sindresorhus/merge-streams@4.0.0': - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} - engines: {node: '>=18'} - - '@solid-primitives/event-listener@2.4.3': - resolution: {integrity: sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/keyboard@1.3.3': - resolution: {integrity: sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/resize-observer@2.1.3': - resolution: {integrity: sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/rootless@1.5.2': - resolution: {integrity: sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/static-store@0.1.2': - resolution: {integrity: sha512-ReK+5O38lJ7fT+L6mUFvUr6igFwHBESZF+2Ug842s7fvlVeBdIVEdTCErygff6w7uR6+jrr7J8jQo+cYrEq4Iw==} - peerDependencies: - solid-js: ^1.6.12 - - '@solid-primitives/utils@6.3.2': - resolution: {integrity: sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ==} - peerDependencies: - solid-js: ^1.6.12 - - '@speed-highlight/core@1.2.14': - resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} - - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - - '@tailwindcss/node@4.1.18': - resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} - - '@tailwindcss/oxide-android-arm64@4.1.18': - resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@tailwindcss/oxide-darwin-arm64@4.1.18': - resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.1.18': - resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-freebsd-x64@4.1.18': - resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': - resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': - resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@tailwindcss/oxide-linux-arm64-musl@4.1.18': - resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@tailwindcss/oxide-linux-x64-gnu@4.1.18': - resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@tailwindcss/oxide-linux-x64-musl@4.1.18': - resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@tailwindcss/oxide-wasm32-wasi@4.1.18': - resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': - resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.1.18': - resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide@4.1.18': - resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} - engines: {node: '>= 10'} - - '@tailwindcss/vite@4.1.18': - resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==} - peerDependencies: - vite: ^8.0.0-beta.12 - - '@tanstack/devtools-client@0.0.5': - resolution: {integrity: sha512-hsNDE3iu4frt9cC2ppn1mNRnLKo2uc1/1hXAyY9z4UYb+o40M2clFAhiFoo4HngjfGJDV3x18KVVIq7W4Un+zA==} - engines: {node: '>=18'} - - '@tanstack/devtools-event-bus@0.4.0': - resolution: {integrity: sha512-1t+/csFuDzi+miDxAOh6Xv7VDE80gJEItkTcAZLjV5MRulbO/W8ocjHLI2Do/p2r2/FBU0eKCRTpdqvXaYoHpQ==} - engines: {node: '>=18'} - - '@tanstack/devtools-event-client@0.4.0': - resolution: {integrity: sha512-RPfGuk2bDZgcu9bAJodvO2lnZeHuz4/71HjZ0bGb/SPg8+lyTA+RLSKQvo7fSmPSi8/vcH3aKQ8EM9ywf1olaw==} - engines: {node: '>=18'} - - '@tanstack/devtools-ui@0.4.4': - resolution: {integrity: sha512-5xHXFyX3nom0UaNfiOM92o6ziaHjGo3mcSGe2HD5Xs8dWRZNpdZ0Smd0B9ddEhy0oB+gXyMzZgUJb9DmrZV0Mg==} - engines: {node: '>=18'} - peerDependencies: - solid-js: '>=1.9.7' - - '@tanstack/devtools-utils@0.3.0': - resolution: {integrity: sha512-JgApXVrgtgSLIPrm/QWHx0u6c9Ji0MNMDWhwujapj8eMzux5aOfi+2Ycwzj0A0qITXA12SEPYV3HC568mDtYmQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/react': '>=17.0.0' - preact: '>=10.0.0' - react: '>=17.0.0' - solid-js: '>=1.9.7' - vue: '>=3.2.0' - peerDependenciesMeta: - '@types/react': - optional: true - preact: - optional: true - react: - optional: true - solid-js: - optional: true - vue: - optional: true - - '@tanstack/devtools-vite@0.5.0': - resolution: {integrity: sha512-Ew+ZdTnmTlVjm4q+/XY/dolx/E1BWMYpiRDyU/MXqHf5epri4MLl5C4UZJaO+ZuUCsKPpsW+ufoM99E2Z4rhug==} - engines: {node: '>=18'} - peerDependencies: - vite: ^8.0.0-beta.12 - - '@tanstack/devtools@0.10.5': - resolution: {integrity: sha512-aptV4sMcdEn/zB8zqNqKSKi8pLzfB7BhdP2MuVmyfWgBDYNchqJjhviaxEXW3tJTolbWwc30o+jszwqxOIcIaA==} - engines: {node: '>=18'} - peerDependencies: - solid-js: '>=1.9.7' - - '@tanstack/eslint-plugin-query@5.91.4': - resolution: {integrity: sha512-8a+GAeR7oxJ5laNyYBQ6miPK09Hi18o5Oie/jx8zioXODv/AUFLZQecKabPdpQSLmuDXEBPKFh+W5DKbWlahjQ==} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - - '@tanstack/eslint-plugin-router@1.155.0': - resolution: {integrity: sha512-Qq6uYYtcu1aMzFImEIz0Azcd9iCAbpkA3SBAGjwavFEyptafwnmtANKrjTqq09ej/CNTrTjEQBH72yvbqqTMqw==} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - - '@tanstack/form-core@1.28.0': - resolution: {integrity: sha512-MX3YveB6SKHAJ2yUwp+Ca/PCguub8bVEnLcLUbFLwdkSRMkP0lMGdaZl+F0JuEgZw56c6iFoRyfILhS7OQpydA==} - - '@tanstack/form-devtools@0.2.13': - resolution: {integrity: sha512-1ulPyukzs28GFKuY5Qkic3MHCkLm6wG/4ofqgsruHe44VXeCBMqtlwgExaPHrBOdhtfcy26TSJVDvOVJ+igWBA==} - peerDependencies: - solid-js: '>=1.9.9' - - '@tanstack/history@1.154.14': - resolution: {integrity: sha512-xyIfof8eHBuub1CkBnbKNKQXeRZC4dClhmzePHVOEel4G7lk/dW+TQ16da7CFdeNLv6u6Owf5VoBQxoo6DFTSA==} - engines: {node: '>=12'} - - '@tanstack/pacer-lite@0.1.1': - resolution: {integrity: sha512-y/xtNPNt/YeyoVxE/JCx+T7yjEzpezmbb+toK8DDD1P4m7Kzs5YR956+7OKexG3f8aXgC3rLZl7b1V+yNUSy5w==} - engines: {node: '>=18'} - - '@tanstack/query-core@5.90.20': - resolution: {integrity: sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==} - - '@tanstack/query-devtools@5.93.0': - resolution: {integrity: sha512-+kpsx1NQnOFTZsw6HAFCW3HkKg0+2cepGtAWXjiiSOJJ1CtQpt72EE2nyZb+AjAbLRPoeRmPJ8MtQd8r8gsPdg==} - - '@tanstack/react-devtools@0.9.4': - resolution: {integrity: sha512-6wQf8gVKDks1VL+LI5SS4XWK8dQLIjcDF3iMZfidyesWJNmodWbWlRkdgCmK5SpDSbcygjbp3p+LG2nE/SZ1bQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/react': '>=16.8' - '@types/react-dom': '>=16.8' - react: '>=16.8' - react-dom: '>=16.8' - - '@tanstack/react-form-devtools@0.2.13': - resolution: {integrity: sha512-ggDXw4Pyp5zkbz2j+wJqjTy462PvbHeY97az+cw2GDbtVM5VedpLH86QKAeZofnSgx5ZKPPPn0op4LSAYipDwQ==} - peerDependencies: - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tanstack/react-form-start@1.28.0': - resolution: {integrity: sha512-9DUHFeklJxI4MCt5YMEr1tdfWIvcEMOn0ZDTEb6TL9VnQk6HmZ3AUqO3OdBPOT+MtH2u6VZudqwtPd3SjYQDqQ==} - peerDependencies: - '@tanstack/react-start': ^1.134.9 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@tanstack/react-start': - optional: true - - '@tanstack/react-form@1.28.0': - resolution: {integrity: sha512-ibLcf5QkTogV0Ly944CuqGxWTpHyreNA4Cy8Wtky7zE9wtE3HVapQt4/hUuXo51zihfTkv5URiXpoTSKF5Xosg==} - peerDependencies: - '@tanstack/react-start': '*' - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@tanstack/react-start': - optional: true - - '@tanstack/react-query-devtools@5.91.3': - resolution: {integrity: sha512-nlahjMtd/J1h7IzOOfqeyDh5LNfG0eULwlltPEonYy0QL+nqrBB+nyzJfULV+moL7sZyxc2sHdNJki+vLA9BSA==} - peerDependencies: - '@tanstack/react-query': ^5.90.20 - react: ^18 || ^19 - - '@tanstack/react-query@5.90.20': - resolution: {integrity: sha512-vXBxa+qeyveVO7OA0jX1z+DeyCA4JKnThKv411jd5SORpBKgkcVnYKCiBgECvADvniBX7tobwBmg01qq9JmMJw==} - peerDependencies: - react: ^18 || ^19 - - '@tanstack/react-router-devtools@1.158.0': - resolution: {integrity: sha512-uhciBlsPW67xbDCFyc2RQS00OergfNXYxendGUO2HGy4uTr79aQSCb4l6v+sdlPwUTlzwkAtM6e1illIexF15Q==} - engines: {node: '>=12'} - peerDependencies: - '@tanstack/react-router': ^1.158.0 - '@tanstack/router-core': ^1.158.0 - react: '>=18.0.0 || >=19.0.0' - react-dom: '>=18.0.0 || >=19.0.0' - peerDependenciesMeta: - '@tanstack/router-core': - optional: true - - '@tanstack/react-router-ssr-query@1.158.0': - resolution: {integrity: sha512-9krJIPtGQVec7edA710xT4UJimSvIh0gFvJLd4jCIKfPV0Lc00fjmcBlpYKSK33BsefztG6HXVc2nR8nX+8Teg==} - engines: {node: '>=12'} - peerDependencies: - '@tanstack/query-core': '>=5.90.0' - '@tanstack/react-query': '>=5.90.0' - '@tanstack/react-router': '>=1.127.0' - react: '>=18.0.0 || >=19.0.0' - react-dom: '>=18.0.0 || >=19.0.0' - - '@tanstack/react-router@1.158.0': - resolution: {integrity: sha512-kvTaO6zjq9WWPyo1wwSZx95AjJ9KOvu23cOMgKeDdDQWKF3Z9q3fwhToKMKJoC11T2Vuivz+o/anrxCcOvdRzw==} - engines: {node: '>=12'} - peerDependencies: - react: '>=18.0.0 || >=19.0.0' - react-dom: '>=18.0.0 || >=19.0.0' - - '@tanstack/react-start-client@1.158.0': - resolution: {integrity: sha512-oxo9+nFzsdiOkMFPs3HuVXola34FD2/kDfzO8wMu+KSsCwSRRhXpS7DGq/myw6AtjqiiFkNHeZqvvrlcH523Aw==} - engines: {node: '>=22.12.0'} - peerDependencies: - react: '>=18.0.0 || >=19.0.0' - react-dom: '>=18.0.0 || >=19.0.0' - - '@tanstack/react-start-server@1.158.0': - resolution: {integrity: sha512-J1v8mckJIf2DHOg38XMq7X7CCOqiyLCPqKQDP8GXJ2WgjpBk6l+lemBmyhF1+76LxYWHfsQYwAg5W3cJ8+QqrQ==} - engines: {node: '>=22.12.0'} - peerDependencies: - react: '>=18.0.0 || >=19.0.0' - react-dom: '>=18.0.0 || >=19.0.0' - - '@tanstack/react-start@1.158.0': - resolution: {integrity: sha512-CwfX2XGDVSwim24LWwM24ZxyposE+5Psj2e2PW4YN+AGgfdwm0+1xk9DEmDQp/Vke2OIdhnIXD/IDe7zTGpzcg==} - engines: {node: '>=22.12.0'} - peerDependencies: - react: '>=18.0.0 || >=19.0.0' - react-dom: '>=18.0.0 || >=19.0.0' - vite: ^8.0.0-beta.12 - - '@tanstack/react-store@0.8.0': - resolution: {integrity: sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tanstack/router-core@1.158.0': - resolution: {integrity: sha512-dRMcWY0UB/6OZqSCx/7iUvom0ol18rHSQladygVT8mlth7uxYx3n5BNse8C03efIE8y1Bx+VDOBAKpAZ9BgKog==} - engines: {node: '>=12'} - - '@tanstack/router-devtools-core@1.158.0': - resolution: {integrity: sha512-8FUKfjh8Xz9T9O5yYaiVE0Va5aCMncQyVPKb7yy5M/buDnx9Kh0bPjw/eUZJWftOyxW6/WeR605yjOdx/PnqNw==} - engines: {node: '>=12'} - peerDependencies: - '@tanstack/router-core': ^1.158.0 - csstype: ^3.0.10 - peerDependenciesMeta: - csstype: - optional: true - - '@tanstack/router-generator@1.158.0': - resolution: {integrity: sha512-hVkXQSN/fMD9q3Zn3wNa4PV0Y9VNwQB2bLaecA5i4vc43GX75vmgyiKoMr44BJheUssfVoL/po9a/7sv+N6lKA==} - engines: {node: '>=12'} - - '@tanstack/router-plugin@1.158.0': - resolution: {integrity: sha512-FxTOo/icU373jlOu9nlzR0B1vqc47tKZLw3HwOQwCBL4P4EihOBz+L7dcGyKR8bRBL0rCRWvHQTSHNMOr+fGYQ==} - engines: {node: '>=12'} - peerDependencies: - '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.158.0 - vite: ^8.0.0-beta.12 - vite-plugin-solid: ^2.11.10 - webpack: '>=5.92.0' - peerDependenciesMeta: - '@rsbuild/core': - optional: true - '@tanstack/react-router': - optional: true - vite: - optional: true - vite-plugin-solid: - optional: true - webpack: - optional: true - - '@tanstack/router-ssr-query-core@1.158.0': - resolution: {integrity: sha512-OFtFCYmuVEDo1XcPlcj4HLYZXnmLiX8akJU/4qgE3wjFL8laZCOR6yll9z1Sid8nCaztcD8AKjqzFh0KOGX2Hg==} - engines: {node: '>=12'} - peerDependencies: - '@tanstack/query-core': '>=5.90.0' - '@tanstack/router-core': '>=1.127.0' - - '@tanstack/router-utils@1.158.0': - resolution: {integrity: sha512-qZ76eaLKU6Ae9iI/mc5zizBX149DXXZkBVVO3/QRIll79uKLJZHQlMKR++2ba7JsciBWz1pgpIBcCJPE9S0LVg==} - engines: {node: '>=12'} - - '@tanstack/start-client-core@1.158.0': - resolution: {integrity: sha512-nGuzFEuC+yEMd7inPP185K+tcPlHk8rcg8x/t2dAhytM+r4PxyRkvXrHoKMbQKGYR2CArml96UNEKXWxsAtmow==} - engines: {node: '>=22.12.0'} - - '@tanstack/start-fn-stubs@1.154.7': - resolution: {integrity: sha512-D69B78L6pcFN5X5PHaydv7CScQcKLzJeEYqs7jpuyyqGQHSUIZUjS955j+Sir8cHhuDIovCe2LmsYHeZfWf3dQ==} - engines: {node: '>=22.12.0'} - - '@tanstack/start-plugin-core@1.158.0': - resolution: {integrity: sha512-KiG4ofL1I3A2p3BJ7qhyfugyKh5KMOIURvftmVc33IWLQaSYvCzCHoyaWfvcHIELbkyFpMwd4EauZH3I80BE8A==} - engines: {node: '>=22.12.0'} - peerDependencies: - vite: ^8.0.0-beta.12 - - '@tanstack/start-server-core@1.158.0': - resolution: {integrity: sha512-C5Hgxl79fV8e0sGsFB4akFhmU3zO0FpriyBof7pSKROCEOt8hXq2QstYhb3QVR9KdzKAPR+JHg3BbEOBNUVn7Q==} - engines: {node: '>=22.12.0'} - - '@tanstack/start-storage-context@1.158.0': - resolution: {integrity: sha512-9wkbgZoMlVIFJGmCrSWeOF9sPveVOw8LwSk1YwKj4tQOXurxdOBoQMvkYy+sxcGkhK6CmGGJqsedKVHK3EZQng==} - engines: {node: '>=22.12.0'} - - '@tanstack/store@0.7.7': - resolution: {integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==} - - '@tanstack/store@0.8.0': - resolution: {integrity: sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==} - - '@tanstack/virtual-file-routes@1.154.7': - resolution: {integrity: sha512-cHHDnewHozgjpI+MIVp9tcib6lYEQK5MyUr0ChHpHFGBl8Xei55rohFK0I0ve/GKoHeioaK42Smd8OixPp6CTg==} - engines: {node: '>=12'} - - '@tediousjs/connection-string@0.5.0': - resolution: {integrity: sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==} - - '@ts-morph/common@0.27.0': - resolution: {integrity: sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==} - - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.27.0': - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.28.0': - resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/mssql@9.1.9': - resolution: {integrity: sha512-P0nCgw6vzY23UxZMnbI4N7fnLGANt4LI4yvxze1paPj+LuN28cFv5EI+QidP8udnId/BKhkcRhm/BleNsjK65A==} - - '@types/node@24.10.10': - resolution: {integrity: sha512-+0/4J266CBGPUq/ELg7QUHhN25WYjE0wYTPSQJn1xeu8DOlIOPxXxrNGiLmfAWl7HMMgWFWXpt9IDjMWrF5Iow==} - - '@types/node@25.2.0': - resolution: {integrity: sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==} - - '@types/react-dom@19.2.3': - resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} - peerDependencies: - '@types/react': ^19.2.0 - - '@types/react@19.2.10': - resolution: {integrity: sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==} - - '@types/readable-stream@4.0.23': - resolution: {integrity: sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==} - - '@types/statuses@2.0.6': - resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} - - '@types/validate-npm-package-name@4.0.2': - resolution: {integrity: sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==} - - '@types/webidl-conversions@7.0.3': - resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} - - '@types/whatwg-url@13.0.0': - resolution: {integrity: sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==} - - '@typescript-eslint/eslint-plugin@8.54.0': - resolution: {integrity: sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.54.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.54.0': - resolution: {integrity: sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.54.0': - resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@8.54.0': - resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.54.0': - resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.54.0': - resolution: {integrity: sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/types@8.54.0': - resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.54.0': - resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.54.0': - resolution: {integrity: sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/visitor-keys@8.54.0': - resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typespec/ts-http-runtime@0.3.2': - resolution: {integrity: sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==} - engines: {node: '>=20.0.0'} - - '@vitejs/plugin-react@5.1.3': - resolution: {integrity: sha512-NVUnA6gQCl8jfoYqKqQU5Clv0aPw14KkZYCsX6T9Lfu9slI0LOU10OTwFHS/WmptsMMpshNd/1tuWsHQ2Uk+cg==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - vite: ^8.0.0-beta.12 - - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - - ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - - ansi-escapes@7.2.0: - resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==} - engines: {node: '>=18'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - - ansis@4.2.0: - resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} - engines: {node: '>=14'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - ast-types@0.16.1: - resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} - engines: {node: '>=4'} - - aws-ssl-profiles@1.1.2: - resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} - engines: {node: '>= 6.0.0'} - - babel-dead-code-elimination@1.0.12: - resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==} - - babel-plugin-react-compiler@1.0.0: - resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - baseline-browser-mapping@2.9.19: - resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} - hasBin: true - - better-auth@1.5.0-beta.11: - resolution: {integrity: sha512-rf5Rq217KyN+EuagsYHpzrXZodhPLrUJ6ViTUbmY+HZBvfvHtHxREOrl0Sv+wAXL8XND9P1n2eTIcVHDIuBTvw==} - peerDependencies: - '@lynx-js/react': '*' - '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 - '@sveltejs/kit': ^2.0.0 - '@tanstack/react-start': ^1.0.0 - '@tanstack/solid-start': ^1.0.0 - better-sqlite3: ^12.0.0 - drizzle-kit: '>=0.31.4' - drizzle-orm: '>=0.41.0' - mongodb: ^6.0.0 || ^7.0.0 - mysql2: ^3.0.0 - next: ^14.0.0 || ^15.0.0 || ^16.0.0 - pg: ^8.0.0 - prisma: ^5.0.0 || ^6.0.0 || ^7.0.0 - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - solid-js: ^1.0.0 - svelte: ^4.0.0 || ^5.0.0 - vitest: ^2.0.0 || ^3.0.0 || ^4.0.0 - vue: ^3.0.0 - peerDependenciesMeta: - '@lynx-js/react': - optional: true - '@prisma/client': - optional: true - '@sveltejs/kit': - optional: true - '@tanstack/react-start': - optional: true - '@tanstack/solid-start': - optional: true - better-sqlite3: - optional: true - drizzle-kit: - optional: true - drizzle-orm: - optional: true - mongodb: - optional: true - mysql2: - optional: true - next: - optional: true - pg: - optional: true - prisma: - optional: true - react: - optional: true - react-dom: - optional: true - solid-js: - optional: true - svelte: - optional: true - vitest: - optional: true - vue: - optional: true - - better-call@1.2.0: - resolution: {integrity: sha512-7msprrikJah2Pq+OPJOUkqqlDOpVQysBPfxLfXQZr1XeIPqUD3O5z6qxh0vsAU8m/GDFbJD0n1a4vvTnekM7Kw==} - peerDependencies: - zod: ^4.0.0 - peerDependenciesMeta: - zod: - optional: true - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - birecord@0.1.1: - resolution: {integrity: sha512-VUpsf/qykW0heRlC8LooCq28Kxn3mAqKohhDG/49rrsQ1dT1CXyj/pgXS+5BSRzFTR/3DyIBOqQOrGyZOh71Aw==} - - bl@6.1.6: - resolution: {integrity: sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==} - - blake3-wasm@2.1.5: - resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} - - body-parser@2.2.2: - resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} - engines: {node: '>=18'} - - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - bson@7.2.0: - resolution: {integrity: sha512-YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9QcZNSnQ==} - engines: {node: '>=20.19.0'} - - buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - - bundle-name@4.1.0: - resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} - engines: {node: '>=18'} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - c12@3.1.0: - resolution: {integrity: sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==} - peerDependencies: - magicast: ^0.3.5 - peerDependenciesMeta: - magicast: - optional: true - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - caniuse-lite@1.0.30001767: - resolution: {integrity: sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.2.0: - resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} - engines: {node: '>=20.18.1'} - - chevrotain@10.5.0: - resolution: {integrity: sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A==} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - - citty@0.2.0: - resolution: {integrity: sha512-8csy5IBFI2ex2hTVpaHN2j+LNE199AgiI7y4dMintrr8i0lQiFn+0AWMZrWdHKIgMOer65f8IThysYhoReqjWA==} - - class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - - cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - cli-truncate@5.1.1: - resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} - engines: {node: '>=20'} - - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - code-block-writer@13.0.3: - resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} - - commander@14.0.3: - resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} - engines: {node: '>=20'} - - compare-versions@6.1.1: - resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} - - content-disposition@1.0.1: - resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} - engines: {node: '>=18'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie-es@2.0.0: - resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==} - - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - cookie@1.1.1: - resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} - engines: {node: '>=18'} - - cors@2.8.6: - resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} - engines: {node: '>= 0.10'} - - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - css-select@5.2.2: - resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - csstype@3.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - - dayjs@1.11.19: - resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decode-formdata@0.9.0: - resolution: {integrity: sha512-q5uwOjR3Um5YD+ZWPOF/1sGHVW9A5rCrRwITQChRXlmPkxDFBqCm4jNTIVdGHNH9OnR+V9MoZVgRhsFb+ARbUw==} - - dedent@1.7.1: - resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - deepmerge-ts@7.1.5: - resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} - engines: {node: '>=16.0.0'} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - default-browser-id@5.0.1: - resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} - engines: {node: '>=18'} - - default-browser@5.5.0: - resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} - engines: {node: '>=18'} - - define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - - denque@2.1.0: - resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} - engines: {node: '>=0.10'} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - - destr@2.0.5: - resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - devalue@5.6.2: - resolution: {integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==} - - diff@8.0.3: - resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} - engines: {node: '>=0.3.1'} - - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - - dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} - - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - - dotenv@17.2.3: - resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} - engines: {node: '>=12'} - - drizzle-kit@1.0.0-beta.13-f728631: - resolution: {integrity: sha512-Yfjns5vbi3Y5LmQMWPPGjMh2mD20i1qwRHJrWnqD/O1EJgn4kfH0WuzMdXlqMRtocos+e6nJYm3ZJXeU1efHGQ==} - hasBin: true - - drizzle-orm@1.0.0-beta.13-f728631: - resolution: {integrity: sha512-P+QKVzS80WoeUm2cinAj6z5+56g3N1VlM4kfK29ppKOd1x6TOuYmY6RI9/ABTGxOCIrPEfrxijyqpAqIOwLrjg==} - peerDependencies: - '@aws-sdk/client-rds-data': '>=3' - '@cloudflare/workers-types': '>=4' - '@effect/sql': ^0.48.5 - '@effect/sql-pg': ^0.49.7 - '@electric-sql/pglite': '>=0.2.0' - '@libsql/client': '>=0.10.0' - '@libsql/client-wasm': '>=0.10.0' - '@neondatabase/serverless': '>=0.10.0' - '@op-engineering/op-sqlite': '>=2' - '@opentelemetry/api': ^1.4.1 - '@planetscale/database': '>=1.13' - '@prisma/client': '*' - '@sqlitecloud/drivers': '>=1.0.653' - '@tidbcloud/serverless': '*' - '@tursodatabase/database': '>=0.2.1' - '@tursodatabase/database-common': '>=0.2.1' - '@tursodatabase/database-wasm': '>=0.2.1' - '@types/better-sqlite3': '*' - '@types/mssql': ^9.1.4 - '@types/pg': '*' - '@types/sql.js': '*' - '@upstash/redis': '>=1.34.7' - '@vercel/postgres': '>=0.8.0' - '@xata.io/client': '*' - better-sqlite3: '>=9.3.0' - bun-types: '*' - expo-sqlite: '>=14.0.0' - gel: '>=2' - mssql: ^11.0.1 - mysql2: '>=2' - pg: '>=8' - postgres: '>=3' - prisma: '*' - sql.js: '>=1' - sqlite3: '>=5' - peerDependenciesMeta: - '@aws-sdk/client-rds-data': - optional: true - '@cloudflare/workers-types': - optional: true - '@effect/sql': - optional: true - '@effect/sql-pg': - optional: true - '@electric-sql/pglite': - optional: true - '@libsql/client': - optional: true - '@libsql/client-wasm': - optional: true - '@neondatabase/serverless': - optional: true - '@op-engineering/op-sqlite': - optional: true - '@opentelemetry/api': - optional: true - '@planetscale/database': - optional: true - '@prisma/client': - optional: true - '@sqlitecloud/drivers': - optional: true - '@tidbcloud/serverless': - optional: true - '@tursodatabase/database': - optional: true - '@tursodatabase/database-common': - optional: true - '@tursodatabase/database-wasm': - optional: true - '@types/better-sqlite3': - optional: true - '@types/pg': - optional: true - '@types/sql.js': - optional: true - '@upstash/redis': - optional: true - '@vercel/postgres': - optional: true - '@xata.io/client': - optional: true - better-sqlite3: - optional: true - bun-types: - optional: true - expo-sqlite: - optional: true - gel: - optional: true - mysql2: - optional: true - pg: - optional: true - postgres: - optional: true - prisma: - optional: true - sql.js: - optional: true - sqlite3: - optional: true - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - - eciesjs@0.4.17: - resolution: {integrity: sha512-TOOURki4G7sD1wDCjj7NfLaXZZ49dFOeEb5y39IXpb8p0hRzVvfvzZHOi5JcT+PpyAbi/Y+lxPb8eTag2WYH8w==} - engines: {bun: '>=1', deno: '>=2', node: '>=16'} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - effect@3.18.4: - resolution: {integrity: sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==} - - electron-to-chromium@1.5.286: - resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} - - emoji-regex@10.6.0: - resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - empathic@2.0.0: - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} - engines: {node: '>=14'} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - encoding-sniffer@0.2.1: - resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} - - enhanced-resolve@5.19.0: - resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} - engines: {node: '>=10.13.0'} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - - entities@7.0.1: - resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} - engines: {node: '>=0.12'} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - - error-stack-parser-es@1.0.5: - resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.27.0: - resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==} - engines: {node: '>=18'} - hasBin: true - - esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-plugin-only-warn@1.1.0: - resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} - engines: {node: '>=6'} - - eslint-plugin-react-dom@2.9.4: - resolution: {integrity: sha512-lRa3iN082cX3HRKdbKSESmlj+z4zMR10DughwagV7h+IOd3O07UGnYQhenH08GMSyLy1f2D6QJmKBLGbx2p20g==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - eslint-plugin-react-hooks-extra@2.9.4: - resolution: {integrity: sha512-8hQArFHpXubT+i++8TwIL24vQ5b/ZcnVT3EFOSvy1TdBZw8NqrcFNBVqywQ6YUWX0utuPiTQgeJB0qnBF7gx4g==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - eslint-plugin-react-hooks@7.0.1: - resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} - engines: {node: '>=18'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react-naming-convention@2.9.4: - resolution: {integrity: sha512-Ow9ikJ49tDjeTaO2wfUYlSlVBsbG8AZVqoVFu4HH69FZe6I5LEdjZf/gdXnN2W+/JAy7Ru5vYQ8H8LU3tTZERg==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - eslint-plugin-react-rsc@2.9.4: - resolution: {integrity: sha512-RwBYSLkcGXQV6SQYABdHLrafUmpfdPBYsAa/kvg6smqEn+/vPKSk0I+uAuzkmiw4y4KXW94Q9rlIdJlzOMdJfQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - eslint-plugin-react-web-api@2.9.4: - resolution: {integrity: sha512-/k++qhGoYtMNZrsQT+M08fCGi/VurL1fE/LNiz2fMwOIU7KjXD9N0kGWPFdIAISnYXGzOg53O5WW/mnNR78emQ==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - eslint-plugin-react-x@2.9.4: - resolution: {integrity: sha512-a078MHeM/FdjRu3KJsFX+PCHewZyC77EjAO7QstL/vvwjsFae3PCWMZ8Q4b+mzUsT4FkFxi5mEW43ZHksPWDFw==} - engines: {node: '>=20.19.0'} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - eslint-plugin-turbo@2.8.3: - resolution: {integrity: sha512-9ACQrrjzOfrbBGG1CqzyC67NtOSRcA+vyc9cjbyLyIoVtcK27czO7/WM+R5K3Opz0fb4Uezo6X+csMfL//RfJQ==} - peerDependencies: - eslint: '>6.6.0' - turbo: '>2.0.0' - - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.39.2: - resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - esquery@1.7.0: - resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - eventemitter3@5.0.4: - resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - eventsource-parser@3.0.6: - resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} - engines: {node: '>=18.0.0'} - - eventsource@3.0.7: - resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} - engines: {node: '>=18.0.0'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - execa@9.6.1: - resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} - engines: {node: ^18.19.0 || >=20.5.0} - - express-rate-limit@7.5.1: - resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==} - engines: {node: '>= 16'} - peerDependencies: - express: '>= 4.11' - - express@5.2.1: - resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} - engines: {node: '>= 18'} - - exsolve@1.0.8: - resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} - - fast-check@3.23.2: - resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} - engines: {node: '>=8.0.0'} - - 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: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - - fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - - figures@6.1.0: - resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} - engines: {node: '>=18'} - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - finalhandler@2.1.1: - resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} - engines: {node: '>= 18.0.0'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - framer-motion@12.31.0: - resolution: {integrity: sha512-Tnd0FU05zGRFI3JJmBegXonF1rfuzYeuXd1QSdQ99Ysnppk0yWBWSW2wUsqzRpS5nv0zPNx+y0wtDj4kf0q5RQ==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - - fs-extra@11.3.3: - resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} - engines: {node: '>=14.14'} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - fuzzysort@3.1.0: - resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==} - - fzf@0.5.2: - resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==} - - generate-function@2.3.1: - resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} - engines: {node: '>=18'} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-own-enumerable-keys@1.0.0: - resolution: {integrity: sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==} - engines: {node: '>=14.16'} - - get-port-please@3.2.0: - resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-stream@9.0.1: - resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} - engines: {node: '>=18'} - - get-tsconfig@4.13.1: - resolution: {integrity: sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w==} - - giget@2.0.0: - resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} - hasBin: true - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - goober@2.1.18: - resolution: {integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==} - peerDependencies: - csstype: ^3.0.10 - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - grammex@3.1.12: - resolution: {integrity: sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==} - - graphmatch@1.1.0: - resolution: {integrity: sha512-0E62MaTW5rPZVRLyIJZG/YejmdA/Xr1QydHEw3Vt+qOKkMIOE8WDLc9ZX2bmAjtJFZcId4lEdrdmASsEy7D1QA==} - - graphql@16.12.0: - resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - - h3@2.0.1-rc.11: - resolution: {integrity: sha512-2myzjCqy32c1As9TjZW9fNZXtLqNedjFSrdFy2AjFBQQ3LzrnGoDdFDYfC0tV2e4vcyfJ2Sfo/F6NQhO2Ly/Mw==} - engines: {node: '>=20.11.1'} - peerDependencies: - crossws: ^0.4.1 - peerDependenciesMeta: - crossws: - optional: true - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - headers-polyfill@4.0.3: - resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} - - hermes-estree@0.25.1: - resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} - - hermes-parser@0.25.1: - resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - - hono@4.11.4: - resolution: {integrity: sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==} - engines: {node: '>=16.9.0'} - - hono@4.11.7: - resolution: {integrity: sha512-l7qMiNee7t82bH3SeyUCt9UF15EVmaBvsppY2zQtrbIhl/yzBTny+YUxsVjSjQ6gaqaeVtZmGocom8TzBlA4Yw==} - engines: {node: '>=16.9.0'} - - htmlparser2@10.1.0: - resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} - - http-errors@2.0.1: - resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} - engines: {node: '>= 0.8'} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - http-status-codes@2.3.0: - resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - human-signals@8.0.1: - resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} - engines: {node: '>=18.18.0'} - - husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} - hasBin: true - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - iconv-lite@0.7.2: - resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} - engines: {node: '>=0.10.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - 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: '>= 0.10'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} - engines: {node: '>=18'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-immutable-type@5.0.1: - resolution: {integrity: sha512-LkHEOGVZZXxGl8vDs+10k3DvP++SEoYEAJLRk6buTFi6kD7QekThV7xHS0j6gpnUCQ0zpud/gMDGiV4dQneLTg==} - peerDependencies: - eslint: '*' - typescript: '>=4.7.4' - - is-in-ssh@1.0.0: - resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==} - engines: {node: '>=20'} - - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - - is-interactive@2.0.0: - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} - engines: {node: '>=12'} - - is-node-process@1.2.0: - resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-obj@3.0.0: - resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==} - engines: {node: '>=12'} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - - is-property@1.0.2: - resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} - - is-regexp@3.1.0: - resolution: {integrity: sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==} - engines: {node: '>=12'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-stream@4.0.1: - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} - engines: {node: '>=18'} - - is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} - - is-unicode-supported@2.1.0: - resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} - engines: {node: '>=18'} - - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} - - isbot@5.1.34: - resolution: {integrity: sha512-aCMIBSKd/XPRYdiCQTLC8QHH4YT8B3JUADu+7COgYIZPvkeoMcUHMRjZLM9/7V8fCj+l7FSREc1lOPNjzogo/A==} - engines: {node: '>=18'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - - jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} - - js-md4@0.3.2: - resolution: {integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - - jsbi@4.3.2: - resolution: {integrity: sha512-9fqMSQbhJykSeii05nxKl4m6Eqn2P6rOlYiS+C5Dr/HPIU/7yZxu5qzbs40tgaFORiw2Amd0mirjxatXYMkIew==} - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - json-schema-typed@8.0.2: - resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} - - 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: '>=6'} - hasBin: true - - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - - jsonwebtoken@9.0.3: - resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} - engines: {node: '>=12', npm: '>=6'} - - jwa@2.0.1: - resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - - jws@4.0.1: - resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - kysely@0.28.11: - resolution: {integrity: sha512-zpGIFg0HuoC893rIjYX1BETkVWdDnzTzF5e0kWXJFg5lE0k1/LfNWBejrcnOFu8Q2Rfq/hTDTU7XLUM8QOrpzg==} - engines: {node: '>=20.0.0'} - - launch-editor@2.12.0: - resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - lightningcss-android-arm64@1.30.2: - resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [android] - - lightningcss-android-arm64@1.31.1: - resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [android] - - lightningcss-darwin-arm64@1.30.2: - resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-arm64@1.31.1: - resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.30.2: - resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-darwin-x64@1.31.1: - resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.30.2: - resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-freebsd-x64@1.31.1: - resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.30.2: - resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm-gnueabihf@1.31.1: - resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.30.2: - resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - lightningcss-linux-arm64-gnu@1.31.1: - resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - lightningcss-linux-arm64-musl@1.30.2: - resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - - lightningcss-linux-arm64-musl@1.31.1: - resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - - lightningcss-linux-x64-gnu@1.30.2: - resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - - lightningcss-linux-x64-gnu@1.31.1: - resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - - lightningcss-linux-x64-musl@1.30.2: - resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [musl] - - lightningcss-linux-x64-musl@1.31.1: - resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - libc: [musl] - - lightningcss-win32-arm64-msvc@1.30.2: - resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-arm64-msvc@1.31.1: - resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.30.2: - resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss-win32-x64-msvc@1.31.1: - resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.30.2: - resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} - engines: {node: '>= 12.0.0'} - - lightningcss@1.31.1: - resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} - engines: {node: '>= 12.0.0'} - - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - lint-staged@16.2.7: - resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} - engines: {node: '>=20.17'} - hasBin: true - - listr2@9.0.5: - resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} - engines: {node: '>=20.0.0'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - - lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - - lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - - lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - log-symbols@6.0.0: - resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} - engines: {node: '>=18'} - - log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} - - long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru.min@1.1.4: - resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} - engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} - - memory-pager@1.5.0: - resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} - - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@3.0.2: - resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} - engines: {node: '>=18'} - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} - - miniflare@4.20260131.0: - resolution: {integrity: sha512-CtObRzlAzOUpCFH+MgImykxmDNKthrgIYtC+oLC3UGpve6bGLomKUW4u4EorTvzlQFHe66/9m/+AYbBbpzG0mQ==} - engines: {node: '>=18.0.0'} - hasBin: true - - minimatch@10.1.2: - resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==} - engines: {node: 20 || >=22} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - mongodb-connection-string-url@7.0.1: - resolution: {integrity: sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ==} - engines: {node: '>=20.19.0'} - - mongodb@7.1.0: - resolution: {integrity: sha512-kMfnKunbolQYwCIyrkxNJFB4Ypy91pYqua5NargS/f8ODNSJxT03ZU3n1JqL4mCzbSih8tvmMEMLpKTT7x5gCg==} - engines: {node: '>=20.19.0'} - peerDependencies: - '@aws-sdk/credential-providers': ^3.806.0 - '@mongodb-js/zstd': ^7.0.0 - gcp-metadata: ^7.0.1 - kerberos: ^7.0.0 - mongodb-client-encryption: '>=7.0.0 <7.1.0' - snappy: ^7.3.2 - socks: ^2.8.6 - peerDependenciesMeta: - '@aws-sdk/credential-providers': - optional: true - '@mongodb-js/zstd': - optional: true - gcp-metadata: - optional: true - kerberos: - optional: true - mongodb-client-encryption: - optional: true - snappy: - optional: true - socks: - optional: true - - motion-dom@12.30.1: - resolution: {integrity: sha512-QXB+iFJRzZTqL+Am4a1CRoHdH+0Nq12wLdqQQZZsfHlp9AMt6PA098L/61oVZsDA+Ep3QSGudzpViyRrhYhGcQ==} - - motion-utils@12.29.2: - resolution: {integrity: sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==} - - motion@12.31.0: - resolution: {integrity: sha512-KpZQik3LLFdsiaLdFXQGnty84KcDvvdvBCHSvA9aH+RjQTP6jkJGyngRPSngau13ARUI6TbPphf/Vv/QxwxRJQ==} - peerDependencies: - '@emotion/is-prop-valid': '*' - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/is-prop-valid': - optional: true - react: - optional: true - react-dom: - optional: true - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - mssql@11.0.1: - resolution: {integrity: sha512-KlGNsugoT90enKlR8/G36H0kTxPthDhmtNUCwEHvgRza5Cjpjoj+P2X6eMpFUDN7pFrJZsKadL4x990G8RBE1w==} - engines: {node: '>=18'} - hasBin: true - - msw@2.12.8: - resolution: {integrity: sha512-KOriJUhjefCO+liF7Ie1KlSXcBAQEzuLhPZ4EKuEUSEmAR4YhuuzT9YuGxTipjqDrg6eWQ6oMoGVhvEnqukFGg==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - typescript: '>= 4.8.x' - peerDependenciesMeta: - typescript: - optional: true - - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} - - mysql2@3.15.3: - resolution: {integrity: sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==} - engines: {node: '>= 8.0'} - - named-placeholders@1.1.6: - resolution: {integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==} - engines: {node: '>=8.0.0'} - - nano-spawn@2.0.0: - resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} - engines: {node: '>=20.17'} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - nanostores@1.1.0: - resolution: {integrity: sha512-yJBmDJr18xy47dbNVlHcgdPrulSn1nhSE6Ns9vTG+Nx9VPT6iV1MD6aQFp/t52zpf82FhLLTXAXr30NuCnxvwA==} - engines: {node: ^20.0.0 || >=22.0.0} - - native-duplexpair@1.0.0: - resolution: {integrity: sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - deprecated: Use your platform's native DOMException instead - - node-fetch-native@1.6.7: - resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} - - node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - npm-run-path@6.0.0: - resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} - engines: {node: '>=18'} - - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - - nypm@0.6.4: - resolution: {integrity: sha512-1TvCKjZyyklN+JJj2TS3P4uSQEInrM/HkkuSXsEzm1ApPgBffOn8gFguNnZf07r/1X6vlryfIqMUkJKQMzlZiw==} - engines: {node: '>=18'} - hasBin: true - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-treeify@1.1.33: - resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} - engines: {node: '>= 10'} - - ohash@2.0.11: - resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} - - open@10.2.0: - resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} - engines: {node: '>=18'} - - open@11.0.0: - resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} - engines: {node: '>=20'} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - ora@8.2.0: - resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} - engines: {node: '>=18'} - - outvariant@1.4.3: - resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - package-manager-detector@1.6.0: - resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse-ms@4.0.0: - resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} - engines: {node: '>=18'} - - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - - parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - - path-to-regexp@8.3.0: - resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - - perfect-debounce@1.0.0: - resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - - pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - - pkce-challenge@5.0.1: - resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} - engines: {node: '>=16.20.0'} - - pkg-types@2.3.0: - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - - postcss-selector-parser@7.1.1: - resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} - engines: {node: '>=4'} - - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} - - postgres@3.4.7: - resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} - engines: {node: '>=12'} - - powershell-utils@0.1.0: - resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} - engines: {node: '>=20'} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-plugin-organize-imports@4.3.0: - resolution: {integrity: sha512-FxFz0qFhyBsGdIsb697f/EkvHzi5SZOhWAjxcx2dLt+Q532bAlhswcXGYB1yzjZ69kW8UoadFBw7TyNwlq96Iw==} - peerDependencies: - prettier: '>=2.0' - typescript: '>=2.9' - vue-tsc: ^2.1.0 || 3 - peerDependenciesMeta: - vue-tsc: - optional: true - - prettier-plugin-tailwindcss@0.7.2: - resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==} - engines: {node: '>=20.19'} - peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-hermes': '*' - '@prettier/plugin-oxc': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@trivago/prettier-plugin-sort-imports': '*' - '@zackad/prettier-plugin-twig': '*' - prettier: ^3.0 - prettier-plugin-astro: '*' - prettier-plugin-css-order: '*' - prettier-plugin-jsdoc: '*' - prettier-plugin-marko: '*' - prettier-plugin-multiline-arrays: '*' - prettier-plugin-organize-attributes: '*' - prettier-plugin-organize-imports: '*' - prettier-plugin-sort-imports: '*' - prettier-plugin-svelte: '*' - peerDependenciesMeta: - '@ianvs/prettier-plugin-sort-imports': - optional: true - '@prettier/plugin-hermes': - optional: true - '@prettier/plugin-oxc': - optional: true - '@prettier/plugin-pug': - optional: true - '@shopify/prettier-plugin-liquid': - optional: true - '@trivago/prettier-plugin-sort-imports': - optional: true - '@zackad/prettier-plugin-twig': - optional: true - prettier-plugin-astro: - optional: true - prettier-plugin-css-order: - optional: true - prettier-plugin-jsdoc: - optional: true - prettier-plugin-marko: - optional: true - prettier-plugin-multiline-arrays: - optional: true - prettier-plugin-organize-attributes: - optional: true - prettier-plugin-organize-imports: - optional: true - prettier-plugin-sort-imports: - optional: true - prettier-plugin-svelte: - optional: true - - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} - engines: {node: '>=14'} - hasBin: true - - pretty-ms@9.3.0: - resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} - engines: {node: '>=18'} - - prisma@7.3.0: - resolution: {integrity: sha512-ApYSOLHfMN8WftJA+vL6XwAPOh/aZ0BgUyyKPwUFgjARmG6EBI9LzDPf6SWULQMSAxydV9qn5gLj037nPNlg2w==} - engines: {node: ^20.19 || ^22.12 || >=24.0} - hasBin: true - peerDependencies: - better-sqlite3: '>=9.0.0' - typescript: '>=5.4.0' - peerDependenciesMeta: - better-sqlite3: - optional: true - typescript: - optional: true - - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - - proper-lockfile@4.1.2: - resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - - qs@6.14.1: - resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} - engines: {node: '>=0.6'} - - 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: '>= 0.6'} - - raw-body@3.0.2: - resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} - engines: {node: '>= 0.10'} - - rc9@2.1.2: - resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} - - react-dom@19.2.4: - resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} - peerDependencies: - react: ^19.2.4 - - react-refresh@0.18.0: - resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} - engines: {node: '>=0.10.0'} - - react@19.2.4: - resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} - engines: {node: '>=0.10.0'} - - readable-stream@4.7.0: - resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - recast@0.23.11: - resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} - engines: {node: '>= 4'} - - regexp-to-ast@0.5.0: - resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==} - - remeda@2.33.4: - resolution: {integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - reselect@5.1.1: - resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - - rettime@0.10.1: - resolution: {integrity: sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==} - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - - rolldown@1.0.0-rc.2: - resolution: {integrity: sha512-1g/8Us9J8sgJGn3hZfBecX1z4U3y5KO7V/aV2U1M/9UUzLNqHA8RfFQ/NPT7HLxOIldyIgrcjaYTRvA81KhJIg==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - rou3@0.7.12: - resolution: {integrity: sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==} - - router@2.2.0: - resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} - engines: {node: '>= 18'} - - run-applescript@7.1.0: - resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} - engines: {node: '>=18'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - - send@1.2.1: - resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} - engines: {node: '>= 18'} - - seq-queue@0.0.5: - resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} - - seroval-plugins@1.5.0: - resolution: {integrity: sha512-EAHqADIQondwRZIdeW2I636zgsODzoBDwb3PT/+7TLDWyw1Dy/Xv7iGUIEXXav7usHDE9HVhOU61irI3EnyyHA==} - engines: {node: '>=10'} - peerDependencies: - seroval: ^1.0 - - seroval@1.5.0: - resolution: {integrity: sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==} - engines: {node: '>=10'} - - serve-static@2.2.1: - resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} - engines: {node: '>= 18'} - - set-cookie-parser@2.7.2: - resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - shadcn@3.8.2: - resolution: {integrity: sha512-4iqRkfmDmChg4lC7qBImi0KWrCKJbb0rNSs8QuocHmKAlX9U3s0ZcYUbth+2sv1ueferzfjD2hswCOm9Ng4ceA==} - hasBin: true - - sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shell-quote@1.8.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} - engines: {node: '>= 0.4'} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} - - solid-js@1.9.11: - resolution: {integrity: sha512-WEJtcc5mkh/BnHA6Yrg4whlF8g6QwpmXXRg4P2ztPmcKeHHlH4+djYecBLhSpecZY2RRECXYUwIc/C2r3yzQ4Q==} - - sonner@2.0.7: - resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} - - sparse-bitfield@3.0.3: - resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} - - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - - sqlstring@2.3.3: - resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} - engines: {node: '>= 0.6'} - - srvx@0.10.1: - resolution: {integrity: sha512-A//xtfak4eESMWWydSRFUVvCTQbSwivnGCEf8YGPe2eHU0+Z6znfUTCPF0a7oV3sObSOcrXHlL6Bs9vVctfXdg==} - engines: {node: '>=20.16.0'} - hasBin: true - - statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} - - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - - stdin-discarder@0.2.2: - resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} - engines: {node: '>=18'} - - strict-event-emitter@0.5.1: - resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} - - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - - string-ts@2.3.1: - resolution: {integrity: sha512-xSJq+BS52SaFFAVxuStmx6n5aYZU571uYUnUrPXkPFCfdHyZMMlbP2v2Wx5sNBnAVzq/2+0+mcBLBa3Xa5ubYw==} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} - - string-width@8.1.1: - resolution: {integrity: sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==} - engines: {node: '>=20'} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - stringify-object@5.0.0: - resolution: {integrity: sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==} - engines: {node: '>=14.16'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-final-newline@4.0.0: - resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} - engines: {node: '>=18'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - supports-color@10.2.2: - resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} - engines: {node: '>=18'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - tabbable@6.4.0: - resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} - - tagged-tag@1.0.0: - resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} - engines: {node: '>=20'} - - tailwind-merge@3.4.0: - resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==} - - tailwindcss@4.1.18: - resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} - - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} - engines: {node: '>=6'} - - tarn@3.0.2: - resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==} - engines: {node: '>=8.0.0'} - - tedious@18.6.2: - resolution: {integrity: sha512-g7jC56o3MzLkE3lHkaFe2ZdOVFBahq5bsB60/M4NYUbocw/MCrS89IOEQUFr+ba6pb8ZHczZ/VqCyYeYq0xBAg==} - engines: {node: '>=18'} - - tedious@19.2.0: - resolution: {integrity: sha512-2dDjX0KP54riDvJPiiIozv0WRS/giJb3/JG2lWpa2dgM0Gha7mLAxbTR3ltPkGzfoS6M3oDnhYnWuzeaZibHuQ==} - engines: {node: '>=18.17'} - - tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - - tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - - tinyexec@1.0.2: - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} - engines: {node: '>=18'} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - tldts-core@7.0.22: - resolution: {integrity: sha512-KgbTDC5wzlL6j/x6np6wCnDSMUq4kucHNm00KXPbfNzmllCmtmvtykJHfmgdHntwIeupW04y8s1N/43S1PkQDw==} - - tldts@7.0.22: - resolution: {integrity: sha512-nqpKFC53CgopKPjT6Wfb6tpIcZXHcI6G37hesvikhx0EmUGPkZrujRyAjgnmp1SHNgpQfKVanZ+KfpANFt2Hxw==} - hasBin: true - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - tough-cookie@6.0.0: - resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} - engines: {node: '>=16'} - - tr46@5.1.1: - resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} - engines: {node: '>=18'} - - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-declaration-location@1.0.7: - resolution: {integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==} - peerDependencies: - typescript: '>=4.0.0' - - ts-morph@26.0.0: - resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==} - - ts-pattern@5.9.0: - resolution: {integrity: sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg==} - - tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} - engines: {node: '>=18.0.0'} - hasBin: true - - turbo-darwin-64@2.8.3: - resolution: {integrity: sha512-4kXRLfcygLOeNcP6JquqRLmGB/ATjjfehiojL2dJkL7GFm3SPSXbq7oNj8UbD8XriYQ5hPaSuz59iF1ijPHkTw==} - cpu: [x64] - os: [darwin] - - turbo-darwin-arm64@2.8.3: - resolution: {integrity: sha512-xF7uCeC0UY0Hrv/tqax0BMbFlVP1J/aRyeGQPZT4NjvIPj8gSPDgFhfkfz06DhUwDg5NgMo04uiSkAWE8WB/QQ==} - cpu: [arm64] - os: [darwin] - - turbo-linux-64@2.8.3: - resolution: {integrity: sha512-vxMDXwaOjweW/4etY7BxrXCSkvtwh0PbwVafyfT1Ww659SedUxd5rM3V2ZCmbwG8NiCfY7d6VtxyHx3Wh1GoZA==} - cpu: [x64] - os: [linux] - - turbo-linux-arm64@2.8.3: - resolution: {integrity: sha512-mQX7uYBZFkuPLLlKaNe9IjR1JIef4YvY8f21xFocvttXvdPebnq3PK1Zjzl9A1zun2BEuWNUwQIL8lgvN9Pm3Q==} - cpu: [arm64] - os: [linux] - - turbo-windows-64@2.8.3: - resolution: {integrity: sha512-YLGEfppGxZj3VWcNOVa08h6ISsVKiG85aCAWosOKNUjb6yErWEuydv6/qImRJUI+tDLvDvW7BxopAkujRnWCrw==} - cpu: [x64] - os: [win32] - - turbo-windows-arm64@2.8.3: - resolution: {integrity: sha512-afTUGKBRmOJU1smQSBnFGcbq0iabAPwh1uXu2BVk7BREg30/1gMnJh9DFEQTah+UD3n3ru8V55J83RQNFfqoyw==} - cpu: [arm64] - os: [win32] - - turbo@2.8.3: - resolution: {integrity: sha512-8Osxz5Tu/Dw2kb31EAY+nhq/YZ3wzmQSmYa1nIArqxgCAldxv9TPlrAiaBUDVnKA4aiPn0OFBD1ACcpc5VFOAQ==} - hasBin: true - - tw-animate-css@1.4.0: - resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@5.4.3: - resolution: {integrity: sha512-AXSAQJu79WGc79/3e9/CR77I/KQgeY1AhNvcShIH4PTcGYyC4xv6H4R4AUOwkPS5799KlVDAu8zExeCrkGquiA==} - engines: {node: '>=20'} - - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} - - typescript-eslint@8.54.0: - resolution: {integrity: sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - - ufo@1.6.3: - resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} - - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - - undici@7.18.2: - resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==} - engines: {node: '>=20.18.1'} - - undici@7.20.0: - resolution: {integrity: sha512-MJZrkjyd7DeC+uPZh+5/YaMDxFiiEEaDgbUSVMXayofAkDWF1088CDo+2RPg7B1BuS1qf1vgNE7xqwPxE0DuSQ==} - engines: {node: '>=20.18.1'} - - unenv@2.0.0-rc.24: - resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} - - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - unplugin@2.3.11: - resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} - engines: {node: '>=18.12.0'} - - until-async@3.0.2: - resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} - - update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - use-sync-external-store@1.6.0: - resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - - valibot@1.2.0: - resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} - peerDependencies: - typescript: '>=5' - peerDependenciesMeta: - typescript: - optional: true - - validate-npm-package-name@7.0.2: - resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} - engines: {node: ^20.17.0 || >=22.9.0} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - vite@8.0.0-beta.12: - resolution: {integrity: sha512-qW5a0fFhcprMTPmVNtvBdSoIDiUygIAwU6zSpd7Y67nOt+Mc/xrMw/kJXxIM8EMrjMTDpiqRtGjk8pGiKDlRNg==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - esbuild: ^0.27.0 - jiti: '>=1.21.0' - less: ^4.0.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - esbuild: - optional: true - jiti: - optional: true - less: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - - vitefu@1.1.1: - resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} - peerDependencies: - vite: ^8.0.0-beta.12 - peerDependenciesMeta: - vite: - optional: true - - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - - webpack-virtual-modules@0.6.2: - resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - - whatwg-url@14.2.0: - resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} - engines: {node: '>=18'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - workerd@1.20260131.0: - resolution: {integrity: sha512-4zZxOdWeActbRfydQQlj7vZ2ay01AjjNC4K3stjmWC3xZHeXeN3EAROwsWE83SZHhtw4rn18srrhtXoQvQMw3Q==} - engines: {node: '>=16'} - hasBin: true - - wrangler@4.62.0: - resolution: {integrity: sha512-DogP9jifqw85g33BqwF6m21YBW5J7+Ep9IJLgr6oqHU0RkA79JMN5baeWXdmnIWZl+VZh6bmtNtR+5/Djd32tg==} - engines: {node: '>=20.0.0'} - hasBin: true - peerDependencies: - '@cloudflare/workers-types': ^4.20260131.0 - peerDependenciesMeta: - '@cloudflare/workers-types': - optional: true - - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@9.0.2: - resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} - engines: {node: '>=18'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - wsl-utils@0.1.0: - resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} - engines: {node: '>=18'} - - wsl-utils@0.3.1: - resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} - engines: {node: '>=20'} - - xmlbuilder2@4.0.3: - resolution: {integrity: sha512-bx8Q1STctnNaaDymWnkfQLKofs0mGNN7rLLapJlGuV3VlvegD7Ls4ggMjE3aUSWItCCzU0PEv45lI87iSigiCA==} - engines: {node: '>=20.0'} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} - engines: {node: '>= 14.6'} - hasBin: true - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} - engines: {node: '>=18'} - - yoctocolors@2.1.2: - resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} - engines: {node: '>=18'} - - youch-core@0.3.3: - resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} - - youch@4.1.0-beta.10: - resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} - - zeptomatch@2.1.0: - resolution: {integrity: sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==} - - zod-to-json-schema@3.25.1: - resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} - peerDependencies: - zod: ^3.25 || ^4 - - zod-validation-error@4.0.2: - resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - zod: ^3.25.0 || ^4.0.0 - - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - - zod@4.3.6: - resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} - -snapshots: - - '@antfu/ni@25.0.0': - dependencies: - ansis: 4.2.0 - fzf: 0.5.2 - package-manager-detector: 1.6.0 - tinyexec: 1.0.2 - - '@azure-rest/core-client@2.5.1': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 - '@azure/core-tracing': 1.3.1 - '@typespec/ts-http-runtime': 0.3.2 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/abort-controller@2.1.2': - dependencies: - tslib: 2.8.1 - - '@azure/core-auth@1.10.1': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.13.1 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/core-client@1.10.1': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 - '@azure/core-tracing': 1.3.1 - '@azure/core-util': 1.13.1 - '@azure/logger': 1.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/core-http-compat@2.3.1': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-client': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 - transitivePeerDependencies: - - supports-color - - '@azure/core-lro@2.7.2': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.13.1 - '@azure/logger': 1.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/core-paging@1.6.2': - dependencies: - tslib: 2.8.1 - - '@azure/core-rest-pipeline@1.22.2': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 - '@azure/core-tracing': 1.3.1 - '@azure/core-util': 1.13.1 - '@azure/logger': 1.3.0 - '@typespec/ts-http-runtime': 0.3.2 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/core-tracing@1.3.1': - dependencies: - tslib: 2.8.1 - - '@azure/core-util@1.13.1': - dependencies: - '@azure/abort-controller': 2.1.2 - '@typespec/ts-http-runtime': 0.3.2 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/identity@4.13.0': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 - '@azure/core-client': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 - '@azure/core-tracing': 1.3.1 - '@azure/core-util': 1.13.1 - '@azure/logger': 1.3.0 - '@azure/msal-browser': 4.28.1 - '@azure/msal-node': 3.8.6 - open: 10.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/keyvault-common@2.0.0': - dependencies: - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 - '@azure/core-client': 1.10.1 - '@azure/core-rest-pipeline': 1.22.2 - '@azure/core-tracing': 1.3.1 - '@azure/core-util': 1.13.1 - '@azure/logger': 1.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/keyvault-keys@4.10.0': - dependencies: - '@azure-rest/core-client': 2.5.1 - '@azure/abort-controller': 2.1.2 - '@azure/core-auth': 1.10.1 - '@azure/core-http-compat': 2.3.1 - '@azure/core-lro': 2.7.2 - '@azure/core-paging': 1.6.2 - '@azure/core-rest-pipeline': 1.22.2 - '@azure/core-tracing': 1.3.1 - '@azure/core-util': 1.13.1 - '@azure/keyvault-common': 2.0.0 - '@azure/logger': 1.3.0 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/logger@1.3.0': - dependencies: - '@typespec/ts-http-runtime': 0.3.2 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@azure/msal-browser@4.28.1': - dependencies: - '@azure/msal-common': 15.14.1 - - '@azure/msal-common@15.14.1': {} - - '@azure/msal-node@3.8.6': - dependencies: - '@azure/msal-common': 15.14.1 - jsonwebtoken: 9.0.3 - uuid: 8.3.2 - - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/code-frame@7.29.0': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.29.0': {} - - '@babel/core@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.0 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.29.0': - dependencies: - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-annotate-as-pure@7.27.3': - dependencies: - '@babel/types': 7.29.0 - - '@babel/helper-compilation-targets@7.28.6': - dependencies: - '@babel/compat-data': 7.29.0 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.29.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-member-expression-to-functions@7.28.5': - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.28.6': - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-optimise-call-expression@7.27.1': - dependencies: - '@babel/types': 7.29.0 - - '@babel/helper-plugin-utils@7.28.6': {} - - '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helpers@7.28.6': - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - - '@babel/parser@7.29.0': - dependencies: - '@babel/types': 7.29.0 - - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color - - '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color - - '@babel/runtime@7.28.6': {} - - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - - '@babel/traverse@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.0 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.29.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@base-ui/react@1.1.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@babel/runtime': 7.28.6 - '@base-ui/utils': 0.2.4(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@floating-ui/utils': 0.2.10 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - reselect: 5.1.1 - tabbable: 6.4.0 - use-sync-external-store: 1.6.0(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.10 - - '@base-ui/utils@0.2.4(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@babel/runtime': 7.28.6 - '@floating-ui/utils': 0.2.10 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - reselect: 5.1.1 - use-sync-external-store: 1.6.0(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.10 - - '@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0)': - dependencies: - '@better-auth/utils': 0.3.1 - '@better-fetch/fetch': 1.1.21 - '@standard-schema/spec': 1.1.0 - better-call: 1.2.0(zod@4.3.6) - jose: 6.1.3 - kysely: 0.28.11 - nanostores: 1.1.0 - zod: 4.3.6 - - '@better-auth/drizzle-adapter@https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(@better-auth/utils@0.3.1)(prettier@3.8.1)': - dependencies: - '@better-auth/core': 1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) - '@better-auth/utils': 0.3.1 - prettier: 3.8.1 - - '@better-auth/kysely-adapter@1.5.0-beta.11(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(@better-auth/utils@0.3.1)(kysely@0.28.11)': - dependencies: - '@better-auth/core': 1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) - '@better-auth/utils': 0.3.1 - kysely: 0.28.11 - - '@better-auth/memory-adapter@1.5.0-beta.11(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(@better-auth/utils@0.3.1)': - dependencies: - '@better-auth/core': 1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) - '@better-auth/utils': 0.3.1 - - '@better-auth/mongo-adapter@1.5.0-beta.11(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(@better-auth/utils@0.3.1)(mongodb@7.1.0)': - dependencies: - '@better-auth/core': 1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) - '@better-auth/utils': 0.3.1 - mongodb: 7.1.0 - - '@better-auth/prisma-adapter@1.5.0-beta.11(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(@better-auth/utils@0.3.1)(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))': - dependencies: - '@better-auth/core': 1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) - '@better-auth/utils': 0.3.1 - '@prisma/client': 7.3.0(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3) - prisma: 7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - - '@better-auth/telemetry@1.5.0-beta.11(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))': - dependencies: - '@better-auth/core': 1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) - '@better-auth/utils': 0.3.1 - '@better-fetch/fetch': 1.1.21 - - '@better-auth/utils@0.3.1': {} - - '@better-fetch/fetch@1.1.21': {} - - '@chevrotain/cst-dts-gen@10.5.0': - dependencies: - '@chevrotain/gast': 10.5.0 - '@chevrotain/types': 10.5.0 - lodash: 4.17.21 - - '@chevrotain/gast@10.5.0': - dependencies: - '@chevrotain/types': 10.5.0 - lodash: 4.17.21 - - '@chevrotain/types@10.5.0': {} - - '@chevrotain/utils@10.5.0': {} - - '@cloudflare/kv-asset-handler@0.4.2': {} - - '@cloudflare/unenv-preset@2.12.0(unenv@2.0.0-rc.24)(workerd@1.20260131.0)': - dependencies: - unenv: 2.0.0-rc.24 - optionalDependencies: - workerd: 1.20260131.0 - - '@cloudflare/vite-plugin@1.23.0(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))(workerd@1.20260131.0)(wrangler@4.62.0)': - dependencies: - '@cloudflare/unenv-preset': 2.12.0(unenv@2.0.0-rc.24)(workerd@1.20260131.0) - miniflare: 4.20260131.0 - unenv: 2.0.0-rc.24 - vite: 8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - wrangler: 4.62.0 - ws: 8.18.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - workerd - - '@cloudflare/workerd-darwin-64@1.20260131.0': - optional: true - - '@cloudflare/workerd-darwin-arm64@1.20260131.0': - optional: true - - '@cloudflare/workerd-linux-64@1.20260131.0': - optional: true - - '@cloudflare/workerd-linux-arm64@1.20260131.0': - optional: true - - '@cloudflare/workerd-windows-64@1.20260131.0': - optional: true - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@dotenvx/dotenvx@1.52.0': - dependencies: - commander: 11.1.0 - dotenv: 17.2.3 - eciesjs: 0.4.17 - execa: 5.1.1 - fdir: 6.5.0(picomatch@4.0.3) - ignore: 5.3.2 - object-treeify: 1.1.33 - picomatch: 4.0.3 - which: 4.0.0 - - '@drizzle-team/brocli@0.11.0': {} - - '@ecies/ciphers@0.2.5(@noble/ciphers@1.3.0)': - dependencies: - '@noble/ciphers': 1.3.0 - - '@electric-sql/pglite-socket@0.0.20(@electric-sql/pglite@0.3.15)': - dependencies: - '@electric-sql/pglite': 0.3.15 - - '@electric-sql/pglite-tools@0.2.20(@electric-sql/pglite@0.3.15)': - dependencies: - '@electric-sql/pglite': 0.3.15 - - '@electric-sql/pglite@0.3.15': {} - - '@emnapi/core@1.8.1': - dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.8.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.1.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@esbuild/aix-ppc64@0.25.12': - optional: true - - '@esbuild/aix-ppc64@0.27.0': - optional: true - - '@esbuild/aix-ppc64@0.27.2': - optional: true - - '@esbuild/android-arm64@0.25.12': - optional: true - - '@esbuild/android-arm64@0.27.0': - optional: true - - '@esbuild/android-arm64@0.27.2': - optional: true - - '@esbuild/android-arm@0.25.12': - optional: true - - '@esbuild/android-arm@0.27.0': - optional: true - - '@esbuild/android-arm@0.27.2': - optional: true - - '@esbuild/android-x64@0.25.12': - optional: true - - '@esbuild/android-x64@0.27.0': - optional: true - - '@esbuild/android-x64@0.27.2': - optional: true - - '@esbuild/darwin-arm64@0.25.12': - optional: true - - '@esbuild/darwin-arm64@0.27.0': - optional: true - - '@esbuild/darwin-arm64@0.27.2': - optional: true - - '@esbuild/darwin-x64@0.25.12': - optional: true - - '@esbuild/darwin-x64@0.27.0': - optional: true - - '@esbuild/darwin-x64@0.27.2': - optional: true - - '@esbuild/freebsd-arm64@0.25.12': - optional: true - - '@esbuild/freebsd-arm64@0.27.0': - optional: true - - '@esbuild/freebsd-arm64@0.27.2': - optional: true - - '@esbuild/freebsd-x64@0.25.12': - optional: true - - '@esbuild/freebsd-x64@0.27.0': - optional: true - - '@esbuild/freebsd-x64@0.27.2': - optional: true - - '@esbuild/linux-arm64@0.25.12': - optional: true - - '@esbuild/linux-arm64@0.27.0': - optional: true - - '@esbuild/linux-arm64@0.27.2': - optional: true - - '@esbuild/linux-arm@0.25.12': - optional: true - - '@esbuild/linux-arm@0.27.0': - optional: true - - '@esbuild/linux-arm@0.27.2': - optional: true - - '@esbuild/linux-ia32@0.25.12': - optional: true - - '@esbuild/linux-ia32@0.27.0': - optional: true - - '@esbuild/linux-ia32@0.27.2': - optional: true - - '@esbuild/linux-loong64@0.25.12': - optional: true - - '@esbuild/linux-loong64@0.27.0': - optional: true - - '@esbuild/linux-loong64@0.27.2': - optional: true - - '@esbuild/linux-mips64el@0.25.12': - optional: true - - '@esbuild/linux-mips64el@0.27.0': - optional: true - - '@esbuild/linux-mips64el@0.27.2': - optional: true - - '@esbuild/linux-ppc64@0.25.12': - optional: true - - '@esbuild/linux-ppc64@0.27.0': - optional: true - - '@esbuild/linux-ppc64@0.27.2': - optional: true - - '@esbuild/linux-riscv64@0.25.12': - optional: true - - '@esbuild/linux-riscv64@0.27.0': - optional: true - - '@esbuild/linux-riscv64@0.27.2': - optional: true - - '@esbuild/linux-s390x@0.25.12': - optional: true - - '@esbuild/linux-s390x@0.27.0': - optional: true - - '@esbuild/linux-s390x@0.27.2': - optional: true - - '@esbuild/linux-x64@0.25.12': - optional: true - - '@esbuild/linux-x64@0.27.0': - optional: true - - '@esbuild/linux-x64@0.27.2': - optional: true - - '@esbuild/netbsd-arm64@0.25.12': - optional: true - - '@esbuild/netbsd-arm64@0.27.0': - optional: true - - '@esbuild/netbsd-arm64@0.27.2': - optional: true - - '@esbuild/netbsd-x64@0.25.12': - optional: true - - '@esbuild/netbsd-x64@0.27.0': - optional: true - - '@esbuild/netbsd-x64@0.27.2': - optional: true - - '@esbuild/openbsd-arm64@0.25.12': - optional: true - - '@esbuild/openbsd-arm64@0.27.0': - optional: true - - '@esbuild/openbsd-arm64@0.27.2': - optional: true - - '@esbuild/openbsd-x64@0.25.12': - optional: true - - '@esbuild/openbsd-x64@0.27.0': - optional: true - - '@esbuild/openbsd-x64@0.27.2': - optional: true - - '@esbuild/openharmony-arm64@0.25.12': - optional: true - - '@esbuild/openharmony-arm64@0.27.0': - optional: true - - '@esbuild/openharmony-arm64@0.27.2': - optional: true - - '@esbuild/sunos-x64@0.25.12': - optional: true - - '@esbuild/sunos-x64@0.27.0': - optional: true - - '@esbuild/sunos-x64@0.27.2': - optional: true - - '@esbuild/win32-arm64@0.25.12': - optional: true - - '@esbuild/win32-arm64@0.27.0': - optional: true - - '@esbuild/win32-arm64@0.27.2': - optional: true - - '@esbuild/win32-ia32@0.25.12': - optional: true - - '@esbuild/win32-ia32@0.27.0': - optional: true - - '@esbuild/win32-ia32@0.27.2': - optional: true - - '@esbuild/win32-x64@0.25.12': - optional: true - - '@esbuild/win32-x64@0.27.0': - optional: true - - '@esbuild/win32-x64@0.27.2': - optional: true - - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': - dependencies: - eslint: 9.39.2(jiti@2.6.1) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.2': {} - - '@eslint-react/ast@2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-react/eff': 2.9.4 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - string-ts: 2.3.1 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@eslint-react/core@2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@eslint-react/eff@2.9.4': {} - - '@eslint-react/eslint-plugin@2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - eslint-plugin-react-dom: 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-hooks-extra: 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-naming-convention: 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-rsc: 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-web-api: 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-react-x: 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@eslint-react/shared@2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-react/eff': 2.9.4 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - ts-pattern: 5.9.0 - typescript: 5.9.3 - zod: 4.3.6 - transitivePeerDependencies: - - supports-color - - '@eslint-react/var@2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@eslint/config-array@0.21.1': - dependencies: - '@eslint/object-schema': 2.1.7 - debug: 4.4.3 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.4.2': - dependencies: - '@eslint/core': 0.17.0 - - '@eslint/core@0.17.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.3': - dependencies: - ajv: 6.12.6 - debug: 4.4.3 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.39.2': {} - - '@eslint/object-schema@2.1.7': {} - - '@eslint/plugin-kit@0.4.1': - dependencies: - '@eslint/core': 0.17.0 - levn: 0.4.1 - - '@floating-ui/core@1.7.4': - dependencies: - '@floating-ui/utils': 0.2.10 - - '@floating-ui/dom@1.7.5': - dependencies: - '@floating-ui/core': 1.7.4 - '@floating-ui/utils': 0.2.10 - - '@floating-ui/react-dom@2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@floating-ui/dom': 1.7.5 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@floating-ui/utils@0.2.10': {} - - '@hono/node-server@1.19.9(hono@4.11.4)': - dependencies: - hono: 4.11.4 - - '@hono/node-server@1.19.9(hono@4.11.7)': - dependencies: - hono: 4.11.7 - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.7': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.4.3 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.4.3': {} - - '@img/colour@1.0.0': {} - - '@img/sharp-darwin-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 - optional: true - - '@img/sharp-darwin-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-arm@1.2.4': - optional: true - - '@img/sharp-libvips-linux-ppc64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-riscv64@1.2.4': - optional: true - - '@img/sharp-libvips-linux-s390x@1.2.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.2.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - optional: true - - '@img/sharp-linux-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 - optional: true - - '@img/sharp-linux-arm@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 - optional: true - - '@img/sharp-linux-ppc64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 - optional: true - - '@img/sharp-linux-riscv64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 - optional: true - - '@img/sharp-linux-s390x@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 - optional: true - - '@img/sharp-linux-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.34.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - optional: true - - '@img/sharp-wasm32@0.34.5': - dependencies: - '@emnapi/runtime': 1.8.1 - optional: true - - '@img/sharp-win32-arm64@0.34.5': - optional: true - - '@img/sharp-win32-ia32@0.34.5': - optional: true - - '@img/sharp-win32-x64@0.34.5': - optional: true - - '@inquirer/ansi@1.0.2': {} - - '@inquirer/confirm@5.1.21(@types/node@25.2.0)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.2.0) - '@inquirer/type': 3.0.10(@types/node@25.2.0) - optionalDependencies: - '@types/node': 25.2.0 - - '@inquirer/core@10.3.2(@types/node@25.2.0)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.2.0) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 25.2.0 - - '@inquirer/figures@1.0.15': {} - - '@inquirer/type@3.0.10(@types/node@25.2.0)': - optionalDependencies: - '@types/node': 25.2.0 - - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.1': - dependencies: - '@isaacs/balanced-match': 4.0.1 - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@js-joda/core@5.7.0': {} - - '@js-temporal/polyfill@0.5.1': - dependencies: - jsbi: 4.3.2 - - '@modelcontextprotocol/sdk@1.25.3(hono@4.11.7)(zod@3.25.76)': - dependencies: - '@hono/node-server': 1.19.9(hono@4.11.7) - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) - content-type: 1.0.5 - cors: 2.8.6 - cross-spawn: 7.0.6 - eventsource: 3.0.7 - eventsource-parser: 3.0.6 - express: 5.2.1 - express-rate-limit: 7.5.1(express@5.2.1) - jose: 6.1.3 - json-schema-typed: 8.0.2 - pkce-challenge: 5.0.1 - raw-body: 3.0.2 - zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) - transitivePeerDependencies: - - hono - - supports-color - - '@mongodb-js/saslprep@1.4.5': - dependencies: - sparse-bitfield: 3.0.3 - - '@mrleebo/prisma-ast@0.13.1': - dependencies: - chevrotain: 10.5.0 - lilconfig: 2.1.0 - - '@mswjs/interceptors@0.41.0': - dependencies: - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/logger': 0.3.0 - '@open-draft/until': 2.1.0 - is-node-process: 1.2.0 - outvariant: 1.4.3 - strict-event-emitter: 0.5.1 - - '@napi-rs/wasm-runtime@1.1.1': - dependencies: - '@emnapi/core': 1.8.1 - '@emnapi/runtime': 1.8.1 - '@tybys/wasm-util': 0.10.1 - optional: true - - '@noble/ciphers@1.3.0': {} - - '@noble/ciphers@2.1.1': {} - - '@noble/curves@1.9.7': - dependencies: - '@noble/hashes': 1.8.0 - - '@noble/hashes@1.8.0': {} - - '@noble/hashes@2.0.1': {} - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 - - '@oozcitak/dom@2.0.2': - dependencies: - '@oozcitak/infra': 2.0.2 - '@oozcitak/url': 3.0.0 - '@oozcitak/util': 10.0.0 - - '@oozcitak/infra@2.0.2': - dependencies: - '@oozcitak/util': 10.0.0 - - '@oozcitak/url@3.0.0': - dependencies: - '@oozcitak/infra': 2.0.2 - '@oozcitak/util': 10.0.0 - - '@oozcitak/util@10.0.0': {} - - '@open-draft/deferred-promise@2.2.0': {} - - '@open-draft/logger@0.3.0': - dependencies: - is-node-process: 1.2.0 - outvariant: 1.4.3 - - '@open-draft/until@2.1.0': {} - - '@oxc-project/runtime@0.111.0': {} - - '@oxc-project/types@0.111.0': {} - - '@poppinss/colors@4.1.6': - dependencies: - kleur: 4.1.5 - - '@poppinss/dumper@0.6.5': - dependencies: - '@poppinss/colors': 4.1.6 - '@sindresorhus/is': 7.2.0 - supports-color: 10.2.2 - - '@poppinss/exception@1.2.3': {} - - '@prisma/client-runtime-utils@7.3.0': {} - - '@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3)': - dependencies: - '@prisma/client-runtime-utils': 7.3.0 - optionalDependencies: - prisma: 7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - typescript: 5.9.3 - - '@prisma/config@7.3.0': - dependencies: - c12: 3.1.0 - deepmerge-ts: 7.1.5 - effect: 3.18.4 - empathic: 2.0.0 - transitivePeerDependencies: - - magicast - - '@prisma/debug@7.2.0': {} - - '@prisma/debug@7.3.0': {} - - '@prisma/dev@0.20.0(typescript@5.9.3)': - dependencies: - '@electric-sql/pglite': 0.3.15 - '@electric-sql/pglite-socket': 0.0.20(@electric-sql/pglite@0.3.15) - '@electric-sql/pglite-tools': 0.2.20(@electric-sql/pglite@0.3.15) - '@hono/node-server': 1.19.9(hono@4.11.4) - '@mrleebo/prisma-ast': 0.13.1 - '@prisma/get-platform': 7.2.0 - '@prisma/query-plan-executor': 7.2.0 - foreground-child: 3.3.1 - get-port-please: 3.2.0 - hono: 4.11.4 - http-status-codes: 2.3.0 - pathe: 2.0.3 - proper-lockfile: 4.1.2 - remeda: 2.33.4 - std-env: 3.10.0 - valibot: 1.2.0(typescript@5.9.3) - zeptomatch: 2.1.0 - transitivePeerDependencies: - - typescript - - '@prisma/engines-version@7.3.0-16.9d6ad21cbbceab97458517b147a6a09ff43aa735': {} - - '@prisma/engines@7.3.0': - dependencies: - '@prisma/debug': 7.3.0 - '@prisma/engines-version': 7.3.0-16.9d6ad21cbbceab97458517b147a6a09ff43aa735 - '@prisma/fetch-engine': 7.3.0 - '@prisma/get-platform': 7.3.0 - - '@prisma/fetch-engine@7.3.0': - dependencies: - '@prisma/debug': 7.3.0 - '@prisma/engines-version': 7.3.0-16.9d6ad21cbbceab97458517b147a6a09ff43aa735 - '@prisma/get-platform': 7.3.0 - - '@prisma/get-platform@7.2.0': - dependencies: - '@prisma/debug': 7.2.0 - - '@prisma/get-platform@7.3.0': - dependencies: - '@prisma/debug': 7.3.0 - - '@prisma/query-plan-executor@7.2.0': {} - - '@prisma/studio-core@0.13.1(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@types/react': 19.2.10 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - '@remixicon/react@4.9.0(react@19.2.4)': - dependencies: - react: 19.2.4 - - '@rolldown/binding-android-arm64@1.0.0-rc.2': - optional: true - - '@rolldown/binding-darwin-arm64@1.0.0-rc.2': - optional: true - - '@rolldown/binding-darwin-x64@1.0.0-rc.2': - optional: true - - '@rolldown/binding-freebsd-x64@1.0.0-rc.2': - optional: true - - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.2': - optional: true - - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.2': - optional: true - - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.2': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.2': - optional: true - - '@rolldown/binding-linux-x64-musl@1.0.0-rc.2': - optional: true - - '@rolldown/binding-openharmony-arm64@1.0.0-rc.2': - optional: true - - '@rolldown/binding-wasm32-wasi@1.0.0-rc.2': - dependencies: - '@napi-rs/wasm-runtime': 1.1.1 - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.2': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.2': - optional: true - - '@rolldown/pluginutils@1.0.0-beta.40': {} - - '@rolldown/pluginutils@1.0.0-rc.2': {} - - '@sec-ant/readable-stream@0.4.1': {} - - '@sindresorhus/is@7.2.0': {} - - '@sindresorhus/merge-streams@4.0.0': {} - - '@solid-primitives/event-listener@2.4.3(solid-js@1.9.11)': - dependencies: - '@solid-primitives/utils': 6.3.2(solid-js@1.9.11) - solid-js: 1.9.11 - - '@solid-primitives/keyboard@1.3.3(solid-js@1.9.11)': - dependencies: - '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.11) - '@solid-primitives/rootless': 1.5.2(solid-js@1.9.11) - '@solid-primitives/utils': 6.3.2(solid-js@1.9.11) - solid-js: 1.9.11 - - '@solid-primitives/resize-observer@2.1.3(solid-js@1.9.11)': - dependencies: - '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.11) - '@solid-primitives/rootless': 1.5.2(solid-js@1.9.11) - '@solid-primitives/static-store': 0.1.2(solid-js@1.9.11) - '@solid-primitives/utils': 6.3.2(solid-js@1.9.11) - solid-js: 1.9.11 - - '@solid-primitives/rootless@1.5.2(solid-js@1.9.11)': - dependencies: - '@solid-primitives/utils': 6.3.2(solid-js@1.9.11) - solid-js: 1.9.11 - - '@solid-primitives/static-store@0.1.2(solid-js@1.9.11)': - dependencies: - '@solid-primitives/utils': 6.3.2(solid-js@1.9.11) - solid-js: 1.9.11 - - '@solid-primitives/utils@6.3.2(solid-js@1.9.11)': - dependencies: - solid-js: 1.9.11 - - '@speed-highlight/core@1.2.14': {} - - '@standard-schema/spec@1.1.0': {} - - '@tailwindcss/node@4.1.18': - dependencies: - '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.19.0 - jiti: 2.6.1 - lightningcss: 1.30.2 - magic-string: 0.30.21 - source-map-js: 1.2.1 - tailwindcss: 4.1.18 - - '@tailwindcss/oxide-android-arm64@4.1.18': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.1.18': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.1.18': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.1.18': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': - optional: true - - '@tailwindcss/oxide-linux-arm64-musl@4.1.18': - optional: true - - '@tailwindcss/oxide-linux-x64-gnu@4.1.18': - optional: true - - '@tailwindcss/oxide-linux-x64-musl@4.1.18': - optional: true - - '@tailwindcss/oxide-wasm32-wasi@4.1.18': - optional: true - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': - optional: true - - '@tailwindcss/oxide-win32-x64-msvc@4.1.18': - optional: true - - '@tailwindcss/oxide@4.1.18': - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.18 - '@tailwindcss/oxide-darwin-arm64': 4.1.18 - '@tailwindcss/oxide-darwin-x64': 4.1.18 - '@tailwindcss/oxide-freebsd-x64': 4.1.18 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 - '@tailwindcss/oxide-linux-x64-musl': 4.1.18 - '@tailwindcss/oxide-wasm32-wasi': 4.1.18 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 - - '@tailwindcss/vite@4.1.18(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@tailwindcss/node': 4.1.18 - '@tailwindcss/oxide': 4.1.18 - tailwindcss: 4.1.18 - vite: 8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - - '@tanstack/devtools-client@0.0.5': - dependencies: - '@tanstack/devtools-event-client': 0.4.0 - - '@tanstack/devtools-event-bus@0.4.0': - dependencies: - ws: 8.19.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@tanstack/devtools-event-client@0.4.0': {} - - '@tanstack/devtools-ui@0.4.4(csstype@3.2.3)(solid-js@1.9.11)': - dependencies: - clsx: 2.1.1 - goober: 2.1.18(csstype@3.2.3) - solid-js: 1.9.11 - transitivePeerDependencies: - - csstype - - '@tanstack/devtools-utils@0.3.0(@types/react@19.2.10)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11)': - dependencies: - '@tanstack/devtools-ui': 0.4.4(csstype@3.2.3)(solid-js@1.9.11) - optionalDependencies: - '@types/react': 19.2.10 - react: 19.2.4 - solid-js: 1.9.11 - transitivePeerDependencies: - - csstype - - '@tanstack/devtools-vite@0.5.0(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@babel/core': 7.29.0 - '@babel/generator': 7.29.0 - '@babel/parser': 7.29.0 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@tanstack/devtools-client': 0.0.5 - '@tanstack/devtools-event-bus': 0.4.0 - chalk: 5.6.2 - launch-editor: 2.12.0 - picomatch: 4.0.3 - vite: 8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@tanstack/devtools@0.10.5(csstype@3.2.3)(solid-js@1.9.11)': - dependencies: - '@solid-primitives/event-listener': 2.4.3(solid-js@1.9.11) - '@solid-primitives/keyboard': 1.3.3(solid-js@1.9.11) - '@solid-primitives/resize-observer': 2.1.3(solid-js@1.9.11) - '@tanstack/devtools-client': 0.0.5 - '@tanstack/devtools-event-bus': 0.4.0 - '@tanstack/devtools-ui': 0.4.4(csstype@3.2.3)(solid-js@1.9.11) - clsx: 2.1.1 - goober: 2.1.18(csstype@3.2.3) - solid-js: 1.9.11 - transitivePeerDependencies: - - bufferutil - - csstype - - utf-8-validate - - '@tanstack/eslint-plugin-query@5.91.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@tanstack/eslint-plugin-router@1.155.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - transitivePeerDependencies: - - supports-color - - typescript - - '@tanstack/form-core@1.28.0': - dependencies: - '@tanstack/devtools-event-client': 0.4.0 - '@tanstack/pacer-lite': 0.1.1 - '@tanstack/store': 0.7.7 - - '@tanstack/form-devtools@0.2.13(@types/react@19.2.10)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11)': - dependencies: - '@tanstack/devtools-ui': 0.4.4(csstype@3.2.3)(solid-js@1.9.11) - '@tanstack/devtools-utils': 0.3.0(@types/react@19.2.10)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11) - '@tanstack/form-core': 1.28.0 - clsx: 2.1.1 - dayjs: 1.11.19 - goober: 2.1.18(csstype@3.2.3) - solid-js: 1.9.11 - transitivePeerDependencies: - - '@types/react' - - csstype - - preact - - react - - vue - - '@tanstack/history@1.154.14': {} - - '@tanstack/pacer-lite@0.1.1': {} - - '@tanstack/query-core@5.90.20': {} - - '@tanstack/query-devtools@5.93.0': {} - - '@tanstack/react-devtools@0.9.4(@types/react-dom@19.2.3(@types/react@19.2.10))(@types/react@19.2.10)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)': - dependencies: - '@tanstack/devtools': 0.10.5(csstype@3.2.3)(solid-js@1.9.11) - '@types/react': 19.2.10 - '@types/react-dom': 19.2.3(@types/react@19.2.10) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - transitivePeerDependencies: - - bufferutil - - csstype - - solid-js - - utf-8-validate - - '@tanstack/react-form-devtools@0.2.13(@types/react@19.2.10)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11)': - dependencies: - '@tanstack/devtools-utils': 0.3.0(@types/react@19.2.10)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11) - '@tanstack/form-devtools': 0.2.13(@types/react@19.2.10)(csstype@3.2.3)(react@19.2.4)(solid-js@1.9.11) - react: 19.2.4 - transitivePeerDependencies: - - '@types/react' - - csstype - - preact - - solid-js - - vue - - '@tanstack/react-form-start@1.28.0(@tanstack/react-start@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/react-form': 1.28.0(@tanstack/react-start@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - decode-formdata: 0.9.0 - devalue: 5.6.2 - react: 19.2.4 - optionalDependencies: - '@tanstack/react-start': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - transitivePeerDependencies: - - react-dom - - '@tanstack/react-form-start@1.28.0(@tanstack/react-start@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/react-form': 1.28.0(@tanstack/react-start@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - decode-formdata: 0.9.0 - devalue: 5.6.2 - react: 19.2.4 - optionalDependencies: - '@tanstack/react-start': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - transitivePeerDependencies: - - react-dom - - '@tanstack/react-form@1.28.0(@tanstack/react-start@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/form-core': 1.28.0 - '@tanstack/react-store': 0.8.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - optionalDependencies: - '@tanstack/react-start': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - transitivePeerDependencies: - - react-dom - - '@tanstack/react-form@1.28.0(@tanstack/react-start@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/form-core': 1.28.0 - '@tanstack/react-store': 0.8.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - optionalDependencies: - '@tanstack/react-start': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - transitivePeerDependencies: - - react-dom - - '@tanstack/react-query-devtools@5.91.3(@tanstack/react-query@5.90.20(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/query-devtools': 5.93.0 - '@tanstack/react-query': 5.90.20(react@19.2.4) - react: 19.2.4 - - '@tanstack/react-query@5.90.20(react@19.2.4)': - dependencies: - '@tanstack/query-core': 5.90.20 - react: 19.2.4 - - '@tanstack/react-router-devtools@1.158.0(@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.158.0)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/react-router': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/router-devtools-core': 1.158.0(@tanstack/router-core@1.158.0)(csstype@3.2.3) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@tanstack/router-core': 1.158.0 - transitivePeerDependencies: - - csstype - - '@tanstack/react-router-ssr-query@1.158.0(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.20(react@19.2.4))(@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.158.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/query-core': 5.90.20 - '@tanstack/react-query': 5.90.20(react@19.2.4) - '@tanstack/react-router': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/router-ssr-query-core': 1.158.0(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.158.0) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - transitivePeerDependencies: - - '@tanstack/router-core' - - '@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/history': 1.154.14 - '@tanstack/react-store': 0.8.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/router-core': 1.158.0 - isbot: 5.1.34 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - - '@tanstack/react-start-client@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/react-router': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/router-core': 1.158.0 - '@tanstack/start-client-core': 1.158.0 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - - '@tanstack/react-start-server@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/history': 1.154.14 - '@tanstack/react-router': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/router-core': 1.158.0 - '@tanstack/start-client-core': 1.158.0 - '@tanstack/start-server-core': 1.158.0 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - transitivePeerDependencies: - - crossws - - '@tanstack/react-start@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@tanstack/react-router': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/react-start-client': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/react-start-server': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/router-utils': 1.158.0 - '@tanstack/start-client-core': 1.158.0 - '@tanstack/start-plugin-core': 1.158.0(@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - '@tanstack/start-server-core': 1.158.0 - pathe: 2.0.3 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - vite: 8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - transitivePeerDependencies: - - '@rsbuild/core' - - crossws - - supports-color - - vite-plugin-solid - - webpack - - '@tanstack/react-start@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@tanstack/react-router': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/react-start-client': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/react-start-server': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/router-utils': 1.158.0 - '@tanstack/start-client-core': 1.158.0 - '@tanstack/start-plugin-core': 1.158.0(@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - '@tanstack/start-server-core': 1.158.0 - pathe: 2.0.3 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - vite: 8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - transitivePeerDependencies: - - '@rsbuild/core' - - crossws - - supports-color - - vite-plugin-solid - - webpack - optional: true - - '@tanstack/react-store@0.8.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/store': 0.8.0 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - use-sync-external-store: 1.6.0(react@19.2.4) - - '@tanstack/router-core@1.158.0': - dependencies: - '@tanstack/history': 1.154.14 - '@tanstack/store': 0.8.0 - cookie-es: 2.0.0 - seroval: 1.5.0 - seroval-plugins: 1.5.0(seroval@1.5.0) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - - '@tanstack/router-devtools-core@1.158.0(@tanstack/router-core@1.158.0)(csstype@3.2.3)': - dependencies: - '@tanstack/router-core': 1.158.0 - clsx: 2.1.1 - goober: 2.1.18(csstype@3.2.3) - tiny-invariant: 1.3.3 - optionalDependencies: - csstype: 3.2.3 - - '@tanstack/router-generator@1.158.0': - dependencies: - '@tanstack/router-core': 1.158.0 - '@tanstack/router-utils': 1.158.0 - '@tanstack/virtual-file-routes': 1.154.7 - prettier: 3.8.1 - recast: 0.23.11 - source-map: 0.7.6 - tsx: 4.21.0 - zod: 3.25.76 - transitivePeerDependencies: - - supports-color - - '@tanstack/router-plugin@1.158.0(@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@tanstack/router-core': 1.158.0 - '@tanstack/router-generator': 1.158.0 - '@tanstack/router-utils': 1.158.0 - '@tanstack/virtual-file-routes': 1.154.7 - chokidar: 3.6.0 - unplugin: 2.3.11 - zod: 3.25.76 - optionalDependencies: - '@tanstack/react-router': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - vite: 8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - transitivePeerDependencies: - - supports-color - - '@tanstack/router-plugin@1.158.0(@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@tanstack/router-core': 1.158.0 - '@tanstack/router-generator': 1.158.0 - '@tanstack/router-utils': 1.158.0 - '@tanstack/virtual-file-routes': 1.154.7 - chokidar: 3.6.0 - unplugin: 2.3.11 - zod: 3.25.76 - optionalDependencies: - '@tanstack/react-router': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - vite: 8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - transitivePeerDependencies: - - supports-color - optional: true - - '@tanstack/router-ssr-query-core@1.158.0(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.158.0)': - dependencies: - '@tanstack/query-core': 5.90.20 - '@tanstack/router-core': 1.158.0 - - '@tanstack/router-utils@1.158.0': - dependencies: - '@babel/core': 7.29.0 - '@babel/generator': 7.29.0 - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - ansis: 4.2.0 - babel-dead-code-elimination: 1.0.12 - diff: 8.0.3 - pathe: 2.0.3 - tinyglobby: 0.2.15 - transitivePeerDependencies: - - supports-color - - '@tanstack/start-client-core@1.158.0': - dependencies: - '@tanstack/router-core': 1.158.0 - '@tanstack/start-fn-stubs': 1.154.7 - '@tanstack/start-storage-context': 1.158.0 - seroval: 1.5.0 - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - - '@tanstack/start-fn-stubs@1.154.7': {} - - '@tanstack/start-plugin-core@1.158.0(@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/core': 7.29.0 - '@babel/types': 7.29.0 - '@rolldown/pluginutils': 1.0.0-beta.40 - '@tanstack/router-core': 1.158.0 - '@tanstack/router-generator': 1.158.0 - '@tanstack/router-plugin': 1.158.0(@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - '@tanstack/router-utils': 1.158.0 - '@tanstack/start-client-core': 1.158.0 - '@tanstack/start-server-core': 1.158.0 - cheerio: 1.2.0 - exsolve: 1.0.8 - pathe: 2.0.3 - srvx: 0.10.1 - tinyglobby: 0.2.15 - ufo: 1.6.3 - vite: 8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.1.1(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - xmlbuilder2: 4.0.3 - zod: 3.25.76 - transitivePeerDependencies: - - '@rsbuild/core' - - '@tanstack/react-router' - - crossws - - supports-color - - vite-plugin-solid - - webpack - - '@tanstack/start-plugin-core@1.158.0(@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/core': 7.29.0 - '@babel/types': 7.29.0 - '@rolldown/pluginutils': 1.0.0-beta.40 - '@tanstack/router-core': 1.158.0 - '@tanstack/router-generator': 1.158.0 - '@tanstack/router-plugin': 1.158.0(@tanstack/react-router@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - '@tanstack/router-utils': 1.158.0 - '@tanstack/start-client-core': 1.158.0 - '@tanstack/start-server-core': 1.158.0 - cheerio: 1.2.0 - exsolve: 1.0.8 - pathe: 2.0.3 - srvx: 0.10.1 - tinyglobby: 0.2.15 - ufo: 1.6.3 - vite: 8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - vitefu: 1.1.1(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - xmlbuilder2: 4.0.3 - zod: 3.25.76 - transitivePeerDependencies: - - '@rsbuild/core' - - '@tanstack/react-router' - - crossws - - supports-color - - vite-plugin-solid - - webpack - optional: true - - '@tanstack/start-server-core@1.158.0': - dependencies: - '@tanstack/history': 1.154.14 - '@tanstack/router-core': 1.158.0 - '@tanstack/start-client-core': 1.158.0 - '@tanstack/start-storage-context': 1.158.0 - h3-v2: h3@2.0.1-rc.11 - seroval: 1.5.0 - tiny-invariant: 1.3.3 - transitivePeerDependencies: - - crossws - - '@tanstack/start-storage-context@1.158.0': - dependencies: - '@tanstack/router-core': 1.158.0 - - '@tanstack/store@0.7.7': {} - - '@tanstack/store@0.8.0': {} - - '@tanstack/virtual-file-routes@1.154.7': {} - - '@tediousjs/connection-string@0.5.0': {} - - '@ts-morph/common@0.27.0': - dependencies: - fast-glob: 3.3.3 - minimatch: 10.1.2 - path-browserify: 1.0.1 - - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.28.0 - - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.29.0 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - - '@types/babel__traverse@7.28.0': - dependencies: - '@babel/types': 7.29.0 - - '@types/estree@1.0.8': {} - - '@types/json-schema@7.0.15': {} - - '@types/mssql@9.1.9': - dependencies: - '@types/node': 25.2.0 - tarn: 3.0.2 - tedious: 19.2.0 - transitivePeerDependencies: - - supports-color - - '@types/node@24.10.10': - dependencies: - undici-types: 7.16.0 - - '@types/node@25.2.0': - dependencies: - undici-types: 7.16.0 - - '@types/react-dom@19.2.3(@types/react@19.2.10)': - dependencies: - '@types/react': 19.2.10 - - '@types/react@19.2.10': - dependencies: - csstype: 3.2.3 - - '@types/readable-stream@4.0.23': - dependencies: - '@types/node': 25.2.0 - - '@types/statuses@2.0.6': {} - - '@types/validate-npm-package-name@4.0.2': {} - - '@types/webidl-conversions@7.0.3': {} - - '@types/whatwg-url@13.0.0': - dependencies: - '@types/webidl-conversions': 7.0.3 - - '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.54.0 - eslint: 9.39.2(jiti@2.6.1) - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.54.0 - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.54.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.54.0': - dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 - - '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/type-utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.54.0': {} - - '@typescript-eslint/typescript-estree@8.54.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.54.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 - debug: 4.4.3 - minimatch: 9.0.5 - semver: 7.7.3 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.54.0': - dependencies: - '@typescript-eslint/types': 8.54.0 - eslint-visitor-keys: 4.2.1 - - '@typespec/ts-http-runtime@0.3.2': - dependencies: - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - tslib: 2.8.1 - transitivePeerDependencies: - - supports-color - - '@vitejs/plugin-react@5.1.3(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': - dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) - '@rolldown/pluginutils': 1.0.0-rc.2 - '@types/babel__core': 7.20.5 - react-refresh: 0.18.0 - vite: 8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - transitivePeerDependencies: - - supports-color - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - - accepts@2.0.0: - dependencies: - mime-types: 3.0.2 - negotiator: 1.0.0 - - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - - acorn@8.15.0: {} - - agent-base@7.1.4: {} - - ajv-formats@3.0.1(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ajv@8.17.1: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - ansi-escapes@7.2.0: - dependencies: - environment: 1.1.0 - - ansi-regex@5.0.1: {} - - ansi-regex@6.2.2: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.3: {} - - ansis@4.2.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - argparse@2.0.1: {} - - ast-types@0.16.1: - dependencies: - tslib: 2.8.1 - - aws-ssl-profiles@1.1.2: {} - - babel-dead-code-elimination@1.0.12: - dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.0 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-react-compiler@1.0.0: - dependencies: - '@babel/types': 7.29.0 - - balanced-match@1.0.2: {} - - base64-js@1.5.1: {} - - baseline-browser-mapping@2.9.19: {} - - better-auth@1.5.0-beta.11(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@tanstack/react-start@1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)))(mongodb@7.1.0)(mysql2@3.15.3)(prettier@3.8.1)(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11): - dependencies: - '@better-auth/core': 1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0) - '@better-auth/drizzle-adapter': https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(@better-auth/utils@0.3.1)(prettier@3.8.1) - '@better-auth/kysely-adapter': 1.5.0-beta.11(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(@better-auth/utils@0.3.1)(kysely@0.28.11) - '@better-auth/memory-adapter': 1.5.0-beta.11(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(@better-auth/utils@0.3.1) - '@better-auth/mongo-adapter': 1.5.0-beta.11(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(@better-auth/utils@0.3.1)(mongodb@7.1.0) - '@better-auth/prisma-adapter': 1.5.0-beta.11(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(@better-auth/utils@0.3.1)(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)) - '@better-auth/telemetry': 1.5.0-beta.11(@better-auth/core@1.5.0-beta.11(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.2.0(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0)) - '@better-auth/utils': 0.3.1 - '@better-fetch/fetch': 1.1.21 - '@noble/ciphers': 2.1.1 - '@noble/hashes': 2.0.1 - better-call: 1.2.0(zod@4.3.6) - defu: 6.1.4 - jose: 6.1.3 - kysely: 0.28.11 - nanostores: 1.1.0 - zod: 4.3.6 - optionalDependencies: - '@prisma/client': 7.3.0(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3) - '@tanstack/react-start': 1.158.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) - mongodb: 7.1.0 - mysql2: 3.15.3 - prisma: 7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - solid-js: 1.9.11 - transitivePeerDependencies: - - prettier - - better-call@1.2.0(zod@4.3.6): - dependencies: - '@better-auth/utils': 0.3.1 - '@better-fetch/fetch': 1.1.21 - rou3: 0.7.12 - set-cookie-parser: 2.7.2 - optionalDependencies: - zod: 4.3.6 - - binary-extensions@2.3.0: {} - - birecord@0.1.1: {} - - bl@6.1.6: - dependencies: - '@types/readable-stream': 4.0.23 - buffer: 6.0.3 - inherits: 2.0.4 - readable-stream: 4.7.0 - - blake3-wasm@2.1.5: {} - - body-parser@2.2.2: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 4.4.3 - http-errors: 2.0.1 - iconv-lite: 0.7.2 - on-finished: 2.4.1 - qs: 6.14.1 - raw-body: 3.0.2 - type-is: 2.0.1 - transitivePeerDependencies: - - supports-color - - boolbase@1.0.0: {} - - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.28.1: - dependencies: - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001767 - electron-to-chromium: 1.5.286 - node-releases: 2.0.27 - update-browserslist-db: 1.2.3(browserslist@4.28.1) - - bson@7.2.0: {} - - buffer-equal-constant-time@1.0.1: {} - - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - bundle-name@4.1.0: - dependencies: - run-applescript: 7.1.0 - - bytes@3.1.2: {} - - c12@3.1.0: - dependencies: - chokidar: 4.0.3 - confbox: 0.2.2 - defu: 6.1.4 - dotenv: 16.6.1 - exsolve: 1.0.8 - giget: 2.0.0 - jiti: 2.6.1 - ohash: 2.0.11 - pathe: 2.0.3 - perfect-debounce: 1.0.0 - pkg-types: 2.3.0 - rc9: 2.1.2 - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - caniuse-lite@1.0.30001767: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chalk@5.6.2: {} - - cheerio-select@2.1.0: - dependencies: - boolbase: 1.0.0 - css-select: 5.2.2 - css-what: 6.2.2 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - - cheerio@1.2.0: - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.2.2 - encoding-sniffer: 0.2.1 - htmlparser2: 10.1.0 - parse5: 7.3.0 - parse5-htmlparser2-tree-adapter: 7.1.0 - parse5-parser-stream: 7.1.2 - undici: 7.20.0 - whatwg-mimetype: 4.0.0 - - chevrotain@10.5.0: - dependencies: - '@chevrotain/cst-dts-gen': 10.5.0 - '@chevrotain/gast': 10.5.0 - '@chevrotain/types': 10.5.0 - '@chevrotain/utils': 10.5.0 - lodash: 4.17.21 - regexp-to-ast: 0.5.0 - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - - citty@0.1.6: - dependencies: - consola: 3.4.2 - - citty@0.2.0: {} - - class-variance-authority@0.7.1: - dependencies: - clsx: 2.1.1 - - cli-cursor@5.0.0: - dependencies: - restore-cursor: 5.1.0 - - cli-spinners@2.9.2: {} - - cli-truncate@5.1.1: - dependencies: - slice-ansi: 7.1.2 - string-width: 8.1.1 - - cli-width@4.1.0: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clsx@2.1.1: {} - - code-block-writer@13.0.3: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - colorette@2.0.20: {} - - commander@11.1.0: {} - - commander@14.0.3: {} - - compare-versions@6.1.1: {} - - concat-map@0.0.1: {} - - confbox@0.2.2: {} - - consola@3.4.2: {} - - content-disposition@1.0.1: {} - - content-type@1.0.5: {} - - convert-source-map@2.0.0: {} - - cookie-es@2.0.0: {} - - cookie-signature@1.2.2: {} - - cookie@0.7.2: {} - - cookie@1.1.1: {} - - cors@2.8.6: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - cosmiconfig@9.0.0(typescript@5.9.3): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.9.3 - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - css-select@5.2.2: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - - css-what@6.2.2: {} - - cssesc@3.0.0: {} - - csstype@3.2.3: {} - - data-uri-to-buffer@4.0.1: {} - - date-fns@4.1.0: {} - - dayjs@1.11.19: {} - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - decode-formdata@0.9.0: {} - - dedent@1.7.1: {} - - deep-is@0.1.4: {} - - deepmerge-ts@7.1.5: {} - - deepmerge@4.3.1: {} - - default-browser-id@5.0.1: {} - - default-browser@5.5.0: - dependencies: - bundle-name: 4.1.0 - default-browser-id: 5.0.1 - - define-lazy-prop@3.0.0: {} - - defu@6.1.4: {} - - denque@2.1.0: {} - - depd@2.0.0: {} - - destr@2.0.5: {} - - detect-libc@2.1.2: {} - - devalue@5.6.2: {} - - diff@8.0.3: {} - - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - - dotenv@16.0.3: {} - - dotenv@16.6.1: {} - - dotenv@17.2.3: {} - - drizzle-kit@1.0.0-beta.13-f728631: - dependencies: - '@drizzle-team/brocli': 0.11.0 - '@js-temporal/polyfill': 0.5.1 - esbuild: 0.25.12 - jiti: 2.6.1 - - drizzle-orm@1.0.0-beta.13-f728631(@electric-sql/pglite@0.3.15)(@prisma/client@7.3.0(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3))(@types/mssql@9.1.9)(mssql@11.0.1)(mysql2@3.15.3)(postgres@3.4.7)(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)): - dependencies: - '@types/mssql': 9.1.9 - mssql: 11.0.1 - optionalDependencies: - '@electric-sql/pglite': 0.3.15 - '@prisma/client': 7.3.0(prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(typescript@5.9.3) - mysql2: 3.15.3 - postgres: 3.4.7 - prisma: 7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - ecdsa-sig-formatter@1.0.11: - dependencies: - safe-buffer: 5.2.1 - - eciesjs@0.4.17: - dependencies: - '@ecies/ciphers': 0.2.5(@noble/ciphers@1.3.0) - '@noble/ciphers': 1.3.0 - '@noble/curves': 1.9.7 - '@noble/hashes': 1.8.0 - - ee-first@1.1.1: {} - - effect@3.18.4: - dependencies: - '@standard-schema/spec': 1.1.0 - fast-check: 3.23.2 - - electron-to-chromium@1.5.286: {} - - emoji-regex@10.6.0: {} - - emoji-regex@8.0.0: {} - - empathic@2.0.0: {} - - encodeurl@2.0.0: {} - - encoding-sniffer@0.2.1: - dependencies: - iconv-lite: 0.6.3 - whatwg-encoding: 3.1.1 - - enhanced-resolve@5.19.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.0 - - entities@4.5.0: {} - - entities@6.0.1: {} - - entities@7.0.1: {} - - env-paths@2.2.1: {} - - environment@1.1.0: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - - error-stack-parser-es@1.0.5: {} - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - esbuild@0.25.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 - - esbuild@0.27.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.0 - '@esbuild/android-arm': 0.27.0 - '@esbuild/android-arm64': 0.27.0 - '@esbuild/android-x64': 0.27.0 - '@esbuild/darwin-arm64': 0.27.0 - '@esbuild/darwin-x64': 0.27.0 - '@esbuild/freebsd-arm64': 0.27.0 - '@esbuild/freebsd-x64': 0.27.0 - '@esbuild/linux-arm': 0.27.0 - '@esbuild/linux-arm64': 0.27.0 - '@esbuild/linux-ia32': 0.27.0 - '@esbuild/linux-loong64': 0.27.0 - '@esbuild/linux-mips64el': 0.27.0 - '@esbuild/linux-ppc64': 0.27.0 - '@esbuild/linux-riscv64': 0.27.0 - '@esbuild/linux-s390x': 0.27.0 - '@esbuild/linux-x64': 0.27.0 - '@esbuild/netbsd-arm64': 0.27.0 - '@esbuild/netbsd-x64': 0.27.0 - '@esbuild/openbsd-arm64': 0.27.0 - '@esbuild/openbsd-x64': 0.27.0 - '@esbuild/openharmony-arm64': 0.27.0 - '@esbuild/sunos-x64': 0.27.0 - '@esbuild/win32-arm64': 0.27.0 - '@esbuild/win32-ia32': 0.27.0 - '@esbuild/win32-x64': 0.27.0 - - esbuild@0.27.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.2 - '@esbuild/android-arm': 0.27.2 - '@esbuild/android-arm64': 0.27.2 - '@esbuild/android-x64': 0.27.2 - '@esbuild/darwin-arm64': 0.27.2 - '@esbuild/darwin-x64': 0.27.2 - '@esbuild/freebsd-arm64': 0.27.2 - '@esbuild/freebsd-x64': 0.27.2 - '@esbuild/linux-arm': 0.27.2 - '@esbuild/linux-arm64': 0.27.2 - '@esbuild/linux-ia32': 0.27.2 - '@esbuild/linux-loong64': 0.27.2 - '@esbuild/linux-mips64el': 0.27.2 - '@esbuild/linux-ppc64': 0.27.2 - '@esbuild/linux-riscv64': 0.27.2 - '@esbuild/linux-s390x': 0.27.2 - '@esbuild/linux-x64': 0.27.2 - '@esbuild/netbsd-arm64': 0.27.2 - '@esbuild/netbsd-x64': 0.27.2 - '@esbuild/openbsd-arm64': 0.27.2 - '@esbuild/openbsd-x64': 0.27.2 - '@esbuild/openharmony-arm64': 0.27.2 - '@esbuild/sunos-x64': 0.27.2 - '@esbuild/win32-arm64': 0.27.2 - '@esbuild/win32-ia32': 0.27.2 - '@esbuild/win32-x64': 0.27.2 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)): - dependencies: - eslint: 9.39.2(jiti@2.6.1) - - eslint-plugin-only-warn@1.1.0: {} - - eslint-plugin-react-dom@2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - compare-versions: 6.1.1 - eslint: 9.39.2(jiti@2.6.1) - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - eslint-plugin-react-hooks-extra@2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@2.6.1)): - dependencies: - '@babel/core': 7.29.0 - '@babel/parser': 7.29.0 - eslint: 9.39.2(jiti@2.6.1) - hermes-parser: 0.25.1 - zod: 4.3.6 - zod-validation-error: 4.0.2(zod@4.3.6) - transitivePeerDependencies: - - supports-color - - eslint-plugin-react-naming-convention@2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - compare-versions: 6.1.1 - eslint: 9.39.2(jiti@2.6.1) - string-ts: 2.3.1 - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - eslint-plugin-react-rsc@2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - eslint-plugin-react-web-api@2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - birecord: 0.1.1 - eslint: 9.39.2(jiti@2.6.1) - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - eslint-plugin-react-x@2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@eslint-react/ast': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/core': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/eff': 2.9.4 - '@eslint-react/shared': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@eslint-react/var': 2.9.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - compare-versions: 6.1.1 - eslint: 9.39.2(jiti@2.6.1) - is-immutable-type: 5.0.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - ts-api-utils: 2.4.0(typescript@5.9.3) - ts-pattern: 5.9.0 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - eslint-plugin-turbo@2.8.3(eslint@9.39.2(jiti@2.6.1))(turbo@2.8.3): - dependencies: - dotenv: 16.0.3 - eslint: 9.39.2(jiti@2.6.1) - turbo: 2.8.3 - - eslint-scope@8.4.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint@9.39.2(jiti@2.6.1): - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 - '@eslint/js': 9.39.2 - '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.7 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.7.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.6.1 - transitivePeerDependencies: - - supports-color - - espree@10.4.0: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 4.2.1 - - esprima@4.0.1: {} - - esquery@1.7.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: {} - - event-target-shim@5.0.1: {} - - eventemitter3@5.0.4: {} - - events@3.3.0: {} - - eventsource-parser@3.0.6: {} - - eventsource@3.0.7: - dependencies: - eventsource-parser: 3.0.6 - - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - execa@9.6.1: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - cross-spawn: 7.0.6 - figures: 6.1.0 - get-stream: 9.0.1 - human-signals: 8.0.1 - is-plain-obj: 4.1.0 - is-stream: 4.0.1 - npm-run-path: 6.0.0 - pretty-ms: 9.3.0 - signal-exit: 4.1.0 - strip-final-newline: 4.0.0 - yoctocolors: 2.1.2 - - express-rate-limit@7.5.1(express@5.2.1): - dependencies: - express: 5.2.1 - - express@5.2.1: - dependencies: - accepts: 2.0.0 - body-parser: 2.2.2 - content-disposition: 1.0.1 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.3 - depd: 2.0.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 2.1.1 - fresh: 2.0.0 - http-errors: 2.0.1 - merge-descriptors: 2.0.0 - mime-types: 3.0.2 - on-finished: 2.4.1 - once: 1.4.0 - parseurl: 1.3.3 - proxy-addr: 2.0.7 - qs: 6.14.1 - range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.1 - serve-static: 2.2.1 - statuses: 2.0.2 - type-is: 2.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - exsolve@1.0.8: {} - - fast-check@3.23.2: - dependencies: - pure-rand: 6.1.0 - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fast-uri@3.1.0: {} - - fastq@1.20.1: - dependencies: - reusify: 1.1.0 - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - fetch-blob@3.2.0: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - - figures@6.1.0: - dependencies: - is-unicode-supported: 2.1.0 - - 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@2.1.1: - dependencies: - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.2 - 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: {} - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - formdata-polyfill@4.0.10: - dependencies: - fetch-blob: 3.2.0 - - forwarded@0.2.0: {} - - framer-motion@12.31.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - motion-dom: 12.30.1 - motion-utils: 12.29.2 - tslib: 2.8.1 - optionalDependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - fresh@2.0.0: {} - - fs-extra@11.3.3: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - fuzzysort@3.1.0: {} - - fzf@0.5.2: {} - - generate-function@2.3.1: - dependencies: - is-property: 1.0.2 - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-east-asian-width@1.4.0: {} - - 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-own-enumerable-keys@1.0.0: {} - - get-port-please@3.2.0: {} - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@6.0.1: {} - - get-stream@9.0.1: - dependencies: - '@sec-ant/readable-stream': 0.4.1 - is-stream: 4.0.1 - - get-tsconfig@4.13.1: - dependencies: - resolve-pkg-maps: 1.0.0 - - giget@2.0.0: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - defu: 6.1.4 - node-fetch-native: 1.6.7 - nypm: 0.6.4 - pathe: 2.0.3 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - globals@14.0.0: {} - - goober@2.1.18(csstype@3.2.3): - dependencies: - csstype: 3.2.3 - - gopd@1.2.0: {} - - graceful-fs@4.2.11: {} - - grammex@3.1.12: {} - - graphmatch@1.1.0: {} - - graphql@16.12.0: {} - - h3@2.0.1-rc.11: - dependencies: - rou3: 0.7.12 - srvx: 0.10.1 - - has-flag@4.0.0: {} - - has-symbols@1.1.0: {} - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - headers-polyfill@4.0.3: {} - - hermes-estree@0.25.1: {} - - hermes-parser@0.25.1: - dependencies: - hermes-estree: 0.25.1 - - hono@4.11.4: {} - - hono@4.11.7: {} - - htmlparser2@10.1.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 7.0.1 - - http-errors@2.0.1: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.2 - toidentifier: 1.0.1 - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - http-status-codes@2.3.0: {} - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - human-signals@2.1.0: {} - - human-signals@8.0.1: {} - - husky@9.1.7: {} - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.7.2: - dependencies: - safer-buffer: 2.1.2 - - ieee754@1.2.1: {} - - ignore@5.3.2: {} - - ignore@7.0.5: {} - - 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-arrayish@0.2.1: {} - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-docker@3.0.0: {} - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-fullwidth-code-point@5.1.0: - dependencies: - get-east-asian-width: 1.4.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-immutable-type@5.0.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) - ts-declaration-location: 1.0.7(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - is-in-ssh@1.0.0: {} - - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 - - is-interactive@2.0.0: {} - - is-node-process@1.2.0: {} - - is-number@7.0.0: {} - - is-obj@3.0.0: {} - - is-plain-obj@4.1.0: {} - - is-promise@4.0.0: {} - - is-property@1.0.2: {} - - is-regexp@3.1.0: {} - - is-stream@2.0.1: {} - - is-stream@4.0.1: {} - - is-unicode-supported@1.3.0: {} - - is-unicode-supported@2.1.0: {} - - is-wsl@3.1.0: - dependencies: - is-inside-container: 1.0.0 - - isbot@5.1.34: {} - - isexe@2.0.0: {} - - isexe@3.1.1: {} - - jiti@2.6.1: {} - - jose@6.1.3: {} - - js-md4@0.3.2: {} - - js-tokens@4.0.0: {} - - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - - jsbi@4.3.2: {} - - jsesc@3.1.0: {} - - json-buffer@3.0.1: {} - - json-parse-even-better-errors@2.3.1: {} - - json-schema-traverse@0.4.1: {} - - json-schema-traverse@1.0.0: {} - - json-schema-typed@8.0.2: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@2.2.3: {} - - jsonfile@6.2.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - jsonwebtoken@9.0.3: - dependencies: - jws: 4.0.1 - lodash.includes: 4.3.0 - lodash.isboolean: 3.0.3 - lodash.isinteger: 4.0.4 - lodash.isnumber: 3.0.3 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.once: 4.1.1 - ms: 2.1.3 - semver: 7.7.3 - - jwa@2.0.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jws@4.0.1: - dependencies: - jwa: 2.0.1 - safe-buffer: 5.2.1 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - kleur@3.0.3: {} - - kleur@4.1.5: {} - - kysely@0.28.11: {} - - launch-editor@2.12.0: - dependencies: - picocolors: 1.1.1 - shell-quote: 1.8.3 - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - lightningcss-android-arm64@1.30.2: - optional: true - - lightningcss-android-arm64@1.31.1: - optional: true - - lightningcss-darwin-arm64@1.30.2: - optional: true - - lightningcss-darwin-arm64@1.31.1: - optional: true - - lightningcss-darwin-x64@1.30.2: - optional: true - - lightningcss-darwin-x64@1.31.1: - optional: true - - lightningcss-freebsd-x64@1.30.2: - optional: true - - lightningcss-freebsd-x64@1.31.1: - optional: true - - lightningcss-linux-arm-gnueabihf@1.30.2: - optional: true - - lightningcss-linux-arm-gnueabihf@1.31.1: - optional: true - - lightningcss-linux-arm64-gnu@1.30.2: - optional: true - - lightningcss-linux-arm64-gnu@1.31.1: - optional: true - - lightningcss-linux-arm64-musl@1.30.2: - optional: true - - lightningcss-linux-arm64-musl@1.31.1: - optional: true - - lightningcss-linux-x64-gnu@1.30.2: - optional: true - - lightningcss-linux-x64-gnu@1.31.1: - optional: true - - lightningcss-linux-x64-musl@1.30.2: - optional: true - - lightningcss-linux-x64-musl@1.31.1: - optional: true - - lightningcss-win32-arm64-msvc@1.30.2: - optional: true - - lightningcss-win32-arm64-msvc@1.31.1: - optional: true - - lightningcss-win32-x64-msvc@1.30.2: - optional: true - - lightningcss-win32-x64-msvc@1.31.1: - optional: true - - lightningcss@1.30.2: - dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-android-arm64: 1.30.2 - lightningcss-darwin-arm64: 1.30.2 - lightningcss-darwin-x64: 1.30.2 - lightningcss-freebsd-x64: 1.30.2 - lightningcss-linux-arm-gnueabihf: 1.30.2 - lightningcss-linux-arm64-gnu: 1.30.2 - lightningcss-linux-arm64-musl: 1.30.2 - lightningcss-linux-x64-gnu: 1.30.2 - lightningcss-linux-x64-musl: 1.30.2 - lightningcss-win32-arm64-msvc: 1.30.2 - lightningcss-win32-x64-msvc: 1.30.2 - - lightningcss@1.31.1: - dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-android-arm64: 1.31.1 - lightningcss-darwin-arm64: 1.31.1 - lightningcss-darwin-x64: 1.31.1 - lightningcss-freebsd-x64: 1.31.1 - lightningcss-linux-arm-gnueabihf: 1.31.1 - lightningcss-linux-arm64-gnu: 1.31.1 - lightningcss-linux-arm64-musl: 1.31.1 - lightningcss-linux-x64-gnu: 1.31.1 - lightningcss-linux-x64-musl: 1.31.1 - lightningcss-win32-arm64-msvc: 1.31.1 - lightningcss-win32-x64-msvc: 1.31.1 - - lilconfig@2.1.0: {} - - lines-and-columns@1.2.4: {} - - lint-staged@16.2.7: - dependencies: - commander: 14.0.3 - listr2: 9.0.5 - micromatch: 4.0.8 - nano-spawn: 2.0.0 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.8.2 - - listr2@9.0.5: - dependencies: - cli-truncate: 5.1.1 - colorette: 2.0.20 - eventemitter3: 5.0.4 - log-update: 6.1.0 - rfdc: 1.4.1 - wrap-ansi: 9.0.2 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.includes@4.3.0: {} - - lodash.isboolean@3.0.3: {} - - lodash.isinteger@4.0.4: {} - - lodash.isnumber@3.0.3: {} - - lodash.isplainobject@4.0.6: {} - - lodash.isstring@4.0.1: {} - - lodash.merge@4.6.2: {} - - lodash.once@4.1.1: {} - - lodash@4.17.21: {} - - log-symbols@6.0.0: - dependencies: - chalk: 5.6.2 - is-unicode-supported: 1.3.0 - - log-update@6.1.0: - dependencies: - ansi-escapes: 7.2.0 - cli-cursor: 5.0.0 - slice-ansi: 7.1.2 - strip-ansi: 7.1.2 - wrap-ansi: 9.0.2 - - long@5.3.2: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lru.min@1.1.4: {} - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - math-intrinsics@1.1.0: {} - - media-typer@1.1.0: {} - - memory-pager@1.5.0: {} - - merge-descriptors@2.0.0: {} - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.54.0: {} - - mime-types@3.0.2: - dependencies: - mime-db: 1.54.0 - - mimic-fn@2.1.0: {} - - mimic-function@5.0.1: {} - - miniflare@4.20260131.0: - dependencies: - '@cspotcode/source-map-support': 0.8.1 - sharp: 0.34.5 - undici: 7.18.2 - workerd: 1.20260131.0 - ws: 8.18.0 - youch: 4.1.0-beta.10 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - minimatch@10.1.2: - dependencies: - '@isaacs/brace-expansion': 5.0.1 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 - - minimist@1.2.8: {} - - mongodb-connection-string-url@7.0.1: - dependencies: - '@types/whatwg-url': 13.0.0 - whatwg-url: 14.2.0 - - mongodb@7.1.0: - dependencies: - '@mongodb-js/saslprep': 1.4.5 - bson: 7.2.0 - mongodb-connection-string-url: 7.0.1 - - motion-dom@12.30.1: - dependencies: - motion-utils: 12.29.2 - - motion-utils@12.29.2: {} - - motion@12.31.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - framer-motion: 12.31.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - tslib: 2.8.1 - optionalDependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - ms@2.1.3: {} - - mssql@11.0.1: - dependencies: - '@tediousjs/connection-string': 0.5.0 - commander: 11.1.0 - debug: 4.4.3 - rfdc: 1.4.1 - tarn: 3.0.2 - tedious: 18.6.2 - transitivePeerDependencies: - - supports-color - - msw@2.12.8(@types/node@25.2.0)(typescript@5.9.3): - dependencies: - '@inquirer/confirm': 5.1.21(@types/node@25.2.0) - '@mswjs/interceptors': 0.41.0 - '@open-draft/deferred-promise': 2.2.0 - '@types/statuses': 2.0.6 - cookie: 1.1.1 - graphql: 16.12.0 - headers-polyfill: 4.0.3 - is-node-process: 1.2.0 - outvariant: 1.4.3 - path-to-regexp: 6.3.0 - picocolors: 1.1.1 - rettime: 0.10.1 - statuses: 2.0.2 - strict-event-emitter: 0.5.1 - tough-cookie: 6.0.0 - type-fest: 5.4.3 - until-async: 3.0.2 - yargs: 17.7.2 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - '@types/node' - - mute-stream@2.0.0: {} - - mysql2@3.15.3: - dependencies: - aws-ssl-profiles: 1.1.2 - denque: 2.1.0 - generate-function: 2.3.1 - iconv-lite: 0.7.2 - long: 5.3.2 - lru.min: 1.1.4 - named-placeholders: 1.1.6 - seq-queue: 0.0.5 - sqlstring: 2.3.3 - - named-placeholders@1.1.6: - dependencies: - lru.min: 1.1.4 - - nano-spawn@2.0.0: {} - - nanoid@3.3.11: {} - - nanostores@1.1.0: {} - - native-duplexpair@1.0.0: {} - - natural-compare@1.4.0: {} - - negotiator@1.0.0: {} - - node-domexception@1.0.0: {} - - node-fetch-native@1.6.7: {} - - node-fetch@3.3.2: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - - node-releases@2.0.27: {} - - normalize-path@3.0.0: {} - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - - npm-run-path@6.0.0: - dependencies: - path-key: 4.0.0 - unicorn-magic: 0.3.0 - - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - - nypm@0.6.4: - dependencies: - citty: 0.2.0 - pathe: 2.0.3 - tinyexec: 1.0.2 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - object-treeify@1.1.33: {} - - ohash@2.0.11: {} - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - onetime@7.0.0: - dependencies: - mimic-function: 5.0.1 - - open@10.2.0: - dependencies: - default-browser: 5.5.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - wsl-utils: 0.1.0 - - open@11.0.0: - dependencies: - default-browser: 5.5.0 - define-lazy-prop: 3.0.0 - is-in-ssh: 1.0.0 - is-inside-container: 1.0.0 - powershell-utils: 0.1.0 - wsl-utils: 0.3.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 - - ora@8.2.0: - dependencies: - chalk: 5.6.2 - cli-cursor: 5.0.0 - cli-spinners: 2.9.2 - is-interactive: 2.0.0 - is-unicode-supported: 2.1.0 - log-symbols: 6.0.0 - stdin-discarder: 0.2.2 - string-width: 7.2.0 - strip-ansi: 7.1.2 - - outvariant@1.4.3: {} - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - package-manager-detector@1.6.0: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.29.0 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse-ms@4.0.0: {} - - parse5-htmlparser2-tree-adapter@7.1.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.3.0 - - parse5-parser-stream@7.1.2: - dependencies: - parse5: 7.3.0 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - - parseurl@1.3.3: {} - - path-browserify@1.0.1: {} - - path-exists@4.0.0: {} - - path-key@3.1.1: {} - - path-key@4.0.0: {} - - path-to-regexp@6.3.0: {} - - path-to-regexp@8.3.0: {} - - pathe@2.0.3: {} - - perfect-debounce@1.0.0: {} - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.3: {} - - pidtree@0.6.0: {} - - pkce-challenge@5.0.1: {} - - pkg-types@2.3.0: - dependencies: - confbox: 0.2.2 - exsolve: 1.0.8 - pathe: 2.0.3 - - postcss-selector-parser@7.1.1: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postgres@3.4.7: {} - - powershell-utils@0.1.0: {} - - prelude-ls@1.2.1: {} - - prettier-plugin-organize-imports@4.3.0(prettier@3.8.1)(typescript@5.9.3): - dependencies: - prettier: 3.8.1 - typescript: 5.9.3 - - prettier-plugin-tailwindcss@0.7.2(prettier-plugin-organize-imports@4.3.0(prettier@3.8.1)(typescript@5.9.3))(prettier@3.8.1): - dependencies: - prettier: 3.8.1 - optionalDependencies: - prettier-plugin-organize-imports: 4.3.0(prettier@3.8.1)(typescript@5.9.3) - - prettier@3.8.1: {} - - pretty-ms@9.3.0: - dependencies: - parse-ms: 4.0.0 - - prisma@7.3.0(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): - dependencies: - '@prisma/config': 7.3.0 - '@prisma/dev': 0.20.0(typescript@5.9.3) - '@prisma/engines': 7.3.0 - '@prisma/studio-core': 0.13.1(@types/react@19.2.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - mysql2: 3.15.3 - postgres: 3.4.7 - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - '@types/react' - - magicast - - react - - react-dom - - process@0.11.10: {} - - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - - proper-lockfile@4.1.2: - dependencies: - graceful-fs: 4.2.11 - retry: 0.12.0 - signal-exit: 3.0.7 - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - punycode@2.3.1: {} - - pure-rand@6.1.0: {} - - qs@6.14.1: - dependencies: - side-channel: 1.1.0 - - queue-microtask@1.2.3: {} - - range-parser@1.2.1: {} - - raw-body@3.0.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.1 - iconv-lite: 0.7.2 - unpipe: 1.0.0 - - rc9@2.1.2: - dependencies: - defu: 6.1.4 - destr: 2.0.5 - - react-dom@19.2.4(react@19.2.4): - dependencies: - react: 19.2.4 - scheduler: 0.27.0 - - react-refresh@0.18.0: {} - - react@19.2.4: {} - - readable-stream@4.7.0: - dependencies: - abort-controller: 3.0.0 - buffer: 6.0.3 - events: 3.3.0 - process: 0.11.10 - string_decoder: 1.3.0 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - readdirp@4.1.2: {} - - recast@0.23.11: - dependencies: - ast-types: 0.16.1 - esprima: 4.0.1 - source-map: 0.6.1 - tiny-invariant: 1.3.3 - tslib: 2.8.1 - - regexp-to-ast@0.5.0: {} - - remeda@2.33.4: {} - - require-directory@2.1.1: {} - - require-from-string@2.0.2: {} - - reselect@5.1.1: {} - - resolve-from@4.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - restore-cursor@5.1.0: - dependencies: - onetime: 7.0.0 - signal-exit: 4.1.0 - - retry@0.12.0: {} - - rettime@0.10.1: {} - - reusify@1.1.0: {} - - rfdc@1.4.1: {} - - rolldown@1.0.0-rc.2: - dependencies: - '@oxc-project/types': 0.111.0 - '@rolldown/pluginutils': 1.0.0-rc.2 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.2 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.2 - '@rolldown/binding-darwin-x64': 1.0.0-rc.2 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.2 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.2 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.2 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.2 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.2 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.2 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.2 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.2 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.2 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.2 - - rou3@0.7.12: {} - - router@2.2.0: - dependencies: - debug: 4.4.3 - depd: 2.0.0 - is-promise: 4.0.0 - parseurl: 1.3.3 - path-to-regexp: 8.3.0 - transitivePeerDependencies: - - supports-color - - run-applescript@7.1.0: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-buffer@5.2.1: {} - - safer-buffer@2.1.2: {} - - scheduler@0.27.0: {} - - semver@6.3.1: {} - - semver@7.7.3: {} - - send@1.2.1: - dependencies: - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 2.0.0 - http-errors: 2.0.1 - mime-types: 3.0.2 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - - seq-queue@0.0.5: {} - - seroval-plugins@1.5.0(seroval@1.5.0): - dependencies: - seroval: 1.5.0 - - seroval@1.5.0: {} - - serve-static@2.2.1: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 1.2.1 - transitivePeerDependencies: - - supports-color - - set-cookie-parser@2.7.2: {} - - setprototypeof@1.2.0: {} - - shadcn@3.8.2(@types/node@25.2.0)(hono@4.11.7)(typescript@5.9.3): - dependencies: - '@antfu/ni': 25.0.0 - '@babel/core': 7.29.0 - '@babel/parser': 7.29.0 - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@dotenvx/dotenvx': 1.52.0 - '@modelcontextprotocol/sdk': 1.25.3(hono@4.11.7)(zod@3.25.76) - '@types/validate-npm-package-name': 4.0.2 - browserslist: 4.28.1 - commander: 14.0.3 - cosmiconfig: 9.0.0(typescript@5.9.3) - dedent: 1.7.1 - deepmerge: 4.3.1 - diff: 8.0.3 - execa: 9.6.1 - fast-glob: 3.3.3 - fs-extra: 11.3.3 - fuzzysort: 3.1.0 - https-proxy-agent: 7.0.6 - kleur: 4.1.5 - msw: 2.12.8(@types/node@25.2.0)(typescript@5.9.3) - node-fetch: 3.3.2 - open: 11.0.0 - ora: 8.2.0 - postcss: 8.5.6 - postcss-selector-parser: 7.1.1 - prompts: 2.4.2 - recast: 0.23.11 - stringify-object: 5.0.0 - ts-morph: 26.0.0 - tsconfig-paths: 4.2.0 - validate-npm-package-name: 7.0.2 - zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) - transitivePeerDependencies: - - '@cfworker/json-schema' - - '@types/node' - - babel-plugin-macros - - hono - - supports-color - - typescript - - sharp@0.34.5: - dependencies: - '@img/colour': 1.0.0 - detect-libc: 2.1.2 - semver: 7.7.3 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.5 - '@img/sharp-darwin-x64': 0.34.5 - '@img/sharp-libvips-darwin-arm64': 1.2.4 - '@img/sharp-libvips-darwin-x64': 1.2.4 - '@img/sharp-libvips-linux-arm': 1.2.4 - '@img/sharp-libvips-linux-arm64': 1.2.4 - '@img/sharp-libvips-linux-ppc64': 1.2.4 - '@img/sharp-libvips-linux-riscv64': 1.2.4 - '@img/sharp-libvips-linux-s390x': 1.2.4 - '@img/sharp-libvips-linux-x64': 1.2.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - '@img/sharp-linux-arm': 0.34.5 - '@img/sharp-linux-arm64': 0.34.5 - '@img/sharp-linux-ppc64': 0.34.5 - '@img/sharp-linux-riscv64': 0.34.5 - '@img/sharp-linux-s390x': 0.34.5 - '@img/sharp-linux-x64': 0.34.5 - '@img/sharp-linuxmusl-arm64': 0.34.5 - '@img/sharp-linuxmusl-x64': 0.34.5 - '@img/sharp-wasm32': 0.34.5 - '@img/sharp-win32-arm64': 0.34.5 - '@img/sharp-win32-ia32': 0.34.5 - '@img/sharp-win32-x64': 0.34.5 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - shell-quote@1.8.3: {} - - 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.4 - 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.4 - 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 - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - sisteransi@1.0.5: {} - - slice-ansi@7.1.2: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - - solid-js@1.9.11: - dependencies: - csstype: 3.2.3 - seroval: 1.5.0 - seroval-plugins: 1.5.0(seroval@1.5.0) - - sonner@2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - source-map-js@1.2.1: {} - - source-map@0.6.1: {} - - source-map@0.7.6: {} - - sparse-bitfield@3.0.3: - dependencies: - memory-pager: 1.5.0 - - sprintf-js@1.1.3: {} - - sqlstring@2.3.3: {} - - srvx@0.10.1: {} - - statuses@2.0.2: {} - - std-env@3.10.0: {} - - stdin-discarder@0.2.2: {} - - strict-event-emitter@0.5.1: {} - - string-argv@0.3.2: {} - - string-ts@2.3.1: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@7.2.0: - dependencies: - emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.2 - - string-width@8.1.1: - dependencies: - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - stringify-object@5.0.0: - dependencies: - get-own-enumerable-keys: 1.0.0 - is-obj: 3.0.0 - is-regexp: 3.1.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - - strip-bom@3.0.0: {} - - strip-final-newline@2.0.0: {} - - strip-final-newline@4.0.0: {} - - strip-json-comments@3.1.1: {} - - supports-color@10.2.2: {} - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - tabbable@6.4.0: {} - - tagged-tag@1.0.0: {} - - tailwind-merge@3.4.0: {} - - tailwindcss@4.1.18: {} - - tapable@2.3.0: {} - - tarn@3.0.2: {} - - tedious@18.6.2: - dependencies: - '@azure/core-auth': 1.10.1 - '@azure/identity': 4.13.0 - '@azure/keyvault-keys': 4.10.0 - '@js-joda/core': 5.7.0 - '@types/node': 25.2.0 - bl: 6.1.6 - iconv-lite: 0.6.3 - js-md4: 0.3.2 - native-duplexpair: 1.0.0 - sprintf-js: 1.1.3 - transitivePeerDependencies: - - supports-color - - tedious@19.2.0: - dependencies: - '@azure/core-auth': 1.10.1 - '@azure/identity': 4.13.0 - '@azure/keyvault-keys': 4.10.0 - '@js-joda/core': 5.7.0 - '@types/node': 25.2.0 - bl: 6.1.6 - iconv-lite: 0.7.2 - js-md4: 0.3.2 - native-duplexpair: 1.0.0 - sprintf-js: 1.1.3 - transitivePeerDependencies: - - supports-color - - tiny-invariant@1.3.3: {} - - tiny-warning@1.0.3: {} - - tinyexec@1.0.2: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tldts-core@7.0.22: {} - - tldts@7.0.22: - dependencies: - tldts-core: 7.0.22 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toidentifier@1.0.1: {} - - tough-cookie@6.0.0: - dependencies: - tldts: 7.0.22 - - tr46@5.1.1: - dependencies: - punycode: 2.3.1 - - ts-api-utils@2.4.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - - ts-declaration-location@1.0.7(typescript@5.9.3): - dependencies: - picomatch: 4.0.3 - typescript: 5.9.3 - - ts-morph@26.0.0: - dependencies: - '@ts-morph/common': 0.27.0 - code-block-writer: 13.0.3 - - ts-pattern@5.9.0: {} - - tsconfig-paths@4.2.0: - dependencies: - json5: 2.2.3 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@2.8.1: {} - - tsx@4.21.0: - dependencies: - esbuild: 0.27.2 - get-tsconfig: 4.13.1 - optionalDependencies: - fsevents: 2.3.3 - - turbo-darwin-64@2.8.3: - optional: true - - turbo-darwin-arm64@2.8.3: - optional: true - - turbo-linux-64@2.8.3: - optional: true - - turbo-linux-arm64@2.8.3: - optional: true - - turbo-windows-64@2.8.3: - optional: true - - turbo-windows-arm64@2.8.3: - optional: true - - turbo@2.8.3: - optionalDependencies: - turbo-darwin-64: 2.8.3 - turbo-darwin-arm64: 2.8.3 - turbo-linux-64: 2.8.3 - turbo-linux-arm64: 2.8.3 - turbo-windows-64: 2.8.3 - turbo-windows-arm64: 2.8.3 - - tw-animate-css@1.4.0: {} - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@5.4.3: - dependencies: - tagged-tag: 1.0.0 - - type-is@2.0.1: - dependencies: - content-type: 1.0.5 - media-typer: 1.1.0 - mime-types: 3.0.2 - - typescript-eslint@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - typescript@5.9.3: {} - - ufo@1.6.3: {} - - undici-types@7.16.0: {} - - undici@7.18.2: {} - - undici@7.20.0: {} - - unenv@2.0.0-rc.24: - dependencies: - pathe: 2.0.3 - - unicorn-magic@0.3.0: {} - - universalify@2.0.1: {} - - unpipe@1.0.0: {} - - unplugin@2.3.11: - dependencies: - '@jridgewell/remapping': 2.3.5 - acorn: 8.15.0 - picomatch: 4.0.3 - webpack-virtual-modules: 0.6.2 - - until-async@3.0.2: {} - - update-browserslist-db@1.2.3(browserslist@4.28.1): - dependencies: - browserslist: 4.28.1 - escalade: 3.2.0 - picocolors: 1.1.1 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - use-sync-external-store@1.6.0(react@19.2.4): - dependencies: - react: 19.2.4 - - util-deprecate@1.0.2: {} - - uuid@8.3.2: {} - - valibot@1.2.0(typescript@5.9.3): - optionalDependencies: - typescript: 5.9.3 - - validate-npm-package-name@7.0.2: {} - - vary@1.1.2: {} - - vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): - dependencies: - '@oxc-project/runtime': 0.111.0 - fdir: 6.5.0(picomatch@4.0.3) - lightningcss: 1.31.1 - picomatch: 4.0.3 - postcss: 8.5.6 - rolldown: 1.0.0-rc.2 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 24.10.10 - esbuild: 0.27.2 - fsevents: 2.3.3 - jiti: 2.6.1 - tsx: 4.21.0 - yaml: 2.8.2 - - vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): - dependencies: - '@oxc-project/runtime': 0.111.0 - fdir: 6.5.0(picomatch@4.0.3) - lightningcss: 1.31.1 - picomatch: 4.0.3 - postcss: 8.5.6 - rolldown: 1.0.0-rc.2 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 25.2.0 - esbuild: 0.27.2 - fsevents: 2.3.3 - jiti: 2.6.1 - tsx: 4.21.0 - yaml: 2.8.2 - optional: true - - vitefu@1.1.1(vite@8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)): - optionalDependencies: - vite: 8.0.0-beta.12(@types/node@24.10.10)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - - vitefu@1.1.1(vite@8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)): - optionalDependencies: - vite: 8.0.0-beta.12(@types/node@25.2.0)(esbuild@0.27.2)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) - optional: true - - web-streams-polyfill@3.3.3: {} - - webidl-conversions@7.0.0: {} - - webpack-virtual-modules@0.6.2: {} - - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - - whatwg-mimetype@4.0.0: {} - - whatwg-url@14.2.0: - dependencies: - tr46: 5.1.1 - webidl-conversions: 7.0.0 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - which@4.0.0: - dependencies: - isexe: 3.1.1 - - word-wrap@1.2.5: {} - - workerd@1.20260131.0: - optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260131.0 - '@cloudflare/workerd-darwin-arm64': 1.20260131.0 - '@cloudflare/workerd-linux-64': 1.20260131.0 - '@cloudflare/workerd-linux-arm64': 1.20260131.0 - '@cloudflare/workerd-windows-64': 1.20260131.0 - - wrangler@4.62.0: - dependencies: - '@cloudflare/kv-asset-handler': 0.4.2 - '@cloudflare/unenv-preset': 2.12.0(unenv@2.0.0-rc.24)(workerd@1.20260131.0) - blake3-wasm: 2.1.5 - esbuild: 0.27.0 - miniflare: 4.20260131.0 - path-to-regexp: 6.3.0 - unenv: 2.0.0-rc.24 - workerd: 1.20260131.0 - optionalDependencies: - fsevents: 2.3.3 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@9.0.2: - dependencies: - ansi-styles: 6.2.3 - string-width: 7.2.0 - strip-ansi: 7.1.2 - - wrappy@1.0.2: {} - - ws@8.18.0: {} - - ws@8.19.0: {} - - wsl-utils@0.1.0: - dependencies: - is-wsl: 3.1.0 - - wsl-utils@0.3.1: - dependencies: - is-wsl: 3.1.0 - powershell-utils: 0.1.0 - - xmlbuilder2@4.0.3: - dependencies: - '@oozcitak/dom': 2.0.2 - '@oozcitak/infra': 2.0.2 - '@oozcitak/util': 10.0.0 - js-yaml: 4.1.1 - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yaml@2.8.2: {} - - 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: {} - - yoctocolors-cjs@2.1.3: {} - - yoctocolors@2.1.2: {} - - youch-core@0.3.3: - dependencies: - '@poppinss/exception': 1.2.3 - error-stack-parser-es: 1.0.5 - - youch@4.1.0-beta.10: - dependencies: - '@poppinss/colors': 4.1.6 - '@poppinss/dumper': 0.6.5 - '@speed-highlight/core': 1.2.14 - cookie: 1.1.1 - youch-core: 0.3.3 - - zeptomatch@2.1.0: - dependencies: - grammex: 3.1.12 - graphmatch: 1.1.0 - - zod-to-json-schema@3.25.1(zod@3.25.76): - dependencies: - zod: 3.25.76 - - zod-validation-error@4.0.2(zod@4.3.6): - dependencies: - zod: 4.3.6 - - zod@3.25.76: {} - - zod@4.3.6: {} From 7846db330c59fd364d72a62308dc902599701e25 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Wed, 4 Feb 2026 12:31:06 +0800 Subject: [PATCH 05/40] rename template --- README.md | 17 +++++++++-------- apps/web/public/favicon.ico | Bin 15406 -> 34494 bytes apps/web/src/routes/__root.tsx | 21 +++++++++------------ apps/web/src/routes/index.tsx | 10 +++++----- apps/web/wrangler.jsonc | 2 +- package.json | 2 +- 6 files changed, 25 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 1c0451d..240fcdc 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,16 @@ -# TanStarter +# Mugnavo Stack > [!WARNING] -> This is still a work in progress. See the [issue watchlist](#issue-watchlist) below. -> -> TODO: +> This is still a work in progress. > > - [ ] Replace ESLint + Prettier with Oxlint + Oxfmt (blocked by https://github.com/oxc-project/oxc/issues/14557) > - [ ] Drizzle Relations v2 support in Better Auth (https://github.com/better-auth/better-auth/pull/6913) > - [ ] `AGENTS.md` +> - [ ] Setup tests +> +> Also see the [issue watchlist](#issue-watchlist) below. -A monorepo template for 🏝️ TanStack Start and Cloudflare. +A minimal monorepo starter for 🏝️ TanStack Start on Cloudflare, curated from the best of the TypeScript ecosystem. - [Turborepo](https://turborepo.com/) + [pnpm](https://pnpm.io/) - [React 19](https://react.dev) + [React Compiler](https://react.dev/learn/react-compiler) @@ -134,12 +135,12 @@ We use **pnpm** by default, but you can modify these scripts in [package.json](. #### Utilities -- [`/auth/src/tanstack/middleware.ts`](./packages/auth/src/tanstack/middleware.ts) - Sample middleware for forcing authentication on server functions. (see [#5](https://github.com/dotnize/react-tanstarter/issues/5#issuecomment-2615905686) and [#17](https://github.com/dotnize/react-tanstarter/issues/17#issuecomment-2853482062)) -- [`/web/src/components/theme-toggle.tsx`](./apps/web/src/components/theme-toggle.tsx), [`/ui/lib/theme-provider.tsx`](./packages/ui/lib/theme-provider.tsx) - A theme toggle and provider for toggling between light and dark mode. ([#7](https://github.com/dotnize/react-tanstarter/issues/7#issuecomment-3141530412)) +- [`/auth/src/tanstack/middleware.ts`](./packages/auth/src/tanstack/middleware.ts) - Sample middleware for forcing authentication on server functions. +- [`/web/src/components/theme-toggle.tsx`](./apps/web/src/components/theme-toggle.tsx), [`/ui/lib/theme-provider.tsx`](./packages/ui/lib/theme-provider.tsx) - A theme toggle and provider for toggling between light and dark mode. ## Third‑party integrations -The template is kept minimal by default, but is compatible with many third‑party integrations. Here are a few I use in my projects: +The template is kept minimal by default, but is compatible with many third‑party integrations. Here are a few we use in our projects: - [Cloudflare R2](https://developers.cloudflare.com/r2/) - file storage - [PostHog](https://posthog.com/) - analytics & observability diff --git a/apps/web/public/favicon.ico b/apps/web/public/favicon.ico index 1a1751676f7e22811b1070572093996c93c87617..1ac5b2721f9aefd1d1ff86fa38ef2ae641f02139 100644 GIT binary patch literal 34494 zcmeHQ36y0=S$@I91rY`pjEctr1md1W5fyO=OHfHfa}LNs@NNC3r)PSS5R9V6L=Pw! zBPbpr5oB>8iHZqIB>lGTSu@Fm>383I-939|CYdFfkc4b73AujXfA9ZZz3RKv?SAv{ zc)HJdU3aPa>#wT6{eegSSxwqwVxmBxz`|&e#xdV8%W=(K^ z&V{+$o1UM`tzI46--LV{-u`fRc8{adl#8B4;U-0&*QC;6-GoAXug!t2~Vjx`xU=Z@4i;cm}zNd_p2t`CnX>AZ|pwo7aAR(dCK+f+b-YpxIgjb zqdi!FeX3CR3YF~#{6f9$qh5JmsCl=VaP=B_K0dMQxa7;%Jbz->F~3yzKFIg^db>4# z*I{{w^1i@qwEn2s^v^`O<6~R)`Y7{kX=VX+b^Owo4u7}8)s$@=+qzF+6q|GY*w+1i zrFsANPSg+l$l4u;{9>ak?*vBG``Y>)_k9n`qTHVo7vdk_b=)u2I#()Orj`2c*RoI8 zAIwKw3$^w(zQY*Y$bOOXc(-oneLly5@Ay}49(i$j^B%u6JuhvjY(MB1Ypwmk+u%Q7 zeRADB_X`ZRU+|fpznE`<-_tBl_-s4judTM%1SNz2=%Xp(CwYM5_}z#7;SWou`P$qYiJy+M;9Bo|j(N)U&V}PU z(Ko=2FxVG`>g-4P4)u1{-g&P)mvGS$N6#UBRr3z zUW|=5%lyHZ^v5;mU$4e@QGb=4`(MDZ6Wjp{bm5Z@rO$XDj%%UbdI!rFs@^xkc1oUg z_Z-ETwJwQ*t8?_ZgZeMx+Ura5-FHv6nxZNIzMR^*j=QEPn#v~Y&Pib^Xpt@F*f zBK5E?{5S^1M*AOG4!F;)z4PF}xEAZ}zlwrsKjU0yKbx?Nq*=_VQgiQ*R+`>9>}!rS z^OR=h!4D3CZ?#`$!-~2u&Uo)6{VS~!2FrsMcQZfm{QQ;oo|1XQHeIpz3BNei+8hNd z>e;04e;Z&vQwnI5eILx%hW8%kC$Gf({}g_I2OK_*Iri7%Tlc*v3Rcv!Qgh+Wq;cgn z!mrRj%CDlzWO-Jswx`)Y+W+Jy7|+|Xz=+FxS#y5%*p_{u<2iw^{Hik5dVO4(EYAV& zBLS}t`4z{t>K)AjBQEcC$DaL8@(;>L(x1@A{-=EO*B{4~$@2V~=D}|-)Vm)o)H*j6 zYn{(vF5OJ|e~a&bOBOi)pYl=)cYK^}8Z-$z!Xn z2RN5GPeMK6fR<%iZq8k81oAs1J9ml9z2^ogECljher436$W&ud&qMs zH%s-|s|$EX+9Tg1P7|BEKf%1+!iNEq&!k@~ea~F=P9KK0b~%bT{%H`8&sN^3Id6 zVB-HMPl!MJ0Db6l%;IwozL~uJ;CC&4%4c%06<7XNdSImo276#_v%RKV>#V0QBJ$Vl zj#Dmh4iAo{UTvV{+RZ#t<<>*rvRS= zW%k6EArp~C{Q?<$6t?mK+VOvrRDafY@DW^0IYJq#`a>KJ8@vbMQ-BQGy!&VDdPEO^ zT%w%dZ#>jRB4NRvWFFcolzWtilqIaEG=!U9GRd()tu8l+1d(?U3`ql%< zbs9L)W)>Z9%KH_wF3io}ByFfaCb116yfSr1_>ibys~+Q0j(sQkUaeg+amactJ}T(o z>`#|^nWrMUS8I=57j1dckSiSOkfi0YruPQIqVJA#&$T?q0C{)Wcx1UR*5+R)J`3RD zRBzbt`OxQ}b*r#rGV>B3$qeWzCcchu5?-$p^&;5cYWzJklcTra#?=m3A*a-JR~V zFY^`t3>z+OecI(oc$)8sv&enebT%yB=j*Lcgmmo$GpO6!9tA7znfOXTHzEC`*Q0!| z*15)nxpw=$mowgzh3|>%M$9PACtj%S`El|!`e4j{i@RpsBEP2gAeDjYm~_qgN}rPn zx3bee3w-LaEc{c(3Op;#exNTu3r~^pN30EWo$Ax2F9h=EsVqE3WMmi@)IK23$$}&M zmt%@P+o~|)QtD-pg%7#vWx@v;$Evn3jf1Jri`Dr{L%YL?_5&Qelf+43Fhx7=S_^+x z65W{Zlvj_{=6>6R6L$?c(2oy0$O7tdjIqSQ)93Ivet~k##4YKXa|?RHby}Y3y6N_h zi5=?5qX?h#g!9E!Rx_ST`-r?J2|s;DeS$R2xVwp~c};)4$XAV_rSxlmz8)H|_o3_m zeHIx-9GRcxOnlO=;p6?HyG;B`+YHqTVbu7nLL-_*|M^2$t)vD5VfeAb6 zIv8K?4!e$0ql0n78WG2F3+MNMZ8hGU`$<_x6Rr`6s^5M_o&=tAin_gxlgqutc#Jh0 zHhlYDZ7W+>0}gdpohq2G2Yt5J#1X!of5^)BM0dd2FcVJJYtYcAo$C$h4P|=%If-#$ z+$m4&{))Oc*W)Oz)SIA_e9cvFB3#D#IQL64omVNGrKIa>3qQ@6AIBvMU;7zlGj!UGc0QK^l;4&~iz|p>!`3jw$Yf?=- zxvt8Y|AcVE{?8QWHtUSK&cklz9JKL{yyqGc^nt9G!*ygHs}G`l+gILkj6SJTS@@p# z%EV@#e_d2NmilbnO#6pr4F+_5m-YmC(#Ku$h4a<+Z8L_KneT~j+dI6}b|#fWyygzZ z)!f^^n9ifhif@}T((-NFYiXm(4m=C{5x(uKliIP=cVo@nZxEXxT=zRrw?)rc-Vr8v z{D5zpYk4ShWWB2+>^S{vsqKv_m!I+u$(m(HoYMLsZoX0ug!-E^y@~$a=q%E|quR05 zXTS^Vy=1+VGhRu35arwEdH|G>HD5_(&39^lalO(~+vZY^Yra`;xb}K^eGtx9Q(q+KQ-kaG(H{%uT61%pL&v@hzNEhe1Pea$t+fo|gNi_*3;HGJD=D6WW2yfBNOh;Z1C#KYCMt#vIo zy9q3@qRb8OSD<6=?cTf66B?4RO$`aolU zkahGoLmz*X`y*|Q6uE{<)(JYDzP4-m>Q=k{wX>IQ%G^L5z$fHB>bRR)H>i~-;Fu<;rNJgz~_>X#x< zqwQq-wnu^Quh2d0`F@mdd)Ro50v=@gShfyE*)KTVfEw;+^w6q_K8uV=s1D{dDfR6h4 ztoB(Di}H4l8rNah$Fn6k?ym71p$ql#3@H{h>^5bA$GtLH`JVc=hZT#;g72{Ng74ig z@!e3Kr_Fo5m$_p3wug<^DBx9U-dh9Tzq`MKe2-_)*k_lF0^ecRfqh>$(AK8?mij|1 zhju${d2>JZuyGnCJnogDt;7A&T*F8i82LjihcquSooZ*xWzAjAdzDAoo~6`P**5=E z`NrG?eGb%Pqkg*Ykbc~y)Ui@#r3Y4eV5J9EdSEm?z;hy2r=D8X`+xd@c87tf7&Y!@VGQz6N%$?6OicA2-EeBp%Zp>f6JdATPKi6<# zEy_X4f5xqN-V@j2%9&EN?w^_EqprE{fM=#qFQDI^~9AqD=wU^Pxfqv?Z^N)z#7Q|J8_{oMg_DomXa&BFvx$qjEk3v69 zKM(4_-f*0&*u|MYuV&1Da6O7A`mG(mx9gYnztERVdqMY1@N5|7M;zfcu@wy4f_f(R z=9e1nw@V(L8-$pT3CCVi*Rh4H5fZ@hWQzHWSi|gvJM^R8tLAq(hSz$W9kAj!b@RT|Y?bZxuf&JXxNlwZ)I0BsT2o^0f8qWI#)s_v4`P?ZoM(nL z^PB9o*U~P;jucW5xNnqUmEM+f3#;JCD}(tJ#*t4bdl;}x{)K<{il*tCoG zxo~{hM((#T;pw&XsYTD>ny7(uvT%;popyXg?y;Vjuy`Jj#1E~t;o>XBdT*OIY5gd3 zvCtIgNc%w7QPDrgd|Xqa>%n??!gi4#Fb~(sMbn+^Rrngz?+AsoNA>%mU6n@n^~9HRQTvCf@L2G>xO(+@WhZ=Lm?Hx`1N|#J66bgU*5jmog&nl(P%rjV zsCK>-*ogi9W89x~$MsKIPf{A^i{xCEvoMUcw`>=9>>T0Ik4L{0=|k~js%yH^&f`*? zc;0H1FWBUd0zYgQ&t79$;QgmI4`Du&ezcCX6m?;()Syf-+hn#&&t}836XYRgK70P8 z)vND=HM)Z`!Gz0eX&25uWSMef_M#}d6aE1mL*crnvZuD{eVud5u9x?{c5MrM@8I7x zj@dw7j1T=(JR8=vUNc|5+U}iKI{+8;o9*Iy3CdlO={$#lKdhaQ^$uLW2YF$_b-j*V zhY`}9wktoq@N=Yb@yTM|i(a7XHyX2YmZ@uO9he2ACkJ6$RIyt!yTf$l|rsCyqcUG)+!&m*HQH=qllZq=>dgFOqUvwrT$uK6|ONHxN4r}h7D{GOkCQ0l?S(`L} z0oO3O!dS`Y)&ulYP$A6Y*Yi^hSSEO}^7l>e0q*&uZe5(7zl3|i^~Ze)v|C)yG*4>C z`c1R1;JNW~Hmg+!>!q(Ksyydvx!V1WN~4b#@xva?OQ4g!31`}!1-taWXeW@5(0(v~ zl&7+W31@Ca!FPF9s&%g?>;Tpve4gn+-buTNYm5}0oWBk^LwQPBW8%bXffvaC?a=Y} z(#J&opSs_`56>ts_?-*(lfrjR83UuwiZCMKqdvZ)E=n6i;nHVt+3v53T#76QykyTN zzR{4c&K7AC+Vb4gt3XYGh_cTVf6%AsH|Wpnw4SsyKi&SVD7&W*6SjibWP@kh%N{`M+X-eF zUW*M{_ik4l2EIRHw9_od@j-t+?cyjlN;CT+}u9c0}p;i(tV=uH{|VXmZSojoC8A1|FvD z*ZScTm{0S|P;Svjs%7j{_8J05^-Gy`>b39;@LRjA-UnyqEVd7|Jkx*%`Z9eCegeS_ zF%~nQc^!-y`D*ufw63U>-?~cLD@b`5*vYezc5)Cqi9h2opaJ-@j5GLxZ{{SQuP8Bu zTI)&16r%9fXD&R9e2QlsXcDRkHmvz!f2@72%B@1_x+>|y5lb*NACm}wLZ zppIL}3(S1>HNV>hx%3V05qH5`^DtJ<{->O`Vd_2W?!|9#R$|f_gEkHDn;dLw60c@G zK^?)jTogCglriuqUz_3|thMzXgAVg*@Xb?kZH=M*0gk#HC zK^l%p?*o|{*vlq-*K0XL&iEFi#4dmr=S~s~k?}acGYL1>cjPgofu#B(--U9Hdac$4 zJ^A<3=B?Vr^h;^E<)n-wrRj%J_=}!l(SXZ&D&h}`_(tWj+Q9Errr6bX8*CcjcT?mU z+GOYL-K)Gs%y&8X+GW8@i-ArQEnj=}gWvF4X+XbuKzNWRUm*T=Uh|$YO7hz@8_&is z?LP47wVt%s@|bm-*S2qjc6yqA#PVW$z;~F2&r;s=3~rgnF*;5Uf2DzDw?_lyo6@5gy9v22ZL>gD=j15F)Vy-IMCs5 zP17ONHxlO`vtf?vp6fvttsRS?A<;1s{9~iS*RCgS-JsHZf8M71$86Z6xW~Lb7Rb|n zOvc2W*FE1zihpbr_?mU(r@dbz-6z?Q#6R%c_kANKjBn<3nhj6fIX6iAuKux6wP$T} z*J{RdWF0GXUh0(gk3Is%NI_$=#&=Y>xzrPUBd_(u2JeAIF=UM+2mVg)NZNNoTFJYTG{>QyXW_NS$nU&*84nb?X}k4 z`*{~as6-p_+;f7`H^iK_LVPHMc;gNE{H-oR_)y-v@9MAj79y*w5N}Z#szNp7d`ceg z=Qg#k@cO}B`2AEQLYAsU^lG)(?NlVveB4D=RNqHBi7@LZyk>X`-?=&wyaXc324dGH zh`sI*2ZA9E$3YxV(}}Zro+2xvqoE%&Gttr5;%^xu$Xs8~f$F(IWCTHE$5Opih%-kZ z&Yy-jl?h|pAsJjp@v(NPk*BSN3PZOKf=D3D{ee_(C&aN7h|`CuUIE0#a)`n_3=NqA zF3WYeew3H!8|bXk`EOAn+)ag*2_NI>WPgaGyY-kWm?m!BVg-cSkCwHgSkV7%d$ihpd+fwB2n%=`AHbdAe!S+2u%Eu2wg?hGhq zwxvNjHX7#*6PqjedU_4aH|QF#E9E%lx@LY*lYwoauNnjVw_<^p8Xd=Mg_*Aoi+ts4 zN|_d^dU>2qy*yrrap8M0DKs1JWdDHC?g#MKIbq=Z1<_TMHt0PiYimy5!@5g#XqNzpXtEec~usxTf6PbkDqAu50ezz_=_Pt%P-o2*Owy3VuMqO8Gt*$AvExLMsqx-eXE{~qS zii2O7@;dVd*=JmqJ_o=9-? z5_?=tM2bh}-;Jj@@SNIPxKH*Gp409N?^zK33m}3lAi}I5BCR2Iu7!x-2$8sj?%{Tb zeO|oI+!u!;eZ-O7wCeuGpU13DgzG3gzSl^&em@Z|t%ISGQ;FG zj@PMUDH>6b=_qn@JN+sazO#E#dkcj3kD&D)BG3?bjRCGJMCuM|uYwyx>th1p?uE$D zfGEg@IF|=elwTk+f_ps)XL|`ZeLtxMtK|OPZ5E)4U?wID2aEW|}8@+;m!x z4}?NwMa#H(jJuz3vmnmqO6#*IE0mrS9a6lnvF~5vU^-3onloN?ZJ2p)h+t}S*m9cF zt7Y5-#@$Bk^@K3QJ+ccTZx6(YbizHJ87#T90#y9nQl8gMTKBV9#Q+w0snR`&i zEn?iWgj+(m7a=OE_h_WL2e&@vCYu7I&AMA^LD*hRZ zF%=H6KEh|KjS3Ey)b1rJY+j*)FJY&Kt5BLFu;*YO^a+cCD#b&-2S@0gC7jN5 zoa`9APtcglO@fNXf1lk4uqXQ+sV@6qU+j~8GX`TZCga=Nmvqib9eBU!$n&^xTu4@y z*B<$qy|FibGCVv(VQG6G7OQ}1b~hn5_|W{PIi5y#D1zpC4B8*sjif>1xtnzOXnY;!ZKQWI_M!J9)z=>z`sL%sYx4Cxb1z&s^P>DmSkEnHn75-wx^C)0 z?~fxK(e5i}EcDdEYzJWKp?hTANBLCpCG246%z_BN6`SpU1ApE39r}4WN!Mq((fIq) z0dGtTZnb=CK7KKeu$RV=MeCs0lIRAE@=KJ?#|EV1gA?=c*ObZlF{}cUw$R)jz5xTR z(i+Pv^?p+tqtjU@>8@KR>OiSvOA~I>yW-~<7nX=GgTnC6;UDnsk(u}?z#b#k(K`FN zEvC8^HkP;8RgH0>$yk}F*5@@)%GTub7mly5%h2Vm%V>aN)@e29vF97~**68fJ?5d$ z{wa7PVH{oy9g7baN1)A+6|hOUkLmGQcrS7(-aha>dPYrctgrZayi}Lxn4|UDl%s_s zy*tyfWZfgjqfh!|={@(z)28TudLf2JyEN8i zACf=4FU9Bd@CGS=Y#`0ky^UC2uBWvo+X}R3G7b7it^niy581Oj2BM4KU_9?XgvQ=< zbTl6?^-quFiBi9G4<8TvW7iDo8~V~>N<@QntzUo+&Zo4Pn%)4LT)7Nmdz7HFSE=Sc z85CQ4vKTLV4WkRj()U8A?fvo8)_zdU8-^F?JK}|af1zveFg)iw2p@;9#OU4b7#>fH ziGdHtld``NJ83NBYp{;KQQS*3*hJqMPGpS9*!&C#u2lO3RjFZUcIVFEPuo62yDc9; zFcUBk*R}1h`$Pkm^R(`CTD99djA2QPbX~tE@OPQ2(l*#%z@L~-t4h3Qt9(w;`4u>C< z^vb?_=34gM(|D9cU)hKG2iDQ}iEXt^`mHl?I#Y(Eo9FQ6kq7kdM%aAcWxGb$t-gOU zKL1YK&FPze=fJi6+Zo8eeL!z~tehJj^Yy0u?5l?`JLV$h?Z1HIw+^5~W&^!16E@pE zToWnsceRZ4=)Wa*_Vy~i5nE7vJqEwdb|RxV2?xs)rFze2Q~NUr`vCQM#xJ+KC7UZ( zJUU&f^mV*)WrybSl^u9o+nkt*31P)JUK)&{Cn_`|o5osh>-W1QW^3oyFFE$EzTn_< zv%>EFtqMEbs<0>HwB@mUUS8;g>T>)0)fYDToW11PY>u_&|8etBV&D0G$qJMEC01Vb z=PmQp=a*hrmn_v$%67fJ#4?YsaTzZAxPJe?mt&oTBw8_z?1|_ku) zoLL*GBuyrszS%8BcG!C&J)KnX|G>{)hWhd9%iUkiJv1Vr0!CCz14$y>;SLhK0yK^pc=Y zswdVK&nd>jb80eaS8{**P=71DIrhMsoy41B5UkrVZ;nN)qOAH>NFSsP>Rgf)xeQ#w&}yhLOjUk!YK0%q%b#eR zETVV4#j;izu~LrRNcx=}^*63x>)y#!CJ#HHoO>HxC?nG7X z+(||lv5YlK3weGjdTA{6cf7v8lN8>h*QWW(F*MeS4SDA#lXjabYpAU4ojI)Nw{nb4 z;#~r9se;Fjq%DfQ_`DT<(;e72bKQT^JZPNl*SI#ZA<#uAm2%b+9;S4 zb7PK=YRBR!;-#gtRmscdt8`ZLRbaE6tAgpAr_gufFtlahb&{|Z z9?XfkF~>*o4{;S1n^&sT8%T?^Un*<8&Z|`L-bC?BpAHxkIb6Ta(D+Gm)@#4i-^`o! z?wlk!hRT}v$xPy%E$hIAq{k|}%N5?#->e5$U8V6v<#-*XwvS2q5rKYBOPGw!db7lZ zI59Wo*c$%`578|#MARu-u3@@6SRg(?Alh4CqQ?L{yK@y(2{itB4Dpy@?i~Ali1%?> zE9dp3C2#KY@*+v&SCO9m?4b}$4EkEaU@XQo)*V-lin-MQ64L-J@Y)2co$Q= zp-k5OS%c^Gh1VNi^Qq5`a&}=*?rONC{gZsRl`t5KF&UdVD14Y3b7Zc}S!qLgzIg9= zs<@aGq(ay>(&z0}@LW&&HjSG|cNNkiRXDLv;Os$x@;rfxV=C;~I|LKm_v3|FdY1BB zke;s`FQWUw>m}b0=E&opjo14;T8H>Of#(Que<3Xc6Mb{BCv_+)j;kc!jKNrp$=J++ zxiBZ@#vGX|b7uZFHZVGw+0(M zCf;6l0CQK|gT>FJuahtK$-Wtbu^5xF6>VPTVnlj<2QXLW%-omR-R`o^>2&-yk9hb6 zY)4q=TI`Hkiny3Xh>Bc}kdO`V^7Vn!_B7g0a0M2&v=5+#nbWx#O{nZS14b z(=CN;Ke}z%i~b?!FvzbIz2@z~NV8%rGNbtYCucEZz(p*!)HUvc3j2#uRT;jr< zn43RwWUkDaxi49R9_DtaG+$3Tx!xArX|dRz`qz&1bA$X}I#zv2YwBbgHDzF8 zv!n#`S3kgqgH!P1vOAbK?luO!UWOTc?!(qt1MAnd*z&0cOU;{bTl3Exm|76Th^%(M19n98H{~7FCc@oDG z_w7jH*okD@DOIdRo;l}J-cPP~vB32~Q+a(kF^t|TCip{)cEc#E6X5dSt(}TLun@DnuQ!(a zVQV#{{{Pw)-M;f~%x}%d6V9tKBklQd?OWdycx~rb`1_$57~~bySnnIhQknmVP55-_ z{>J>r_4|9uEs4@WHhPYeQ@&N4u13E%tl3_%W$_ve@NvQ0o>nl8 zxh7qE$72=VJvtKu&Y4Luj=r9&VHKxEfAcuvzaCx2IbnWKbu&MWd(V_TXiqS;ir3Yw zO4b#wqP=O9lIhbuI{chek57U&6VIs>ubYp>3D@a)IuHNInt`{{Owc!HHeU0afVr_n z={F9HMb;@Axk zgID5X%UIa%Q`5f3I~0e^#`{4l@uL6dcr$qdUiKXQ5JpSP)_6QrrWsFdlKnxAUE^NC zL((2WY44!@Aq|FxyHcEXCO*iYkDiI&qLcHdQf!dphduU8#G8o|(A&uz&y2K2yP+#E zc5^0XC+6UvAuG^pw+a4vd@hDuw4!@83qzuudH>-r81GqZetkW~Ib?1WTckdo5k~P` zDNioP+?{f@BOEF2$hNtKjgJdMucS$MGl_VnPLg7+F9v;%S0hJCG1%8*N8_2F$H3@c zi}1{s))>6q8{GrH#XA(2?sw`Z^ga3`r3>(vo!?;b{?iZnXS~*M6(0R*AH(83a+&3{ zkFuXD@y~AJ$=qE|J?OFZl(v!#EzLYL53dD|p?)5Zm&1okdp$W$$Z_L8Q4ICZl-J&h zz9|RIMcdIc(bfGc^r3O}_e0b1I>i=y?)?_MQ@+E%s5RJhyyhYQE%Er=jAEOc@?_52by4IP61rcJ%Gc>t8gl~ z^$?CB?tpC#n7m7i?ZjvC5iP!Q12p%*ovSFvckj9B8jBW7`tP_oEuHnPS;H$~15-kyCp*x285Y7E9&S z%$d3KH(20hycbxhxfn<>>DJ7p^fKNFo{OiP`{5~X4H&%38iChpAHoQ{rpBy;S`1HZ zKqzt8cu9kS6xVOhyg9}lP8LcQqEDmXOQajW-?c<+qC4$B=|pp(ozp+5-#?MYPZ!$%z?HqgZ`2{e=1R zFF~WRh}YDs$)MOSI(E98kA5)=@T$*9yzKo2Ui0}1qf*wvySf6O?Xkq$)W6&wo*Pf| zJ@7P^>;k@O$a}ZIz7)TldR?u@zaq4FJB0R<&^?HJP*2YadKceKT$Mcq zysvdmBk) zOHW169-vY5TpKH`IqhjqPd?y?IY&IO^2|>7SD&MDcVu7WNAVe1Q;YZqwREipZdYrm zeKnX_R!^EL@#K98F%KE-r$#d6KTNEi4{YG>45J zC$4l*T|6`EUSaK_d*_hV!dm7j=dsrg!DR1p^zs=6la!yK6p(IGx+}l zCGW_c!^pgOP%gvQTb5PM4O1#-Ra$}ev|mm7e+B-Zg(j<}V^bpa*zpT)LopJcI&~-0 z^wh2N+EcgEAX_@6iZ#zW*;t12l`@5mt74@F25SArvEpg|26sjR#p{) zoYEM?6zoO*#YlQj$iy>;)fB&>H8PXdnJk*CPw2<%()p@@mntj0Eh?|L*HvD2$L}?p z$Sl0M<~Ba|yNuMck;p6$!)v)Ub>b+k?}uoOB+Ms7znPnxSGIJ!alz4-_VHZ2dBH(_ z^TI|*R^dP?oBmunHau7IIdwqs*=;B~w+%NdHmTVc`}8RJgZ2+JYk@Q`+TJeT_+Cxf z8q2z})$w(ut18LxtE|kXlIyY$_C<58+51cj$Uo$i=lAW3WnCT=uk7)l#BxM^3GHGp sUYw*kZ&9czwx}V4-fB3n{`}%3F2iNH4%cNLe+aq%I{j}CJVp=vAC(LAUjP6A diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx index f480078..0bd303a 100644 --- a/apps/web/src/routes/__root.tsx +++ b/apps/web/src/routes/__root.tsx @@ -13,7 +13,7 @@ import { TanStackDevtools } from "@tanstack/react-devtools"; import { ReactQueryDevtoolsPanel } from "@tanstack/react-query-devtools"; import { TanStackRouterDevtoolsPanel } from "@tanstack/react-router-devtools"; -import { authQueryOptions, type AuthQueryResult } from "@repo/auth/tanstack/queries"; +import type { AuthQueryResult } from "@repo/auth/tanstack/queries"; import appCss from "~/styles.css?url"; import { Toaster } from "@repo/ui/components/sonner"; @@ -23,15 +23,11 @@ export const Route = createRootRouteWithContext<{ queryClient: QueryClient; user: AuthQueryResult; }>()({ - beforeLoad: ({ context }) => { - // we're using react-query for client-side caching to reduce client-to-server calls, see /src/router.tsx - // better-auth's cookieCache is also enabled server-side to reduce server-to-db calls, see /src/lib/auth/auth.ts - context.queryClient.prefetchQuery(authQueryOptions()); - - // typically we don't need the user immediately in landing pages, - // so we're only prefetching here and not awaiting. - // for protected routes with loader data, see /_auth/route.tsx - }, + // Typically we don't need the user immediately in landing pages. + // For protected routes with loader data, see /_auth/route.tsx + // beforeLoad: () => { + // context.queryClient.prefetchQuery(authQueryOptions()); + // }, head: () => ({ meta: [ { @@ -42,11 +38,12 @@ export const Route = createRootRouteWithContext<{ content: "width=device-width, initial-scale=1", }, { - title: "TanStarter", + title: "Mugnavo Stack", }, { name: "description", - content: "A monorepo template for 🏝️ TanStack Start and Cloudflare.", + content: + "A minimal monorepo starter for 🏝️ TanStack Start on Cloudflare, curated from the best of the TypeScript ecosystem.", }, ], links: [{ rel: "stylesheet", href: appCss }], diff --git a/apps/web/src/routes/index.tsx b/apps/web/src/routes/index.tsx index 1ab0836..6dcf2ca 100644 --- a/apps/web/src/routes/index.tsx +++ b/apps/web/src/routes/index.tsx @@ -13,7 +13,7 @@ function HomePage() { return (
-

React TanStarter

+

Mugnavo Stack

This is an unprotected page:
@@ -36,18 +36,18 @@ function HomePage() {
             rel="noreferrer noopener"
           >
             🏝️ TanStack Start
-          
-          .
+          {" "}
+          on Cloudflare
         

- dotnize/tanstarter + mugnavo/stack diff --git a/apps/web/wrangler.jsonc b/apps/web/wrangler.jsonc index 32ffded..52e10a1 100644 --- a/apps/web/wrangler.jsonc +++ b/apps/web/wrangler.jsonc @@ -1,6 +1,6 @@ { "$schema": "node_modules/wrangler/config-schema.json", - "name": "tanstarter", + "name": "mugnavo-app", "compatibility_date": "2026-01-20", "compatibility_flags": ["nodejs_compat"], "main": "@tanstack/react-start/server-entry", diff --git a/package.json b/package.json index 0d395c7..8a3fa80 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "tanstarter", + "name": "mugnavo-app", "private": true, "scripts": { "build": "turbo run build", From fff481d887e52ee7a9d0d85923417ef972cc1d9e Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Thu, 5 Feb 2026 00:49:10 +0800 Subject: [PATCH 06/40] update readme --- README.md | 2 ++ pnpm-workspace.yaml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 240fcdc..98c2230 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,7 @@ The template is kept minimal by default, but is compatible with many third‑par - [PostHog](https://posthog.com/) - analytics & observability - [Resend](https://resend.com/) - email - [Polar](https://polar.sh/) - billing +- ... and many more! ## License @@ -153,6 +154,7 @@ The template is kept minimal by default, but is compatible with many third‑par ## Ecosystem +- [Cloudflare MCP](https://developers.cloudflare.com/agents/model-context-protocol/mcp-servers-for-cloudflare/) - Cloudflare's official MCP servers, including one for their docs. - [TanStack MCP](https://tanstack.com/cli/latest/docs/mcp/connecting) - The official MCP server for searching the latest docs for TanStack libraries. - [awesome-tanstack-start](https://github.com/Balastrong/awesome-tanstack-start) - A curated list of awesome resources for TanStack Start. - [shadcn/ui Directory](https://ui.shadcn.com/docs/directory), [shoogle.dev](https://shoogle.dev/) - Component directories for shadcn/ui. diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a6b7c10..ec90db2 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -24,7 +24,7 @@ catalog: '@tanstack/react-router-ssr-query': ^1.158.0 '@tanstack/react-start': ^1.158.0 '@types/node': ^24.10.10 - '@types/react': ^19.2.10 + '@types/react': ^19.2.11 '@types/react-dom': ^19.2.3 '@vitejs/plugin-react': ^5.1.3 babel-plugin-react-compiler: ^1.0.0 From 2c124c310cb949633e9c25013e166345dffdc927 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Thu, 5 Feb 2026 01:03:37 +0800 Subject: [PATCH 07/40] update readme --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 98c2230..12fdb1d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ > - [ ] Replace ESLint + Prettier with Oxlint + Oxfmt (blocked by https://github.com/oxc-project/oxc/issues/14557) > - [ ] Drizzle Relations v2 support in Better Auth (https://github.com/better-auth/better-auth/pull/6913) > - [ ] `AGENTS.md` -> - [ ] Setup tests +> - [ ] Setup tests? > > Also see the [issue watchlist](#issue-watchlist) below. @@ -19,7 +19,8 @@ A minimal monorepo starter for 🏝️ TanStack Start on Cloudflare, curated fro - [Tailwind CSS](https://tailwindcss.com/) + [shadcn/ui](https://ui.shadcn.com/) + [Base UI](https://base-ui.com/) - [Drizzle ORM v1](https://orm.drizzle.team/) (beta) + Cloudflare D1 - [Better Auth](https://www.better-auth.com/) -- ~~[Oxlint](https://oxc.rs/docs/guide/usage/linter.html) + [Oxfmt](https://oxc.rs/docs/guide/usage/formatter.html)~~ + [Husky](https://typicode.github.io/husky/) + [lint-staged](https://github.com/lint-staged/lint-staged) - WIP +- [ESLint](https://eslint.org/) + [Prettier](https://prettier.io/) with [Husky](https://typicode.github.io/husky/) + [lint-staged](https://github.com/lint-staged/lint-staged) + ```sh β”œβ”€β”€ apps From cbc75787ba914edfb8448bcec6cff40f1f13f3ab Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Thu, 5 Feb 2026 08:16:59 +0800 Subject: [PATCH 08/40] chore: update middleware comments --- packages/auth/src/tanstack/middleware.ts | 5 +---- pnpm-workspace.yaml | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/auth/src/tanstack/middleware.ts b/packages/auth/src/tanstack/middleware.ts index b7e60ae..4cc91e8 100644 --- a/packages/auth/src/tanstack/middleware.ts +++ b/packages/auth/src/tanstack/middleware.ts @@ -6,11 +6,8 @@ import { } from "@tanstack/react-start/server"; import { auth } from "../auth"; -// https://tanstack.com/start/latest/docs/framework/react/guide/middleware -// This is just an example middleware that you can modify and use in your server functions or routes. - /** - * Middleware to force authentication on server requests (including server functions), and add the user to the context. + * Middleware to enforce authentication on server requests (including server functions), and add the user to the context. */ export const authMiddleware = createMiddleware().server(async ({ next }) => { const session = await auth.api.getSession({ diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ec90db2..7f87237 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -47,7 +47,7 @@ catalog: prettier-plugin-tailwindcss: ^0.7.2 react: ^19.2.4 react-dom: ^19.2.4 - shadcn: ^3.8.2 + shadcn: ^3.8.3 sonner: ^2.0.7 tailwind-merge: ^3.4.0 tailwindcss: ^4.1.18 From 7962a967eb7415fcdd1e7fc68e2f73011b6264bd Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Thu, 5 Feb 2026 11:03:15 +0800 Subject: [PATCH 09/40] add worker & vite types to app tsconfig --- apps/web/src/routes/__root.tsx | 1 - apps/web/tsconfig.json | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx index 0bd303a..f36696c 100644 --- a/apps/web/src/routes/__root.tsx +++ b/apps/web/src/routes/__root.tsx @@ -1,4 +1,3 @@ -/// import type { QueryClient } from "@tanstack/react-query"; import { createRootRouteWithContext, diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index a2398ff..9198c0e 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "@repo/tsconfig/base.json", "compilerOptions": { + "types": ["./worker-configuration.d.ts", "node", "vite/client"], "paths": { "~/*": ["./src/*"], From 68d0ad1eab0fdec1ab59e1a3e62c16b1f23c1597 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Thu, 5 Feb 2026 16:29:12 +0800 Subject: [PATCH 10/40] bump deps --- pnpm-workspace.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7f87237..44cb5df 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -19,10 +19,10 @@ catalog: '@tanstack/react-form-start': ^1.28.0 '@tanstack/react-query': ^5.90.20 '@tanstack/react-query-devtools': ^5.91.3 - '@tanstack/react-router': ^1.158.0 - '@tanstack/react-router-devtools': ^1.158.0 - '@tanstack/react-router-ssr-query': ^1.158.0 - '@tanstack/react-start': ^1.158.0 + '@tanstack/react-router': ^1.158.1 + '@tanstack/react-router-devtools': ^1.158.1 + '@tanstack/react-router-ssr-query': ^1.158.1 + '@tanstack/react-start': ^1.158.1 '@types/node': ^24.10.10 '@types/react': ^19.2.11 '@types/react-dom': ^19.2.3 @@ -56,7 +56,7 @@ catalog: tw-animate-css: ^1.4.0 typescript: ^5.9.3 typescript-eslint: ^8.54.0 - vite: ^8.0.0-beta.12 + vite: ^8.0.0-beta.13 wrangler: ^4.62.0 zod: ^4.3.6 @@ -64,4 +64,4 @@ catalogMode: prefer overrides: '@better-auth/drizzle-adapter': https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913 - vite: ^8.0.0-beta.12 + vite: ^8.0.0-beta.13 From 6cb42ae8a835450f44d18d752e66b2f2917b457a Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Thu, 5 Feb 2026 16:56:41 +0800 Subject: [PATCH 11/40] update readme --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 12fdb1d..9d2278e 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,11 @@ # Mugnavo Stack > [!WARNING] -> This is still a work in progress. +> This is still a work in progress. Currently blocked by: > -> - [ ] Replace ESLint + Prettier with Oxlint + Oxfmt (blocked by https://github.com/oxc-project/oxc/issues/14557) > - [ ] Drizzle Relations v2 support in Better Auth (https://github.com/better-auth/better-auth/pull/6913) -> - [ ] `AGENTS.md` -> - [ ] Setup tests? > -> Also see the [issue watchlist](#issue-watchlist) below. +> Also see the [issue watchlist](#issue-watchlist) below and open issues with the [`branch:next`](https://github.com/dotnize/react-tanstarter/issues?q=is%3Aissue%20state%3Aopen%20label%3Abranch%3Anext) label. A minimal monorepo starter for 🏝️ TanStack Start on Cloudflare, curated from the best of the TypeScript ecosystem. From 0f3f7a948318fe226098f3bfad42499a69f7aea7 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Fri, 6 Feb 2026 07:07:45 +0800 Subject: [PATCH 12/40] add default inter custom font --- apps/web/package.json | 1 + apps/web/src/routes/__root.tsx | 2 ++ apps/web/src/styles.css | 4 ++++ pnpm-workspace.yaml | 15 ++++++++------- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index 62f9f80..e9ed3cd 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -16,6 +16,7 @@ "wrangler": "wrangler" }, "dependencies": { + "@fontsource-variable/inter": "catalog:", "@remixicon/react": "catalog:", "@repo/auth": "workspace:*", "@repo/db": "workspace:*", diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx index f36696c..1324dbd 100644 --- a/apps/web/src/routes/__root.tsx +++ b/apps/web/src/routes/__root.tsx @@ -12,6 +12,8 @@ import { TanStackDevtools } from "@tanstack/react-devtools"; import { ReactQueryDevtoolsPanel } from "@tanstack/react-query-devtools"; import { TanStackRouterDevtoolsPanel } from "@tanstack/react-router-devtools"; +import "@fontsource-variable/inter"; + import type { AuthQueryResult } from "@repo/auth/tanstack/queries"; import appCss from "~/styles.css?url"; diff --git a/apps/web/src/styles.css b/apps/web/src/styles.css index 7bd3079..6d1445b 100644 --- a/apps/web/src/styles.css +++ b/apps/web/src/styles.css @@ -1,3 +1,7 @@ @import "@repo/ui/styles/base.css"; @source "./"; + +@theme inline { + --font-sans: "Inter Variable", sans-serif; +} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 44cb5df..ac5468c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,9 +6,10 @@ packages: catalog: '@base-ui/react': ^1.1.0 '@better-auth/drizzle-adapter': https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913 - '@cloudflare/vite-plugin': ^1.23.0 - '@eslint-react/eslint-plugin': ^2.9.4 + '@cloudflare/vite-plugin': ^1.23.1 + '@eslint-react/eslint-plugin': ^2.11.0 '@eslint/js': ^9.39.2 + '@fontsource-variable/inter': ^5.2.8 '@remixicon/react': ^4.9.0 '@tailwindcss/vite': ^4.1.18 '@tanstack/devtools-vite': ^0.5.0 @@ -22,9 +23,9 @@ catalog: '@tanstack/react-router': ^1.158.1 '@tanstack/react-router-devtools': ^1.158.1 '@tanstack/react-router-ssr-query': ^1.158.1 - '@tanstack/react-start': ^1.158.1 - '@types/node': ^24.10.10 - '@types/react': ^19.2.11 + '@tanstack/react-start': ^1.158.3 + '@types/node': ^24.10.11 + '@types/react': ^19.2.13 '@types/react-dom': ^19.2.3 '@vitejs/plugin-react': ^5.1.3 babel-plugin-react-compiler: ^1.0.0 @@ -41,7 +42,7 @@ catalog: eslint-plugin-turbo: ^2.8.3 husky: ^9.1.7 lint-staged: ^16.2.7 - motion: ^12.31.0 + motion: ^12.33.0 prettier: ^3.8.1 prettier-plugin-organize-imports: ^4.3.0 prettier-plugin-tailwindcss: ^0.7.2 @@ -57,7 +58,7 @@ catalog: typescript: ^5.9.3 typescript-eslint: ^8.54.0 vite: ^8.0.0-beta.13 - wrangler: ^4.62.0 + wrangler: ^4.63.0 zod: ^4.3.6 catalogMode: prefer From f9ee24d713cf598e8a9d6cba6beda18fcc13a3b9 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Sat, 7 Feb 2026 05:38:17 +0800 Subject: [PATCH 13/40] chore: oxlint + oxfmt (#51) closes #48 --- .editorconfig | 2 +- .oxfmtrc.json | 36 +++++++++++++ .oxlintrc.json | 48 +++++++++++++++++ .prettierignore | 24 --------- .prettierrc | 9 ---- .vscode/extensions.json | 6 +-- .vscode/settings.json | 7 ++- README.md | 7 +-- apps/web/eslint.config.js | 3 -- apps/web/package.json | 8 --- .../src/components/default-catch-boundary.tsx | 4 +- .../src/components/sign-in-social-button.tsx | 4 +- apps/web/src/components/theme-toggle.tsx | 1 - apps/web/src/router.tsx | 1 + apps/web/src/routes/__root.tsx | 18 +++---- apps/web/src/routes/_auth/dashboard/index.tsx | 3 +- apps/web/src/routes/_auth/dashboard/route.tsx | 6 +-- apps/web/src/routes/_guest/login.tsx | 9 ++-- apps/web/src/routes/_guest/route.tsx | 2 +- apps/web/src/routes/_guest/signup.tsx | 13 +++-- apps/web/src/routes/api/auth/$.ts | 3 +- apps/web/src/routes/index.tsx | 18 +++---- package.json | 28 +++++----- packages/auth/eslint.config.js | 3 -- packages/auth/package.json | 8 +-- packages/auth/src/auth.ts | 5 +- packages/auth/src/tanstack/functions.ts | 1 + packages/auth/src/tanstack/hooks.ts | 1 + packages/auth/src/tanstack/middleware.ts | 7 +-- packages/auth/src/tanstack/queries.ts | 1 + packages/db/drizzle.config.ts | 8 +-- packages/db/eslint.config.js | 3 -- packages/db/package.json | 16 +++--- packages/db/src/index.ts | 1 + packages/db/src/schema/auth.schema.ts | 51 +++++++++---------- packages/db/src/schema/relations.ts | 1 + packages/ui/components/button.tsx | 9 ++-- packages/ui/components/dropdown-menu.tsx | 30 ++++------- packages/ui/components/input.tsx | 5 +- packages/ui/components/label.tsx | 4 +- packages/ui/eslint.config.js | 3 -- packages/ui/hooks/use-mobile.ts | 1 - packages/ui/lib/theme-provider.tsx | 8 ++- packages/ui/package.json | 12 ++--- pnpm-workspace.yaml | 14 ++--- tooling/eslint-config/base.js | 40 --------------- tooling/eslint-config/package.json | 23 --------- tooling/eslint-config/tanstack.js | 44 ---------------- tooling/tsconfig/package.json | 2 +- turbo.json | 16 ++++-- 50 files changed, 229 insertions(+), 348 deletions(-) create mode 100644 .oxfmtrc.json create mode 100644 .oxlintrc.json delete mode 100644 .prettierignore delete mode 100644 .prettierrc delete mode 100644 apps/web/eslint.config.js delete mode 100644 packages/auth/eslint.config.js delete mode 100644 packages/db/eslint.config.js delete mode 100644 packages/ui/eslint.config.js delete mode 100644 tooling/eslint-config/base.js delete mode 100644 tooling/eslint-config/package.json delete mode 100644 tooling/eslint-config/tanstack.js diff --git a/.editorconfig b/.editorconfig index de6051a..2b4ac33 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,4 +7,4 @@ indent_style = space indent_size = 2 charset = utf-8 trim_trailing_whitespace = true -max_line_length = 90 \ No newline at end of file +max_line_length = 100 \ No newline at end of file diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 0000000..d710725 --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,36 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "tabWidth": 2, + "semi": true, + "printWidth": 100, + "singleQuote": false, + "endOfLine": "lf", + "trailingComma": "all", + "experimentalSortImports": {}, + "experimentalTailwindcss": { + "stylesheet": "./packages/ui/styles/base.css", + "attributes": ["class", "className"], + "functions": ["clsx", "cn", "cva", "tw"] + }, + "ignorePatterns": [ + "pnpm-lock.yaml", + "package-lock.json", + "yarn.lock", + "bun.lock", + "pnpm-workspace.yaml", + "routeTree.gen.ts", + ".tanstack-start/", + ".tanstack/", + "drizzle/", + "migrations/", + ".drizzle/", + ".turbo", + ".cache", + "worker-configuration.d.ts", + ".vercel", + ".output", + ".wrangler", + ".netlify", + "dist" + ] +} diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 0000000..dd05929 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,48 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["typescript", "react", "react-perf", "jsx-a11y"], + "env": { + "builtin": true, + "node": true, + "browser": true + }, + "jsPlugins": [ + "eslint-plugin-turbo", + // Plugins with "/" in name have to be aliased for now + // Issue: https://github.com/oxc-project/oxc/issues/14557 + { + "name": "eslint-tanstack-router", + "specifier": "@tanstack/eslint-plugin-router" + }, + { + "name": "eslint-tanstack-query", + "specifier": "@tanstack/eslint-plugin-query" + } + ], + "rules": { + "no-deprecated": "warn", + "typescript/no-floating-promises": "off", + "typescript/no-misused-spread": "off", + + "turbo/no-undeclared-env-vars": "warn", + + "eslint-tanstack-router/create-route-property-order": "warn", + "eslint-tanstack-query/exhaustive-deps": "warn", + "eslint-tanstack-query/stable-query-client": "warn", + "eslint-tanstack-query/no-rest-destructuring": "warn", + "eslint-tanstack-query/no-unstable-deps": "warn", + "eslint-tanstack-query/infinite-query-property-order": "warn", + "eslint-tanstack-query/no-void-query-fn": "warn", + "eslint-tanstack-query/mutation-property-order": "warn" + }, + "ignorePatterns": [ + "dist", + ".wrangler", + ".vercel", + ".netlify", + ".output", + "build/", + "worker-configuration.d.ts", + "scripts/" + ] +} diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 2fa5930..0000000 --- a/.prettierignore +++ /dev/null @@ -1,24 +0,0 @@ -# lockfiles -pnpm-lock.yaml -package-lock.json -yarn.lock -bun.lock - -# misc -pnpm-workspace.yaml -routeTree.gen.ts -.tanstack-start/ -.tanstack/ -drizzle/ -migrations/ -.drizzle/ -.turbo -.cache -worker-configuration.d.ts - -# build outputs -.vercel -.output -.wrangler -.netlify -dist \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 9da68af..0000000 --- a/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "tabWidth": 2, - "semi": true, - "printWidth": 90, - "singleQuote": false, - "endOfLine": "lf", - "trailingComma": "all", - "plugins": ["prettier-plugin-organize-imports", "prettier-plugin-tailwindcss"] -} diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 13d4039..4ea727f 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,7 +1,3 @@ { - "recommendations": [ - "esbenp.prettier-vscode", - "dbaeumer.vscode-eslint", - "bradlc.vscode-tailwindcss" - ] + "recommendations": ["oxc.oxc-vscode", "bradlc.vscode-tailwindcss"] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 24e6700..58a0bdc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -24,8 +24,11 @@ // use LF line endings "files.eol": "\n", - // set prettier as default formatter for json, ts, tsx, js, jsx, html, css + // type-aware linting + "oxc.typeAware": true, + + // set oxfmt as default formatter for json, ts, tsx, js, jsx, html, css "[json][jsonc][typescript][typescriptreact][javascript][javascriptreact][html][css]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "oxc.oxc-vscode" } } diff --git a/README.md b/README.md index 9d2278e..f2f54d8 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,7 @@ A minimal monorepo starter for 🏝️ TanStack Start on Cloudflare, curated fro - [Tailwind CSS](https://tailwindcss.com/) + [shadcn/ui](https://ui.shadcn.com/) + [Base UI](https://base-ui.com/) - [Drizzle ORM v1](https://orm.drizzle.team/) (beta) + Cloudflare D1 - [Better Auth](https://www.better-auth.com/) -- [ESLint](https://eslint.org/) + [Prettier](https://prettier.io/) with [Husky](https://typicode.github.io/husky/) + [lint-staged](https://github.com/lint-staged/lint-staged) - +- [Oxlint](https://oxc.rs/docs/guide/usage/linter.html) + [Oxfmt](https://oxc.rs/docs/guide/usage/formatter.html) with [Husky](https://typicode.github.io/husky/) + [lint-staged](https://github.com/lint-staged/lint-staged) ```sh β”œβ”€β”€ apps @@ -27,7 +26,6 @@ A minimal monorepo starter for 🏝️ TanStack Start on Cloudflare, curated fro β”‚ β”œβ”€β”€ db # Drizzle ORM + Drizzle Kit + Cloudflare D1 β”‚ └── ui # shadcn/ui primitives & utils β”œβ”€β”€ tooling -β”‚ └── eslint-config # Shared ESLint configuration β”‚ └── tsconfig # Shared TypeScript configuration β”œβ”€β”€ turbo.json β”œβ”€β”€ LICENSE @@ -124,8 +122,7 @@ We use **pnpm** by default, but you can modify these scripts in [package.json](. - **`auth:generate`** - Regenerate the [auth db schema](./packages/db/src/schema/auth.schema.ts) if you've made changes to your Better Auth [config](./packages/auth/src/auth.ts). - **`ui`** - The shadcn/ui CLI. (e.g. `pnpm ui add button`) -- **`format`**, **`lint`**, **`check-types`** - Run Prettier, ESLint, and check TypeScript types respectively. - - **`check`** - Run all three above. (e.g. `pnpm check`) +- **`format`**, **`lint`** - Run Oxfmt and Oxlint, or both via `pnpm check`. - **`deps`** - Selectively upgrade dependencies via taze. > [!TIP] diff --git a/apps/web/eslint.config.js b/apps/web/eslint.config.js deleted file mode 100644 index d48e581..0000000 --- a/apps/web/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -import { tanstackConfig } from "@repo/eslint-config/tanstack"; - -export default tanstackConfig; diff --git a/apps/web/package.json b/apps/web/package.json index e9ed3cd..4cad501 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -7,9 +7,6 @@ "build": "vite build", "deploy": "vite build && wrangler deploy", "preview": "vite preview", - "check-types": "tsc --noEmit", - "lint": "eslint .", - "format": "prettier --write .", "ui": "pnpm dlx shadcn@latest", "cf-typegen": "wrangler types", "postinstall": "wrangler types", @@ -36,7 +33,6 @@ }, "devDependencies": { "@cloudflare/vite-plugin": "catalog:", - "@repo/eslint-config": "workspace:*", "@repo/tsconfig": "workspace:*", "@tailwindcss/vite": "catalog:", "@tanstack/devtools-vite": "catalog:", @@ -49,10 +45,6 @@ "@types/react-dom": "catalog:", "@vitejs/plugin-react": "catalog:", "babel-plugin-react-compiler": "catalog:", - "eslint": "catalog:", - "prettier": "catalog:", - "prettier-plugin-organize-imports": "catalog:", - "prettier-plugin-tailwindcss": "catalog:", "tailwindcss": "catalog:", "typescript": "catalog:", "vite": "catalog:", diff --git a/apps/web/src/components/default-catch-boundary.tsx b/apps/web/src/components/default-catch-boundary.tsx index 637f5f1..2b47025 100644 --- a/apps/web/src/components/default-catch-boundary.tsx +++ b/apps/web/src/components/default-catch-boundary.tsx @@ -23,8 +23,8 @@ export function DefaultCatchBoundary({ error }: Readonly) {
-
- - Or - +
+ Or
+
diff --git a/apps/web/src/routes/_guest/signup.tsx b/apps/web/src/routes/_guest/signup.tsx index 0e076c4..d8b87eb 100644 --- a/apps/web/src/routes/_guest/signup.tsx +++ b/apps/web/src/routes/_guest/signup.tsx @@ -7,6 +7,7 @@ import { Label } from "@repo/ui/components/label"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { createFileRoute, Link, useNavigate } from "@tanstack/react-router"; import { toast } from "sonner"; + import { SignInSocialButton } from "~/components/sign-in-social-button"; export const Route = createFileRoute("/_guest/signup")({ @@ -29,9 +30,9 @@ function SignupForm() { onError: ({ error }) => { toast.error(error.message || "An error occurred while signing up."); }, - onSuccess: () => { + onSuccess: async () => { queryClient.removeQueries({ queryKey: authQueryOptions().queryKey }); - navigate({ to: redirectUrl }); + await navigate({ to: redirectUrl }); }, }, ); @@ -63,7 +64,7 @@ function SignupForm() {
-
- - Or - +
+ Or

Mugnavo Stack

-
+
This is an unprotected page: -
-            routes/index.tsx
-          
+
routes/index.tsx
@@ -30,7 +29,7 @@ function HomePage() {

A monorepo template for{" "}

diff --git a/package.json b/package.json index 8a3fa80..7fe6a22 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,11 @@ "dev": "turbo run dev --parallel", "dev:web": "turbo run dev --filter=@repo/web", "deploy:web": "pnpm --filter=@repo/web run deploy", - "lint": "turbo run lint", - "format": "prettier --write .", - "check-types": "turbo run check-types", - "check": "pnpm format && turbo run lint && turbo run check-types", + "lint": "oxlint --type-aware --type-check", + "lint:fix": "oxlint --type-aware --type-check --fix", + "format": "oxfmt", + "format:check": "oxfmt --check", + "check": "turbo run quality", "prepare": "husky", "deps": "pnpm dlx taze@latest -Ilwr", "deps:major": "pnpm dlx taze@latest major -Ilwr", @@ -26,20 +27,23 @@ "auth:generate": "pnpm --filter=@repo/db run auth:generate", "skills": "pnpm dlx skills@latest" }, - "lint-staged": { - "*": "prettier --ignore-unknown --write" - }, "devDependencies": { + "@tanstack/eslint-plugin-query": "catalog:", + "@tanstack/eslint-plugin-router": "catalog:", + "eslint-plugin-turbo": "catalog:", "husky": "catalog:", "lint-staged": "catalog:", - "prettier": "catalog:", - "prettier-plugin-organize-imports": "catalog:", - "prettier-plugin-tailwindcss": "catalog:", + "oxfmt": "catalog:", + "oxlint": "catalog:", + "oxlint-tsgolint": "catalog:", "tsx": "catalog:", "turbo": "catalog:" }, - "packageManager": "pnpm@10.28.2", + "lint-staged": { + "*": "oxfmt --no-error-on-unmatched-pattern" + }, "engines": { "node": ">=24" - } + }, + "packageManager": "pnpm@10.28.2" } diff --git a/packages/auth/eslint.config.js b/packages/auth/eslint.config.js deleted file mode 100644 index e6835a3..0000000 --- a/packages/auth/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -import { config } from "@repo/eslint-config/base"; - -export default config; diff --git a/packages/auth/package.json b/packages/auth/package.json index 073204e..8fbeeb2 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,12 +1,8 @@ { "name": "@repo/auth", "version": "0.0.0", - "type": "module", "private": true, - "scripts": { - "lint": "eslint .", - "check-types": "tsc --noEmit" - }, + "type": "module", "exports": { "./*": "./src/*.ts" }, @@ -15,10 +11,8 @@ "better-auth": "catalog:" }, "devDependencies": { - "@repo/eslint-config": "workspace:*", "@repo/tsconfig": "workspace:*", "@types/node": "catalog:", - "eslint": "catalog:", "typescript": "catalog:" }, "peerDependencies": { diff --git a/packages/auth/src/auth.ts b/packages/auth/src/auth.ts index ac48519..460244f 100644 --- a/packages/auth/src/auth.ts +++ b/packages/auth/src/auth.ts @@ -1,11 +1,10 @@ import { drizzleAdapter } from "@better-auth/drizzle-adapter/relations-v2"; +import { getDb } from "@repo/db"; +import * as schema from "@repo/db/schema"; import { createServerOnlyFn } from "@tanstack/react-start"; import { betterAuth } from "better-auth/minimal"; import { tanstackStartCookies } from "better-auth/tanstack-start"; -import { getDb } from "@repo/db"; -import * as schema from "@repo/db/schema"; - const getAuthConfig = createServerOnlyFn(() => betterAuth({ baseURL: process.env.VITE_BASE_URL, diff --git a/packages/auth/src/tanstack/functions.ts b/packages/auth/src/tanstack/functions.ts index 3e46526..71e7455 100644 --- a/packages/auth/src/tanstack/functions.ts +++ b/packages/auth/src/tanstack/functions.ts @@ -1,5 +1,6 @@ import { createServerFn } from "@tanstack/react-start"; import { getRequest, setResponseHeader } from "@tanstack/react-start/server"; + import { auth } from "../auth"; export const $getUser = createServerFn({ method: "GET" }).handler(async () => { diff --git a/packages/auth/src/tanstack/hooks.ts b/packages/auth/src/tanstack/hooks.ts index 26ab24c..67993c8 100644 --- a/packages/auth/src/tanstack/hooks.ts +++ b/packages/auth/src/tanstack/hooks.ts @@ -1,4 +1,5 @@ import { useQuery, useSuspenseQuery } from "@tanstack/react-query"; + import { authQueryOptions } from "./queries"; export function useAuth() { diff --git a/packages/auth/src/tanstack/middleware.ts b/packages/auth/src/tanstack/middleware.ts index 4cc91e8..df665c2 100644 --- a/packages/auth/src/tanstack/middleware.ts +++ b/packages/auth/src/tanstack/middleware.ts @@ -1,9 +1,6 @@ import { createMiddleware } from "@tanstack/react-start"; -import { - getRequest, - setResponseHeader, - setResponseStatus, -} from "@tanstack/react-start/server"; +import { getRequest, setResponseHeader, setResponseStatus } from "@tanstack/react-start/server"; + import { auth } from "../auth"; /** diff --git a/packages/auth/src/tanstack/queries.ts b/packages/auth/src/tanstack/queries.ts index 1448109..6bf4123 100644 --- a/packages/auth/src/tanstack/queries.ts +++ b/packages/auth/src/tanstack/queries.ts @@ -1,4 +1,5 @@ import { queryOptions } from "@tanstack/react-query"; + import { $getUser } from "./functions"; export const authQueryOptions = () => diff --git a/packages/db/drizzle.config.ts b/packages/db/drizzle.config.ts index cd8d11b..702d9e4 100644 --- a/packages/db/drizzle.config.ts +++ b/packages/db/drizzle.config.ts @@ -1,11 +1,7 @@ import type { Config } from "drizzle-kit"; -const { - SERVER_LOCAL_DB_PATH, - SERVER_CF_DB_ID, - SERVER_CF_D1_TOKEN, - SERVER_CF_ACCOUNT_ID, -} = process.env; +const { SERVER_LOCAL_DB_PATH, SERVER_CF_DB_ID, SERVER_CF_D1_TOKEN, SERVER_CF_ACCOUNT_ID } = + process.env; export default { out: "../../apps/web/migrations", diff --git a/packages/db/eslint.config.js b/packages/db/eslint.config.js deleted file mode 100644 index e6835a3..0000000 --- a/packages/db/eslint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -import { config } from "@repo/eslint-config/base"; - -export default config; diff --git a/packages/db/package.json b/packages/db/package.json index e837902..b7583ca 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -1,28 +1,24 @@ { "name": "@repo/db", "version": "0.0.0", - "type": "module", "private": true, - "scripts": { - "db": "drizzle-kit", - "db:local": "SERVER_LOCAL_DB_PATH=$(find ../../apps/web/.wrangler/state/v3/d1/miniflare-D1DatabaseObject -type f -name '*.sqlite' -print -quit) drizzle-kit", - "auth:generate": "pnpm dlx https://pkg.pr.new/better-auth/better-auth/@better-auth/cli@6913 generate --config ../auth/src/auth.ts --y --output ./src/schema/auth.schema.ts", - "lint": "eslint .", - "check-types": "tsc --noEmit" - }, + "type": "module", "exports": { ".": "./src/index.ts", "./schema": "./src/schema/index.ts" }, + "scripts": { + "db": "drizzle-kit", + "db:local": "SERVER_LOCAL_DB_PATH=$(find ../../apps/web/.wrangler/state/v3/d1/miniflare-D1DatabaseObject -type f -name '*.sqlite' -print -quit) drizzle-kit", + "auth:generate": "pnpm dlx https://pkg.pr.new/better-auth/better-auth/@better-auth/cli@6913 generate --config ../auth/src/auth.ts --y --output ./src/schema/auth.schema.ts" + }, "dependencies": { "drizzle-orm": "catalog:" }, "devDependencies": { - "@repo/eslint-config": "workspace:*", "@repo/tsconfig": "workspace:*", "@types/node": "catalog:", "drizzle-kit": "catalog:", - "eslint": "catalog:", "typescript": "catalog:" } } diff --git a/packages/db/src/index.ts b/packages/db/src/index.ts index ac758cb..b349b76 100644 --- a/packages/db/src/index.ts +++ b/packages/db/src/index.ts @@ -1,5 +1,6 @@ import { env } from "cloudflare:workers"; import { drizzle } from "drizzle-orm/d1"; + import * as schemas from "./schema"; import { relations } from "./schema/relations"; diff --git a/packages/db/src/schema/auth.schema.ts b/packages/db/src/schema/auth.schema.ts index 28c5660..25d3bb2 100644 --- a/packages/db/src/schema/auth.schema.ts +++ b/packages/db/src/schema/auth.schema.ts @@ -85,30 +85,27 @@ export const verification = sqliteTable( (table) => [index("verification_identifier_idx").on(table.identifier)], ); -export const relations = defineRelations( - { user, session, account, verification }, - (r) => ({ - user: { - sessions: r.many.session({ - from: r.user.id, - to: r.session.userId, - }), - accounts: r.many.account({ - from: r.user.id, - to: r.account.userId, - }), - }, - session: { - user: r.one.user({ - from: r.session.userId, - to: r.user.id, - }), - }, - account: { - user: r.one.user({ - from: r.account.userId, - to: r.user.id, - }), - }, - }), -); +export const relations = defineRelations({ user, session, account, verification }, (r) => ({ + user: { + sessions: r.many.session({ + from: r.user.id, + to: r.session.userId, + }), + accounts: r.many.account({ + from: r.user.id, + to: r.account.userId, + }), + }, + session: { + user: r.one.user({ + from: r.session.userId, + to: r.user.id, + }), + }, + account: { + user: r.one.user({ + from: r.account.userId, + to: r.user.id, + }), + }, +})); diff --git a/packages/db/src/schema/relations.ts b/packages/db/src/schema/relations.ts index bcdb97c..5367130 100644 --- a/packages/db/src/schema/relations.ts +++ b/packages/db/src/schema/relations.ts @@ -1,4 +1,5 @@ import { defineRelationsPart } from "drizzle-orm"; + import * as schema from "./"; export const relations = defineRelationsPart(schema, (r) => ({ diff --git a/packages/ui/components/button.tsx b/packages/ui/components/button.tsx index eec573c..587054d 100644 --- a/packages/ui/components/button.tsx +++ b/packages/ui/components/button.tsx @@ -1,10 +1,9 @@ import { Button as ButtonPrimitive } from "@base-ui/react/button"; -import { cva, type VariantProps } from "class-variance-authority"; - import { cn } from "@repo/ui/lib/utils"; +import { cva, type VariantProps } from "class-variance-authority"; const buttonVariants = cva( - "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-4xl border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none", + "group/button inline-flex shrink-0 items-center justify-center rounded-4xl border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", { variants: { variant: { @@ -14,9 +13,9 @@ const buttonVariants = cva( secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground", ghost: - "hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground", + "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50", destructive: - "bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30", + "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40", link: "text-primary underline-offset-4 hover:underline", }, size: { diff --git a/packages/ui/components/dropdown-menu.tsx b/packages/ui/components/dropdown-menu.tsx index cc6aad7..5c0883e 100644 --- a/packages/ui/components/dropdown-menu.tsx +++ b/packages/ui/components/dropdown-menu.tsx @@ -1,10 +1,9 @@ "use client"; import { Menu as MenuPrimitive } from "@base-ui/react/menu"; -import * as React from "react"; - import { RiArrowRightSLine, RiCheckLine } from "@remixicon/react"; import { cn } from "@repo/ui/lib/utils"; +import * as React from "react"; function DropdownMenu({ ...props }: MenuPrimitive.Root.Props) { return ; @@ -39,7 +38,7 @@ function DropdownMenuContent({ ); @@ -88,7 +84,7 @@ function DropdownMenuItem({ data-inset={inset} data-variant={variant} className={cn( - "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground group/dropdown-menu-item relative flex cursor-default items-center gap-2.5 rounded-xl px-3 py-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + "group/dropdown-menu-item relative flex cursor-default items-center gap-2.5 rounded-xl px-3 py-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive", className, )} {...props} @@ -113,7 +109,7 @@ function DropdownMenuSubTrigger({ data-slot="dropdown-menu-sub-trigger" data-inset={inset} className={cn( - "focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-popup-open:bg-accent data-popup-open:text-accent-foreground flex cursor-default items-center gap-2 rounded-xl px-3 py-2 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + "flex cursor-default items-center gap-2 rounded-xl px-3 py-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-popup-open:bg-accent data-popup-open:text-accent-foreground data-[inset]:pl-8 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className, )} {...props} @@ -136,7 +132,7 @@ function DropdownMenuSubContent({ ; } -function DropdownMenuRadioItem({ - className, - children, - ...props -}: MenuPrimitive.RadioItem.Props) { +function DropdownMenuRadioItem({ className, children, ...props }: MenuPrimitive.RadioItem.Props) { return ( ); @@ -223,7 +215,7 @@ function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<"spa ) { return ( @@ -9,7 +8,7 @@ function Input({ className, type, ...props }: React.ComponentProps<"input">) { type={type} data-slot="input" className={cn( - "bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 file:text-foreground placeholder:text-muted-foreground h-9 w-full min-w-0 rounded-4xl border px-3 py-1 text-base transition-colors outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-[3px] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-[3px] md:text-sm", + "h-9 w-full min-w-0 rounded-4xl border border-input bg-input/30 px-3 py-1 text-base transition-colors outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className, )} {...props} diff --git a/packages/ui/components/label.tsx b/packages/ui/components/label.tsx index ccff2c5..c3018f5 100644 --- a/packages/ui/components/label.tsx +++ b/packages/ui/components/label.tsx @@ -1,9 +1,9 @@ -import * as React from "react"; - import { cn } from "@repo/ui/lib/utils"; +import * as React from "react"; function Label({ className, ...props }: React.ComponentProps<"label">) { return ( + // oxlint-disable-next-line jsx_a11y/label-has-associated-control
diff --git a/packages/auth/src/tanstack/hooks.ts b/packages/auth/src/tanstack/hooks.ts index 8b236c5..0d6933e 100644 --- a/packages/auth/src/tanstack/hooks.ts +++ b/packages/auth/src/tanstack/hooks.ts @@ -2,6 +2,10 @@ import { useQuery, useSuspenseQuery } from "@tanstack/react-query"; import { authQueryOptions } from "./queries"; +// These hooks can be used in route components or any components. +// They share the same deduped query as beforeLoad/loaders in __root and the _auth layout, +// so these will not result in unnecessary duplicate calls. + export function useAuth() { const { data: user, isPending } = useQuery(authQueryOptions()); return { user, isPending }; From a6c3a4b64a9a13965a9ffd3c5f107c335532979a Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Sun, 8 Feb 2026 23:24:14 +0800 Subject: [PATCH 17/40] add nanoid dependency --- apps/web/package.json | 1 + packages/db/package.json | 3 ++- pnpm-workspace.yaml | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index 4cad501..514d7cc 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -26,6 +26,7 @@ "date-fns": "catalog:", "drizzle-orm": "catalog:", "motion": "catalog:", + "nanoid": "catalog:", "react": "catalog:", "react-dom": "catalog:", "sonner": "catalog:", diff --git a/packages/db/package.json b/packages/db/package.json index b7583ca..6080494 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -13,7 +13,8 @@ "auth:generate": "pnpm dlx https://pkg.pr.new/better-auth/better-auth/@better-auth/cli@6913 generate --config ../auth/src/auth.ts --y --output ./src/schema/auth.schema.ts" }, "dependencies": { - "drizzle-orm": "catalog:" + "drizzle-orm": "catalog:", + "nanoid": "catalog:" }, "devDependencies": { "@repo/tsconfig": "workspace:*", diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ac56921..ff94cbf 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -21,7 +21,7 @@ catalog: '@tanstack/react-router': ^1.158.4 '@tanstack/react-router-devtools': ^1.158.4 '@tanstack/react-router-ssr-query': ^1.158.4 - '@tanstack/react-start': ^1.159.0 + '@tanstack/react-start': ^1.159.2 '@types/node': ^24.10.12 '@types/react': ^19.2.13 '@types/react-dom': ^19.2.3 @@ -38,6 +38,7 @@ catalog: husky: ^9.1.7 lint-staged: ^16.2.7 motion: ^12.33.0 + nanoid: ^5.1.6 oxfmt: ^0.28.0 oxlint: ^1.43.0 oxlint-tsgolint: ^0.11.5 From 3ae5e9d9bfb66f40ecb031c3840d120777975714 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Mon, 9 Feb 2026 00:03:15 +0800 Subject: [PATCH 18/40] cleanup --- apps/web/src/routes/index.tsx | 2 +- packages/ui/index.js | 1 - packages/ui/package.json | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 packages/ui/index.js diff --git a/apps/web/src/routes/index.tsx b/apps/web/src/routes/index.tsx index 161eb2a..2dad05d 100644 --- a/apps/web/src/routes/index.tsx +++ b/apps/web/src/routes/index.tsx @@ -36,7 +36,7 @@ function HomePage() { > 🏝️ TanStack Start {" "} - on Cloudflare + on Cloudflare.

Date: Mon, 9 Feb 2026 09:17:45 +0800 Subject: [PATCH 19/40] update schema & components --- packages/db/src/schema/auth.schema.ts | 4 +-- packages/ui/components/dropdown-menu.tsx | 38 +++++++++++++++--------- pnpm-workspace.yaml | 8 ++--- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/packages/db/src/schema/auth.schema.ts b/packages/db/src/schema/auth.schema.ts index 25d3bb2..4b52f1e 100644 --- a/packages/db/src/schema/auth.schema.ts +++ b/packages/db/src/schema/auth.schema.ts @@ -1,11 +1,11 @@ import { defineRelations, sql } from "drizzle-orm"; -import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; +import { sqliteTable, text, integer, index } from "drizzle-orm/sqlite-core"; export const user = sqliteTable("user", { id: text("id").primaryKey(), + name: text("name").notNull(), email: text("email").notNull().unique(), emailVerified: integer("email_verified", { mode: "boolean" }).default(false).notNull(), - name: text("name"), image: text("image"), createdAt: integer("created_at", { mode: "timestamp_ms" }) .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) diff --git a/packages/ui/components/dropdown-menu.tsx b/packages/ui/components/dropdown-menu.tsx index 5c0883e..774669e 100644 --- a/packages/ui/components/dropdown-menu.tsx +++ b/packages/ui/components/dropdown-menu.tsx @@ -1,5 +1,3 @@ -"use client"; - import { Menu as MenuPrimitive } from "@base-ui/react/menu"; import { RiArrowRightSLine, RiCheckLine } from "@remixicon/react"; import { cn } from "@repo/ui/lib/utils"; @@ -63,7 +61,7 @@ function DropdownMenuLabel({ ); @@ -84,7 +82,7 @@ function DropdownMenuItem({ data-inset={inset} data-variant={variant} className={cn( - "group/dropdown-menu-item relative flex cursor-default items-center gap-2.5 rounded-xl px-3 py-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive", + "group/dropdown-menu-item relative flex cursor-default items-center gap-2.5 rounded-xl px-3 py-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-9.5 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive", className, )} {...props} @@ -109,7 +107,7 @@ function DropdownMenuSubTrigger({ data-slot="dropdown-menu-sub-trigger" data-inset={inset} className={cn( - "flex cursor-default items-center gap-2 rounded-xl px-3 py-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-popup-open:bg-accent data-popup-open:text-accent-foreground data-[inset]:pl-8 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + "flex cursor-default items-center gap-2 rounded-xl px-3 py-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-9.5 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className, )} {...props} @@ -148,13 +146,17 @@ function DropdownMenuCheckboxItem({ className, children, checked, + inset, ...props -}: MenuPrimitive.CheckboxItem.Props) { +}: MenuPrimitive.CheckboxItem.Props & { + inset?: boolean; +}) { return ( ; } -function DropdownMenuRadioItem({ className, children, ...props }: MenuPrimitive.RadioItem.Props) { +function DropdownMenuRadioItem({ + className, + children, + inset, + ...props +}: MenuPrimitive.RadioItem.Props & { + inset?: boolean; +}) { return ( Date: Mon, 9 Feb 2026 09:39:17 +0800 Subject: [PATCH 20/40] add github to default social providers --- packages/auth/src/auth.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/auth/src/auth.ts b/packages/auth/src/auth.ts index 460244f..5a662d6 100644 --- a/packages/auth/src/auth.ts +++ b/packages/auth/src/auth.ts @@ -30,6 +30,10 @@ const getAuthConfig = createServerOnlyFn(() => // https://www.better-auth.com/docs/concepts/oauth socialProviders: { + github: { + clientId: process.env.SERVER_GITHUB_CLIENT_ID!, + clientSecret: process.env.SERVER_GITHUB_CLIENT_SECRET!, + }, google: { clientId: process.env.SERVER_GOOGLE_CLIENT_ID!, clientSecret: process.env.SERVER_GOOGLE_CLIENT_SECRET!, From a6f7ccbb85d7ef9e1463778553889e88c78e5b9a Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Wed, 11 Feb 2026 09:38:39 +0800 Subject: [PATCH 21/40] chore: upgrade dependencies --- package.json | 2 +- pnpm-workspace.yaml | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index d3723d0..e26e965 100644 --- a/package.json +++ b/package.json @@ -45,5 +45,5 @@ "engines": { "node": ">=24" }, - "packageManager": "pnpm@10.29.1" + "packageManager": "pnpm@10.29.2" } diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 40edc1b..83f2e28 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,7 +6,7 @@ packages: catalog: '@base-ui/react': ^1.1.0 '@better-auth/drizzle-adapter': https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913 - '@cloudflare/vite-plugin': ^1.23.1 + '@cloudflare/vite-plugin': ^1.24.0 '@fontsource-variable/inter': ^5.2.8 '@remixicon/react': ^4.9.0 '@tailwindcss/vite': ^4.1.18 @@ -18,14 +18,14 @@ catalog: '@tanstack/react-form-start': ^1.28.0 '@tanstack/react-query': ^5.90.20 '@tanstack/react-query-devtools': ^5.91.3 - '@tanstack/react-router': ^1.159.4 - '@tanstack/react-router-devtools': ^1.159.4 - '@tanstack/react-router-ssr-query': ^1.159.4 - '@tanstack/react-start': ^1.159.4 - '@types/node': ^24.10.12 + '@tanstack/react-router': ^1.159.5 + '@tanstack/react-router-devtools': ^1.159.5 + '@tanstack/react-router-ssr-query': ^1.159.5 + '@tanstack/react-start': ^1.159.5 + '@types/node': ^24.10.13 '@types/react': ^19.2.13 '@types/react-dom': ^19.2.3 - '@vitejs/plugin-react': ^5.1.3 + '@vitejs/plugin-react': ^5.1.4 babel-plugin-react-compiler: ^1.0.0 better-auth: beta class-variance-authority: ^0.7.1 @@ -34,13 +34,13 @@ catalog: drizzle-kit: beta drizzle-orm: beta eslint-plugin-react-hooks: ^7.0.1 - eslint-plugin-turbo: ^2.8.3 + eslint-plugin-turbo: ^2.8.5 husky: ^9.1.7 lint-staged: ^16.2.7 - motion: ^12.33.0 + motion: ^12.34.0 nanoid: ^5.1.6 - oxfmt: ^0.28.0 - oxlint: ^1.43.0 + oxfmt: ^0.31.0 + oxlint: ^1.46.0 oxlint-tsgolint: ^0.11.5 react: ^19.2.4 react-dom: ^19.2.4 @@ -49,11 +49,11 @@ catalog: tailwind-merge: ^3.4.0 tailwindcss: ^4.1.18 tsx: ^4.21.0 - turbo: ^2.8.3 + turbo: ^2.8.5 tw-animate-css: ^1.4.0 typescript: ^5.9.3 vite: ^8.0.0-beta.13 - wrangler: ^4.63.0 + wrangler: ^4.64.0 zod: ^4.3.6 catalogMode: prefer From d0e0c062e41b148904e8a4aa98c313e5b14f81f0 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Fri, 13 Feb 2026 16:44:21 +0800 Subject: [PATCH 22/40] bump dependencies --- package.json | 2 +- pnpm-workspace.yaml | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index e26e965..3cb1f57 100644 --- a/package.json +++ b/package.json @@ -45,5 +45,5 @@ "engines": { "node": ">=24" }, - "packageManager": "pnpm@10.29.2" + "packageManager": "pnpm@10.29.3" } diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 83f2e28..94479b4 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -4,9 +4,9 @@ packages: - tooling/* catalog: - '@base-ui/react': ^1.1.0 + '@base-ui/react': ^1.2.0 '@better-auth/drizzle-adapter': https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913 - '@cloudflare/vite-plugin': ^1.24.0 + '@cloudflare/vite-plugin': ^1.25.0 '@fontsource-variable/inter': ^5.2.8 '@remixicon/react': ^4.9.0 '@tailwindcss/vite': ^4.1.18 @@ -14,16 +14,16 @@ catalog: '@tanstack/eslint-plugin-query': ^5.91.4 '@tanstack/eslint-plugin-router': ^1.155.0 '@tanstack/react-devtools': ^0.9.5 - '@tanstack/react-form-devtools': ^0.2.13 - '@tanstack/react-form-start': ^1.28.0 - '@tanstack/react-query': ^5.90.20 + '@tanstack/react-form-devtools': ^0.2.14 + '@tanstack/react-form-start': ^1.28.1 + '@tanstack/react-query': ^5.90.21 '@tanstack/react-query-devtools': ^5.91.3 '@tanstack/react-router': ^1.159.5 '@tanstack/react-router-devtools': ^1.159.5 '@tanstack/react-router-ssr-query': ^1.159.5 '@tanstack/react-start': ^1.159.5 '@types/node': ^24.10.13 - '@types/react': ^19.2.13 + '@types/react': ^19.2.14 '@types/react-dom': ^19.2.3 '@vitejs/plugin-react': ^5.1.4 babel-plugin-react-compiler: ^1.0.0 @@ -34,14 +34,14 @@ catalog: drizzle-kit: beta drizzle-orm: beta eslint-plugin-react-hooks: ^7.0.1 - eslint-plugin-turbo: ^2.8.5 + eslint-plugin-turbo: ^2.8.7 husky: ^9.1.7 lint-staged: ^16.2.7 motion: ^12.34.0 nanoid: ^5.1.6 - oxfmt: ^0.31.0 - oxlint: ^1.46.0 - oxlint-tsgolint: ^0.11.5 + oxfmt: ^0.32.0 + oxlint: ^1.47.0 + oxlint-tsgolint: ^0.12.1 react: ^19.2.4 react-dom: ^19.2.4 shadcn: ^3.8.4 @@ -49,15 +49,15 @@ catalog: tailwind-merge: ^3.4.0 tailwindcss: ^4.1.18 tsx: ^4.21.0 - turbo: ^2.8.5 + turbo: ^2.8.7 tw-animate-css: ^1.4.0 typescript: ^5.9.3 - vite: ^8.0.0-beta.13 - wrangler: ^4.64.0 + vite: ^8.0.0-beta.14 + wrangler: ^4.65.0 zod: ^4.3.6 catalogMode: prefer overrides: '@better-auth/drizzle-adapter': https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913 - vite: ^8.0.0-beta.13 + vite: ^8.0.0-beta.14 From da2cf703a32a66b5c45bc115396b91ba08033e07 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Fri, 13 Feb 2026 17:46:56 +0800 Subject: [PATCH 23/40] remove cloudflare & switch back to nitro v3 --- README.md | 67 +++++++++------------------ apps/web/.env.example | 12 ++++- apps/web/package.json | 12 ++--- apps/web/src/routes/__root.tsx | 5 +- apps/web/src/routes/index.tsx | 8 ++-- apps/web/tsconfig.json | 1 - apps/web/vite.config.ts | 6 +-- apps/web/wrangler.jsonc | 10 ---- dev.sh | 41 ++++++++++++++++ docker-compose.yml | 14 ++++++ package.json | 9 +--- packages/auth/src/auth.ts | 6 +-- packages/auth/tsconfig.json | 2 +- packages/db/.env.example | 7 +-- packages/db/drizzle.config.ts | 20 ++------ packages/db/package.json | 4 +- packages/db/src/index.ts | 23 ++++----- packages/db/src/schema/auth.schema.ts | 54 +++++++++------------ packages/db/tsconfig.json | 2 +- pnpm-workspace.yaml | 4 +- scripts/migrations-flatten.ts | 50 -------------------- 21 files changed, 152 insertions(+), 205 deletions(-) delete mode 100644 apps/web/wrangler.jsonc create mode 100755 dev.sh create mode 100644 docker-compose.yml delete mode 100644 scripts/migrations-flatten.ts diff --git a/README.md b/README.md index b194a5a..0506234 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Mugnavo Stack +# TanStarter > [!WARNING] > This is still a work in progress. Currently blocked by: @@ -7,14 +7,14 @@ > > Also see the [issue watchlist](#issue-watchlist) below and open issues with the [`branch:next`](https://github.com/dotnize/react-tanstarter/issues?q=is%3Aissue%20state%3Aopen%20label%3Abranch%3Anext) label. -A minimal monorepo starter for 🏝️ TanStack Start on Cloudflare, curated from the best of the TypeScript ecosystem. +A minimal monorepo starter for 🏝️ TanStack Start, curated from the best of the TypeScript ecosystem. - [Turborepo](https://turborepo.com/) + [pnpm](https://pnpm.io/) - [React 19](https://react.dev) + [React Compiler](https://react.dev/learn/react-compiler) - TanStack [Start](https://tanstack.com/start/latest) + [Router](https://tanstack.com/router/latest) + [Query](https://tanstack.com/query/latest) + [Form](https://tanstack.com/form/latest) -- [Vite 8](https://vite.dev/blog/announcing-vite8-beta) (beta) + [Cloudflare](https://developers.cloudflare.com/workers/framework-guides/web-apps/tanstack-start/) +- [Vite 8](https://vite.dev/blog/announcing-vite8-beta) (beta) + [Nitro v3](https://v3.nitro.build/) - [Tailwind CSS](https://tailwindcss.com/) + [shadcn/ui](https://ui.shadcn.com/) + [Base UI](https://base-ui.com/) -- [Drizzle ORM v1](https://orm.drizzle.team/) (beta) + Cloudflare D1 +- [Drizzle ORM v1](https://orm.drizzle.team/) (beta) + Postgres - [Better Auth](https://www.better-auth.com/) - [Oxlint](https://oxc.rs/docs/guide/usage/linter.html) + [Oxfmt](https://oxc.rs/docs/guide/usage/formatter.html) with [Husky](https://typicode.github.io/husky/) + [lint-staged](https://github.com/lint-staged/lint-staged) @@ -23,7 +23,7 @@ A minimal monorepo starter for 🏝️ TanStack Start on Cloudflare, curated fro β”‚ β”œβ”€β”€ web # TanStack Start web app β”œβ”€β”€ packages β”‚ β”œβ”€β”€ auth # Better Auth -β”‚ β”œβ”€β”€ db # Drizzle ORM + Drizzle Kit + Cloudflare D1 +β”‚ β”œβ”€β”€ db # Drizzle ORM + Drizzle Kit + PostgreSQL β”‚ └── ui # shadcn/ui primitives & utils β”œβ”€β”€ tooling β”‚ └── tsconfig # Shared TypeScript configuration @@ -45,15 +45,6 @@ A minimal monorepo starter for 🏝️ TanStack Start on Cloudflare, curated fro ## Getting Started - - 1. Clone this repository with gitpick, then install dependencies: ```sh @@ -63,26 +54,16 @@ A minimal monorepo starter for 🏝️ TanStack Start on Cloudflare, curated fro pnpm install ``` -2. Create a `.env` file in `/apps/web` based on the [`.env.example`](./apps/web/.env.example). +2. Create `.env` files in [`/apps/web`](./apps/web/.env.example) and [`/packages/db`](./packages/db/.env.example) based on their respective `.env.example` files. - ```sh - cp ./apps/web/.env.example ./apps/web/.env - ``` - -3. Create a D1 database using Wrangler, with `db` as the binding name: +3. Generate the initial migration with drizzle-kit, then apply to your database: ```sh - pnpm wrangler d1 create + pnpm db generate + pnpm db migrate ``` -4. Generate the initial migration with drizzle-kit, then apply it locally: - - ```sh - pnpm db:generate - pnpm db:migrate:local - ``` - -5. Run the development server: +4. Run the development server: ```sh pnpm dev @@ -90,27 +71,27 @@ A minimal monorepo starter for 🏝️ TanStack Start on Cloudflare, curated fro The development server should now be running at [http://localhost:5173](http://localhost:5173). -## Deploying to production - -The [vite config](./apps/web/vite.config.ts#L14-L15) is configured for [Cloudflare](https://developers.cloudflare.com/workers/framework-guides/web-apps/tanstack-start/) via the [Vite plugin](https://developers.cloudflare.com/workers/vite-plugin/). - -To deploy, simply run the `deploy:web` script. You can also use this as the Deploy command in the Cloudflare dashboard: +> [!TIP] +> If you want to run a local Postgres instance via Docker Compose with the dev server, you can use the [dev.sh](./dev.sh) script: +> +> ```sh +> ./dev.sh # runs "pnpm dev" +> # or +> ./dev.sh web # runs pnpm dev:web +> ``` -```sh -pnpm deploy:web -``` +## Deploying to production -To apply migrations to your remote D1 database, run: +The [vite config](./apps/web/vite.config.ts#L15-L16) is currently configured to use [Nitro v3](https://v3.nitro.build) to deploy on Vercel, but can be easily switched to other providers. -```sh -pnpm db:migrate:prod -``` +Refer to the [TanStack Start hosting docs](https://tanstack.com/start/latest/docs/framework/react/guide/hosting) for deploying to other platforms. ## Issue watchlist - [Router/Start issues](https://github.com/TanStack/router/issues) - TanStack Start is in RC. - [Devtools releases](https://github.com/TanStack/devtools/releases) - TanStack Devtools is in alpha and may still have breaking changes. - [Vite 8 beta](https://vite.dev/blog/announcing-vite8-beta) - We're using Vite 8 beta which is powered by Rolldown. +- [Nitro v3 nightly](https://v3.nitro.build/docs/nightly) - This template is configured with Nitro v3 nightly by default. - [Drizzle ORM v1 Beta](https://orm.drizzle.team/docs/relations-v1-v2) - Drizzle ORM v1 is in beta with relations v2. - [Better Auth beta](https://github.com/better-auth/better-auth/pull/6913) - We're using a separate branch of Better Auth that supports Drizzle relations v2. @@ -137,7 +118,6 @@ We use **pnpm** by default, but you can modify these scripts in [package.json](. The template is kept minimal by default, but is compatible with many third‑party integrations. Here are a few we use in our projects: -- [Cloudflare R2](https://developers.cloudflare.com/r2/) - file storage - [PostHog](https://posthog.com/) - analytics & observability - [Resend](https://resend.com/) - email - [Polar](https://polar.sh/) - billing @@ -149,7 +129,6 @@ The template is kept minimal by default, but is compatible with many third‑par ## Ecosystem -- [Cloudflare MCP](https://developers.cloudflare.com/agents/model-context-protocol/mcp-servers-for-cloudflare/) - Cloudflare's official MCP servers, including one for their docs. - [TanStack MCP](https://tanstack.com/cli/latest/docs/mcp/connecting) - The official MCP server for searching the latest docs for TanStack libraries. - [awesome-tanstack-start](https://github.com/Balastrong/awesome-tanstack-start) - A curated list of awesome resources for TanStack Start. -- [shadcn/ui Directory](https://ui.shadcn.com/docs/directory), [shoogle.dev](https://shoogle.dev/) - Component directories & registries for shadcn/ui. +- [shadcn/ui Directory](https://ui.shadcn.com/docs/directory), [MCP](https://ui.shadcn.com/docs/mcp), [shoogle.dev](https://shoogle.dev/) - Component directories & registries for shadcn/ui. diff --git a/apps/web/.env.example b/apps/web/.env.example index 3a55957..0d4ceac 100644 --- a/apps/web/.env.example +++ b/apps/web/.env.example @@ -1,10 +1,18 @@ VITE_BASE_URL=http://localhost:5173 +SERVER_DATABASE_URL="postgresql://postgres:password@localhost:5432/tanstarter" +# You can also use Docker Compose to set up a local PostgreSQL database: +# docker-compose up -d + # pnpm auth:secret SERVER_AUTH_SECRET= -# OAuth2 Providers +# OAuth2 providers, optional, update as needed SERVER_GITHUB_CLIENT_ID= SERVER_GITHUB_CLIENT_SECRET= SERVER_GOOGLE_CLIENT_ID= -SERVER_GOOGLE_CLIENT_SECRET= \ No newline at end of file +SERVER_GOOGLE_CLIENT_SECRET= + +# NOTE: +# In your OAuth2 apps, set callback/redirect URIs to`http://localhost:3000/api/auth/callback/` +# e.g. http://localhost:3000/api/auth/callback/github \ No newline at end of file diff --git a/apps/web/package.json b/apps/web/package.json index 514d7cc..e55ad7e 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -5,12 +5,9 @@ "scripts": { "dev": "vite dev", "build": "vite build", - "deploy": "vite build && wrangler deploy", "preview": "vite preview", - "ui": "pnpm dlx shadcn@latest", - "cf-typegen": "wrangler types", - "postinstall": "wrangler types", - "wrangler": "wrangler" + "start": "node .output/server/index.mjs", + "ui": "pnpm dlx shadcn@latest" }, "dependencies": { "@fontsource-variable/inter": "catalog:", @@ -27,13 +24,13 @@ "drizzle-orm": "catalog:", "motion": "catalog:", "nanoid": "catalog:", + "nitro": "catalog:", "react": "catalog:", "react-dom": "catalog:", "sonner": "catalog:", "zod": "catalog:" }, "devDependencies": { - "@cloudflare/vite-plugin": "catalog:", "@repo/tsconfig": "workspace:*", "@tailwindcss/vite": "catalog:", "@tanstack/devtools-vite": "catalog:", @@ -48,7 +45,6 @@ "babel-plugin-react-compiler": "catalog:", "tailwindcss": "catalog:", "typescript": "catalog:", - "vite": "catalog:", - "wrangler": "catalog:" + "vite": "catalog:" } } diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx index 4daa79b..3e85b58 100644 --- a/apps/web/src/routes/__root.tsx +++ b/apps/web/src/routes/__root.tsx @@ -1,3 +1,4 @@ +/// import type { AuthQueryResult } from "@repo/auth/tanstack/queries"; import type { QueryClient } from "@tanstack/react-query"; @@ -37,12 +38,12 @@ export const Route = createRootRouteWithContext<{ content: "width=device-width, initial-scale=1", }, { - title: "Mugnavo Stack", + title: "TanStarter", }, { name: "description", content: - "A minimal monorepo starter for 🏝️ TanStack Start on Cloudflare, curated from the best of the TypeScript ecosystem.", + "A minimal monorepo starter for 🏝️ TanStack Start, curated from the best of the TypeScript ecosystem.", }, ], links: [{ rel: "stylesheet", href: appCss }], diff --git a/apps/web/src/routes/index.tsx b/apps/web/src/routes/index.tsx index 2dad05d..0d428d5 100644 --- a/apps/web/src/routes/index.tsx +++ b/apps/web/src/routes/index.tsx @@ -14,7 +14,7 @@ function HomePage() { return (
-

Mugnavo Stack

+

TanStarter

This is an unprotected page:
routes/index.tsx
@@ -36,17 +36,17 @@ function HomePage() { > 🏝️ TanStack Start
{" "} - on Cloudflare. + with Turborepo.

- mugnavo/stack + dotnize/react-tanstarter diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index 9198c0e..a2398ff 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "@repo/tsconfig/base.json", "compilerOptions": { - "types": ["./worker-configuration.d.ts", "node", "vite/client"], "paths": { "~/*": ["./src/*"], diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index 307af3d..782c5c2 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -1,8 +1,8 @@ -import { cloudflare } from "@cloudflare/vite-plugin"; import tailwindcss from "@tailwindcss/vite"; import { devtools } from "@tanstack/devtools-vite"; import { tanstackStart } from "@tanstack/react-start/plugin/vite"; import viteReact from "@vitejs/plugin-react"; +import { nitro } from "nitro/vite"; import { defineConfig } from "vite"; export default defineConfig({ @@ -11,9 +11,9 @@ export default defineConfig({ }, plugins: [ devtools(), - // https://tanstack.com/start/latest/docs/framework/react/guide/hosting - cloudflare({ viteEnvironment: { name: "ssr" } }), tanstackStart(), + // https://tanstack.com/start/latest/docs/framework/react/guide/hosting + nitro(), viteReact({ // https://react.dev/learn/react-compiler babel: { diff --git a/apps/web/wrangler.jsonc b/apps/web/wrangler.jsonc deleted file mode 100644 index 52e10a1..0000000 --- a/apps/web/wrangler.jsonc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "node_modules/wrangler/config-schema.json", - "name": "mugnavo-app", - "compatibility_date": "2026-01-20", - "compatibility_flags": ["nodejs_compat"], - "main": "@tanstack/react-start/server-entry", - "observability": { - "enabled": true, - }, -} diff --git a/dev.sh b/dev.sh new file mode 100755 index 0000000..97f3a2f --- /dev/null +++ b/dev.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +echo "Initiating dev setup with local PostgreSQL instance..." + +# Auto-detect compose command +if command -v podman-compose &> /dev/null; then + COMPOSE_CMD="podman-compose" +elif command -v docker-compose &> /dev/null; then + COMPOSE_CMD="docker-compose" +else + echo "Error: Neither podman-compose nor docker-compose found!" + exit 1 +fi + +echo "Using: $COMPOSE_CMD" + +# Start PostgreSQL +echo "Starting PostgreSQL..." +$COMPOSE_CMD up -d + +# Determine which dev command to run based on parameters +if [ -n "$1" ]; then + DEV_CMD="dev:$1" + echo "Starting $1 development server..." +else + DEV_CMD="dev" + echo "Starting all development servers..." +fi + +# Start the development server +pnpm $DEV_CMD + +# Cleanup function +cleanup() { + echo "Shutting down..." + $COMPOSE_CMD down + exit 0 +} + +# Trap cleanup function on script exit +trap cleanup SIGINT SIGTERM EXIT \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..9b7fd38 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,14 @@ +services: + db: + image: postgres:alpine + ports: + - 5432:5432 + volumes: + - postgres_data_tanstarter:/var/lib/postgresql/data + environment: + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=password + - POSTGRES_DB=tanstarter + +volumes: + postgres_data_tanstarter: diff --git a/package.json b/package.json index 3cb1f57..29de47d 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,10 @@ { - "name": "mugnavo-app", + "name": "tanstarter", "private": true, "scripts": { "build": "turbo run build", "dev": "turbo run dev --parallel", "dev:web": "turbo run dev --filter=@repo/web", - "deploy:web": "pnpm --filter=@repo/web run deploy", "lint": "oxlint --type-aware --type-check", "lint:fix": "oxlint --type-aware --type-check --fix", "format": "oxfmt", @@ -14,13 +13,7 @@ "prepare": "husky", "deps": "pnpm dlx taze@latest -Ilwr", "deps:major": "pnpm dlx taze@latest major -Ilwr", - "wrangler": "pnpm --filter=@repo/web wrangler", - "db:generate": "pnpm --filter=@repo/db db generate && tsx scripts/migrations-flatten.ts", - "db:push": "pnpm --filter=@repo/db run db:local push", - "db:migrate:local": "pnpm --filter=@repo/web wrangler d1 migrations apply --local", - "db:migrate:prod": "pnpm --filter=@repo/web wrangler d1 migrations apply --remote", "db": "pnpm --filter=@repo/db run db", - "db:local": "pnpm --filter=@repo/db run db:local", "ui": "pnpm --filter=@repo/ui run ui", "ui:web": "pnpm --filter=@repo/web run ui", "auth:secret": "pnpm dlx @better-auth/cli@latest secret", diff --git a/packages/auth/src/auth.ts b/packages/auth/src/auth.ts index 5a662d6..290ef5d 100644 --- a/packages/auth/src/auth.ts +++ b/packages/auth/src/auth.ts @@ -1,5 +1,5 @@ import { drizzleAdapter } from "@better-auth/drizzle-adapter/relations-v2"; -import { getDb } from "@repo/db"; +import { db } from "@repo/db"; import * as schema from "@repo/db/schema"; import { createServerOnlyFn } from "@tanstack/react-start"; import { betterAuth } from "better-auth/minimal"; @@ -12,8 +12,8 @@ const getAuthConfig = createServerOnlyFn(() => telemetry: { enabled: false, }, - database: drizzleAdapter(getDb(), { - provider: "sqlite", + database: drizzleAdapter(db, { + provider: "pg", schema, }), diff --git a/packages/auth/tsconfig.json b/packages/auth/tsconfig.json index 5ba9fc3..6df1a17 100644 --- a/packages/auth/tsconfig.json +++ b/packages/auth/tsconfig.json @@ -1,5 +1,5 @@ { "extends": "@repo/tsconfig/base.json", - "include": ["**/*.ts", "../../apps/web/worker-configuration.d.ts"], + "include": ["**/*.ts"], "exclude": ["node_modules"] } diff --git a/packages/db/.env.example b/packages/db/.env.example index 4adc59c..d15dfc9 100644 --- a/packages/db/.env.example +++ b/packages/db/.env.example @@ -1,5 +1,2 @@ -# For remote D1 drizzle-kit migrations -# https://orm.drizzle.team/docs/guides/d1-http-with-drizzle-kit -SERVER_CF_ACCOUNT_ID= -SERVER_CF_DB_ID= -SERVER_CF_D1_TOKEN= \ No newline at end of file +# For drizzle-kit migrations +SERVER_DATABASE_URL="postgresql://postgres:password@localhost:5432/tanstarter" \ No newline at end of file diff --git a/packages/db/drizzle.config.ts b/packages/db/drizzle.config.ts index 702d9e4..a6710eb 100644 --- a/packages/db/drizzle.config.ts +++ b/packages/db/drizzle.config.ts @@ -1,25 +1,15 @@ import type { Config } from "drizzle-kit"; -const { SERVER_LOCAL_DB_PATH, SERVER_CF_DB_ID, SERVER_CF_D1_TOKEN, SERVER_CF_ACCOUNT_ID } = - process.env; - export default { - out: "../../apps/web/migrations", + out: "./migrations", schema: "./src/schema/index.ts", breakpoints: true, verbose: true, strict: true, casing: "snake_case", - dialect: "sqlite", - driver: SERVER_LOCAL_DB_PATH ? undefined : "d1-http", - dbCredentials: SERVER_LOCAL_DB_PATH - ? { - url: SERVER_LOCAL_DB_PATH, - } - : { - accountId: SERVER_CF_ACCOUNT_ID!, - databaseId: SERVER_CF_DB_ID!, - token: SERVER_CF_D1_TOKEN!, - }, + dialect: "postgresql", + dbCredentials: { + url: process.env.SERVER_DATABASE_URL as string, + }, } satisfies Config; diff --git a/packages/db/package.json b/packages/db/package.json index 6080494..f1d16e4 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -9,12 +9,12 @@ }, "scripts": { "db": "drizzle-kit", - "db:local": "SERVER_LOCAL_DB_PATH=$(find ../../apps/web/.wrangler/state/v3/d1/miniflare-D1DatabaseObject -type f -name '*.sqlite' -print -quit) drizzle-kit", "auth:generate": "pnpm dlx https://pkg.pr.new/better-auth/better-auth/@better-auth/cli@6913 generate --config ../auth/src/auth.ts --y --output ./src/schema/auth.schema.ts" }, "dependencies": { "drizzle-orm": "catalog:", - "nanoid": "catalog:" + "nanoid": "catalog:", + "postgres": "catalog:" }, "devDependencies": { "@repo/tsconfig": "workspace:*", diff --git a/packages/db/src/index.ts b/packages/db/src/index.ts index b349b76..a0e9ac0 100644 --- a/packages/db/src/index.ts +++ b/packages/db/src/index.ts @@ -1,17 +1,18 @@ -import { env } from "cloudflare:workers"; -import { drizzle } from "drizzle-orm/d1"; +import { drizzle } from "drizzle-orm/postgres-js"; +import postgres from "postgres"; import * as schemas from "./schema"; import { relations } from "./schema/relations"; const { relations: authRelations, ...schema } = schemas; -export function getDb() { - return drizzle(env.db, { - schema, - // authRelations must come first, since it's using defineRelations as the main relation - // https://orm.drizzle.team/docs/relations-v2#relations-parts - relations: { ...authRelations, ...relations }, - casing: "snake_case", - }); -} +const client = postgres(process.env.SERVER_DATABASE_URL as string); + +export const db = drizzle({ + client, + schema, + // authRelations must come first, since it's using defineRelations as the main relation + // https://orm.drizzle.team/docs/relations-v2#relations-parts + relations: { ...authRelations, ...relations }, + casing: "snake_case", +}); diff --git a/packages/db/src/schema/auth.schema.ts b/packages/db/src/schema/auth.schema.ts index 4b52f1e..28b460c 100644 --- a/packages/db/src/schema/auth.schema.ts +++ b/packages/db/src/schema/auth.schema.ts @@ -1,31 +1,27 @@ -import { defineRelations, sql } from "drizzle-orm"; -import { sqliteTable, text, integer, index } from "drizzle-orm/sqlite-core"; +import { defineRelations } from "drizzle-orm"; +import { pgTable, text, timestamp, boolean, index } from "drizzle-orm/pg-core"; -export const user = sqliteTable("user", { +export const user = pgTable("user", { id: text("id").primaryKey(), name: text("name").notNull(), email: text("email").notNull().unique(), - emailVerified: integer("email_verified", { mode: "boolean" }).default(false).notNull(), + emailVerified: boolean("email_verified").default(false).notNull(), image: text("image"), - createdAt: integer("created_at", { mode: "timestamp_ms" }) - .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) - .notNull(), - updatedAt: integer("updated_at", { mode: "timestamp_ms" }) - .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at") + .defaultNow() .$onUpdate(() => /* @__PURE__ */ new Date()) .notNull(), }); -export const session = sqliteTable( +export const session = pgTable( "session", { id: text("id").primaryKey(), - expiresAt: integer("expires_at", { mode: "timestamp_ms" }).notNull(), + expiresAt: timestamp("expires_at").notNull(), token: text("token").notNull().unique(), - createdAt: integer("created_at", { mode: "timestamp_ms" }) - .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) - .notNull(), - updatedAt: integer("updated_at", { mode: "timestamp_ms" }) + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at") .$onUpdate(() => /* @__PURE__ */ new Date()) .notNull(), ipAddress: text("ip_address"), @@ -37,7 +33,7 @@ export const session = sqliteTable( (table) => [index("session_userId_idx").on(table.userId)], ); -export const account = sqliteTable( +export const account = pgTable( "account", { id: text("id").primaryKey(), @@ -49,36 +45,28 @@ export const account = sqliteTable( accessToken: text("access_token"), refreshToken: text("refresh_token"), idToken: text("id_token"), - accessTokenExpiresAt: integer("access_token_expires_at", { - mode: "timestamp_ms", - }), - refreshTokenExpiresAt: integer("refresh_token_expires_at", { - mode: "timestamp_ms", - }), + accessTokenExpiresAt: timestamp("access_token_expires_at"), + refreshTokenExpiresAt: timestamp("refresh_token_expires_at"), scope: text("scope"), password: text("password"), - createdAt: integer("created_at", { mode: "timestamp_ms" }) - .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) - .notNull(), - updatedAt: integer("updated_at", { mode: "timestamp_ms" }) + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at") .$onUpdate(() => /* @__PURE__ */ new Date()) .notNull(), }, (table) => [index("account_userId_idx").on(table.userId)], ); -export const verification = sqliteTable( +export const verification = pgTable( "verification", { id: text("id").primaryKey(), identifier: text("identifier").notNull(), value: text("value").notNull(), - expiresAt: integer("expires_at", { mode: "timestamp_ms" }).notNull(), - createdAt: integer("created_at", { mode: "timestamp_ms" }) - .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) - .notNull(), - updatedAt: integer("updated_at", { mode: "timestamp_ms" }) - .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`) + expiresAt: timestamp("expires_at").notNull(), + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at") + .defaultNow() .$onUpdate(() => /* @__PURE__ */ new Date()) .notNull(), }, diff --git a/packages/db/tsconfig.json b/packages/db/tsconfig.json index 5ba9fc3..6df1a17 100644 --- a/packages/db/tsconfig.json +++ b/packages/db/tsconfig.json @@ -1,5 +1,5 @@ { "extends": "@repo/tsconfig/base.json", - "include": ["**/*.ts", "../../apps/web/worker-configuration.d.ts"], + "include": ["**/*.ts"], "exclude": ["node_modules"] } diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 94479b4..4c51f6e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,7 +6,6 @@ packages: catalog: '@base-ui/react': ^1.2.0 '@better-auth/drizzle-adapter': https://pkg.pr.new/better-auth/better-auth/@better-auth/drizzle-adapter@6913 - '@cloudflare/vite-plugin': ^1.25.0 '@fontsource-variable/inter': ^5.2.8 '@remixicon/react': ^4.9.0 '@tailwindcss/vite': ^4.1.18 @@ -39,9 +38,11 @@ catalog: lint-staged: ^16.2.7 motion: ^12.34.0 nanoid: ^5.1.6 + nitro: npm:nitro-nightly@latest oxfmt: ^0.32.0 oxlint: ^1.47.0 oxlint-tsgolint: ^0.12.1 + postgres: ^3.4.8 react: ^19.2.4 react-dom: ^19.2.4 shadcn: ^3.8.4 @@ -53,7 +54,6 @@ catalog: tw-animate-css: ^1.4.0 typescript: ^5.9.3 vite: ^8.0.0-beta.14 - wrangler: ^4.65.0 zod: ^4.3.6 catalogMode: prefer diff --git a/scripts/migrations-flatten.ts b/scripts/migrations-flatten.ts deleted file mode 100644 index 2c89a2e..0000000 --- a/scripts/migrations-flatten.ts +++ /dev/null @@ -1,50 +0,0 @@ -// This script flattens Drizzle Kit v1 migrations for Cloudflare D1 -// It moves apps/web/migrations//migration.sql to apps/web/migrations/.sql -// Issue: https://github.com/drizzle-team/drizzle-orm/issues/5166 - -import { promises as fs } from "node:fs"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; - -const scriptDir = path.dirname(fileURLToPath(import.meta.url)); -const migrationsDir = path.resolve(scriptDir, "..", "apps", "web", "migrations"); - -async function pathExists(filePath: string) { - try { - await fs.access(filePath); - return true; - } catch { - return false; - } -} - -async function main() { - if (!(await pathExists(migrationsDir))) { - console.error(`Migrations directory not found: ${migrationsDir}`); - process.exit(1); - } - - const entries = await fs.readdir(migrationsDir, { withFileTypes: true }); - - for (const entry of entries) { - if (!entry.isDirectory()) continue; - - const dirName = entry.name; - if (dirName === "meta") continue; - - const dirPath = path.join(migrationsDir, dirName); - const migrationFile = path.join(dirPath, "migration.sql"); - - if (await pathExists(migrationFile)) { - const targetFile = path.join(migrationsDir, `${dirName}.sql`); - console.log(`Moving ${migrationFile} to ${targetFile}`); - await fs.rm(targetFile, { force: true }); - await fs.rename(migrationFile, targetFile); - } - } -} - -main().catch((error) => { - console.error(error); - process.exit(1); -}); From b2c31e59d9091ffd965e48c020bfadf48ed627b2 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Fri, 13 Feb 2026 17:50:37 +0800 Subject: [PATCH 24/40] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0506234..f7c04e8 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ A minimal monorepo starter for 🏝️ TanStack Start, curated from the best of ## Deploying to production -The [vite config](./apps/web/vite.config.ts#L15-L16) is currently configured to use [Nitro v3](https://v3.nitro.build) to deploy on Vercel, but can be easily switched to other providers. +The [vite config](./apps/web/vite.config.ts#L15-L16) is currently configured to use [Nitro v3](https://v3.nitro.build) which can be deployed to many [providers](https://v3.nitro.build/deploy) like Vercel or Node, but can be easily switched to other platforms. Refer to the [TanStack Start hosting docs](https://tanstack.com/start/latest/docs/framework/react/guide/hosting) for deploying to other platforms. From 8ca74e851b12cacba68cbfb1799366fdbd4060d7 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Fri, 13 Feb 2026 20:29:02 +0800 Subject: [PATCH 25/40] rename /dashboard to /app --- apps/web/src/routeTree.gen.ts | 75 +++++++++---------- .../routes/_auth/{dashboard => app}/index.tsx | 10 +-- .../routes/_auth/{dashboard => app}/route.tsx | 10 +-- apps/web/src/routes/_guest/route.tsx | 2 +- apps/web/src/routes/index.tsx | 9 +-- 5 files changed, 48 insertions(+), 58 deletions(-) rename apps/web/src/routes/_auth/{dashboard => app}/index.tsx (81%) rename apps/web/src/routes/_auth/{dashboard => app}/route.tsx (78%) diff --git a/apps/web/src/routeTree.gen.ts b/apps/web/src/routeTree.gen.ts index 65a8233..097dda8 100644 --- a/apps/web/src/routeTree.gen.ts +++ b/apps/web/src/routeTree.gen.ts @@ -14,8 +14,8 @@ import { Route as AuthRouteRouteImport } from './routes/_auth/route' import { Route as IndexRouteImport } from './routes/index' import { Route as GuestSignupRouteImport } from './routes/_guest/signup' import { Route as GuestLoginRouteImport } from './routes/_guest/login' -import { Route as AuthDashboardRouteRouteImport } from './routes/_auth/dashboard/route' -import { Route as AuthDashboardIndexRouteImport } from './routes/_auth/dashboard/index' +import { Route as AuthAppRouteRouteImport } from './routes/_auth/app/route' +import { Route as AuthAppIndexRouteImport } from './routes/_auth/app/index' import { Route as ApiAuthSplatRouteImport } from './routes/api/auth/$' const GuestRouteRoute = GuestRouteRouteImport.update({ @@ -41,15 +41,15 @@ const GuestLoginRoute = GuestLoginRouteImport.update({ path: '/login', getParentRoute: () => GuestRouteRoute, } as any) -const AuthDashboardRouteRoute = AuthDashboardRouteRouteImport.update({ - id: '/dashboard', - path: '/dashboard', +const AuthAppRouteRoute = AuthAppRouteRouteImport.update({ + id: '/app', + path: '/app', getParentRoute: () => AuthRouteRoute, } as any) -const AuthDashboardIndexRoute = AuthDashboardIndexRouteImport.update({ +const AuthAppIndexRoute = AuthAppIndexRouteImport.update({ id: '/', path: '/', - getParentRoute: () => AuthDashboardRouteRoute, + getParentRoute: () => AuthAppRouteRoute, } as any) const ApiAuthSplatRoute = ApiAuthSplatRouteImport.update({ id: '/api/auth/$', @@ -59,51 +59,45 @@ const ApiAuthSplatRoute = ApiAuthSplatRouteImport.update({ export interface FileRoutesByFullPath { '/': typeof IndexRoute - '/dashboard': typeof AuthDashboardRouteRouteWithChildren + '/app': typeof AuthAppRouteRouteWithChildren '/login': typeof GuestLoginRoute '/signup': typeof GuestSignupRoute '/api/auth/$': typeof ApiAuthSplatRoute - '/dashboard/': typeof AuthDashboardIndexRoute + '/app/': typeof AuthAppIndexRoute } export interface FileRoutesByTo { '/': typeof IndexRoute '/login': typeof GuestLoginRoute '/signup': typeof GuestSignupRoute '/api/auth/$': typeof ApiAuthSplatRoute - '/dashboard': typeof AuthDashboardIndexRoute + '/app': typeof AuthAppIndexRoute } export interface FileRoutesById { __root__: typeof rootRouteImport '/': typeof IndexRoute '/_auth': typeof AuthRouteRouteWithChildren '/_guest': typeof GuestRouteRouteWithChildren - '/_auth/dashboard': typeof AuthDashboardRouteRouteWithChildren + '/_auth/app': typeof AuthAppRouteRouteWithChildren '/_guest/login': typeof GuestLoginRoute '/_guest/signup': typeof GuestSignupRoute '/api/auth/$': typeof ApiAuthSplatRoute - '/_auth/dashboard/': typeof AuthDashboardIndexRoute + '/_auth/app/': typeof AuthAppIndexRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath - fullPaths: - | '/' - | '/dashboard' - | '/login' - | '/signup' - | '/api/auth/$' - | '/dashboard/' + fullPaths: '/' | '/app' | '/login' | '/signup' | '/api/auth/$' | '/app/' fileRoutesByTo: FileRoutesByTo - to: '/' | '/login' | '/signup' | '/api/auth/$' | '/dashboard' + to: '/' | '/login' | '/signup' | '/api/auth/$' | '/app' id: | '__root__' | '/' | '/_auth' | '/_guest' - | '/_auth/dashboard' + | '/_auth/app' | '/_guest/login' | '/_guest/signup' | '/api/auth/$' - | '/_auth/dashboard/' + | '/_auth/app/' fileRoutesById: FileRoutesById } export interface RootRouteChildren { @@ -150,19 +144,19 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof GuestLoginRouteImport parentRoute: typeof GuestRouteRoute } - '/_auth/dashboard': { - id: '/_auth/dashboard' - path: '/dashboard' - fullPath: '/dashboard' - preLoaderRoute: typeof AuthDashboardRouteRouteImport + '/_auth/app': { + id: '/_auth/app' + path: '/app' + fullPath: '/app' + preLoaderRoute: typeof AuthAppRouteRouteImport parentRoute: typeof AuthRouteRoute } - '/_auth/dashboard/': { - id: '/_auth/dashboard/' + '/_auth/app/': { + id: '/_auth/app/' path: '/' - fullPath: '/dashboard/' - preLoaderRoute: typeof AuthDashboardIndexRouteImport - parentRoute: typeof AuthDashboardRouteRoute + fullPath: '/app/' + preLoaderRoute: typeof AuthAppIndexRouteImport + parentRoute: typeof AuthAppRouteRoute } '/api/auth/$': { id: '/api/auth/$' @@ -174,23 +168,24 @@ declare module '@tanstack/react-router' { } } -interface AuthDashboardRouteRouteChildren { - AuthDashboardIndexRoute: typeof AuthDashboardIndexRoute +interface AuthAppRouteRouteChildren { + AuthAppIndexRoute: typeof AuthAppIndexRoute } -const AuthDashboardRouteRouteChildren: AuthDashboardRouteRouteChildren = { - AuthDashboardIndexRoute: AuthDashboardIndexRoute, +const AuthAppRouteRouteChildren: AuthAppRouteRouteChildren = { + AuthAppIndexRoute: AuthAppIndexRoute, } -const AuthDashboardRouteRouteWithChildren = - AuthDashboardRouteRoute._addFileChildren(AuthDashboardRouteRouteChildren) +const AuthAppRouteRouteWithChildren = AuthAppRouteRoute._addFileChildren( + AuthAppRouteRouteChildren, +) interface AuthRouteRouteChildren { - AuthDashboardRouteRoute: typeof AuthDashboardRouteRouteWithChildren + AuthAppRouteRoute: typeof AuthAppRouteRouteWithChildren } const AuthRouteRouteChildren: AuthRouteRouteChildren = { - AuthDashboardRouteRoute: AuthDashboardRouteRouteWithChildren, + AuthAppRouteRoute: AuthAppRouteRouteWithChildren, } const AuthRouteRouteWithChildren = AuthRouteRoute._addFileChildren( diff --git a/apps/web/src/routes/_auth/dashboard/index.tsx b/apps/web/src/routes/_auth/app/index.tsx similarity index 81% rename from apps/web/src/routes/_auth/dashboard/index.tsx rename to apps/web/src/routes/_auth/app/index.tsx index ce0638e..fe34269 100644 --- a/apps/web/src/routes/_auth/dashboard/index.tsx +++ b/apps/web/src/routes/_auth/app/index.tsx @@ -2,20 +2,20 @@ import { createFileRoute } from "@tanstack/react-router"; import { SignOutButton } from "~/components/sign-out-button"; -export const Route = createFileRoute("/_auth/dashboard/")({ - component: DashboardIndex, +export const Route = createFileRoute("/_auth/app/")({ + component: AppIndex, }); -function DashboardIndex() { +function AppIndex() { const { user } = Route.useRouteContext(); // we can also use the useAuth() or useAuthSuspense() hooks here from @repo/auth/tanstack/hooks // this is just to demo that route context is available in route components, in addition to loaders/beforeLoad return (
- Dashboard index page + App index page
-        routes/_auth/dashboard/index.tsx
+        routes/_auth/app/index.tsx
       
User data from route context: diff --git a/apps/web/src/routes/_auth/dashboard/route.tsx b/apps/web/src/routes/_auth/app/route.tsx similarity index 78% rename from apps/web/src/routes/_auth/dashboard/route.tsx rename to apps/web/src/routes/_auth/app/route.tsx index 72d3869..73566ef 100644 --- a/apps/web/src/routes/_auth/dashboard/route.tsx +++ b/apps/web/src/routes/_auth/app/route.tsx @@ -1,17 +1,17 @@ import { Button } from "@repo/ui/components/button"; import { createFileRoute, Link, Outlet } from "@tanstack/react-router"; -export const Route = createFileRoute("/_auth/dashboard")({ - component: DashboardLayout, +export const Route = createFileRoute("/_auth/app")({ + component: AppLayout, }); -function DashboardLayout() { +function AppLayout() { return (
-

Dashboard Layout

+

App Layout

-          routes/_auth/dashboard/route.tsx
+          routes/_auth/app/route.tsx
         
This is a protected layout from the _auth pathless layout route: diff --git a/apps/web/src/routes/_guest/route.tsx b/apps/web/src/routes/_guest/route.tsx index bdad2bf..8ffe8f1 100644 --- a/apps/web/src/routes/_guest/route.tsx +++ b/apps/web/src/routes/_guest/route.tsx @@ -4,7 +4,7 @@ import { createFileRoute, Outlet, redirect } from "@tanstack/react-router"; export const Route = createFileRoute("/_guest")({ component: RouteComponent, beforeLoad: async ({ context }) => { - const REDIRECT_URL = "/dashboard"; + const REDIRECT_URL = "/app"; const user = await context.queryClient.ensureQueryData({ ...authQueryOptions(), diff --git a/apps/web/src/routes/index.tsx b/apps/web/src/routes/index.tsx index 0d428d5..8cc4fed 100644 --- a/apps/web/src/routes/index.tsx +++ b/apps/web/src/routes/index.tsx @@ -62,13 +62,8 @@ function UserAction() { return user ? (

Welcome back, {user.name}!

-
Session user: From 49dddf8a289b4e73d64b71ea8fe64668a5c07ab0 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Fri, 13 Feb 2026 21:01:51 +0800 Subject: [PATCH 26/40] update readme --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f7c04e8..878486f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # TanStarter > [!WARNING] -> This is still a work in progress. Currently blocked by: +> This is still a work in progress. Mainly blocked by: > > - [ ] Drizzle Relations v2 support in Better Auth (https://github.com/better-auth/better-auth/pull/6913) > @@ -12,9 +12,9 @@ A minimal monorepo starter for 🏝️ TanStack Start, curated from the best of - [Turborepo](https://turborepo.com/) + [pnpm](https://pnpm.io/) - [React 19](https://react.dev) + [React Compiler](https://react.dev/learn/react-compiler) - TanStack [Start](https://tanstack.com/start/latest) + [Router](https://tanstack.com/router/latest) + [Query](https://tanstack.com/query/latest) + [Form](https://tanstack.com/form/latest) -- [Vite 8](https://vite.dev/blog/announcing-vite8-beta) (beta) + [Nitro v3](https://v3.nitro.build/) -- [Tailwind CSS](https://tailwindcss.com/) + [shadcn/ui](https://ui.shadcn.com/) + [Base UI](https://base-ui.com/) -- [Drizzle ORM v1](https://orm.drizzle.team/) (beta) + Postgres +- [Vite 8](https://vite.dev/) + [Nitro v3](https://v3.nitro.build/) +- [Tailwind CSS v4](https://tailwindcss.com/) + [shadcn/ui](https://ui.shadcn.com/) + [Base UI](https://base-ui.com/) (base-maia) +- [Drizzle ORM](https://orm.drizzle.team/) + PostgreSQL - [Better Auth](https://www.better-auth.com/) - [Oxlint](https://oxc.rs/docs/guide/usage/linter.html) + [Oxfmt](https://oxc.rs/docs/guide/usage/formatter.html) with [Husky](https://typicode.github.io/husky/) + [lint-staged](https://github.com/lint-staged/lint-staged) @@ -93,7 +93,7 @@ Refer to the [TanStack Start hosting docs](https://tanstack.com/start/latest/doc - [Vite 8 beta](https://vite.dev/blog/announcing-vite8-beta) - We're using Vite 8 beta which is powered by Rolldown. - [Nitro v3 nightly](https://v3.nitro.build/docs/nightly) - This template is configured with Nitro v3 nightly by default. - [Drizzle ORM v1 Beta](https://orm.drizzle.team/docs/relations-v1-v2) - Drizzle ORM v1 is in beta with relations v2. -- [Better Auth beta](https://github.com/better-auth/better-auth/pull/6913) - We're using a separate branch of Better Auth that supports Drizzle relations v2. +- [Better Auth beta](https://github.com/better-auth/better-auth/pull/6913) - We're using a separate branch of Better Auth v1.5 that supports Drizzle relations v2. ## Goodies From 0256be3013f4e514eab766da9a758f44d76de597 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Fri, 13 Feb 2026 23:27:04 +0800 Subject: [PATCH 27/40] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 878486f..cb40960 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ > > Also see the [issue watchlist](#issue-watchlist) below and open issues with the [`branch:next`](https://github.com/dotnize/react-tanstarter/issues?q=is%3Aissue%20state%3Aopen%20label%3Abranch%3Anext) label. -A minimal monorepo starter for 🏝️ TanStack Start, curated from the best of the TypeScript ecosystem. +A minimal monorepo starter for 🏝️ TanStack Start. - [Turborepo](https://turborepo.com/) + [pnpm](https://pnpm.io/) - [React 19](https://react.dev) + [React Compiler](https://react.dev/learn/react-compiler) From 0f5cf3dea452e6e19c023ec9d35544f090c29d99 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Sat, 14 Feb 2026 19:09:50 +0800 Subject: [PATCH 28/40] update readme --- README.md | 2 +- pnpm-workspace.yaml | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index cb40960..9333234 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ A minimal monorepo starter for 🏝️ TanStack Start. ## Deploying to production -The [vite config](./apps/web/vite.config.ts#L15-L16) is currently configured to use [Nitro v3](https://v3.nitro.build) which can be deployed to many [providers](https://v3.nitro.build/deploy) like Vercel or Node, but can be easily switched to other platforms. +The [vite config](./apps/web/vite.config.ts#L15-L16) is currently configured to use Nitro v3 to deploy on Vercel, but supports many other [deployment presets](https://v3.nitro.build/deploy) like Node. Refer to the [TanStack Start hosting docs](https://tanstack.com/start/latest/docs/framework/react/guide/hosting) for deploying to other platforms. diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 4c51f6e..c2970e1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -13,14 +13,14 @@ catalog: '@tanstack/eslint-plugin-query': ^5.91.4 '@tanstack/eslint-plugin-router': ^1.155.0 '@tanstack/react-devtools': ^0.9.5 - '@tanstack/react-form-devtools': ^0.2.14 - '@tanstack/react-form-start': ^1.28.1 + '@tanstack/react-form-devtools': ^0.2.15 + '@tanstack/react-form-start': ^1.28.2 '@tanstack/react-query': ^5.90.21 '@tanstack/react-query-devtools': ^5.91.3 - '@tanstack/react-router': ^1.159.5 - '@tanstack/react-router-devtools': ^1.159.5 - '@tanstack/react-router-ssr-query': ^1.159.5 - '@tanstack/react-start': ^1.159.5 + '@tanstack/react-router': ^1.159.10 + '@tanstack/react-router-devtools': ^1.159.10 + '@tanstack/react-router-ssr-query': ^1.159.10 + '@tanstack/react-start': ^1.159.11 '@types/node': ^24.10.13 '@types/react': ^19.2.14 '@types/react-dom': ^19.2.3 @@ -33,7 +33,7 @@ catalog: drizzle-kit: beta drizzle-orm: beta eslint-plugin-react-hooks: ^7.0.1 - eslint-plugin-turbo: ^2.8.7 + eslint-plugin-turbo: ^2.8.8 husky: ^9.1.7 lint-staged: ^16.2.7 motion: ^12.34.0 @@ -41,7 +41,7 @@ catalog: nitro: npm:nitro-nightly@latest oxfmt: ^0.32.0 oxlint: ^1.47.0 - oxlint-tsgolint: ^0.12.1 + oxlint-tsgolint: ^0.12.2 postgres: ^3.4.8 react: ^19.2.4 react-dom: ^19.2.4 @@ -50,7 +50,7 @@ catalog: tailwind-merge: ^3.4.0 tailwindcss: ^4.1.18 tsx: ^4.21.0 - turbo: ^2.8.7 + turbo: ^2.8.8 tw-animate-css: ^1.4.0 typescript: ^5.9.3 vite: ^8.0.0-beta.14 From 6c315ceca3ded445f8273315195ffda3232e079b Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Sat, 14 Feb 2026 19:39:24 +0800 Subject: [PATCH 29/40] update readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9333234..0c62851 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ > > - [ ] Drizzle Relations v2 support in Better Auth (https://github.com/better-auth/better-auth/pull/6913) > -> Also see the [issue watchlist](#issue-watchlist) below and open issues with the [`branch:next`](https://github.com/dotnize/react-tanstarter/issues?q=is%3Aissue%20state%3Aopen%20label%3Abranch%3Anext) label. +> Also see the [issue watchlist](#issue-watchlist) below. A minimal monorepo starter for 🏝️ TanStack Start. @@ -99,15 +99,15 @@ Refer to the [TanStack Start hosting docs](https://tanstack.com/start/latest/doc #### Scripts -We use **pnpm** by default, but you can modify these scripts in [package.json](./package.json) to use your preferred package manager. +This template is configured for **[pnpm](https://pnpm.io/)** by default. Check the root [package.json](./package.json) and each workspace package's `package.json` for the full list of available scripts. - **`auth:generate`** - Regenerate the [auth db schema](./packages/db/src/schema/auth.schema.ts) if you've made changes to your Better Auth [config](./packages/auth/src/auth.ts). - **`ui`** - The shadcn/ui CLI. (e.g. `pnpm ui add button`) - **`format`**, **`lint`** - Run Oxfmt and Oxlint, or both via `pnpm check`. - **`deps`** - Selectively upgrade dependencies via taze. -> [!TIP] -> Check the root [package.json](./package.json) and each workspace package's respective `package.json` to see the full list of available scripts. +> [!NOTE] +> To switch to another package manager (e.g., bun or npm), update the commands in your `package.json` files, [`dev.sh`](./dev.sh), and [`.husky/pre-commit`](./.husky/pre-commit). You'll also need to replace or remove [`pnpm-workspace.yaml`](./pnpm-workspace.yaml), which uses pnpm [catalogs](https://pnpm.io/catalogs). Bun and Yarn have their own equivalents, but the file formats may differ. #### Utilities From 1261c97067729a4f1c3d79706446b75c3d6a0055 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Sun, 15 Feb 2026 15:10:23 +0800 Subject: [PATCH 30/40] add AGENTS.md closes #47 --- .agents/auth.md | 26 +++++++++++ .agents/tanstack-patterns.md | 88 ++++++++++++++++++++++++++++++++++++ .agents/typescript.md | 47 +++++++++++++++++++ .agents/workflow.md | 18 ++++++++ AGENTS.md | 15 ++++++ pnpm-workspace.yaml | 12 ++--- 6 files changed, 200 insertions(+), 6 deletions(-) create mode 100644 .agents/auth.md create mode 100644 .agents/tanstack-patterns.md create mode 100644 .agents/typescript.md create mode 100644 .agents/workflow.md create mode 100644 AGENTS.md diff --git a/.agents/auth.md b/.agents/auth.md new file mode 100644 index 0000000..75a3f76 --- /dev/null +++ b/.agents/auth.md @@ -0,0 +1,26 @@ +# Auth Conventions + +## Auth Architecture + +- Better Auth config lives in `packages/auth/src/auth.ts`. +- Auth utilities are centralized in `packages/auth/src/tanstack/*`. +- In components, prefer shared auth hooks (`useAuth`, `useAuthSuspense`) from `packages/auth/src/tanstack/hooks.ts`. These reuse the same auth data as the route loader. +- For route loaders under `_auth`, prefer loader context user over duplicate auth fetches. + +## Route Guards + +- Protected route layout is `apps/web/src/routes/_auth/route.tsx`. + - It enforces auth in `beforeLoad` using `ensureQueryData(authQueryOptions())`. + - It returns `{ user }`, which is available to all child route loaders via router context. +- Guest-only route layout is `apps/web/src/routes/_guest/route.tsx`. + - It redirects authenticated users away from login/signup routes. + +## Server Functions and Mutations + +- Server functions can be called from both server and client code. + - Server call: executed directly on the server. + - Client call: treated as RPC and executed through an HTTP API request. +- Treat protected server functions like protected API routes from a security perspective. +- If a server function requires auth, always apply `authMiddleware` from `packages/auth/src/tanstack/middleware.ts`. This applies even when called from an auth-protected route (`routes/_auth/**`). +- Route-level `beforeLoad` guards protect route navigation/rendering, but they do not replace server-function authorization. +- When auth is required, middleware-provided user context is the source of truth. diff --git a/.agents/tanstack-patterns.md b/.agents/tanstack-patterns.md new file mode 100644 index 0000000..1f69500 --- /dev/null +++ b/.agents/tanstack-patterns.md @@ -0,0 +1,88 @@ + + +# TanStack Patterns + +## Route Group Conventions + +- Protected routes live under `apps/web/src/routes/_auth/**`, enforced by `beforeLoad` in the `_auth` layout (`apps/web/src/routes/_auth/route.tsx`). +- Guest-only routes live under `apps/web/src/routes/_guest/**`, enforced by `beforeLoad` in the `_guest` layout (`apps/web/src/routes/_guest/route.tsx`). +- Auth-specific route guard behavior and middleware rules are documented in `.agents/auth.md`. + +## loaderDeps Must Be Specific + +Only include properties actually used in the loader. This ensures proper cache invalidation. + +```typescript +// Bad: includes everything +loaderDeps: ({ search }) => search, +loader: async ({ deps }) => { + await fetchData({ page: deps.page, pageSize: deps.pageSize }) +} + +// Good: only what's used +loaderDeps: ({ search }) => ({ + page: search.page, + pageSize: search.pageSize, +}), +loader: async ({ deps }) => { + await fetchData({ page: deps.page, pageSize: deps.pageSize }) +} +``` + +## Loaders Are Isomorphic + +Loaders run on both server and client. They cannot directly access server-only APIs. + +```typescript +// Bad: direct server API access +loader: async () => { + const data = await fs.readFile("data.json"); + return { data }; +}; + +// Good: call a server function +loader: async () => { + const data = await $serverFn({ data: { id: "123" } }); + return { data }; +}; +``` + +## Environment Shaking + +TanStack Start strips any code not referenced by a `createServerFn` handler from the client build. + +- Server-only code (database, fs) is automatically excluded from client bundles +- Only code inside `createServerFn` handlers goes to server bundles +- Code outside handlers is included in both bundles + +## Importing Server Functions + +Server functions wrapped in `createServerFn` can be imported statically. Never use dynamic imports for server-only code in components. Prefix server function names with `$` (e.g. `$getUser`) for easier identification. + +```typescript +// Bad: dynamic import causes bundler issues +const rolesQuery = useQuery({ + queryFn: async () => { + const { $listRoles } = await import("~/utils/roles.server"); + return $listRoles({ data: {} }); + }, +}); + +// Good: static import +import { $listRoles } from "~/utils/roles.server"; + +const rolesQuery = useQuery({ + queryFn: async () => $listRoles({ data: {} }), +}); +``` + +## Server-Only Import Rules + +1. `createServerFn` wrappers can be imported statically anywhere +2. Direct server-only code (database clients, fs) must only be imported: + - Inside `createServerFn` handlers + - In `*.server.ts` files + +## Auth-specific Patterns + +- See `.agents/auth.md` for auth middleware usage, route guards, and session/cookie patterns. diff --git a/.agents/typescript.md b/.agents/typescript.md new file mode 100644 index 0000000..c845615 --- /dev/null +++ b/.agents/typescript.md @@ -0,0 +1,47 @@ + + +# TypeScript Conventions + +## Avoid Type Casting + +Never cast types unless absolutely necessary. This includes: + +- Manual generic type parameters (e.g., ``) +- Type assertions using `as` +- Type assertions using `satisfies` + +## Prefer Type Inference + +Infer types by going up the logical chain: + +1. **Schema validation** as source of truth (e.g. Zod) +2. **Type inference** from function return types, API responses +3. **Fix at source** (schema, API definition, function signature) rather than casting at point of use + +```typescript +// Bad +const result = api.getData() as MyType; +const value = getValue(); + +// Good +const result = api.getData(); // Type inferred from return type +const value = getValue(); // Type inferred from implementation +``` + +## Generic Type Parameter Naming + +All generic type parameters must be prefixed with `T`. + +```typescript +// Bad +function withCapability( + handler: (user: AuthUser, ...args: Args) => R, +) { ... } + +// Good +function withCapability( + handler: (user: AuthUser, ...args: TArgs) => TReturn, +) { ... } +``` + +Common names: `T`, `TArgs`, `TReturn`, `TData`, `TError`, `TKey`, `TValue` diff --git a/.agents/workflow.md b/.agents/workflow.md new file mode 100644 index 0000000..30dc7ce --- /dev/null +++ b/.agents/workflow.md @@ -0,0 +1,18 @@ +# Workflow + +## Build Commands + +- `pnpm build`: Only for build/bundler issues or verifying production output +- `pnpm lint`: Type-checking & type-aware linting +- `pnpm dev` runs indefinitely in watch mode +- `pnpm db` for Drizzle Kit commands (e.g. `pnpm db generate` to generate a migration) + +Don't build after every change. If lint passes; assume changes work. + +## Testing + +No testing framework is currently set up. Prefer lint checks for now. + +## Formatting + +Oxfmt is configured for consistent code formatting via `pnpm format`. It runs automatically on commit via Husky pre-commit hooks, so manual formatting is not necessary. diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..a355a23 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,15 @@ +# Agent Guidelines + +## Essentials + +- Stack: TypeScript + React (TanStack Start) in a pnpm + Turborepo monorepo, with Drizzle ORM, shadcn/ui, and Better Auth. +- Prefer shared `@repo/ui` components; add primitives via shadcn CLI (`pnpm ui add `). +- Use shared pnpm catalog versions (`pnpm-workspace.yaml`) via `catalog:`. +- Don't build after every little change. If `pnpm lint` passes; assume changes work. + +## Topic-specific Guidelines + +- [TanStack patterns](.agents/tanstack-patterns.md) - Routing, loaders, server functions, environment shaking +- [Auth patterns](.agents/auth.md) - Route guards, middleware, auth utilities +- [TypeScript conventions](.agents/typescript.md) - Casting rules, prefer type inference +- [Workflow](.agents/workflow.md) - Workflow commands, validation approach diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c2970e1..7326a68 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -17,10 +17,10 @@ catalog: '@tanstack/react-form-start': ^1.28.2 '@tanstack/react-query': ^5.90.21 '@tanstack/react-query-devtools': ^5.91.3 - '@tanstack/react-router': ^1.159.10 - '@tanstack/react-router-devtools': ^1.159.10 - '@tanstack/react-router-ssr-query': ^1.159.10 - '@tanstack/react-start': ^1.159.11 + '@tanstack/react-router': ^1.159.14 + '@tanstack/react-router-devtools': ^1.159.14 + '@tanstack/react-router-ssr-query': ^1.159.14 + '@tanstack/react-start': ^1.159.14 '@types/node': ^24.10.13 '@types/react': ^19.2.14 '@types/react-dom': ^19.2.3 @@ -33,7 +33,7 @@ catalog: drizzle-kit: beta drizzle-orm: beta eslint-plugin-react-hooks: ^7.0.1 - eslint-plugin-turbo: ^2.8.8 + eslint-plugin-turbo: ^2.8.9 husky: ^9.1.7 lint-staged: ^16.2.7 motion: ^12.34.0 @@ -50,7 +50,7 @@ catalog: tailwind-merge: ^3.4.0 tailwindcss: ^4.1.18 tsx: ^4.21.0 - turbo: ^2.8.8 + turbo: ^2.8.9 tw-animate-css: ^1.4.0 typescript: ^5.9.3 vite: ^8.0.0-beta.14 From 37e06b508f85fb2a0e9b61366e34d5a1d1f242ce Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Sun, 15 Feb 2026 15:14:52 +0800 Subject: [PATCH 31/40] update dependencies --- pnpm-workspace.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7326a68..4eaca5e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -17,10 +17,10 @@ catalog: '@tanstack/react-form-start': ^1.28.2 '@tanstack/react-query': ^5.90.21 '@tanstack/react-query-devtools': ^5.91.3 - '@tanstack/react-router': ^1.159.14 - '@tanstack/react-router-devtools': ^1.159.14 - '@tanstack/react-router-ssr-query': ^1.159.14 - '@tanstack/react-start': ^1.159.14 + '@tanstack/react-router': ^1.160.0 + '@tanstack/react-router-devtools': ^1.160.0 + '@tanstack/react-router-ssr-query': ^1.160.0 + '@tanstack/react-start': ^1.160.0 '@types/node': ^24.10.13 '@types/react': ^19.2.14 '@types/react-dom': ^19.2.3 From 27d42c1fb6eb3e05048dd3869145f35fd31d24c5 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Sun, 15 Feb 2026 17:59:04 +0800 Subject: [PATCH 32/40] AGENTS.md: clarify data fetching pattern for tanstack query --- .agents/tanstack-patterns.md | 52 +++++++++++++++++------------------- AGENTS.md | 2 +- pnpm-workspace.yaml | 4 +-- 3 files changed, 28 insertions(+), 30 deletions(-) diff --git a/.agents/tanstack-patterns.md b/.agents/tanstack-patterns.md index 1f69500..cd45553 100644 --- a/.agents/tanstack-patterns.md +++ b/.agents/tanstack-patterns.md @@ -8,43 +8,41 @@ - Guest-only routes live under `apps/web/src/routes/_guest/**`, enforced by `beforeLoad` in the `_guest` layout (`apps/web/src/routes/_guest/route.tsx`). - Auth-specific route guard behavior and middleware rules are documented in `.agents/auth.md`. -## loaderDeps Must Be Specific +## Data Fetching -Only include properties actually used in the loader. This ensures proper cache invalidation. +Route loaders are isomorphic; they run on both server and client. They cannot directly access server-only APIs. ```typescript -// Bad: includes everything -loaderDeps: ({ search }) => search, -loader: async ({ deps }) => { - await fetchData({ page: deps.page, pageSize: deps.pageSize }) -} - -// Good: only what's used -loaderDeps: ({ search }) => ({ - page: search.page, - pageSize: search.pageSize, -}), -loader: async ({ deps }) => { - await fetchData({ page: deps.page, pageSize: deps.pageSize }) -} +// Bad: direct server API access +loader: async () => { + const todos = await fs.readFile("todos.json"); + return { todos }; +}; ``` -## Loaders Are Isomorphic - -Loaders run on both server and client. They cannot directly access server-only APIs. - ```typescript -// Bad: direct server API access +// Good (minimal/valid): call a server function from the loader loader: async () => { - const data = await fs.readFile("data.json"); - return { data }; + const todos = await $getTodos({ data: {} }); + return { todos }; }; +``` -// Good: call a server function -loader: async () => { - const data = await $serverFn({ data: { id: "123" } }); - return { data }; +Instead of directly calling server functions in loaders, prefer wrapping in TanStack Query for better caching and reusability. + +```typescript +loader: async ({ context }) => { + // Best/Preferred: For read/data-fetching server functions, wrap in TanStack Query for better caching/reusability + const todos = await context.queryClient.ensureQueryData(todosQueryOptions()); + return { todos }; }; + +// lib/todos/queries.ts +export const todosQueryOptions = () => + queryOptions({ + queryKey: ["todos"], + queryFn: ({ signal }) => $getTodos({ signal }), // TanStack Query calls the server function + }); ``` ## Environment Shaking diff --git a/AGENTS.md b/AGENTS.md index a355a23..354613b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -9,7 +9,7 @@ ## Topic-specific Guidelines -- [TanStack patterns](.agents/tanstack-patterns.md) - Routing, loaders, server functions, environment shaking +- [TanStack patterns](.agents/tanstack-patterns.md) - Routing, data fetching, loaders, server functions, environment shaking - [Auth patterns](.agents/auth.md) - Route guards, middleware, auth utilities - [TypeScript conventions](.agents/typescript.md) - Casting rules, prefer type inference - [Workflow](.agents/workflow.md) - Workflow commands, validation approach diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 4eaca5e..76d8dfc 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -13,8 +13,8 @@ catalog: '@tanstack/eslint-plugin-query': ^5.91.4 '@tanstack/eslint-plugin-router': ^1.155.0 '@tanstack/react-devtools': ^0.9.5 - '@tanstack/react-form-devtools': ^0.2.15 - '@tanstack/react-form-start': ^1.28.2 + '@tanstack/react-form-devtools': ^0.2.16 + '@tanstack/react-form-start': ^1.28.3 '@tanstack/react-query': ^5.90.21 '@tanstack/react-query-devtools': ^5.91.3 '@tanstack/react-router': ^1.160.0 From e5e997df8ad7a75e425e5e338a66e1b5289be40e Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Sun, 15 Feb 2026 18:01:37 +0800 Subject: [PATCH 33/40] update tanstack patterns --- .agents/tanstack-patterns.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.agents/tanstack-patterns.md b/.agents/tanstack-patterns.md index cd45553..fee2c18 100644 --- a/.agents/tanstack-patterns.md +++ b/.agents/tanstack-patterns.md @@ -32,7 +32,7 @@ Instead of directly calling server functions in loaders, prefer wrapping in TanS ```typescript loader: async ({ context }) => { - // Best/Preferred: For read/data-fetching server functions, wrap in TanStack Query for better caching/reusability + // Best/Preferred: For read/data-fetching server functions, wrap in TanStack Query const todos = await context.queryClient.ensureQueryData(todosQueryOptions()); return { todos }; }; From 0d6e08021f7d9814aa9e41174425ee86b42ab93e Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Sun, 15 Feb 2026 19:01:34 +0800 Subject: [PATCH 34/40] bump dependencies --- apps/web/src/routes/__root.tsx | 2 +- pnpm-workspace.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx index 3e85b58..dbfc5ca 100644 --- a/apps/web/src/routes/__root.tsx +++ b/apps/web/src/routes/__root.tsx @@ -25,7 +25,7 @@ export const Route = createRootRouteWithContext<{ }>()({ // Typically we don't need the user immediately in landing pages. // For protected routes with loader data, see /_auth/route.tsx - // beforeLoad: () => { + // beforeLoad: ({ context }) => { // context.queryClient.prefetchQuery(authQueryOptions()); // }, head: () => ({ diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 76d8dfc..df2b0c9 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -47,7 +47,7 @@ catalog: react-dom: ^19.2.4 shadcn: ^3.8.4 sonner: ^2.0.7 - tailwind-merge: ^3.4.0 + tailwind-merge: ^3.4.1 tailwindcss: ^4.1.18 tsx: ^4.21.0 turbo: ^2.8.9 From b8ca699d774f226b9089778963ca23a521ac7ac6 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Tue, 17 Feb 2026 05:44:42 +0800 Subject: [PATCH 35/40] update deps --- apps/web/src/routes/__root.tsx | 3 +-- pnpm-workspace.yaml | 16 ++++++++-------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx index dbfc5ca..4949797 100644 --- a/apps/web/src/routes/__root.tsx +++ b/apps/web/src/routes/__root.tsx @@ -1,10 +1,9 @@ /// import type { AuthQueryResult } from "@repo/auth/tanstack/queries"; -import type { QueryClient } from "@tanstack/react-query"; - import { Toaster } from "@repo/ui/components/sonner"; import { ThemeProvider } from "@repo/ui/lib/theme-provider"; import { TanStackDevtools } from "@tanstack/react-devtools"; +import type { QueryClient } from "@tanstack/react-query"; import "@fontsource-variable/inter"; // import { formDevtoolsPlugin } from "@tanstack/react-form-devtools"; import { ReactQueryDevtoolsPanel } from "@tanstack/react-query-devtools"; diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index df2b0c9..9b95f73 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -17,10 +17,10 @@ catalog: '@tanstack/react-form-start': ^1.28.3 '@tanstack/react-query': ^5.90.21 '@tanstack/react-query-devtools': ^5.91.3 - '@tanstack/react-router': ^1.160.0 - '@tanstack/react-router-devtools': ^1.160.0 - '@tanstack/react-router-ssr-query': ^1.160.0 - '@tanstack/react-start': ^1.160.0 + '@tanstack/react-router': ^1.160.2 + '@tanstack/react-router-devtools': ^1.160.2 + '@tanstack/react-router-ssr-query': ^1.160.2 + '@tanstack/react-start': ^1.160.2 '@types/node': ^24.10.13 '@types/react': ^19.2.14 '@types/react-dom': ^19.2.3 @@ -39,13 +39,13 @@ catalog: motion: ^12.34.0 nanoid: ^5.1.6 nitro: npm:nitro-nightly@latest - oxfmt: ^0.32.0 - oxlint: ^1.47.0 - oxlint-tsgolint: ^0.12.2 + oxfmt: ^0.33.0 + oxlint: ^1.48.0 + oxlint-tsgolint: ^0.14.0 postgres: ^3.4.8 react: ^19.2.4 react-dom: ^19.2.4 - shadcn: ^3.8.4 + shadcn: ^3.8.5 sonner: ^2.0.7 tailwind-merge: ^3.4.1 tailwindcss: ^4.1.18 From a9e2e16a2329778a883c933f22471e953d3dd37e Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Wed, 18 Feb 2026 02:01:51 +0800 Subject: [PATCH 36/40] update deps --- package.json | 2 +- pnpm-workspace.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 29de47d..386bf56 100644 --- a/package.json +++ b/package.json @@ -38,5 +38,5 @@ "engines": { "node": ">=24" }, - "packageManager": "pnpm@10.29.3" + "packageManager": "pnpm@10.30.0" } diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 9b95f73..290f1e4 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -12,7 +12,7 @@ catalog: '@tanstack/devtools-vite': ^0.5.1 '@tanstack/eslint-plugin-query': ^5.91.4 '@tanstack/eslint-plugin-router': ^1.155.0 - '@tanstack/react-devtools': ^0.9.5 + '@tanstack/react-devtools': ^0.9.6 '@tanstack/react-form-devtools': ^0.2.16 '@tanstack/react-form-start': ^1.28.3 '@tanstack/react-query': ^5.90.21 @@ -36,7 +36,7 @@ catalog: eslint-plugin-turbo: ^2.8.9 husky: ^9.1.7 lint-staged: ^16.2.7 - motion: ^12.34.0 + motion: ^12.34.1 nanoid: ^5.1.6 nitro: npm:nitro-nightly@latest oxfmt: ^0.33.0 From 73022e8d296c3f8e576d4496d0d7d35763c5719d Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Wed, 18 Feb 2026 02:05:52 +0800 Subject: [PATCH 37/40] disable prettier & eslint in vscode --- .vscode/settings.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.vscode/settings.json b/.vscode/settings.json index 58a0bdc..5e897d6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -24,6 +24,10 @@ // use LF line endings "files.eol": "\n", + // disable prettier & eslint + "prettier.enable": false, + "eslint.enable": false, + // type-aware linting "oxc.typeAware": true, From 1485c61d8357f30047d4ecd972b8977aa280ddaa Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Wed, 18 Feb 2026 07:40:59 +0800 Subject: [PATCH 38/40] update vscode settings --- .vscode/settings.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 5e897d6..c36317c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -24,9 +24,10 @@ // use LF line endings "files.eol": "\n", - // disable prettier & eslint + // disable prettier & eslint for oxc + oxfmt "prettier.enable": false, "eslint.enable": false, + "oxc.enable": true, // type-aware linting "oxc.typeAware": true, From 593863ae6ef1b8ede12bc3908db400b8dbac0e30 Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Wed, 18 Feb 2026 20:33:07 +0800 Subject: [PATCH 39/40] import protection --- apps/web/.env.example | 4 +- packages/auth/src/auth.ts | 78 +++++++++++++++++++-------------------- packages/db/package.json | 3 ++ packages/db/src/index.ts | 1 + pnpm-workspace.yaml | 14 +++---- 5 files changed, 50 insertions(+), 50 deletions(-) diff --git a/apps/web/.env.example b/apps/web/.env.example index 0d4ceac..bc209a4 100644 --- a/apps/web/.env.example +++ b/apps/web/.env.example @@ -14,5 +14,5 @@ SERVER_GOOGLE_CLIENT_ID= SERVER_GOOGLE_CLIENT_SECRET= # NOTE: -# In your OAuth2 apps, set callback/redirect URIs to`http://localhost:3000/api/auth/callback/` -# e.g. http://localhost:3000/api/auth/callback/github \ No newline at end of file +# In your OAuth2 apps, set callback/redirect URIs to`http://localhost:5173/api/auth/callback/` +# e.g. http://localhost:5173/api/auth/callback/github \ No newline at end of file diff --git a/packages/auth/src/auth.ts b/packages/auth/src/auth.ts index 290ef5d..cb2e065 100644 --- a/packages/auth/src/auth.ts +++ b/packages/auth/src/auth.ts @@ -1,55 +1,51 @@ +import "@tanstack/react-start/server-only"; import { drizzleAdapter } from "@better-auth/drizzle-adapter/relations-v2"; import { db } from "@repo/db"; import * as schema from "@repo/db/schema"; -import { createServerOnlyFn } from "@tanstack/react-start"; import { betterAuth } from "better-auth/minimal"; import { tanstackStartCookies } from "better-auth/tanstack-start"; -const getAuthConfig = createServerOnlyFn(() => - betterAuth({ - baseURL: process.env.VITE_BASE_URL, - secret: process.env.SERVER_AUTH_SECRET, - telemetry: { - enabled: false, - }, - database: drizzleAdapter(db, { - provider: "pg", - schema, - }), +export const auth = betterAuth({ + baseURL: process.env.VITE_BASE_URL, + secret: process.env.SERVER_AUTH_SECRET, + telemetry: { + enabled: false, + }, + database: drizzleAdapter(db, { + provider: "pg", + schema, + }), - // https://www.better-auth.com/docs/integrations/tanstack#usage-tips - plugins: [tanstackStartCookies()], + // https://www.better-auth.com/docs/integrations/tanstack#usage-tips + plugins: [tanstackStartCookies()], - // https://www.better-auth.com/docs/concepts/session-management#session-caching - session: { - cookieCache: { - enabled: true, - maxAge: 5 * 60, // 5 minutes - }, + // https://www.better-auth.com/docs/concepts/session-management#session-caching + session: { + cookieCache: { + enabled: true, + maxAge: 5 * 60, // 5 minutes }, + }, - // https://www.better-auth.com/docs/concepts/oauth - socialProviders: { - github: { - clientId: process.env.SERVER_GITHUB_CLIENT_ID!, - clientSecret: process.env.SERVER_GITHUB_CLIENT_SECRET!, - }, - google: { - clientId: process.env.SERVER_GOOGLE_CLIENT_ID!, - clientSecret: process.env.SERVER_GOOGLE_CLIENT_SECRET!, - }, + // https://www.better-auth.com/docs/concepts/oauth + socialProviders: { + github: { + clientId: process.env.SERVER_GITHUB_CLIENT_ID!, + clientSecret: process.env.SERVER_GITHUB_CLIENT_SECRET!, }, - - // https://www.better-auth.com/docs/authentication/email-password - emailAndPassword: { - enabled: true, + google: { + clientId: process.env.SERVER_GOOGLE_CLIENT_ID!, + clientSecret: process.env.SERVER_GOOGLE_CLIENT_SECRET!, }, + }, - experimental: { - // https://www.better-auth.com/docs/adapters/drizzle#joins-experimental - joins: true, - }, - }), -); + // https://www.better-auth.com/docs/authentication/email-password + emailAndPassword: { + enabled: true, + }, -export const auth = getAuthConfig(); + experimental: { + // https://www.better-auth.com/docs/adapters/drizzle#joins-experimental + joins: true, + }, +}); diff --git a/packages/db/package.json b/packages/db/package.json index f1d16e4..788e965 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -21,5 +21,8 @@ "@types/node": "catalog:", "drizzle-kit": "catalog:", "typescript": "catalog:" + }, + "peerDependencies": { + "@tanstack/react-start": "catalog:" } } diff --git a/packages/db/src/index.ts b/packages/db/src/index.ts index a0e9ac0..1cda5d4 100644 --- a/packages/db/src/index.ts +++ b/packages/db/src/index.ts @@ -1,3 +1,4 @@ +import "@tanstack/react-start/server-only"; import { drizzle } from "drizzle-orm/postgres-js"; import postgres from "postgres"; diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 290f1e4..481d4b4 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -17,10 +17,10 @@ catalog: '@tanstack/react-form-start': ^1.28.3 '@tanstack/react-query': ^5.90.21 '@tanstack/react-query-devtools': ^5.91.3 - '@tanstack/react-router': ^1.160.2 - '@tanstack/react-router-devtools': ^1.160.2 - '@tanstack/react-router-ssr-query': ^1.160.2 - '@tanstack/react-start': ^1.160.2 + '@tanstack/react-router': ^1.161.1 + '@tanstack/react-router-devtools': ^1.161.1 + '@tanstack/react-router-ssr-query': ^1.161.1 + '@tanstack/react-start': ^1.161.1 '@types/node': ^24.10.13 '@types/react': ^19.2.14 '@types/react-dom': ^19.2.3 @@ -33,10 +33,10 @@ catalog: drizzle-kit: beta drizzle-orm: beta eslint-plugin-react-hooks: ^7.0.1 - eslint-plugin-turbo: ^2.8.9 + eslint-plugin-turbo: ^2.8.10 husky: ^9.1.7 lint-staged: ^16.2.7 - motion: ^12.34.1 + motion: ^12.34.2 nanoid: ^5.1.6 nitro: npm:nitro-nightly@latest oxfmt: ^0.33.0 @@ -50,7 +50,7 @@ catalog: tailwind-merge: ^3.4.1 tailwindcss: ^4.1.18 tsx: ^4.21.0 - turbo: ^2.8.9 + turbo: ^2.8.10 tw-animate-css: ^1.4.0 typescript: ^5.9.3 vite: ^8.0.0-beta.14 From 306947045d07eeaaddf7f5a82ebc7bd62308473c Mon Sep 17 00:00:00 2001 From: Nathaniel John Tampus Date: Wed, 18 Feb 2026 20:42:16 +0800 Subject: [PATCH 40/40] explicit port to 3000 --- README.md | 2 +- apps/web/.env.example | 6 +++--- apps/web/vite.config.ts | 3 +++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0c62851..30f558d 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ A minimal monorepo starter for 🏝️ TanStack Start. pnpm dev ``` - The development server should now be running at [http://localhost:5173](http://localhost:5173). + The development server should now be running at [http://localhost:3000](http://localhost:3000). > [!TIP] > If you want to run a local Postgres instance via Docker Compose with the dev server, you can use the [dev.sh](./dev.sh) script: diff --git a/apps/web/.env.example b/apps/web/.env.example index bc209a4..dd6de93 100644 --- a/apps/web/.env.example +++ b/apps/web/.env.example @@ -1,4 +1,4 @@ -VITE_BASE_URL=http://localhost:5173 +VITE_BASE_URL=http://localhost:3000 SERVER_DATABASE_URL="postgresql://postgres:password@localhost:5432/tanstarter" # You can also use Docker Compose to set up a local PostgreSQL database: @@ -14,5 +14,5 @@ SERVER_GOOGLE_CLIENT_ID= SERVER_GOOGLE_CLIENT_SECRET= # NOTE: -# In your OAuth2 apps, set callback/redirect URIs to`http://localhost:5173/api/auth/callback/` -# e.g. http://localhost:5173/api/auth/callback/github \ No newline at end of file +# In your OAuth2 apps, set callback/redirect URIs to`http://localhost:3000/api/auth/callback/` +# e.g. http://localhost:3000/api/auth/callback/github \ No newline at end of file diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index 782c5c2..744e752 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -9,6 +9,9 @@ export default defineConfig({ resolve: { tsconfigPaths: true, }, + server: { + port: 3000, + }, plugins: [ devtools(), tanstackStart(),