From 1d08e2aa93f335a486c01b105400a9c04cfcb43c Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Mon, 8 Jun 2026 21:14:38 -0700 Subject: [PATCH 1/4] perf(orm): speed up client type checking via options projection + variance annotations The `ClientContract` type graph was dominated by two type-checking costs on non-trivial schemas: 1. The inferred client `Options` literal (heavy `computedFields`/`procedures` function types) was threaded as a type argument into every model's `ModelOperations` (30+ instantiations). 2. TypeScript spent most of the time *measuring* variance of the large, recursive CRUD generics - measurement that comes back "unreliable" and is pure wasted work. Fixes: - Add `QueryRelevantOptions` and project `Options` to its query-relevant subset (`omit`/`slicing`) at the model-map fan-out, so the heavy literal stays out of the per-model types. - Add explicit variance annotations to `ModelOperations`, `CommonModelOperations`, `ZodSchemaFactory`, and the leaf CRUD arg/filter types so the checker skips the expensive (and unreliable) variance measurement. On the taskforge sample (34 models): ~2.78M -> ~0.95M type instantiations and ~4.4s -> ~1.6s check time (~66% / ~64%). Trade-off: `Options` is invariant on the model operations, so a client built with an explicit `omit`/`slicing` literal is no longer assignable to the bare `ClientContract` (default options). Schema-agnostic call sites that take `ClientContract` should widen via a cast; `proxy.ts` is updated accordingly. Co-Authored-By: Claude Opus 4.8 (1M context) --- package.json | 2 +- packages/cli/src/actions/proxy.ts | 5 +- packages/orm/package.json | 2 +- packages/orm/src/client/contract.ts | 47 +- packages/orm/src/client/crud-types.ts | 28 +- packages/orm/src/client/options.ts | 15 + packages/orm/src/client/zod/factory.ts | 2 +- pnpm-lock.yaml | 1241 ++++++--- pnpm-workspace.yaml | 1 + samples/sveltekit/package.json | 2 +- samples/taskforge/README.md | 101 + samples/taskforge/package.json | 31 + samples/taskforge/src/auth.ts | 36 + samples/taskforge/src/cli.ts | 264 ++ samples/taskforge/src/db.ts | 57 + samples/taskforge/src/seed.ts | 305 +++ samples/taskforge/tsconfig.json | 17 + samples/taskforge/zenstack/input.ts | 860 ++++++ samples/taskforge/zenstack/models.ts | 102 + samples/taskforge/zenstack/schema.ts | 3060 ++++++++++++++++++++++ samples/taskforge/zenstack/schema.zmodel | 805 ++++++ 21 files changed, 6627 insertions(+), 356 deletions(-) create mode 100644 samples/taskforge/README.md create mode 100644 samples/taskforge/package.json create mode 100644 samples/taskforge/src/auth.ts create mode 100755 samples/taskforge/src/cli.ts create mode 100644 samples/taskforge/src/db.ts create mode 100644 samples/taskforge/src/seed.ts create mode 100644 samples/taskforge/tsconfig.json create mode 100644 samples/taskforge/zenstack/input.ts create mode 100644 samples/taskforge/zenstack/models.ts create mode 100644 samples/taskforge/zenstack/schema.ts create mode 100644 samples/taskforge/zenstack/schema.zmodel diff --git a/package.json b/package.json index 8456e81df..f9e8c3e2b 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "prettier": "^3.5.3", "prisma": "catalog:", "tsdown": "^0.21.8", - "tsx": "^4.20.3", + "tsx": "catalog:", "turbo": "^2.5.4", "typescript": "catalog:", "typescript-eslint": "^8.34.1", diff --git a/packages/cli/src/actions/proxy.ts b/packages/cli/src/actions/proxy.ts index 54c29c0ab..5e7dd845d 100644 --- a/packages/cli/src/actions/proxy.ts +++ b/packages/cli/src/actions/proxy.ts @@ -104,7 +104,10 @@ export async function run(options: Options) { throw new CliError(`Failed to connect to the database: ${err instanceof Error ? err.message : String(err)}`); } - startServer(db, schemaModule.schema, options); + // `db` carries a precise options literal (omit, log, etc.); `startServer` only needs a + // schema-agnostic `ClientContract`. Those differ in their (invariant) `Options` + // type argument, so widen explicitly - the proxy doesn't rely on option-specific typing. + startServer(db as unknown as ClientContract, schemaModule.schema, options); } function evaluateUrl(schemaUrl: ConfigExpr) { diff --git a/packages/orm/package.json b/packages/orm/package.json index ce62edc31..9a97a4406 100644 --- a/packages/orm/package.json +++ b/packages/orm/package.json @@ -158,7 +158,7 @@ "@zenstackhq/tsdown-config": "workspace:*", "@zenstackhq/typescript-config": "workspace:*", "@zenstackhq/vitest-config": "workspace:*", - "tsx": "^4.19.2", + "tsx": "catalog:", "zod": "^4.1.0" }, "funding": "https://github.com/sponsors/zenstackhq" diff --git a/packages/orm/src/client/contract.ts b/packages/orm/src/client/contract.ts index f9a8aeae4..e565ae1f8 100644 --- a/packages/orm/src/client/contract.ts +++ b/packages/orm/src/client/contract.ts @@ -20,7 +20,7 @@ import type { TypeDefResult, } from './crud-types'; import type { Diagnostics } from './diagnostics'; -import type { ClientOptions, QueryOptions } from './options'; +import type { ClientOptions, QueryOptions, QueryRelevantOptions } from './options'; import type { ExtClientMembersBase, ExtQueryArgsBase, @@ -63,6 +63,10 @@ export const ExtResultMarker: unique symbol = Symbol('zenstack.client.extResult' /** * ZenStack client interface. + * + * Note: this alias resolves to an intersection, so it cannot carry variance annotations itself + * (TS2637). It doesn't need them - measuring its variance recurses into {@link ModelOperations}, + * whose annotations short-circuit the expensive cascade. See {@link CommonModelOperations}. */ export type ClientContract< Schema extends SchemaDef, @@ -270,10 +274,13 @@ export type ClientContract< */ get $diagnostics(): Promise; } & { - [Key in GetSlicedModels as Uncapitalize]: ModelOperations< + // Project `Options` to its query-relevant subset before fanning out across every model. This + // strips the heavy `computedFields`/`procedures` function types (never read by these types) so + // the 30+ `ModelOperations` instantiations stay cheap. See {@link QueryRelevantOptions}. + [Key in GetSlicedModels> as Uncapitalize]: ModelOperations< Schema, Key, - Options, + QueryRelevantOptions, ExtQueryArgs, ExtResult >; @@ -342,7 +349,7 @@ type SliceOperations< T extends Record, Schema extends SchemaDef, Model extends GetModels, - Options extends ClientOptions, + Options extends QueryOptions, > = Omit< { // keep only operations included by slicing options @@ -419,12 +426,21 @@ export type AllModelOperations< ): ZenStackPromise>; }); +// Explicit variance annotations bypass TypeScript's structural variance *measurement* for this +// large, deeply-recursive generic. Measurement here comes back "unreliable" (the type recurses +// across related models) and is pure wasted work - it dominated type-check time. The annotations +// below match the measured variance and let the checker skip that probing entirely. type CommonModelOperations< - Schema extends SchemaDef, - Model extends GetModels, - Options extends QueryOptions, - ExtQueryArgs extends ExtQueryArgsBase, - ExtResult extends ExtResultBase = {}, + in out Schema extends SchemaDef, + in out Model extends GetModels, + // `Options` is invariant (it is read for `omit`/`slicing` in both arg and result positions). + // Annotating it keeps the variance-measurement skip. Note: a client built with an explicit + // `omit`/`slicing` literal is then no longer assignable to the bare `ClientContract` + // (default options) - schema-agnostic call sites that take `ClientContract` should + // accept the client via a cast. This is a rare pattern and worth the type-check speedup. + in out Options extends QueryOptions, + in out ExtQueryArgs extends ExtQueryArgsBase, + out ExtResult extends ExtResultBase = {}, > = { /** * Returns a list of entities. @@ -955,12 +971,15 @@ type CommonModelOperations< export type OperationsRequiringCreate = 'create' | 'createMany' | 'createManyAndReturn' | 'upsert'; +// See the note on `CommonModelOperations` - explicit variance annotations skip the expensive, +// "unreliable" variance measurement of this recursive type. export type ModelOperations< - Schema extends SchemaDef, - Model extends GetModels, - Options extends ClientOptions = ClientOptions, - ExtQueryArgs extends ExtQueryArgsBase = {}, - ExtResult extends ExtResultBase = {}, + in out Schema extends SchemaDef, + in out Model extends GetModels, + // `Options` is invariant - see the note on {@link CommonModelOperations}. + in out Options extends QueryOptions = ClientOptions, + in out ExtQueryArgs extends ExtQueryArgsBase = {}, + out ExtResult extends ExtResultBase = {}, > = SliceOperations, Schema, Model, Options>; //#endregion diff --git a/packages/orm/src/client/crud-types.ts b/packages/orm/src/client/crud-types.ts index 3ed16e8a6..81aea80d5 100644 --- a/packages/orm/src/client/crud-types.ts +++ b/packages/orm/src/client/crud-types.ts @@ -1324,9 +1324,9 @@ export type SelectSubset = { : {}); type ToManyRelationFilter< - Schema extends SchemaDef, - Model extends GetModels, - Field extends RelationFields, + in out Schema extends SchemaDef, + in out Model extends GetModels, + in out Field extends RelationFields, Options extends QueryOptions, > = { every?: WhereInput, Options>; @@ -1461,8 +1461,8 @@ type FilterArgs, Optio }; type SortAndTakeArgs< - Schema extends SchemaDef, - Model extends GetModels, + in out Schema extends SchemaDef, + in out Model extends GetModels, Options extends QueryOptions, > = { /** @@ -1844,9 +1844,9 @@ export type UpdateManyAndReturnArgs< ExtractExtQueryArgs; type UpdateManyPayload< - Schema extends SchemaDef, - Model extends GetModels, - Options extends QueryOptions = QueryOptions, + in out Schema extends SchemaDef, + in out Model extends GetModels, + out Options extends QueryOptions = QueryOptions, Without extends string = never, > = { /** @@ -2106,9 +2106,9 @@ type ToManyRelationUpdateInput< >; type ToOneRelationUpdateInput< - Schema extends SchemaDef, - Model extends GetModels, - Field extends RelationFields, + in out Schema extends SchemaDef, + in out Model extends GetModels, + in out Field extends RelationFields, Options extends QueryOptions, > = Omit< { @@ -2356,9 +2356,9 @@ type AggCommonOutput = Input extends true // #region GroupBy type GroupByHaving< - Schema extends SchemaDef, - Model extends GetModels, - Options extends QueryOptions = QueryOptions, + in out Schema extends SchemaDef, + in out Model extends GetModels, + out Options extends QueryOptions = QueryOptions, > = Omit, '$expr'>; export type GroupByArgs< diff --git a/packages/orm/src/client/options.ts b/packages/orm/src/client/options.ts index 136c4928b..d70cc6120 100644 --- a/packages/orm/src/client/options.ts +++ b/packages/orm/src/client/options.ts @@ -156,6 +156,21 @@ export type QueryOptions = { slicing?: SlicingOptions; }; +/** + * Projects a (typically inferred) client options type down to only the members that influence + * ORM typing - the {@link QueryOptions} fields (`omit`, `allowQueryTimeOmitOverride`, `slicing`). + * + * The full options object inferred at `new ZenStackClient(...)` carries heavy function types for + * `computedFields` and `procedures`. Those are never read by the model/operation types, but if the + * raw options type is fanned out across every model's `ModelOperations` instantiation (30+ for a + * typical schema) it inflates type checking dramatically. Projecting to the query-relevant subset + * before the fan-out keeps the per-model types cheap while preserving full options on `$options`. + */ +export type QueryRelevantOptions = Pick< + Options, + Extract> +>; + /** * ZenStack client options. */ diff --git a/packages/orm/src/client/zod/factory.ts b/packages/orm/src/client/zod/factory.ts index 5c39946e6..baf47539b 100644 --- a/packages/orm/src/client/zod/factory.ts +++ b/packages/orm/src/client/zod/factory.ts @@ -129,7 +129,7 @@ export type CreateSchemaOptions = { * Factory class responsible for creating and caching Zod schemas for ORM input validation. */ export class ZodSchemaFactory< - Schema extends SchemaDef, + in out Schema extends SchemaDef, Options extends ClientOptions = ClientOptions, ExtQueryArgs extends ExtQueryArgsBase = {}, > { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dd01fe34b..0a13a2831 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,6 +84,9 @@ catalogs: ts-pattern: specifier: ^5.7.1 version: 5.7.1 + tsx: + specifier: ^4.22.0 + version: 4.22.4 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -115,7 +118,7 @@ importers: version: 20.19.24 '@vitest/coverage-v8': specifier: ^4.0.16 - version: 4.0.16(vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0)) + version: 4.0.16(vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.0)) eslint: specifier: ~9.29.0 version: 9.29.0(jiti@2.6.1) @@ -135,8 +138,8 @@ importers: specifier: ^0.21.8 version: 0.21.8(typescript@6.0.3)(vue-tsc@3.2.5(typescript@6.0.3)) tsx: - specifier: ^4.20.3 - version: 4.20.3 + specifier: 'catalog:' + version: 4.22.4 turbo: specifier: ^2.5.4 version: 2.5.4 @@ -148,7 +151,7 @@ importers: version: 8.34.1(eslint@9.29.0(jiti@2.6.1))(typescript@6.0.3) vitest: specifier: ^4.0.14 - version: 4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + version: 4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.0) yaml: specifier: ^2.8.0 version: 2.8.0 @@ -170,10 +173,10 @@ importers: devDependencies: '@better-auth/cli': specifier: 1.4.19 - version: 1.4.19(@better-fetch/fetch@1.1.21)(@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(@types/better-sqlite3@7.6.13)(@types/sql.js@1.4.9)(better-call@1.1.8(zod@4.3.6))(bun-types@1.3.3)(jose@6.1.2)(kysely@0.29.0)(magicast@0.5.1)(mysql2@3.16.1)(nanostores@1.0.1)(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sql.js@1.13.0)(svelte@5.53.5)(vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) + version: 1.4.19(@better-fetch/fetch@1.1.21)(@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(@types/better-sqlite3@7.6.13)(@types/sql.js@1.4.9)(better-call@1.1.8(zod@4.3.6))(bun-types@1.3.3)(jose@6.2.3)(kysely@0.29.0)(magicast@0.5.1)(mysql2@3.16.1)(nanostores@1.3.0)(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sql.js@1.13.0)(svelte@5.53.5)(vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) '@better-auth/core': specifier: 1.4.19 - version: 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.2)(kysely@0.29.0)(nanostores@1.0.1) + version: 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0) '@types/tmp': specifier: 'catalog:' version: 0.2.6 @@ -194,7 +197,7 @@ importers: version: link:../../config/vitest-config better-auth: specifier: 1.4.19 - version: 1.4.19(1495ef1d827113360533150571904e77) + version: 1.4.19(aa46c218c2111ba42e6bbb995c1cdf9e) kysely: specifier: 'catalog:' version: 0.29.0 @@ -699,8 +702,8 @@ importers: specifier: workspace:* version: link:../config/vitest-config tsx: - specifier: ^4.19.2 - version: 4.20.3 + specifier: 'catalog:' + version: 4.22.4 zod: specifier: ^4.1.0 version: 4.1.12 @@ -870,7 +873,7 @@ importers: version: 6.0.0(openapi-types@12.1.3) '@sveltejs/kit': specifier: 'catalog:' - version: 2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + version: 2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) '@types/body-parser': specifier: ^1.19.6 version: 1.19.6 @@ -921,7 +924,7 @@ importers: version: 16.1.6(@babel/core@7.29.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) nuxt: specifier: 'catalog:' - version: 4.3.1(20bb9c9cac3d4d3ad27d57e07c1eb4f2) + version: 4.3.1(526b065509e6a4d54781a1030a9e863f) supertest: specifier: ^7.1.4 version: 7.1.4 @@ -1095,7 +1098,7 @@ importers: dependencies: '@tailwindcss/vite': specifier: ^4.1.18 - version: 4.1.18(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + version: 4.1.18(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) '@tanstack/vue-query': specifier: 'catalog:' version: 5.90.2(vue@3.5.22(typescript@6.0.3)) @@ -1119,7 +1122,7 @@ importers: version: 2.0.8 nuxt: specifier: 'catalog:' - version: 4.3.1(f6c7dcf4eb9de64f6cb5e0db74766190) + version: 4.3.1(95266d6f061a460ce208abe1df07947b) tailwindcss: specifier: ^4.1.18 version: 4.1.18 @@ -1203,16 +1206,16 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^7.0.0 - version: 7.0.0(@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))) + version: 7.0.0(@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))) '@sveltejs/kit': specifier: 'catalog:' - version: 2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + version: 2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) '@sveltejs/vite-plugin-svelte': specifier: ^6.2.1 - version: 6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + version: 6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) '@tailwindcss/vite': specifier: ^4.1.17 - version: 4.1.18(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + version: 4.1.18(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) '@types/better-sqlite3': specifier: 'catalog:' version: 7.6.13 @@ -1235,14 +1238,48 @@ importers: specifier: ^4.1.17 version: 4.1.18 tsx: - specifier: ^4.19.2 - version: 4.20.3 + specifier: 'catalog:' + version: 4.22.4 typescript: specifier: ^5.9.3 version: 5.9.3 vite: specifier: ^7.2.6 - version: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + version: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + + samples/taskforge: + dependencies: + '@zenstackhq/better-auth': + specifier: workspace:* + version: link:../../packages/auth-adapters/better-auth + '@zenstackhq/orm': + specifier: workspace:* + version: link:../../packages/orm + '@zenstackhq/schema': + specifier: workspace:* + version: link:../../packages/schema + better-auth: + specifier: ^1.4.21 + version: 1.6.15(261c4d1149703dc38709f1a99ea83b5c) + better-sqlite3: + specifier: 'catalog:' + version: 12.5.0 + commander: + specifier: ^14.0.2 + version: 14.0.3 + devDependencies: + '@better-auth/cli': + specifier: ^1.4.21 + version: 1.4.21(@better-fetch/fetch@1.1.21)(@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(@types/better-sqlite3@7.6.13)(@types/sql.js@1.4.9)(better-call@1.1.8(zod@4.3.6))(bun-types@1.3.3)(jose@6.2.3)(kysely@0.29.0)(magicast@0.5.1)(mysql2@3.16.1)(nanostores@1.3.0)(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sql.js@1.13.0)(svelte@5.53.5)(vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) + '@types/better-sqlite3': + specifier: 'catalog:' + version: 7.6.13 + '@types/node': + specifier: 'catalog:' + version: 20.19.24 + '@zenstackhq/cli': + specifier: workspace:* + version: link:../../packages/cli tests/e2e: dependencies: @@ -1715,6 +1752,10 @@ packages: resolution: {integrity: sha512-kH1e+F8sPwcfEuhyNzFt3rdLo5SBTfw7a9m/hyMv1E7tk/yfsqOZRL0I5GR+Fkm0FJ7SoVA4LJREFV3S0Px8iA==} hasBin: true + '@better-auth/cli@1.4.21': + resolution: {integrity: sha512-bKEa8BupnZxNjLk9ZDntvgQGm5jogeE2wHdMbYifhet3GTyxgDi6pXoOK8+aqHYQGg1C3OALi9hVVWnrv7JJWQ==} + hasBin: true + '@better-auth/core@1.4.19': resolution: {integrity: sha512-uADLHG1jc5BnEJi7f6ijUN5DmPPRSj++7m/G19z3UqA3MVCo4Y4t1MMa4IIxLCqGDFv22drdfxescgW+HnIowA==} peerDependencies: @@ -1725,14 +1766,78 @@ packages: kysely: ^0.28.5 nanostores: ^1.0.1 + '@better-auth/drizzle-adapter@1.6.15': + resolution: {integrity: sha512-+ho2RozN6cZmCN+6XkZd/ec5iolVlefgInQ7znJ18qRPbgllHxdyu9tGrgKZyEsXSCyqAa6wi5Yb4hd3WZmTNQ==} + peerDependencies: + '@better-auth/core': 1.4.19 + '@better-auth/utils': 0.4.1 + drizzle-orm: ^0.45.2 + peerDependenciesMeta: + drizzle-orm: + optional: true + + '@better-auth/kysely-adapter@1.6.15': + resolution: {integrity: sha512-E29Sugm+DWRK4oQNBPrjPA4kBYiKy2bBtX1arIlkuyAB9A1BEb4Xn+8t7wlNIF5eFcxpkFZ3F80ceSpWDSYU0Q==} + peerDependencies: + '@better-auth/core': 1.4.19 + '@better-auth/utils': 0.4.1 + kysely: ^0.28.17 || ^0.29.0 + peerDependenciesMeta: + kysely: + optional: true + + '@better-auth/memory-adapter@1.6.15': + resolution: {integrity: sha512-BRE5Ft0Tn5thOPjCmyXHge7kOI/paLybaKDU+Hzg24DZMU6JvWooYWzvf52r1viDbxq5tz0G97iyaH4bouDyug==} + peerDependencies: + '@better-auth/core': 1.4.19 + '@better-auth/utils': 0.4.1 + + '@better-auth/mongo-adapter@1.6.15': + resolution: {integrity: sha512-r0X9AtFhwDeOU1KMP9kZ5NeV0O3TSFzn8+uidaH+aicy2e1dNUsd9nPYrozEloSxdA2ZOnv5gD4jzH7HPeKkUQ==} + peerDependencies: + '@better-auth/core': 1.4.19 + '@better-auth/utils': 0.4.1 + mongodb: ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + mongodb: + optional: true + + '@better-auth/prisma-adapter@1.6.15': + resolution: {integrity: sha512-pUOlIUnpMu2l8C2ytgu46+OoOr3LZ+aLpJMFRGIPdnWl1BF2co2YaoZPT3+ZBu1Lzm0FrBN1ZRCAzZbkFoeIAQ==} + peerDependencies: + '@better-auth/core': 1.4.19 + '@better-auth/utils': 0.4.1 + '@prisma/client': ^5.0.0 || ^6.0.0 || ^7.0.0 + prisma: ^5.0.0 || ^6.0.0 || ^7.0.0 + peerDependenciesMeta: + '@prisma/client': + optional: true + prisma: + optional: true + '@better-auth/telemetry@1.4.19': resolution: {integrity: sha512-ApGNS7olCTtDpKF8Ow3Z+jvFAirOj7c4RyFUpu8axklh3mH57ndpfUAUjhgA8UVoaaH/mnm/Tl884BlqiewLyw==} peerDependencies: '@better-auth/core': 1.4.19 + '@better-auth/telemetry@1.4.21': + resolution: {integrity: sha512-LX+FGMZnhR2KQZ0idHH1+UwlXvkOl6P8w3Gne4TtjvUCt3QjG9FKIuP9JD3MAmEEkwGt0SoAPHPJEGTjUl3ydg==} + peerDependencies: + '@better-auth/core': 1.4.19 + + '@better-auth/telemetry@1.6.15': + resolution: {integrity: sha512-eoFlUPVrVXLML9saHD11OSKKSRCAYETgRgBW4vQF3Y6pCgmThKD9oehYk3kkb/FsRgfqmsocmvAFqsiyjPIygg==} + peerDependencies: + '@better-auth/core': 1.4.19 + '@better-auth/utils': 0.4.1 + '@better-fetch/fetch': 1.1.21 + '@better-auth/utils@0.3.0': resolution: {integrity: sha512-W+Adw6ZA6mgvnSnhOki270rwJ42t4XzSK6YWGF//BbVXL6SwCLWfyzBc1lN2m/4RM28KubdBKQ4X5VMoLRNPQw==} + '@better-auth/utils@0.4.1': + resolution: {integrity: sha512-SZBPRPF3z0nBvE5ygOkxae35wnnXPRShmqFo78S+qslLeFoPu/pMgnXAuNKFMMybac3tiLaVg1e3MQW5MC+1iA==} + '@better-fetch/fetch@1.1.21': resolution: {integrity: sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==} @@ -1868,12 +1973,6 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@esbuild/aix-ppc64@0.25.5': - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.27.2': resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} @@ -1886,11 +1985,11 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.5': - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} + '@esbuild/aix-ppc64@0.28.0': + resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} engines: {node: '>=18'} - cpu: [arm64] - os: [android] + cpu: [ppc64] + os: [aix] '@esbuild/android-arm64@0.27.2': resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} @@ -1904,10 +2003,10 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.5': - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} + '@esbuild/android-arm64@0.28.0': + resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} engines: {node: '>=18'} - cpu: [arm] + cpu: [arm64] os: [android] '@esbuild/android-arm@0.27.2': @@ -1922,10 +2021,10 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.5': - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} + '@esbuild/android-arm@0.28.0': + resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm] os: [android] '@esbuild/android-x64@0.27.2': @@ -1940,11 +2039,11 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.5': - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} + '@esbuild/android-x64@0.28.0': + resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] + cpu: [x64] + os: [android] '@esbuild/darwin-arm64@0.27.2': resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} @@ -1958,10 +2057,10 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.5': - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} + '@esbuild/darwin-arm64@0.28.0': + resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.27.2': @@ -1976,11 +2075,11 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.5': - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} + '@esbuild/darwin-x64@0.28.0': + resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] + cpu: [x64] + os: [darwin] '@esbuild/freebsd-arm64@0.27.2': resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} @@ -1994,10 +2093,10 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.5': - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} + '@esbuild/freebsd-arm64@0.28.0': + resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.27.2': @@ -2012,11 +2111,11 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.5': - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} + '@esbuild/freebsd-x64@0.28.0': + resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} engines: {node: '>=18'} - cpu: [arm64] - os: [linux] + cpu: [x64] + os: [freebsd] '@esbuild/linux-arm64@0.27.2': resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} @@ -2030,10 +2129,10 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.5': - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} + '@esbuild/linux-arm64@0.28.0': + resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} engines: {node: '>=18'} - cpu: [arm] + cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.27.2': @@ -2048,10 +2147,10 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.5': - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} + '@esbuild/linux-arm@0.28.0': + resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} engines: {node: '>=18'} - cpu: [ia32] + cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.27.2': @@ -2066,10 +2165,10 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.5': - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} + '@esbuild/linux-ia32@0.28.0': + resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} engines: {node: '>=18'} - cpu: [loong64] + cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.27.2': @@ -2084,10 +2183,10 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.5': - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} + '@esbuild/linux-loong64@0.28.0': + resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} engines: {node: '>=18'} - cpu: [mips64el] + cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.27.2': @@ -2102,10 +2201,10 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.5': - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} + '@esbuild/linux-mips64el@0.28.0': + resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} engines: {node: '>=18'} - cpu: [ppc64] + cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.27.2': @@ -2120,10 +2219,10 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.5': - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} + '@esbuild/linux-ppc64@0.28.0': + resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} engines: {node: '>=18'} - cpu: [riscv64] + cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.27.2': @@ -2138,10 +2237,10 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.5': - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} + '@esbuild/linux-riscv64@0.28.0': + resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} engines: {node: '>=18'} - cpu: [s390x] + cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.27.2': @@ -2156,10 +2255,10 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.5': - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} + '@esbuild/linux-s390x@0.28.0': + resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} engines: {node: '>=18'} - cpu: [x64] + cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.27.2': @@ -2174,11 +2273,11 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.5': - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} + '@esbuild/linux-x64@0.28.0': + resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] + cpu: [x64] + os: [linux] '@esbuild/netbsd-arm64@0.27.2': resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} @@ -2192,10 +2291,10 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.5': - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} + '@esbuild/netbsd-arm64@0.28.0': + resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.27.2': @@ -2210,11 +2309,11 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.5': - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} + '@esbuild/netbsd-x64@0.28.0': + resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] + cpu: [x64] + os: [netbsd] '@esbuild/openbsd-arm64@0.27.2': resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} @@ -2228,10 +2327,10 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.5': - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} + '@esbuild/openbsd-arm64@0.28.0': + resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} engines: {node: '>=18'} - cpu: [x64] + cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.27.2': @@ -2246,6 +2345,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.28.0': + resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openharmony-arm64@0.27.2': resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} engines: {node: '>=18'} @@ -2258,11 +2363,11 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.5': - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} + '@esbuild/openharmony-arm64@0.28.0': + resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} engines: {node: '>=18'} - cpu: [x64] - os: [sunos] + cpu: [arm64] + os: [openharmony] '@esbuild/sunos-x64@0.27.2': resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} @@ -2276,11 +2381,11 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.5': - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} + '@esbuild/sunos-x64@0.28.0': + resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} engines: {node: '>=18'} - cpu: [arm64] - os: [win32] + cpu: [x64] + os: [sunos] '@esbuild/win32-arm64@0.27.2': resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} @@ -2294,10 +2399,10 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.5': - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} + '@esbuild/win32-arm64@0.28.0': + resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} engines: {node: '>=18'} - cpu: [ia32] + cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.27.2': @@ -2312,10 +2417,10 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.5': - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} + '@esbuild/win32-ia32@0.28.0': + resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} engines: {node: '>=18'} - cpu: [x64] + cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.27.2': @@ -2330,6 +2435,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.28.0': + resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2677,6 +2788,10 @@ packages: resolution: {integrity: sha512-xHK3XHPUW8DTAobU+G0XT+/w+JLM7/8k1UFdB5xg/zTFPnFCobhftzw8wl4Lw2aq/Rvir5pxfZV5fEazmeCJ2g==} engines: {node: '>= 20.19.0'} + '@noble/ciphers@2.2.0': + resolution: {integrity: sha512-Z6pjIZ/8IJcCGzb2S/0Px5J81yij85xASuk1teLNeg75bfT07MV3a/O2Mtn1I2se43k3lkVEcFaR10N4cgQcZA==} + engines: {node: '>= 20.19.0'} + '@noble/hashes@1.7.1': resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==} engines: {node: ^14.21.3 || >=16} @@ -4812,6 +4927,130 @@ packages: vue: optional: true + better-auth@1.4.21: + resolution: {integrity: sha512-qdrIZS7xnGF2HPBV5wYNPWTkPojhauOOjz1+MhLvwFy+zXpgLofQmWsI5I9DY+ef845NKt93XcgpyAc4RPPT9A==} + 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-auth@1.6.15: + resolution: {integrity: sha512-0nuQuEru3ZrLF+9xFUuN3llAmR+6gHLtLunoXaZxB9lXGjSmfBcc6SZUgYq4DfzugPnLvdnzYazsyprZFSFC4Q==} + 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.45.2 + 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.1.8: resolution: {integrity: sha512-XMQ2rs6FNXasGNfMjzbyroSwKwYbZ/T3IxruSS6U2MJRsSYh3wYtG3o6H00ZlKZ/C/UPOAD97tqgQJNsxyeTXw==} peerDependencies: @@ -4820,6 +5059,14 @@ packages: zod: optional: true + better-call@1.3.5: + resolution: {integrity: sha512-kOFJkBP7utAQLEYrobZm3vkTH8mXq5GNgvjc5/XEST1ilVHaxXUXfeDeFlqoETMtyqS4+3/h4ONX2i++ebZrvA==} + peerDependencies: + zod: ^4.0.0 + peerDependenciesMeta: + zod: + optional: true + better-sqlite3@12.5.0: resolution: {integrity: sha512-WwCZ/5Diz7rsF29o27o0Gcc1Du+l7Zsv7SYtVPG0X3G/uUI1LqdxrQI7c9Hs2FWpqXXERjW9hp6g3/tH7DlVKg==} engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} @@ -5062,6 +5309,10 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -5650,11 +5901,6 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.27.2: resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} engines: {node: '>=18'} @@ -5665,6 +5911,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.28.0: + resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -6547,6 +6798,9 @@ packages: jose@6.1.2: resolution: {integrity: sha512-MpcPtHLE5EmztuFIqB0vzHAWJPpmN1E6L4oo+kze56LIs3MyXIj9ZHMDxqOvkP38gBR7K1v3jqd4WU2+nrfONQ==} + jose@6.2.3: + resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -7046,6 +7300,10 @@ packages: resolution: {integrity: sha512-kNZ9xnoJYKg/AfxjrVL4SS0fKX++4awQReGqWnwTRHxeHGZ1FJFVgTqr/eMrNQdp0Tz7M7tG/TDaX8QfHDwVCw==} engines: {node: ^20.0.0 || >=22.0.0} + nanostores@1.3.0: + resolution: {integrity: sha512-XPUa/jz+P1oJvN9VBxw4L9MtdFfaH3DAryqPssqhb2kXjmb9npz0dly6rCsgFWOPr4Yg9mTfM3MDZgZZ+7A3lA==} + engines: {node: ^20.0.0 || >=22.0.0} + nanotar@0.2.0: resolution: {integrity: sha512-9ca1h0Xjvo9bEkE4UOxgAzLV0jHKe6LMaxo37ND2DAhhAtd0j8pR1Wxz+/goMrZO8AEZTWCmyaOsFI/W5AdpCQ==} @@ -7382,9 +7640,6 @@ packages: perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - perfect-debounce@2.0.0: - resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} - perfect-debounce@2.1.0: resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} @@ -8638,8 +8893,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.20.3: - resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} + tsx@4.22.4: + resolution: {integrity: sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==} engines: {node: '>=18.0.0'} hasBin: true @@ -9811,19 +10066,91 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@better-auth/cli@1.4.19(@better-fetch/fetch@1.1.21)(@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(@types/better-sqlite3@7.6.13)(@types/sql.js@1.4.9)(better-call@1.1.8(zod@4.3.6))(bun-types@1.3.3)(jose@6.1.2)(kysely@0.29.0)(magicast@0.5.1)(mysql2@3.16.1)(nanostores@1.0.1)(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sql.js@1.13.0)(svelte@5.53.5)(vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3))': + '@better-auth/cli@1.4.19(@better-fetch/fetch@1.1.21)(@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(@types/better-sqlite3@7.6.13)(@types/sql.js@1.4.9)(better-call@1.1.8(zod@4.3.6))(bun-types@1.3.3)(jose@6.2.3)(kysely@0.29.0)(magicast@0.5.1)(mysql2@3.16.1)(nanostores@1.3.0)(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sql.js@1.13.0)(svelte@5.53.5)(vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3))': + dependencies: + '@babel/core': 7.29.0 + '@babel/preset-react': 7.28.5(@babel/core@7.29.0) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0) + '@better-auth/telemetry': 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0)) + '@better-auth/utils': 0.3.0 + '@clack/prompts': 0.11.0 + '@mrleebo/prisma-ast': 0.13.1 + '@prisma/client': 5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)) + '@types/pg': 8.16.0 + better-auth: 1.4.19(aa46c218c2111ba42e6bbb995c1cdf9e) + better-sqlite3: 12.5.0 + c12: 3.3.3(magicast@0.5.1) + chalk: 5.6.2 + commander: 12.1.0 + dotenv: 17.2.3 + drizzle-orm: 0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0) + open: 10.2.0 + pg: 8.16.3 + prettier: 3.8.1 + prompts: 2.4.2 + semver: 7.7.4 + yocto-spinner: 0.2.3 + zod: 4.3.6 + transitivePeerDependencies: + - '@aws-sdk/client-rds-data' + - '@better-fetch/fetch' + - '@cloudflare/workers-types' + - '@electric-sql/pglite' + - '@libsql/client' + - '@libsql/client-wasm' + - '@lynx-js/react' + - '@neondatabase/serverless' + - '@op-engineering/op-sqlite' + - '@opentelemetry/api' + - '@planetscale/database' + - '@sveltejs/kit' + - '@tanstack/react-start' + - '@tanstack/solid-start' + - '@tidbcloud/serverless' + - '@types/better-sqlite3' + - '@types/sql.js' + - '@vercel/postgres' + - '@xata.io/client' + - better-call + - bun-types + - drizzle-kit + - expo-sqlite + - gel + - jose + - knex + - kysely + - magicast + - mongodb + - mysql2 + - nanostores + - next + - pg-native + - postgres + - prisma + - react + - react-dom + - solid-js + - sql.js + - sqlite3 + - supports-color + - svelte + - vitest + - vue + + '@better-auth/cli@1.4.21(@better-fetch/fetch@1.1.21)(@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(@types/better-sqlite3@7.6.13)(@types/sql.js@1.4.9)(better-call@1.1.8(zod@4.3.6))(bun-types@1.3.3)(jose@6.2.3)(kysely@0.29.0)(magicast@0.5.1)(mysql2@3.16.1)(nanostores@1.3.0)(next@16.1.6(@babel/core@7.29.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sql.js@1.13.0)(svelte@5.53.5)(vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3))': dependencies: '@babel/core': 7.29.0 '@babel/preset-react': 7.28.5(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.2)(kysely@0.29.0)(nanostores@1.0.1) - '@better-auth/telemetry': 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.2)(kysely@0.29.0)(nanostores@1.0.1)) + '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0) + '@better-auth/telemetry': 1.4.21(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0)) '@better-auth/utils': 0.3.0 '@clack/prompts': 0.11.0 '@mrleebo/prisma-ast': 0.13.1 '@prisma/client': 5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)) '@types/pg': 8.16.0 - better-auth: 1.4.19(1495ef1d827113360533150571904e77) + better-auth: 1.4.21(261c4d1149703dc38709f1a99ea83b5c) better-sqlite3: 12.5.0 c12: 3.3.3(magicast@0.5.1) chalk: 5.6.2 @@ -9894,25 +10221,95 @@ snapshots: nanostores: 1.0.1 zod: 4.3.6 - '@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.2)(kysely@0.29.0)(nanostores@1.0.1)': + '@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.28.16)(nanostores@1.3.0)': dependencies: '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 '@standard-schema/spec': 1.0.0 better-call: 1.1.8(zod@4.3.6) - jose: 6.1.2 + jose: 6.2.3 + kysely: 0.28.16 + nanostores: 1.3.0 + zod: 4.3.6 + + '@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0)': + dependencies: + '@better-auth/utils': 0.3.0 + '@better-fetch/fetch': 1.1.21 + '@standard-schema/spec': 1.0.0 + better-call: 1.1.8(zod@4.3.6) + jose: 6.2.3 kysely: 0.29.0 - nanostores: 1.0.1 + nanostores: 1.3.0 + zod: 4.3.6 + + '@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0)': + dependencies: + '@better-auth/utils': 0.4.1 + '@better-fetch/fetch': 1.1.21 + '@standard-schema/spec': 1.0.0 + better-call: 1.1.8(zod@4.3.6) + jose: 6.2.3 + kysely: 0.29.0 + nanostores: 1.3.0 zod: 4.3.6 - '@better-auth/telemetry@1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.2)(kysely@0.29.0)(nanostores@1.0.1))': + '@better-auth/drizzle-adapter@1.6.15(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0))': + dependencies: + '@better-auth/core': 1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0) + '@better-auth/utils': 0.4.1 + optionalDependencies: + drizzle-orm: 0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0) + + '@better-auth/kysely-adapter@1.6.15(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.29.0)': + dependencies: + '@better-auth/core': 1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0) + '@better-auth/utils': 0.4.1 + optionalDependencies: + kysely: 0.29.0 + + '@better-auth/memory-adapter@1.6.15(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': + dependencies: + '@better-auth/core': 1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0) + '@better-auth/utils': 0.4.1 + + '@better-auth/mongo-adapter@1.6.15(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))(@better-auth/utils@0.4.1)': + dependencies: + '@better-auth/core': 1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0) + '@better-auth/utils': 0.4.1 + + '@better-auth/prisma-adapter@1.6.15(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))': + dependencies: + '@better-auth/core': 1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0) + '@better-auth/utils': 0.4.1 + optionalDependencies: + '@prisma/client': 5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)) + prisma: 6.19.0(magicast@0.5.1)(typescript@5.9.3) + + '@better-auth/telemetry@1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))': + dependencies: + '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0) + '@better-auth/utils': 0.3.0 + '@better-fetch/fetch': 1.1.21 + + '@better-auth/telemetry@1.4.21(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))': dependencies: - '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.2)(kysely@0.29.0)(nanostores@1.0.1) + '@better-auth/core': 1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 + '@better-auth/telemetry@1.6.15(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)': + dependencies: + '@better-auth/core': 1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0) + '@better-auth/utils': 0.4.1 + '@better-fetch/fetch': 1.1.21 + '@better-auth/utils@0.3.0': {} + '@better-auth/utils@0.4.1': + dependencies: + '@noble/hashes': 2.0.1 + '@better-fetch/fetch@1.1.21': {} '@bomb.sh/tab@0.0.12(cac@6.7.14)(citty@0.2.1)': @@ -10064,16 +10461,13 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.5': - optional: true - '@esbuild/aix-ppc64@0.27.2': optional: true '@esbuild/aix-ppc64@0.27.3': optional: true - '@esbuild/android-arm64@0.25.5': + '@esbuild/aix-ppc64@0.28.0': optional: true '@esbuild/android-arm64@0.27.2': @@ -10082,7 +10476,7 @@ snapshots: '@esbuild/android-arm64@0.27.3': optional: true - '@esbuild/android-arm@0.25.5': + '@esbuild/android-arm64@0.28.0': optional: true '@esbuild/android-arm@0.27.2': @@ -10091,7 +10485,7 @@ snapshots: '@esbuild/android-arm@0.27.3': optional: true - '@esbuild/android-x64@0.25.5': + '@esbuild/android-arm@0.28.0': optional: true '@esbuild/android-x64@0.27.2': @@ -10100,7 +10494,7 @@ snapshots: '@esbuild/android-x64@0.27.3': optional: true - '@esbuild/darwin-arm64@0.25.5': + '@esbuild/android-x64@0.28.0': optional: true '@esbuild/darwin-arm64@0.27.2': @@ -10109,7 +10503,7 @@ snapshots: '@esbuild/darwin-arm64@0.27.3': optional: true - '@esbuild/darwin-x64@0.25.5': + '@esbuild/darwin-arm64@0.28.0': optional: true '@esbuild/darwin-x64@0.27.2': @@ -10118,7 +10512,7 @@ snapshots: '@esbuild/darwin-x64@0.27.3': optional: true - '@esbuild/freebsd-arm64@0.25.5': + '@esbuild/darwin-x64@0.28.0': optional: true '@esbuild/freebsd-arm64@0.27.2': @@ -10127,7 +10521,7 @@ snapshots: '@esbuild/freebsd-arm64@0.27.3': optional: true - '@esbuild/freebsd-x64@0.25.5': + '@esbuild/freebsd-arm64@0.28.0': optional: true '@esbuild/freebsd-x64@0.27.2': @@ -10136,7 +10530,7 @@ snapshots: '@esbuild/freebsd-x64@0.27.3': optional: true - '@esbuild/linux-arm64@0.25.5': + '@esbuild/freebsd-x64@0.28.0': optional: true '@esbuild/linux-arm64@0.27.2': @@ -10145,7 +10539,7 @@ snapshots: '@esbuild/linux-arm64@0.27.3': optional: true - '@esbuild/linux-arm@0.25.5': + '@esbuild/linux-arm64@0.28.0': optional: true '@esbuild/linux-arm@0.27.2': @@ -10154,7 +10548,7 @@ snapshots: '@esbuild/linux-arm@0.27.3': optional: true - '@esbuild/linux-ia32@0.25.5': + '@esbuild/linux-arm@0.28.0': optional: true '@esbuild/linux-ia32@0.27.2': @@ -10163,7 +10557,7 @@ snapshots: '@esbuild/linux-ia32@0.27.3': optional: true - '@esbuild/linux-loong64@0.25.5': + '@esbuild/linux-ia32@0.28.0': optional: true '@esbuild/linux-loong64@0.27.2': @@ -10172,7 +10566,7 @@ snapshots: '@esbuild/linux-loong64@0.27.3': optional: true - '@esbuild/linux-mips64el@0.25.5': + '@esbuild/linux-loong64@0.28.0': optional: true '@esbuild/linux-mips64el@0.27.2': @@ -10181,7 +10575,7 @@ snapshots: '@esbuild/linux-mips64el@0.27.3': optional: true - '@esbuild/linux-ppc64@0.25.5': + '@esbuild/linux-mips64el@0.28.0': optional: true '@esbuild/linux-ppc64@0.27.2': @@ -10190,7 +10584,7 @@ snapshots: '@esbuild/linux-ppc64@0.27.3': optional: true - '@esbuild/linux-riscv64@0.25.5': + '@esbuild/linux-ppc64@0.28.0': optional: true '@esbuild/linux-riscv64@0.27.2': @@ -10199,7 +10593,7 @@ snapshots: '@esbuild/linux-riscv64@0.27.3': optional: true - '@esbuild/linux-s390x@0.25.5': + '@esbuild/linux-riscv64@0.28.0': optional: true '@esbuild/linux-s390x@0.27.2': @@ -10208,7 +10602,7 @@ snapshots: '@esbuild/linux-s390x@0.27.3': optional: true - '@esbuild/linux-x64@0.25.5': + '@esbuild/linux-s390x@0.28.0': optional: true '@esbuild/linux-x64@0.27.2': @@ -10217,7 +10611,7 @@ snapshots: '@esbuild/linux-x64@0.27.3': optional: true - '@esbuild/netbsd-arm64@0.25.5': + '@esbuild/linux-x64@0.28.0': optional: true '@esbuild/netbsd-arm64@0.27.2': @@ -10226,7 +10620,7 @@ snapshots: '@esbuild/netbsd-arm64@0.27.3': optional: true - '@esbuild/netbsd-x64@0.25.5': + '@esbuild/netbsd-arm64@0.28.0': optional: true '@esbuild/netbsd-x64@0.27.2': @@ -10235,7 +10629,7 @@ snapshots: '@esbuild/netbsd-x64@0.27.3': optional: true - '@esbuild/openbsd-arm64@0.25.5': + '@esbuild/netbsd-x64@0.28.0': optional: true '@esbuild/openbsd-arm64@0.27.2': @@ -10244,7 +10638,7 @@ snapshots: '@esbuild/openbsd-arm64@0.27.3': optional: true - '@esbuild/openbsd-x64@0.25.5': + '@esbuild/openbsd-arm64@0.28.0': optional: true '@esbuild/openbsd-x64@0.27.2': @@ -10253,13 +10647,16 @@ snapshots: '@esbuild/openbsd-x64@0.27.3': optional: true + '@esbuild/openbsd-x64@0.28.0': + optional: true + '@esbuild/openharmony-arm64@0.27.2': optional: true '@esbuild/openharmony-arm64@0.27.3': optional: true - '@esbuild/sunos-x64@0.25.5': + '@esbuild/openharmony-arm64@0.28.0': optional: true '@esbuild/sunos-x64@0.27.2': @@ -10268,7 +10665,7 @@ snapshots: '@esbuild/sunos-x64@0.27.3': optional: true - '@esbuild/win32-arm64@0.25.5': + '@esbuild/sunos-x64@0.28.0': optional: true '@esbuild/win32-arm64@0.27.2': @@ -10277,7 +10674,7 @@ snapshots: '@esbuild/win32-arm64@0.27.3': optional: true - '@esbuild/win32-ia32@0.25.5': + '@esbuild/win32-arm64@0.28.0': optional: true '@esbuild/win32-ia32@0.27.2': @@ -10286,7 +10683,7 @@ snapshots: '@esbuild/win32-ia32@0.27.3': optional: true - '@esbuild/win32-x64@0.25.5': + '@esbuild/win32-ia32@0.28.0': optional: true '@esbuild/win32-x64@0.27.2': @@ -10295,6 +10692,9 @@ snapshots: '@esbuild/win32-x64@0.27.3': optional: true + '@esbuild/win32-x64@0.28.0': + optional: true + '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@2.6.1))': dependencies: eslint: 9.29.0(jiti@2.6.1) @@ -10597,6 +10997,8 @@ snapshots: '@noble/ciphers@2.0.1': {} + '@noble/ciphers@2.2.0': {} + '@noble/hashes@1.7.1': {} '@noble/hashes@2.0.1': {} @@ -10655,11 +11057,11 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))': + '@nuxt/devtools-kit@3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': dependencies: '@nuxt/kit': 4.3.1(magicast@0.5.1) execa: 8.0.1 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) transitivePeerDependencies: - magicast @@ -10674,12 +11076,12 @@ snapshots: prompts: 2.4.2 semver: 7.7.4 - '@nuxt/devtools@3.1.1(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3))': + '@nuxt/devtools@3.1.1(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3))': dependencies: - '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) '@nuxt/devtools-wizard': 3.1.1 '@nuxt/kit': 4.3.1(magicast@0.5.1) - '@vue/devtools-core': 8.0.5(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) + '@vue/devtools-core': 8.0.5(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) '@vue/devtools-kit': 8.0.5 birpc: 2.9.0 consola: 3.4.2 @@ -10704,9 +11106,9 @@ snapshots: sirv: 3.0.2 structured-clone-es: 1.0.0 tinyglobby: 0.2.15 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) - vite-plugin-inspect: 11.3.3(@nuxt/kit@4.3.1(magicast@0.5.1))(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) - vite-plugin-vue-tracer: 1.2.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.3.1(magicast@0.5.1))(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) + vite-plugin-vue-tracer: 1.2.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) which: 5.0.0 ws: 8.20.0 transitivePeerDependencies: @@ -10715,12 +11117,12 @@ snapshots: - utf-8-validate - vue - '@nuxt/devtools@3.1.1(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3))': + '@nuxt/devtools@3.1.1(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3))': dependencies: - '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) '@nuxt/devtools-wizard': 3.1.1 '@nuxt/kit': 4.3.1(magicast@0.5.1) - '@vue/devtools-core': 8.0.5(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3)) + '@vue/devtools-core': 8.0.5(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3)) '@vue/devtools-kit': 8.0.5 birpc: 2.9.0 consola: 3.4.2 @@ -10745,9 +11147,9 @@ snapshots: sirv: 3.0.2 structured-clone-es: 1.0.0 tinyglobby: 0.2.15 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) - vite-plugin-inspect: 11.3.3(@nuxt/kit@4.3.1(magicast@0.5.1))(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) - vite-plugin-vue-tracer: 1.2.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3)) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.3.1(magicast@0.5.1))(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) + vite-plugin-vue-tracer: 1.2.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3)) which: 5.0.0 ws: 8.20.0 transitivePeerDependencies: @@ -10781,7 +11183,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/nitro-server@4.3.1(better-sqlite3@12.5.0)(db0@0.3.4(better-sqlite3@12.5.0)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0))(mysql2@3.16.1))(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0))(ioredis@5.9.3)(magicast@0.5.1)(mysql2@3.16.1)(nuxt@4.3.1(20bb9c9cac3d4d3ad27d57e07c1eb4f2))(rolldown@1.0.0-rc.15)(typescript@5.9.3)': + '@nuxt/nitro-server@4.3.1(better-sqlite3@12.5.0)(db0@0.3.4(better-sqlite3@12.5.0)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0))(mysql2@3.16.1))(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0))(ioredis@5.9.3)(magicast@0.5.1)(mysql2@3.16.1)(nuxt@4.3.1(526b065509e6a4d54781a1030a9e863f))(rolldown@1.0.0-rc.15)(typescript@5.9.3)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.3.1(magicast@0.5.1) @@ -10799,7 +11201,7 @@ snapshots: klona: 2.0.6 mocked-exports: 0.1.1 nitropack: 2.13.1(better-sqlite3@12.5.0)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0))(mysql2@3.16.1)(rolldown@1.0.0-rc.15) - nuxt: 4.3.1(20bb9c9cac3d4d3ad27d57e07c1eb4f2) + nuxt: 4.3.1(526b065509e6a4d54781a1030a9e863f) ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 @@ -10846,7 +11248,7 @@ snapshots: - uploadthing - xml2js - '@nuxt/nitro-server@4.3.1(better-sqlite3@12.5.0)(db0@0.3.4(better-sqlite3@12.5.0)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3))(sql.js@1.13.0))(mysql2@3.16.1))(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3))(sql.js@1.13.0))(ioredis@5.9.3)(magicast@0.5.1)(mysql2@3.16.1)(nuxt@4.3.1(f6c7dcf4eb9de64f6cb5e0db74766190))(rolldown@1.0.0-rc.15)(typescript@6.0.3)': + '@nuxt/nitro-server@4.3.1(better-sqlite3@12.5.0)(db0@0.3.4(better-sqlite3@12.5.0)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3))(sql.js@1.13.0))(mysql2@3.16.1))(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3))(sql.js@1.13.0))(ioredis@5.9.3)(magicast@0.5.1)(mysql2@3.16.1)(nuxt@4.3.1(95266d6f061a460ce208abe1df07947b))(rolldown@1.0.0-rc.15)(typescript@6.0.3)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.3.1(magicast@0.5.1) @@ -10864,7 +11266,7 @@ snapshots: klona: 2.0.6 mocked-exports: 0.1.1 nitropack: 2.13.1(better-sqlite3@12.5.0)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3))(sql.js@1.13.0))(mysql2@3.16.1)(rolldown@1.0.0-rc.15) - nuxt: 4.3.1(f6c7dcf4eb9de64f6cb5e0db74766190) + nuxt: 4.3.1(95266d6f061a460ce208abe1df07947b) ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 @@ -10928,12 +11330,12 @@ snapshots: rc9: 3.0.0 std-env: 3.10.0 - '@nuxt/vite-builder@4.3.1(@types/node@25.5.2)(eslint@9.29.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.3.1(20bb9c9cac3d4d3ad27d57e07c1eb4f2))(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup@4.59.0)(terser@5.44.0)(tsx@4.20.3)(typescript@5.9.3)(vue-tsc@3.2.5(typescript@5.9.3))(vue@3.5.29(typescript@5.9.3))(yaml@2.8.2)': + '@nuxt/vite-builder@4.3.1(@types/node@25.5.2)(eslint@9.29.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.3.1(526b065509e6a4d54781a1030a9e863f))(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup@4.59.0)(terser@5.44.0)(tsx@4.22.4)(typescript@5.9.3)(vue-tsc@3.2.5(typescript@5.9.3))(vue@3.5.29(typescript@5.9.3))(yaml@2.8.2)': dependencies: '@nuxt/kit': 4.3.1(magicast@0.5.1) '@rollup/plugin-replace': 6.0.3(rollup@4.59.0) - '@vitejs/plugin-vue': 6.0.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx': 5.1.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) + '@vitejs/plugin-vue': 6.0.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': 5.1.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) autoprefixer: 10.4.27(postcss@8.5.6) consola: 3.4.2 cssnano: 7.1.2(postcss@8.5.6) @@ -10947,7 +11349,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.0 mocked-exports: 0.1.1 - nuxt: 4.3.1(20bb9c9cac3d4d3ad27d57e07c1eb4f2) + nuxt: 4.3.1(526b065509e6a4d54781a1030a9e863f) pathe: 2.0.3 pkg-types: 2.3.0 postcss: 8.5.6 @@ -10956,9 +11358,9 @@ snapshots: std-env: 3.10.0 ufo: 1.6.3 unenv: 2.0.0-rc.24 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) - vite-node: 5.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) - vite-plugin-checker: 0.12.0(eslint@9.29.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3)) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vite-node: 5.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vite-plugin-checker: 0.12.0(eslint@9.29.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3)) vue: 3.5.29(typescript@5.9.3) vue-bundle-renderer: 2.2.0 optionalDependencies: @@ -10988,12 +11390,12 @@ snapshots: - vue-tsc - yaml - '@nuxt/vite-builder@4.3.1(@types/node@25.5.2)(eslint@9.29.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.3.1(f6c7dcf4eb9de64f6cb5e0db74766190))(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup@4.59.0)(terser@5.44.0)(tsx@4.20.3)(typescript@6.0.3)(vue-tsc@3.2.5(typescript@6.0.3))(vue@3.5.29(typescript@6.0.3))(yaml@2.8.2)': + '@nuxt/vite-builder@4.3.1(@types/node@25.5.2)(eslint@9.29.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.3.1(95266d6f061a460ce208abe1df07947b))(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup@4.59.0)(terser@5.44.0)(tsx@4.22.4)(typescript@6.0.3)(vue-tsc@3.2.5(typescript@6.0.3))(vue@3.5.29(typescript@6.0.3))(yaml@2.8.2)': dependencies: '@nuxt/kit': 4.3.1(magicast@0.5.1) '@rollup/plugin-replace': 6.0.3(rollup@4.59.0) - '@vitejs/plugin-vue': 6.0.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3)) - '@vitejs/plugin-vue-jsx': 5.1.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3)) + '@vitejs/plugin-vue': 6.0.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3)) autoprefixer: 10.4.27(postcss@8.5.6) consola: 3.4.2 cssnano: 7.1.2(postcss@8.5.6) @@ -11007,7 +11409,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.0 mocked-exports: 0.1.1 - nuxt: 4.3.1(f6c7dcf4eb9de64f6cb5e0db74766190) + nuxt: 4.3.1(95266d6f061a460ce208abe1df07947b) pathe: 2.0.3 pkg-types: 2.3.0 postcss: 8.5.6 @@ -11016,9 +11418,9 @@ snapshots: std-env: 3.10.0 ufo: 1.6.3 unenv: 2.0.0-rc.24 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) - vite-node: 5.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) - vite-plugin-checker: 0.12.0(eslint@9.29.0(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@6.0.3)) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vite-node: 5.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vite-plugin-checker: 0.12.0(eslint@9.29.0(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@6.0.3)) vue: 3.5.29(typescript@6.0.3) vue-bundle-renderer: 2.2.0 optionalDependencies: @@ -11621,15 +12023,35 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/adapter-auto@7.0.0(@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))': + '@sveltejs/adapter-auto@7.0.0(@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))': + dependencies: + '@sveltejs/kit': 2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) + + '@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': dependencies: - '@sveltejs/kit': 2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + '@standard-schema/spec': 1.0.0 + '@sveltejs/acorn-typescript': 1.0.9(acorn@8.15.0) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) + '@types/cookie': 0.6.0 + acorn: 8.15.0 + cookie: 1.1.1 + devalue: 5.6.3 + esm-env: 1.2.2 + kleur: 4.1.5 + magic-string: 0.30.21 + mrmime: 2.0.1 + set-cookie-parser: 3.0.1 + sirv: 3.0.2 + svelte: 5.53.5 + vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + optionalDependencies: + typescript: 5.9.3 - '@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))': + '@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': dependencies: '@standard-schema/spec': 1.0.0 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) '@types/cookie': 0.6.0 acorn: 8.15.0 cookie: 1.1.1 @@ -11641,15 +12063,16 @@ snapshots: set-cookie-parser: 3.0.1 sirv: 3.0.2 svelte: 5.53.5 - vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) optionalDependencies: typescript: 5.9.3 + optional: true - '@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))': + '@sveltejs/kit@2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': dependencies: '@standard-schema/spec': 1.0.0 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) '@types/cookie': 0.6.0 acorn: 8.15.0 cookie: 1.1.1 @@ -11661,7 +12084,7 @@ snapshots: set-cookie-parser: 3.0.1 sirv: 3.0.2 svelte: 5.53.5 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) optionalDependencies: typescript: 5.9.3 @@ -11676,45 +12099,68 @@ snapshots: transitivePeerDependencies: - typescript - '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': + dependencies: + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) + debug: 4.4.3 + svelte: 5.53.5 + vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + transitivePeerDependencies: + - supports-color + + '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': + dependencies: + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) + debug: 4.4.3 + svelte: 5.53.5 + vite: 7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + transitivePeerDependencies: + - supports-color + optional: true + + '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) debug: 4.4.3 svelte: 5.53.5 - vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))': + '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) debug: 4.4.3 + deepmerge: 4.3.1 + magic-string: 0.30.21 svelte: 5.53.5 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vitefu: 1.1.1(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))': + '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) debug: 4.4.3 deepmerge: 4.3.1 magic-string: 0.30.21 svelte: 5.53.5 - vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) - vitefu: 1.1.1(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + vite: 7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vitefu: 1.1.1(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) transitivePeerDependencies: - supports-color + optional: true - '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))': + '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) debug: 4.4.3 deepmerge: 4.3.1 magic-string: 0.30.21 svelte: 5.53.5 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) - vitefu: 1.1.1(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vitefu: 1.1.1(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) transitivePeerDependencies: - supports-color @@ -11852,19 +12298,19 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.16 - '@tailwindcss/vite@4.1.18(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))': + '@tailwindcss/vite@4.1.18(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': dependencies: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) - '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))': + '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': dependencies: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) '@tanstack/match-sorter-utils@8.19.4': dependencies: @@ -12351,43 +12797,43 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-vue-jsx@5.1.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@5.1.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) '@rolldown/pluginutils': 1.0.0-rc.5 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0) - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) vue: 3.5.29(typescript@5.9.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@5.1.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3))': + '@vitejs/plugin-vue-jsx@5.1.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) '@rolldown/pluginutils': 1.0.0-rc.5 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0) - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) vue: 3.5.29(typescript@6.0.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.2 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) vue: 3.5.29(typescript@5.9.3) - '@vitejs/plugin-vue@6.0.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3))': + '@vitejs/plugin-vue@6.0.4(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.2 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) vue: 3.5.29(typescript@6.0.3) - '@vitest/coverage-v8@4.0.16(vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0))': + '@vitest/coverage-v8@4.0.16(vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.0))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.16 @@ -12400,7 +12846,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + vitest: 4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.0) transitivePeerDependencies: - supports-color @@ -12413,21 +12859,30 @@ snapshots: chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.14(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0))': + '@vitest/mocker@4.0.14(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.0))': + dependencies: + '@vitest/spy': 4.0.14 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.0) + + '@vitest/mocker@4.0.14(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.14 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + optional: true - '@vitest/mocker@4.0.14(vite@7.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))': + '@vitest/mocker@4.0.14(vite@7.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.14 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) optional: true '@vitest/pretty-format@4.0.14': @@ -12614,26 +13069,26 @@ snapshots: '@vue/devtools-api@6.6.4': {} - '@vue/devtools-core@8.0.5(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3))': + '@vue/devtools-core@8.0.5(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) vue: 3.5.29(typescript@5.9.3) transitivePeerDependencies: - vite - '@vue/devtools-core@8.0.5(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3))': + '@vue/devtools-core@8.0.5(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3))': dependencies: '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) vue: 3.5.29(typescript@6.0.3) transitivePeerDependencies: - vite @@ -12974,10 +13429,10 @@ snapshots: baseline-browser-mapping@2.9.11: {} - better-auth@1.4.19(1495ef1d827113360533150571904e77): + better-auth@1.4.19(aa46c218c2111ba42e6bbb995c1cdf9e): dependencies: '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.2)(kysely@0.28.16)(nanostores@1.0.1) - '@better-auth/telemetry': 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.2)(kysely@0.29.0)(nanostores@1.0.1)) + '@better-auth/telemetry': 1.4.19(@better-auth/core@1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0)) '@better-auth/utils': 0.3.0 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.0.1 @@ -12990,7 +13445,70 @@ snapshots: zod: 4.3.6 optionalDependencies: '@prisma/client': 5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)) - '@sveltejs/kit': 2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + '@sveltejs/kit': 2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) + better-sqlite3: 12.5.0 + drizzle-orm: 0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0) + mysql2: 3.16.1 + next: 16.1.6(@babel/core@7.29.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + pg: 8.16.3 + prisma: 6.19.0(magicast@0.5.1)(typescript@5.9.3) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + svelte: 5.53.5 + vitest: 4.0.14(@edge-runtime/vm@5.0.0)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vue: 3.5.29(typescript@5.9.3) + + better-auth@1.4.21(261c4d1149703dc38709f1a99ea83b5c): + dependencies: + '@better-auth/core': 1.4.19(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.28.16)(nanostores@1.3.0) + '@better-auth/telemetry': 1.4.21(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0)) + '@better-auth/utils': 0.3.0 + '@better-fetch/fetch': 1.1.21 + '@noble/ciphers': 2.2.0 + '@noble/hashes': 2.0.1 + better-call: 1.1.8(zod@4.3.6) + defu: 6.1.7 + jose: 6.2.3 + kysely: 0.28.16 + nanostores: 1.3.0 + zod: 4.3.6 + optionalDependencies: + '@prisma/client': 5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)) + '@sveltejs/kit': 2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) + better-sqlite3: 12.5.0 + drizzle-orm: 0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0) + mysql2: 3.16.1 + next: 16.1.6(@babel/core@7.29.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + pg: 8.16.3 + prisma: 6.19.0(magicast@0.5.1)(typescript@5.9.3) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + svelte: 5.53.5 + vitest: 4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vue: 3.5.29(typescript@5.9.3) + + better-auth@1.6.15(261c4d1149703dc38709f1a99ea83b5c): + dependencies: + '@better-auth/core': 1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0) + '@better-auth/drizzle-adapter': 1.6.15(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0)) + '@better-auth/kysely-adapter': 1.6.15(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(kysely@0.29.0) + '@better-auth/memory-adapter': 1.6.15(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))(@better-auth/utils@0.4.1) + '@better-auth/mongo-adapter': 1.6.15(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))(@better-auth/utils@0.4.1) + '@better-auth/prisma-adapter': 1.6.15(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)) + '@better-auth/telemetry': 1.6.15(@better-auth/core@1.4.19(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.5(zod@4.3.6))(jose@6.2.3)(kysely@0.29.0)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21) + '@better-auth/utils': 0.4.1 + '@better-fetch/fetch': 1.1.21 + '@noble/ciphers': 2.2.0 + '@noble/hashes': 2.0.1 + better-call: 1.3.5(zod@4.3.6) + defu: 6.1.7 + jose: 6.2.3 + kysely: 0.29.0 + nanostores: 1.3.0 + zod: 4.3.6 + optionalDependencies: + '@prisma/client': 5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)) + '@sveltejs/kit': 2.53.2(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.53.5)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)))(svelte@5.53.5)(typescript@5.9.3)(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) better-sqlite3: 12.5.0 drizzle-orm: 0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0) mysql2: 3.16.1 @@ -13000,7 +13518,7 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) svelte: 5.53.5 - vitest: 4.0.14(@edge-runtime/vm@5.0.0)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vitest: 4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) vue: 3.5.29(typescript@5.9.3) better-call@1.1.8(zod@4.3.6): @@ -13012,6 +13530,15 @@ snapshots: optionalDependencies: zod: 4.3.6 + better-call@1.3.5(zod@4.3.6): + dependencies: + '@better-auth/utils': 0.4.1 + '@better-fetch/fetch': 1.1.21 + rou3: 0.7.12 + set-cookie-parser: 3.0.1 + optionalDependencies: + zod: 4.3.6 + better-sqlite3@12.5.0: dependencies: bindings: 1.5.0 @@ -13113,7 +13640,7 @@ snapshots: dependencies: chokidar: 4.0.3 confbox: 0.2.2 - defu: 6.1.4 + defu: 6.1.7 dotenv: 16.6.1 exsolve: 1.0.7 giget: 2.0.0 @@ -13130,7 +13657,7 @@ snapshots: dependencies: chokidar: 4.0.3 confbox: 0.2.2 - defu: 6.1.4 + defu: 6.1.7 dotenv: 16.6.1 exsolve: 1.0.7 giget: 2.0.0 @@ -13147,15 +13674,15 @@ snapshots: c12@3.3.3(magicast@0.5.1): dependencies: chokidar: 5.0.0 - confbox: 0.2.2 - defu: 6.1.4 + confbox: 0.2.4 + defu: 6.1.7 dotenv: 17.2.3 exsolve: 1.0.8 giget: 2.0.0 jiti: 2.6.1 ohash: 2.0.11 pathe: 2.0.3 - perfect-debounce: 2.0.0 + perfect-debounce: 2.1.0 pkg-types: 2.3.0 rc9: 2.1.2 optionalDependencies: @@ -13305,6 +13832,8 @@ snapshots: commander@12.1.0: {} + commander@14.0.3: {} + commander@2.20.3: {} commander@8.3.0: {} @@ -13844,34 +14373,6 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.25.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.5 - '@esbuild/android-arm': 0.25.5 - '@esbuild/android-arm64': 0.25.5 - '@esbuild/android-x64': 0.25.5 - '@esbuild/darwin-arm64': 0.25.5 - '@esbuild/darwin-x64': 0.25.5 - '@esbuild/freebsd-arm64': 0.25.5 - '@esbuild/freebsd-x64': 0.25.5 - '@esbuild/linux-arm': 0.25.5 - '@esbuild/linux-arm64': 0.25.5 - '@esbuild/linux-ia32': 0.25.5 - '@esbuild/linux-loong64': 0.25.5 - '@esbuild/linux-mips64el': 0.25.5 - '@esbuild/linux-ppc64': 0.25.5 - '@esbuild/linux-riscv64': 0.25.5 - '@esbuild/linux-s390x': 0.25.5 - '@esbuild/linux-x64': 0.25.5 - '@esbuild/netbsd-arm64': 0.25.5 - '@esbuild/netbsd-x64': 0.25.5 - '@esbuild/openbsd-arm64': 0.25.5 - '@esbuild/openbsd-x64': 0.25.5 - '@esbuild/sunos-x64': 0.25.5 - '@esbuild/win32-arm64': 0.25.5 - '@esbuild/win32-ia32': 0.25.5 - '@esbuild/win32-x64': 0.25.5 - esbuild@0.27.2: optionalDependencies: '@esbuild/aix-ppc64': 0.27.2 @@ -13930,6 +14431,35 @@ snapshots: '@esbuild/win32-ia32': 0.27.3 '@esbuild/win32-x64': 0.27.3 + esbuild@0.28.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.0 + '@esbuild/android-arm': 0.28.0 + '@esbuild/android-arm64': 0.28.0 + '@esbuild/android-x64': 0.28.0 + '@esbuild/darwin-arm64': 0.28.0 + '@esbuild/darwin-x64': 0.28.0 + '@esbuild/freebsd-arm64': 0.28.0 + '@esbuild/freebsd-x64': 0.28.0 + '@esbuild/linux-arm': 0.28.0 + '@esbuild/linux-arm64': 0.28.0 + '@esbuild/linux-ia32': 0.28.0 + '@esbuild/linux-loong64': 0.28.0 + '@esbuild/linux-mips64el': 0.28.0 + '@esbuild/linux-ppc64': 0.28.0 + '@esbuild/linux-riscv64': 0.28.0 + '@esbuild/linux-s390x': 0.28.0 + '@esbuild/linux-x64': 0.28.0 + '@esbuild/netbsd-arm64': 0.28.0 + '@esbuild/netbsd-x64': 0.28.0 + '@esbuild/openbsd-arm64': 0.28.0 + '@esbuild/openbsd-x64': 0.28.0 + '@esbuild/openharmony-arm64': 0.28.0 + '@esbuild/sunos-x64': 0.28.0 + '@esbuild/win32-arm64': 0.28.0 + '@esbuild/win32-ia32': 0.28.0 + '@esbuild/win32-x64': 0.28.0 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -14486,7 +15016,7 @@ snapshots: dependencies: citty: 0.1.6 consola: 3.4.2 - defu: 6.1.4 + defu: 6.1.7 node-fetch-native: 1.6.7 nypm: 0.6.2 pathe: 2.0.3 @@ -14970,6 +15500,8 @@ snapshots: jose@6.1.2: {} + jose@6.2.3: {} + js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -15190,7 +15722,7 @@ snapshots: clipboardy: 4.0.0 consola: 3.4.2 crossws: 0.3.5 - defu: 6.1.4 + defu: 6.1.7 get-port-please: 3.2.0 h3: 1.15.5 http-shutdown: 1.2.2 @@ -15436,6 +15968,8 @@ snapshots: nanostores@1.0.1: {} + nanostores@1.3.0: {} + nanotar@0.2.0: {} napi-build-utils@2.0.0: {} @@ -15518,10 +16052,10 @@ snapshots: croner: 9.1.0 crossws: 0.3.5 db0: 0.3.4(better-sqlite3@12.5.0)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0))(mysql2@3.16.1) - defu: 6.1.4 + defu: 6.1.7 destr: 2.0.5 dot-prop: 10.1.0 - esbuild: 0.27.2 + esbuild: 0.27.3 escape-string-regexp: 5.0.0 etag: 1.8.1 exsolve: 1.0.8 @@ -15620,10 +16154,10 @@ snapshots: croner: 9.1.0 crossws: 0.3.5 db0: 0.3.4(better-sqlite3@12.5.0)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3))(sql.js@1.13.0))(mysql2@3.16.1) - defu: 6.1.4 + defu: 6.1.7 destr: 2.0.5 dot-prop: 10.1.0 - esbuild: 0.27.2 + esbuild: 0.27.3 escape-string-regexp: 5.0.0 etag: 1.8.1 exsolve: 1.0.8 @@ -15764,16 +16298,16 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt@4.3.1(20bb9c9cac3d4d3ad27d57e07c1eb4f2): + nuxt@4.3.1(526b065509e6a4d54781a1030a9e863f): dependencies: '@dxup/nuxt': 0.3.2(magicast@0.5.1) '@nuxt/cli': 3.33.1(@nuxt/schema@4.3.1)(cac@6.7.14)(magicast@0.5.1) - '@nuxt/devtools': 3.1.1(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) + '@nuxt/devtools': 3.1.1(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)) '@nuxt/kit': 4.3.1(magicast@0.5.1) - '@nuxt/nitro-server': 4.3.1(better-sqlite3@12.5.0)(db0@0.3.4(better-sqlite3@12.5.0)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0))(mysql2@3.16.1))(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0))(ioredis@5.9.3)(magicast@0.5.1)(mysql2@3.16.1)(nuxt@4.3.1(20bb9c9cac3d4d3ad27d57e07c1eb4f2))(rolldown@1.0.0-rc.15)(typescript@5.9.3) + '@nuxt/nitro-server': 4.3.1(better-sqlite3@12.5.0)(db0@0.3.4(better-sqlite3@12.5.0)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0))(mysql2@3.16.1))(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@5.9.3))(sql.js@1.13.0))(ioredis@5.9.3)(magicast@0.5.1)(mysql2@3.16.1)(nuxt@4.3.1(526b065509e6a4d54781a1030a9e863f))(rolldown@1.0.0-rc.15)(typescript@5.9.3) '@nuxt/schema': 4.3.1 '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.3.1(magicast@0.5.1)) - '@nuxt/vite-builder': 4.3.1(@types/node@25.5.2)(eslint@9.29.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.3.1(20bb9c9cac3d4d3ad27d57e07c1eb4f2))(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup@4.59.0)(terser@5.44.0)(tsx@4.20.3)(typescript@5.9.3)(vue-tsc@3.2.5(typescript@5.9.3))(vue@3.5.29(typescript@5.9.3))(yaml@2.8.2) + '@nuxt/vite-builder': 4.3.1(@types/node@25.5.2)(eslint@9.29.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.3.1(526b065509e6a4d54781a1030a9e863f))(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup@4.59.0)(terser@5.44.0)(tsx@4.22.4)(typescript@5.9.3)(vue-tsc@3.2.5(typescript@5.9.3))(vue@3.5.29(typescript@5.9.3))(yaml@2.8.2) '@unhead/vue': 2.1.7(vue@3.5.29(typescript@5.9.3)) '@vue/shared': 3.5.29 c12: 3.3.3(magicast@0.5.1) @@ -15887,16 +16421,16 @@ snapshots: - xml2js - yaml - nuxt@4.3.1(f6c7dcf4eb9de64f6cb5e0db74766190): + nuxt@4.3.1(95266d6f061a460ce208abe1df07947b): dependencies: '@dxup/nuxt': 0.3.2(magicast@0.5.1) '@nuxt/cli': 3.33.1(@nuxt/schema@4.3.1)(cac@6.7.14)(magicast@0.5.1) - '@nuxt/devtools': 3.1.1(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3)) + '@nuxt/devtools': 3.1.1(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3)) '@nuxt/kit': 4.3.1(magicast@0.5.1) - '@nuxt/nitro-server': 4.3.1(better-sqlite3@12.5.0)(db0@0.3.4(better-sqlite3@12.5.0)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3))(sql.js@1.13.0))(mysql2@3.16.1))(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3))(sql.js@1.13.0))(ioredis@5.9.3)(magicast@0.5.1)(mysql2@3.16.1)(nuxt@4.3.1(f6c7dcf4eb9de64f6cb5e0db74766190))(rolldown@1.0.0-rc.15)(typescript@6.0.3) + '@nuxt/nitro-server': 4.3.1(better-sqlite3@12.5.0)(db0@0.3.4(better-sqlite3@12.5.0)(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3))(sql.js@1.13.0))(mysql2@3.16.1))(drizzle-orm@0.41.0(@prisma/client@5.22.0(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3)))(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.5.0)(bun-types@1.3.3)(kysely@0.29.0)(mysql2@3.16.1)(pg@8.16.3)(prisma@6.19.0(magicast@0.5.1)(typescript@6.0.3))(sql.js@1.13.0))(ioredis@5.9.3)(magicast@0.5.1)(mysql2@3.16.1)(nuxt@4.3.1(95266d6f061a460ce208abe1df07947b))(rolldown@1.0.0-rc.15)(typescript@6.0.3) '@nuxt/schema': 4.3.1 '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.3.1(magicast@0.5.1)) - '@nuxt/vite-builder': 4.3.1(@types/node@25.5.2)(eslint@9.29.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.3.1(f6c7dcf4eb9de64f6cb5e0db74766190))(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup@4.59.0)(terser@5.44.0)(tsx@4.20.3)(typescript@6.0.3)(vue-tsc@3.2.5(typescript@6.0.3))(vue@3.5.29(typescript@6.0.3))(yaml@2.8.2) + '@nuxt/vite-builder': 4.3.1(@types/node@25.5.2)(eslint@9.29.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.1)(nuxt@4.3.1(95266d6f061a460ce208abe1df07947b))(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup@4.59.0)(terser@5.44.0)(tsx@4.22.4)(typescript@6.0.3)(vue-tsc@3.2.5(typescript@6.0.3))(vue@3.5.29(typescript@6.0.3))(yaml@2.8.2) '@unhead/vue': 2.1.7(vue@3.5.29(typescript@6.0.3)) '@vue/shared': 3.5.29 c12: 3.3.3(magicast@0.5.1) @@ -16289,8 +16823,6 @@ snapshots: perfect-debounce@1.0.0: {} - perfect-debounce@2.0.0: {} - perfect-debounce@2.1.0: {} pg-cloudflare@1.2.7: @@ -16710,12 +17242,12 @@ snapshots: rc9@2.1.2: dependencies: - defu: 6.1.4 + defu: 6.1.7 destr: 2.0.5 rc9@3.0.0: dependencies: - defu: 6.1.4 + defu: 6.1.7 destr: 2.0.5 rc@1.2.8: @@ -17029,7 +17561,7 @@ snapshots: serve-placeholder@2.0.2: dependencies: - defu: 6.1.4 + defu: 6.1.7 serve-static@2.2.0: dependencies: @@ -17638,10 +18170,9 @@ snapshots: tslib@2.8.1: {} - tsx@4.20.3: + tsx@4.22.4: dependencies: - esbuild: 0.25.5 - get-tsconfig: 4.10.1 + esbuild: 0.28.0 optionalDependencies: fsevents: 2.3.3 @@ -18003,23 +18534,23 @@ snapshots: vary@1.1.2: {} - vite-dev-rpc@1.1.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)): + vite-dev-rpc@1.1.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)): dependencies: birpc: 2.9.0 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) - vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) - vite-hot-client@2.1.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)): + vite-hot-client@2.1.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)): dependencies: - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) - vite-node@5.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2): + vite-node@5.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2): dependencies: cac: 6.7.14 es-module-lexer: 2.0.0 obug: 2.1.1 pathe: 2.0.3 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -18033,7 +18564,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.12.0(eslint@9.29.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3)): + vite-plugin-checker@0.12.0(eslint@9.29.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3)): dependencies: '@babel/code-frame': 7.28.6 chokidar: 4.0.3 @@ -18042,7 +18573,7 @@ snapshots: picomatch: 4.0.3 tiny-invariant: 1.3.3 tinyglobby: 0.2.15 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) vscode-uri: 3.1.0 optionalDependencies: eslint: 9.29.0(jiti@2.6.1) @@ -18050,7 +18581,7 @@ snapshots: typescript: 5.9.3 vue-tsc: 3.2.5(typescript@5.9.3) - vite-plugin-checker@0.12.0(eslint@9.29.0(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@6.0.3)): + vite-plugin-checker@0.12.0(eslint@9.29.0(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@6.0.3)): dependencies: '@babel/code-frame': 7.28.6 chokidar: 4.0.3 @@ -18059,7 +18590,7 @@ snapshots: picomatch: 4.0.3 tiny-invariant: 1.3.3 tinyglobby: 0.2.15 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) vscode-uri: 3.1.0 optionalDependencies: eslint: 9.29.0(jiti@2.6.1) @@ -18067,7 +18598,7 @@ snapshots: typescript: 6.0.3 vue-tsc: 3.2.5(typescript@6.0.3) - vite-plugin-inspect@11.3.3(@nuxt/kit@4.3.1(magicast@0.5.1))(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)): + vite-plugin-inspect@11.3.3(@nuxt/kit@4.3.1(magicast@0.5.1))(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)): dependencies: ansis: 4.2.0 debug: 4.4.3 @@ -18077,34 +18608,34 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) - vite-dev-rpc: 1.1.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + vite-dev-rpc: 1.1.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) optionalDependencies: '@nuxt/kit': 4.3.1(magicast@0.5.1) transitivePeerDependencies: - supports-color - vite-plugin-vue-tracer@1.2.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)): + vite-plugin-vue-tracer@1.2.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@5.9.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.8 magic-string: 0.30.21 pathe: 2.0.3 source-map-js: 1.2.1 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) vue: 3.5.29(typescript@5.9.3) - vite-plugin-vue-tracer@1.2.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3)): + vite-plugin-vue-tracer@1.2.0(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2))(vue@3.5.29(typescript@6.0.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.8 magic-string: 0.30.21 pathe: 2.0.3 source-map-js: 1.2.1 - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) vue: 3.5.29(typescript@6.0.3) - vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): + vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.0): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -18118,10 +18649,10 @@ snapshots: jiti: 2.6.1 lightningcss: 1.30.2 terser: 5.44.0 - tsx: 4.20.3 + tsx: 4.22.4 yaml: 2.8.0 - vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2): + vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -18135,10 +18666,10 @@ snapshots: jiti: 2.6.1 lightningcss: 1.30.2 terser: 5.44.0 - tsx: 4.20.3 + tsx: 4.22.4 yaml: 2.8.2 - vite@7.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2): + vite@7.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -18152,11 +18683,29 @@ snapshots: jiti: 2.6.1 lightningcss: 1.30.2 terser: 5.44.0 - tsx: 4.20.3 + tsx: 4.22.4 + yaml: 2.8.2 + optional: true + + vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2): + dependencies: + esbuild: 0.27.3 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.59.0 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 20.19.24 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + terser: 5.44.0 + tsx: 4.22.4 yaml: 2.8.2 optional: true - vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2): + vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -18170,21 +18719,66 @@ snapshots: jiti: 2.6.1 lightningcss: 1.30.2 terser: 5.44.0 - tsx: 4.20.3 + tsx: 4.22.4 yaml: 2.8.2 - vitefu@1.1.1(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)): + vitefu@1.1.1(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)): + optionalDependencies: + vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + + vitefu@1.1.1(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)): + optionalDependencies: + vite: 7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) + optional: true + + vitefu@1.1.1(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)): optionalDependencies: - vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) - vitefu@1.1.1(vite@7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)): + vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.0): + dependencies: + '@vitest/expect': 4.0.14 + '@vitest/mocker': 4.0.14(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.0)) + '@vitest/pretty-format': 4.0.14 + '@vitest/runner': 4.0.14 + '@vitest/snapshot': 4.0.14 + '@vitest/spy': 4.0.14 + '@vitest/utils': 4.0.14 + es-module-lexer: 1.7.0 + expect-type: 1.2.2 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.0) + why-is-node-running: 2.3.0 optionalDependencies: - vite: 7.3.1(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + '@edge-runtime/vm': 5.0.0 + '@types/node': 20.19.24 + happy-dom: 20.8.9 + jsdom: 27.1.0 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml - vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0): + vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@20.19.24)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.14 - '@vitest/mocker': 4.0.14(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0)) + '@vitest/mocker': 4.0.14(vite@7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.14 '@vitest/runner': 4.0.14 '@vitest/snapshot': 4.0.14 @@ -18201,7 +18795,7 @@ snapshots: tinyexec: 0.3.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.0) + vite: 7.3.0(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@edge-runtime/vm': 5.0.0 @@ -18220,11 +18814,12 @@ snapshots: - terser - tsx - yaml + optional: true - vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2): + vitest@4.0.14(@edge-runtime/vm@5.0.0)(@types/node@25.5.2)(happy-dom@20.8.9)(jiti@2.6.1)(jsdom@27.1.0)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.14 - '@vitest/mocker': 4.0.14(vite@7.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2)) + '@vitest/mocker': 4.0.14(vite@7.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.14 '@vitest/runner': 4.0.14 '@vitest/snapshot': 4.0.14 @@ -18241,7 +18836,7 @@ snapshots: tinyexec: 0.3.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.0(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.22.4)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@edge-runtime/vm': 5.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 20e094cd8..1db349ab4 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -34,3 +34,4 @@ catalog: vue: 3.5.22 zod: ^4.0.0 zod-validation-error: ^4.0.1 + tsx: ^4.22.0 diff --git a/samples/sveltekit/package.json b/samples/sveltekit/package.json index 0d1c56779..8782715b8 100644 --- a/samples/sveltekit/package.json +++ b/samples/sveltekit/package.json @@ -34,7 +34,7 @@ "svelte": "catalog:", "svelte-check": "^4.3.4", "tailwindcss": "^4.1.17", - "tsx": "^4.19.2", + "tsx": "catalog:", "typescript": "^5.9.3", "vite": "^7.2.6" }, diff --git a/samples/taskforge/README.md b/samples/taskforge/README.md new file mode 100644 index 000000000..374745e9f --- /dev/null +++ b/samples/taskforge/README.md @@ -0,0 +1,101 @@ +# TaskForge + +A command-line client for a **team collaboration / project-tracking** platform +(think Linear/Jira), built to demonstrate a complete **[ZenStack v3](https://zenstack.dev)** +(ORM) + **[Better-Auth](https://better-auth.com)** stack on top of SQLite. + +- **34 models** across tenancy, projects/issues, collaboration, automation and billing +- Every relation flavour: 1-1, 1-many, implicit & explicit many-to-many, self-relations +- **Polymorphism** (`@@delegate`), **typed JSON** (`@json`), **computed fields** (`@computed`), + reusable field **mixins** (`with`), and **enums** +- Better-Auth wired to the ZenStack ORM via the official adapter (setup only — no HTTP flow) + +## Stack + +| Concern | Choice | +| -------------- | ------ | +| ORM / schema | ZenStack v3 (`@zenstackhq/orm`, ZModel schema) | +| Database | SQLite (via `better-sqlite3`) — zero external services | +| Auth | Better-Auth + `@zenstackhq/better-auth` adapter | +| CLI | `commander`, run with `tsx` | + +## Quick start + +```bash +pnpm install # native builds (better-sqlite3, prisma) are pre-approved in package.json +pnpm zen:generate # compile zenstack/schema.zmodel -> zenstack/schema.ts (the typed client) +pnpm db:push # create/sync the SQLite database (zenstack/taskforge.db) +pnpm seed # populate a demo workspace (users via Better-Auth, domain via the ORM) +pnpm cli orgs # try the CLI +``` + +## CLI commands + +```bash +pnpm cli orgs # organizations + member/team/project counts +pnpm cli projects [orgSlug] # projects + open-issue count (computed field) +pnpm cli issues [--status S] # issues + comment count (computed field) +pnpm cli issue # deep read: comments, polymorphic attachments, watchers +pnpm cli stats # groupBy + aggregate over issues and invoices +pnpm cli add-issue # auto-numbered create inside a $transaction +pnpm cli signup # register a user through Better-Auth +pnpm cli activity [-n N] # recent activity-log entries +``` + +(`taskforge ` also works once the package is linked/installed globally.) + +## Project layout + +``` +zenstack/ + schema.zmodel # the source of truth — 34 models, 13 enums, 5 custom types + schema.ts # generated typed schema (do not edit) — input.ts / models.ts also generated + taskforge.db # SQLite database (created by `zen db push`) +src/ + db.ts # ZenStackClient: SQLite dialect + computed-field implementations + auth.ts # Better-Auth config, bound to the ORM via zenstackAdapter + seed.ts # demo data + cli.ts # the commander CLI +``` + +## Schema highlights + +The domain is organized into five areas, all rooted at a multi-tenant `Organization`: + +- **Tenancy** — `Organization`, `Membership` (explicit M2M user↔org with role), `Invitation`, + `Team`, `TeamMembership` (explicit M2M). +- **Projects & planning** — `Project` (computed `openIssueCount`), `ProjectMember` (explicit M2M), + `Issue` (self-relation sub-issues; implicit M2M `labels` and `watchers`; computed `commentCount`; + typed-JSON `metadata`), `Label`, `Milestone`, `Sprint`. +- **Collaboration** — `Comment` (self-relation threads), `Reaction` (two optional FK targets), + `Attachment` **polymorphic base** with `FileAttachment` / `ImageAttachment` / `LinkAttachment` + concrete subtypes, `Document` (self-relation tree + implicit M2M collaborators, typed-JSON body). +- **Customization & automation** — `CustomField` + `CustomFieldValue` (explicit M2M), `TimeEntry`, + `Webhook`, `Integration`, `ApiToken`, `ActivityLog`, `Notification`. Where SQLite forbids scalar + lists, list-like config is stored as typed JSON. +- **Billing** — `BillingCustomer` (1-1 with org), `Plan`, `Subscription` (1-1 with org), `Invoice`. + +A `Timestamps` mixin (`type Timestamps { createdAt … updatedAt … }`) is applied to most models with +`model X with Timestamps { … }`. + +### Better-Auth integration + +`src/auth.ts` configures Better-Auth with the ZenStack adapter: + +```ts +export const auth = betterAuth({ + database: zenstackAdapter(db, { provider: 'sqlite' }), + emailAndPassword: { enabled: true }, +}); +``` + +The `User`, `Session`, `Account` and `Verification` models in `schema.zmodel` are Better-Auth's +core schema. Only the configuration is provided — no routes or sign-in UI are mounted — but +`auth.api.signUpEmail(...)` is fully functional (see `pnpm cli signup`). To regenerate the auth +models into the schema from the auth config, run `pnpm auth:generate`. + +## Notes on SQLite + +The migration engine wraps Prisma Migrate. With the bundled Prisma 6 + ZenStack v3, SQLite supports +enums, `Json`/typed-JSON, and polymorphism. It does **not** support scalar lists (`String[]`), so +list data is modeled as relations or typed JSON. diff --git a/samples/taskforge/package.json b/samples/taskforge/package.json new file mode 100644 index 000000000..3b6269fa7 --- /dev/null +++ b/samples/taskforge/package.json @@ -0,0 +1,31 @@ +{ + "name": "taskforge", + "version": "3.7.2", + "type": "module", + "private": true, + "description": "A CLI for a team collaboration / project-tracking platform, built on ZenStack v3 (ORM) and better-auth.", + "bin": { + "taskforge": "./src/cli.ts" + }, + "scripts": { + "zen:generate": "zen generate", + "db:push": "zen db push", + "build": "tsc --noEmit", + "cli": "tsx src/cli.ts", + "seed": "tsx src/seed.ts" + }, + "dependencies": { + "@zenstackhq/better-auth": "workspace:*", + "@zenstackhq/orm": "workspace:*", + "@zenstackhq/schema": "workspace:*", + "better-auth": "^1.4.21", + "better-sqlite3": "catalog:", + "commander": "^14.0.2" + }, + "devDependencies": { + "@better-auth/cli": "^1.4.21", + "@types/better-sqlite3": "catalog:", + "@types/node": "catalog:", + "@zenstackhq/cli": "workspace:*" + } +} diff --git a/samples/taskforge/src/auth.ts b/samples/taskforge/src/auth.ts new file mode 100644 index 000000000..de7f4f2e5 --- /dev/null +++ b/samples/taskforge/src/auth.ts @@ -0,0 +1,36 @@ +import { betterAuth, type BetterAuthOptions } from 'better-auth'; +import { zenstackAdapter } from '@zenstackhq/better-auth'; +import { db } from './db'; + +/** + * Better-Auth configuration. + * + * This wires Better-Auth's data layer to the ZenStack ORM client via + * `@zenstackhq/better-auth`'s adapter — the `User`, `Session`, `Account` and + * `Verification` models in `schema.zmodel` are Better-Auth's core schema. + * + * Only the *setup* is provided here, as requested: no HTTP routes, framework + * handlers, or sign-in/sign-up flow are mounted. `auth.api.*` is fully usable + * (see `taskforge auth:signup` in the CLI for a demonstration), but there is no + * server exposing it. + * + * The Better-Auth CLI can read this file to (re)generate the auth models into + * the ZModel schema: `pnpm auth:generate`. + */ +const options = { + appName: 'TaskForge', + // CLI usage never serves HTTP; a placeholder base URL silences the warning. + baseURL: process.env.BETTER_AUTH_URL ?? 'http://localhost:3000', + secret: process.env.BETTER_AUTH_SECRET ?? 'taskforge-dev-secret-0123456789abcdef', + database: zenstackAdapter(db, { + provider: 'sqlite', + }), + emailAndPassword: { + enabled: true, + }, + plugins: [], +} satisfies BetterAuthOptions; + +export const auth = betterAuth(options); + +export type Auth = typeof auth; diff --git a/samples/taskforge/src/cli.ts b/samples/taskforge/src/cli.ts new file mode 100755 index 000000000..dde6f59c0 --- /dev/null +++ b/samples/taskforge/src/cli.ts @@ -0,0 +1,264 @@ +#!/usr/bin/env -S npx tsx +/** + * TaskForge CLI. + * + * A small command-line client over the ZenStack v3 ORM (and Better-Auth for + * user creation). Run `taskforge --help` for the command list, or during + * development: `pnpm cli `. + */ +import { Command } from 'commander'; +import { db } from './db'; +import { auth } from './auth'; + +const program = new Command(); + +program + .name('taskforge') + .description('CLI for the TaskForge collaboration platform (ZenStack v3 + Better-Auth)') + .version('0.1.0'); + +// --------------------------------------------------------------------------- +// organizations +// --------------------------------------------------------------------------- +program + .command('orgs') + .description('List organizations with member, team and project counts') + .action(async () => { + const orgs = await db.organization.findMany({ + include: { + owner: { select: { name: true } }, + _count: { select: { members: true, teams: true, projects: true } }, + subscription: { include: { plan: true } }, + }, + orderBy: { createdAt: 'asc' }, + }); + if (orgs.length === 0) return console.log('No organizations. Run `pnpm seed` first.'); + for (const o of orgs) { + const plan = o.subscription?.plan.name ?? 'no plan'; + console.log( + `• ${o.name} (@${o.slug}) — owner ${o.owner.name} · ` + + `${o._count.members} members, ${o._count.teams} teams, ${o._count.projects} projects · ${plan}`, + ); + } + }); + +// --------------------------------------------------------------------------- +// projects (demonstrates the `openIssueCount` computed field) +// --------------------------------------------------------------------------- +program + .command('projects') + .argument('[orgSlug]', 'filter by organization slug') + .description('List projects and their open-issue counts (computed field)') + .action(async (orgSlug?: string) => { + const projects = await db.project.findMany({ + where: orgSlug ? { organization: { slug: orgSlug } } : undefined, + include: { + team: { select: { key: true } }, + lead: { select: { name: true } }, + _count: { select: { issues: true, members: true } }, + }, + orderBy: { name: 'asc' }, + }); + if (projects.length === 0) return console.log('No projects found.'); + for (const p of projects) { + console.log( + `• ${p.name} (${p.slug}) — team ${p.team?.key ?? '—'}, lead ${p.lead?.name ?? '—'} · ` + + `${p.openIssueCount}/${p._count.issues} issues open · ${p._count.members} members`, + ); + } + }); + +// --------------------------------------------------------------------------- +// issues (demonstrates relation include + the `commentCount` computed field) +// --------------------------------------------------------------------------- +program + .command('issues') + .argument('', 'project slug, e.g. "platform"') + .option('-s, --status ', 'filter by status (e.g. IN_PROGRESS)') + .description('List issues in a project') + .action(async (projectSlug: string, opts: { status?: string }) => { + const issues = await db.issue.findMany({ + where: { + project: { slug: projectSlug }, + ...(opts.status ? { status: opts.status as never } : {}), + }, + include: { + assignee: { select: { name: true } }, + labels: { select: { name: true } }, + _count: { select: { children: true, attachments: true } }, + }, + orderBy: { number: 'asc' }, + }); + if (issues.length === 0) return console.log('No issues found.'); + for (const i of issues) { + const labels = i.labels.map((l) => `#${l.name}`).join(' '); + console.log( + `#${i.number} [${i.status}/${i.priority}] ${i.title} — ` + + `@${i.assignee?.name ?? 'unassigned'} · ${i.commentCount} comments · ` + + `${i._count.children} subtasks · ${i._count.attachments} files ${labels}`, + ); + } + }); + +// --------------------------------------------------------------------------- +// issue (deep relation read incl. polymorphic attachments) +// --------------------------------------------------------------------------- +program + .command('issue') + .argument('') + .argument('', 'issue number within the project', Number) + .description('Show a single issue in detail') + .action(async (projectSlug: string, number: number) => { + const issue = await db.issue.findFirst({ + where: { project: { slug: projectSlug }, number }, + include: { + author: { select: { name: true } }, + assignee: { select: { name: true } }, + watchers: { select: { name: true } }, + milestone: { select: { title: true } }, + sprint: { select: { name: true } }, + comments: { include: { author: { select: { name: true } } }, orderBy: { createdAt: 'asc' } }, + attachments: true, // polymorphic — each row includes its concrete fields + timeEntries: true, + }, + }); + if (!issue) return console.log('Issue not found.'); + console.log(`#${issue.number} ${issue.title}`); + console.log(` status : ${issue.status} / ${issue.priority}`); + console.log(` author : ${issue.author.name}`); + console.log(` assignee : ${issue.assignee?.name ?? '—'}`); + console.log(` milestone: ${issue.milestone?.title ?? '—'} sprint: ${issue.sprint?.name ?? '—'}`); + console.log(` watchers : ${issue.watchers.map((w) => w.name).join(', ') || '—'}`); + console.log(` metadata : ${JSON.stringify(issue.metadata ?? {})}`); + const mins = issue.timeEntries.reduce((s, t) => s + t.minutes, 0); + console.log(` time : ${mins} minutes logged`); + console.log(' attachments:'); + for (const a of issue.attachments) { + // `kind` is the polymorphic discriminator; concrete fields are present. + const detail = + a.kind === 'FileAttachment' + ? `${(a as { fileName: string }).fileName}` + : `${(a as { url: string }).url}`; + console.log(` - [${a.kind}] ${detail}`); + } + console.log(' comments:'); + for (const c of issue.comments) { + console.log(` - ${c.author.name}: ${c.body}`); + } + }); + +// --------------------------------------------------------------------------- +// stats (groupBy + aggregate) +// --------------------------------------------------------------------------- +program + .command('stats') + .description('Aggregate issue statistics across all projects') + .action(async () => { + const byStatus = await db.issue.groupBy({ + by: ['status'], + _count: { _all: true }, + _avg: { estimate: true }, + }); + console.log('Issues by status:'); + for (const row of byStatus) { + const avg = row._avg.estimate?.toFixed(1) ?? '—'; + console.log(` ${row.status.padEnd(12)} ${row._count._all} (avg estimate ${avg})`); + } + + const totals = await db.issue.aggregate({ _count: { _all: true }, _sum: { estimate: true } }); + console.log(`\nTotal issues: ${totals._count._all}, total points: ${totals._sum.estimate ?? 0}`); + + const revenue = await db.invoice.aggregate({ + where: { status: 'PAID' }, + _sum: { amountCents: true }, + }); + console.log(`Paid revenue: $${((revenue._sum.amountCents ?? 0) / 100).toFixed(2)}`); + }); + +// --------------------------------------------------------------------------- +// add-issue (interactive-free create in a transaction + activity log) +// --------------------------------------------------------------------------- +program + .command('add-issue') + .argument('') + .argument('', 'issue title') + .option('-p, --priority ', 'NONE|LOW|MEDIUM|HIGH|URGENT', 'NONE') + .description('Create a new issue (auto-numbered) inside a transaction') + .action(async (projectSlug: string, titleParts: string[], opts: { priority: string }) => { + const title = titleParts.join(' '); + const project = await db.project.findFirst({ + where: { slug: projectSlug }, + include: { organization: { select: { id: true, ownerId: true } } }, + }); + if (!project) return console.log(`Project "${projectSlug}" not found.`); + + const created = await db.$transaction(async (tx) => { + const max = await tx.issue.aggregate({ + where: { projectId: project.id }, + _max: { number: true }, + }); + const next = (max._max.number ?? 0) + 1; + const issue = await tx.issue.create({ + data: { + number: next, + title, + priority: opts.priority as never, + project: { connect: { id: project.id } }, + author: { connect: { id: project.organization.ownerId } }, + }, + }); + await tx.activityLog.create({ + data: { + action: 'issue.created', + targetType: 'Issue', + targetId: issue.id, + organization: { connect: { id: project.organization.id } }, + actor: { connect: { id: project.organization.ownerId } }, + }, + }); + return issue; + }); + console.log(`Created issue #${created.number}: ${created.title}`); + }); + +// --------------------------------------------------------------------------- +// signup (Better-Auth — demonstrates the auth integration) +// --------------------------------------------------------------------------- +program + .command('signup') + .argument('') + .argument('') + .option('--password ', 'account password', 'Password123!') + .description('Register a user through Better-Auth (writes user + account rows)') + .action(async (email: string, nameParts: string[], opts: { password: string }) => { + const res: any = await auth.api.signUpEmail({ + body: { email, name: nameParts.join(' '), password: opts.password }, + }); + console.log(`Registered ${res.user.name} <${res.user.email}> (id: ${res.user.id})`); + }); + +// --------------------------------------------------------------------------- +// activity (recent audit log) +// --------------------------------------------------------------------------- +program + .command('activity') + .option('-n, --limit ', 'number of entries', '10') + .description('Show the most recent activity-log entries') + .action(async (opts: { limit: string }) => { + const entries = await db.activityLog.findMany({ + take: Number(opts.limit), + orderBy: { createdAt: 'desc' }, + include: { actor: { select: { name: true } } }, + }); + for (const e of entries) { + console.log(`${e.createdAt.toISOString()} ${e.actor.name} ${e.action} (${e.targetType})`); + } + }); + +program + .parseAsync() + .then(() => process.exit(0)) + .catch((err) => { + console.error(err instanceof Error ? err.message : err); + process.exit(1); + }); diff --git a/samples/taskforge/src/db.ts b/samples/taskforge/src/db.ts new file mode 100644 index 000000000..172bb966a --- /dev/null +++ b/samples/taskforge/src/db.ts @@ -0,0 +1,57 @@ +import { fileURLToPath } from 'node:url'; +import { ZenStackClient, type ClientContract } from '@zenstackhq/orm'; +import { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite'; +import { sql } from '@zenstackhq/orm/helpers'; +import SQLite from 'better-sqlite3'; +import { schema, type SchemaType } from '../zenstack/schema'; + +/** + * The SQLite file is created by `zen db push` next to the schema (the migration + * engine resolves `file:./taskforge.db` relative to the schema directory). + * Resolve it as an absolute path so the runtime opens the same file regardless + * of the current working directory. + */ +const databaseFile = fileURLToPath( + new URL('../zenstack/taskforge.db', import.meta.url), +); + +/** Explicit, fully-inferred client type for use in function signatures. */ +export type DB = ClientContract; + +export function createClient(): DB { + return new ZenStackClient(schema, { + dialect: new SqliteDialect({ + database: new SQLite(databaseFile), + }), + // Implementations for the `@computed` fields declared in the ZModel schema. + // Each is a Kysely sub-query correlated to the owning row via `whereRef`. + computedFields: { + project: { + openIssueCount: (eb, { modelAlias }) => + eb + .selectFrom('Issue') + .whereRef( + 'Issue.projectId', + '=', + sql.ref(`${modelAlias}.id`), + ) + .where('Issue.status', 'not in', ['DONE', 'CANCELED']) + .select(({ fn }) => fn.countAll().as('c')), + }, + issue: { + commentCount: (eb, { modelAlias }) => + eb + .selectFrom('Comment') + .whereRef( + 'Comment.issueId', + '=', + sql.ref(`${modelAlias}.id`), + ) + .select(({ fn }) => fn.countAll().as('c')), + }, + }, + }); +} + +/** Shared client instance used by the CLI. */ +export const db: DB = createClient(); diff --git a/samples/taskforge/src/seed.ts b/samples/taskforge/src/seed.ts new file mode 100644 index 000000000..97b8c157e --- /dev/null +++ b/samples/taskforge/src/seed.ts @@ -0,0 +1,305 @@ +/** + * Seed script — populates the database with a realistic TaskForge workspace. + * + * It demonstrates the two halves of the stack working together: + * 1. Users are created through Better-Auth (`auth.api.signUpEmail`), which + * writes `user` + `account` rows through the ZenStack adapter. + * 2. The whole domain graph (orgs, teams, projects, issues, …) is created with + * the ZenStack ORM, using nested writes and relation connects. + * + * Run with: pnpm seed + */ +import { db } from './db'; +import { auth } from './auth'; + +async function resetDatabase() { + // ZenStack emulates referential actions, so deleting the aggregate roots + // cascades to everything they own. Order: domain first, then auth users. + await db.organization.deleteMany(); + await db.notification.deleteMany(); + await db.user.deleteMany(); + await db.plan.deleteMany(); + await db.verification.deleteMany(); +} + +/** Create a user via Better-Auth and return its id. */ +async function signUp(name: string, email: string): Promise { + const res = await auth.api.signUpEmail({ + body: { name, email, password: 'Password123!' }, + }); + return (res as any).user.id; +} + +async function main() { + console.log('Resetting database…'); + await resetDatabase(); + + console.log('Creating users via Better-Auth…'); + const aliceId = await signUp('Alice Anders', 'alice@taskforge.dev'); + const bobId = await signUp('Bob Burns', 'bob@taskforge.dev'); + const carolId = await signUp('Carol Chen', 'carol@taskforge.dev'); + const daveId = await signUp('Dave Diaz', 'dave@taskforge.dev'); + + console.log('Creating billing plans…'); + await db.plan.createMany({ + data: [ + { name: 'Free', tier: 'FREE', priceCents: 0, seatLimit: 5 }, + { name: 'Pro', tier: 'PRO', priceCents: 1200, seatLimit: 25 }, + { name: 'Business', tier: 'BUSINESS', priceCents: 4900, seatLimit: 100 }, + { name: 'Enterprise', tier: 'ENTERPRISE', priceCents: 0 }, + ], + }); + const proPlan = await db.plan.findUniqueOrThrow({ where: { tier: 'PRO' } }); + + console.log('Creating organization with nested members, billing & teams…'); + const org = await db.organization.create({ + data: { + name: 'Acme Inc.', + slug: 'acme', + owner: { connect: { id: aliceId } }, + members: { + create: [ + { role: 'OWNER', user: { connect: { id: aliceId } } }, + { role: 'ADMIN', user: { connect: { id: bobId } } }, + { role: 'MEMBER', user: { connect: { id: carolId } } }, + { role: 'MEMBER', user: { connect: { id: daveId } } }, + ], + }, + billingCustomer: { + create: { stripeCustomerId: 'cus_acme_001', email: 'billing@acme.test' }, + }, + subscription: { + create: { + status: 'ACTIVE', + plan: { connect: { id: proPlan.id } }, + invoices: { + create: [ + { number: 'INV-0001', amountCents: 1200, status: 'PAID', paidAt: new Date() }, + { number: 'INV-0002', amountCents: 1200, status: 'OPEN' }, + ], + }, + }, + }, + labels: { + create: [ + { name: 'bug', color: '#d73a4a' }, + { name: 'feature', color: '#0e8a16' }, + { name: 'chore', color: '#fbca04' }, + ], + }, + customFields: { + create: [ + { name: 'Severity', type: 'SELECT' }, + { name: 'Reproducible', type: 'BOOLEAN' }, + ], + }, + }, + }); + + console.log('Creating a team and its members…'); + const team = await db.team.create({ + data: { + name: 'Engineering', + key: 'ENG', + description: 'Core product engineering', + organization: { connect: { id: org.id } }, + lead: { connect: { id: bobId } }, + members: { + create: [ + { user: { connect: { id: bobId } } }, + { user: { connect: { id: carolId } } }, + { user: { connect: { id: daveId } } }, + ], + }, + }, + }); + + console.log('Creating a project with members, milestone & sprint…'); + const project = await db.project.create({ + data: { + name: 'Platform', + slug: 'platform', + description: 'The core TaskForge platform', + organization: { connect: { id: org.id } }, + team: { connect: { id: team.id } }, + lead: { connect: { id: bobId } }, + members: { + create: [ + { role: 'LEAD', user: { connect: { id: bobId } } }, + { role: 'CONTRIBUTOR', user: { connect: { id: carolId } } }, + { role: 'CONTRIBUTOR', user: { connect: { id: daveId } } }, + ], + }, + milestones: { + create: [{ title: 'v1.0 launch', status: 'OPEN', dueDate: new Date(Date.now() + 30 * 864e5) }], + }, + sprints: { + create: [{ name: 'Sprint 1', status: 'ACTIVE', goal: 'Ship auth + projects' }], + }, + }, + }); + + const milestone = await db.milestone.findFirstOrThrow({ where: { projectId: project.id } }); + const sprint = await db.sprint.findFirstOrThrow({ where: { projectId: project.id } }); + const bugLabel = await db.label.findFirstOrThrow({ where: { organizationId: org.id, name: 'bug' } }); + const featureLabel = await db.label.findFirstOrThrow({ where: { organizationId: org.id, name: 'feature' } }); + + console.log('Creating issues with labels, watchers, comments & attachments…'); + const issueSpecs = [ + { title: 'Set up authentication', status: 'DONE', priority: 'HIGH', assignee: carolId }, + { title: 'Design project schema', status: 'IN_PROGRESS', priority: 'URGENT', assignee: bobId }, + { title: 'Implement issue board', status: 'TODO', priority: 'MEDIUM', assignee: daveId }, + { title: 'Add billing integration', status: 'BACKLOG', priority: 'LOW', assignee: null }, + { title: 'Flaky CI pipeline', status: 'IN_REVIEW', priority: 'HIGH', assignee: carolId }, + ] as const; + + let n = 0; + let parentIssueId: string | undefined; + for (const spec of issueSpecs) { + n += 1; + const issue = await db.issue.create({ + data: { + number: n, + title: spec.title, + status: spec.status, + priority: spec.priority, + estimate: (n % 3) + 1, + project: { connect: { id: project.id } }, + author: { connect: { id: aliceId } }, + ...(spec.assignee ? { assignee: { connect: { id: spec.assignee } } } : {}), + milestone: { connect: { id: milestone.id } }, + sprint: { connect: { id: sprint.id } }, + ...(parentIssueId ? { parent: { connect: { id: parentIssueId } } } : {}), + metadata: { externalId: `EXT-${100 + n}`, storyPoints: (n % 3) + 1 }, + labels: { connect: n % 2 === 0 ? [{ id: featureLabel.id }] : [{ id: bugLabel.id }] }, + watchers: { connect: [{ id: bobId }, { id: carolId }] }, + comments: { + create: [ + { body: 'Taking a look at this now.', author: { connect: { id: carolId } } }, + { body: 'Thanks, ping me if blocked.', author: { connect: { id: bobId } } }, + ], + }, + timeEntries: { + create: [ + { minutes: 30 * n, note: 'Initial work', user: { connect: { id: spec.assignee ?? aliceId } } }, + ], + }, + }, + }); + + // Polymorphic attachments are created through their concrete models + // (`@@delegate` base entities can't be created directly). The `kind` + // discriminator is set automatically. + await db.linkAttachment.create({ + data: { + url: 'https://example.com/design', + title: 'Design doc', + issue: { connect: { id: issue.id } }, + uploadedBy: { connect: { id: aliceId } }, + }, + }); + if (n % 2 === 0) { + await db.fileAttachment.create({ + data: { + fileName: `notes-${n}.pdf`, + fileSize: 1024 * n, + mimeType: 'application/pdf', + issue: { connect: { id: issue.id } }, + uploadedBy: { connect: { id: bobId } }, + }, + }); + } + + if (n === 1) parentIssueId = issue.id; // later issues become sub-issues of #1 + } + + console.log('Creating a document tree…'); + const rootDoc = await db.document.create({ + data: { + title: 'Engineering Handbook', + content: { format: 'markdown', body: '# Handbook\nWelcome to the team.', revision: 1 }, + project: { connect: { id: project.id } }, + author: { connect: { id: bobId } }, + collaborators: { connect: [{ id: carolId }, { id: daveId }] }, + }, + }); + await db.document.create({ + data: { + title: 'Onboarding', + content: { format: 'markdown', body: '## Day 1\nGet your laptop.', revision: 1 }, + project: { connect: { id: project.id } }, + author: { connect: { id: bobId } }, + parent: { connect: { id: rootDoc.id } }, + }, + }); + + console.log('Creating integrations, webhook, API token & notifications…'); + await db.integration.create({ + data: { + provider: 'GITHUB', + config: { accessToken: 'ghp_xxx', accountName: 'acme', scopes: 'repo,read:org' }, + organization: { connect: { id: org.id } }, + installedBy: { connect: { id: aliceId } }, + }, + }); + await db.webhook.create({ + data: { + url: 'https://hooks.acme.test/taskforge', + secret: 'whsec_123', + config: { events: 'issue.created,issue.updated', contentType: 'application/json' }, + organization: { connect: { id: org.id } }, + }, + }); + await db.apiToken.create({ + data: { + name: 'CI token', + tokenHash: 'hash_ci_token', + scopes: 'issues:read issues:write', + organization: { connect: { id: org.id } }, + user: { connect: { id: bobId } }, + }, + }); + await db.notification.createMany({ + data: [ + { + type: 'ISSUE_ASSIGNED', + message: 'You were assigned "Set up authentication"', + recipientId: carolId, + actorId: aliceId, + }, + { type: 'COMMENT_ADDED', message: 'Bob commented on an issue', recipientId: carolId, actorId: bobId }, + ], + }); + await db.activityLog.createMany({ + data: [ + { + action: 'project.created', + targetType: 'Project', + targetId: project.id, + organizationId: org.id, + actorId: aliceId, + }, + { action: 'team.created', targetType: 'Team', targetId: team.id, organizationId: org.id, actorId: aliceId }, + ], + }); + + console.log('\n✅ Seed complete.'); + const counts = { + users: await db.user.count(), + organizations: await db.organization.count(), + teams: await db.team.count(), + projects: await db.project.count(), + issues: await db.issue.count(), + comments: await db.comment.count(), + attachments: await db.attachment.count(), + documents: await db.document.count(), + }; + console.table(counts); +} + +main() + .then(() => process.exit(0)) + .catch((err) => { + console.error(err); + process.exit(1); + }); diff --git a/samples/taskforge/tsconfig.json b/samples/taskforge/tsconfig.json new file mode 100644 index 000000000..7b797d55d --- /dev/null +++ b/samples/taskforge/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "Bundler", + "lib": ["ES2022"], + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "declaration": true, + "outDir": "dist", + "rootDir": ".", + "types": ["node"] + }, + "include": ["src/**/*.ts", "zenstack/**/*.ts"] +} diff --git a/samples/taskforge/zenstack/input.ts b/samples/taskforge/zenstack/input.ts new file mode 100644 index 000000000..84e8b5a5e --- /dev/null +++ b/samples/taskforge/zenstack/input.ts @@ -0,0 +1,860 @@ +////////////////////////////////////////////////////////////////////////////////////////////// +// DO NOT MODIFY THIS FILE // +// This file is automatically generated by ZenStack CLI and should not be manually updated. // +////////////////////////////////////////////////////////////////////////////////////////////// + +/* eslint-disable */ + +import { type SchemaType as $Schema } from "./schema"; +import type { FindManyArgs as $FindManyArgs, FindUniqueArgs as $FindUniqueArgs, FindFirstArgs as $FindFirstArgs, ExistsArgs as $ExistsArgs, CreateArgs as $CreateArgs, CreateManyArgs as $CreateManyArgs, CreateManyAndReturnArgs as $CreateManyAndReturnArgs, UpdateArgs as $UpdateArgs, UpdateManyArgs as $UpdateManyArgs, UpdateManyAndReturnArgs as $UpdateManyAndReturnArgs, UpsertArgs as $UpsertArgs, DeleteArgs as $DeleteArgs, DeleteManyArgs as $DeleteManyArgs, CountArgs as $CountArgs, AggregateArgs as $AggregateArgs, GroupByArgs as $GroupByArgs, WhereInput as $WhereInput, SelectInput as $SelectInput, IncludeInput as $IncludeInput, OmitInput as $OmitInput, UncheckedCreateInput as $UncheckedCreateInput, CheckedCreateInput as $CheckedCreateInput, UncheckedUpdateInput as $UncheckedUpdateInput, CheckedUpdateInput as $CheckedUpdateInput, QueryOptions as $QueryOptions } from "@zenstackhq/orm"; +import type { SimplifiedPlainResult as $Result, SelectIncludeOmit as $SelectIncludeOmit } from "@zenstackhq/orm"; +export type UserFindManyArgs = $FindManyArgs<$Schema, "User">; +export type UserFindUniqueArgs = $FindUniqueArgs<$Schema, "User">; +export type UserFindFirstArgs = $FindFirstArgs<$Schema, "User">; +export type UserExistsArgs = $ExistsArgs<$Schema, "User">; +export type UserCreateArgs = $CreateArgs<$Schema, "User">; +export type UserCreateManyArgs = $CreateManyArgs<$Schema, "User">; +export type UserCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "User">; +export type UserUpdateArgs = $UpdateArgs<$Schema, "User">; +export type UserUpdateManyArgs = $UpdateManyArgs<$Schema, "User">; +export type UserUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "User">; +export type UserUpsertArgs = $UpsertArgs<$Schema, "User">; +export type UserDeleteArgs = $DeleteArgs<$Schema, "User">; +export type UserDeleteManyArgs = $DeleteManyArgs<$Schema, "User">; +export type UserCountArgs = $CountArgs<$Schema, "User">; +export type UserAggregateArgs = $AggregateArgs<$Schema, "User">; +export type UserGroupByArgs = $GroupByArgs<$Schema, "User">; +export type UserWhereInput = $WhereInput<$Schema, "User">; +export type UserSelect = $SelectInput<$Schema, "User">; +export type UserInclude = $IncludeInput<$Schema, "User">; +export type UserOmit = $OmitInput<$Schema, "User">; +export type UserUncheckedCreateInput = $UncheckedCreateInput<$Schema, "User">; +export type UserCheckedCreateInput = $CheckedCreateInput<$Schema, "User">; +export type UserUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "User">; +export type UserCheckedUpdateInput = $CheckedUpdateInput<$Schema, "User">; +export type UserGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "User", Args, Options>; +export type AccountFindManyArgs = $FindManyArgs<$Schema, "Account">; +export type AccountFindUniqueArgs = $FindUniqueArgs<$Schema, "Account">; +export type AccountFindFirstArgs = $FindFirstArgs<$Schema, "Account">; +export type AccountExistsArgs = $ExistsArgs<$Schema, "Account">; +export type AccountCreateArgs = $CreateArgs<$Schema, "Account">; +export type AccountCreateManyArgs = $CreateManyArgs<$Schema, "Account">; +export type AccountCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Account">; +export type AccountUpdateArgs = $UpdateArgs<$Schema, "Account">; +export type AccountUpdateManyArgs = $UpdateManyArgs<$Schema, "Account">; +export type AccountUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Account">; +export type AccountUpsertArgs = $UpsertArgs<$Schema, "Account">; +export type AccountDeleteArgs = $DeleteArgs<$Schema, "Account">; +export type AccountDeleteManyArgs = $DeleteManyArgs<$Schema, "Account">; +export type AccountCountArgs = $CountArgs<$Schema, "Account">; +export type AccountAggregateArgs = $AggregateArgs<$Schema, "Account">; +export type AccountGroupByArgs = $GroupByArgs<$Schema, "Account">; +export type AccountWhereInput = $WhereInput<$Schema, "Account">; +export type AccountSelect = $SelectInput<$Schema, "Account">; +export type AccountInclude = $IncludeInput<$Schema, "Account">; +export type AccountOmit = $OmitInput<$Schema, "Account">; +export type AccountUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Account">; +export type AccountCheckedCreateInput = $CheckedCreateInput<$Schema, "Account">; +export type AccountUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Account">; +export type AccountCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Account">; +export type AccountGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Account", Args, Options>; +export type SessionFindManyArgs = $FindManyArgs<$Schema, "Session">; +export type SessionFindUniqueArgs = $FindUniqueArgs<$Schema, "Session">; +export type SessionFindFirstArgs = $FindFirstArgs<$Schema, "Session">; +export type SessionExistsArgs = $ExistsArgs<$Schema, "Session">; +export type SessionCreateArgs = $CreateArgs<$Schema, "Session">; +export type SessionCreateManyArgs = $CreateManyArgs<$Schema, "Session">; +export type SessionCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Session">; +export type SessionUpdateArgs = $UpdateArgs<$Schema, "Session">; +export type SessionUpdateManyArgs = $UpdateManyArgs<$Schema, "Session">; +export type SessionUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Session">; +export type SessionUpsertArgs = $UpsertArgs<$Schema, "Session">; +export type SessionDeleteArgs = $DeleteArgs<$Schema, "Session">; +export type SessionDeleteManyArgs = $DeleteManyArgs<$Schema, "Session">; +export type SessionCountArgs = $CountArgs<$Schema, "Session">; +export type SessionAggregateArgs = $AggregateArgs<$Schema, "Session">; +export type SessionGroupByArgs = $GroupByArgs<$Schema, "Session">; +export type SessionWhereInput = $WhereInput<$Schema, "Session">; +export type SessionSelect = $SelectInput<$Schema, "Session">; +export type SessionInclude = $IncludeInput<$Schema, "Session">; +export type SessionOmit = $OmitInput<$Schema, "Session">; +export type SessionUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Session">; +export type SessionCheckedCreateInput = $CheckedCreateInput<$Schema, "Session">; +export type SessionUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Session">; +export type SessionCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Session">; +export type SessionGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Session", Args, Options>; +export type VerificationFindManyArgs = $FindManyArgs<$Schema, "Verification">; +export type VerificationFindUniqueArgs = $FindUniqueArgs<$Schema, "Verification">; +export type VerificationFindFirstArgs = $FindFirstArgs<$Schema, "Verification">; +export type VerificationExistsArgs = $ExistsArgs<$Schema, "Verification">; +export type VerificationCreateArgs = $CreateArgs<$Schema, "Verification">; +export type VerificationCreateManyArgs = $CreateManyArgs<$Schema, "Verification">; +export type VerificationCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Verification">; +export type VerificationUpdateArgs = $UpdateArgs<$Schema, "Verification">; +export type VerificationUpdateManyArgs = $UpdateManyArgs<$Schema, "Verification">; +export type VerificationUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Verification">; +export type VerificationUpsertArgs = $UpsertArgs<$Schema, "Verification">; +export type VerificationDeleteArgs = $DeleteArgs<$Schema, "Verification">; +export type VerificationDeleteManyArgs = $DeleteManyArgs<$Schema, "Verification">; +export type VerificationCountArgs = $CountArgs<$Schema, "Verification">; +export type VerificationAggregateArgs = $AggregateArgs<$Schema, "Verification">; +export type VerificationGroupByArgs = $GroupByArgs<$Schema, "Verification">; +export type VerificationWhereInput = $WhereInput<$Schema, "Verification">; +export type VerificationSelect = $SelectInput<$Schema, "Verification">; +export type VerificationInclude = $IncludeInput<$Schema, "Verification">; +export type VerificationOmit = $OmitInput<$Schema, "Verification">; +export type VerificationUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Verification">; +export type VerificationCheckedCreateInput = $CheckedCreateInput<$Schema, "Verification">; +export type VerificationUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Verification">; +export type VerificationCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Verification">; +export type VerificationGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Verification", Args, Options>; +export type OrganizationFindManyArgs = $FindManyArgs<$Schema, "Organization">; +export type OrganizationFindUniqueArgs = $FindUniqueArgs<$Schema, "Organization">; +export type OrganizationFindFirstArgs = $FindFirstArgs<$Schema, "Organization">; +export type OrganizationExistsArgs = $ExistsArgs<$Schema, "Organization">; +export type OrganizationCreateArgs = $CreateArgs<$Schema, "Organization">; +export type OrganizationCreateManyArgs = $CreateManyArgs<$Schema, "Organization">; +export type OrganizationCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Organization">; +export type OrganizationUpdateArgs = $UpdateArgs<$Schema, "Organization">; +export type OrganizationUpdateManyArgs = $UpdateManyArgs<$Schema, "Organization">; +export type OrganizationUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Organization">; +export type OrganizationUpsertArgs = $UpsertArgs<$Schema, "Organization">; +export type OrganizationDeleteArgs = $DeleteArgs<$Schema, "Organization">; +export type OrganizationDeleteManyArgs = $DeleteManyArgs<$Schema, "Organization">; +export type OrganizationCountArgs = $CountArgs<$Schema, "Organization">; +export type OrganizationAggregateArgs = $AggregateArgs<$Schema, "Organization">; +export type OrganizationGroupByArgs = $GroupByArgs<$Schema, "Organization">; +export type OrganizationWhereInput = $WhereInput<$Schema, "Organization">; +export type OrganizationSelect = $SelectInput<$Schema, "Organization">; +export type OrganizationInclude = $IncludeInput<$Schema, "Organization">; +export type OrganizationOmit = $OmitInput<$Schema, "Organization">; +export type OrganizationUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Organization">; +export type OrganizationCheckedCreateInput = $CheckedCreateInput<$Schema, "Organization">; +export type OrganizationUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Organization">; +export type OrganizationCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Organization">; +export type OrganizationGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Organization", Args, Options>; +export type MembershipFindManyArgs = $FindManyArgs<$Schema, "Membership">; +export type MembershipFindUniqueArgs = $FindUniqueArgs<$Schema, "Membership">; +export type MembershipFindFirstArgs = $FindFirstArgs<$Schema, "Membership">; +export type MembershipExistsArgs = $ExistsArgs<$Schema, "Membership">; +export type MembershipCreateArgs = $CreateArgs<$Schema, "Membership">; +export type MembershipCreateManyArgs = $CreateManyArgs<$Schema, "Membership">; +export type MembershipCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Membership">; +export type MembershipUpdateArgs = $UpdateArgs<$Schema, "Membership">; +export type MembershipUpdateManyArgs = $UpdateManyArgs<$Schema, "Membership">; +export type MembershipUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Membership">; +export type MembershipUpsertArgs = $UpsertArgs<$Schema, "Membership">; +export type MembershipDeleteArgs = $DeleteArgs<$Schema, "Membership">; +export type MembershipDeleteManyArgs = $DeleteManyArgs<$Schema, "Membership">; +export type MembershipCountArgs = $CountArgs<$Schema, "Membership">; +export type MembershipAggregateArgs = $AggregateArgs<$Schema, "Membership">; +export type MembershipGroupByArgs = $GroupByArgs<$Schema, "Membership">; +export type MembershipWhereInput = $WhereInput<$Schema, "Membership">; +export type MembershipSelect = $SelectInput<$Schema, "Membership">; +export type MembershipInclude = $IncludeInput<$Schema, "Membership">; +export type MembershipOmit = $OmitInput<$Schema, "Membership">; +export type MembershipUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Membership">; +export type MembershipCheckedCreateInput = $CheckedCreateInput<$Schema, "Membership">; +export type MembershipUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Membership">; +export type MembershipCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Membership">; +export type MembershipGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Membership", Args, Options>; +export type InvitationFindManyArgs = $FindManyArgs<$Schema, "Invitation">; +export type InvitationFindUniqueArgs = $FindUniqueArgs<$Schema, "Invitation">; +export type InvitationFindFirstArgs = $FindFirstArgs<$Schema, "Invitation">; +export type InvitationExistsArgs = $ExistsArgs<$Schema, "Invitation">; +export type InvitationCreateArgs = $CreateArgs<$Schema, "Invitation">; +export type InvitationCreateManyArgs = $CreateManyArgs<$Schema, "Invitation">; +export type InvitationCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Invitation">; +export type InvitationUpdateArgs = $UpdateArgs<$Schema, "Invitation">; +export type InvitationUpdateManyArgs = $UpdateManyArgs<$Schema, "Invitation">; +export type InvitationUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Invitation">; +export type InvitationUpsertArgs = $UpsertArgs<$Schema, "Invitation">; +export type InvitationDeleteArgs = $DeleteArgs<$Schema, "Invitation">; +export type InvitationDeleteManyArgs = $DeleteManyArgs<$Schema, "Invitation">; +export type InvitationCountArgs = $CountArgs<$Schema, "Invitation">; +export type InvitationAggregateArgs = $AggregateArgs<$Schema, "Invitation">; +export type InvitationGroupByArgs = $GroupByArgs<$Schema, "Invitation">; +export type InvitationWhereInput = $WhereInput<$Schema, "Invitation">; +export type InvitationSelect = $SelectInput<$Schema, "Invitation">; +export type InvitationInclude = $IncludeInput<$Schema, "Invitation">; +export type InvitationOmit = $OmitInput<$Schema, "Invitation">; +export type InvitationUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Invitation">; +export type InvitationCheckedCreateInput = $CheckedCreateInput<$Schema, "Invitation">; +export type InvitationUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Invitation">; +export type InvitationCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Invitation">; +export type InvitationGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Invitation", Args, Options>; +export type TeamFindManyArgs = $FindManyArgs<$Schema, "Team">; +export type TeamFindUniqueArgs = $FindUniqueArgs<$Schema, "Team">; +export type TeamFindFirstArgs = $FindFirstArgs<$Schema, "Team">; +export type TeamExistsArgs = $ExistsArgs<$Schema, "Team">; +export type TeamCreateArgs = $CreateArgs<$Schema, "Team">; +export type TeamCreateManyArgs = $CreateManyArgs<$Schema, "Team">; +export type TeamCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Team">; +export type TeamUpdateArgs = $UpdateArgs<$Schema, "Team">; +export type TeamUpdateManyArgs = $UpdateManyArgs<$Schema, "Team">; +export type TeamUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Team">; +export type TeamUpsertArgs = $UpsertArgs<$Schema, "Team">; +export type TeamDeleteArgs = $DeleteArgs<$Schema, "Team">; +export type TeamDeleteManyArgs = $DeleteManyArgs<$Schema, "Team">; +export type TeamCountArgs = $CountArgs<$Schema, "Team">; +export type TeamAggregateArgs = $AggregateArgs<$Schema, "Team">; +export type TeamGroupByArgs = $GroupByArgs<$Schema, "Team">; +export type TeamWhereInput = $WhereInput<$Schema, "Team">; +export type TeamSelect = $SelectInput<$Schema, "Team">; +export type TeamInclude = $IncludeInput<$Schema, "Team">; +export type TeamOmit = $OmitInput<$Schema, "Team">; +export type TeamUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Team">; +export type TeamCheckedCreateInput = $CheckedCreateInput<$Schema, "Team">; +export type TeamUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Team">; +export type TeamCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Team">; +export type TeamGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Team", Args, Options>; +export type TeamMembershipFindManyArgs = $FindManyArgs<$Schema, "TeamMembership">; +export type TeamMembershipFindUniqueArgs = $FindUniqueArgs<$Schema, "TeamMembership">; +export type TeamMembershipFindFirstArgs = $FindFirstArgs<$Schema, "TeamMembership">; +export type TeamMembershipExistsArgs = $ExistsArgs<$Schema, "TeamMembership">; +export type TeamMembershipCreateArgs = $CreateArgs<$Schema, "TeamMembership">; +export type TeamMembershipCreateManyArgs = $CreateManyArgs<$Schema, "TeamMembership">; +export type TeamMembershipCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "TeamMembership">; +export type TeamMembershipUpdateArgs = $UpdateArgs<$Schema, "TeamMembership">; +export type TeamMembershipUpdateManyArgs = $UpdateManyArgs<$Schema, "TeamMembership">; +export type TeamMembershipUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "TeamMembership">; +export type TeamMembershipUpsertArgs = $UpsertArgs<$Schema, "TeamMembership">; +export type TeamMembershipDeleteArgs = $DeleteArgs<$Schema, "TeamMembership">; +export type TeamMembershipDeleteManyArgs = $DeleteManyArgs<$Schema, "TeamMembership">; +export type TeamMembershipCountArgs = $CountArgs<$Schema, "TeamMembership">; +export type TeamMembershipAggregateArgs = $AggregateArgs<$Schema, "TeamMembership">; +export type TeamMembershipGroupByArgs = $GroupByArgs<$Schema, "TeamMembership">; +export type TeamMembershipWhereInput = $WhereInput<$Schema, "TeamMembership">; +export type TeamMembershipSelect = $SelectInput<$Schema, "TeamMembership">; +export type TeamMembershipInclude = $IncludeInput<$Schema, "TeamMembership">; +export type TeamMembershipOmit = $OmitInput<$Schema, "TeamMembership">; +export type TeamMembershipUncheckedCreateInput = $UncheckedCreateInput<$Schema, "TeamMembership">; +export type TeamMembershipCheckedCreateInput = $CheckedCreateInput<$Schema, "TeamMembership">; +export type TeamMembershipUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "TeamMembership">; +export type TeamMembershipCheckedUpdateInput = $CheckedUpdateInput<$Schema, "TeamMembership">; +export type TeamMembershipGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "TeamMembership", Args, Options>; +export type ProjectFindManyArgs = $FindManyArgs<$Schema, "Project">; +export type ProjectFindUniqueArgs = $FindUniqueArgs<$Schema, "Project">; +export type ProjectFindFirstArgs = $FindFirstArgs<$Schema, "Project">; +export type ProjectExistsArgs = $ExistsArgs<$Schema, "Project">; +export type ProjectCreateArgs = $CreateArgs<$Schema, "Project">; +export type ProjectCreateManyArgs = $CreateManyArgs<$Schema, "Project">; +export type ProjectCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Project">; +export type ProjectUpdateArgs = $UpdateArgs<$Schema, "Project">; +export type ProjectUpdateManyArgs = $UpdateManyArgs<$Schema, "Project">; +export type ProjectUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Project">; +export type ProjectUpsertArgs = $UpsertArgs<$Schema, "Project">; +export type ProjectDeleteArgs = $DeleteArgs<$Schema, "Project">; +export type ProjectDeleteManyArgs = $DeleteManyArgs<$Schema, "Project">; +export type ProjectCountArgs = $CountArgs<$Schema, "Project">; +export type ProjectAggregateArgs = $AggregateArgs<$Schema, "Project">; +export type ProjectGroupByArgs = $GroupByArgs<$Schema, "Project">; +export type ProjectWhereInput = $WhereInput<$Schema, "Project">; +export type ProjectSelect = $SelectInput<$Schema, "Project">; +export type ProjectInclude = $IncludeInput<$Schema, "Project">; +export type ProjectOmit = $OmitInput<$Schema, "Project">; +export type ProjectUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Project">; +export type ProjectCheckedCreateInput = $CheckedCreateInput<$Schema, "Project">; +export type ProjectUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Project">; +export type ProjectCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Project">; +export type ProjectGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Project", Args, Options>; +export type ProjectMemberFindManyArgs = $FindManyArgs<$Schema, "ProjectMember">; +export type ProjectMemberFindUniqueArgs = $FindUniqueArgs<$Schema, "ProjectMember">; +export type ProjectMemberFindFirstArgs = $FindFirstArgs<$Schema, "ProjectMember">; +export type ProjectMemberExistsArgs = $ExistsArgs<$Schema, "ProjectMember">; +export type ProjectMemberCreateArgs = $CreateArgs<$Schema, "ProjectMember">; +export type ProjectMemberCreateManyArgs = $CreateManyArgs<$Schema, "ProjectMember">; +export type ProjectMemberCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "ProjectMember">; +export type ProjectMemberUpdateArgs = $UpdateArgs<$Schema, "ProjectMember">; +export type ProjectMemberUpdateManyArgs = $UpdateManyArgs<$Schema, "ProjectMember">; +export type ProjectMemberUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "ProjectMember">; +export type ProjectMemberUpsertArgs = $UpsertArgs<$Schema, "ProjectMember">; +export type ProjectMemberDeleteArgs = $DeleteArgs<$Schema, "ProjectMember">; +export type ProjectMemberDeleteManyArgs = $DeleteManyArgs<$Schema, "ProjectMember">; +export type ProjectMemberCountArgs = $CountArgs<$Schema, "ProjectMember">; +export type ProjectMemberAggregateArgs = $AggregateArgs<$Schema, "ProjectMember">; +export type ProjectMemberGroupByArgs = $GroupByArgs<$Schema, "ProjectMember">; +export type ProjectMemberWhereInput = $WhereInput<$Schema, "ProjectMember">; +export type ProjectMemberSelect = $SelectInput<$Schema, "ProjectMember">; +export type ProjectMemberInclude = $IncludeInput<$Schema, "ProjectMember">; +export type ProjectMemberOmit = $OmitInput<$Schema, "ProjectMember">; +export type ProjectMemberUncheckedCreateInput = $UncheckedCreateInput<$Schema, "ProjectMember">; +export type ProjectMemberCheckedCreateInput = $CheckedCreateInput<$Schema, "ProjectMember">; +export type ProjectMemberUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "ProjectMember">; +export type ProjectMemberCheckedUpdateInput = $CheckedUpdateInput<$Schema, "ProjectMember">; +export type ProjectMemberGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "ProjectMember", Args, Options>; +export type IssueFindManyArgs = $FindManyArgs<$Schema, "Issue">; +export type IssueFindUniqueArgs = $FindUniqueArgs<$Schema, "Issue">; +export type IssueFindFirstArgs = $FindFirstArgs<$Schema, "Issue">; +export type IssueExistsArgs = $ExistsArgs<$Schema, "Issue">; +export type IssueCreateArgs = $CreateArgs<$Schema, "Issue">; +export type IssueCreateManyArgs = $CreateManyArgs<$Schema, "Issue">; +export type IssueCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Issue">; +export type IssueUpdateArgs = $UpdateArgs<$Schema, "Issue">; +export type IssueUpdateManyArgs = $UpdateManyArgs<$Schema, "Issue">; +export type IssueUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Issue">; +export type IssueUpsertArgs = $UpsertArgs<$Schema, "Issue">; +export type IssueDeleteArgs = $DeleteArgs<$Schema, "Issue">; +export type IssueDeleteManyArgs = $DeleteManyArgs<$Schema, "Issue">; +export type IssueCountArgs = $CountArgs<$Schema, "Issue">; +export type IssueAggregateArgs = $AggregateArgs<$Schema, "Issue">; +export type IssueGroupByArgs = $GroupByArgs<$Schema, "Issue">; +export type IssueWhereInput = $WhereInput<$Schema, "Issue">; +export type IssueSelect = $SelectInput<$Schema, "Issue">; +export type IssueInclude = $IncludeInput<$Schema, "Issue">; +export type IssueOmit = $OmitInput<$Schema, "Issue">; +export type IssueUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Issue">; +export type IssueCheckedCreateInput = $CheckedCreateInput<$Schema, "Issue">; +export type IssueUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Issue">; +export type IssueCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Issue">; +export type IssueGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Issue", Args, Options>; +export type LabelFindManyArgs = $FindManyArgs<$Schema, "Label">; +export type LabelFindUniqueArgs = $FindUniqueArgs<$Schema, "Label">; +export type LabelFindFirstArgs = $FindFirstArgs<$Schema, "Label">; +export type LabelExistsArgs = $ExistsArgs<$Schema, "Label">; +export type LabelCreateArgs = $CreateArgs<$Schema, "Label">; +export type LabelCreateManyArgs = $CreateManyArgs<$Schema, "Label">; +export type LabelCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Label">; +export type LabelUpdateArgs = $UpdateArgs<$Schema, "Label">; +export type LabelUpdateManyArgs = $UpdateManyArgs<$Schema, "Label">; +export type LabelUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Label">; +export type LabelUpsertArgs = $UpsertArgs<$Schema, "Label">; +export type LabelDeleteArgs = $DeleteArgs<$Schema, "Label">; +export type LabelDeleteManyArgs = $DeleteManyArgs<$Schema, "Label">; +export type LabelCountArgs = $CountArgs<$Schema, "Label">; +export type LabelAggregateArgs = $AggregateArgs<$Schema, "Label">; +export type LabelGroupByArgs = $GroupByArgs<$Schema, "Label">; +export type LabelWhereInput = $WhereInput<$Schema, "Label">; +export type LabelSelect = $SelectInput<$Schema, "Label">; +export type LabelInclude = $IncludeInput<$Schema, "Label">; +export type LabelOmit = $OmitInput<$Schema, "Label">; +export type LabelUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Label">; +export type LabelCheckedCreateInput = $CheckedCreateInput<$Schema, "Label">; +export type LabelUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Label">; +export type LabelCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Label">; +export type LabelGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Label", Args, Options>; +export type MilestoneFindManyArgs = $FindManyArgs<$Schema, "Milestone">; +export type MilestoneFindUniqueArgs = $FindUniqueArgs<$Schema, "Milestone">; +export type MilestoneFindFirstArgs = $FindFirstArgs<$Schema, "Milestone">; +export type MilestoneExistsArgs = $ExistsArgs<$Schema, "Milestone">; +export type MilestoneCreateArgs = $CreateArgs<$Schema, "Milestone">; +export type MilestoneCreateManyArgs = $CreateManyArgs<$Schema, "Milestone">; +export type MilestoneCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Milestone">; +export type MilestoneUpdateArgs = $UpdateArgs<$Schema, "Milestone">; +export type MilestoneUpdateManyArgs = $UpdateManyArgs<$Schema, "Milestone">; +export type MilestoneUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Milestone">; +export type MilestoneUpsertArgs = $UpsertArgs<$Schema, "Milestone">; +export type MilestoneDeleteArgs = $DeleteArgs<$Schema, "Milestone">; +export type MilestoneDeleteManyArgs = $DeleteManyArgs<$Schema, "Milestone">; +export type MilestoneCountArgs = $CountArgs<$Schema, "Milestone">; +export type MilestoneAggregateArgs = $AggregateArgs<$Schema, "Milestone">; +export type MilestoneGroupByArgs = $GroupByArgs<$Schema, "Milestone">; +export type MilestoneWhereInput = $WhereInput<$Schema, "Milestone">; +export type MilestoneSelect = $SelectInput<$Schema, "Milestone">; +export type MilestoneInclude = $IncludeInput<$Schema, "Milestone">; +export type MilestoneOmit = $OmitInput<$Schema, "Milestone">; +export type MilestoneUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Milestone">; +export type MilestoneCheckedCreateInput = $CheckedCreateInput<$Schema, "Milestone">; +export type MilestoneUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Milestone">; +export type MilestoneCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Milestone">; +export type MilestoneGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Milestone", Args, Options>; +export type SprintFindManyArgs = $FindManyArgs<$Schema, "Sprint">; +export type SprintFindUniqueArgs = $FindUniqueArgs<$Schema, "Sprint">; +export type SprintFindFirstArgs = $FindFirstArgs<$Schema, "Sprint">; +export type SprintExistsArgs = $ExistsArgs<$Schema, "Sprint">; +export type SprintCreateArgs = $CreateArgs<$Schema, "Sprint">; +export type SprintCreateManyArgs = $CreateManyArgs<$Schema, "Sprint">; +export type SprintCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Sprint">; +export type SprintUpdateArgs = $UpdateArgs<$Schema, "Sprint">; +export type SprintUpdateManyArgs = $UpdateManyArgs<$Schema, "Sprint">; +export type SprintUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Sprint">; +export type SprintUpsertArgs = $UpsertArgs<$Schema, "Sprint">; +export type SprintDeleteArgs = $DeleteArgs<$Schema, "Sprint">; +export type SprintDeleteManyArgs = $DeleteManyArgs<$Schema, "Sprint">; +export type SprintCountArgs = $CountArgs<$Schema, "Sprint">; +export type SprintAggregateArgs = $AggregateArgs<$Schema, "Sprint">; +export type SprintGroupByArgs = $GroupByArgs<$Schema, "Sprint">; +export type SprintWhereInput = $WhereInput<$Schema, "Sprint">; +export type SprintSelect = $SelectInput<$Schema, "Sprint">; +export type SprintInclude = $IncludeInput<$Schema, "Sprint">; +export type SprintOmit = $OmitInput<$Schema, "Sprint">; +export type SprintUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Sprint">; +export type SprintCheckedCreateInput = $CheckedCreateInput<$Schema, "Sprint">; +export type SprintUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Sprint">; +export type SprintCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Sprint">; +export type SprintGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Sprint", Args, Options>; +export type CommentFindManyArgs = $FindManyArgs<$Schema, "Comment">; +export type CommentFindUniqueArgs = $FindUniqueArgs<$Schema, "Comment">; +export type CommentFindFirstArgs = $FindFirstArgs<$Schema, "Comment">; +export type CommentExistsArgs = $ExistsArgs<$Schema, "Comment">; +export type CommentCreateArgs = $CreateArgs<$Schema, "Comment">; +export type CommentCreateManyArgs = $CreateManyArgs<$Schema, "Comment">; +export type CommentCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Comment">; +export type CommentUpdateArgs = $UpdateArgs<$Schema, "Comment">; +export type CommentUpdateManyArgs = $UpdateManyArgs<$Schema, "Comment">; +export type CommentUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Comment">; +export type CommentUpsertArgs = $UpsertArgs<$Schema, "Comment">; +export type CommentDeleteArgs = $DeleteArgs<$Schema, "Comment">; +export type CommentDeleteManyArgs = $DeleteManyArgs<$Schema, "Comment">; +export type CommentCountArgs = $CountArgs<$Schema, "Comment">; +export type CommentAggregateArgs = $AggregateArgs<$Schema, "Comment">; +export type CommentGroupByArgs = $GroupByArgs<$Schema, "Comment">; +export type CommentWhereInput = $WhereInput<$Schema, "Comment">; +export type CommentSelect = $SelectInput<$Schema, "Comment">; +export type CommentInclude = $IncludeInput<$Schema, "Comment">; +export type CommentOmit = $OmitInput<$Schema, "Comment">; +export type CommentUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Comment">; +export type CommentCheckedCreateInput = $CheckedCreateInput<$Schema, "Comment">; +export type CommentUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Comment">; +export type CommentCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Comment">; +export type CommentGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Comment", Args, Options>; +export type ReactionFindManyArgs = $FindManyArgs<$Schema, "Reaction">; +export type ReactionFindUniqueArgs = $FindUniqueArgs<$Schema, "Reaction">; +export type ReactionFindFirstArgs = $FindFirstArgs<$Schema, "Reaction">; +export type ReactionExistsArgs = $ExistsArgs<$Schema, "Reaction">; +export type ReactionCreateArgs = $CreateArgs<$Schema, "Reaction">; +export type ReactionCreateManyArgs = $CreateManyArgs<$Schema, "Reaction">; +export type ReactionCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Reaction">; +export type ReactionUpdateArgs = $UpdateArgs<$Schema, "Reaction">; +export type ReactionUpdateManyArgs = $UpdateManyArgs<$Schema, "Reaction">; +export type ReactionUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Reaction">; +export type ReactionUpsertArgs = $UpsertArgs<$Schema, "Reaction">; +export type ReactionDeleteArgs = $DeleteArgs<$Schema, "Reaction">; +export type ReactionDeleteManyArgs = $DeleteManyArgs<$Schema, "Reaction">; +export type ReactionCountArgs = $CountArgs<$Schema, "Reaction">; +export type ReactionAggregateArgs = $AggregateArgs<$Schema, "Reaction">; +export type ReactionGroupByArgs = $GroupByArgs<$Schema, "Reaction">; +export type ReactionWhereInput = $WhereInput<$Schema, "Reaction">; +export type ReactionSelect = $SelectInput<$Schema, "Reaction">; +export type ReactionInclude = $IncludeInput<$Schema, "Reaction">; +export type ReactionOmit = $OmitInput<$Schema, "Reaction">; +export type ReactionUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Reaction">; +export type ReactionCheckedCreateInput = $CheckedCreateInput<$Schema, "Reaction">; +export type ReactionUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Reaction">; +export type ReactionCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Reaction">; +export type ReactionGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Reaction", Args, Options>; +export type AttachmentFindManyArgs = $FindManyArgs<$Schema, "Attachment">; +export type AttachmentFindUniqueArgs = $FindUniqueArgs<$Schema, "Attachment">; +export type AttachmentFindFirstArgs = $FindFirstArgs<$Schema, "Attachment">; +export type AttachmentExistsArgs = $ExistsArgs<$Schema, "Attachment">; +export type AttachmentCreateArgs = $CreateArgs<$Schema, "Attachment">; +export type AttachmentCreateManyArgs = $CreateManyArgs<$Schema, "Attachment">; +export type AttachmentCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Attachment">; +export type AttachmentUpdateArgs = $UpdateArgs<$Schema, "Attachment">; +export type AttachmentUpdateManyArgs = $UpdateManyArgs<$Schema, "Attachment">; +export type AttachmentUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Attachment">; +export type AttachmentUpsertArgs = $UpsertArgs<$Schema, "Attachment">; +export type AttachmentDeleteArgs = $DeleteArgs<$Schema, "Attachment">; +export type AttachmentDeleteManyArgs = $DeleteManyArgs<$Schema, "Attachment">; +export type AttachmentCountArgs = $CountArgs<$Schema, "Attachment">; +export type AttachmentAggregateArgs = $AggregateArgs<$Schema, "Attachment">; +export type AttachmentGroupByArgs = $GroupByArgs<$Schema, "Attachment">; +export type AttachmentWhereInput = $WhereInput<$Schema, "Attachment">; +export type AttachmentSelect = $SelectInput<$Schema, "Attachment">; +export type AttachmentInclude = $IncludeInput<$Schema, "Attachment">; +export type AttachmentOmit = $OmitInput<$Schema, "Attachment">; +export type AttachmentUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Attachment">; +export type AttachmentCheckedCreateInput = $CheckedCreateInput<$Schema, "Attachment">; +export type AttachmentUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Attachment">; +export type AttachmentCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Attachment">; +export type AttachmentGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Attachment", Args, Options>; +export type FileAttachmentFindManyArgs = $FindManyArgs<$Schema, "FileAttachment">; +export type FileAttachmentFindUniqueArgs = $FindUniqueArgs<$Schema, "FileAttachment">; +export type FileAttachmentFindFirstArgs = $FindFirstArgs<$Schema, "FileAttachment">; +export type FileAttachmentExistsArgs = $ExistsArgs<$Schema, "FileAttachment">; +export type FileAttachmentCreateArgs = $CreateArgs<$Schema, "FileAttachment">; +export type FileAttachmentCreateManyArgs = $CreateManyArgs<$Schema, "FileAttachment">; +export type FileAttachmentCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "FileAttachment">; +export type FileAttachmentUpdateArgs = $UpdateArgs<$Schema, "FileAttachment">; +export type FileAttachmentUpdateManyArgs = $UpdateManyArgs<$Schema, "FileAttachment">; +export type FileAttachmentUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "FileAttachment">; +export type FileAttachmentUpsertArgs = $UpsertArgs<$Schema, "FileAttachment">; +export type FileAttachmentDeleteArgs = $DeleteArgs<$Schema, "FileAttachment">; +export type FileAttachmentDeleteManyArgs = $DeleteManyArgs<$Schema, "FileAttachment">; +export type FileAttachmentCountArgs = $CountArgs<$Schema, "FileAttachment">; +export type FileAttachmentAggregateArgs = $AggregateArgs<$Schema, "FileAttachment">; +export type FileAttachmentGroupByArgs = $GroupByArgs<$Schema, "FileAttachment">; +export type FileAttachmentWhereInput = $WhereInput<$Schema, "FileAttachment">; +export type FileAttachmentSelect = $SelectInput<$Schema, "FileAttachment">; +export type FileAttachmentInclude = $IncludeInput<$Schema, "FileAttachment">; +export type FileAttachmentOmit = $OmitInput<$Schema, "FileAttachment">; +export type FileAttachmentUncheckedCreateInput = $UncheckedCreateInput<$Schema, "FileAttachment">; +export type FileAttachmentCheckedCreateInput = $CheckedCreateInput<$Schema, "FileAttachment">; +export type FileAttachmentUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "FileAttachment">; +export type FileAttachmentCheckedUpdateInput = $CheckedUpdateInput<$Schema, "FileAttachment">; +export type FileAttachmentGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "FileAttachment", Args, Options>; +export type ImageAttachmentFindManyArgs = $FindManyArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentFindUniqueArgs = $FindUniqueArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentFindFirstArgs = $FindFirstArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentExistsArgs = $ExistsArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentCreateArgs = $CreateArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentCreateManyArgs = $CreateManyArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentUpdateArgs = $UpdateArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentUpdateManyArgs = $UpdateManyArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentUpsertArgs = $UpsertArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentDeleteArgs = $DeleteArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentDeleteManyArgs = $DeleteManyArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentCountArgs = $CountArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentAggregateArgs = $AggregateArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentGroupByArgs = $GroupByArgs<$Schema, "ImageAttachment">; +export type ImageAttachmentWhereInput = $WhereInput<$Schema, "ImageAttachment">; +export type ImageAttachmentSelect = $SelectInput<$Schema, "ImageAttachment">; +export type ImageAttachmentInclude = $IncludeInput<$Schema, "ImageAttachment">; +export type ImageAttachmentOmit = $OmitInput<$Schema, "ImageAttachment">; +export type ImageAttachmentUncheckedCreateInput = $UncheckedCreateInput<$Schema, "ImageAttachment">; +export type ImageAttachmentCheckedCreateInput = $CheckedCreateInput<$Schema, "ImageAttachment">; +export type ImageAttachmentUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "ImageAttachment">; +export type ImageAttachmentCheckedUpdateInput = $CheckedUpdateInput<$Schema, "ImageAttachment">; +export type ImageAttachmentGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "ImageAttachment", Args, Options>; +export type LinkAttachmentFindManyArgs = $FindManyArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentFindUniqueArgs = $FindUniqueArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentFindFirstArgs = $FindFirstArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentExistsArgs = $ExistsArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentCreateArgs = $CreateArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentCreateManyArgs = $CreateManyArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentUpdateArgs = $UpdateArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentUpdateManyArgs = $UpdateManyArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentUpsertArgs = $UpsertArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentDeleteArgs = $DeleteArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentDeleteManyArgs = $DeleteManyArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentCountArgs = $CountArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentAggregateArgs = $AggregateArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentGroupByArgs = $GroupByArgs<$Schema, "LinkAttachment">; +export type LinkAttachmentWhereInput = $WhereInput<$Schema, "LinkAttachment">; +export type LinkAttachmentSelect = $SelectInput<$Schema, "LinkAttachment">; +export type LinkAttachmentInclude = $IncludeInput<$Schema, "LinkAttachment">; +export type LinkAttachmentOmit = $OmitInput<$Schema, "LinkAttachment">; +export type LinkAttachmentUncheckedCreateInput = $UncheckedCreateInput<$Schema, "LinkAttachment">; +export type LinkAttachmentCheckedCreateInput = $CheckedCreateInput<$Schema, "LinkAttachment">; +export type LinkAttachmentUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "LinkAttachment">; +export type LinkAttachmentCheckedUpdateInput = $CheckedUpdateInput<$Schema, "LinkAttachment">; +export type LinkAttachmentGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "LinkAttachment", Args, Options>; +export type DocumentFindManyArgs = $FindManyArgs<$Schema, "Document">; +export type DocumentFindUniqueArgs = $FindUniqueArgs<$Schema, "Document">; +export type DocumentFindFirstArgs = $FindFirstArgs<$Schema, "Document">; +export type DocumentExistsArgs = $ExistsArgs<$Schema, "Document">; +export type DocumentCreateArgs = $CreateArgs<$Schema, "Document">; +export type DocumentCreateManyArgs = $CreateManyArgs<$Schema, "Document">; +export type DocumentCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Document">; +export type DocumentUpdateArgs = $UpdateArgs<$Schema, "Document">; +export type DocumentUpdateManyArgs = $UpdateManyArgs<$Schema, "Document">; +export type DocumentUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Document">; +export type DocumentUpsertArgs = $UpsertArgs<$Schema, "Document">; +export type DocumentDeleteArgs = $DeleteArgs<$Schema, "Document">; +export type DocumentDeleteManyArgs = $DeleteManyArgs<$Schema, "Document">; +export type DocumentCountArgs = $CountArgs<$Schema, "Document">; +export type DocumentAggregateArgs = $AggregateArgs<$Schema, "Document">; +export type DocumentGroupByArgs = $GroupByArgs<$Schema, "Document">; +export type DocumentWhereInput = $WhereInput<$Schema, "Document">; +export type DocumentSelect = $SelectInput<$Schema, "Document">; +export type DocumentInclude = $IncludeInput<$Schema, "Document">; +export type DocumentOmit = $OmitInput<$Schema, "Document">; +export type DocumentUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Document">; +export type DocumentCheckedCreateInput = $CheckedCreateInput<$Schema, "Document">; +export type DocumentUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Document">; +export type DocumentCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Document">; +export type DocumentGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Document", Args, Options>; +export type CustomFieldFindManyArgs = $FindManyArgs<$Schema, "CustomField">; +export type CustomFieldFindUniqueArgs = $FindUniqueArgs<$Schema, "CustomField">; +export type CustomFieldFindFirstArgs = $FindFirstArgs<$Schema, "CustomField">; +export type CustomFieldExistsArgs = $ExistsArgs<$Schema, "CustomField">; +export type CustomFieldCreateArgs = $CreateArgs<$Schema, "CustomField">; +export type CustomFieldCreateManyArgs = $CreateManyArgs<$Schema, "CustomField">; +export type CustomFieldCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "CustomField">; +export type CustomFieldUpdateArgs = $UpdateArgs<$Schema, "CustomField">; +export type CustomFieldUpdateManyArgs = $UpdateManyArgs<$Schema, "CustomField">; +export type CustomFieldUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "CustomField">; +export type CustomFieldUpsertArgs = $UpsertArgs<$Schema, "CustomField">; +export type CustomFieldDeleteArgs = $DeleteArgs<$Schema, "CustomField">; +export type CustomFieldDeleteManyArgs = $DeleteManyArgs<$Schema, "CustomField">; +export type CustomFieldCountArgs = $CountArgs<$Schema, "CustomField">; +export type CustomFieldAggregateArgs = $AggregateArgs<$Schema, "CustomField">; +export type CustomFieldGroupByArgs = $GroupByArgs<$Schema, "CustomField">; +export type CustomFieldWhereInput = $WhereInput<$Schema, "CustomField">; +export type CustomFieldSelect = $SelectInput<$Schema, "CustomField">; +export type CustomFieldInclude = $IncludeInput<$Schema, "CustomField">; +export type CustomFieldOmit = $OmitInput<$Schema, "CustomField">; +export type CustomFieldUncheckedCreateInput = $UncheckedCreateInput<$Schema, "CustomField">; +export type CustomFieldCheckedCreateInput = $CheckedCreateInput<$Schema, "CustomField">; +export type CustomFieldUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "CustomField">; +export type CustomFieldCheckedUpdateInput = $CheckedUpdateInput<$Schema, "CustomField">; +export type CustomFieldGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "CustomField", Args, Options>; +export type CustomFieldValueFindManyArgs = $FindManyArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueFindUniqueArgs = $FindUniqueArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueFindFirstArgs = $FindFirstArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueExistsArgs = $ExistsArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueCreateArgs = $CreateArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueCreateManyArgs = $CreateManyArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueUpdateArgs = $UpdateArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueUpdateManyArgs = $UpdateManyArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueUpsertArgs = $UpsertArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueDeleteArgs = $DeleteArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueDeleteManyArgs = $DeleteManyArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueCountArgs = $CountArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueAggregateArgs = $AggregateArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueGroupByArgs = $GroupByArgs<$Schema, "CustomFieldValue">; +export type CustomFieldValueWhereInput = $WhereInput<$Schema, "CustomFieldValue">; +export type CustomFieldValueSelect = $SelectInput<$Schema, "CustomFieldValue">; +export type CustomFieldValueInclude = $IncludeInput<$Schema, "CustomFieldValue">; +export type CustomFieldValueOmit = $OmitInput<$Schema, "CustomFieldValue">; +export type CustomFieldValueUncheckedCreateInput = $UncheckedCreateInput<$Schema, "CustomFieldValue">; +export type CustomFieldValueCheckedCreateInput = $CheckedCreateInput<$Schema, "CustomFieldValue">; +export type CustomFieldValueUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "CustomFieldValue">; +export type CustomFieldValueCheckedUpdateInput = $CheckedUpdateInput<$Schema, "CustomFieldValue">; +export type CustomFieldValueGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "CustomFieldValue", Args, Options>; +export type TimeEntryFindManyArgs = $FindManyArgs<$Schema, "TimeEntry">; +export type TimeEntryFindUniqueArgs = $FindUniqueArgs<$Schema, "TimeEntry">; +export type TimeEntryFindFirstArgs = $FindFirstArgs<$Schema, "TimeEntry">; +export type TimeEntryExistsArgs = $ExistsArgs<$Schema, "TimeEntry">; +export type TimeEntryCreateArgs = $CreateArgs<$Schema, "TimeEntry">; +export type TimeEntryCreateManyArgs = $CreateManyArgs<$Schema, "TimeEntry">; +export type TimeEntryCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "TimeEntry">; +export type TimeEntryUpdateArgs = $UpdateArgs<$Schema, "TimeEntry">; +export type TimeEntryUpdateManyArgs = $UpdateManyArgs<$Schema, "TimeEntry">; +export type TimeEntryUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "TimeEntry">; +export type TimeEntryUpsertArgs = $UpsertArgs<$Schema, "TimeEntry">; +export type TimeEntryDeleteArgs = $DeleteArgs<$Schema, "TimeEntry">; +export type TimeEntryDeleteManyArgs = $DeleteManyArgs<$Schema, "TimeEntry">; +export type TimeEntryCountArgs = $CountArgs<$Schema, "TimeEntry">; +export type TimeEntryAggregateArgs = $AggregateArgs<$Schema, "TimeEntry">; +export type TimeEntryGroupByArgs = $GroupByArgs<$Schema, "TimeEntry">; +export type TimeEntryWhereInput = $WhereInput<$Schema, "TimeEntry">; +export type TimeEntrySelect = $SelectInput<$Schema, "TimeEntry">; +export type TimeEntryInclude = $IncludeInput<$Schema, "TimeEntry">; +export type TimeEntryOmit = $OmitInput<$Schema, "TimeEntry">; +export type TimeEntryUncheckedCreateInput = $UncheckedCreateInput<$Schema, "TimeEntry">; +export type TimeEntryCheckedCreateInput = $CheckedCreateInput<$Schema, "TimeEntry">; +export type TimeEntryUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "TimeEntry">; +export type TimeEntryCheckedUpdateInput = $CheckedUpdateInput<$Schema, "TimeEntry">; +export type TimeEntryGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "TimeEntry", Args, Options>; +export type WebhookFindManyArgs = $FindManyArgs<$Schema, "Webhook">; +export type WebhookFindUniqueArgs = $FindUniqueArgs<$Schema, "Webhook">; +export type WebhookFindFirstArgs = $FindFirstArgs<$Schema, "Webhook">; +export type WebhookExistsArgs = $ExistsArgs<$Schema, "Webhook">; +export type WebhookCreateArgs = $CreateArgs<$Schema, "Webhook">; +export type WebhookCreateManyArgs = $CreateManyArgs<$Schema, "Webhook">; +export type WebhookCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Webhook">; +export type WebhookUpdateArgs = $UpdateArgs<$Schema, "Webhook">; +export type WebhookUpdateManyArgs = $UpdateManyArgs<$Schema, "Webhook">; +export type WebhookUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Webhook">; +export type WebhookUpsertArgs = $UpsertArgs<$Schema, "Webhook">; +export type WebhookDeleteArgs = $DeleteArgs<$Schema, "Webhook">; +export type WebhookDeleteManyArgs = $DeleteManyArgs<$Schema, "Webhook">; +export type WebhookCountArgs = $CountArgs<$Schema, "Webhook">; +export type WebhookAggregateArgs = $AggregateArgs<$Schema, "Webhook">; +export type WebhookGroupByArgs = $GroupByArgs<$Schema, "Webhook">; +export type WebhookWhereInput = $WhereInput<$Schema, "Webhook">; +export type WebhookSelect = $SelectInput<$Schema, "Webhook">; +export type WebhookInclude = $IncludeInput<$Schema, "Webhook">; +export type WebhookOmit = $OmitInput<$Schema, "Webhook">; +export type WebhookUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Webhook">; +export type WebhookCheckedCreateInput = $CheckedCreateInput<$Schema, "Webhook">; +export type WebhookUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Webhook">; +export type WebhookCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Webhook">; +export type WebhookGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Webhook", Args, Options>; +export type IntegrationFindManyArgs = $FindManyArgs<$Schema, "Integration">; +export type IntegrationFindUniqueArgs = $FindUniqueArgs<$Schema, "Integration">; +export type IntegrationFindFirstArgs = $FindFirstArgs<$Schema, "Integration">; +export type IntegrationExistsArgs = $ExistsArgs<$Schema, "Integration">; +export type IntegrationCreateArgs = $CreateArgs<$Schema, "Integration">; +export type IntegrationCreateManyArgs = $CreateManyArgs<$Schema, "Integration">; +export type IntegrationCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Integration">; +export type IntegrationUpdateArgs = $UpdateArgs<$Schema, "Integration">; +export type IntegrationUpdateManyArgs = $UpdateManyArgs<$Schema, "Integration">; +export type IntegrationUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Integration">; +export type IntegrationUpsertArgs = $UpsertArgs<$Schema, "Integration">; +export type IntegrationDeleteArgs = $DeleteArgs<$Schema, "Integration">; +export type IntegrationDeleteManyArgs = $DeleteManyArgs<$Schema, "Integration">; +export type IntegrationCountArgs = $CountArgs<$Schema, "Integration">; +export type IntegrationAggregateArgs = $AggregateArgs<$Schema, "Integration">; +export type IntegrationGroupByArgs = $GroupByArgs<$Schema, "Integration">; +export type IntegrationWhereInput = $WhereInput<$Schema, "Integration">; +export type IntegrationSelect = $SelectInput<$Schema, "Integration">; +export type IntegrationInclude = $IncludeInput<$Schema, "Integration">; +export type IntegrationOmit = $OmitInput<$Schema, "Integration">; +export type IntegrationUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Integration">; +export type IntegrationCheckedCreateInput = $CheckedCreateInput<$Schema, "Integration">; +export type IntegrationUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Integration">; +export type IntegrationCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Integration">; +export type IntegrationGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Integration", Args, Options>; +export type ApiTokenFindManyArgs = $FindManyArgs<$Schema, "ApiToken">; +export type ApiTokenFindUniqueArgs = $FindUniqueArgs<$Schema, "ApiToken">; +export type ApiTokenFindFirstArgs = $FindFirstArgs<$Schema, "ApiToken">; +export type ApiTokenExistsArgs = $ExistsArgs<$Schema, "ApiToken">; +export type ApiTokenCreateArgs = $CreateArgs<$Schema, "ApiToken">; +export type ApiTokenCreateManyArgs = $CreateManyArgs<$Schema, "ApiToken">; +export type ApiTokenCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "ApiToken">; +export type ApiTokenUpdateArgs = $UpdateArgs<$Schema, "ApiToken">; +export type ApiTokenUpdateManyArgs = $UpdateManyArgs<$Schema, "ApiToken">; +export type ApiTokenUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "ApiToken">; +export type ApiTokenUpsertArgs = $UpsertArgs<$Schema, "ApiToken">; +export type ApiTokenDeleteArgs = $DeleteArgs<$Schema, "ApiToken">; +export type ApiTokenDeleteManyArgs = $DeleteManyArgs<$Schema, "ApiToken">; +export type ApiTokenCountArgs = $CountArgs<$Schema, "ApiToken">; +export type ApiTokenAggregateArgs = $AggregateArgs<$Schema, "ApiToken">; +export type ApiTokenGroupByArgs = $GroupByArgs<$Schema, "ApiToken">; +export type ApiTokenWhereInput = $WhereInput<$Schema, "ApiToken">; +export type ApiTokenSelect = $SelectInput<$Schema, "ApiToken">; +export type ApiTokenInclude = $IncludeInput<$Schema, "ApiToken">; +export type ApiTokenOmit = $OmitInput<$Schema, "ApiToken">; +export type ApiTokenUncheckedCreateInput = $UncheckedCreateInput<$Schema, "ApiToken">; +export type ApiTokenCheckedCreateInput = $CheckedCreateInput<$Schema, "ApiToken">; +export type ApiTokenUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "ApiToken">; +export type ApiTokenCheckedUpdateInput = $CheckedUpdateInput<$Schema, "ApiToken">; +export type ApiTokenGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "ApiToken", Args, Options>; +export type ActivityLogFindManyArgs = $FindManyArgs<$Schema, "ActivityLog">; +export type ActivityLogFindUniqueArgs = $FindUniqueArgs<$Schema, "ActivityLog">; +export type ActivityLogFindFirstArgs = $FindFirstArgs<$Schema, "ActivityLog">; +export type ActivityLogExistsArgs = $ExistsArgs<$Schema, "ActivityLog">; +export type ActivityLogCreateArgs = $CreateArgs<$Schema, "ActivityLog">; +export type ActivityLogCreateManyArgs = $CreateManyArgs<$Schema, "ActivityLog">; +export type ActivityLogCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "ActivityLog">; +export type ActivityLogUpdateArgs = $UpdateArgs<$Schema, "ActivityLog">; +export type ActivityLogUpdateManyArgs = $UpdateManyArgs<$Schema, "ActivityLog">; +export type ActivityLogUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "ActivityLog">; +export type ActivityLogUpsertArgs = $UpsertArgs<$Schema, "ActivityLog">; +export type ActivityLogDeleteArgs = $DeleteArgs<$Schema, "ActivityLog">; +export type ActivityLogDeleteManyArgs = $DeleteManyArgs<$Schema, "ActivityLog">; +export type ActivityLogCountArgs = $CountArgs<$Schema, "ActivityLog">; +export type ActivityLogAggregateArgs = $AggregateArgs<$Schema, "ActivityLog">; +export type ActivityLogGroupByArgs = $GroupByArgs<$Schema, "ActivityLog">; +export type ActivityLogWhereInput = $WhereInput<$Schema, "ActivityLog">; +export type ActivityLogSelect = $SelectInput<$Schema, "ActivityLog">; +export type ActivityLogInclude = $IncludeInput<$Schema, "ActivityLog">; +export type ActivityLogOmit = $OmitInput<$Schema, "ActivityLog">; +export type ActivityLogUncheckedCreateInput = $UncheckedCreateInput<$Schema, "ActivityLog">; +export type ActivityLogCheckedCreateInput = $CheckedCreateInput<$Schema, "ActivityLog">; +export type ActivityLogUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "ActivityLog">; +export type ActivityLogCheckedUpdateInput = $CheckedUpdateInput<$Schema, "ActivityLog">; +export type ActivityLogGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "ActivityLog", Args, Options>; +export type NotificationFindManyArgs = $FindManyArgs<$Schema, "Notification">; +export type NotificationFindUniqueArgs = $FindUniqueArgs<$Schema, "Notification">; +export type NotificationFindFirstArgs = $FindFirstArgs<$Schema, "Notification">; +export type NotificationExistsArgs = $ExistsArgs<$Schema, "Notification">; +export type NotificationCreateArgs = $CreateArgs<$Schema, "Notification">; +export type NotificationCreateManyArgs = $CreateManyArgs<$Schema, "Notification">; +export type NotificationCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Notification">; +export type NotificationUpdateArgs = $UpdateArgs<$Schema, "Notification">; +export type NotificationUpdateManyArgs = $UpdateManyArgs<$Schema, "Notification">; +export type NotificationUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Notification">; +export type NotificationUpsertArgs = $UpsertArgs<$Schema, "Notification">; +export type NotificationDeleteArgs = $DeleteArgs<$Schema, "Notification">; +export type NotificationDeleteManyArgs = $DeleteManyArgs<$Schema, "Notification">; +export type NotificationCountArgs = $CountArgs<$Schema, "Notification">; +export type NotificationAggregateArgs = $AggregateArgs<$Schema, "Notification">; +export type NotificationGroupByArgs = $GroupByArgs<$Schema, "Notification">; +export type NotificationWhereInput = $WhereInput<$Schema, "Notification">; +export type NotificationSelect = $SelectInput<$Schema, "Notification">; +export type NotificationInclude = $IncludeInput<$Schema, "Notification">; +export type NotificationOmit = $OmitInput<$Schema, "Notification">; +export type NotificationUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Notification">; +export type NotificationCheckedCreateInput = $CheckedCreateInput<$Schema, "Notification">; +export type NotificationUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Notification">; +export type NotificationCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Notification">; +export type NotificationGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Notification", Args, Options>; +export type BillingCustomerFindManyArgs = $FindManyArgs<$Schema, "BillingCustomer">; +export type BillingCustomerFindUniqueArgs = $FindUniqueArgs<$Schema, "BillingCustomer">; +export type BillingCustomerFindFirstArgs = $FindFirstArgs<$Schema, "BillingCustomer">; +export type BillingCustomerExistsArgs = $ExistsArgs<$Schema, "BillingCustomer">; +export type BillingCustomerCreateArgs = $CreateArgs<$Schema, "BillingCustomer">; +export type BillingCustomerCreateManyArgs = $CreateManyArgs<$Schema, "BillingCustomer">; +export type BillingCustomerCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "BillingCustomer">; +export type BillingCustomerUpdateArgs = $UpdateArgs<$Schema, "BillingCustomer">; +export type BillingCustomerUpdateManyArgs = $UpdateManyArgs<$Schema, "BillingCustomer">; +export type BillingCustomerUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "BillingCustomer">; +export type BillingCustomerUpsertArgs = $UpsertArgs<$Schema, "BillingCustomer">; +export type BillingCustomerDeleteArgs = $DeleteArgs<$Schema, "BillingCustomer">; +export type BillingCustomerDeleteManyArgs = $DeleteManyArgs<$Schema, "BillingCustomer">; +export type BillingCustomerCountArgs = $CountArgs<$Schema, "BillingCustomer">; +export type BillingCustomerAggregateArgs = $AggregateArgs<$Schema, "BillingCustomer">; +export type BillingCustomerGroupByArgs = $GroupByArgs<$Schema, "BillingCustomer">; +export type BillingCustomerWhereInput = $WhereInput<$Schema, "BillingCustomer">; +export type BillingCustomerSelect = $SelectInput<$Schema, "BillingCustomer">; +export type BillingCustomerInclude = $IncludeInput<$Schema, "BillingCustomer">; +export type BillingCustomerOmit = $OmitInput<$Schema, "BillingCustomer">; +export type BillingCustomerUncheckedCreateInput = $UncheckedCreateInput<$Schema, "BillingCustomer">; +export type BillingCustomerCheckedCreateInput = $CheckedCreateInput<$Schema, "BillingCustomer">; +export type BillingCustomerUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "BillingCustomer">; +export type BillingCustomerCheckedUpdateInput = $CheckedUpdateInput<$Schema, "BillingCustomer">; +export type BillingCustomerGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "BillingCustomer", Args, Options>; +export type PlanFindManyArgs = $FindManyArgs<$Schema, "Plan">; +export type PlanFindUniqueArgs = $FindUniqueArgs<$Schema, "Plan">; +export type PlanFindFirstArgs = $FindFirstArgs<$Schema, "Plan">; +export type PlanExistsArgs = $ExistsArgs<$Schema, "Plan">; +export type PlanCreateArgs = $CreateArgs<$Schema, "Plan">; +export type PlanCreateManyArgs = $CreateManyArgs<$Schema, "Plan">; +export type PlanCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Plan">; +export type PlanUpdateArgs = $UpdateArgs<$Schema, "Plan">; +export type PlanUpdateManyArgs = $UpdateManyArgs<$Schema, "Plan">; +export type PlanUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Plan">; +export type PlanUpsertArgs = $UpsertArgs<$Schema, "Plan">; +export type PlanDeleteArgs = $DeleteArgs<$Schema, "Plan">; +export type PlanDeleteManyArgs = $DeleteManyArgs<$Schema, "Plan">; +export type PlanCountArgs = $CountArgs<$Schema, "Plan">; +export type PlanAggregateArgs = $AggregateArgs<$Schema, "Plan">; +export type PlanGroupByArgs = $GroupByArgs<$Schema, "Plan">; +export type PlanWhereInput = $WhereInput<$Schema, "Plan">; +export type PlanSelect = $SelectInput<$Schema, "Plan">; +export type PlanInclude = $IncludeInput<$Schema, "Plan">; +export type PlanOmit = $OmitInput<$Schema, "Plan">; +export type PlanUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Plan">; +export type PlanCheckedCreateInput = $CheckedCreateInput<$Schema, "Plan">; +export type PlanUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Plan">; +export type PlanCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Plan">; +export type PlanGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Plan", Args, Options>; +export type SubscriptionFindManyArgs = $FindManyArgs<$Schema, "Subscription">; +export type SubscriptionFindUniqueArgs = $FindUniqueArgs<$Schema, "Subscription">; +export type SubscriptionFindFirstArgs = $FindFirstArgs<$Schema, "Subscription">; +export type SubscriptionExistsArgs = $ExistsArgs<$Schema, "Subscription">; +export type SubscriptionCreateArgs = $CreateArgs<$Schema, "Subscription">; +export type SubscriptionCreateManyArgs = $CreateManyArgs<$Schema, "Subscription">; +export type SubscriptionCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Subscription">; +export type SubscriptionUpdateArgs = $UpdateArgs<$Schema, "Subscription">; +export type SubscriptionUpdateManyArgs = $UpdateManyArgs<$Schema, "Subscription">; +export type SubscriptionUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Subscription">; +export type SubscriptionUpsertArgs = $UpsertArgs<$Schema, "Subscription">; +export type SubscriptionDeleteArgs = $DeleteArgs<$Schema, "Subscription">; +export type SubscriptionDeleteManyArgs = $DeleteManyArgs<$Schema, "Subscription">; +export type SubscriptionCountArgs = $CountArgs<$Schema, "Subscription">; +export type SubscriptionAggregateArgs = $AggregateArgs<$Schema, "Subscription">; +export type SubscriptionGroupByArgs = $GroupByArgs<$Schema, "Subscription">; +export type SubscriptionWhereInput = $WhereInput<$Schema, "Subscription">; +export type SubscriptionSelect = $SelectInput<$Schema, "Subscription">; +export type SubscriptionInclude = $IncludeInput<$Schema, "Subscription">; +export type SubscriptionOmit = $OmitInput<$Schema, "Subscription">; +export type SubscriptionUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Subscription">; +export type SubscriptionCheckedCreateInput = $CheckedCreateInput<$Schema, "Subscription">; +export type SubscriptionUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Subscription">; +export type SubscriptionCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Subscription">; +export type SubscriptionGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Subscription", Args, Options>; +export type InvoiceFindManyArgs = $FindManyArgs<$Schema, "Invoice">; +export type InvoiceFindUniqueArgs = $FindUniqueArgs<$Schema, "Invoice">; +export type InvoiceFindFirstArgs = $FindFirstArgs<$Schema, "Invoice">; +export type InvoiceExistsArgs = $ExistsArgs<$Schema, "Invoice">; +export type InvoiceCreateArgs = $CreateArgs<$Schema, "Invoice">; +export type InvoiceCreateManyArgs = $CreateManyArgs<$Schema, "Invoice">; +export type InvoiceCreateManyAndReturnArgs = $CreateManyAndReturnArgs<$Schema, "Invoice">; +export type InvoiceUpdateArgs = $UpdateArgs<$Schema, "Invoice">; +export type InvoiceUpdateManyArgs = $UpdateManyArgs<$Schema, "Invoice">; +export type InvoiceUpdateManyAndReturnArgs = $UpdateManyAndReturnArgs<$Schema, "Invoice">; +export type InvoiceUpsertArgs = $UpsertArgs<$Schema, "Invoice">; +export type InvoiceDeleteArgs = $DeleteArgs<$Schema, "Invoice">; +export type InvoiceDeleteManyArgs = $DeleteManyArgs<$Schema, "Invoice">; +export type InvoiceCountArgs = $CountArgs<$Schema, "Invoice">; +export type InvoiceAggregateArgs = $AggregateArgs<$Schema, "Invoice">; +export type InvoiceGroupByArgs = $GroupByArgs<$Schema, "Invoice">; +export type InvoiceWhereInput = $WhereInput<$Schema, "Invoice">; +export type InvoiceSelect = $SelectInput<$Schema, "Invoice">; +export type InvoiceInclude = $IncludeInput<$Schema, "Invoice">; +export type InvoiceOmit = $OmitInput<$Schema, "Invoice">; +export type InvoiceUncheckedCreateInput = $UncheckedCreateInput<$Schema, "Invoice">; +export type InvoiceCheckedCreateInput = $CheckedCreateInput<$Schema, "Invoice">; +export type InvoiceUncheckedUpdateInput = $UncheckedUpdateInput<$Schema, "Invoice">; +export type InvoiceCheckedUpdateInput = $CheckedUpdateInput<$Schema, "Invoice">; +export type InvoiceGetPayload, Options extends $QueryOptions<$Schema> = $QueryOptions<$Schema>> = $Result<$Schema, "Invoice", Args, Options>; diff --git a/samples/taskforge/zenstack/models.ts b/samples/taskforge/zenstack/models.ts new file mode 100644 index 000000000..0504c8566 --- /dev/null +++ b/samples/taskforge/zenstack/models.ts @@ -0,0 +1,102 @@ +////////////////////////////////////////////////////////////////////////////////////////////// +// DO NOT MODIFY THIS FILE // +// This file is automatically generated by ZenStack CLI and should not be manually updated. // +////////////////////////////////////////////////////////////////////////////////////////////// + +/* eslint-disable */ + +import { schema as $schema, type SchemaType as $Schema } from "./schema"; +import type { ModelResult as $ModelResult, TypeDefResult as $TypeDefResult } from "@zenstackhq/orm"; +export type User = $ModelResult<$Schema, "User">; +export type Account = $ModelResult<$Schema, "Account">; +export type Session = $ModelResult<$Schema, "Session">; +export type Verification = $ModelResult<$Schema, "Verification">; +export type Organization = $ModelResult<$Schema, "Organization">; +/** + * Explicit many-to-many join between User and Organization, carrying a role. + */ +export type Membership = $ModelResult<$Schema, "Membership">; +export type Invitation = $ModelResult<$Schema, "Invitation">; +export type Team = $ModelResult<$Schema, "Team">; +/** + * Explicit many-to-many join between User and Team. + */ +export type TeamMembership = $ModelResult<$Schema, "TeamMembership">; +export type Project = $ModelResult<$Schema, "Project">; +/** + * Explicit many-to-many join between User and Project, carrying a role. + */ +export type ProjectMember = $ModelResult<$Schema, "ProjectMember">; +export type Issue = $ModelResult<$Schema, "Issue">; +export type Label = $ModelResult<$Schema, "Label">; +export type Milestone = $ModelResult<$Schema, "Milestone">; +export type Sprint = $ModelResult<$Schema, "Sprint">; +export type Comment = $ModelResult<$Schema, "Comment">; +export type Reaction = $ModelResult<$Schema, "Reaction">; +/** + * Polymorphic base. Concrete subtypes are FileAttachment / ImageAttachment / LinkAttachment. + * Create the concrete models, never `Attachment` directly. + */ +export type Attachment = $ModelResult<$Schema, "Attachment">; +export type FileAttachment = $ModelResult<$Schema, "FileAttachment">; +export type ImageAttachment = $ModelResult<$Schema, "ImageAttachment">; +export type LinkAttachment = $ModelResult<$Schema, "LinkAttachment">; +export type Document = $ModelResult<$Schema, "Document">; +export type CustomField = $ModelResult<$Schema, "CustomField">; +/** + * Explicit many-to-many join between CustomField and Issue, carrying a value. + */ +export type CustomFieldValue = $ModelResult<$Schema, "CustomFieldValue">; +export type TimeEntry = $ModelResult<$Schema, "TimeEntry">; +export type Webhook = $ModelResult<$Schema, "Webhook">; +export type Integration = $ModelResult<$Schema, "Integration">; +export type ApiToken = $ModelResult<$Schema, "ApiToken">; +export type ActivityLog = $ModelResult<$Schema, "ActivityLog">; +export type Notification = $ModelResult<$Schema, "Notification">; +export type BillingCustomer = $ModelResult<$Schema, "BillingCustomer">; +export type Plan = $ModelResult<$Schema, "Plan">; +export type Subscription = $ModelResult<$Schema, "Subscription">; +export type Invoice = $ModelResult<$Schema, "Invoice">; +export type Timestamps = $TypeDefResult<$Schema, "Timestamps">; +/** + * Strongly-typed JSON payload for Issue.metadata. + */ +export type IssueMetadata = $TypeDefResult<$Schema, "IssueMetadata">; +/** + * Strongly-typed JSON payload for Document.content. + */ +export type DocContent = $TypeDefResult<$Schema, "DocContent">; +/** + * Strongly-typed JSON payload for Webhook.config. + */ +export type WebhookConfig = $TypeDefResult<$Schema, "WebhookConfig">; +/** + * Strongly-typed JSON payload for Integration.config. + */ +export type IntegrationConfig = $TypeDefResult<$Schema, "IntegrationConfig">; +export const OrgRole = $schema.enums.OrgRole.values; +export type OrgRole = (typeof OrgRole)[keyof typeof OrgRole]; +export const ProjectRole = $schema.enums.ProjectRole.values; +export type ProjectRole = (typeof ProjectRole)[keyof typeof ProjectRole]; +export const IssueStatus = $schema.enums.IssueStatus.values; +export type IssueStatus = (typeof IssueStatus)[keyof typeof IssueStatus]; +export const Priority = $schema.enums.Priority.values; +export type Priority = (typeof Priority)[keyof typeof Priority]; +export const SprintStatus = $schema.enums.SprintStatus.values; +export type SprintStatus = (typeof SprintStatus)[keyof typeof SprintStatus]; +export const MilestoneStatus = $schema.enums.MilestoneStatus.values; +export type MilestoneStatus = (typeof MilestoneStatus)[keyof typeof MilestoneStatus]; +export const InvitationStatus = $schema.enums.InvitationStatus.values; +export type InvitationStatus = (typeof InvitationStatus)[keyof typeof InvitationStatus]; +export const PlanTier = $schema.enums.PlanTier.values; +export type PlanTier = (typeof PlanTier)[keyof typeof PlanTier]; +export const SubscriptionStatus = $schema.enums.SubscriptionStatus.values; +export type SubscriptionStatus = (typeof SubscriptionStatus)[keyof typeof SubscriptionStatus]; +export const InvoiceStatus = $schema.enums.InvoiceStatus.values; +export type InvoiceStatus = (typeof InvoiceStatus)[keyof typeof InvoiceStatus]; +export const NotificationType = $schema.enums.NotificationType.values; +export type NotificationType = (typeof NotificationType)[keyof typeof NotificationType]; +export const IntegrationProvider = $schema.enums.IntegrationProvider.values; +export type IntegrationProvider = (typeof IntegrationProvider)[keyof typeof IntegrationProvider]; +export const CustomFieldType = $schema.enums.CustomFieldType.values; +export type CustomFieldType = (typeof CustomFieldType)[keyof typeof CustomFieldType]; diff --git a/samples/taskforge/zenstack/schema.ts b/samples/taskforge/zenstack/schema.ts new file mode 100644 index 000000000..0effd9be0 --- /dev/null +++ b/samples/taskforge/zenstack/schema.ts @@ -0,0 +1,3060 @@ +////////////////////////////////////////////////////////////////////////////////////////////// +// DO NOT MODIFY THIS FILE // +// This file is automatically generated by ZenStack CLI and should not be manually updated. // +////////////////////////////////////////////////////////////////////////////////////////////// + +/* eslint-disable */ + +import { type SchemaDef, type AttributeApplication, type FieldDefault, ExpressionUtils } from "@zenstackhq/schema"; +export class SchemaType implements SchemaDef { + provider = { + type: "sqlite" + } as const; + models = { + User: { + name: "User", + fields: { + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }] as readonly AttributeApplication[] + }, + name: { + name: "name", + type: "String" + }, + email: { + name: "email", + type: "String", + unique: true, + attributes: [{ name: "@unique" }] as readonly AttributeApplication[] + }, + emailVerified: { + name: "emailVerified", + type: "Boolean", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal(false) }] }] as readonly AttributeApplication[], + default: false as FieldDefault + }, + image: { + name: "image", + type: "String", + optional: true + }, + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }, { name: "@updatedAt" }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + accounts: { + name: "accounts", + type: "Account", + array: true, + relation: { opposite: "user" } + }, + sessions: { + name: "sessions", + type: "Session", + array: true, + relation: { opposite: "user" } + }, + ownedOrganizations: { + name: "ownedOrganizations", + type: "Organization", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("OrgOwner") }] }] as readonly AttributeApplication[], + relation: { opposite: "owner", name: "OrgOwner" } + }, + memberships: { + name: "memberships", + type: "Membership", + array: true, + relation: { opposite: "user" } + }, + sentInvitations: { + name: "sentInvitations", + type: "Invitation", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("InvitationInviter") }] }] as readonly AttributeApplication[], + relation: { opposite: "inviter", name: "InvitationInviter" } + }, + teamMemberships: { + name: "teamMemberships", + type: "TeamMembership", + array: true, + relation: { opposite: "user" } + }, + ledTeams: { + name: "ledTeams", + type: "Team", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("TeamLead") }] }] as readonly AttributeApplication[], + relation: { opposite: "lead", name: "TeamLead" } + }, + projectMemberships: { + name: "projectMemberships", + type: "ProjectMember", + array: true, + relation: { opposite: "user" } + }, + ledProjects: { + name: "ledProjects", + type: "Project", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("ProjectLead") }] }] as readonly AttributeApplication[], + relation: { opposite: "lead", name: "ProjectLead" } + }, + authoredIssues: { + name: "authoredIssues", + type: "Issue", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("IssueAuthor") }] }] as readonly AttributeApplication[], + relation: { opposite: "author", name: "IssueAuthor" } + }, + assignedIssues: { + name: "assignedIssues", + type: "Issue", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("IssueAssignee") }] }] as readonly AttributeApplication[], + relation: { opposite: "assignee", name: "IssueAssignee" } + }, + watchedIssues: { + name: "watchedIssues", + type: "Issue", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("IssueWatchers") }] }] as readonly AttributeApplication[], + relation: { opposite: "watchers", name: "IssueWatchers" } + }, + comments: { + name: "comments", + type: "Comment", + array: true, + relation: { opposite: "author" } + }, + attachments: { + name: "attachments", + type: "Attachment", + array: true, + relation: { opposite: "uploadedBy" } + }, + reactions: { + name: "reactions", + type: "Reaction", + array: true, + relation: { opposite: "user" } + }, + authoredDocuments: { + name: "authoredDocuments", + type: "Document", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("DocAuthor") }] }] as readonly AttributeApplication[], + relation: { opposite: "author", name: "DocAuthor" } + }, + collaboratingDocuments: { + name: "collaboratingDocuments", + type: "Document", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("DocCollaborators") }] }] as readonly AttributeApplication[], + relation: { opposite: "collaborators", name: "DocCollaborators" } + }, + activities: { + name: "activities", + type: "ActivityLog", + array: true, + relation: { opposite: "actor" } + }, + notifications: { + name: "notifications", + type: "Notification", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("NotifRecipient") }] }] as readonly AttributeApplication[], + relation: { opposite: "recipient", name: "NotifRecipient" } + }, + triggeredNotifications: { + name: "triggeredNotifications", + type: "Notification", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("NotifActor") }] }] as readonly AttributeApplication[], + relation: { opposite: "actor", name: "NotifActor" } + }, + timeEntries: { + name: "timeEntries", + type: "TimeEntry", + array: true, + relation: { opposite: "user" } + }, + installedIntegrations: { + name: "installedIntegrations", + type: "Integration", + array: true, + relation: { opposite: "installedBy" } + }, + apiTokens: { + name: "apiTokens", + type: "ApiToken", + array: true, + relation: { opposite: "user" } + } + }, + attributes: [ + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("user") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + email: { type: "String" } + } + }, + Account: { + name: "Account", + fields: { + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }] as readonly AttributeApplication[] + }, + accountId: { + name: "accountId", + type: "String" + }, + providerId: { + name: "providerId", + type: "String" + }, + userId: { + name: "userId", + type: "String", + foreignKeyFor: [ + "user" + ] as readonly string[] + }, + user: { + name: "user", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "accounts", fields: ["userId"], references: ["id"], onDelete: "Cascade" } + }, + accessToken: { + name: "accessToken", + type: "String", + optional: true + }, + refreshToken: { + name: "refreshToken", + type: "String", + optional: true + }, + idToken: { + name: "idToken", + type: "String", + optional: true + }, + accessTokenExpiresAt: { + name: "accessTokenExpiresAt", + type: "DateTime", + optional: true + }, + refreshTokenExpiresAt: { + name: "refreshTokenExpiresAt", + type: "DateTime", + optional: true + }, + scope: { + name: "scope", + type: "String", + optional: true + }, + password: { + name: "password", + type: "String", + optional: true + }, + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("account") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + Session: { + name: "Session", + fields: { + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }] as readonly AttributeApplication[] + }, + expiresAt: { + name: "expiresAt", + type: "DateTime" + }, + token: { + name: "token", + type: "String", + unique: true, + attributes: [{ name: "@unique" }] as readonly AttributeApplication[] + }, + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + ipAddress: { + name: "ipAddress", + type: "String", + optional: true + }, + userAgent: { + name: "userAgent", + type: "String", + optional: true + }, + userId: { + name: "userId", + type: "String", + foreignKeyFor: [ + "user" + ] as readonly string[] + }, + user: { + name: "user", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "sessions", fields: ["userId"], references: ["id"], onDelete: "Cascade" } + } + }, + attributes: [ + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("session") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + token: { type: "String" } + } + }, + Verification: { + name: "Verification", + fields: { + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }] as readonly AttributeApplication[] + }, + identifier: { + name: "identifier", + type: "String" + }, + value: { + name: "value", + type: "String" + }, + expiresAt: { + name: "expiresAt", + type: "DateTime" + }, + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }, { name: "@updatedAt" }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("identifier")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("verification") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + Organization: { + name: "Organization", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + name: { + name: "name", + type: "String" + }, + slug: { + name: "slug", + type: "String", + unique: true, + attributes: [{ name: "@unique" }] as readonly AttributeApplication[] + }, + logoUrl: { + name: "logoUrl", + type: "String", + optional: true + }, + billingCustomer: { + name: "billingCustomer", + type: "BillingCustomer", + optional: true, + relation: { opposite: "organization" } + }, + subscription: { + name: "subscription", + type: "Subscription", + optional: true, + relation: { opposite: "organization" } + }, + owner: { + name: "owner", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("OrgOwner") }, { name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("ownerId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "ownedOrganizations", name: "OrgOwner", fields: ["ownerId"], references: ["id"] } + }, + ownerId: { + name: "ownerId", + type: "String", + foreignKeyFor: [ + "owner" + ] as readonly string[] + }, + members: { + name: "members", + type: "Membership", + array: true, + relation: { opposite: "organization" } + }, + invitations: { + name: "invitations", + type: "Invitation", + array: true, + relation: { opposite: "organization" } + }, + teams: { + name: "teams", + type: "Team", + array: true, + relation: { opposite: "organization" } + }, + projects: { + name: "projects", + type: "Project", + array: true, + relation: { opposite: "organization" } + }, + labels: { + name: "labels", + type: "Label", + array: true, + relation: { opposite: "organization" } + }, + customFields: { + name: "customFields", + type: "CustomField", + array: true, + relation: { opposite: "organization" } + }, + webhooks: { + name: "webhooks", + type: "Webhook", + array: true, + relation: { opposite: "organization" } + }, + integrations: { + name: "integrations", + type: "Integration", + array: true, + relation: { opposite: "organization" } + }, + apiTokens: { + name: "apiTokens", + type: "ApiToken", + array: true, + relation: { opposite: "organization" } + }, + activities: { + name: "activities", + type: "ActivityLog", + array: true, + relation: { opposite: "organization" } + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("ownerId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("organization") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + slug: { type: "String" } + } + }, + Membership: { + name: "Membership", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + role: { + name: "role", + type: "OrgRole", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("MEMBER") }] }] as readonly AttributeApplication[], + default: "MEMBER" as FieldDefault + }, + user: { + name: "user", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "memberships", fields: ["userId"], references: ["id"], onDelete: "Cascade" } + }, + userId: { + name: "userId", + type: "String", + foreignKeyFor: [ + "user" + ] as readonly string[] + }, + organization: { + name: "organization", + type: "Organization", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "members", fields: ["organizationId"], references: ["id"], onDelete: "Cascade" } + }, + organizationId: { + name: "organizationId", + type: "String", + foreignKeyFor: [ + "organization" + ] as readonly string[] + } + }, + attributes: [ + { name: "@@unique", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId"), ExpressionUtils.field("organizationId")]) }] }, + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("membership") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + userId_organizationId: { userId: { type: "String" }, organizationId: { type: "String" } } + } + }, + Invitation: { + name: "Invitation", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + email: { + name: "email", + type: "String" + }, + role: { + name: "role", + type: "OrgRole", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("MEMBER") }] }] as readonly AttributeApplication[], + default: "MEMBER" as FieldDefault + }, + status: { + name: "status", + type: "InvitationStatus", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("PENDING") }] }] as readonly AttributeApplication[], + default: "PENDING" as FieldDefault + }, + token: { + name: "token", + type: "String", + unique: true, + attributes: [{ name: "@unique" }] as readonly AttributeApplication[] + }, + expiresAt: { + name: "expiresAt", + type: "DateTime" + }, + organization: { + name: "organization", + type: "Organization", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "invitations", fields: ["organizationId"], references: ["id"], onDelete: "Cascade" } + }, + organizationId: { + name: "organizationId", + type: "String", + foreignKeyFor: [ + "organization" + ] as readonly string[] + }, + inviter: { + name: "inviter", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("InvitationInviter") }, { name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("inviterId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "sentInvitations", name: "InvitationInviter", fields: ["inviterId"], references: ["id"] } + }, + inviterId: { + name: "inviterId", + type: "String", + foreignKeyFor: [ + "inviter" + ] as readonly string[] + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }] }, + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("email")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("invitation") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + token: { type: "String" } + } + }, + Team: { + name: "Team", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + name: { + name: "name", + type: "String" + }, + key: { + name: "key", + type: "String" + }, + description: { + name: "description", + type: "String", + optional: true + }, + organization: { + name: "organization", + type: "Organization", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "teams", fields: ["organizationId"], references: ["id"], onDelete: "Cascade" } + }, + organizationId: { + name: "organizationId", + type: "String", + foreignKeyFor: [ + "organization" + ] as readonly string[] + }, + lead: { + name: "lead", + type: "User", + optional: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("TeamLead") }, { name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("leadId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "ledTeams", name: "TeamLead", fields: ["leadId"], references: ["id"] } + }, + leadId: { + name: "leadId", + type: "String", + optional: true, + foreignKeyFor: [ + "lead" + ] as readonly string[] + }, + members: { + name: "members", + type: "TeamMembership", + array: true, + relation: { opposite: "team" } + }, + projects: { + name: "projects", + type: "Project", + array: true, + relation: { opposite: "team" } + } + }, + attributes: [ + { name: "@@unique", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId"), ExpressionUtils.field("key")]) }] }, + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("team") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + organizationId_key: { organizationId: { type: "String" }, key: { type: "String" } } + } + }, + TeamMembership: { + name: "TeamMembership", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + user: { + name: "user", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "teamMemberships", fields: ["userId"], references: ["id"], onDelete: "Cascade" } + }, + userId: { + name: "userId", + type: "String", + foreignKeyFor: [ + "user" + ] as readonly string[] + }, + team: { + name: "team", + type: "Team", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("teamId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "members", fields: ["teamId"], references: ["id"], onDelete: "Cascade" } + }, + teamId: { + name: "teamId", + type: "String", + foreignKeyFor: [ + "team" + ] as readonly string[] + } + }, + attributes: [ + { name: "@@unique", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId"), ExpressionUtils.field("teamId")]) }] }, + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("teamId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("team_membership") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + userId_teamId: { userId: { type: "String" }, teamId: { type: "String" } } + } + }, + Project: { + name: "Project", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + name: { + name: "name", + type: "String" + }, + slug: { + name: "slug", + type: "String" + }, + description: { + name: "description", + type: "String", + optional: true + }, + archived: { + name: "archived", + type: "Boolean", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal(false) }] }] as readonly AttributeApplication[], + default: false as FieldDefault + }, + organization: { + name: "organization", + type: "Organization", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "projects", fields: ["organizationId"], references: ["id"], onDelete: "Cascade" } + }, + organizationId: { + name: "organizationId", + type: "String", + foreignKeyFor: [ + "organization" + ] as readonly string[] + }, + team: { + name: "team", + type: "Team", + optional: true, + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("teamId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("SetNull") }] }] as readonly AttributeApplication[], + relation: { opposite: "projects", fields: ["teamId"], references: ["id"], onDelete: "SetNull" } + }, + teamId: { + name: "teamId", + type: "String", + optional: true, + foreignKeyFor: [ + "team" + ] as readonly string[] + }, + lead: { + name: "lead", + type: "User", + optional: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("ProjectLead") }, { name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("leadId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "ledProjects", name: "ProjectLead", fields: ["leadId"], references: ["id"] } + }, + leadId: { + name: "leadId", + type: "String", + optional: true, + foreignKeyFor: [ + "lead" + ] as readonly string[] + }, + members: { + name: "members", + type: "ProjectMember", + array: true, + relation: { opposite: "project" } + }, + issues: { + name: "issues", + type: "Issue", + array: true, + relation: { opposite: "project" } + }, + milestones: { + name: "milestones", + type: "Milestone", + array: true, + relation: { opposite: "project" } + }, + sprints: { + name: "sprints", + type: "Sprint", + array: true, + relation: { opposite: "project" } + }, + documents: { + name: "documents", + type: "Document", + array: true, + relation: { opposite: "project" } + }, + openIssueCount: { + name: "openIssueCount", + type: "Int", + attributes: [{ name: "@computed" }] as readonly AttributeApplication[], + computed: true + } + }, + attributes: [ + { name: "@@unique", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId"), ExpressionUtils.field("slug")]) }] }, + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("teamId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("project") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + organizationId_slug: { organizationId: { type: "String" }, slug: { type: "String" } } + }, + computedFields: { + openIssueCount(_context: { + modelAlias: string; + }): number { + throw new Error("This is a stub for computed field"); + } + } + }, + ProjectMember: { + name: "ProjectMember", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + role: { + name: "role", + type: "ProjectRole", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("CONTRIBUTOR") }] }] as readonly AttributeApplication[], + default: "CONTRIBUTOR" as FieldDefault + }, + user: { + name: "user", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "projectMemberships", fields: ["userId"], references: ["id"], onDelete: "Cascade" } + }, + userId: { + name: "userId", + type: "String", + foreignKeyFor: [ + "user" + ] as readonly string[] + }, + project: { + name: "project", + type: "Project", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("projectId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "members", fields: ["projectId"], references: ["id"], onDelete: "Cascade" } + }, + projectId: { + name: "projectId", + type: "String", + foreignKeyFor: [ + "project" + ] as readonly string[] + } + }, + attributes: [ + { name: "@@unique", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId"), ExpressionUtils.field("projectId")]) }] }, + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("projectId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("project_member") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + userId_projectId: { userId: { type: "String" }, projectId: { type: "String" } } + } + }, + Issue: { + name: "Issue", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + number: { + name: "number", + type: "Int" + }, + title: { + name: "title", + type: "String" + }, + description: { + name: "description", + type: "String", + optional: true + }, + status: { + name: "status", + type: "IssueStatus", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("BACKLOG") }] }] as readonly AttributeApplication[], + default: "BACKLOG" as FieldDefault + }, + priority: { + name: "priority", + type: "Priority", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("NONE") }] }] as readonly AttributeApplication[], + default: "NONE" as FieldDefault + }, + estimate: { + name: "estimate", + type: "Int", + optional: true + }, + dueDate: { + name: "dueDate", + type: "DateTime", + optional: true + }, + metadata: { + name: "metadata", + type: "IssueMetadata", + optional: true, + attributes: [{ name: "@json" }] as readonly AttributeApplication[] + }, + project: { + name: "project", + type: "Project", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("projectId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "issues", fields: ["projectId"], references: ["id"], onDelete: "Cascade" } + }, + projectId: { + name: "projectId", + type: "String", + foreignKeyFor: [ + "project" + ] as readonly string[] + }, + author: { + name: "author", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("IssueAuthor") }, { name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("authorId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "authoredIssues", name: "IssueAuthor", fields: ["authorId"], references: ["id"] } + }, + authorId: { + name: "authorId", + type: "String", + foreignKeyFor: [ + "author" + ] as readonly string[] + }, + assignee: { + name: "assignee", + type: "User", + optional: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("IssueAssignee") }, { name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("assigneeId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("SetNull") }] }] as readonly AttributeApplication[], + relation: { opposite: "assignedIssues", name: "IssueAssignee", fields: ["assigneeId"], references: ["id"], onDelete: "SetNull" } + }, + assigneeId: { + name: "assigneeId", + type: "String", + optional: true, + foreignKeyFor: [ + "assignee" + ] as readonly string[] + }, + milestone: { + name: "milestone", + type: "Milestone", + optional: true, + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("milestoneId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("SetNull") }] }] as readonly AttributeApplication[], + relation: { opposite: "issues", fields: ["milestoneId"], references: ["id"], onDelete: "SetNull" } + }, + milestoneId: { + name: "milestoneId", + type: "String", + optional: true, + foreignKeyFor: [ + "milestone" + ] as readonly string[] + }, + sprint: { + name: "sprint", + type: "Sprint", + optional: true, + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("sprintId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("SetNull") }] }] as readonly AttributeApplication[], + relation: { opposite: "issues", fields: ["sprintId"], references: ["id"], onDelete: "SetNull" } + }, + sprintId: { + name: "sprintId", + type: "String", + optional: true, + foreignKeyFor: [ + "sprint" + ] as readonly string[] + }, + parent: { + name: "parent", + type: "Issue", + optional: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("SubIssues") }, { name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("parentId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("SetNull") }] }] as readonly AttributeApplication[], + relation: { opposite: "children", name: "SubIssues", fields: ["parentId"], references: ["id"], onDelete: "SetNull" } + }, + parentId: { + name: "parentId", + type: "String", + optional: true, + foreignKeyFor: [ + "parent" + ] as readonly string[] + }, + children: { + name: "children", + type: "Issue", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("SubIssues") }] }] as readonly AttributeApplication[], + relation: { opposite: "parent", name: "SubIssues" } + }, + labels: { + name: "labels", + type: "Label", + array: true, + relation: { opposite: "issues" } + }, + watchers: { + name: "watchers", + type: "User", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("IssueWatchers") }] }] as readonly AttributeApplication[], + relation: { opposite: "watchedIssues", name: "IssueWatchers" } + }, + comments: { + name: "comments", + type: "Comment", + array: true, + relation: { opposite: "issue" } + }, + attachments: { + name: "attachments", + type: "Attachment", + array: true, + relation: { opposite: "issue" } + }, + reactions: { + name: "reactions", + type: "Reaction", + array: true, + relation: { opposite: "issue" } + }, + timeEntries: { + name: "timeEntries", + type: "TimeEntry", + array: true, + relation: { opposite: "issue" } + }, + customFieldValues: { + name: "customFieldValues", + type: "CustomFieldValue", + array: true, + relation: { opposite: "issue" } + }, + commentCount: { + name: "commentCount", + type: "Int", + attributes: [{ name: "@computed" }] as readonly AttributeApplication[], + computed: true + } + }, + attributes: [ + { name: "@@unique", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("projectId"), ExpressionUtils.field("number")]) }] }, + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("projectId"), ExpressionUtils.field("status")]) }] }, + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("assigneeId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("issue") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + projectId_number: { projectId: { type: "String" }, number: { type: "Int" } } + }, + computedFields: { + commentCount(_context: { + modelAlias: string; + }): number { + throw new Error("This is a stub for computed field"); + } + } + }, + Label: { + name: "Label", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + name: { + name: "name", + type: "String" + }, + color: { + name: "color", + type: "String", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("#999999") }] }] as readonly AttributeApplication[], + default: "#999999" as FieldDefault + }, + organization: { + name: "organization", + type: "Organization", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "labels", fields: ["organizationId"], references: ["id"], onDelete: "Cascade" } + }, + organizationId: { + name: "organizationId", + type: "String", + foreignKeyFor: [ + "organization" + ] as readonly string[] + }, + issues: { + name: "issues", + type: "Issue", + array: true, + relation: { opposite: "labels" } + } + }, + attributes: [ + { name: "@@unique", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId"), ExpressionUtils.field("name")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("label") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + organizationId_name: { organizationId: { type: "String" }, name: { type: "String" } } + } + }, + Milestone: { + name: "Milestone", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + title: { + name: "title", + type: "String" + }, + description: { + name: "description", + type: "String", + optional: true + }, + status: { + name: "status", + type: "MilestoneStatus", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("OPEN") }] }] as readonly AttributeApplication[], + default: "OPEN" as FieldDefault + }, + dueDate: { + name: "dueDate", + type: "DateTime", + optional: true + }, + project: { + name: "project", + type: "Project", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("projectId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "milestones", fields: ["projectId"], references: ["id"], onDelete: "Cascade" } + }, + projectId: { + name: "projectId", + type: "String", + foreignKeyFor: [ + "project" + ] as readonly string[] + }, + issues: { + name: "issues", + type: "Issue", + array: true, + relation: { opposite: "milestone" } + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("projectId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("milestone") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + Sprint: { + name: "Sprint", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + name: { + name: "name", + type: "String" + }, + status: { + name: "status", + type: "SprintStatus", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("PLANNED") }] }] as readonly AttributeApplication[], + default: "PLANNED" as FieldDefault + }, + startDate: { + name: "startDate", + type: "DateTime", + optional: true + }, + endDate: { + name: "endDate", + type: "DateTime", + optional: true + }, + goal: { + name: "goal", + type: "String", + optional: true + }, + project: { + name: "project", + type: "Project", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("projectId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "sprints", fields: ["projectId"], references: ["id"], onDelete: "Cascade" } + }, + projectId: { + name: "projectId", + type: "String", + foreignKeyFor: [ + "project" + ] as readonly string[] + }, + issues: { + name: "issues", + type: "Issue", + array: true, + relation: { opposite: "sprint" } + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("projectId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("sprint") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + Comment: { + name: "Comment", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + body: { + name: "body", + type: "String" + }, + issue: { + name: "issue", + type: "Issue", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("issueId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "comments", fields: ["issueId"], references: ["id"], onDelete: "Cascade" } + }, + issueId: { + name: "issueId", + type: "String", + foreignKeyFor: [ + "issue" + ] as readonly string[] + }, + author: { + name: "author", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("authorId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "comments", fields: ["authorId"], references: ["id"] } + }, + authorId: { + name: "authorId", + type: "String", + foreignKeyFor: [ + "author" + ] as readonly string[] + }, + parent: { + name: "parent", + type: "Comment", + optional: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("CommentThread") }, { name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("parentId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("SetNull") }] }] as readonly AttributeApplication[], + relation: { opposite: "replies", name: "CommentThread", fields: ["parentId"], references: ["id"], onDelete: "SetNull" } + }, + parentId: { + name: "parentId", + type: "String", + optional: true, + foreignKeyFor: [ + "parent" + ] as readonly string[] + }, + replies: { + name: "replies", + type: "Comment", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("CommentThread") }] }] as readonly AttributeApplication[], + relation: { opposite: "parent", name: "CommentThread" } + }, + reactions: { + name: "reactions", + type: "Reaction", + array: true, + relation: { opposite: "comment" } + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("issueId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("comment") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + Reaction: { + name: "Reaction", + fields: { + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + emoji: { + name: "emoji", + type: "String" + }, + user: { + name: "user", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "reactions", fields: ["userId"], references: ["id"], onDelete: "Cascade" } + }, + userId: { + name: "userId", + type: "String", + foreignKeyFor: [ + "user" + ] as readonly string[] + }, + issue: { + name: "issue", + type: "Issue", + optional: true, + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("issueId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "reactions", fields: ["issueId"], references: ["id"], onDelete: "Cascade" } + }, + issueId: { + name: "issueId", + type: "String", + optional: true, + foreignKeyFor: [ + "issue" + ] as readonly string[] + }, + comment: { + name: "comment", + type: "Comment", + optional: true, + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("commentId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "reactions", fields: ["commentId"], references: ["id"], onDelete: "Cascade" } + }, + commentId: { + name: "commentId", + type: "String", + optional: true, + foreignKeyFor: [ + "comment" + ] as readonly string[] + }, + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + } + }, + attributes: [ + { name: "@@unique", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId"), ExpressionUtils.field("issueId"), ExpressionUtils.field("emoji")]) }] }, + { name: "@@unique", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId"), ExpressionUtils.field("commentId"), ExpressionUtils.field("emoji")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("reaction") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + userId_issueId_emoji: { userId: { type: "String" }, issueId: { type: "String" }, emoji: { type: "String" } }, + userId_commentId_emoji: { userId: { type: "String" }, commentId: { type: "String" }, emoji: { type: "String" } } + } + }, + Attachment: { + name: "Attachment", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + kind: { + name: "kind", + type: "String", + isDiscriminator: true + }, + issue: { + name: "issue", + type: "Issue", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("issueId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "attachments", fields: ["issueId"], references: ["id"], onDelete: "Cascade" } + }, + issueId: { + name: "issueId", + type: "String", + foreignKeyFor: [ + "issue" + ] as readonly string[] + }, + uploadedBy: { + name: "uploadedBy", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("uploadedById")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "attachments", fields: ["uploadedById"], references: ["id"] } + }, + uploadedById: { + name: "uploadedById", + type: "String", + foreignKeyFor: [ + "uploadedBy" + ] as readonly string[] + } + }, + attributes: [ + { name: "@@delegate", args: [{ name: "discriminator", value: ExpressionUtils.field("kind") }] }, + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("issueId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("attachment") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + }, + isDelegate: true, + subModels: ["FileAttachment", "ImageAttachment", "LinkAttachment"] + }, + FileAttachment: { + name: "FileAttachment", + baseModel: "Attachment", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + originModel: "Attachment", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + originModel: "Attachment", + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + kind: { + name: "kind", + type: "String", + originModel: "Attachment", + isDiscriminator: true + }, + issue: { + name: "issue", + type: "Issue", + originModel: "Attachment", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("issueId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "attachments", fields: ["issueId"], references: ["id"], onDelete: "Cascade" } + }, + issueId: { + name: "issueId", + type: "String", + originModel: "Attachment", + foreignKeyFor: [ + "issue" + ] as readonly string[] + }, + uploadedBy: { + name: "uploadedBy", + type: "User", + originModel: "Attachment", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("uploadedById")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "attachments", fields: ["uploadedById"], references: ["id"] } + }, + uploadedById: { + name: "uploadedById", + type: "String", + originModel: "Attachment", + foreignKeyFor: [ + "uploadedBy" + ] as readonly string[] + }, + fileName: { + name: "fileName", + type: "String" + }, + fileSize: { + name: "fileSize", + type: "Int" + }, + mimeType: { + name: "mimeType", + type: "String" + } + }, + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + ImageAttachment: { + name: "ImageAttachment", + baseModel: "Attachment", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + originModel: "Attachment", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + originModel: "Attachment", + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + kind: { + name: "kind", + type: "String", + originModel: "Attachment", + isDiscriminator: true + }, + issue: { + name: "issue", + type: "Issue", + originModel: "Attachment", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("issueId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "attachments", fields: ["issueId"], references: ["id"], onDelete: "Cascade" } + }, + issueId: { + name: "issueId", + type: "String", + originModel: "Attachment", + foreignKeyFor: [ + "issue" + ] as readonly string[] + }, + uploadedBy: { + name: "uploadedBy", + type: "User", + originModel: "Attachment", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("uploadedById")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "attachments", fields: ["uploadedById"], references: ["id"] } + }, + uploadedById: { + name: "uploadedById", + type: "String", + originModel: "Attachment", + foreignKeyFor: [ + "uploadedBy" + ] as readonly string[] + }, + url: { + name: "url", + type: "String" + }, + width: { + name: "width", + type: "Int", + optional: true + }, + height: { + name: "height", + type: "Int", + optional: true + }, + alt: { + name: "alt", + type: "String", + optional: true + } + }, + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + LinkAttachment: { + name: "LinkAttachment", + baseModel: "Attachment", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + originModel: "Attachment", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + originModel: "Attachment", + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + kind: { + name: "kind", + type: "String", + originModel: "Attachment", + isDiscriminator: true + }, + issue: { + name: "issue", + type: "Issue", + originModel: "Attachment", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("issueId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "attachments", fields: ["issueId"], references: ["id"], onDelete: "Cascade" } + }, + issueId: { + name: "issueId", + type: "String", + originModel: "Attachment", + foreignKeyFor: [ + "issue" + ] as readonly string[] + }, + uploadedBy: { + name: "uploadedBy", + type: "User", + originModel: "Attachment", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("uploadedById")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "attachments", fields: ["uploadedById"], references: ["id"] } + }, + uploadedById: { + name: "uploadedById", + type: "String", + originModel: "Attachment", + foreignKeyFor: [ + "uploadedBy" + ] as readonly string[] + }, + url: { + name: "url", + type: "String" + }, + title: { + name: "title", + type: "String", + optional: true + } + }, + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + Document: { + name: "Document", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + title: { + name: "title", + type: "String" + }, + content: { + name: "content", + type: "DocContent", + optional: true, + attributes: [{ name: "@json" }] as readonly AttributeApplication[] + }, + project: { + name: "project", + type: "Project", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("projectId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "documents", fields: ["projectId"], references: ["id"], onDelete: "Cascade" } + }, + projectId: { + name: "projectId", + type: "String", + foreignKeyFor: [ + "project" + ] as readonly string[] + }, + author: { + name: "author", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("DocAuthor") }, { name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("authorId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "authoredDocuments", name: "DocAuthor", fields: ["authorId"], references: ["id"] } + }, + authorId: { + name: "authorId", + type: "String", + foreignKeyFor: [ + "author" + ] as readonly string[] + }, + parent: { + name: "parent", + type: "Document", + optional: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("DocTree") }, { name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("parentId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("SetNull") }] }] as readonly AttributeApplication[], + relation: { opposite: "children", name: "DocTree", fields: ["parentId"], references: ["id"], onDelete: "SetNull" } + }, + parentId: { + name: "parentId", + type: "String", + optional: true, + foreignKeyFor: [ + "parent" + ] as readonly string[] + }, + children: { + name: "children", + type: "Document", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("DocTree") }] }] as readonly AttributeApplication[], + relation: { opposite: "parent", name: "DocTree" } + }, + collaborators: { + name: "collaborators", + type: "User", + array: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("DocCollaborators") }] }] as readonly AttributeApplication[], + relation: { opposite: "collaboratingDocuments", name: "DocCollaborators" } + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("projectId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("document") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + CustomField: { + name: "CustomField", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + name: { + name: "name", + type: "String" + }, + type: { + name: "type", + type: "CustomFieldType", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("TEXT") }] }] as readonly AttributeApplication[], + default: "TEXT" as FieldDefault + }, + organization: { + name: "organization", + type: "Organization", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "customFields", fields: ["organizationId"], references: ["id"], onDelete: "Cascade" } + }, + organizationId: { + name: "organizationId", + type: "String", + foreignKeyFor: [ + "organization" + ] as readonly string[] + }, + values: { + name: "values", + type: "CustomFieldValue", + array: true, + relation: { opposite: "field" } + } + }, + attributes: [ + { name: "@@unique", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId"), ExpressionUtils.field("name")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("custom_field") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + organizationId_name: { organizationId: { type: "String" }, name: { type: "String" } } + } + }, + CustomFieldValue: { + name: "CustomFieldValue", + fields: { + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + value: { + name: "value", + type: "String" + }, + field: { + name: "field", + type: "CustomField", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("fieldId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "values", fields: ["fieldId"], references: ["id"], onDelete: "Cascade" } + }, + fieldId: { + name: "fieldId", + type: "String", + foreignKeyFor: [ + "field" + ] as readonly string[] + }, + issue: { + name: "issue", + type: "Issue", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("issueId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "customFieldValues", fields: ["issueId"], references: ["id"], onDelete: "Cascade" } + }, + issueId: { + name: "issueId", + type: "String", + foreignKeyFor: [ + "issue" + ] as readonly string[] + } + }, + attributes: [ + { name: "@@unique", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("fieldId"), ExpressionUtils.field("issueId")]) }] }, + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("issueId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("custom_field_value") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + fieldId_issueId: { fieldId: { type: "String" }, issueId: { type: "String" } } + } + }, + TimeEntry: { + name: "TimeEntry", + fields: { + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + minutes: { + name: "minutes", + type: "Int" + }, + note: { + name: "note", + type: "String", + optional: true + }, + spentAt: { + name: "spentAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + issue: { + name: "issue", + type: "Issue", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("issueId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "timeEntries", fields: ["issueId"], references: ["id"], onDelete: "Cascade" } + }, + issueId: { + name: "issueId", + type: "String", + foreignKeyFor: [ + "issue" + ] as readonly string[] + }, + user: { + name: "user", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "timeEntries", fields: ["userId"], references: ["id"], onDelete: "Cascade" } + }, + userId: { + name: "userId", + type: "String", + foreignKeyFor: [ + "user" + ] as readonly string[] + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("issueId")]) }] }, + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("time_entry") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + Webhook: { + name: "Webhook", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + url: { + name: "url", + type: "String" + }, + secret: { + name: "secret", + type: "String" + }, + active: { + name: "active", + type: "Boolean", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal(true) }] }] as readonly AttributeApplication[], + default: true as FieldDefault + }, + config: { + name: "config", + type: "WebhookConfig", + attributes: [{ name: "@json" }] as readonly AttributeApplication[] + }, + organization: { + name: "organization", + type: "Organization", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "webhooks", fields: ["organizationId"], references: ["id"], onDelete: "Cascade" } + }, + organizationId: { + name: "organizationId", + type: "String", + foreignKeyFor: [ + "organization" + ] as readonly string[] + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("webhook") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + Integration: { + name: "Integration", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + provider: { + name: "provider", + type: "IntegrationProvider" + }, + config: { + name: "config", + type: "IntegrationConfig", + attributes: [{ name: "@json" }] as readonly AttributeApplication[] + }, + organization: { + name: "organization", + type: "Organization", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "integrations", fields: ["organizationId"], references: ["id"], onDelete: "Cascade" } + }, + organizationId: { + name: "organizationId", + type: "String", + foreignKeyFor: [ + "organization" + ] as readonly string[] + }, + installedBy: { + name: "installedBy", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("installedById")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "installedIntegrations", fields: ["installedById"], references: ["id"] } + }, + installedById: { + name: "installedById", + type: "String", + foreignKeyFor: [ + "installedBy" + ] as readonly string[] + } + }, + attributes: [ + { name: "@@unique", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId"), ExpressionUtils.field("provider")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("integration") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + organizationId_provider: { organizationId: { type: "String" }, provider: { type: "IntegrationProvider" } } + } + }, + ApiToken: { + name: "ApiToken", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + name: { + name: "name", + type: "String" + }, + tokenHash: { + name: "tokenHash", + type: "String", + unique: true, + attributes: [{ name: "@unique" }] as readonly AttributeApplication[] + }, + scopes: { + name: "scopes", + type: "String" + }, + lastUsedAt: { + name: "lastUsedAt", + type: "DateTime", + optional: true + }, + expiresAt: { + name: "expiresAt", + type: "DateTime", + optional: true + }, + organization: { + name: "organization", + type: "Organization", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "apiTokens", fields: ["organizationId"], references: ["id"], onDelete: "Cascade" } + }, + organizationId: { + name: "organizationId", + type: "String", + foreignKeyFor: [ + "organization" + ] as readonly string[] + }, + user: { + name: "user", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("userId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "apiTokens", fields: ["userId"], references: ["id"], onDelete: "Cascade" } + }, + userId: { + name: "userId", + type: "String", + foreignKeyFor: [ + "user" + ] as readonly string[] + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("api_token") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + tokenHash: { type: "String" } + } + }, + ActivityLog: { + name: "ActivityLog", + fields: { + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + action: { + name: "action", + type: "String" + }, + targetType: { + name: "targetType", + type: "String" + }, + targetId: { + name: "targetId", + type: "String" + }, + organization: { + name: "organization", + type: "Organization", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "activities", fields: ["organizationId"], references: ["id"], onDelete: "Cascade" } + }, + organizationId: { + name: "organizationId", + type: "String", + foreignKeyFor: [ + "organization" + ] as readonly string[] + }, + actor: { + name: "actor", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("actorId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "activities", fields: ["actorId"], references: ["id"] } + }, + actorId: { + name: "actorId", + type: "String", + foreignKeyFor: [ + "actor" + ] as readonly string[] + }, + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }] }, + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("actorId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("activity_log") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + Notification: { + name: "Notification", + fields: { + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + type: { + name: "type", + type: "NotificationType" + }, + message: { + name: "message", + type: "String" + }, + read: { + name: "read", + type: "Boolean", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal(false) }] }] as readonly AttributeApplication[], + default: false as FieldDefault + }, + recipient: { + name: "recipient", + type: "User", + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("NotifRecipient") }, { name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("recipientId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "notifications", name: "NotifRecipient", fields: ["recipientId"], references: ["id"], onDelete: "Cascade" } + }, + recipientId: { + name: "recipientId", + type: "String", + foreignKeyFor: [ + "recipient" + ] as readonly string[] + }, + actor: { + name: "actor", + type: "User", + optional: true, + attributes: [{ name: "@relation", args: [{ name: "name", value: ExpressionUtils.literal("NotifActor") }, { name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("actorId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("SetNull") }] }] as readonly AttributeApplication[], + relation: { opposite: "triggeredNotifications", name: "NotifActor", fields: ["actorId"], references: ["id"], onDelete: "SetNull" } + }, + actorId: { + name: "actorId", + type: "String", + optional: true, + foreignKeyFor: [ + "actor" + ] as readonly string[] + }, + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("recipientId"), ExpressionUtils.field("read")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("notification") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" } + } + }, + BillingCustomer: { + name: "BillingCustomer", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + stripeCustomerId: { + name: "stripeCustomerId", + type: "String", + unique: true, + attributes: [{ name: "@unique" }] as readonly AttributeApplication[] + }, + email: { + name: "email", + type: "String" + }, + organization: { + name: "organization", + type: "Organization", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "billingCustomer", fields: ["organizationId"], references: ["id"], onDelete: "Cascade" } + }, + organizationId: { + name: "organizationId", + type: "String", + unique: true, + attributes: [{ name: "@unique" }] as readonly AttributeApplication[], + foreignKeyFor: [ + "organization" + ] as readonly string[] + } + }, + attributes: [ + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("billing_customer") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + stripeCustomerId: { type: "String" }, + organizationId: { type: "String" } + } + }, + Plan: { + name: "Plan", + fields: { + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + name: { + name: "name", + type: "String" + }, + tier: { + name: "tier", + type: "PlanTier", + unique: true, + attributes: [{ name: "@unique" }] as readonly AttributeApplication[] + }, + priceCents: { + name: "priceCents", + type: "Int", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal(0) }] }] as readonly AttributeApplication[], + default: 0 as FieldDefault + }, + seatLimit: { + name: "seatLimit", + type: "Int", + optional: true + }, + subscriptions: { + name: "subscriptions", + type: "Subscription", + array: true, + relation: { opposite: "plan" } + } + }, + attributes: [ + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("plan") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + tier: { type: "PlanTier" } + } + }, + Subscription: { + name: "Subscription", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + status: { + name: "status", + type: "SubscriptionStatus", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("TRIALING") }] }] as readonly AttributeApplication[], + default: "TRIALING" as FieldDefault + }, + currentPeriodEnd: { + name: "currentPeriodEnd", + type: "DateTime", + optional: true + }, + cancelAtPeriodEnd: { + name: "cancelAtPeriodEnd", + type: "Boolean", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal(false) }] }] as readonly AttributeApplication[], + default: false as FieldDefault + }, + organization: { + name: "organization", + type: "Organization", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("organizationId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "subscription", fields: ["organizationId"], references: ["id"], onDelete: "Cascade" } + }, + organizationId: { + name: "organizationId", + type: "String", + unique: true, + attributes: [{ name: "@unique" }] as readonly AttributeApplication[], + foreignKeyFor: [ + "organization" + ] as readonly string[] + }, + plan: { + name: "plan", + type: "Plan", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("planId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }] }] as readonly AttributeApplication[], + relation: { opposite: "subscriptions", fields: ["planId"], references: ["id"] } + }, + planId: { + name: "planId", + type: "String", + foreignKeyFor: [ + "plan" + ] as readonly string[] + }, + invoices: { + name: "invoices", + type: "Invoice", + array: true, + relation: { opposite: "subscription" } + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("planId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("subscription") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + organizationId: { type: "String" } + } + }, + Invoice: { + name: "Invoice", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + }, + id: { + name: "id", + type: "String", + id: true, + attributes: [{ name: "@id" }, { name: "@default", args: [{ name: "value", value: ExpressionUtils.call("cuid") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("cuid") as FieldDefault + }, + number: { + name: "number", + type: "String", + unique: true, + attributes: [{ name: "@unique" }] as readonly AttributeApplication[] + }, + amountCents: { + name: "amountCents", + type: "Int" + }, + status: { + name: "status", + type: "InvoiceStatus", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("DRAFT") }] }] as readonly AttributeApplication[], + default: "DRAFT" as FieldDefault + }, + issuedAt: { + name: "issuedAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + paidAt: { + name: "paidAt", + type: "DateTime", + optional: true + }, + subscription: { + name: "subscription", + type: "Subscription", + attributes: [{ name: "@relation", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("subscriptionId")]) }, { name: "references", value: ExpressionUtils.array("String", [ExpressionUtils.field("id")]) }, { name: "onDelete", value: ExpressionUtils.literal("Cascade") }] }] as readonly AttributeApplication[], + relation: { opposite: "invoices", fields: ["subscriptionId"], references: ["id"], onDelete: "Cascade" } + }, + subscriptionId: { + name: "subscriptionId", + type: "String", + foreignKeyFor: [ + "subscription" + ] as readonly string[] + } + }, + attributes: [ + { name: "@@index", args: [{ name: "fields", value: ExpressionUtils.array("String", [ExpressionUtils.field("subscriptionId")]) }] }, + { name: "@@map", args: [{ name: "name", value: ExpressionUtils.literal("invoice") }] } + ] as readonly AttributeApplication[], + idFields: ["id"], + uniqueFields: { + id: { type: "String" }, + number: { type: "String" } + } + } + } as const; + typeDefs = { + Timestamps: { + name: "Timestamps", + fields: { + createdAt: { + name: "createdAt", + type: "DateTime", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.call("now") }] }] as readonly AttributeApplication[], + default: ExpressionUtils.call("now") as FieldDefault + }, + updatedAt: { + name: "updatedAt", + type: "DateTime", + updatedAt: true, + attributes: [{ name: "@updatedAt" }] as readonly AttributeApplication[] + } + } + }, + IssueMetadata: { + name: "IssueMetadata", + fields: { + sourceUrl: { + name: "sourceUrl", + type: "String", + optional: true + }, + externalId: { + name: "externalId", + type: "String", + optional: true + }, + storyPoints: { + name: "storyPoints", + type: "Int", + optional: true + }, + blockedById: { + name: "blockedById", + type: "String", + optional: true + } + } + }, + DocContent: { + name: "DocContent", + fields: { + format: { + name: "format", + type: "String" + }, + body: { + name: "body", + type: "String" + }, + revision: { + name: "revision", + type: "Int", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal(1) }] }] as readonly AttributeApplication[], + default: 1 as FieldDefault + } + } + }, + WebhookConfig: { + name: "WebhookConfig", + fields: { + events: { + name: "events", + type: "String" + }, + contentType: { + name: "contentType", + type: "String", + attributes: [{ name: "@default", args: [{ name: "value", value: ExpressionUtils.literal("application/json") }] }] as readonly AttributeApplication[], + default: "application/json" as FieldDefault + } + } + }, + IntegrationConfig: { + name: "IntegrationConfig", + fields: { + accessToken: { + name: "accessToken", + type: "String" + }, + accountName: { + name: "accountName", + type: "String", + optional: true + }, + scopes: { + name: "scopes", + type: "String", + optional: true + } + } + } + } as const; + enums = { + OrgRole: { + name: "OrgRole", + values: { + OWNER: "OWNER", + ADMIN: "ADMIN", + MEMBER: "MEMBER", + GUEST: "GUEST" + } + }, + ProjectRole: { + name: "ProjectRole", + values: { + LEAD: "LEAD", + CONTRIBUTOR: "CONTRIBUTOR", + VIEWER: "VIEWER" + } + }, + IssueStatus: { + name: "IssueStatus", + values: { + BACKLOG: "BACKLOG", + TODO: "TODO", + IN_PROGRESS: "IN_PROGRESS", + IN_REVIEW: "IN_REVIEW", + DONE: "DONE", + CANCELED: "CANCELED" + } + }, + Priority: { + name: "Priority", + values: { + NONE: "NONE", + LOW: "LOW", + MEDIUM: "MEDIUM", + HIGH: "HIGH", + URGENT: "URGENT" + } + }, + SprintStatus: { + name: "SprintStatus", + values: { + PLANNED: "PLANNED", + ACTIVE: "ACTIVE", + COMPLETED: "COMPLETED" + } + }, + MilestoneStatus: { + name: "MilestoneStatus", + values: { + OPEN: "OPEN", + CLOSED: "CLOSED" + } + }, + InvitationStatus: { + name: "InvitationStatus", + values: { + PENDING: "PENDING", + ACCEPTED: "ACCEPTED", + REVOKED: "REVOKED", + EXPIRED: "EXPIRED" + } + }, + PlanTier: { + name: "PlanTier", + values: { + FREE: "FREE", + PRO: "PRO", + BUSINESS: "BUSINESS", + ENTERPRISE: "ENTERPRISE" + } + }, + SubscriptionStatus: { + name: "SubscriptionStatus", + values: { + TRIALING: "TRIALING", + ACTIVE: "ACTIVE", + PAST_DUE: "PAST_DUE", + CANCELED: "CANCELED" + } + }, + InvoiceStatus: { + name: "InvoiceStatus", + values: { + DRAFT: "DRAFT", + OPEN: "OPEN", + PAID: "PAID", + VOID: "VOID" + } + }, + NotificationType: { + name: "NotificationType", + values: { + ISSUE_ASSIGNED: "ISSUE_ASSIGNED", + ISSUE_MENTIONED: "ISSUE_MENTIONED", + COMMENT_ADDED: "COMMENT_ADDED", + INVITATION: "INVITATION", + BILLING: "BILLING" + } + }, + IntegrationProvider: { + name: "IntegrationProvider", + values: { + GITHUB: "GITHUB", + GITLAB: "GITLAB", + SLACK: "SLACK", + DISCORD: "DISCORD", + FIGMA: "FIGMA" + } + }, + CustomFieldType: { + name: "CustomFieldType", + values: { + TEXT: "TEXT", + NUMBER: "NUMBER", + BOOLEAN: "BOOLEAN", + DATE: "DATE", + SELECT: "SELECT" + } + } + } as const; + authType = "User" as const; + plugins = {}; +} +export const schema = new SchemaType(); diff --git a/samples/taskforge/zenstack/schema.zmodel b/samples/taskforge/zenstack/schema.zmodel new file mode 100644 index 000000000..32114cf99 --- /dev/null +++ b/samples/taskforge/zenstack/schema.zmodel @@ -0,0 +1,805 @@ +// ============================================================================ +// TaskForge — a team collaboration / project-tracking SaaS +// ZenStack v3 schema (ZModel). Database: SQLite. +// +// Demonstrates: 1-1, 1-many, implicit & explicit many-to-many, self relations, +// polymorphism (@@delegate), typed JSON (@json), computed fields (@computed), +// reusable field mixins (`type ... with`), and enums. +// +// Workflow: +// pnpm zen:generate # compile this schema -> ./schema.ts (the typed client) +// pnpm db:push # sync the SQLite database to this schema +// ============================================================================ + +datasource db { + provider = 'sqlite' + url = env('DATABASE_URL') +} + +// ---------------------------------------------------------------------------- +// Mixins — reusable field bundles inlined into models with `with`. +// ---------------------------------------------------------------------------- + +type Timestamps { + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +// ---------------------------------------------------------------------------- +// Enums +// ---------------------------------------------------------------------------- + +enum OrgRole { + OWNER + ADMIN + MEMBER + GUEST +} + +enum ProjectRole { + LEAD + CONTRIBUTOR + VIEWER +} + +enum IssueStatus { + BACKLOG + TODO + IN_PROGRESS + IN_REVIEW + DONE + CANCELED +} + +enum Priority { + NONE + LOW + MEDIUM + HIGH + URGENT +} + +enum SprintStatus { + PLANNED + ACTIVE + COMPLETED +} + +enum MilestoneStatus { + OPEN + CLOSED +} + +enum InvitationStatus { + PENDING + ACCEPTED + REVOKED + EXPIRED +} + +enum PlanTier { + FREE + PRO + BUSINESS + ENTERPRISE +} + +enum SubscriptionStatus { + TRIALING + ACTIVE + PAST_DUE + CANCELED +} + +enum InvoiceStatus { + DRAFT + OPEN + PAID + VOID +} + +enum NotificationType { + ISSUE_ASSIGNED + ISSUE_MENTIONED + COMMENT_ADDED + INVITATION + BILLING +} + +enum IntegrationProvider { + GITHUB + GITLAB + SLACK + DISCORD + FIGMA +} + +enum CustomFieldType { + TEXT + NUMBER + BOOLEAN + DATE + SELECT +} + +// ============================================================================ +// Authentication models (better-auth core schema) +// Mapped to better-auth's expected lowercase table names. +// ============================================================================ + +model User { + id String @id + name String + email String @unique + emailVerified Boolean @default(false) + image String? + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + + // --- auth relations --- + accounts Account[] + sessions Session[] + + // --- domain relations --- + ownedOrganizations Organization[] @relation("OrgOwner") + memberships Membership[] + sentInvitations Invitation[] @relation("InvitationInviter") + teamMemberships TeamMembership[] + ledTeams Team[] @relation("TeamLead") + projectMemberships ProjectMember[] + ledProjects Project[] @relation("ProjectLead") + authoredIssues Issue[] @relation("IssueAuthor") + assignedIssues Issue[] @relation("IssueAssignee") + watchedIssues Issue[] @relation("IssueWatchers") + comments Comment[] + attachments Attachment[] + reactions Reaction[] + authoredDocuments Document[] @relation("DocAuthor") + collaboratingDocuments Document[] @relation("DocCollaborators") + activities ActivityLog[] + notifications Notification[] @relation("NotifRecipient") + triggeredNotifications Notification[] @relation("NotifActor") + timeEntries TimeEntry[] + installedIntegrations Integration[] + apiTokens ApiToken[] + + @@map('user') +} + +model Account { + id String @id + accountId String + providerId String + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + accessToken String? + refreshToken String? + idToken String? + accessTokenExpiresAt DateTime? + refreshTokenExpiresAt DateTime? + scope String? + password String? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([userId]) + @@map('account') +} + +model Session { + id String @id + expiresAt DateTime + token String @unique + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + ipAddress String? + userAgent String? + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@map('session') +} + +model Verification { + id String @id + identifier String + value String + expiresAt DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + + @@index([identifier]) + @@map('verification') +} + +// ============================================================================ +// Tenancy — organizations, members, teams +// ============================================================================ + +model Organization with Timestamps { + id String @id @default(cuid()) + name String + slug String @unique + logoUrl String? + + // 1-1: an organization optionally has a billing customer & subscription + billingCustomer BillingCustomer? + subscription Subscription? + + // owner (1-many from the User's perspective, but conceptually one owner) + owner User @relation("OrgOwner", fields: [ownerId], references: [id]) + ownerId String + + members Membership[] + invitations Invitation[] + teams Team[] + projects Project[] + labels Label[] + customFields CustomField[] + webhooks Webhook[] + integrations Integration[] + apiTokens ApiToken[] + activities ActivityLog[] + + + @@index([ownerId]) + @@map('organization') +} + +/// Explicit many-to-many join between User and Organization, carrying a role. +model Membership with Timestamps { + id String @id @default(cuid()) + role OrgRole @default(MEMBER) + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String + organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) + organizationId String + + + @@unique([userId, organizationId]) + @@index([organizationId]) + @@map('membership') +} + +model Invitation with Timestamps { + id String @id @default(cuid()) + email String + role OrgRole @default(MEMBER) + status InvitationStatus @default(PENDING) + token String @unique + expiresAt DateTime + + organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) + organizationId String + inviter User @relation("InvitationInviter", fields: [inviterId], references: [id]) + inviterId String + + + @@index([organizationId]) + @@index([email]) + @@map('invitation') +} + +model Team with Timestamps { + id String @id @default(cuid()) + name String + key String // short prefix used for issue identifiers, e.g. "ENG" + description String? + + organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) + organizationId String + lead User? @relation("TeamLead", fields: [leadId], references: [id]) + leadId String? + + members TeamMembership[] + projects Project[] + + + @@unique([organizationId, key]) + @@index([organizationId]) + @@map('team') +} + +/// Explicit many-to-many join between User and Team. +model TeamMembership with Timestamps { + id String @id @default(cuid()) + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String + team Team @relation(fields: [teamId], references: [id], onDelete: Cascade) + teamId String + + + @@unique([userId, teamId]) + @@index([teamId]) + @@map('team_membership') +} + +// ============================================================================ +// Projects, issues & planning +// ============================================================================ + +model Project with Timestamps { + id String @id @default(cuid()) + name String + slug String + description String? + archived Boolean @default(false) + + organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) + organizationId String + team Team? @relation(fields: [teamId], references: [id], onDelete: SetNull) + teamId String? + lead User? @relation("ProjectLead", fields: [leadId], references: [id]) + leadId String? + + members ProjectMember[] + issues Issue[] + milestones Milestone[] + sprints Sprint[] + documents Document[] + + // computed: number of issues not in a terminal state (implemented in client config) + openIssueCount Int @computed + + + @@unique([organizationId, slug]) + @@index([teamId]) + @@map('project') +} + +/// Explicit many-to-many join between User and Project, carrying a role. +model ProjectMember with Timestamps { + id String @id @default(cuid()) + role ProjectRole @default(CONTRIBUTOR) + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String + project Project @relation(fields: [projectId], references: [id], onDelete: Cascade) + projectId String + + + @@unique([userId, projectId]) + @@index([projectId]) + @@map('project_member') +} + +model Issue with Timestamps { + id String @id @default(cuid()) + number Int // per-project sequential number + title String + description String? + status IssueStatus @default(BACKLOG) + priority Priority @default(NONE) + estimate Int? // story points + dueDate DateTime? + + // Arbitrary, strongly-typed metadata bag stored as JSON. + metadata IssueMetadata? @json + + project Project @relation(fields: [projectId], references: [id], onDelete: Cascade) + projectId String + + author User @relation("IssueAuthor", fields: [authorId], references: [id]) + authorId String + assignee User? @relation("IssueAssignee", fields: [assigneeId], references: [id], onDelete: SetNull) + assigneeId String? + + milestone Milestone? @relation(fields: [milestoneId], references: [id], onDelete: SetNull) + milestoneId String? + sprint Sprint? @relation(fields: [sprintId], references: [id], onDelete: SetNull) + sprintId String? + + // Self-relation: sub-issues / parent issue. + parent Issue? @relation("SubIssues", fields: [parentId], references: [id], onDelete: SetNull) + parentId String? + children Issue[] @relation("SubIssues") + + // Implicit many-to-many: labels and watchers. + labels Label[] + watchers User[] @relation("IssueWatchers") + + comments Comment[] + attachments Attachment[] + reactions Reaction[] + timeEntries TimeEntry[] + customFieldValues CustomFieldValue[] + + // computed: number of comments on this issue (implemented in client config) + commentCount Int @computed + + + @@unique([projectId, number]) + @@index([projectId, status]) + @@index([assigneeId]) + @@map('issue') +} + +/// Strongly-typed JSON payload for Issue.metadata. +type IssueMetadata { + sourceUrl String? + externalId String? + storyPoints Int? + blockedById String? +} + +model Label with Timestamps { + id String @id @default(cuid()) + name String + color String @default("#999999") + + organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) + organizationId String + + issues Issue[] + + + @@unique([organizationId, name]) + @@map('label') +} + +model Milestone with Timestamps { + id String @id @default(cuid()) + title String + description String? + status MilestoneStatus @default(OPEN) + dueDate DateTime? + + project Project @relation(fields: [projectId], references: [id], onDelete: Cascade) + projectId String + + issues Issue[] + + + @@index([projectId]) + @@map('milestone') +} + +model Sprint with Timestamps { + id String @id @default(cuid()) + name String + status SprintStatus @default(PLANNED) + startDate DateTime? + endDate DateTime? + goal String? + + project Project @relation(fields: [projectId], references: [id], onDelete: Cascade) + projectId String + + issues Issue[] + + + @@index([projectId]) + @@map('sprint') +} + +// ============================================================================ +// Collaboration — comments, reactions, attachments, documents +// ============================================================================ + +model Comment with Timestamps { + id String @id @default(cuid()) + body String + + issue Issue @relation(fields: [issueId], references: [id], onDelete: Cascade) + issueId String + author User @relation(fields: [authorId], references: [id]) + authorId String + + // Self-relation: threaded replies. + parent Comment? @relation("CommentThread", fields: [parentId], references: [id], onDelete: SetNull) + parentId String? + replies Comment[] @relation("CommentThread") + + reactions Reaction[] + + + @@index([issueId]) + @@map('comment') +} + +model Reaction { + id String @id @default(cuid()) + emoji String + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String + + // A reaction targets either an issue or a comment (both optional FKs). + issue Issue? @relation(fields: [issueId], references: [id], onDelete: Cascade) + issueId String? + comment Comment? @relation(fields: [commentId], references: [id], onDelete: Cascade) + commentId String? + + createdAt DateTime @default(now()) + + @@unique([userId, issueId, emoji]) + @@unique([userId, commentId, emoji]) + @@map('reaction') +} + +/// Polymorphic base. Concrete subtypes are FileAttachment / ImageAttachment / LinkAttachment. +/// Create the concrete models, never `Attachment` directly. +model Attachment with Timestamps { + id String @id @default(cuid()) + kind String // discriminator + + issue Issue @relation(fields: [issueId], references: [id], onDelete: Cascade) + issueId String + uploadedBy User @relation(fields: [uploadedById], references: [id]) + uploadedById String + + + @@delegate(kind) + @@index([issueId]) + @@map('attachment') +} + +model FileAttachment extends Attachment { + fileName String + fileSize Int + mimeType String +} + +model ImageAttachment extends Attachment { + url String + width Int? + height Int? + alt String? +} + +model LinkAttachment extends Attachment { + url String + title String? +} + +model Document with Timestamps { + id String @id @default(cuid()) + title String + + // Rich content stored as typed JSON. + content DocContent? @json + + project Project @relation(fields: [projectId], references: [id], onDelete: Cascade) + projectId String + + author User @relation("DocAuthor", fields: [authorId], references: [id]) + authorId String + + // Self-relation: document tree (folders / nested pages). + parent Document? @relation("DocTree", fields: [parentId], references: [id], onDelete: SetNull) + parentId String? + children Document[] @relation("DocTree") + + // Implicit many-to-many: collaborators. + collaborators User[] @relation("DocCollaborators") + + + @@index([projectId]) + @@map('document') +} + +/// Strongly-typed JSON payload for Document.content. +type DocContent { + format String // e.g. "markdown" | "tiptap" + body String + revision Int @default(1) +} + +// ============================================================================ +// Custom fields, time tracking +// ============================================================================ + +model CustomField with Timestamps { + id String @id @default(cuid()) + name String + type CustomFieldType @default(TEXT) + + organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) + organizationId String + + values CustomFieldValue[] + + + @@unique([organizationId, name]) + @@map('custom_field') +} + +/// Explicit many-to-many join between CustomField and Issue, carrying a value. +model CustomFieldValue { + id String @id @default(cuid()) + value String + + field CustomField @relation(fields: [fieldId], references: [id], onDelete: Cascade) + fieldId String + issue Issue @relation(fields: [issueId], references: [id], onDelete: Cascade) + issueId String + + @@unique([fieldId, issueId]) + @@index([issueId]) + @@map('custom_field_value') +} + +model TimeEntry { + id String @id @default(cuid()) + minutes Int + note String? + spentAt DateTime @default(now()) + + issue Issue @relation(fields: [issueId], references: [id], onDelete: Cascade) + issueId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String + + @@index([issueId]) + @@index([userId]) + @@map('time_entry') +} + +// ============================================================================ +// Automation & integrations +// ============================================================================ + +model Webhook with Timestamps { + id String @id @default(cuid()) + url String + secret String + active Boolean @default(true) + + // The list of subscribed events, stored as typed JSON (SQLite has no scalar lists). + config WebhookConfig @json + + organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) + organizationId String + + + @@index([organizationId]) + @@map('webhook') +} + +/// Strongly-typed JSON payload for Webhook.config. +type WebhookConfig { + events String // comma-separated event names + contentType String @default("application/json") +} + +model Integration with Timestamps { + id String @id @default(cuid()) + provider IntegrationProvider + config IntegrationConfig @json + + organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) + organizationId String + installedBy User @relation(fields: [installedById], references: [id]) + installedById String + + + @@unique([organizationId, provider]) + @@map('integration') +} + +/// Strongly-typed JSON payload for Integration.config. +type IntegrationConfig { + accessToken String + accountName String? + scopes String? +} + +model ApiToken with Timestamps { + id String @id @default(cuid()) + name String + tokenHash String @unique + scopes String // space-separated scopes + lastUsedAt DateTime? + expiresAt DateTime? + + organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) + organizationId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String + + + @@index([organizationId]) + @@map('api_token') +} + +model ActivityLog { + id String @id @default(cuid()) + action String // e.g. "issue.created", "project.archived" + targetType String + targetId String + + organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) + organizationId String + actor User @relation(fields: [actorId], references: [id]) + actorId String + + createdAt DateTime @default(now()) + + @@index([organizationId]) + @@index([actorId]) + @@map('activity_log') +} + +model Notification { + id String @id @default(cuid()) + type NotificationType + message String + read Boolean @default(false) + + recipient User @relation("NotifRecipient", fields: [recipientId], references: [id], onDelete: Cascade) + recipientId String + actor User? @relation("NotifActor", fields: [actorId], references: [id], onDelete: SetNull) + actorId String? + + createdAt DateTime @default(now()) + + @@index([recipientId, read]) + @@map('notification') +} + +// ============================================================================ +// Billing +// ============================================================================ + +model BillingCustomer with Timestamps { + id String @id @default(cuid()) + stripeCustomerId String @unique + email String + + // 1-1 with Organization. + organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) + organizationId String @unique + + + @@map('billing_customer') +} + +model Plan { + id String @id @default(cuid()) + name String + tier PlanTier @unique + priceCents Int @default(0) + seatLimit Int? + + subscriptions Subscription[] + + @@map('plan') +} + +model Subscription with Timestamps { + id String @id @default(cuid()) + status SubscriptionStatus @default(TRIALING) + currentPeriodEnd DateTime? + cancelAtPeriodEnd Boolean @default(false) + + // 1-1 with Organization. + organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade) + organizationId String @unique + + plan Plan @relation(fields: [planId], references: [id]) + planId String + + invoices Invoice[] + + + @@index([planId]) + @@map('subscription') +} + +model Invoice with Timestamps { + id String @id @default(cuid()) + number String @unique + amountCents Int + status InvoiceStatus @default(DRAFT) + issuedAt DateTime @default(now()) + paidAt DateTime? + + subscription Subscription @relation(fields: [subscriptionId], references: [id], onDelete: Cascade) + subscriptionId String + + + @@index([subscriptionId]) + @@map('invoice') +} From dafd7517305b9f0bafd8d7d8b984a0ade456f358 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Mon, 8 Jun 2026 21:28:28 -0700 Subject: [PATCH 2/4] perf(orm): make Options invariant on leaf CRUD arg/filter types too Extends the variance annotations to `ToOneRelationUpdateInput`, `FilterArgs`, `SortAndTakeArgs`, and `ZodSchemaFactory`, whose `Options` parameter was still being measured (the largest remaining variance cost). The client is already invariant in `Options`, so this introduces no new assignability constraints. Annotating `ToOneRelationUpdateInput` also short-circuits measurement of its conditional children (`DisconnectInput`/`NestedDeleteInput`), which can't carry annotations directly. taskforge sample: ~0.95M -> ~0.55M instantiations, ~1.6s -> ~1.0s check time (cumulative from baseline: ~2.78M -> ~0.55M, ~4.4s -> ~1.0s). Validated: all ORM-dependent packages typecheck clean; e2e client-api (618), omit/slicing/computed (74), and type-level (45) suites pass. Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/orm/src/client/crud-types.ts | 10 +++++++--- packages/orm/src/client/zod/factory.ts | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/orm/src/client/crud-types.ts b/packages/orm/src/client/crud-types.ts index 81aea80d5..1d6542a99 100644 --- a/packages/orm/src/client/crud-types.ts +++ b/packages/orm/src/client/crud-types.ts @@ -1453,7 +1453,7 @@ type OppositeRelationAndFK< //#region Find args -type FilterArgs, Options extends QueryOptions> = { +type FilterArgs, in out Options extends QueryOptions> = { /** * Filter conditions */ @@ -1463,7 +1463,7 @@ type FilterArgs, Optio type SortAndTakeArgs< in out Schema extends SchemaDef, in out Model extends GetModels, - Options extends QueryOptions, + in out Options extends QueryOptions, > = { /** * Number of records to skip @@ -2105,11 +2105,15 @@ type ToManyRelationUpdateInput< : 'create' | 'createMany' | 'connectOrCreate' | 'upsert' >; +// Variance-annotated to skip TypeScript's (unreliable, expensive) variance measurement of this +// recursive arg type. Annotating the parent also short-circuits measurement of its conditional +// children (`DisconnectInput`/`NestedDeleteInput`), which can't be annotated directly. `Options` +// is invariant - see the note on `ClientContract`'s `CommonModelOperations`. type ToOneRelationUpdateInput< in out Schema extends SchemaDef, in out Model extends GetModels, in out Field extends RelationFields, - Options extends QueryOptions, + in out Options extends QueryOptions, > = Omit< { /** diff --git a/packages/orm/src/client/zod/factory.ts b/packages/orm/src/client/zod/factory.ts index baf47539b..03abe16cc 100644 --- a/packages/orm/src/client/zod/factory.ts +++ b/packages/orm/src/client/zod/factory.ts @@ -130,7 +130,7 @@ export type CreateSchemaOptions = { */ export class ZodSchemaFactory< in out Schema extends SchemaDef, - Options extends ClientOptions = ClientOptions, + in out Options extends ClientOptions = ClientOptions, ExtQueryArgs extends ExtQueryArgsBase = {}, > { private readonly schemaCache = new Map(); From 47c9d0a355321b87dbce132be12b91f833f94687 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Mon, 8 Jun 2026 21:34:36 -0700 Subject: [PATCH 3/4] fix(orm): project options at the $zod boundary so leaf-type invariance holds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Making `Options` invariant on the leaf arg types (previous commit) regressed client assignability: `ZodSchemaFactory` received the *unprojected* options via `$zod`, so it produced `FilterArgs<…, fullOptions>`, and the invariant `Options` then required the heavy options literal (carrying `dialect`) to match exactly - breaking `ClientContract` -> `ClientContract` (e.g. the taskforge sample's `db: DB`). Fix: pass the client's *query-relevant* (projected) options to `ZodSchemaFactory` via the `$zod` accessor, relax its bound to `QueryOptions`, erase the client `Options` arg in its constructor, and read the runtime-only `plugins` field weakly. Now every path that instantiates the leaf arg types feeds them projected options, so their invariance no longer constrains the options literal. taskforge sample: 0 errors, ~0.55M instantiations, ~1.0s. All ORM-dependent packages typecheck clean; zod/omit/slicing (257) and type-level (45) suites pass. Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/orm/src/client/contract.ts | 2 +- packages/orm/src/client/zod/factory.ts | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/orm/src/client/contract.ts b/packages/orm/src/client/contract.ts index e565ae1f8..7b5541a54 100644 --- a/packages/orm/src/client/contract.ts +++ b/packages/orm/src/client/contract.ts @@ -261,7 +261,7 @@ export type ClientContract< /** * Factory for creating zod schemas to validate query args. */ - get $zod(): ZodSchemaFactory; + get $zod(): ZodSchemaFactory, ExtQueryArgs>; /** * Pushes the schema to the database. For testing purposes only. diff --git a/packages/orm/src/client/zod/factory.ts b/packages/orm/src/client/zod/factory.ts index 03abe16cc..bea3db5ba 100644 --- a/packages/orm/src/client/zod/factory.ts +++ b/packages/orm/src/client/zod/factory.ts @@ -130,7 +130,10 @@ export type CreateSchemaOptions = { */ export class ZodSchemaFactory< in out Schema extends SchemaDef, - in out Options extends ClientOptions = ClientOptions, + // Bounded by `QueryOptions` (not `ClientOptions`): only `omit`/`slicing` shape the schema types. + // The `$zod` accessor passes the client's *projected* (query-relevant) options, so the heavy + // options literal never reaches the (invariant) arg types this factory produces. + in out Options extends QueryOptions = ClientOptions, ExtQueryArgs extends ExtQueryArgsBase = {}, > { private readonly schemaCache = new Map(); @@ -140,7 +143,10 @@ export class ZodSchemaFactory< private readonly options: Options; private readonly extraValidationsEnabled = true; - constructor(client: ClientContract); + // The client's `Options` type arg is intentionally erased here (`any`) - the factory only needs + // the schema and the runtime options object; its own `Options` type param is supplied (projected) + // by the caller (`$zod`). + constructor(client: ClientContract); constructor(schema: Schema, options?: Options); constructor(clientOrSchema: any, options?: Options) { if ('$schema' in clientOrSchema) { @@ -153,7 +159,9 @@ export class ZodSchemaFactory< } private get plugins(): AnyPlugin[] { - return this.options.plugins ?? []; + // `plugins` is a runtime-only field absent from the query-relevant `Options` type; + // read it weakly (the concrete options object always carries it at runtime). + return (this.options as { plugins?: AnyPlugin[] }).plugins ?? []; } /** From 3ec3fcfd38fa9e908435ce474143a8cee2edac4d Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Mon, 8 Jun 2026 21:34:54 -0700 Subject: [PATCH 4/4] chore: update sample readme --- samples/taskforge/README.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/samples/taskforge/README.md b/samples/taskforge/README.md index 374745e9f..92fcffdbc 100644 --- a/samples/taskforge/README.md +++ b/samples/taskforge/README.md @@ -12,12 +12,12 @@ A command-line client for a **team collaboration / project-tracking** platform ## Stack -| Concern | Choice | -| -------------- | ------ | -| ORM / schema | ZenStack v3 (`@zenstackhq/orm`, ZModel schema) | -| Database | SQLite (via `better-sqlite3`) — zero external services | -| Auth | Better-Auth + `@zenstackhq/better-auth` adapter | -| CLI | `commander`, run with `tsx` | +| Concern | Choice | +| ------------ | ------------------------------------------------------ | +| ORM / schema | ZenStack v3 (`@zenstackhq/orm`, ZModel schema) | +| Database | SQLite (via `better-sqlite3`) — zero external services | +| Auth | Better-Auth + `@zenstackhq/better-auth` adapter | +| CLI | `commander`, run with `tsx` | ## Quick start @@ -91,8 +91,7 @@ export const auth = betterAuth({ The `User`, `Session`, `Account` and `Verification` models in `schema.zmodel` are Better-Auth's core schema. Only the configuration is provided — no routes or sign-in UI are mounted — but -`auth.api.signUpEmail(...)` is fully functional (see `pnpm cli signup`). To regenerate the auth -models into the schema from the auth config, run `pnpm auth:generate`. +`auth.api.signUpEmail(...)` is fully functional (see `pnpm cli signup`). ## Notes on SQLite