cvx-kit 0.1.14 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +64 -45
  2. package/dist/querying/cursors.d.mts +5 -0
  3. package/dist/querying/cursors.mjs +1 -1
  4. package/dist/querying/cursors.mjs.map +1 -1
  5. package/dist/querying.d.mts +20 -6
  6. package/dist/querying.mjs +1 -1
  7. package/dist/querying.mjs.map +1 -1
  8. package/dist/relations.mjs +1 -1
  9. package/dist/relations.mjs.map +1 -1
  10. package/dist/zod-table.d.mts +59 -2
  11. package/dist/zod-table.mjs +1 -1
  12. package/dist/zod-table.mjs.map +1 -1
  13. package/package.json +10 -3
  14. package/AGENTS.md +0 -47
  15. package/CHANGELOG.md +0 -324
  16. package/ROADMAP.md +0 -126
  17. package/docs/agent-tools.md +0 -41
  18. package/docs/approvals.md +0 -201
  19. package/docs/architecture.md +0 -124
  20. package/docs/auth.md +0 -443
  21. package/docs/command-context.md +0 -150
  22. package/docs/commands-legacy.md +0 -513
  23. package/docs/commands.md +0 -173
  24. package/docs/conventions.md +0 -345
  25. package/docs/crud.md +0 -66
  26. package/docs/domain-contracts.md +0 -148
  27. package/docs/domain-operations.md +0 -615
  28. package/docs/effect.md +0 -403
  29. package/docs/llms.md +0 -324
  30. package/docs/maintainability.md +0 -124
  31. package/docs/migration.md +0 -351
  32. package/docs/oxlint.md +0 -254
  33. package/docs/querying.md +0 -293
  34. package/docs/tenancy.md +0 -176
  35. package/docs/triggers.md +0 -77
  36. package/docs/upgrading.md +0 -287
  37. package/docs/webhooks.md +0 -58
  38. package/docs/zod-table.md +0 -278
  39. package/scripts/convex-config-bridge.mjs +0 -44
  40. package/scripts/convex-smoke-env.mjs +0 -33
  41. package/scripts/extract-changelog.mjs +0 -29
  42. package/scripts/owned-process.mjs +0 -140
  43. package/scripts/owned-process.test.mjs +0 -107
  44. package/scripts/smoke-packed-components.mjs +0 -341
  45. package/scripts/smoke-packed-effect.mjs +0 -439
  46. package/scripts/smoke-packed-querying.mjs +0 -296
  47. package/scripts/test-packed-auth.mjs +0 -72
  48. package/scripts/test-packed-effect.mjs +0 -482
  49. package/scripts/test-packed-ids.mjs +0 -150
  50. package/scripts/test-packed-oxlint.mjs +0 -167
  51. package/scripts/test-packed-querying.mjs +0 -185
@@ -1 +1 @@
1
- {"version":3,"file":"relations.mjs","names":["fieldBrand","edgeBrand","registries","executorRegistries","refs","throughRefs","edgeRefs","indexExport","z","defineRelations","metadata","ownRefs","fields","one","many","name","table","tables","dto","assertUnchanged","dtoMutationGuard","native","zodToConvex","exported","nativeTableExport","assertNativeValidation","assertStoredDocument","indexes","index","a","b","nativeJson","tableRefs","field","validator","ref","junctionValidator","junction","compatible","result","makeEdge","spec","supplied","declare","declarations","edges","source","edge","base","validatePath","internal","helpers","assertRegistryUnchanged","assertSelection","selection","guardedDto","nativePagination","relationFilterSchema","filterGrammar","paginated","rowSchema","identity","data","canonicalNative","serializeLeg","registry","snapshotMetadata","ownedTables","storedGuards","schemaGuard","schemaMutationGuard","nativeSnapshot","guard","definition","getRelationExecutor","owned","assertSchema","names","scalarFields","grammar","scalarValidator","scalarPredicateSchema","depth","declaration","eligible","row","key","getRelationMetadata","pending","nodes","ancestors","value","prototype","keys","property","leg","own","target","leftDomain","domain","left","right","from","to","requireIndex","relations","mask","relationFields","object","container","child","stored","_id","_creationTime","v","document","objectAccessorSample","builtinObjectGetters","getter","schema","builtinDefaultGetter","builtinPrefaultGetter","fallbackDefinitions","patterns","seen","active","objectFields","visit","boundary","def","descriptor","publicFields","values","i","pattern","node","current","before","GuardedDtoObject","guarded","inst","run","payload","ctx","outputFields","hasNull","idTables","frozenNative","snapshot","next"],"sources":["../src/relations.ts"],"sourcesContent":["import { z } from 'zod'\nimport { zodToConvex, type ConvexValidatorFromZod } from 'convex-helpers/server/zod4'\nimport type { TableDefinition, PaginationResult } from 'convex/server'\nimport {\n\tv,\n\ttype GenericId,\n\ttype GenericValidator,\n\ttype ValidatorJSON,\n\ttype JSONValue,\n} from 'convex/values'\nimport { paginated } from './zod-table'\nimport {\n\tnativePagination,\n\trelationFilterSchema,\n\tscalarPredicateSchema,\n\ttype FieldSchemas,\n\ttype FilterGrammar,\n\ttype PaginationOptionsSchema,\n\ttype ScalarSelection,\n\ttype ScalarPredicate,\n} from './querying/filters'\n\n/** Object table boundaries only. Runtime metadata comes from native validators/export. */\nexport interface RelationTable {\n\ttableName: string\n\tschema: z.ZodObject\n\tpublicDto: z.ZodObject\n\ttable: TableDefinition\n\tdto(includeId: true): z.ZodType\n}\nexport type RelationTables = Record<string, RelationTable>\n/** Internal named declaration dependency; excluded from the supported relations facade. */\nexport interface SelectionMask {\n\t[key: string]: true | SelectionMask\n}\ntype Fields<T extends RelationTable> = T['schema']['shape']\ntype Native<T extends RelationTable, K extends keyof Fields<T>> = ConvexValidatorFromZod<\n\tFields<T>[K],\n\t'required'\n>['type']\nconst fieldBrand: unique symbol = Symbol('relationField')\nconst edgeBrand: unique symbol = Symbol('relationEdge')\ntype Comparable<Value> = Exclude<Value, null | undefined>\ntype Same<A, B> = [Comparable<A> | Comparable<B>] extends [never]\n\t? false\n\t: [Comparable<A>] extends [Comparable<B>]\n\t\t? [Comparable<B>] extends [Comparable<A>]\n\t\t\t? true\n\t\t\t: false\n\t\t: false\n\nexport interface FieldReference<Table extends string, Field extends string, Value> {\n\treadonly [fieldBrand]: Value\n\treadonly table: Table\n\treadonly field: Field\n\tthrough<J extends AnyField>(\n\t\tjunction: J & (Same<Value, J[typeof fieldBrand]> extends true ? {} : never),\n\t): ThroughReference<Table, Field, Value, J>\n}\ntype AnyField = FieldReference<string, string, any>\nexport interface ThroughReference<\n\tTable extends string,\n\tField extends string,\n\tValue,\n\tJunction extends AnyField,\n> {\n\treadonly base: FieldReference<Table, Field, Value>\n\treadonly junction: Junction\n}\ntype AnyThrough = ThroughReference<string, string, any, AnyField>\ntype Leg = AnyField | AnyThrough\ntype Base<L extends Leg> = L extends AnyThrough ? L['base'] : L\ntype JunctionTable<L extends Leg> = L extends AnyThrough ? L['junction']['table'] : never\ntype CompatibleLegs<F extends Leg, T extends Leg> = F extends AnyThrough\n\t? T extends AnyThrough\n\t\t? Same<JunctionTable<F>, JunctionTable<T>> extends true\n\t\t\t? {}\n\t\t\t: never\n\t\t: never\n\t: T extends AnyThrough\n\t\t? never\n\t\t: Same<Base<F>[typeof fieldBrand], Base<T>[typeof fieldBrand]> extends true\n\t\t\t? {}\n\t\t\t: never\n\nexport interface RelationEdge<\n\tSource extends string,\n\tTarget extends string,\n\tCardinality extends 'one' | 'many',\n> {\n\treadonly [edgeBrand]: true\n\treadonly source: Source\n\treadonly target: Target\n\treadonly cardinality: Cardinality\n\treadonly from: Leg\n\treadonly to: Leg\n}\ntype AnyEdge = RelationEdge<string, string, 'one' | 'many'>\ntype FieldReferences<Tables extends RelationTables> = {\n\t[T in keyof Tables]: {\n\t\t[K in Extract<keyof Fields<Tables[T]>, string>]: FieldReference<\n\t\t\tExtract<T, string>,\n\t\t\tK,\n\t\t\tNative<Tables[T], K>\n\t\t>\n\t}\n}\ntype AllReferences<Tables extends RelationTables> = {\n\t[T in keyof Tables]: FieldReferences<Tables>[T][Extract<keyof FieldReferences<Tables>[T], string>]\n}[keyof Tables]\ntype Builders<Tables extends RelationTables, C extends 'one' | 'many'> = {\n\t[T in keyof Tables]: <\n\t\tF extends AllReferences<Tables> | AnyThrough,\n\t\tTo extends\n\t\t\t| FieldReferences<Tables>[T][Extract<keyof FieldReferences<Tables>[T], string>]\n\t\t\t| AnyThrough,\n\t>(\n\t\tspec: { from: F; to: To } & CompatibleLegs<F, To> & (Base<To>['table'] extends T ? {} : never),\n\t) => RelationEdge<Base<F>['table'], Extract<T, string>, C>\n}\nexport type RelationBuilder<Tables extends RelationTables> = FieldReferences<Tables> & {\n\tone: Builders<Tables, 'one'>\n\tmany: Builders<Tables, 'many'>\n}\nexport type RelationDeclarations = Record<string, Record<string, AnyEdge>>\ntype ExactDeclarations<Tables extends RelationTables, D extends RelationDeclarations> = {\n\t[T in keyof D]: T extends keyof Tables\n\t\t? {\n\t\t\t\t[K in keyof D[T]]: K extends\n\t\t\t\t\t| keyof Fields<Tables[T]>\n\t\t\t\t\t| 'and'\n\t\t\t\t\t| 'or'\n\t\t\t\t\t| 'not'\n\t\t\t\t\t| 'fields'\n\t\t\t\t\t| 'then'\n\t\t\t\t\t| '__proto__'\n\t\t\t\t\t| 'constructor'\n\t\t\t\t\t| 'prototype'\n\t\t\t\t\t? never\n\t\t\t\t\t: D[T][K]['source'] extends T\n\t\t\t\t\t\t? D[T][K]\n\t\t\t\t\t\t: never\n\t\t\t}\n\t\t: never\n}\ntype Depth = readonly [1, 1, 1, 1]\ntype Tail<D extends readonly 1[]> = D extends readonly [1, ...infer R extends 1[]] ? R : []\ntype Edges<D, T> = T extends keyof D ? D[T] : {}\ntype Target<E> = E extends AnyEdge ? E['target'] : never\nexport type RelationSelection<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n\tLevel extends readonly 1[] = Depth,\n> = Level extends readonly []\n\t? Record<string, never>\n\t: {\n\t\t\t[K in keyof Edges<D, T>]?:\n\t\t\t\t| true\n\t\t\t\t| RelationSelection<Tables, D, Extract<Target<Edges<D, T>[K]>, keyof Tables>, Tail<Level>>\n\t\t}\nexport type RelationFilterSelection<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n\tLevel extends readonly 1[] = Depth,\n> = ScalarSelection<Fields<Tables[T]>> &\n\t(Level extends readonly []\n\t\t? {}\n\t\t: {\n\t\t\t\t[K in keyof Edges<D, T>]?: RelationFilterSelection<\n\t\t\t\t\tTables,\n\t\t\t\t\tD,\n\t\t\t\t\tExtract<Target<Edges<D, T>[K]>, keyof Tables>,\n\t\t\t\t\tTail<Level>\n\t\t\t\t>\n\t\t\t})\ntype ExactOutputMask<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n\tS,\n\tL extends readonly 1[] = Depth,\n> = S & {\n\t[K in keyof S]: L extends readonly []\n\t\t? never\n\t\t: K extends keyof Edges<D, T>\n\t\t\t? S[K] extends true\n\t\t\t\t? true\n\t\t\t\t: ExactOutputMask<Tables, D, Extract<Target<Edges<D, T>[K]>, keyof Tables>, S[K], Tail<L>>\n\t\t\t: never\n}\ntype ExactFilterMask<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n\tS,\n\tL extends readonly 1[] = Depth,\n> = S & {\n\t[K in keyof S]: K extends keyof ScalarSelection<Fields<Tables[T]>>\n\t\t? S[K] extends true\n\t\t\t? true\n\t\t\t: never\n\t\t: L extends readonly []\n\t\t\t? never\n\t\t\t: K extends keyof Edges<D, T>\n\t\t\t\t? S[K] extends true\n\t\t\t\t\t? never\n\t\t\t\t\t: ExactFilterMask<Tables, D, Extract<Target<Edges<D, T>[K]>, keyof Tables>, S[K], Tail<L>>\n\t\t\t\t: never\n}\ntype ScalarValues<T extends RelationTable, S, Side extends 'input' | 'output'> = {\n\t[K in Extract<keyof S, keyof Fields<T>>]?: ScalarPredicate<Fields<T>[K], Side>\n}\nexport type RelationFilters<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n\tS,\n\tSide extends 'input' | 'output' = 'output',\n\tLevel extends readonly 1[] = Depth,\n> = Omit<ScalarValues<Tables[T], S, Side>, 'and' | 'or' | 'not' | 'fields'> & {\n\tfields?: ScalarValues<Tables[T], S, Side>\n} & (Level extends readonly []\n\t\t? {}\n\t\t: {\n\t\t\t\t[K in Extract<keyof S, keyof Edges<D, T>>]?: Edges<D, T>[K] extends RelationEdge<\n\t\t\t\t\tstring,\n\t\t\t\t\tinfer Target,\n\t\t\t\t\tinfer C\n\t\t\t\t>\n\t\t\t\t\t? C extends 'one'\n\t\t\t\t\t\t? RelationFilters<\n\t\t\t\t\t\t\t\tTables,\n\t\t\t\t\t\t\t\tD,\n\t\t\t\t\t\t\t\tExtract<Target, keyof Tables>,\n\t\t\t\t\t\t\t\tS[K],\n\t\t\t\t\t\t\t\tSide,\n\t\t\t\t\t\t\t\tTail<Level>\n\t\t\t\t\t\t\t> | null\n\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\t\t\tsome: RelationFilters<\n\t\t\t\t\t\t\t\t\t\t\tTables,\n\t\t\t\t\t\t\t\t\t\t\tD,\n\t\t\t\t\t\t\t\t\t\t\tExtract<Target, keyof Tables>,\n\t\t\t\t\t\t\t\t\t\t\tS[K],\n\t\t\t\t\t\t\t\t\t\t\tSide,\n\t\t\t\t\t\t\t\t\t\t\tTail<Level>\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\t\t\tnone: RelationFilters<\n\t\t\t\t\t\t\t\t\t\t\tTables,\n\t\t\t\t\t\t\t\t\t\t\tD,\n\t\t\t\t\t\t\t\t\t\t\tExtract<Target, keyof Tables>,\n\t\t\t\t\t\t\t\t\t\t\tS[K],\n\t\t\t\t\t\t\t\t\t\t\tSide,\n\t\t\t\t\t\t\t\t\t\t\tTail<Level>\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t: never\n\t\t\t} & {\n\t\t\t\tand?: RelationFilters<Tables, D, T, S, Side, Tail<Level>>[]\n\t\t\t\tor?: RelationFilters<Tables, D, T, S, Side, Tail<Level>>[]\n\t\t\t\tnot?: RelationFilters<Tables, D, T, S, Side, Tail<Level>>\n\t\t\t})\ntype PublicRow<T extends RelationTable> = z.output<T['publicDto']> & {\n\t_id: GenericId<T['tableName']>\n}\nexport type RelationRow<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n\tS,\n\tLevel extends readonly 1[] = Depth,\n> = PublicRow<Tables[T]> &\n\t(Level extends readonly []\n\t\t? {}\n\t\t: {\n\t\t\t\t[K in keyof S]: K extends keyof Edges<D, T>\n\t\t\t\t\t? Edges<D, T>[K] extends RelationEdge<string, infer Target, infer C>\n\t\t\t\t\t\t? C extends 'one'\n\t\t\t\t\t\t\t? RelationRow<\n\t\t\t\t\t\t\t\t\tTables,\n\t\t\t\t\t\t\t\t\tD,\n\t\t\t\t\t\t\t\t\tExtract<Target, keyof Tables>,\n\t\t\t\t\t\t\t\t\tS[K] extends true ? {} : S[K],\n\t\t\t\t\t\t\t\t\tTail<Level>\n\t\t\t\t\t\t\t\t> | null\n\t\t\t\t\t\t\t: PaginationResult<\n\t\t\t\t\t\t\t\t\tRelationRow<\n\t\t\t\t\t\t\t\t\t\tTables,\n\t\t\t\t\t\t\t\t\t\tD,\n\t\t\t\t\t\t\t\t\t\tExtract<Target, keyof Tables>,\n\t\t\t\t\t\t\t\t\t\tS[K] extends true ? {} : S[K],\n\t\t\t\t\t\t\t\t\t\tTail<Level>\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t})\nexport interface RelationTableHelpers<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n> {\n\tpaginationOpts<const S extends RelationFilterSelection<Tables, D, T>>(\n\t\tselection: ExactFilterMask<Tables, D, T, S>,\n\t): PaginationOptionsSchema<\n\t\tRelationFilters<Tables, D, T, S>,\n\t\tRelationFilters<Tables, D, T, S, 'input'>\n\t>\n\tpageDto<const S extends RelationSelection<Tables, D, T>>(\n\t\tselection: ExactOutputMask<Tables, D, T, S>,\n\t): z.ZodType<PaginationResult<RelationRow<Tables, D, T, S>>>\n}\nexport interface RelationRegistryIdentity {\n\treadonly identity: string\n\treadonly version: 1\n}\nexport interface RelationRegistry<Tables extends RelationTables, D extends RelationDeclarations> {\n\treadonly identity: string\n\treadonly version: 1\n\treadonly tables: { [T in keyof Tables]: RelationTableHelpers<Tables, D, T> }\n}\n\nexport interface RelationFieldMetadata {\n\treadonly kind: string\n\treadonly optional: boolean\n\treadonly nullable: boolean\n\treadonly idTables: readonly string[]\n\treadonly native: Readonly<ValidatorJSON>\n}\nexport interface RelationTableMetadata {\n\treadonly fields: Readonly<Record<string, RelationFieldMetadata>>\n\treadonly indexes: readonly { readonly name: string; readonly fields: readonly string[] }[]\n}\ninterface TableMetadata {\n\tfields: Record<string, GenericValidator>\n\tindexes: { name: string; fields: string[] }[]\n\tdto: z.ZodObject\n\tassertUnchanged(): void\n}\ninterface RegistryMetadata {\n\tmetadata: Record<string, TableMetadata>\n\tdeclarations: RelationDeclarations\n}\nexport interface RelationMetadata {\n\treadonly tables: Readonly<Record<string, RelationTableMetadata>>\n\treadonly declarations: Readonly<Record<string, Readonly<Record<string, AnyEdge>>>>\n}\n\nconst registries = new WeakMap<RelationRegistryIdentity, RelationMetadata>()\n// Private executor state retains validators and projection, never a database reader.\nconst executorRegistries = new WeakMap<\n\tRelationRegistryIdentity,\n\t{\n\t\tinternal: RegistryMetadata\n\t\ttables: RelationTables\n\t\tassertStoredUnchanged(): void\n\t\tassertNativeTable(table: string, definition: TableDefinition): void\n\t}\n>()\nconst refs = new WeakMap<AnyField, GenericValidator>()\nconst throughRefs = new WeakSet<AnyThrough>()\nconst edgeRefs = new WeakSet<AnyEdge>()\nconst indexExport = z.object({\n\tindexes: z.array(z.object({ indexDescriptor: z.string(), fields: z.array(z.string()) })),\n})\n\n/** No ID-field inference and no readers: this registry owns declarations/schema helpers only. */\nexport function defineRelations<\n\tconst Tables extends RelationTables,\n\tconst D extends RelationDeclarations,\n>(\n\ttables: Tables,\n\tdeclare: (r: RelationBuilder<Tables>) => D & ExactDeclarations<Tables, D>,\n): RelationRegistry<Tables, D> {\n\tconst metadata: Record<string, TableMetadata> = {}\n\tconst ownRefs = new Set<AnyField>()\n\tconst fields: Record<string, Record<string, AnyField>> = {}\n\tconst one: Record<string, (spec: { from: Leg; to: Leg }) => AnyEdge> = {}\n\tconst many: Record<string, (spec: { from: Leg; to: Leg }) => AnyEdge> = {}\n\tfor (const [name, table] of Object.entries(tables)) {\n\t\tif (\n\t\t\ttable.tableName !== name ||\n\t\t\t['one', 'many', '__proto__', 'constructor', 'prototype'].includes(name)\n\t\t)\n\t\t\tthrow new Error(`Invalid relation table \"${name}\"`)\n\t\tconst dto = table.dto(true)\n\t\tif (!(dto instanceof z.ZodObject)) throw new Error('Expected object DTO')\n\t\tconst assertUnchanged = dtoMutationGuard(dto)\n\t\tconst native = zodToConvex(table.schema)\n\t\tconst exported = nativeTableExport(table.table)\n\t\tassertNativeValidation(exported.documentType)\n\t\tassertStoredDocument(name, native.fields, exported.documentType)\n\t\tconst indexes = indexExport\n\t\t\t.parse(exported)\n\t\t\t.indexes.map((index) => ({ name: index.indexDescriptor, fields: [...index.fields] }))\n\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\tassertNativeValidation(nativeJson(zodToConvex(dto)))\n\t\tmetadata[name] = { fields: native.fields, indexes, dto, assertUnchanged }\n\t\tconst tableRefs: Record<string, AnyField> = Object.create(null)\n\t\tfor (const [field, validator] of Object.entries(native.fields)) {\n\t\t\tconst ref: AnyField = {\n\t\t\t\t[fieldBrand]: undefined,\n\t\t\t\ttable: name,\n\t\t\t\tfield,\n\t\t\t\tthrough<J extends AnyField>(\n\t\t\t\t\tjunction: J & (Same<any, J[typeof fieldBrand]> extends true ? {} : never),\n\t\t\t\t): ThroughReference<string, string, any, J> {\n\t\t\t\t\tconst junctionValidator = refs.get(junction)\n\t\t\t\t\tif (\n\t\t\t\t\t\t!ownRefs.has(junction) ||\n\t\t\t\t\t\t!junctionValidator ||\n\t\t\t\t\t\t!compatible(validator, junctionValidator)\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new Error('Invalid junction field or registry')\n\t\t\t\t\tconst result = Object.freeze({ base: ref, junction })\n\t\t\t\t\tthroughRefs.add(result)\n\t\t\t\t\treturn result\n\t\t\t\t},\n\t\t\t}\n\t\t\trefs.set(ref, validator)\n\t\t\townRefs.add(ref)\n\t\t\ttableRefs[field] = Object.freeze(ref)\n\t\t}\n\t\tfields[name] = Object.freeze(tableRefs)\n\t\tone[name] = (spec) => makeEdge(name, 'one', spec, ownRefs)\n\t\tmany[name] = (spec) => makeEdge(name, 'many', spec, ownRefs)\n\t}\n\t// SAFETY: every native field has a branded reference; mapped builders retain the literal names.\n\tconst builder = Object.freeze({\n\t\t...fields,\n\t\tone: Object.freeze(one),\n\t\tmany: Object.freeze(many),\n\t}) as RelationBuilder<Tables>\n\tconst supplied = declare(builder)\n\tconst declarations: RelationDeclarations = Object.fromEntries(\n\t\tObject.entries(supplied).map(([name, edges]) => [name, Object.freeze({ ...edges })]),\n\t)\n\tObject.freeze(declarations)\n\tfor (const [source, edges] of Object.entries(declarations)) {\n\t\tif (!Object.hasOwn(tables, source)) throw new Error(`Unknown source table \"${source}\"`)\n\t\tfor (const [name, edge] of Object.entries(edges)) {\n\t\t\tif (\n\t\t\t\tObject.hasOwn(metadata[source].fields, name) ||\n\t\t\t\t['and', 'or', 'not', 'fields', 'then', '__proto__', 'constructor', 'prototype'].includes(\n\t\t\t\t\tname,\n\t\t\t\t)\n\t\t\t)\n\t\t\t\tthrow new Error(`Relation name collision \"${name}\"`)\n\t\t\tif (\n\t\t\t\t!edgeRefs.has(edge) ||\n\t\t\t\t!ownRefs.has(base(edge.from)) ||\n\t\t\t\t!ownRefs.has(base(edge.to)) ||\n\t\t\t\tedge.source !== source\n\t\t\t)\n\t\t\t\tthrow new Error('Relation source bucket mismatch')\n\t\t\tvalidatePath(edge, metadata)\n\t\t}\n\t}\n\tconst internal: RegistryMetadata = { metadata, declarations }\n\tconst helpers: Record<\n\t\tstring,\n\t\t{\n\t\t\tpaginationOpts(selection: SelectionMask): z.ZodType\n\t\t\tpageDto(selection: SelectionMask): z.ZodType\n\t\t}\n\t> = {}\n\tfor (const table of Object.keys(tables))\n\t\thelpers[table] = {\n\t\t\tpaginationOpts(selection: SelectionMask): z.ZodType {\n\t\t\t\tassertRegistryUnchanged(internal)\n\t\t\t\tassertSelection(selection)\n\t\t\t\treturn guardedDto(\n\t\t\t\t\tnativePagination.extend({\n\t\t\t\t\t\tfilters: relationFilterSchema(filterGrammar(internal, table, selection)).optional(),\n\t\t\t\t\t\torder: z.enum(['asc', 'desc']).optional(),\n\t\t\t\t\t}),\n\t\t\t\t\t() => assertRegistryUnchanged(internal),\n\t\t\t\t)\n\t\t\t},\n\t\t\tpageDto(selection: SelectionMask): z.ZodType {\n\t\t\t\tassertRegistryUnchanged(internal)\n\t\t\t\tassertSelection(selection)\n\t\t\t\treturn guardedDto(paginated(rowSchema(internal, table, selection)).result, () =>\n\t\t\t\t\tassertRegistryUnchanged(internal),\n\t\t\t\t)\n\t\t\t},\n\t\t}\n\t// Stable, collision-free canonical metadata encoding. It is an identity, not a secret/hash.\n\tconst identity = JSON.stringify([\n\t\t1,\n\t\tObject.entries(metadata)\n\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t.map(([name, data]) => [\n\t\t\t\tname,\n\t\t\t\tObject.entries(data.fields)\n\t\t\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t\t\t.map(([field, validator]) => [field, validator.isOptional, nativeJson(validator)]),\n\t\t\t\tdata.indexes,\n\t\t\t\tcanonicalNative(nativeJson(zodToConvex(data.dto))),\n\t\t\t]),\n\t\tObject.entries(declarations)\n\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t.map(([source, edges]) => [\n\t\t\t\tsource,\n\t\t\t\tObject.entries(edges)\n\t\t\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t\t\t.map(([name, edge]) => [\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tedge.cardinality,\n\t\t\t\t\t\tedge.target,\n\t\t\t\t\t\tserializeLeg(edge.from),\n\t\t\t\t\t\tserializeLeg(edge.to),\n\t\t\t\t\t]),\n\t\t\t]),\n\t])\n\t// SAFETY: helpers are assembled for every validated literal table and mask; schemas derive matching native fields/public DTOs.\n\tconst registry = Object.freeze({\n\t\tidentity,\n\t\tversion: 1,\n\t\ttables: Object.freeze(helpers),\n\t}) as RelationRegistry<Tables, D>\n\tregistries.set(registry, snapshotMetadata(internal))\n\tconst ownedTables = Object.freeze({ ...tables })\n\tconst storedGuards = Object.fromEntries(\n\t\tObject.entries(ownedTables).map(([name, table]) => {\n\t\t\tconst schemaGuard = schemaMutationGuard(table.schema, 'stored')\n\t\t\tconst nativeSnapshot = JSON.stringify(nativeTableExport(table.table))\n\t\t\treturn [\n\t\t\t\tname,\n\t\t\t\t() => {\n\t\t\t\t\tschemaGuard()\n\t\t\t\t\tif (JSON.stringify(nativeTableExport(table.table)) !== nativeSnapshot)\n\t\t\t\t\t\tthrow new Error(`Native schema mutated after registry construction: ${name}`)\n\t\t\t\t},\n\t\t\t]\n\t\t}),\n\t)\n\texecutorRegistries.set(registry, {\n\t\tinternal,\n\t\ttables: ownedTables,\n\t\tassertStoredUnchanged: () => {\n\t\t\tfor (const guard of Object.values(storedGuards)) guard()\n\t\t},\n\t\tassertNativeTable(table, definition) {\n\t\t\tif (!Object.hasOwn(ownedTables, table) || ownedTables[table].table !== definition)\n\t\t\t\tthrow new Error('Native schema/table ownership disagrees with relation registry')\n\t\t\tstoredGuards[table]()\n\t\t},\n\t})\n\treturn registry\n}\n\n/** Internal owned executor bridge. Not an advertised root API. Every operation\n * rechecks the live registry, including cached plans and individual projections.\n */\nexport function getRelationExecutor(registry: RelationRegistryIdentity) {\n\tconst owned = executorRegistries.get(registry)\n\tif (!owned) throw new Error('Unknown relation registry')\n\tconst assertUnchanged = () => {\n\t\tassertRegistryUnchanged(owned.internal)\n\t\towned.assertStoredUnchanged()\n\t}\n\tconst assertSchema = (tables: Readonly<Record<string, TableDefinition>>) => {\n\t\tassertUnchanged()\n\t\tconst names = Object.keys(owned.tables)\n\t\tif (\n\t\t\tnames.length !== Object.keys(tables).length ||\n\t\t\tnames.some((name) => tables[name] !== owned.tables[name].table)\n\t\t)\n\t\t\tthrow new Error('Native schema/table ownership disagrees with relation registry')\n\t}\n\tassertUnchanged()\n\treturn Object.freeze({\n\t\tassertUnchanged,\n\t\tassertNativeTable: owned.assertNativeTable,\n\t\tassertSchema,\n\t\tpagination(table: string) {\n\t\t\tassertUnchanged()\n\t\t\tconst internal = owned.internal\n\t\t\tconst scalarFields = new Map<string, FieldSchemas>()\n\t\t\tfunction grammar(name: string, depth: number): FilterGrammar {\n\t\t\t\tconst data = internal.metadata[name]\n\t\t\t\tif (!data) throw new Error('Unknown query table')\n\t\t\t\tlet fields = scalarFields.get(name)\n\t\t\t\tif (!fields) {\n\t\t\t\t\tfields = {}\n\t\t\t\t\tfor (const [name, validator] of Object.entries(data.fields)) {\n\t\t\t\t\t\t// Unsupported stored containers are not scalar-queryable. No validators\n\t\t\t\t\t\t// are reconstructed from JSON; these are the actual native validators.\n\t\t\t\t\t\tif (scalarValidator(validator))\n\t\t\t\t\t\t\tfields[name] = scalarPredicateSchema(validator).optional()\n\t\t\t\t\t}\n\t\t\t\t\tscalarFields.set(name, fields)\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tfields,\n\t\t\t\t\trelations:\n\t\t\t\t\t\tdepth >= 4\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\t\t\t\tObject.entries(internal.declarations[name] ?? {}).map(([edge, declaration]) => [\n\t\t\t\t\t\t\t\t\t\tedge,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcardinality: declaration.cardinality,\n\t\t\t\t\t\t\t\t\t\t\ttarget: grammar(declaration.target, depth + 1),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nativePagination.extend({\n\t\t\t\tfilters: relationFilterSchema(grammar(table, 0)).optional(),\n\t\t\t\torder: z.enum(['asc', 'desc']).optional(),\n\t\t\t})\n\t\t},\n\t\tpage(table: string, selection: SelectionMask) {\n\t\t\tassertUnchanged()\n\t\t\tassertSelection(selection)\n\t\t\treturn paginated(rowSchema(owned.internal, table, selection)).result\n\t\t},\n\t\tproject(\n\t\t\ttables: Readonly<Record<string, TableDefinition>>,\n\t\t\ttable: string,\n\t\t\trow: Record<string, import('convex/values').Value>,\n\t\t\teligible: () => boolean,\n\t\t) {\n\t\t\tassertSchema(tables)\n\t\t\tif (!eligible()) return null\n\t\t\tconst dto = owned.internal.metadata[table]?.dto\n\t\t\tif (!dto) throw new Error('Unknown query table')\n\t\t\t// The strict DTO remains the authority. Pick its fields before parsing,\n\t\t\t// matching table projection without spreading any storage-only fields.\n\t\t\treturn dto.parse(\n\t\t\t\tObject.fromEntries(\n\t\t\t\t\tObject.keys(dto.shape)\n\t\t\t\t\t\t.filter((key) => Object.hasOwn(row, key))\n\t\t\t\t\t\t.map((key) => [key, row[key]]),\n\t\t\t\t),\n\t\t\t)\n\t\t},\n\t})\n}\n/** Internal compiler/engine adapter. Registry identity alone cannot forge a registry. */\nexport function getRelationMetadata(registry: RelationRegistryIdentity): RelationMetadata {\n\tconst metadata = registries.get(registry)\n\tif (!metadata) throw new Error('Unknown relation registry')\n\treturn metadata\n}\n\nfunction scalarValidator(validator: GenericValidator): boolean {\n\treturn (\n\t\t['id', 'string', 'float64', 'int64', 'boolean', 'null', 'literal'].includes(validator.kind) ||\n\t\t(validator.kind === 'union' && validator.members.every(scalarValidator))\n\t)\n}\n\nfunction assertSelection(selection: SelectionMask): void {\n\tconst pending: { value: SelectionMask; depth: number; ancestors: readonly SelectionMask[] }[] = [\n\t\t{ value: selection, depth: 0, ancestors: [] },\n\t]\n\tlet nodes = 0\n\twhile (pending.length) {\n\t\tconst { value, depth, ancestors } = pending.pop()!\n\t\tif (++nodes > 256 || depth > 4 || ancestors.includes(value))\n\t\t\tthrow new Error('Selection cycle or depth/node budget exceeded')\n\t\tconst prototype = Object.getPrototypeOf(value)\n\t\tif (prototype !== Object.prototype && prototype !== null) throw new Error('Invalid selection')\n\t\tconst keys = Reflect.ownKeys(value)\n\t\tif (keys.length + nodes + pending.length > 256)\n\t\t\tthrow new Error('Selection node budget exceeded')\n\t\tfor (const key of keys) {\n\t\t\tconst property = Object.getOwnPropertyDescriptor(value, key)!\n\t\t\tif (!property.enumerable || !('value' in property) || String(key) !== key)\n\t\t\t\tthrow new Error('Invalid selection property')\n\t\t\tif (property.value !== true)\n\t\t\t\tpending.push({ value: property.value, depth: depth + 1, ancestors: [...ancestors, value] })\n\t\t\telse if (++nodes > 256) throw new Error('Selection node budget exceeded')\n\t\t}\n\t}\n}\nfunction base(leg: Leg): AnyField {\n\treturn 'base' in leg ? leg.base : leg\n}\nfunction makeEdge(\n\ttarget: string,\n\tcardinality: 'one' | 'many',\n\tspec: { from: Leg; to: Leg },\n\town: Set<AnyField>,\n): AnyEdge {\n\tfor (const leg of [spec.from, spec.to]) {\n\t\tif (!own.has(base(leg)) || ('base' in leg && (!throughRefs.has(leg) || !own.has(leg.junction))))\n\t\t\tthrow new Error('Foreign registry or invalid field reference')\n\t}\n\tif (base(spec.to).table !== target) throw new Error('Wrong relation target table')\n\tconst result: AnyEdge = Object.freeze({\n\t\t[edgeBrand]: true as const,\n\t\tsource: base(spec.from).table,\n\t\ttarget,\n\t\tcardinality,\n\t\tfrom: spec.from,\n\t\tto: spec.to,\n\t})\n\tedgeRefs.add(result)\n\treturn result\n}\nfunction compatible(left: GenericValidator, right: GenericValidator): boolean {\n\tconst leftDomain = domain(left)\n\treturn leftDomain.length > 0 && JSON.stringify(leftDomain) === JSON.stringify(domain(right))\n}\nfunction domain(validator: GenericValidator): string[] {\n\tif (validator.kind === 'union') return [...new Set(validator.members.flatMap(domain))].sort()\n\tif (validator.kind === 'null') return []\n\tif (!['id', 'string', 'float64', 'int64', 'boolean', 'literal'].includes(validator.kind))\n\t\tthrow new Error('Unsupported relation field kind')\n\treturn [JSON.stringify(nativeJson(validator))]\n}\nfunction validatePath(edge: AnyEdge, metadata: Record<string, TableMetadata>): void {\n\tconst from = edge.from\n\tconst to = edge.to\n\tif ('base' in from !== 'base' in to) throw new Error('Both relation legs must use through')\n\tif ('base' in from && 'base' in to) {\n\t\tif (from.junction.table !== to.junction.table) throw new Error('Different junction tables')\n\t\trequireIndex(metadata, from.junction.table, from.junction.field)\n\t\trequireIndex(metadata, edge.target, to.base.field)\n\t\treturn\n\t}\n\tif (!compatible(refs.get(base(from))!, refs.get(base(to))!))\n\t\tthrow new Error('Incompatible relation field types')\n\trequireIndex(metadata, edge.target, base(to).field)\n}\nfunction requireIndex(metadata: Record<string, TableMetadata>, table: string, field: string): void {\n\tif (field !== '_id' && !metadata[table].indexes.some((index) => index.fields[0] === field))\n\t\tthrow new Error(`No active index begins with \"${table}.${field}\"`)\n}\nfunction serializeLeg(leg: Leg): string[] {\n\treturn 'base' in leg\n\t\t? [leg.base.table, leg.base.field, leg.junction.table, leg.junction.field]\n\t\t: [leg.table, leg.field]\n}\nfunction filterGrammar(\n\tregistry: RegistryMetadata,\n\ttable: string,\n\tselection: SelectionMask,\n\tdepth: number = 0,\n): FilterGrammar {\n\tconst fields: FieldSchemas = {}\n\tconst relations: FilterGrammar['relations'] = {}\n\tfor (const [key, mask] of Object.entries(selection)) {\n\t\tconst validator = registry.metadata[table].fields[key]\n\t\tconst edge = registry.declarations[table]?.[key]\n\t\tif (mask === true && validator) fields[key] = scalarPredicateSchema(validator).optional()\n\t\telse if (mask !== true && edge && depth < 4)\n\t\t\trelations[key] = {\n\t\t\t\tcardinality: edge.cardinality,\n\t\t\t\ttarget: filterGrammar(registry, edge.target, mask, depth + 1),\n\t\t\t}\n\t\telse throw new Error(`Invalid relation filter selection \"${table}.${key}\"`)\n\t}\n\treturn { fields, relations }\n}\nfunction rowSchema(\n\tregistry: RegistryMetadata,\n\ttable: string,\n\tselection: SelectionMask,\n\tdepth: number = 0,\n): z.ZodType {\n\tconst relationFields: FieldSchemas = {}\n\tfor (const [name, mask] of Object.entries(selection)) {\n\t\tconst edge = registry.declarations[table]?.[name]\n\t\tif (!edge || depth >= 4) throw new Error(`Unknown or too deep relation \"${table}.${name}\"`)\n\t\tconst target =\n\t\t\tmask === true\n\t\t\t\t? registry.metadata[edge.target].dto\n\t\t\t\t: rowSchema(registry, edge.target, mask, depth + 1)\n\t\trelationFields[name] = edge.cardinality === 'one' ? target.nullable() : paginated(target).result\n\t}\n\t// Keep caller validations; guard the supported graph before parsing or native conversion.\n\tconst dto = registry.metadata[table].dto\n\tif (!(dto instanceof z.ZodObject)) throw new Error('Expected object DTO')\n\treturn guardedDto(dto.extend(relationFields).strict(), () => assertRegistryUnchanged(registry))\n}\n\ninterface NativeTableExport {\n\tindexes: { indexDescriptor: string; fields: string[] }[]\n\tdocumentType: ValidatorJSON\n}\nfunction nativeTableExport(table: TableDefinition): NativeTableExport {\n\t// SAFETY: Convex exposes export at runtime but strips its internal signature from declarations.\n\treturn (table as TableDefinition & { export(): NativeTableExport }).export()\n}\nfunction nativeJson(validator: GenericValidator): ValidatorJSON {\n\t// SAFETY: native validators expose converter metadata at runtime; Convex strips json from declarations.\n\treturn (validator as GenericValidator & { json: ValidatorJSON }).json\n}\n\nfunction canonicalNative(value: JSONValue): string {\n\tif (Array.isArray(value)) return `[${value.map(canonicalNative).join(',')}]`\n\tif (value !== null && Object(value) === value) {\n\t\t// SAFETY: native JSON contains only JSON objects, arrays and primitives.\n\t\tconst object = value as { [key: string]: JSONValue }\n\t\treturn `{${Object.keys(object)\n\t\t\t.sort()\n\t\t\t.map((key) => `${JSON.stringify(key)}:${canonicalNative(object[key])}`)\n\t\t\t.join(',')}}`\n\t}\n\treturn JSON.stringify(value)\n}\n\nfunction assertNativeValidation(value: JSONValue): void {\n\tif (value === null || Object(value) !== value) return\n\t// SAFETY: native converter metadata contains only JSON containers and primitives.\n\tconst container = value as { [key: string]: JSONValue }\n\tif (container.type === 'any') throw new Error('Unsupported native validation form')\n\tfor (const child of Object.values(container)) assertNativeValidation(child)\n}\n\nfunction assertStoredDocument(\n\ttable: string,\n\tfields: Record<string, GenericValidator>,\n\tdocument: ValidatorJSON,\n): void {\n\tconst { _id, _creationTime, ...stored } = fields\n\tif (\n\t\t!_id ||\n\t\t!_creationTime ||\n\t\tcanonicalNative(nativeJson(_id)) !== canonicalNative(nativeJson(v.id(table))) ||\n\t\tcanonicalNative(nativeJson(_creationTime)) !== canonicalNative(nativeJson(v.number())) ||\n\t\t_id.isOptional !== 'required' ||\n\t\t_creationTime.isOptional !== 'required' ||\n\t\tcanonicalNative(document) !== canonicalNative(nativeJson(v.object(stored)))\n\t)\n\t\tthrow new Error(`Native stored document disagrees with boundary \"${table}\"`)\n}\n\ninterface DtoGraphNode {\n\tobject: object\n\texactKeys: boolean\n\tkeys: readonly PropertyKey[]\n\tvalues: readonly PropertyDescriptor[]\n}\n\n// Compare against this peer's own built-in accessor, using the intrinsic rather\n// than a caller-provided toString. Older Zod clones retain this accessor even\n// after reading shape, because it caches on the original definition.\nconst objectAccessorSample = z.object({ field: z.string() })\nconst builtinObjectGetters = new Set(\n\t[\n\t\tobjectAccessorSample,\n\t\tobjectAccessorSample.pick({ field: true }),\n\t\tobjectAccessorSample.omit({ field: true }),\n\t\tobjectAccessorSample.extend({ other: z.string() }),\n\t\tobjectAccessorSample.safeExtend({ other: z.string() }),\n\t\tobjectAccessorSample.merge(z.object({ other: z.string() })),\n\t\tobjectAccessorSample.partial(),\n\t\tobjectAccessorSample.required(),\n\t].flatMap((schema) => {\n\t\tconst getter = Object.getOwnPropertyDescriptor(schema._zod.def, 'shape')?.get\n\t\treturn getter ? [Function.prototype.toString.call(getter)] : []\n\t}),\n)\n\n/** Snapshot supported value-validation definitions, not Zod's mutable parse caches.\n * Functions remain the original validation functions; their captured application state\n * is outside the schema contract. Lazy/transform/default/coercion nodes fail closed.\n */\nfunction dtoMutationGuard(dto: z.ZodObject): () => void {\n\treturn schemaMutationGuard(dto, 'dto')\n}\n\n// Stored schemas already passed the native input boundary. Track their graph\n// independently of public DTO admissibility, without running any stored parser.\nconst builtinDefaultGetter = Function.prototype.toString.call(\n\tObject.getOwnPropertyDescriptor(z.string().default('')._zod.def, 'defaultValue')!.get!,\n)\nconst builtinPrefaultGetter = Function.prototype.toString.call(\n\tObject.getOwnPropertyDescriptor(z.string().prefault('')._zod.def, 'defaultValue')!.get!,\n)\n\nfunction schemaMutationGuard(dto: z.ZodObject, boundary: 'dto' | 'stored'): () => void {\n\tconst nodes: DtoGraphNode[] = []\n\tconst fallbackDefinitions = new Set<object>()\n\tconst patterns: { expression: RegExp; source: string; flags: string }[] = []\n\tconst seen = new Set<object>()\n\tconst active = new Set<object>()\n\tconst objectFields: {\n\t\tdefinition: z.core.$ZodObjectDef\n\t\tfields: Record<string, z.core.$ZodType>\n\t}[] = []\n\tfunction visit(value: DtoGraphNode['object'], depth: number): void {\n\t\tif (active.has(value)) throw new Error('Unsupported cyclic DTO schema')\n\t\tif (seen.has(value)) return\n\t\tif (depth > 32 || nodes.length >= 4096) throw new Error('DTO schema graph budget exceeded')\n\t\tseen.add(value)\n\t\tactive.add(value)\n\t\ttry {\n\t\t\tif (value instanceof RegExp)\n\t\t\t\tpatterns.push({ expression: value, source: value.source, flags: value.flags })\n\t\t\tif (value instanceof z.core.$ZodCheck && 'check' in value._zod.def) {\n\t\t\t\tif (boundary === 'dto' && value._zod.def.check === 'overwrite')\n\t\t\t\t\tthrow new Error('Unsupported DTO overwrite check')\n\t\t\t\tvisit(value._zod.def, depth + 1)\n\t\t\t\tnodes.push({\n\t\t\t\t\tobject: value._zod,\n\t\t\t\t\texactKeys: false,\n\t\t\t\t\tkeys: ['def', 'check'],\n\t\t\t\t\tvalues: ['def', 'check'].map((key) => Object.getOwnPropertyDescriptor(value._zod, key)!),\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (value instanceof z.core.$ZodType) {\n\t\t\t\t// SAFETY: built-in Zod definitions form a discriminated union.\n\t\t\t\tconst def = (value as z.core.$ZodTypes)._zod.def\n\t\t\t\tif (\n\t\t\t\t\tboundary === 'dto' &&\n\t\t\t\t\t(![\n\t\t\t\t\t\t'object',\n\t\t\t\t\t\t'array',\n\t\t\t\t\t\t'optional',\n\t\t\t\t\t\t'nullable',\n\t\t\t\t\t\t'nonoptional',\n\t\t\t\t\t\t'union',\n\t\t\t\t\t\t'intersection',\n\t\t\t\t\t\t'tuple',\n\t\t\t\t\t\t'record',\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'number',\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'bigint',\n\t\t\t\t\t\t'null',\n\t\t\t\t\t\t'never',\n\t\t\t\t\t\t'literal',\n\t\t\t\t\t\t'enum',\n\t\t\t\t\t].includes(def.type) ||\n\t\t\t\t\t\t('coerce' in def && def.coerce))\n\t\t\t\t)\n\t\t\t\t\tthrow new Error(`Unsupported DTO schema \"${def.type}\"`)\n\t\t\t\tif (boundary === 'stored' && (def.type === 'default' || def.type === 'prefault')) {\n\t\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(def, 'defaultValue')\n\t\t\t\t\tif (descriptor?.get) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdescriptor.set ||\n\t\t\t\t\t\t\tFunction.prototype.toString.call(descriptor.get) !==\n\t\t\t\t\t\t\t\t(def.type === 'default' ? builtinDefaultGetter : builtinPrefaultGetter)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\tthrow new Error('Unsupported stored schema accessor')\n\t\t\t\t\t\t// Snapshot the accessor identity below, never evaluate its fallback.\n\t\t\t\t\t\tfallbackDefinitions.add(def)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (def.type === 'object') {\n\t\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(def, 'shape')\n\t\t\t\t\tif (descriptor?.get) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdescriptor.set ||\n\t\t\t\t\t\t\t!builtinObjectGetters.has(Function.prototype.toString.call(descriptor.get))\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\tthrow new Error('Unsupported DTO schema accessor')\n\t\t\t\t\t\tconst fields = def.shape\n\t\t\t\t\t\tvisit(fields, depth + 1)\n\t\t\t\t\t\t// A refined clone's getter can return fresh shallow copies.\n\t\t\t\t\t\t// Preserve that caller behavior and compare its fields separately.\n\t\t\t\t\t\tif (Object.getOwnPropertyDescriptor(def, 'shape')?.get)\n\t\t\t\t\t\t\tobjectFields.push({ definition: def, fields })\n\t\t\t\t\t}\n\t\t\t\t\tif (value instanceof z.ZodObject) {\n\t\t\t\t\t\tconst publicFields = Object.getOwnPropertyDescriptor(value, 'shape')\n\t\t\t\t\t\tif (publicFields && !('value' in publicFields))\n\t\t\t\t\t\t\tthrow new Error('Unsupported DTO schema accessor')\n\t\t\t\t\t\tvisit(value.shape, depth + 1)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvisit(def, depth + 1)\n\t\t\t\t// Track definition replacement, without snapshotting caches initialized by parsing.\n\t\t\t\tnodes.push({\n\t\t\t\t\tobject: value._zod,\n\t\t\t\t\texactKeys: false,\n\t\t\t\t\tkeys: ['def'],\n\t\t\t\t\tvalues: [Object.getOwnPropertyDescriptor(value._zod, 'def')!],\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst keys = Reflect.ownKeys(value)\n\t\t\tconst values = keys.map((key) => Object.getOwnPropertyDescriptor(value, key)!)\n\t\t\tif (\n\t\t\t\tvalues.some(\n\t\t\t\t\t(property, i) =>\n\t\t\t\t\t\t!('value' in property) &&\n\t\t\t\t\t\t!objectFields.some(({ definition }) => definition === value && keys[i] === 'shape') &&\n\t\t\t\t\t\t!(fallbackDefinitions.has(value) && keys[i] === 'defaultValue'),\n\t\t\t\t)\n\t\t\t)\n\t\t\t\tthrow new Error('Unsupported DTO schema accessor')\n\t\t\tnodes.push({ object: value, exactKeys: true, keys, values })\n\t\t\tfor (const property of values) {\n\t\t\t\tif (\n\t\t\t\t\tproperty.value !== null &&\n\t\t\t\t\tObject(property.value) === property.value &&\n\t\t\t\t\t!(property.value instanceof Function)\n\t\t\t\t)\n\t\t\t\t\tvisit(property.value, depth + 1)\n\t\t\t}\n\t\t} finally {\n\t\t\tactive.delete(value)\n\t\t}\n\t}\n\tvisit(dto, 0)\n\treturn () => {\n\t\tfor (const pattern of patterns)\n\t\t\tif (\n\t\t\t\tpattern.expression.source !== pattern.source ||\n\t\t\t\tpattern.expression.flags !== pattern.flags\n\t\t\t)\n\t\t\t\tthrow new Error('DTO schema mutated after registry construction')\n\t\tfor (const node of nodes) {\n\t\t\tconst keys = node.keys\n\t\t\tif (node.exactKeys && Reflect.ownKeys(node.object).length !== keys.length)\n\t\t\t\tthrow new Error('DTO schema mutated after registry construction')\n\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\t// Regex checks may update lastIndex while parsing; pattern identity is checked above.\n\t\t\t\tif (node.object instanceof RegExp && keys[i] === 'lastIndex') continue\n\t\t\t\tconst current = Object.getOwnPropertyDescriptor(node.object, keys[i])\n\t\t\t\tconst before = node.values[i]\n\t\t\t\tif (\n\t\t\t\t\t!current ||\n\t\t\t\t\tcurrent.value !== before.value ||\n\t\t\t\t\tcurrent.get !== before.get ||\n\t\t\t\t\tcurrent.set !== before.set ||\n\t\t\t\t\tcurrent.enumerable !== before.enumerable\n\t\t\t\t)\n\t\t\t\t\tthrow new Error('DTO schema mutated after registry construction')\n\t\t\t}\n\t\t}\n\t\tfor (const { definition, fields } of objectFields) {\n\t\t\tconst current = definition.shape\n\t\t\tconst keys = Reflect.ownKeys(fields)\n\t\t\tif (\n\t\t\t\tReflect.ownKeys(current).length !== keys.length ||\n\t\t\t\tkeys.some(\n\t\t\t\t\t(key) =>\n\t\t\t\t\t\tObject.getOwnPropertyDescriptor(current, key)?.value !==\n\t\t\t\t\t\tObject.getOwnPropertyDescriptor(fields, key)?.value,\n\t\t\t\t)\n\t\t\t)\n\t\t\t\tthrow new Error('DTO schema mutated after registry construction')\n\t\t}\n\t}\n}\n\nfunction assertRegistryUnchanged(registry: RegistryMetadata): void {\n\tfor (const table of Object.values(registry.metadata)) table.assertUnchanged()\n}\n\ninterface GuardedDtoDefinition extends z.core.$ZodObjectDef {\n\tassertUnchanged(): void\n}\nconst GuardedDtoObject = z.core.$constructor<z.ZodObject>('GuardedDtoObject', (inst, def) => {\n\t// SAFETY: only guardedDto creates this definition; Zod clones retain its guard.\n\tconst guarded = def as GuardedDtoDefinition\n\tz.ZodObject.init(inst, def)\n\t// Run after Zod's own deferred initializers, including its memoizer wrapper.\n\t// Guarding parse alone is too late for first-run schema introspection.\n\tinst._zod.deferred ??= []\n\tinst._zod.deferred.push(() => {\n\t\tconst run = inst._zod.run\n\t\tinst._zod.run = (payload, ctx) => {\n\t\t\ttry {\n\t\t\t\tguarded.assertUnchanged()\n\t\t\t} catch {\n\t\t\t\tpayload.issues.push({\n\t\t\t\t\tcode: 'custom',\n\t\t\t\t\tinput: payload.value,\n\t\t\t\t\tmessage: 'DTO schema mutated after registry construction',\n\t\t\t\t})\n\t\t\t\treturn payload\n\t\t\t}\n\t\t\treturn run(payload, ctx)\n\t\t}\n\t})\n})\nfunction guardedDto(dto: z.ZodObject, assertUnchanged: () => void): z.ZodObject {\n\tconst outputFields = dto.shape\n\tconst def: GuardedDtoDefinition = { ...dto._zod.def, assertUnchanged }\n\tObject.defineProperty(def, 'shape', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget: () => {\n\t\t\tassertUnchanged()\n\t\t\treturn outputFields\n\t\t},\n\t})\n\treturn new GuardedDtoObject(def)\n}\n\nfunction snapshotMetadata(registry: RegistryMetadata): RelationMetadata {\n\tconst tables: Record<string, RelationTableMetadata> = {}\n\tfor (const [name, data] of Object.entries(registry.metadata)) {\n\t\tconst fields: Record<string, RelationFieldMetadata> = {}\n\t\tfor (const [field, validator] of Object.entries(data.fields))\n\t\t\tfields[field] = Object.freeze({\n\t\t\t\tkind: validator.kind,\n\t\t\t\toptional: validator.isOptional === 'optional',\n\t\t\t\tnullable: hasNull(validator),\n\t\t\t\tidTables: Object.freeze(idTables(validator)),\n\t\t\t\tnative: frozenNative(nativeJson(validator)),\n\t\t\t})\n\t\ttables[name] = Object.freeze({\n\t\t\tfields: Object.freeze(fields),\n\t\t\tindexes: Object.freeze(\n\t\t\t\tdata.indexes.map((index) =>\n\t\t\t\t\tObject.freeze({ name: index.name, fields: Object.freeze([...index.fields]) }),\n\t\t\t\t),\n\t\t\t),\n\t\t})\n\t}\n\treturn Object.freeze({ tables: Object.freeze(tables), declarations: registry.declarations })\n}\nfunction hasNull(validator: GenericValidator): boolean {\n\treturn (\n\t\tvalidator.kind === 'null' || (validator.kind === 'union' && validator.members.some(hasNull))\n\t)\n}\nfunction idTables(validator: GenericValidator): string[] {\n\treturn validator.kind === 'id'\n\t\t? [validator.tableName]\n\t\t: validator.kind === 'union'\n\t\t\t? [...new Set(validator.members.flatMap(idTables))].sort()\n\t\t\t: []\n}\nfunction frozenNative(native: ValidatorJSON): Readonly<ValidatorJSON> {\n\tconst snapshot = structuredClone(native)\n\tconst pending: JSONValue[] = [snapshot]\n\twhile (pending.length) {\n\t\tconst next = pending.pop()!\n\t\tif (Object(next) !== next) continue\n\t\t// SAFETY: native JSON metadata contains ordinary arrays/objects; the boxing test excludes primitives.\n\t\tconst container = next as JSONValue[] | { [key: string]: JSONValue }\n\t\tObject.freeze(container)\n\t\tpending.push(...Object.values(container))\n\t}\n\treturn snapshot\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"relations.mjs","names":["fieldBrand","edgeBrand","registries","executorRegistries","refs","throughRefs","edgeRefs","indexExport","z","defineRelations","metadata","ownRefs","fields","one","many","name","table","tables","dto","assertUnchanged","dtoMutationGuard","native","zodToConvex","exported","nativeTableExport","assertNativeValidation","assertStoredDocument","indexes","index","a","b","nativeJson","tableRefs","field","validator","ref","junctionValidator","junction","compatible","result","makeEdge","spec","supplied","declare","declarations","edges","source","edge","base","validatePath","internal","helpers","assertRegistryUnchanged","assertSelection","selection","guardedDto","nativePagination","relationFilterSchema","filterGrammar","paginated","rowSchema","identity","data","canonicalNative","serializeLeg","registry","snapshotMetadata","ownedTables","storedGuards","schemaGuard","schemaMutationGuard","nativeSnapshot","guard","definition","getRelationExecutor","owned","assertSchema","names","scalarFields","grammar","scalarValidator","scalarPredicateSchema","depth","declaration","eligible","row","key","getRelationMetadata","pending","nodes","ancestors","value","prototype","keys","property","leg","own","target","leftDomain","domain","left","right","from","to","requireIndex","relations","mask","relationFields","object","container","child","stored","_id","_creationTime","v","document","objectAccessorSample","builtinObjectGetters","getter","schema","builtinDefaultGetter","builtinPrefaultGetter","fallbackDefinitions","patterns","seen","active","objectFields","visit","boundary","def","descriptor","publicFields","values","i","pattern","node","current","before","GuardedDtoObject","guarded","inst","run","payload","ctx","outputFields","hasNull","idTables","frozenNative","snapshot","next"],"sources":["../src/relations.ts"],"sourcesContent":["import { z } from 'zod'\nimport { zodToConvex, type ConvexValidatorFromZod } from 'convex-helpers/server/zod4'\nimport type { TableDefinition, PaginationResult } from 'convex/server'\nimport {\n\tv,\n\ttype GenericId,\n\ttype GenericValidator,\n\ttype ValidatorJSON,\n\ttype JSONValue,\n} from 'convex/values'\nimport { paginated } from './zod-table'\nimport {\n\tnativePagination,\n\trelationFilterSchema,\n\tscalarPredicateSchema,\n\ttype FieldSchemas,\n\ttype FilterGrammar,\n\ttype PaginationOptionsSchema,\n\ttype ScalarSelection,\n\ttype ScalarPredicate,\n} from './querying/filters'\n\n/** Object table boundaries only. Runtime metadata comes from native validators/export. */\nexport interface RelationTable {\n\ttableName: string\n\tschema: z.ZodObject\n\tpublicDto: z.ZodObject\n\ttable: TableDefinition\n\tdto(includeId: true): z.ZodType\n}\nexport type RelationTables = Record<string, RelationTable>\n/** Internal named declaration dependency; excluded from the supported relations facade. */\nexport interface SelectionMask {\n\t[key: string]: true | SelectionMask\n}\ntype Fields<T extends RelationTable> = T['schema']['shape']\ntype Native<T extends RelationTable, K extends keyof Fields<T>> = ConvexValidatorFromZod<\n\tFields<T>[K],\n\t'required'\n>['type']\nconst fieldBrand: unique symbol = Symbol('relationField')\nconst edgeBrand: unique symbol = Symbol('relationEdge')\ntype Comparable<Value> = Exclude<Value, null | undefined>\ntype Same<A, B> = [Comparable<A> | Comparable<B>] extends [never]\n\t? false\n\t: [Comparable<A>] extends [Comparable<B>]\n\t\t? [Comparable<B>] extends [Comparable<A>]\n\t\t\t? true\n\t\t\t: false\n\t\t: false\n\nexport interface FieldReference<Table extends string, Field extends string, Value> {\n\treadonly [fieldBrand]: Value\n\treadonly table: Table\n\treadonly field: Field\n\tthrough<J extends AnyField>(\n\t\tjunction: J & (Same<Value, J[typeof fieldBrand]> extends true ? {} : never),\n\t): ThroughReference<Table, Field, Value, J>\n}\ntype AnyField = FieldReference<string, string, any>\nexport interface ThroughReference<\n\tTable extends string,\n\tField extends string,\n\tValue,\n\tJunction extends AnyField,\n> {\n\treadonly base: FieldReference<Table, Field, Value>\n\treadonly junction: Junction\n}\ntype AnyThrough = ThroughReference<string, string, any, AnyField>\ntype Leg = AnyField | AnyThrough\ntype Base<L extends Leg> = L extends AnyThrough ? L['base'] : L\ntype JunctionTable<L extends Leg> = L extends AnyThrough ? L['junction']['table'] : never\ntype CompatibleLegs<F extends Leg, T extends Leg> = F extends AnyThrough\n\t? T extends AnyThrough\n\t\t? Same<JunctionTable<F>, JunctionTable<T>> extends true\n\t\t\t? {}\n\t\t\t: never\n\t\t: never\n\t: T extends AnyThrough\n\t\t? never\n\t\t: Same<Base<F>[typeof fieldBrand], Base<T>[typeof fieldBrand]> extends true\n\t\t\t? {}\n\t\t\t: never\n\nexport interface RelationEdge<\n\tSource extends string,\n\tTarget extends string,\n\tCardinality extends 'one' | 'many',\n> {\n\treadonly [edgeBrand]: true\n\treadonly source: Source\n\treadonly target: Target\n\treadonly cardinality: Cardinality\n\treadonly from: Leg\n\treadonly to: Leg\n}\ntype AnyEdge = RelationEdge<string, string, 'one' | 'many'>\ntype FieldReferences<Tables extends RelationTables> = {\n\t[T in keyof Tables]: {\n\t\t[K in Extract<keyof Fields<Tables[T]>, string>]: FieldReference<\n\t\t\tExtract<T, string>,\n\t\t\tK,\n\t\t\tNative<Tables[T], K>\n\t\t>\n\t}\n}\ntype AllReferences<Tables extends RelationTables> = {\n\t[T in keyof Tables]: FieldReferences<Tables>[T][Extract<keyof FieldReferences<Tables>[T], string>]\n}[keyof Tables]\ntype Builders<Tables extends RelationTables, C extends 'one' | 'many'> = {\n\t[T in keyof Tables]: <\n\t\tF extends AllReferences<Tables> | AnyThrough,\n\t\tTo extends\n\t\t\t| FieldReferences<Tables>[T][Extract<keyof FieldReferences<Tables>[T], string>]\n\t\t\t| AnyThrough,\n\t>(\n\t\tspec: { from: F; to: To } & CompatibleLegs<F, To> & (Base<To>['table'] extends T ? {} : never),\n\t) => RelationEdge<Base<F>['table'], Extract<T, string>, C>\n}\nexport type RelationBuilder<Tables extends RelationTables> = FieldReferences<Tables> & {\n\tone: Builders<Tables, 'one'>\n\tmany: Builders<Tables, 'many'>\n}\nexport type RelationDeclarations = Record<string, Record<string, AnyEdge>>\ntype ExactDeclarations<Tables extends RelationTables, D extends RelationDeclarations> = {\n\t[T in keyof D]: T extends keyof Tables\n\t\t? {\n\t\t\t\t[K in keyof D[T]]: K extends\n\t\t\t\t\t| keyof Fields<Tables[T]>\n\t\t\t\t\t| 'and'\n\t\t\t\t\t| 'or'\n\t\t\t\t\t| 'not'\n\t\t\t\t\t| 'fields'\n\t\t\t\t\t| 'then'\n\t\t\t\t\t| '__proto__'\n\t\t\t\t\t| 'constructor'\n\t\t\t\t\t| 'prototype'\n\t\t\t\t\t? never\n\t\t\t\t\t: D[T][K]['source'] extends T\n\t\t\t\t\t\t? D[T][K]\n\t\t\t\t\t\t: never\n\t\t\t}\n\t\t: never\n}\ntype Depth = readonly [1, 1, 1, 1]\ntype Tail<D extends readonly 1[]> = D extends readonly [1, ...infer R extends 1[]] ? R : []\ntype Edges<D, T> = T extends keyof D ? D[T] : {}\ntype Target<E> = E extends AnyEdge ? E['target'] : never\nexport type RelationSelection<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n\tLevel extends readonly 1[] = Depth,\n> = Level extends readonly []\n\t? Record<string, never>\n\t: {\n\t\t\t[K in keyof Edges<D, T>]?:\n\t\t\t\t| true\n\t\t\t\t| RelationSelection<Tables, D, Extract<Target<Edges<D, T>[K]>, keyof Tables>, Tail<Level>>\n\t\t}\nexport type RelationFilterSelection<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n\tLevel extends readonly 1[] = Depth,\n> = ScalarSelection<Fields<Tables[T]>> &\n\t(Level extends readonly []\n\t\t? {}\n\t\t: {\n\t\t\t\t[K in keyof Edges<D, T>]?: RelationFilterSelection<\n\t\t\t\t\tTables,\n\t\t\t\t\tD,\n\t\t\t\t\tExtract<Target<Edges<D, T>[K]>, keyof Tables>,\n\t\t\t\t\tTail<Level>\n\t\t\t\t>\n\t\t\t})\ntype ExactOutputMask<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n\tS,\n\tL extends readonly 1[] = Depth,\n> = S & {\n\t[K in keyof S]: L extends readonly []\n\t\t? never\n\t\t: K extends keyof Edges<D, T>\n\t\t\t? S[K] extends true\n\t\t\t\t? true\n\t\t\t\t: ExactOutputMask<Tables, D, Extract<Target<Edges<D, T>[K]>, keyof Tables>, S[K], Tail<L>>\n\t\t\t: never\n}\ntype ExactFilterMask<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n\tS,\n\tL extends readonly 1[] = Depth,\n> = S & {\n\t[K in keyof S]: K extends keyof ScalarSelection<Fields<Tables[T]>>\n\t\t? S[K] extends true\n\t\t\t? true\n\t\t\t: never\n\t\t: L extends readonly []\n\t\t\t? never\n\t\t\t: K extends keyof Edges<D, T>\n\t\t\t\t? S[K] extends true\n\t\t\t\t\t? never\n\t\t\t\t\t: ExactFilterMask<Tables, D, Extract<Target<Edges<D, T>[K]>, keyof Tables>, S[K], Tail<L>>\n\t\t\t\t: never\n}\ntype ScalarValues<T extends RelationTable, S, Side extends 'input' | 'output'> = {\n\t[K in Extract<keyof S, keyof Fields<T>>]?: ScalarPredicate<Fields<T>[K], Side>\n}\nexport type RelationFilters<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n\tS,\n\tSide extends 'input' | 'output' = 'output',\n\tLevel extends readonly 1[] = Depth,\n> = Omit<ScalarValues<Tables[T], S, Side>, 'and' | 'or' | 'not' | 'fields'> & {\n\tfields?: ScalarValues<Tables[T], S, Side>\n} & (Level extends readonly []\n\t\t? {}\n\t\t: {\n\t\t\t\t[K in Extract<keyof S, keyof Edges<D, T>>]?: Edges<D, T>[K] extends RelationEdge<\n\t\t\t\t\tstring,\n\t\t\t\t\tinfer Target,\n\t\t\t\t\tinfer C\n\t\t\t\t>\n\t\t\t\t\t? C extends 'one'\n\t\t\t\t\t\t? RelationFilters<\n\t\t\t\t\t\t\t\tTables,\n\t\t\t\t\t\t\t\tD,\n\t\t\t\t\t\t\t\tExtract<Target, keyof Tables>,\n\t\t\t\t\t\t\t\tS[K],\n\t\t\t\t\t\t\t\tSide,\n\t\t\t\t\t\t\t\tTail<Level>\n\t\t\t\t\t\t\t> | null\n\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\t\t\tsome: RelationFilters<\n\t\t\t\t\t\t\t\t\t\t\tTables,\n\t\t\t\t\t\t\t\t\t\t\tD,\n\t\t\t\t\t\t\t\t\t\t\tExtract<Target, keyof Tables>,\n\t\t\t\t\t\t\t\t\t\t\tS[K],\n\t\t\t\t\t\t\t\t\t\t\tSide,\n\t\t\t\t\t\t\t\t\t\t\tTail<Level>\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\t\t\tnone: RelationFilters<\n\t\t\t\t\t\t\t\t\t\t\tTables,\n\t\t\t\t\t\t\t\t\t\t\tD,\n\t\t\t\t\t\t\t\t\t\t\tExtract<Target, keyof Tables>,\n\t\t\t\t\t\t\t\t\t\t\tS[K],\n\t\t\t\t\t\t\t\t\t\t\tSide,\n\t\t\t\t\t\t\t\t\t\t\tTail<Level>\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t: never\n\t\t\t} & {\n\t\t\t\tand?: RelationFilters<Tables, D, T, S, Side, Tail<Level>>[]\n\t\t\t\tor?: RelationFilters<Tables, D, T, S, Side, Tail<Level>>[]\n\t\t\t\tnot?: RelationFilters<Tables, D, T, S, Side, Tail<Level>>\n\t\t\t})\ntype PublicRow<T extends RelationTable> = z.output<T['publicDto']> & {\n\t_id: GenericId<T['tableName']>\n}\nexport type RelationRow<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n\tS,\n\tLevel extends readonly 1[] = Depth,\n> = PublicRow<Tables[T]> &\n\t(Level extends readonly []\n\t\t? {}\n\t\t: {\n\t\t\t\t[K in keyof S]: K extends keyof Edges<D, T>\n\t\t\t\t\t? Edges<D, T>[K] extends RelationEdge<string, infer Target, infer C>\n\t\t\t\t\t\t? C extends 'one'\n\t\t\t\t\t\t\t? RelationRow<\n\t\t\t\t\t\t\t\t\tTables,\n\t\t\t\t\t\t\t\t\tD,\n\t\t\t\t\t\t\t\t\tExtract<Target, keyof Tables>,\n\t\t\t\t\t\t\t\t\tS[K] extends true ? {} : S[K],\n\t\t\t\t\t\t\t\t\tTail<Level>\n\t\t\t\t\t\t\t\t> | null\n\t\t\t\t\t\t\t: PaginationResult<\n\t\t\t\t\t\t\t\t\tRelationRow<\n\t\t\t\t\t\t\t\t\t\tTables,\n\t\t\t\t\t\t\t\t\t\tD,\n\t\t\t\t\t\t\t\t\t\tExtract<Target, keyof Tables>,\n\t\t\t\t\t\t\t\t\t\tS[K] extends true ? {} : S[K],\n\t\t\t\t\t\t\t\t\t\tTail<Level>\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t: never\n\t\t\t\t\t: never\n\t\t\t})\nexport interface RelationTableHelpers<\n\tTables extends RelationTables,\n\tD extends RelationDeclarations,\n\tT extends keyof Tables,\n> {\n\tpaginationOpts<const S extends RelationFilterSelection<Tables, D, T>>(\n\t\tselection: ExactFilterMask<Tables, D, T, S>,\n\t): PaginationOptionsSchema<\n\t\tRelationFilters<Tables, D, T, S>,\n\t\tRelationFilters<Tables, D, T, S, 'input'>\n\t>\n\tpageDto<const S extends RelationSelection<Tables, D, T>>(\n\t\tselection: ExactOutputMask<Tables, D, T, S>,\n\t): z.ZodType<PaginationResult<RelationRow<Tables, D, T, S>>>\n}\nexport interface RelationRegistryIdentity {\n\treadonly identity: string\n\treadonly version: 1\n}\nexport interface RelationRegistry<Tables extends RelationTables, D extends RelationDeclarations> {\n\treadonly identity: string\n\treadonly version: 1\n\treadonly tables: { [T in keyof Tables]: RelationTableHelpers<Tables, D, T> }\n}\n\nexport interface RelationFieldMetadata {\n\treadonly kind: string\n\treadonly optional: boolean\n\treadonly nullable: boolean\n\treadonly idTables: readonly string[]\n\treadonly native: Readonly<ValidatorJSON>\n}\nexport interface RelationTableMetadata {\n\treadonly fields: Readonly<Record<string, RelationFieldMetadata>>\n\treadonly indexes: readonly { readonly name: string; readonly fields: readonly string[] }[]\n}\ninterface TableMetadata {\n\tfields: Record<string, GenericValidator>\n\tindexes: { name: string; fields: string[] }[]\n\tdto: z.ZodObject\n\tassertUnchanged(): void\n}\ninterface RegistryMetadata {\n\tmetadata: Record<string, TableMetadata>\n\tdeclarations: RelationDeclarations\n}\nexport interface RelationMetadata {\n\treadonly tables: Readonly<Record<string, RelationTableMetadata>>\n\treadonly declarations: Readonly<Record<string, Readonly<Record<string, AnyEdge>>>>\n}\n\nconst registries = new WeakMap<RelationRegistryIdentity, RelationMetadata>()\n// Private executor state retains validators and projection, never a database reader.\nconst executorRegistries = new WeakMap<\n\tRelationRegistryIdentity,\n\t{\n\t\tinternal: RegistryMetadata\n\t\ttables: RelationTables\n\t\tassertStoredUnchanged(): void\n\t\tassertNativeTable(table: string, definition: TableDefinition): void\n\t}\n>()\nconst refs = new WeakMap<AnyField, GenericValidator>()\nconst throughRefs = new WeakSet<AnyThrough>()\nconst edgeRefs = new WeakSet<AnyEdge>()\nconst indexExport = z.object({\n\tindexes: z.array(z.object({ indexDescriptor: z.string(), fields: z.array(z.string()) })),\n})\n\n/** No ID-field inference and no readers: this registry owns declarations/schema helpers only. */\nexport function defineRelations<\n\tconst Tables extends RelationTables,\n\tconst D extends RelationDeclarations,\n>(\n\ttables: Tables,\n\tdeclare: (r: RelationBuilder<Tables>) => D & ExactDeclarations<Tables, D>,\n): RelationRegistry<Tables, D> {\n\tconst metadata: Record<string, TableMetadata> = {}\n\tconst ownRefs = new Set<AnyField>()\n\tconst fields: Record<string, Record<string, AnyField>> = {}\n\tconst one: Record<string, (spec: { from: Leg; to: Leg }) => AnyEdge> = {}\n\tconst many: Record<string, (spec: { from: Leg; to: Leg }) => AnyEdge> = {}\n\tfor (const [name, table] of Object.entries(tables)) {\n\t\tif (table.schema instanceof z.ZodUnion)\n\t\t\tthrow new Error('Variant tables are not supported by relations or the query engine')\n\t\tif (\n\t\t\ttable.tableName !== name ||\n\t\t\t['one', 'many', '__proto__', 'constructor', 'prototype'].includes(name)\n\t\t)\n\t\t\tthrow new Error(`Invalid relation table \"${name}\"`)\n\t\tconst dto = table.dto(true)\n\t\tif (!(dto instanceof z.ZodObject)) throw new Error('Expected object DTO')\n\t\tconst assertUnchanged = dtoMutationGuard(dto)\n\t\tconst native = zodToConvex(table.schema)\n\t\tconst exported = nativeTableExport(table.table)\n\t\tassertNativeValidation(exported.documentType)\n\t\tassertStoredDocument(name, native.fields, exported.documentType)\n\t\tconst indexes = indexExport\n\t\t\t.parse(exported)\n\t\t\t.indexes.map((index) => ({ name: index.indexDescriptor, fields: [...index.fields] }))\n\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\tassertNativeValidation(nativeJson(zodToConvex(dto)))\n\t\tmetadata[name] = { fields: native.fields, indexes, dto, assertUnchanged }\n\t\tconst tableRefs: Record<string, AnyField> = Object.create(null)\n\t\tfor (const [field, validator] of Object.entries(native.fields)) {\n\t\t\tconst ref: AnyField = {\n\t\t\t\t[fieldBrand]: undefined,\n\t\t\t\ttable: name,\n\t\t\t\tfield,\n\t\t\t\tthrough<J extends AnyField>(\n\t\t\t\t\tjunction: J & (Same<any, J[typeof fieldBrand]> extends true ? {} : never),\n\t\t\t\t): ThroughReference<string, string, any, J> {\n\t\t\t\t\tconst junctionValidator = refs.get(junction)\n\t\t\t\t\tif (\n\t\t\t\t\t\t!ownRefs.has(junction) ||\n\t\t\t\t\t\t!junctionValidator ||\n\t\t\t\t\t\t!compatible(validator, junctionValidator)\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow new Error('Invalid junction field or registry')\n\t\t\t\t\tconst result = Object.freeze({ base: ref, junction })\n\t\t\t\t\tthroughRefs.add(result)\n\t\t\t\t\treturn result\n\t\t\t\t},\n\t\t\t}\n\t\t\trefs.set(ref, validator)\n\t\t\townRefs.add(ref)\n\t\t\ttableRefs[field] = Object.freeze(ref)\n\t\t}\n\t\tfields[name] = Object.freeze(tableRefs)\n\t\tone[name] = (spec) => makeEdge(name, 'one', spec, ownRefs)\n\t\tmany[name] = (spec) => makeEdge(name, 'many', spec, ownRefs)\n\t}\n\t// SAFETY: every native field has a branded reference; mapped builders retain the literal names.\n\tconst builder = Object.freeze({\n\t\t...fields,\n\t\tone: Object.freeze(one),\n\t\tmany: Object.freeze(many),\n\t}) as RelationBuilder<Tables>\n\tconst supplied = declare(builder)\n\tconst declarations: RelationDeclarations = Object.fromEntries(\n\t\tObject.entries(supplied).map(([name, edges]) => [name, Object.freeze({ ...edges })]),\n\t)\n\tObject.freeze(declarations)\n\tfor (const [source, edges] of Object.entries(declarations)) {\n\t\tif (!Object.hasOwn(tables, source)) throw new Error(`Unknown source table \"${source}\"`)\n\t\tfor (const [name, edge] of Object.entries(edges)) {\n\t\t\tif (\n\t\t\t\tObject.hasOwn(metadata[source].fields, name) ||\n\t\t\t\t['and', 'or', 'not', 'fields', 'then', '__proto__', 'constructor', 'prototype'].includes(\n\t\t\t\t\tname,\n\t\t\t\t)\n\t\t\t)\n\t\t\t\tthrow new Error(`Relation name collision \"${name}\"`)\n\t\t\tif (\n\t\t\t\t!edgeRefs.has(edge) ||\n\t\t\t\t!ownRefs.has(base(edge.from)) ||\n\t\t\t\t!ownRefs.has(base(edge.to)) ||\n\t\t\t\tedge.source !== source\n\t\t\t)\n\t\t\t\tthrow new Error('Relation source bucket mismatch')\n\t\t\tvalidatePath(edge, metadata)\n\t\t}\n\t}\n\tconst internal: RegistryMetadata = { metadata, declarations }\n\tconst helpers: Record<\n\t\tstring,\n\t\t{\n\t\t\tpaginationOpts(selection: SelectionMask): z.ZodType\n\t\t\tpageDto(selection: SelectionMask): z.ZodType\n\t\t}\n\t> = {}\n\tfor (const table of Object.keys(tables))\n\t\thelpers[table] = {\n\t\t\tpaginationOpts(selection: SelectionMask): z.ZodType {\n\t\t\t\tassertRegistryUnchanged(internal)\n\t\t\t\tassertSelection(selection)\n\t\t\t\treturn guardedDto(\n\t\t\t\t\tnativePagination.extend({\n\t\t\t\t\t\tfilters: relationFilterSchema(filterGrammar(internal, table, selection)).optional(),\n\t\t\t\t\t\torder: z.enum(['asc', 'desc']).optional(),\n\t\t\t\t\t}),\n\t\t\t\t\t() => assertRegistryUnchanged(internal),\n\t\t\t\t)\n\t\t\t},\n\t\t\tpageDto(selection: SelectionMask): z.ZodType {\n\t\t\t\tassertRegistryUnchanged(internal)\n\t\t\t\tassertSelection(selection)\n\t\t\t\treturn guardedDto(paginated(rowSchema(internal, table, selection)).result, () =>\n\t\t\t\t\tassertRegistryUnchanged(internal),\n\t\t\t\t)\n\t\t\t},\n\t\t}\n\t// Stable, collision-free canonical metadata encoding. It is an identity, not a secret/hash.\n\tconst identity = JSON.stringify([\n\t\t1,\n\t\tObject.entries(metadata)\n\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t.map(([name, data]) => [\n\t\t\t\tname,\n\t\t\t\tObject.entries(data.fields)\n\t\t\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t\t\t.map(([field, validator]) => [field, validator.isOptional, nativeJson(validator)]),\n\t\t\t\tdata.indexes,\n\t\t\t\tcanonicalNative(nativeJson(zodToConvex(data.dto))),\n\t\t\t]),\n\t\tObject.entries(declarations)\n\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t.map(([source, edges]) => [\n\t\t\t\tsource,\n\t\t\t\tObject.entries(edges)\n\t\t\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t\t\t.map(([name, edge]) => [\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tedge.cardinality,\n\t\t\t\t\t\tedge.target,\n\t\t\t\t\t\tserializeLeg(edge.from),\n\t\t\t\t\t\tserializeLeg(edge.to),\n\t\t\t\t\t]),\n\t\t\t]),\n\t])\n\t// SAFETY: helpers are assembled for every validated literal table and mask; schemas derive matching native fields/public DTOs.\n\tconst registry = Object.freeze({\n\t\tidentity,\n\t\tversion: 1,\n\t\ttables: Object.freeze(helpers),\n\t}) as RelationRegistry<Tables, D>\n\tregistries.set(registry, snapshotMetadata(internal))\n\tconst ownedTables = Object.freeze({ ...tables })\n\tconst storedGuards = Object.fromEntries(\n\t\tObject.entries(ownedTables).map(([name, table]) => {\n\t\t\tconst schemaGuard = schemaMutationGuard(table.schema, 'stored')\n\t\t\tconst nativeSnapshot = JSON.stringify(nativeTableExport(table.table))\n\t\t\treturn [\n\t\t\t\tname,\n\t\t\t\t() => {\n\t\t\t\t\tschemaGuard()\n\t\t\t\t\tif (JSON.stringify(nativeTableExport(table.table)) !== nativeSnapshot)\n\t\t\t\t\t\tthrow new Error(`Native schema mutated after registry construction: ${name}`)\n\t\t\t\t},\n\t\t\t]\n\t\t}),\n\t)\n\texecutorRegistries.set(registry, {\n\t\tinternal,\n\t\ttables: ownedTables,\n\t\tassertStoredUnchanged: () => {\n\t\t\tfor (const guard of Object.values(storedGuards)) guard()\n\t\t},\n\t\tassertNativeTable(table, definition) {\n\t\t\tif (!Object.hasOwn(ownedTables, table) || ownedTables[table].table !== definition)\n\t\t\t\tthrow new Error('Native schema/table ownership disagrees with relation registry')\n\t\t\tstoredGuards[table]()\n\t\t},\n\t})\n\treturn registry\n}\n\n/** Internal owned executor bridge. Not an advertised root API. Every operation\n * rechecks the live registry, including cached plans and individual projections.\n */\nexport function getRelationExecutor(registry: RelationRegistryIdentity) {\n\tconst owned = executorRegistries.get(registry)\n\tif (!owned) throw new Error('Unknown relation registry')\n\tconst assertUnchanged = () => {\n\t\tassertRegistryUnchanged(owned.internal)\n\t\towned.assertStoredUnchanged()\n\t}\n\tconst assertSchema = (tables: Readonly<Record<string, TableDefinition>>) => {\n\t\tassertUnchanged()\n\t\tconst names = Object.keys(owned.tables)\n\t\tif (\n\t\t\tnames.length !== Object.keys(tables).length ||\n\t\t\tnames.some((name) => tables[name] !== owned.tables[name].table)\n\t\t)\n\t\t\tthrow new Error('Native schema/table ownership disagrees with relation registry')\n\t}\n\tassertUnchanged()\n\treturn Object.freeze({\n\t\tassertUnchanged,\n\t\tassertNativeTable: owned.assertNativeTable,\n\t\tassertSchema,\n\t\tpagination(table: string) {\n\t\t\tassertUnchanged()\n\t\t\tconst internal = owned.internal\n\t\t\tconst scalarFields = new Map<string, FieldSchemas>()\n\t\t\tfunction grammar(name: string, depth: number): FilterGrammar {\n\t\t\t\tconst data = internal.metadata[name]\n\t\t\t\tif (!data) throw new Error('Unknown query table')\n\t\t\t\tlet fields = scalarFields.get(name)\n\t\t\t\tif (!fields) {\n\t\t\t\t\tfields = {}\n\t\t\t\t\tfor (const [name, validator] of Object.entries(data.fields)) {\n\t\t\t\t\t\t// Unsupported stored containers are not scalar-queryable. No validators\n\t\t\t\t\t\t// are reconstructed from JSON; these are the actual native validators.\n\t\t\t\t\t\tif (scalarValidator(validator))\n\t\t\t\t\t\t\tfields[name] = scalarPredicateSchema(validator).optional()\n\t\t\t\t\t}\n\t\t\t\t\tscalarFields.set(name, fields)\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tfields,\n\t\t\t\t\trelations:\n\t\t\t\t\t\tdepth >= 4\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\t\t\t\tObject.entries(internal.declarations[name] ?? {}).map(([edge, declaration]) => [\n\t\t\t\t\t\t\t\t\t\tedge,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcardinality: declaration.cardinality,\n\t\t\t\t\t\t\t\t\t\t\ttarget: grammar(declaration.target, depth + 1),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nativePagination.extend({\n\t\t\t\tfilters: relationFilterSchema(grammar(table, 0)).optional(),\n\t\t\t\torder: z.enum(['asc', 'desc']).optional(),\n\t\t\t})\n\t\t},\n\t\tpage(table: string, selection: SelectionMask) {\n\t\t\tassertUnchanged()\n\t\t\tassertSelection(selection)\n\t\t\treturn paginated(rowSchema(owned.internal, table, selection)).result\n\t\t},\n\t\tproject(\n\t\t\ttables: Readonly<Record<string, TableDefinition>>,\n\t\t\ttable: string,\n\t\t\trow: Record<string, import('convex/values').Value>,\n\t\t\teligible: () => boolean,\n\t\t) {\n\t\t\tassertSchema(tables)\n\t\t\tif (!eligible()) return null\n\t\t\tconst dto = owned.internal.metadata[table]?.dto\n\t\t\tif (!dto) throw new Error('Unknown query table')\n\t\t\t// The strict DTO remains the authority. Pick its fields before parsing,\n\t\t\t// matching table projection without spreading any storage-only fields.\n\t\t\treturn dto.parse(\n\t\t\t\tObject.fromEntries(\n\t\t\t\t\tObject.keys(dto.shape)\n\t\t\t\t\t\t.filter((key) => Object.hasOwn(row, key))\n\t\t\t\t\t\t.map((key) => [key, row[key]]),\n\t\t\t\t),\n\t\t\t)\n\t\t},\n\t})\n}\n/** Internal compiler/engine adapter. Registry identity alone cannot forge a registry. */\nexport function getRelationMetadata(registry: RelationRegistryIdentity): RelationMetadata {\n\tconst metadata = registries.get(registry)\n\tif (!metadata) throw new Error('Unknown relation registry')\n\treturn metadata\n}\n\nfunction scalarValidator(validator: GenericValidator): boolean {\n\treturn (\n\t\t['id', 'string', 'float64', 'int64', 'boolean', 'null', 'literal'].includes(validator.kind) ||\n\t\t(validator.kind === 'union' && validator.members.every(scalarValidator))\n\t)\n}\n\nfunction assertSelection(selection: SelectionMask): void {\n\tconst pending: { value: SelectionMask; depth: number; ancestors: readonly SelectionMask[] }[] = [\n\t\t{ value: selection, depth: 0, ancestors: [] },\n\t]\n\tlet nodes = 0\n\twhile (pending.length) {\n\t\tconst { value, depth, ancestors } = pending.pop()!\n\t\tif (++nodes > 256 || depth > 4 || ancestors.includes(value))\n\t\t\tthrow new Error('Selection cycle or depth/node budget exceeded')\n\t\tconst prototype = Object.getPrototypeOf(value)\n\t\tif (prototype !== Object.prototype && prototype !== null) throw new Error('Invalid selection')\n\t\tconst keys = Reflect.ownKeys(value)\n\t\tif (keys.length + nodes + pending.length > 256)\n\t\t\tthrow new Error('Selection node budget exceeded')\n\t\tfor (const key of keys) {\n\t\t\tconst property = Object.getOwnPropertyDescriptor(value, key)!\n\t\t\tif (!property.enumerable || !('value' in property) || String(key) !== key)\n\t\t\t\tthrow new Error('Invalid selection property')\n\t\t\tif (property.value !== true)\n\t\t\t\tpending.push({ value: property.value, depth: depth + 1, ancestors: [...ancestors, value] })\n\t\t\telse if (++nodes > 256) throw new Error('Selection node budget exceeded')\n\t\t}\n\t}\n}\nfunction base(leg: Leg): AnyField {\n\treturn 'base' in leg ? leg.base : leg\n}\nfunction makeEdge(\n\ttarget: string,\n\tcardinality: 'one' | 'many',\n\tspec: { from: Leg; to: Leg },\n\town: Set<AnyField>,\n): AnyEdge {\n\tfor (const leg of [spec.from, spec.to]) {\n\t\tif (!own.has(base(leg)) || ('base' in leg && (!throughRefs.has(leg) || !own.has(leg.junction))))\n\t\t\tthrow new Error('Foreign registry or invalid field reference')\n\t}\n\tif (base(spec.to).table !== target) throw new Error('Wrong relation target table')\n\tconst result: AnyEdge = Object.freeze({\n\t\t[edgeBrand]: true as const,\n\t\tsource: base(spec.from).table,\n\t\ttarget,\n\t\tcardinality,\n\t\tfrom: spec.from,\n\t\tto: spec.to,\n\t})\n\tedgeRefs.add(result)\n\treturn result\n}\nfunction compatible(left: GenericValidator, right: GenericValidator): boolean {\n\tconst leftDomain = domain(left)\n\treturn leftDomain.length > 0 && JSON.stringify(leftDomain) === JSON.stringify(domain(right))\n}\nfunction domain(validator: GenericValidator): string[] {\n\tif (validator.kind === 'union') return [...new Set(validator.members.flatMap(domain))].sort()\n\tif (validator.kind === 'null') return []\n\tif (!['id', 'string', 'float64', 'int64', 'boolean', 'literal'].includes(validator.kind))\n\t\tthrow new Error('Unsupported relation field kind')\n\treturn [JSON.stringify(nativeJson(validator))]\n}\nfunction validatePath(edge: AnyEdge, metadata: Record<string, TableMetadata>): void {\n\tconst from = edge.from\n\tconst to = edge.to\n\tif ('base' in from !== 'base' in to) throw new Error('Both relation legs must use through')\n\tif ('base' in from && 'base' in to) {\n\t\tif (from.junction.table !== to.junction.table) throw new Error('Different junction tables')\n\t\trequireIndex(metadata, from.junction.table, from.junction.field)\n\t\trequireIndex(metadata, edge.target, to.base.field)\n\t\treturn\n\t}\n\tif (!compatible(refs.get(base(from))!, refs.get(base(to))!))\n\t\tthrow new Error('Incompatible relation field types')\n\trequireIndex(metadata, edge.target, base(to).field)\n}\nfunction requireIndex(metadata: Record<string, TableMetadata>, table: string, field: string): void {\n\tif (field !== '_id' && !metadata[table].indexes.some((index) => index.fields[0] === field))\n\t\tthrow new Error(`No active index begins with \"${table}.${field}\"`)\n}\nfunction serializeLeg(leg: Leg): string[] {\n\treturn 'base' in leg\n\t\t? [leg.base.table, leg.base.field, leg.junction.table, leg.junction.field]\n\t\t: [leg.table, leg.field]\n}\nfunction filterGrammar(\n\tregistry: RegistryMetadata,\n\ttable: string,\n\tselection: SelectionMask,\n\tdepth: number = 0,\n): FilterGrammar {\n\tconst fields: FieldSchemas = {}\n\tconst relations: FilterGrammar['relations'] = {}\n\tfor (const [key, mask] of Object.entries(selection)) {\n\t\tconst validator = registry.metadata[table].fields[key]\n\t\tconst edge = registry.declarations[table]?.[key]\n\t\tif (mask === true && validator) fields[key] = scalarPredicateSchema(validator).optional()\n\t\telse if (mask !== true && edge && depth < 4)\n\t\t\trelations[key] = {\n\t\t\t\tcardinality: edge.cardinality,\n\t\t\t\ttarget: filterGrammar(registry, edge.target, mask, depth + 1),\n\t\t\t}\n\t\telse throw new Error(`Invalid relation filter selection \"${table}.${key}\"`)\n\t}\n\treturn { fields, relations }\n}\nfunction rowSchema(\n\tregistry: RegistryMetadata,\n\ttable: string,\n\tselection: SelectionMask,\n\tdepth: number = 0,\n): z.ZodType {\n\tconst relationFields: FieldSchemas = {}\n\tfor (const [name, mask] of Object.entries(selection)) {\n\t\tconst edge = registry.declarations[table]?.[name]\n\t\tif (!edge || depth >= 4) throw new Error(`Unknown or too deep relation \"${table}.${name}\"`)\n\t\tconst target =\n\t\t\tmask === true\n\t\t\t\t? registry.metadata[edge.target].dto\n\t\t\t\t: rowSchema(registry, edge.target, mask, depth + 1)\n\t\trelationFields[name] = edge.cardinality === 'one' ? target.nullable() : paginated(target).result\n\t}\n\t// Keep caller validations; guard the supported graph before parsing or native conversion.\n\tconst dto = registry.metadata[table].dto\n\tif (!(dto instanceof z.ZodObject)) throw new Error('Expected object DTO')\n\treturn guardedDto(dto.extend(relationFields).strict(), () => assertRegistryUnchanged(registry))\n}\n\ninterface NativeTableExport {\n\tindexes: { indexDescriptor: string; fields: string[] }[]\n\tdocumentType: ValidatorJSON\n}\nfunction nativeTableExport(table: TableDefinition): NativeTableExport {\n\t// SAFETY: Convex exposes export at runtime but strips its internal signature from declarations.\n\treturn (table as TableDefinition & { export(): NativeTableExport }).export()\n}\nfunction nativeJson(validator: GenericValidator): ValidatorJSON {\n\t// SAFETY: native validators expose converter metadata at runtime; Convex strips json from declarations.\n\treturn (validator as GenericValidator & { json: ValidatorJSON }).json\n}\n\nfunction canonicalNative(value: JSONValue): string {\n\tif (Array.isArray(value)) return `[${value.map(canonicalNative).join(',')}]`\n\tif (value !== null && Object(value) === value) {\n\t\t// SAFETY: native JSON contains only JSON objects, arrays and primitives.\n\t\tconst object = value as { [key: string]: JSONValue }\n\t\treturn `{${Object.keys(object)\n\t\t\t.sort()\n\t\t\t.map((key) => `${JSON.stringify(key)}:${canonicalNative(object[key])}`)\n\t\t\t.join(',')}}`\n\t}\n\treturn JSON.stringify(value)\n}\n\nfunction assertNativeValidation(value: JSONValue): void {\n\tif (value === null || Object(value) !== value) return\n\t// SAFETY: native converter metadata contains only JSON containers and primitives.\n\tconst container = value as { [key: string]: JSONValue }\n\tif (container.type === 'any') throw new Error('Unsupported native validation form')\n\tfor (const child of Object.values(container)) assertNativeValidation(child)\n}\n\nfunction assertStoredDocument(\n\ttable: string,\n\tfields: Record<string, GenericValidator>,\n\tdocument: ValidatorJSON,\n): void {\n\tconst { _id, _creationTime, ...stored } = fields\n\tif (\n\t\t!_id ||\n\t\t!_creationTime ||\n\t\tcanonicalNative(nativeJson(_id)) !== canonicalNative(nativeJson(v.id(table))) ||\n\t\tcanonicalNative(nativeJson(_creationTime)) !== canonicalNative(nativeJson(v.number())) ||\n\t\t_id.isOptional !== 'required' ||\n\t\t_creationTime.isOptional !== 'required' ||\n\t\tcanonicalNative(document) !== canonicalNative(nativeJson(v.object(stored)))\n\t)\n\t\tthrow new Error(`Native stored document disagrees with boundary \"${table}\"`)\n}\n\ninterface DtoGraphNode {\n\tobject: object\n\texactKeys: boolean\n\tkeys: readonly PropertyKey[]\n\tvalues: readonly PropertyDescriptor[]\n}\n\n// Compare against this peer's own built-in accessor, using the intrinsic rather\n// than a caller-provided toString. Older Zod clones retain this accessor even\n// after reading shape, because it caches on the original definition.\nconst objectAccessorSample = z.object({ field: z.string() })\nconst builtinObjectGetters = new Set(\n\t[\n\t\tobjectAccessorSample,\n\t\tobjectAccessorSample.pick({ field: true }),\n\t\tobjectAccessorSample.omit({ field: true }),\n\t\tobjectAccessorSample.extend({ other: z.string() }),\n\t\tobjectAccessorSample.safeExtend({ other: z.string() }),\n\t\tobjectAccessorSample.merge(z.object({ other: z.string() })),\n\t\tobjectAccessorSample.partial(),\n\t\tobjectAccessorSample.required(),\n\t].flatMap((schema) => {\n\t\tconst getter = Object.getOwnPropertyDescriptor(schema._zod.def, 'shape')?.get\n\t\treturn getter ? [Function.prototype.toString.call(getter)] : []\n\t}),\n)\n\n/** Snapshot supported value-validation definitions, not Zod's mutable parse caches.\n * Functions remain the original validation functions; their captured application state\n * is outside the schema contract. Lazy/transform/default/coercion nodes fail closed.\n */\nfunction dtoMutationGuard(dto: z.ZodObject): () => void {\n\treturn schemaMutationGuard(dto, 'dto')\n}\n\n// Stored schemas already passed the native input boundary. Track their graph\n// independently of public DTO admissibility, without running any stored parser.\nconst builtinDefaultGetter = Function.prototype.toString.call(\n\tObject.getOwnPropertyDescriptor(z.string().default('')._zod.def, 'defaultValue')!.get!,\n)\nconst builtinPrefaultGetter = Function.prototype.toString.call(\n\tObject.getOwnPropertyDescriptor(z.string().prefault('')._zod.def, 'defaultValue')!.get!,\n)\n\nfunction schemaMutationGuard(dto: z.ZodObject, boundary: 'dto' | 'stored'): () => void {\n\tconst nodes: DtoGraphNode[] = []\n\tconst fallbackDefinitions = new Set<object>()\n\tconst patterns: { expression: RegExp; source: string; flags: string }[] = []\n\tconst seen = new Set<object>()\n\tconst active = new Set<object>()\n\tconst objectFields: {\n\t\tdefinition: z.core.$ZodObjectDef\n\t\tfields: Record<string, z.core.$ZodType>\n\t}[] = []\n\tfunction visit(value: DtoGraphNode['object'], depth: number): void {\n\t\tif (active.has(value)) throw new Error('Unsupported cyclic DTO schema')\n\t\tif (seen.has(value)) return\n\t\tif (depth > 32 || nodes.length >= 4096) throw new Error('DTO schema graph budget exceeded')\n\t\tseen.add(value)\n\t\tactive.add(value)\n\t\ttry {\n\t\t\tif (value instanceof RegExp)\n\t\t\t\tpatterns.push({ expression: value, source: value.source, flags: value.flags })\n\t\t\tif (value instanceof z.core.$ZodCheck && 'check' in value._zod.def) {\n\t\t\t\tif (boundary === 'dto' && value._zod.def.check === 'overwrite')\n\t\t\t\t\tthrow new Error('Unsupported DTO overwrite check')\n\t\t\t\tvisit(value._zod.def, depth + 1)\n\t\t\t\tnodes.push({\n\t\t\t\t\tobject: value._zod,\n\t\t\t\t\texactKeys: false,\n\t\t\t\t\tkeys: ['def', 'check'],\n\t\t\t\t\tvalues: ['def', 'check'].map((key) => Object.getOwnPropertyDescriptor(value._zod, key)!),\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (value instanceof z.core.$ZodType) {\n\t\t\t\t// SAFETY: built-in Zod definitions form a discriminated union.\n\t\t\t\tconst def = (value as z.core.$ZodTypes)._zod.def\n\t\t\t\tif (\n\t\t\t\t\tboundary === 'dto' &&\n\t\t\t\t\t(![\n\t\t\t\t\t\t'object',\n\t\t\t\t\t\t'array',\n\t\t\t\t\t\t'optional',\n\t\t\t\t\t\t'nullable',\n\t\t\t\t\t\t'nonoptional',\n\t\t\t\t\t\t'union',\n\t\t\t\t\t\t'intersection',\n\t\t\t\t\t\t'tuple',\n\t\t\t\t\t\t'record',\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'number',\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'bigint',\n\t\t\t\t\t\t'null',\n\t\t\t\t\t\t'never',\n\t\t\t\t\t\t'literal',\n\t\t\t\t\t\t'enum',\n\t\t\t\t\t].includes(def.type) ||\n\t\t\t\t\t\t('coerce' in def && def.coerce))\n\t\t\t\t)\n\t\t\t\t\tthrow new Error(`Unsupported DTO schema \"${def.type}\"`)\n\t\t\t\tif (boundary === 'stored' && (def.type === 'default' || def.type === 'prefault')) {\n\t\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(def, 'defaultValue')\n\t\t\t\t\tif (descriptor?.get) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdescriptor.set ||\n\t\t\t\t\t\t\tFunction.prototype.toString.call(descriptor.get) !==\n\t\t\t\t\t\t\t\t(def.type === 'default' ? builtinDefaultGetter : builtinPrefaultGetter)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\tthrow new Error('Unsupported stored schema accessor')\n\t\t\t\t\t\t// Snapshot the accessor identity below, never evaluate its fallback.\n\t\t\t\t\t\tfallbackDefinitions.add(def)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (def.type === 'object') {\n\t\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(def, 'shape')\n\t\t\t\t\tif (descriptor?.get) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tdescriptor.set ||\n\t\t\t\t\t\t\t!builtinObjectGetters.has(Function.prototype.toString.call(descriptor.get))\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\tthrow new Error('Unsupported DTO schema accessor')\n\t\t\t\t\t\tconst fields = def.shape\n\t\t\t\t\t\tvisit(fields, depth + 1)\n\t\t\t\t\t\t// A refined clone's getter can return fresh shallow copies.\n\t\t\t\t\t\t// Preserve that caller behavior and compare its fields separately.\n\t\t\t\t\t\tif (Object.getOwnPropertyDescriptor(def, 'shape')?.get)\n\t\t\t\t\t\t\tobjectFields.push({ definition: def, fields })\n\t\t\t\t\t}\n\t\t\t\t\tif (value instanceof z.ZodObject) {\n\t\t\t\t\t\tconst publicFields = Object.getOwnPropertyDescriptor(value, 'shape')\n\t\t\t\t\t\tif (publicFields && !('value' in publicFields))\n\t\t\t\t\t\t\tthrow new Error('Unsupported DTO schema accessor')\n\t\t\t\t\t\tvisit(value.shape, depth + 1)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvisit(def, depth + 1)\n\t\t\t\t// Track definition replacement, without snapshotting caches initialized by parsing.\n\t\t\t\tnodes.push({\n\t\t\t\t\tobject: value._zod,\n\t\t\t\t\texactKeys: false,\n\t\t\t\t\tkeys: ['def'],\n\t\t\t\t\tvalues: [Object.getOwnPropertyDescriptor(value._zod, 'def')!],\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst keys = Reflect.ownKeys(value)\n\t\t\tconst values = keys.map((key) => Object.getOwnPropertyDescriptor(value, key)!)\n\t\t\tif (\n\t\t\t\tvalues.some(\n\t\t\t\t\t(property, i) =>\n\t\t\t\t\t\t!('value' in property) &&\n\t\t\t\t\t\t!objectFields.some(({ definition }) => definition === value && keys[i] === 'shape') &&\n\t\t\t\t\t\t!(fallbackDefinitions.has(value) && keys[i] === 'defaultValue'),\n\t\t\t\t)\n\t\t\t)\n\t\t\t\tthrow new Error('Unsupported DTO schema accessor')\n\t\t\tnodes.push({ object: value, exactKeys: true, keys, values })\n\t\t\tfor (const property of values) {\n\t\t\t\tif (\n\t\t\t\t\tproperty.value !== null &&\n\t\t\t\t\tObject(property.value) === property.value &&\n\t\t\t\t\t!(property.value instanceof Function)\n\t\t\t\t)\n\t\t\t\t\tvisit(property.value, depth + 1)\n\t\t\t}\n\t\t} finally {\n\t\t\tactive.delete(value)\n\t\t}\n\t}\n\tvisit(dto, 0)\n\treturn () => {\n\t\tfor (const pattern of patterns)\n\t\t\tif (\n\t\t\t\tpattern.expression.source !== pattern.source ||\n\t\t\t\tpattern.expression.flags !== pattern.flags\n\t\t\t)\n\t\t\t\tthrow new Error('DTO schema mutated after registry construction')\n\t\tfor (const node of nodes) {\n\t\t\tconst keys = node.keys\n\t\t\tif (node.exactKeys && Reflect.ownKeys(node.object).length !== keys.length)\n\t\t\t\tthrow new Error('DTO schema mutated after registry construction')\n\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\t// Regex checks may update lastIndex while parsing; pattern identity is checked above.\n\t\t\t\tif (node.object instanceof RegExp && keys[i] === 'lastIndex') continue\n\t\t\t\tconst current = Object.getOwnPropertyDescriptor(node.object, keys[i])\n\t\t\t\tconst before = node.values[i]\n\t\t\t\tif (\n\t\t\t\t\t!current ||\n\t\t\t\t\tcurrent.value !== before.value ||\n\t\t\t\t\tcurrent.get !== before.get ||\n\t\t\t\t\tcurrent.set !== before.set ||\n\t\t\t\t\tcurrent.enumerable !== before.enumerable\n\t\t\t\t)\n\t\t\t\t\tthrow new Error('DTO schema mutated after registry construction')\n\t\t\t}\n\t\t}\n\t\tfor (const { definition, fields } of objectFields) {\n\t\t\tconst current = definition.shape\n\t\t\tconst keys = Reflect.ownKeys(fields)\n\t\t\tif (\n\t\t\t\tReflect.ownKeys(current).length !== keys.length ||\n\t\t\t\tkeys.some(\n\t\t\t\t\t(key) =>\n\t\t\t\t\t\tObject.getOwnPropertyDescriptor(current, key)?.value !==\n\t\t\t\t\t\tObject.getOwnPropertyDescriptor(fields, key)?.value,\n\t\t\t\t)\n\t\t\t)\n\t\t\t\tthrow new Error('DTO schema mutated after registry construction')\n\t\t}\n\t}\n}\n\nfunction assertRegistryUnchanged(registry: RegistryMetadata): void {\n\tfor (const table of Object.values(registry.metadata)) table.assertUnchanged()\n}\n\ninterface GuardedDtoDefinition extends z.core.$ZodObjectDef {\n\tassertUnchanged(): void\n}\nconst GuardedDtoObject = z.core.$constructor<z.ZodObject>('GuardedDtoObject', (inst, def) => {\n\t// SAFETY: only guardedDto creates this definition; Zod clones retain its guard.\n\tconst guarded = def as GuardedDtoDefinition\n\tz.ZodObject.init(inst, def)\n\t// Run after Zod's own deferred initializers, including its memoizer wrapper.\n\t// Guarding parse alone is too late for first-run schema introspection.\n\tinst._zod.deferred ??= []\n\tinst._zod.deferred.push(() => {\n\t\tconst run = inst._zod.run\n\t\tinst._zod.run = (payload, ctx) => {\n\t\t\ttry {\n\t\t\t\tguarded.assertUnchanged()\n\t\t\t} catch {\n\t\t\t\tpayload.issues.push({\n\t\t\t\t\tcode: 'custom',\n\t\t\t\t\tinput: payload.value,\n\t\t\t\t\tmessage: 'DTO schema mutated after registry construction',\n\t\t\t\t})\n\t\t\t\treturn payload\n\t\t\t}\n\t\t\treturn run(payload, ctx)\n\t\t}\n\t})\n})\nfunction guardedDto(dto: z.ZodObject, assertUnchanged: () => void): z.ZodObject {\n\tconst outputFields = dto.shape\n\tconst def: GuardedDtoDefinition = { ...dto._zod.def, assertUnchanged }\n\tObject.defineProperty(def, 'shape', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget: () => {\n\t\t\tassertUnchanged()\n\t\t\treturn outputFields\n\t\t},\n\t})\n\treturn new GuardedDtoObject(def)\n}\n\nfunction snapshotMetadata(registry: RegistryMetadata): RelationMetadata {\n\tconst tables: Record<string, RelationTableMetadata> = {}\n\tfor (const [name, data] of Object.entries(registry.metadata)) {\n\t\tconst fields: Record<string, RelationFieldMetadata> = {}\n\t\tfor (const [field, validator] of Object.entries(data.fields))\n\t\t\tfields[field] = Object.freeze({\n\t\t\t\tkind: validator.kind,\n\t\t\t\toptional: validator.isOptional === 'optional',\n\t\t\t\tnullable: hasNull(validator),\n\t\t\t\tidTables: Object.freeze(idTables(validator)),\n\t\t\t\tnative: frozenNative(nativeJson(validator)),\n\t\t\t})\n\t\ttables[name] = Object.freeze({\n\t\t\tfields: Object.freeze(fields),\n\t\t\tindexes: Object.freeze(\n\t\t\t\tdata.indexes.map((index) =>\n\t\t\t\t\tObject.freeze({ name: index.name, fields: Object.freeze([...index.fields]) }),\n\t\t\t\t),\n\t\t\t),\n\t\t})\n\t}\n\treturn Object.freeze({ tables: Object.freeze(tables), declarations: registry.declarations })\n}\nfunction hasNull(validator: GenericValidator): boolean {\n\treturn (\n\t\tvalidator.kind === 'null' || (validator.kind === 'union' && validator.members.some(hasNull))\n\t)\n}\nfunction idTables(validator: GenericValidator): string[] {\n\treturn validator.kind === 'id'\n\t\t? [validator.tableName]\n\t\t: validator.kind === 'union'\n\t\t\t? [...new Set(validator.members.flatMap(idTables))].sort()\n\t\t\t: []\n}\nfunction frozenNative(native: ValidatorJSON): Readonly<ValidatorJSON> {\n\tconst snapshot = structuredClone(native)\n\tconst pending: JSONValue[] = [snapshot]\n\twhile (pending.length) {\n\t\tconst next = pending.pop()!\n\t\tif (Object(next) !== next) continue\n\t\t// SAFETY: native JSON metadata contains ordinary arrays/objects; the boxing test excludes primitives.\n\t\tconst container = next as JSONValue[] | { [key: string]: JSONValue }\n\t\tObject.freeze(container)\n\t\tpending.push(...Object.values(container))\n\t}\n\treturn snapshot\n}\n"],"mappings":"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"}
@@ -161,13 +161,70 @@ export declare function paginated<Dto extends z.ZodType>(dto: Dto): {
161
161
  }>>>;
162
162
  }, z.core.$strip>;
163
163
  };
164
- /** Preserves discriminated-union storage while retaining the same table owner. */
164
+ type VariantSchema = z.ZodDiscriminatedUnion<readonly StrictObject<FieldSchemas>[], string>;
165
+ type VariantDiscriminator<Schema extends VariantSchema> = Schema['_zod']['def']['discriminator'];
166
+ type VariantTags<Schema extends VariantSchema> = Extract<z.output<Schema>[VariantDiscriminator<Schema>], string>;
167
+ type VariantBranch<Schema extends VariantSchema, Tag extends string> = Extract<Schema['options'][number], z.ZodObject<{ [Key in VariantDiscriminator<Schema>]: z.ZodLiteral<Tag>; }, z.core.$strict>>;
168
+ type VariantKeys<Schema extends VariantSchema, Tag extends string> = FieldKey<VariantBranch<Schema, Tag>['shape']>;
169
+ /** Boundary mode supports strict object branches with one string literal tag each. */
170
+ export type VariantBoundaryOptions<Schema extends VariantSchema> = {
171
+ discriminator: VariantDiscriminator<Schema>;
172
+ timestamps?: boolean;
173
+ variants: { [Tag in VariantTags<Schema>]: {
174
+ serverFields?: readonly Exclude<VariantKeys<Schema, Tag>, VariantDiscriminator<Schema>>[];
175
+ commandFields?: readonly Exclude<VariantKeys<Schema, Tag>, VariantDiscriminator<Schema>>[];
176
+ publicFields?: readonly (Exclude<VariantKeys<Schema, Tag>, VariantDiscriminator<Schema>> | keyof TimestampFields)[];
177
+ }; };
178
+ };
179
+ type VariantMaskKeys<Config, Mask extends string> = Config extends { [Key in Mask]?: readonly (infer Field)[]; } ? Extract<Field, string> : never;
180
+ type CheckedVariantOptions<Schema extends VariantSchema, Options extends VariantBoundaryOptions<Schema>> = {
181
+ variants: { [Tag in keyof Options['variants']]: Tag extends VariantTags<Schema> ? {
182
+ commandFields?: readonly Exclude<VariantKeys<Schema, Tag>, VariantDiscriminator<Schema> | VariantMaskKeys<Options['variants'][Tag], 'serverFields'>>[];
183
+ publicFields?: readonly (Exclude<VariantKeys<Schema, Tag>, VariantDiscriminator<Schema>> | (Options extends {
184
+ timestamps: true;
185
+ } ? keyof TimestampFields : never))[];
186
+ } : never; };
187
+ };
188
+ type VariantMode = 'storage' | 'document' | 'insert' | 'update' | 'command' | 'commandUpdate' | 'public';
189
+ type VariantFields<Table extends string, Branch extends StrictObject<FieldSchemas>, Discriminator extends string, Config, Timestamps extends boolean, Mode extends VariantMode> = Mode extends 'storage' ? Branch['shape'] & (true extends Timestamps ? TimestampFields : {}) : Mode extends 'document' ? VariantFields<Table, Branch, Discriminator, Config, Timestamps, 'storage'> & SystemFields<Table> : Mode extends 'public' | 'command' ? Pick<VariantFields<Table, Branch, Discriminator, Config, Timestamps, 'storage'>, Extract<Discriminator | VariantMaskKeys<Config, Mode extends 'public' ? 'publicFields' : 'commandFields'>, keyof VariantFields<Table, Branch, Discriminator, Config, Timestamps, 'storage'>>> : Mode extends 'insert' ? Omit<Branch['shape'], VariantMaskKeys<Config, 'serverFields'>> : PartialFields<Omit<VariantFields<Table, Branch, Discriminator, Config, Timestamps, Mode extends 'update' ? 'insert' : 'command'>, Discriminator>> & Pick<Branch['shape'], Extract<Discriminator, keyof Branch['shape']>>;
190
+ type DerivedVariantBranches<Table extends string, Schema extends VariantSchema, Options extends VariantBoundaryOptions<Schema>, Mode extends VariantMode, IncludeId extends boolean, Branches extends readonly StrictObject<FieldSchemas>[]> = { [Index in keyof Branches]: Branches[Index] extends StrictObject<FieldSchemas> ? StrictObject<VariantFields<Table, Branches[Index], VariantDiscriminator<Schema>, Options['variants'][Extract<z.output<Branches[Index]>[VariantDiscriminator<Schema>], keyof Options['variants']>], Options extends {
191
+ timestamps: infer Enabled;
192
+ } ? true extends Enabled ? true : false : false, Mode> & (IncludeId extends true ? {
193
+ _id: Zid<Table>;
194
+ } : {})> : never; };
195
+ type DerivedVariant<Table extends string, Schema extends VariantSchema, Options extends VariantBoundaryOptions<Schema>, Mode extends VariantMode, IncludeId extends boolean = false> = IncludeId extends true ? z.ZodDiscriminatedUnion<DerivedVariantBranches<Table, Schema, Options, Mode, true, Schema['options']>, VariantDiscriminator<Schema>> : z.ZodDiscriminatedUnion<DerivedVariantBranches<Table, Schema, Options, Mode, false, Schema['options']>, VariantDiscriminator<Schema>>;
196
+ export type VariantTableBoundary<Table extends string, Schema extends VariantSchema, Options extends VariantBoundaryOptions<Schema>> = {
197
+ tableName: Table;
198
+ storage: DerivedVariant<Table, Schema, Options, 'storage'>;
199
+ schema: DerivedVariant<Table, Schema, Options, 'document'>;
200
+ insertSchema: DerivedVariant<Table, Schema, Options, 'insert'>;
201
+ updateSchema: DerivedVariant<Table, Schema, Options, 'update'>;
202
+ commandInput: DerivedVariant<Table, Schema, Options, 'command'>;
203
+ publicDto: DerivedVariant<Table, Schema, Options, 'public'>;
204
+ table: TableDefinition<ConvexValidatorFromZod<DerivedVariant<Table, Schema, Options, 'storage'>, 'required'>>;
205
+ dto(): DerivedVariant<Table, Schema, Options, 'public'>;
206
+ dto<const IncludeId extends boolean>(includeId: IncludeId): DerivedVariant<Table, Schema, Options, 'public', IncludeId>;
207
+ toPublicDto(row: z.input<DerivedVariant<Table, Schema, Options, 'storage'>>): z.output<DerivedVariant<Table, Schema, Options, 'public'>>;
208
+ toPublicDto<const IncludeId extends boolean>(row: DtoRow<z.input<DerivedVariant<Table, Schema, Options, 'storage'>>, IncludeId>, includeId: IncludeId): z.output<DerivedVariant<Table, Schema, Options, 'public', IncludeId>>;
209
+ tools: {
210
+ id: StrictObject<{
211
+ id: z.ZodType<GenericId<Table>, string>;
212
+ }>;
213
+ insert: z.ZodType<z.output<DerivedVariant<Table, Schema, Options, 'command'>>, z.input<DerivedVariant<Table, Schema, Options, 'command'>>>;
214
+ update: StrictObject<{
215
+ id: z.ZodType<GenericId<Table>, string>;
216
+ data: z.ZodType<z.output<DerivedVariant<Table, Schema, Options, 'commandUpdate'>>, z.input<DerivedVariant<Table, Schema, Options, 'commandUpdate'>>>;
217
+ }>;
218
+ };
219
+ };
220
+ /** Legacy mode preserves arbitrary storage; the third argument opts into derived boundaries. */
165
221
  export declare function zodVariantTable<Table extends string, Schema extends z.ZodType>(tableName: Table, storage: Schema): {
166
222
  tableName: Table;
167
223
  storage: Schema;
168
224
  insertSchema: Schema;
169
- table: TableDefinition<ConvexValidatorFromZod<Schema, "required">, {}, {}, {}>;
225
+ table: TableDefinition<ConvexValidatorFromZod<Schema, 'required'>>;
170
226
  };
227
+ export declare function zodVariantTable<Table extends string, Schema extends VariantSchema, const Options extends VariantBoundaryOptions<Schema>>(tableName: Table, storage: Schema, options: Options & CheckedVariantOptions<Schema, NoInfer<Options>>): VariantTableBoundary<Table, Schema, Options>;
171
228
  /**
172
229
  * A zid that presents as a plain string in generated JSON schemas so
173
230
  * LLM-tool inputs stay primitive, while keeping the Id type at compile time.
@@ -1,2 +1,2 @@
1
- import{zodToConvex as e}from"./zod-convex.mjs";import{scalarPaginationSchema as t}from"./querying/filters.mjs";import{convexToZod as n,convexToZod as r,zid as i,zid as a}from"convex-helpers/server/zod4";import{defineTable as o,paginationOptsValidator as s}from"convex/server";import{z as c}from"zod";const l={createdAt:c.number().optional(),updatedAt:c.number().optional(),archivedAt:c.number().optional()},u=[`createdAt`,`updatedAt`,`archivedAt`];function d(n,r,i={}){let s=r(a);S(s,[`_id`,`_creationTime`,...u]);let d={...s,...l};C(d,i.serverFields??[],i.commandFields??[],i.publicFields??[]);let f=c.object(d).strict(),p=v(f,n),m=[...u,...i.serverFields??[]],h=i.commandFields??[],g=i.publicFields??[],w=c.object(b(d,m)).strict(),T=w.partial(),E=c.object(y(d,h)).strict(),D=c.object(y(d,g)).strict(),O=/* @__PURE__ */ new Set([`_id`,`_creationTime`,`tenant`,`__proto__`,...u]);function k(e){return A(e)}function A(e){let t=e===!0||e===!1?{_id:e}:e,r=t?.extend??{};for(let e of Object.keys(r)){if(O.has(e)||Object.hasOwn(D.shape,e))throw Error(`DTO extension collision for field "${e}" on table "${n}"`);x(r[e])}if(!t?._id&&Object.keys(r).length===0)return D;let i=c.object({...D.shape,...r}).strict();return t?._id?i.extend({_id:p.shape._id}):i}function j(e,t){let n=t===!0||t===!1?{_id:t}:t;A(t);let r=D.parse(Object.fromEntries(Object.keys(D.shape).map(t=>[t,e[t]]))),i=c.object(n?.extend??{}).strict().parse(n?.values??{}),a={...r,...i};return n?._id&&(a._id=p.shape._id.parse(`_id`in e?e._id:void 0)),a}function M(e){return e?w.omit(e):w}function N(e){return e?T.omit(e):T}let P=e(f),F=o(P);function I(n){return t(e(p).fields,n)}return{tableName:n,schema:p,storage:f,insertSchema:w,updateSchema:T,commandInput:E,publicDto:D,dto:k,toPublicDto:j,paginationOpts:I,table:F,insert:M,update:N,tools:{insert:E,update:c.object({data:E.partial(),id:_(n)}).strict(),id:c.object({id:_(n)}).strict()}}}const f={tenant:c.string().min(1)};function p(e,t,n={}){return d(e,e=>{let n=t(e);return S(n,[`tenant`,`_id`,`_creationTime`,...u]),{...n,...f}},{...n,serverFields:[...n.serverFields??[],`tenant`]})}function m(...e){let t={};for(let n of e)for(let[e,r]of Object.entries(n)){if(e in t)throw Error(`Table "${e}" is declared by more than one module`);t[e]=r}return t}function h(e){return{args:{paginationOpts:r(s)},result:c.object({page:c.array(e),isDone:c.boolean(),continueCursor:c.string(),splitCursor:c.string().nullable().optional(),pageStatus:c.enum([`SplitRecommended`,`SplitRequired`]).nullable().optional()})}}function g(t,n){return{tableName:t,storage:n,insertSchema:n,table:o(e(n))}}function _(e){let t=a(e);return c.string().refine(e=>t.safeParse(e).success).describe(`Convex document id for table "${e}"; validated against the table by Convex`)}function v(e,t){return e.extend({_id:a(t),_creationTime:c.number()})}function y(e,t){return Object.fromEntries(t.map(t=>[t,e[t]]))}function b(e,t){let n=new Set(t);return Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)))}function x(e,t=/* @__PURE__ */ new Set){if(t.has(e))return;t.add(e);let n=e._zod.def,r=()=>{throw Error(`DTO extensions require supported value-preserving validation schemas`)};`coerce`in n&&n.coerce&&r(),`normalize`in n&&n.normalize&&r();let i=e=>x(e,t);for(let e of n.checks??[])if(e._zod.def.check===`overwrite`&&r(),`normalize`in e._zod.def&&e._zod.def.normalize&&r(),e._zod.def.check===`property`&&i(e._zod.def.schema),e._zod.def.check===`properties`)for(let t of Object.values(e._zod.def.shape))i(t);switch(n.type){case`string`:case`number`:case`boolean`:case`bigint`:case`date`:case`symbol`:case`null`:case`undefined`:case`void`:case`never`:case`literal`:case`enum`:return;case`object`:for(let e of Object.values(n.shape))i(e);n.catchall&&i(n.catchall);return;case`array`:i(n.element);return;case`optional`:case`nullable`:case`nonoptional`:i(n.innerType);return;case`union`:for(let e of n.options)i(e);return;case`intersection`:i(n.left),i(n.right);return;case`tuple`:for(let e of n.items)i(e);n.rest&&i(n.rest);return;case`record`:i(n.keyType),i(n.valueType);return;default:r()}}function S(e,t){for(let n of t)if(Object.hasOwn(e,n))throw Error(`Reserved table field "${n}" cannot be declared`)}function C(e,t,n,r){for(let i of[...t,...n,...r])if(!Object.hasOwn(e,i))throw Error(`Unknown table field "${i}"`);let i=/* @__PURE__ */ new Set([...u,...t]);for(let e of n)if(i.has(e))throw Error(`Server-owned field "${e}" cannot be a command input`)}export{u as TIMESTAMP_FIELDS,n as convexToZod,m as createModule,_ as jsonSafeZid,h as paginated,p as tenantTable,i as zid,d as zodTable,e as zodToConvex,g as zodVariantTable};
1
+ import{zodToConvex as e}from"./zod-convex.mjs";import{scalarPaginationSchema as t}from"./querying/filters.mjs";import{convexToZod as n,convexToZod as r,zid as i,zid as a}from"convex-helpers/server/zod4";import{defineTable as o,paginationOptsValidator as s}from"convex/server";import{z as c}from"zod";const l={createdAt:c.number().optional(),updatedAt:c.number().optional(),archivedAt:c.number().optional()},u=[`createdAt`,`updatedAt`,`archivedAt`];function d(n,r,i={}){let s=r(a);w(s,[`_id`,`_creationTime`,...u]);let d={...s,...l};T(d,i.serverFields??[],i.commandFields??[],i.publicFields??[]);let f=c.object(d).strict(),p=b(f,n),m=[...u,...i.serverFields??[]],h=i.commandFields??[],g=i.publicFields??[],v=c.object(S(d,m)).strict(),y=v.partial(),E=c.object(x(d,h)).strict(),D=c.object(x(d,g)).strict(),O=/* @__PURE__ */ new Set([`_id`,`_creationTime`,`tenant`,`__proto__`,...u]);function k(e){return A(e)}function A(e){let t=e===!0||e===!1?{_id:e}:e,r=t?.extend??{};for(let e of Object.keys(r)){if(O.has(e)||Object.hasOwn(D.shape,e))throw Error(`DTO extension collision for field "${e}" on table "${n}"`);C(r[e])}if(!t?._id&&Object.keys(r).length===0)return D;let i=c.object({...D.shape,...r}).strict();return t?._id?i.extend({_id:p.shape._id}):i}function j(e,t){let n=t===!0||t===!1?{_id:t}:t;A(t);let r=D.parse(Object.fromEntries(Object.keys(D.shape).map(t=>[t,e[t]]))),i=c.object(n?.extend??{}).strict().parse(n?.values??{}),a={...r,...i};return n?._id&&(a._id=p.shape._id.parse(`_id`in e?e._id:void 0)),a}function M(e){return e?v.omit(e):v}function N(e){return e?y.omit(e):y}let P=e(f),F=o(P);function I(n){return t(e(p).fields,n)}return{tableName:n,schema:p,storage:f,insertSchema:v,updateSchema:y,commandInput:E,publicDto:D,dto:k,toPublicDto:j,paginationOpts:I,table:F,insert:M,update:N,tools:{insert:E,update:c.object({data:E.partial(),id:_(n)}).strict(),id:c.object({id:_(n)}).strict()}}}const f={tenant:c.string().min(1)};function p(e,t,n={}){return d(e,e=>{let n=t(e);return w(n,[`tenant`,`_id`,`_creationTime`,...u]),{...n,...f}},{...n,serverFields:[...n.serverFields??[],`tenant`]})}function m(...e){let t={};for(let n of e)for(let[e,r]of Object.entries(n)){if(e in t)throw Error(`Table "${e}" is declared by more than one module`);t[e]=r}return t}function h(e){return{args:{paginationOpts:r(s)},result:c.object({page:c.array(e),isDone:c.boolean(),continueCursor:c.string(),splitCursor:c.string().nullable().optional(),pageStatus:c.enum([`SplitRecommended`,`SplitRequired`]).nullable().optional()})}}function g(t,n,r){return r?v(t,n,r):{tableName:t,storage:n,insertSchema:n,table:o(e(n))}}function _(e){let t=a(e);return c.string().refine(e=>t.safeParse(e).success).describe(`Convex document id for table "${e}"; validated against the table by Convex`)}function v(t,n,r){if(!(n instanceof c.ZodDiscriminatedUnion)||n.def.discriminator!==r.discriminator)throw Error(`Variant boundaries require a discriminated union with the configured discriminator`);if(n.def.checks?.length)throw Error(`Variant boundaries do not support union-level refinements`);let i=r.discriminator;if([`_id`,`_creationTime`,...u].includes(i))throw Error(`Variant discriminator cannot be a reserved field`);let s=/* @__PURE__ */ new Map;for(let e of n.options){if(!(e instanceof c.ZodObject)||!(e.def.catchall instanceof c.ZodNever))throw Error(`Variant boundaries require strict object branches`);if(e.def.checks?.length)throw Error(`Variant boundaries do not support object-level refinements`);try{C(e,/* @__PURE__ */ new Set,!0)}catch(e){throw Error(`Variant boundaries require supported value-preserving field validators without object catchalls`,{cause:e})}let n=e.shape[i];if(!(n instanceof c.ZodLiteral)||n.values.size!==1)throw Error(`Variant branches require one string literal discriminator`);let a=[...n.values][0];if(!c.string().safeParse(a).success)throw Error(`Variant branches require a string discriminator`);let o=a;if(s.has(o))throw Error(`Duplicate variant discriminator "${o}"`);if(!Object.hasOwn(r.variants,o))throw Error(`Missing variant configuration "${o}"`);let d=r.variants[o];w(e.shape,[`_id`,`_creationTime`,...u]);let f={...e.shape};r.timestamps&&Object.assign(f,l),T(f,d.serverFields??[],d.commandFields??[],d.publicFields??[]);for(let e of[d.serverFields,d.commandFields,d.publicFields])if(e?.includes(i))throw Error(`The variant discriminator is retained automatically and cannot appear in masks`);let p=c.strictObject(f),m=c.strictObject(S(f,[...u,...d.serverFields??[]])),h=c.strictObject(x(f,[i,...d.commandFields??[]])),g=e=>e.partial().extend({[i]:n});s.set(o,{storage:p,document:b(p,t),insert:m,update:g(m),command:h,commandUpdate:g(h),public:c.strictObject(x(f,[i,...d.publicFields??[]]))})}for(let e of Object.keys(r.variants))if(!s.has(e))throw Error(`Unknown variant configuration "${e}"`);function d(e,n=!1,r=!1){let o=[...s.values()].map(i=>{let o=i[e];return r?c.strictObject(Object.fromEntries(Object.entries(o.shape).map(([e,t])=>[e,y(t)]))):n?o.extend({_id:a(t)}):o});if(!o.length)throw Error(`Variant boundaries require at least one branch`);return c.discriminatedUnion(i,o)}let f=d(`storage`),p=d(`document`),m=d(`insert`),h=d(`update`),g=d(`command`),v=d(`public`);function E(e=!1){return e?d(`public`,!0):v}function D(e,n=!1){let r=c.string().parse(e[i]),o=s.get(r);if(!o)throw Error(`Unknown variant discriminator "${r}"`);let l=n?o.public.extend({_id:a(t)}):o.public;return l.parse(Object.fromEntries(Object.keys(l.shape).filter(t=>Object.hasOwn(e,t)).map(t=>[t,e[t]])))}return{tableName:t,storage:f,schema:p,insertSchema:m,updateSchema:h,commandInput:g,publicDto:v,dto:E,toPublicDto:D,table:o(e(f)),tools:{id:c.strictObject({id:_(t)}),insert:d(`command`,!1,!0),update:c.strictObject({id:_(t),data:d(`commandUpdate`,!1,!0)})}}}function y(t){if(!(t instanceof c.ZodType))throw Error(`Variant tools require classic Zod field schemas`);if(t instanceof c.ZodBigInt||t instanceof c.ZodLiteral&&[...t.values].some(e=>c.bigint().safeParse(e).success))throw Error(`Variant tool command fields cannot contain bigint; JSON Schema cannot represent it`);let n=e(t);if(n.kind===`id`){let e=_(n.tableName);return n.isOptional===`optional`?e.optional().refine(e=>t.safeParse(e).success):e.refine(e=>t.safeParse(e).success)}if(t instanceof c.ZodOptional||t instanceof c.ZodNullable||t instanceof c.ZodNonOptional)return t.clone({...t.def,innerType:y(t.unwrap())});if(t instanceof c.ZodArray)return t.clone({...t.def,element:y(t.element)});if(t instanceof c.ZodObject){let e=Object.fromEntries(Object.entries(t.shape).map(([e,t])=>[e,y(t)]));return t.clone(Object.assign({},t.def,{shape:e}))}return t instanceof c.ZodUnion?t.clone({...t.def,options:t.options.map(y)}):t instanceof c.ZodRecord?t.clone({...t.def,keyType:y(t.keyType),valueType:y(t.valueType)}):t instanceof c.ZodTuple?t.clone({...t.def,items:t.def.items.map(y),rest:t.def.rest?y(t.def.rest):null}):t instanceof c.ZodIntersection?t.clone({...t.def,left:y(t.def.left),right:y(t.def.right)}):t}function b(e,t){return e.extend({_id:a(t),_creationTime:c.number()})}function x(e,t){return Object.fromEntries(t.map(t=>[t,e[t]]))}function S(e,t){let n=new Set(t);return Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)))}function C(t,n=/* @__PURE__ */ new Set,r=!1){if(n.has(t))return;n.add(t);let i=t._zod.def,a=()=>{throw Error(`DTO extensions require supported value-preserving validation schemas`)};`coerce`in i&&i.coerce&&a(),`normalize`in i&&i.normalize&&a();let o=e=>C(e,n,r);for(let e of i.checks??[])if(e._zod.def.check===`overwrite`&&a(),`normalize`in e._zod.def&&e._zod.def.normalize&&a(),e._zod.def.check===`property`&&o(e._zod.def.schema),e._zod.def.check===`properties`)for(let t of Object.values(e._zod.def.shape))o(t);switch(i.type){case`custom`:if(r&&e(t).kind===`id`)return;a();return;case`string`:case`number`:case`boolean`:case`bigint`:case`date`:case`symbol`:case`null`:case`undefined`:case`void`:case`never`:case`literal`:case`enum`:return;case`object`:if(r&&i.catchall&&i.catchall._zod.def.type!==`never`)throw Error(`Variant fields cannot use object catchalls; use a record field instead`);for(let e of Object.values(i.shape))o(e);i.catchall&&o(i.catchall);return;case`array`:o(i.element);return;case`optional`:case`nullable`:case`nonoptional`:o(i.innerType);return;case`union`:for(let e of i.options)o(e);return;case`intersection`:o(i.left),o(i.right);return;case`tuple`:for(let e of i.items)o(e);i.rest&&o(i.rest);return;case`record`:o(i.keyType),o(i.valueType);return;default:a()}}function w(e,t){for(let n of t)if(Object.hasOwn(e,n))throw Error(`Reserved table field "${n}" cannot be declared`)}function T(e,t,n,r){for(let i of[...t,...n,...r])if(!Object.hasOwn(e,i))throw Error(`Unknown table field "${i}"`);let i=/* @__PURE__ */ new Set([...u,...t]);for(let e of n)if(i.has(e))throw Error(`Server-owned field "${e}" cannot be a command input`)}export{u as TIMESTAMP_FIELDS,n as convexToZod,m as createModule,_ as jsonSafeZid,h as paginated,p as tenantTable,i as zid,d as zodTable,e as zodToConvex,g as zodVariantTable};
2
2
  //# sourceMappingURL=zod-table.mjs.map