{"version":3,"sources":["../../../src/orm/errors/migration.ts","../../../src/orm/errors/not-found.ts","../../../src/orm/errors/replay.ts","../../../src/orm/event-log/executor.ts","../../../src/orm/event-log/schema.ts","../../../src/orm/schema.ts","../../../src/orm/event-log/registry.ts","../../../src/orm/event-log/walker.ts","../../../src/orm/event-log/event-log.ts","../../../src/orm/migrations/diff.ts","../../../src/orm/migrations/codegen.ts","../../../src/orm/migrations/apply.ts","../../../src/orm/migrations/pending.ts","../../../src/orm/migrations/validate.ts","../../../src/orm/migrations/migrator.ts","../../../src/orm/query-options.ts","../../../src/orm/relations.ts","../../../src/orm/repo/internals/computeds.ts","../../../src/orm/repo/internals/query-shape.ts","../../../src/orm/schema-validations.ts","../../../src/orm/repo/internals/executors.ts","../../../src/orm/repo/internals/preloads.ts","../../../src/orm/repo/builders.ts","../../../src/orm/repo/als.ts","../../../src/orm/repo/repo.ts"],"sourcesContent":["import { EquippedError } from '../../errors'\n\nexport type OrmMigrationPhase = 'lock' | 'load' | 'session' | 'user' | 'record'\n\nexport class OrmMigrationError extends EquippedError {\n\treadonly id: string\n\treadonly phase: OrmMigrationPhase\n\n\tconstructor(opts: { id: string; phase: OrmMigrationPhase; cause: unknown }) {\n\t\tsuper(`Migration failed at phase '${opts.phase}' for migration '${opts.id}'`, { id: opts.id, phase: opts.phase }, opts.cause)\n\t\tthis.id = opts.id\n\t\tthis.phase = opts.phase\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { EquippedError } = await import('../../errors')\n\n\tdescribe('OrmMigrationError', () => {\n\t\ttest('stores id, phase, and cause on the instance', () => {\n\t\t\tconst cause = new Error('connection lost')\n\t\t\tconst err = new OrmMigrationError({ id: '0001-add-users', phase: 'user', cause })\n\t\t\texpect(err.id).toBe('0001-add-users')\n\t\t\texpect(err.phase).toBe('user')\n\t\t\texpect(err.cause).toBe(cause)\n\t\t})\n\n\t\ttest('message includes phase and migration id', () => {\n\t\t\tconst err = new OrmMigrationError({ id: '0002-add-index', phase: 'session', cause: 'boom' })\n\t\t\texpect(err.message).toBe(\"Migration failed at phase 'session' for migration '0002-add-index'\")\n\t\t})\n\n\t\ttest('instanceof EquippedError is true', () => {\n\t\t\tconst err = new OrmMigrationError({ id: 'x', phase: 'lock', cause: null })\n\t\t\texpect(err).toBeInstanceOf(OrmMigrationError)\n\t\t\texpect(err).toBeInstanceOf(EquippedError)\n\t\t})\n\n\t\ttest('discriminates from sibling error classes', async () => {\n\t\t\tconst { OrmValidationError } = await import('./validation')\n\t\t\tconst { OrmNotFoundError } = await import('./not-found')\n\t\t\tconst { OrmReplayError } = await import('./replay')\n\t\t\tconst err = new OrmMigrationError({ id: 'x', phase: 'load', cause: null })\n\t\t\texpect(err).not.toBeInstanceOf(OrmValidationError)\n\t\t\texpect(err).not.toBeInstanceOf(OrmNotFoundError)\n\t\t\texpect(err).not.toBeInstanceOf(OrmReplayError)\n\t\t})\n\n\t\ttest('context carries id and phase', () => {\n\t\t\tconst err = new OrmMigrationError({ id: '0003-drop-table', phase: 'record', cause: 'fail' })\n\t\t\texpect((err.context as any).id).toBe('0003-drop-table')\n\t\t\texpect((err.context as any).phase).toBe('record')\n\t\t})\n\n\t\ttest.each(['lock', 'load', 'session', 'user', 'record'] as const)('phase %s works', (phase) => {\n\t\t\tconst err = new OrmMigrationError({ id: 'test', phase, cause: null })\n\t\t\texpect(err.phase).toBe(phase)\n\t\t})\n\t})\n}\n","import { EquippedError } from '../../errors'\nimport { Filter, FilterGroup } from '../filter'\n\nexport type OrmNotFoundOperation = 'findOne' | 'updateOne' | 'deleteOne'\n\nfunction renderFilter(group: FilterGroup): string {\n\tif (\n\t\tgroup.op === 'and'\n\t\t&& group.children.length === 1\n\t\t&& group.children[0] instanceof Filter\n\t\t&& group.children[0].op === 'eq'\n\t) {\n\t\tconst f = group.children[0]\n\t\treturn `${f.field}=${f.value}`\n\t}\n\treturn renderFilterTree(group)\n}\n\nfunction renderFilterTree(node: FilterGroup | Filter): string {\n\tif (node instanceof Filter) {\n\t\treturn `${node.field} ${node.op} ${JSON.stringify(node.value)}`\n\t}\n\tconst parts = node.children.map((c) => renderFilterTree(c))\n\tif (parts.length === 1) return parts[0]\n\treturn `(${parts.join(` ${node.op} `)})`\n}\n\nexport class OrmNotFoundError extends EquippedError {\n\treadonly schema: string\n\treadonly operation: OrmNotFoundOperation\n\treadonly where: FilterGroup\n\n\tconstructor(opts: {\n\t\tschema: string\n\t\toperation: OrmNotFoundOperation\n\t\twhere: FilterGroup\n\t\tmessage?: string\n\t}) {\n\t\tconst msg = opts.message ?? `${opts.schema}.${opts.operation}: no row matched ${renderFilter(opts.where)}`\n\t\tsuper(msg, {\n\t\t\tschema: opts.schema,\n\t\t\toperation: opts.operation,\n\t\t\twhere: opts.where,\n\t\t})\n\t\tthis.schema = opts.schema\n\t\tthis.operation = opts.operation\n\t\tthis.where = opts.where\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { OrmValidationError } = await import('./validation')\n\n\tdescribe('OrmNotFoundError', () => {\n\t\tdescribe('carrier construction', () => {\n\t\t\ttest('stores schema, operation, and where on the instance', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: 'findOne', where })\n\t\t\t\texpect(err.schema).toBe('users')\n\t\t\t\texpect(err.operation).toBe('findOne')\n\t\t\t\texpect(err.where).toBe(where)\n\t\t\t})\n\n\t\t\ttest('accepts all three operation literals', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tfor (const op of ['findOne', 'updateOne', 'deleteOne'] as const) {\n\t\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: op, where })\n\t\t\t\t\texpect(err.operation).toBe(op)\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tdescribe('default message generation', () => {\n\t\t\ttest('PK-keyed filter renders as id=<pk>', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'abc-123')\n\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: 'findOne', where })\n\t\t\t\texpect(err.message).toBe('users.findOne: no row matched id=abc-123')\n\t\t\t})\n\n\t\t\ttest('filter-based rendering shows the filter tree', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('email', 'a@b.com').gt('age', 18)\n\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: 'updateOne', where })\n\t\t\t\texpect(err.message).toBe('users.updateOne: no row matched (email eq \"a@b.com\" and age gt 18)')\n\t\t\t})\n\n\t\t\ttest('single non-eq filter renders without parens', () => {\n\t\t\t\tconst where = FilterGroup.create().gt('age', 18)\n\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: 'deleteOne', where })\n\t\t\t\texpect(err.message).toBe('users.deleteOne: no row matched age gt 18')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('custom message override', () => {\n\t\t\ttest('custom message replaces the default', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tconst err = new OrmNotFoundError({\n\t\t\t\t\tschema: 'users',\n\t\t\t\t\toperation: 'findOne',\n\t\t\t\t\twhere,\n\t\t\t\t\tmessage: 'user must exist',\n\t\t\t\t})\n\t\t\t\texpect(err.message).toBe('user must exist')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('instanceof discrimination', () => {\n\t\t\ttest('instanceof OrmNotFoundError is true', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: 'findOne', where })\n\t\t\t\texpect(err).toBeInstanceOf(OrmNotFoundError)\n\t\t\t})\n\n\t\t\ttest('instanceof EquippedError is true', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: 'findOne', where })\n\t\t\t\texpect(err).toBeInstanceOf(EquippedError)\n\t\t\t})\n\n\t\t\ttest('instanceof OrmNotFoundError discriminates from OrmValidationError', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tconst notFound = new OrmNotFoundError({ schema: 'users', operation: 'findOne', where })\n\t\t\t\tconst validation = new OrmValidationError('validation', 'users', 'createOne', [])\n\t\t\t\texpect(notFound).not.toBeInstanceOf(OrmValidationError)\n\t\t\t\texpect(validation).not.toBeInstanceOf(OrmNotFoundError)\n\t\t\t})\n\n\t\t\ttest('both are instanceof EquippedError', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tconst notFound = new OrmNotFoundError({ schema: 'users', operation: 'findOne', where })\n\t\t\t\tconst validation = new OrmValidationError('validation', 'users', 'createOne', [])\n\t\t\t\texpect(notFound).toBeInstanceOf(EquippedError)\n\t\t\t\texpect(validation).toBeInstanceOf(EquippedError)\n\t\t\t})\n\t\t})\n\t})\n}\n","import { EquippedError } from '../../errors'\n\nexport class OrmReplayError extends EquippedError {\n\treadonly key: string\n\treadonly eventName: string\n\n\tconstructor(opts: { key: string; name: string; cause: unknown }) {\n\t\tsuper(`EventLog replay failed on event ${opts.name} (key=${opts.key})`, { key: opts.key, name: opts.name }, opts.cause)\n\t\tthis.key = opts.key\n\t\tthis.eventName = opts.name\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { EquippedError } = await import('../../errors')\n\tconst { OrmValidationError } = await import('./validation')\n\tconst { OrmNotFoundError } = await import('./not-found')\n\n\tdescribe('OrmReplayError', () => {\n\t\ttest('stores key, eventName, and cause on the instance', () => {\n\t\t\tconst cause = new Error('handler blew up')\n\t\t\tconst err = new OrmReplayError({ key: 'evt-123', name: 'user.signup', cause })\n\t\t\texpect(err.key).toBe('evt-123')\n\t\t\texpect(err.eventName).toBe('user.signup')\n\t\t\texpect(err.cause).toBe(cause)\n\t\t})\n\n\t\ttest('message includes handler name and key', () => {\n\t\t\tconst err = new OrmReplayError({ key: 'evt-456', name: 'order.placed', cause: 'boom' })\n\t\t\texpect(err.message).toBe('EventLog replay failed on event order.placed (key=evt-456)')\n\t\t})\n\n\t\ttest('instanceof EquippedError is true', () => {\n\t\t\tconst err = new OrmReplayError({ key: 'k', name: 'n', cause: null })\n\t\t\texpect(err).toBeInstanceOf(OrmReplayError)\n\t\t\texpect(err).toBeInstanceOf(EquippedError)\n\t\t})\n\n\t\ttest('discriminates from OrmValidationError and OrmNotFoundError', () => {\n\t\t\tconst err = new OrmReplayError({ key: 'k', name: 'n', cause: null })\n\t\t\texpect(err).not.toBeInstanceOf(OrmValidationError)\n\t\t\texpect(err).not.toBeInstanceOf(OrmNotFoundError)\n\t\t})\n\n\t\ttest('context carries key and name', () => {\n\t\t\tconst err = new OrmReplayError({ key: 'evt-789', name: 'payment.charged', cause: 'fail' })\n\t\t\texpect((err.context as any).key).toBe('evt-789')\n\t\t\texpect((err.context as any).name).toBe('payment.charged')\n\t\t})\n\t})\n}\n","import { ulid } from 'ulid'\nimport { v } from 'valleyed'\n\nimport { OrmValidationError } from '../errors'\nimport type { EventContext, HandlerDef } from './registry'\nimport { EventLogSchema } from './schema'\nimport type { Repo } from '../repo/repo'\n\nexport async function fire<R>(\n\trepo: Repo<any>,\n\tname: string,\n\tdef: HandlerDef,\n\tpayload: unknown,\n\tctx?: { by?: string; at?: Date },\n): Promise<R> {\n\tconst validated = v.validate(def.pipe, payload)\n\tif (!validated.valid) {\n\t\tthrow new OrmValidationError('validation', 'event_log', 'fire', [\n\t\t\t{ cause: validated.error },\n\t\t])\n\t}\n\n\treturn repo.session(async () => {\n\t\tconst at = ctx?.at ?? new Date()\n\t\tconst ts = at.getTime()\n\t\tconst key = ulid(ts)\n\t\tconst by = ctx?.by ?? null\n\n\t\tawait repo.on(EventLogSchema).one().create({\n\t\t\tkey,\n\t\t\tname,\n\t\t\tts,\n\t\t\tbody: validated.value,\n\t\t\tby,\n\t\t})\n\n\t\tconst evCtx: EventContext = {\n\t\t\tkey,\n\t\t\tname,\n\t\t\tts,\n\t\t\tbody: validated.value,\n\t\t\tby,\n\t\t\tat,\n\t\t\tfirstRun: true,\n\t\t}\n\n\t\treturn await def.handle(validated.value, evCtx) as R\n\t})\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { Repo } = await import('../repo/repo')\n\tconst { OrmValidationError } = await import('../errors')\n\ttype EventContext = import('./registry').EventContext\n\tconst { EventLogSchema } = await import('./schema')\n\n\tfunction makeRepo() {\n\t\tconst adapter = InMemoryAdapter.create({})\n\t\treturn new Repo({\n\t\t\tadapter,\n\t\t\tresolve: (s) => {\n\t\t\t\tif (s === EventLogSchema) return { table: 'events' }\n\t\t\t\treturn { table: s.name }\n\t\t\t},\n\t\t})\n\t}\n\n\tdescribe('FireExecutor', () => {\n\t\ttest('payload validation rejects → throws OrmValidationError, no row persisted', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ email: v.string() }),\n\t\t\t\thandle: async () => 'ok',\n\t\t\t}\n\t\t\tawait expect(fire(repo, 'test', def, { email: 123 })).rejects.toThrow(OrmValidationError)\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(rows).toHaveLength(0)\n\t\t})\n\n\t\ttest('happy path persists row and runs handler', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tlet called = false\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ email: v.string() }),\n\t\t\t\thandle: async (payload: { email: string }) => {\n\t\t\t\t\tcalled = true\n\t\t\t\t\treturn `created-${payload.email}`\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tconst result = await fire(repo, 'user.signup', def, { email: 'a@b.com' }, { by: 'admin' })\n\n\t\t\texpect(result).toBe('created-a@b.com')\n\t\t\texpect(called).toBe(true)\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(rows).toHaveLength(1)\n\t\t\texpect(rows[0].name).toBe('user.signup')\n\t\t\texpect(rows[0].body).toEqual({ email: 'a@b.com' })\n\t\t\texpect(rows[0].by).toBe('admin')\n\t\t\texpect(typeof rows[0].ts).toBe('number')\n\t\t\texpect(typeof rows[0].key).toBe('string')\n\t\t})\n\n\t\ttest('handler receives EventContext with firstRun: true', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tlet captured: EventContext | undefined\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ x: v.number() }),\n\t\t\t\thandle: async (_payload: unknown, ctx: EventContext) => {\n\t\t\t\t\tcaptured = ctx\n\t\t\t\t},\n\t\t\t}\n\t\t\tconst at = new Date('2025-01-15T12:00:00Z')\n\n\t\t\tawait fire(repo, 'test.event', def, { x: 42 }, { by: 'user-1', at })\n\n\t\t\texpect(captured).toBeDefined()\n\t\t\texpect(captured!.firstRun).toBe(true)\n\t\t\texpect(captured!.name).toBe('test.event')\n\t\t\texpect(captured!.by).toBe('user-1')\n\t\t\texpect(captured!.at).toEqual(at)\n\t\t\texpect(captured!.ts).toBe(at.getTime())\n\t\t\texpect(captured!.body).toEqual({ x: 42 })\n\t\t\texpect(typeof captured!.key).toBe('string')\n\t\t})\n\n\t\ttest('handler throws → no EventLogSchema row remains', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ val: v.string() }),\n\t\t\t\thandle: async () => {\n\t\t\t\t\tthrow new Error('handler blew up')\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tawait expect(fire(repo, 'boom', def, { val: 'x' })).rejects.toThrow('handler blew up')\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(rows).toHaveLength(0)\n\t\t})\n\n\t\ttest('by defaults to null when not provided', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst def = {\n\t\t\t\tpipe: v.string(),\n\t\t\t\thandle: async () => {},\n\t\t\t}\n\n\t\t\tawait fire(repo, 'test', def, 'hello')\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(rows).toHaveLength(1)\n\t\t\texpect(rows[0].by).toBeNull()\n\t\t})\n\t})\n}\n","import { ulid } from 'ulid'\nimport { v } from 'valleyed'\n\nimport { Schema } from '../schema'\n\nexport const EventLogSchema = Schema.from('event_log')\n\t.pk('key', v.string(), () => ulid())\n\t.field('name', v.string())\n\t.field('ts', v.number())\n\t.field('body', v.any())\n\t.field('by', v.nullable(v.string()))\n\t.build()\n","import { v, type Pipe, type PipeOutput } from 'valleyed'\n\nimport { ComputedField, SchemaField, type AnyComputedField, type AnySchemaField } from './fields'\nimport type { Prettify } from './utils'\n\ntype AnyPrimaryKeyField = SchemaField<string, Pipe<any, any>, true>\n\nexport type AnySchema = Schema<string, AnyPrimaryKeyField, Record<string, AnySchemaField>, Record<string, AnyComputedField>>\n\nexport type SchemaComputedDefs<S extends AnySchema> = S extends Schema<any, any, any, infer C> ? C : Record<string, AnyComputedField>\n\nexport type SchemaPersistedOutput<S extends AnySchema> = Prettify<{\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends SchemaField<any, infer P, any> ? PipeOutput<P> : never\n}>\n\nexport type SchemaComputedOutput<S extends AnySchema> = Prettify<{\n\t[K in keyof SchemaComputedDefs<S>]: SchemaComputedDefs<S>[K] extends ComputedField<any, infer P, any> ? PipeOutput<P> : never\n}>\n\nexport type SchemaOutput<S extends AnySchema> = Prettify<{\n\t[K in keyof SchemaPersistedOutput<S> | keyof SchemaComputedOutput<S>]: K extends keyof SchemaPersistedOutput<S>\n\t\t? SchemaPersistedOutput<S>[K]\n\t\t: K extends keyof SchemaComputedOutput<S>\n\t\t\t? SchemaComputedOutput<S>[K]\n\t\t\t: never\n}>\n\nexport type SchemaFields<S extends AnySchema> =\n\tS extends Schema<any, infer PKField, infer F, any>\n\t\t? PKField extends AnySchemaField\n\t\t\t? Prettify<Record<PKField['name'], PKField> & F>\n\t\t\t: F\n\t\t: never\n\nexport type SchemaTaggedFields<S extends AnySchema> = {\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] & { readonly __schema?: S }\n}\n\nexport class SchemaBuilder<\n\tN extends string,\n\tPKField extends AnyPrimaryKeyField | never = never,\n\tF extends Record<string, AnySchemaField> = {},\n\tC extends Record<string, AnyComputedField> = {},\n> {\n\t#name: N\n\t#pkField: PKField | null\n\t#fieldDefs: F\n\t#computedDefs: C\n\n\tconstructor(name: N, pkField?: PKField | null, fieldDefs?: F, computedDefs?: C) {\n\t\tthis.#name = name\n\t\tthis.#pkField = pkField ?? null\n\t\tthis.#fieldDefs = fieldDefs ?? ({} as F)\n\t\tthis.#computedDefs = computedDefs ?? ({} as C)\n\t}\n\n\tget name() {\n\t\treturn this.#name\n\t}\n\n\tpk<K extends string, P extends Pipe<any, any>>(\n\t\tname: [PKField] extends [never] ? K : never,\n\t\tpipe: P,\n\t\tgenerate: () => PipeOutput<P>,\n\t): SchemaBuilder<N, SchemaField<K, P, true>, F> {\n\t\treturn new SchemaBuilder<N, SchemaField<K, P, true>, F>(\n\t\t\tthis.#name,\n\t\t\tnew SchemaField(name, pipe, { onCreate: generate }),\n\t\t\t{ ...this.#fieldDefs } as F,\n\t\t\tundefined,\n\t\t)\n\t}\n\n\tfield<\n\t\tK extends string,\n\t\tP extends Pipe<any, any>,\n\t\tO extends { onCreate?: () => PipeOutput<P>; onUpdate?: () => PipeOutput<P> } | undefined = undefined,\n\t>(\n\t\tname: K extends keyof F ? never : K,\n\t\tpipe: P,\n\t\topts?: O,\n\t): SchemaBuilder<\n\t\tN,\n\t\tPKField,\n\t\t{\n\t\t\t[Key in keyof F | K]: Key extends K\n\t\t\t\t? SchemaField<K, P, [O] extends [{ onCreate: () => any }] ? true : false>\n\t\t\t\t: Key extends keyof F\n\t\t\t\t\t? F[Key]\n\t\t\t\t\t: never\n\t\t}\n\t> {\n\t\tconst nextFields = { ...this.#fieldDefs, [name]: new SchemaField(name, pipe, opts) }\n\t\treturn new SchemaBuilder(this.#name, this.#pkField, nextFields, { ...this.#computedDefs }) as any\n\t}\n\n\tcomputed<\n\t\tK extends string,\n\t\tDeps extends readonly (keyof SchemaPersistedOutput<Schema<N, PKField, F, C>> & string)[],\n\t\tP extends Pipe<any, any>,\n\t>(\n\t\tname: K extends keyof SchemaPersistedOutput<Schema<N, PKField, F, C>> | keyof C ? never : K,\n\t\tdeps: Deps,\n\t\tpipe: P,\n\t\tcompute: (data: Pick<SchemaPersistedOutput<Schema<N, PKField, F, C>>, Deps[number]>) => PipeOutput<P>,\n\t): SchemaBuilder<\n\t\tN,\n\t\tPKField,\n\t\tF,\n\t\t{\n\t\t\t[Key in keyof C | K]: Key extends K ? ComputedField<K, P, Deps> : Key extends keyof C ? C[Key] : never\n\t\t}\n\t> {\n\t\tconst nextComputed = { ...this.#computedDefs, [name]: new ComputedField(name as K, pipe, deps, compute as any) }\n\t\treturn new SchemaBuilder(this.#name, this.#pkField, { ...this.#fieldDefs }, nextComputed) as any\n\t}\n\n\tbuild(this: [PKField] extends [never] ? never : SchemaBuilder<N, PKField, F, C>): Schema<N, PKField, F, C> {\n\t\tconst self = this as unknown as SchemaBuilder<N, PKField, F, C>\n\t\treturn new Schema<N, PKField, F, C>(self.#name, self.#pkField, self.#fieldDefs, self.#computedDefs)\n\t}\n}\n\nexport class Schema<\n\tN extends string,\n\tPKField extends AnyPrimaryKeyField | never = never,\n\tF extends Record<string, AnySchemaField> = {},\n\tC extends Record<string, AnyComputedField> = {},\n> {\n\t#name: N\n\t#pkField: PKField | null\n\t#fieldDefs: F\n\t#computedDefs: C\n\n\tconstructor(name: N, pkField: PKField | null, fieldDefs: F, computedDefs: C) {\n\t\tthis.#name = name\n\t\tthis.#pkField = pkField\n\t\tthis.#fieldDefs = fieldDefs\n\t\tthis.#computedDefs = computedDefs\n\t\tif (this.#pkField) {\n\t\t\tObject.defineProperty(this.#pkField, '__schema', { value: this, enumerable: false, configurable: true })\n\t\t}\n\t\tfor (const field of Object.values(this.#fieldDefs)) {\n\t\t\tObject.defineProperty(field, '__schema', { value: this, enumerable: false, configurable: true })\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this.#name\n\t}\n\n\tget pkField() {\n\t\tif (!this.#pkField) throw new Error(`Schema \"${this.#name}\" does not have a primary key defined`)\n\t\treturn this.#pkField\n\t}\n\n\tget fieldDefs(): F {\n\t\treturn this.#fieldDefs\n\t}\n\n\tget computedDefs(): C {\n\t\treturn this.#computedDefs\n\t}\n\n\tget fields() {\n\t\treturn {\n\t\t\t...(this.#pkField ? { [this.#pkField.name]: this.#pkField } : {}),\n\t\t\t...this.#fieldDefs,\n\t\t} as unknown as SchemaTaggedFields<this>\n\t}\n\n\tstatic from<N extends string>(name: N): SchemaBuilder<N> {\n\t\treturn new SchemaBuilder(name)\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\n\tdescribe('SchemaBuilder', () => {\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => 'generated-id')\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.field('age', v.optional(v.number()))\n\t\t\t.field('createdAt', v.number(), { onCreate: () => 1000 })\n\t\t\t.field('updatedAt', v.number(), { onCreate: () => 1000, onUpdate: () => 2000 })\n\t\t\t.build()\n\n\t\tdescribe('Schema.from()', () => {\n\t\t\ttest('returns a SchemaBuilder instance', () => {\n\t\t\t\texpect(Schema.from('test')).toBeInstanceOf(SchemaBuilder)\n\t\t\t})\n\n\t\t\ttest('returns a Schema instance after build', () => {\n\t\t\t\tconst s = Schema.from('test').pk('id', v.string(), () => 'x').build()\n\t\t\t\texpect(s).toBeInstanceOf(Schema)\n\t\t\t})\n\n\t\t\ttest('Schema has no builder methods', () => {\n\t\t\t\tconst s = Schema.from('test').pk('id', v.string(), () => 'x').build()\n\t\t\t\texpect(s).not.toHaveProperty('pk')\n\t\t\t\texpect(s).not.toHaveProperty('field')\n\t\t\t\texpect(s).not.toHaveProperty('computed')\n\t\t\t\texpect(s).not.toHaveProperty('build')\n\t\t\t})\n\n\t\t\ttest('stores the schema name on builder', () => {\n\t\t\t\texpect(Schema.from('orders').name).toBe('orders')\n\t\t\t})\n\n\t\t\ttest('stores the schema name after build', () => {\n\t\t\t\texpect(Schema.from('orders').pk('id', v.string(), () => 'x').build().name).toBe('orders')\n\t\t\t})\n\n\t\t\ttest('full builder chain works', () => {\n\t\t\t\tconst s = Schema.from('users')\n\t\t\t\t\t.pk('id', v.string(), () => 'gen')\n\t\t\t\t\t.field('email', v.string())\n\t\t\t\t\t.field('age', v.number())\n\t\t\t\t\t.build()\n\t\t\t\texpect(s.name).toBe('users')\n\t\t\t\texpect(s.pkField.name).toBe('id')\n\t\t\t\texpect(Object.keys(s.fields)).toEqual(['id', 'email', 'age'])\n\t\t\t})\n\n\t\t\ttest('.build() is unavailable without .pk() at the type level', () => {\n\t\t\t\t// @ts-expect-error — .build() requires .pk() to have been called\n\t\t\t\tSchema.from('test').field('name', v.string()).build()\n\t\t\t})\n\t\t})\n\n\t\tdescribe('.name', () => {\n\t\t\ttest('returns the schema name', () => {\n\t\t\t\texpect(UserSchema.name).toBe('users')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('.pk()', () => {\n\t\t\ttest('pkField returns the pk field', () => {\n\t\t\t\texpect(UserSchema.pkField.name).toBe('id')\n\t\t\t})\n\n\t\t\ttest('pk entry is a SchemaField instance', () => {\n\t\t\t\texpect(UserSchema.fields.id).toBeInstanceOf(SchemaField)\n\t\t\t})\n\n\t\t\ttest('pk entry has correct pipe', () => {\n\t\t\t\texpect(UserSchema.fields.id.pipe).toBeDefined()\n\t\t\t})\n\n\t\t\ttest('pk entry has correct name and path', () => {\n\t\t\t\texpect(UserSchema.fields.id.name).toBe('id')\n\t\t\t\texpect(UserSchema.fields.id.path).toEqual(['id'])\n\t\t\t})\n\n\t\t\ttest('pk onCreate generates the value', () => {\n\t\t\t\texpect(UserSchema.fields.id.onCreate?.()).toBe('generated-id')\n\t\t\t})\n\n\t\t\ttest('pkField throws when no pk defined', () => {\n\t\t\t\tconst schema = new Schema('nopk', null, { name: new SchemaField('name', v.string()) }, {})\n\t\t\t\texpect(() => schema.pkField).toThrow()\n\t\t\t})\n\t\t})\n\n\t\tdescribe('.field()', () => {\n\t\t\ttest('all field entries are SchemaField instances', () => {\n\t\t\t\tfor (const entry of Object.values(UserSchema.fieldDefs)) {\n\t\t\t\t\texpect(entry).toBeInstanceOf(SchemaField)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttest('field has correct name and path', () => {\n\t\t\t\texpect(UserSchema.fields.email.name).toBe('email')\n\t\t\t\texpect(UserSchema.fields.email.path).toEqual(['email'])\n\t\t\t})\n\n\t\t\ttest('field has correct pipe', () => {\n\t\t\t\texpect(UserSchema.fields.email.pipe).toBeDefined()\n\t\t\t\texpect(UserSchema.fieldDefs.email.pipe).toBe(UserSchema.fields.email.pipe)\n\t\t\t})\n\n\t\t\ttest('field with onCreate stores the function', () => {\n\t\t\t\texpect(UserSchema.fields.createdAt.onCreate?.()).toBe(1000)\n\t\t\t})\n\n\t\t\ttest('field with onUpdate stores the function', () => {\n\t\t\t\texpect(UserSchema.fields.updatedAt.onUpdate?.()).toBe(2000)\n\t\t\t})\n\n\t\t\ttest('field with both hooks stores both', () => {\n\t\t\t\texpect(UserSchema.fields.updatedAt.onCreate?.()).toBe(1000)\n\t\t\t\texpect(UserSchema.fields.updatedAt.onUpdate?.()).toBe(2000)\n\t\t\t})\n\n\t\t\ttest('field with no lifecycle has undefined hooks', () => {\n\t\t\t\texpect(UserSchema.fields.email.onCreate).toBeUndefined()\n\t\t\t\texpect(UserSchema.fields.email.onUpdate).toBeUndefined()\n\t\t\t})\n\t\t})\n\n\t\tdescribe('.computed()', () => {\n\t\t\ttest('registers computed fields and dependencies', () => {\n\t\t\t\tconst WithComputed = Schema.from('users')\n\t\t\t\t\t.pk('id', v.string(), () => 'u1')\n\t\t\t\t\t.field('name', v.string())\n\t\t\t\t\t.field('email', v.string())\n\t\t\t\t\t.computed('display', ['name', 'email'], v.string(), ({ name, email }) => `${name} <${email}>`)\n\t\t\t\t\t.build()\n\n\t\t\t\texpect(Object.keys(WithComputed.computedDefs)).toEqual(['display'])\n\t\t\t\texpect(WithComputed.computedDefs.display.deps).toEqual(['name', 'email'])\n\t\t\t\texpect(WithComputed.computedDefs.display.compute({ name: 'Alice', email: 'a@b.com' })).toBe('Alice <a@b.com>')\n\t\t\t})\n\n\t\t\ttest('computed field names are included in schema output type', () => {\n\t\t\t\tconst WithComputed = Schema.from('users')\n\t\t\t\t\t.pk('id', v.string(), () => 'u1')\n\t\t\t\t\t.field('name', v.string())\n\t\t\t\t\t.computed('nameUpper', ['name'], v.string(), ({ name }) => name.toUpperCase())\n\t\t\t\t\t.build()\n\n\t\t\t\ttype Out = SchemaOutput<typeof WithComputed>\n\t\t\t\tconst value: Out = { id: 'u1', name: 'Alice', nameUpper: 'ALICE' }\n\t\t\t\texpect(Object.keys(WithComputed.computedDefs)).toEqual(['nameUpper'])\n\t\t\t\texpect(value.nameUpper).toBe('ALICE')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('.fields', () => {\n\t\t\ttest('includes all keys including pk', () => {\n\t\t\t\texpect(Object.keys(UserSchema.fields)).toEqual(['id', 'email', 'name', 'age', 'createdAt', 'updatedAt'])\n\t\t\t})\n\n\t\t\ttest('pk entry appears first', () => {\n\t\t\t\texpect(Object.keys(UserSchema.fields)[0]).toBe('id')\n\t\t\t})\n\n\t\t\ttest('schema with no fields has only pk in fields', () => {\n\t\t\t\tconst PkOnly = Schema.from('minimal').pk('id', v.string(), () => 'x').build()\n\t\t\t\texpect(Object.keys(PkOnly.fields)).toEqual(['id'])\n\t\t\t})\n\t\t})\n\n\t\tdescribe('.fieldDefs', () => {\n\t\t\ttest('excludes the pk field', () => {\n\t\t\t\texpect(Object.keys(UserSchema.fieldDefs)).not.toContain('id')\n\t\t\t})\n\n\t\t\ttest('contains all non-pk fields in order', () => {\n\t\t\t\texpect(Object.keys(UserSchema.fieldDefs)).toEqual(['email', 'name', 'age', 'createdAt', 'updatedAt'])\n\t\t\t})\n\n\t\t\ttest('schema with no fields has empty fieldDefs', () => {\n\t\t\t\tconst PkOnly = Schema.from('minimal').pk('id', v.string(), () => 'x').build()\n\t\t\t\texpect(Object.keys(PkOnly.fieldDefs)).toHaveLength(0)\n\t\t\t})\n\t\t})\n\t})\n\n\tdescribe('type-level: Schema.from uniqueness guard', () => {\n\t\ttest('duplicate .field() name is a TS error', () => {\n\t\t\t// @ts-expect-error — duplicate field name 'email' should fail\n\t\t\tSchema.from('test').pk('id', v.string(), () => 'x').field('email', v.string()).field('email', v.string()).build()\n\t\t})\n\t})\n\n\tdescribe('clone-on-step: fan-out independence', () => {\n\t\ttest('.field() returns a new builder, not the same instance', () => {\n\t\t\tconst base = Schema.from('test').pk('id', v.string(), () => 'x')\n\t\t\tconst a = base.field('email', v.string())\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('.pk() returns a new builder, not the same instance', () => {\n\t\t\tconst base = Schema.from('test')\n\t\t\tconst a = base.pk('id', v.string(), () => 'x')\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('.computed() returns a new builder, not the same instance', () => {\n\t\t\tconst base = Schema.from('test').pk('id', v.string(), () => 'x').field('name', v.string())\n\t\t\tconst a = base.computed('upper', ['name'], v.string(), ({ name }) => name.toUpperCase())\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('fan-out from shared base does not pollute either branch', () => {\n\t\t\tconst base = Schema.from('test').pk('id', v.string(), () => 'x')\n\t\t\tconst branchA = base.field('email', v.string()).build()\n\t\t\tconst branchB = base.field('age', v.number()).build()\n\n\t\t\texpect(Object.keys(branchA.fieldDefs)).toEqual(['email'])\n\t\t\texpect(Object.keys(branchB.fieldDefs)).toEqual(['age'])\n\t\t})\n\n\t\ttest('fan-out with computed does not pollute base', () => {\n\t\t\tconst base = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\tconst withComputed = base.computed('upper', ['name'], v.string(), ({ name }) => name.toUpperCase()).build()\n\t\t\tconst withoutComputed = base.build()\n\n\t\t\texpect(Object.keys(withComputed.computedDefs)).toEqual(['upper'])\n\t\t\texpect(Object.keys(withoutComputed.computedDefs)).toEqual([])\n\t\t})\n\t})\n\n\tdescribe('type-level: schema-tagged Fields', () => {\n\t\ttest('fields accessor returns schema-tagged Field instances', () => {\n\t\t\tconst _TestSchema = Schema.from('test').pk('id', v.string(), () => 'x').field('email', v.string()).build()\n\t\t\ttype FieldS = NonNullable<(typeof _TestSchema.fields.id)['__schema']>\n\t\t\texpectTypeOf<FieldS>().toEqualTypeOf<typeof _TestSchema>()\n\n\t\t\ttype FieldS2 = NonNullable<(typeof _TestSchema.fields.email)['__schema']>\n\t\t\texpectTypeOf<FieldS2>().toEqualTypeOf<typeof _TestSchema>()\n\t\t})\n\n\t\ttest('fields carry runtime __schema reference to parent schema', () => {\n\t\t\tconst TestSchema = Schema.from('test').pk('id', v.string(), () => 'x').field('email', v.string()).build()\n\t\t\texpect((TestSchema.fields.id as any).__schema).toBe(TestSchema)\n\t\t\texpect((TestSchema.fields.email as any).__schema).toBe(TestSchema)\n\t\t})\n\t})\n}\n","import type { Pipe, PipeInput, PipeOutput } from 'valleyed'\n\nimport { EquippedError } from '../../errors'\n\nexport type EventContext = {\n\tkey: string\n\tname: string\n\tts: number\n\tbody: unknown\n\tby: string | null\n\tat: Date\n\tfirstRun: boolean\n}\n\nexport type HandlerDef<P extends Pipe<any, any> = Pipe<any, any>, R = unknown> = {\n\tpipe: P\n\thandle: (payload: PipeOutput<P>, ctx: EventContext) => R | Promise<R>\n}\n\nexport type FireFn<P extends Pipe<any, any>, R> = (\n\tpayload: PipeInput<P>,\n\tctx?: { by?: string; at?: Date },\n) => Promise<R>\n\nexport class HandlerRegistry {\n\treadonly #handlers = new Map<string, HandlerDef>()\n\treadonly #order: string[] = []\n\n\tregister(name: string, def: HandlerDef): void {\n\t\tif (this.#handlers.has(name)) {\n\t\t\tthrow new EquippedError(`EventLog handler \"${name}\" is already registered`, { name })\n\t\t}\n\t\tthis.#handlers.set(name, def)\n\t\tthis.#order.push(name)\n\t}\n\n\tget(name: string): HandlerDef {\n\t\tconst def = this.#handlers.get(name)\n\t\tif (!def) {\n\t\t\tthrow new EquippedError(`EventLog handler \"${name}\" is not registered`, { name })\n\t\t}\n\t\treturn def\n\t}\n\n\tlist(): string[] {\n\t\treturn [...this.#order]\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { EquippedError } = await import('../../errors')\n\n\tdescribe('HandlerRegistry', () => {\n\t\ttest('register and get a handler', () => {\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tconst def: HandlerDef = { pipe: v.string(), handle: () => {} }\n\t\t\tregistry.register('user.signup', def)\n\t\t\texpect(registry.get('user.signup')).toBe(def)\n\t\t})\n\n\t\ttest('register duplicate name throws', () => {\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tconst def: HandlerDef = { pipe: v.string(), handle: () => {} }\n\t\t\tregistry.register('user.signup', def)\n\t\t\texpect(() => registry.register('user.signup', def)).toThrow(EquippedError)\n\t\t\texpect(() => registry.register('user.signup', def)).toThrow('already registered')\n\t\t})\n\n\t\ttest('get missing name throws', () => {\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\texpect(() => registry.get('nonexistent')).toThrow(EquippedError)\n\t\t\texpect(() => registry.get('nonexistent')).toThrow('not registered')\n\t\t})\n\n\t\ttest('list returns names in registration order', () => {\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tregistry.register('c', { pipe: v.string(), handle: () => {} })\n\t\t\tregistry.register('a', { pipe: v.string(), handle: () => {} })\n\t\t\tregistry.register('b', { pipe: v.string(), handle: () => {} })\n\t\t\texpect(registry.list()).toEqual(['c', 'a', 'b'])\n\t\t})\n\n\t\ttest('list returns a copy, not a reference', () => {\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tregistry.register('x', { pipe: v.string(), handle: () => {} })\n\t\t\tconst list = registry.list()\n\t\t\tlist.push('y')\n\t\t\texpect(registry.list()).toEqual(['x'])\n\t\t})\n\t})\n}\n","import type { EventContext, HandlerDef, HandlerRegistry } from './registry'\nimport { EventLogSchema } from './schema'\nimport { OrmReplayError } from '../errors/replay'\nimport type { Repo } from '../repo/repo'\n\nconst executeReplay = async (\n\trepo: Repo<any>,\n\tdef: HandlerDef,\n\trow: { key: string; name: string; ts: number; body: unknown; by: string | null },\n): Promise<void> => {\n\tconst evCtx: EventContext = {\n\t\tkey: row.key,\n\t\tname: row.name,\n\t\tts: row.ts,\n\t\tbody: row.body,\n\t\tby: row.by,\n\t\tat: new Date(row.ts),\n\t\tfirstRun: false,\n\t}\n\ttry {\n\t\tawait repo.session(async () => {\n\t\t\tawait def.handle(row.body, evCtx)\n\t\t})\n\t} catch (cause) {\n\t\tthrow new OrmReplayError({ key: row.key, name: row.name, cause })\n\t}\n}\n\nexport async function replay(\n\trepo: Repo<any>,\n\tregistry: HandlerRegistry,\n\topts?: { from?: Date },\n): Promise<void> {\n\tlet query = repo.on(EventLogSchema).all().orderBy('ts', 'asc')\n\tif (opts?.from) {\n\t\tquery = query.where((q) => q.gte('ts', opts.from!.getTime()))\n\t}\n\tconst rows = await query.find()\n\n\tfor (const row of rows) {\n\t\tawait executeReplay(repo, registry.get(row.name), row)\n\t}\n}\n\nexport async function rerun(\n\trepo: Repo<any>,\n\tregistry: HandlerRegistry,\n\tkey: string,\n): Promise<void> {\n\tconst row = await repo.on(EventLogSchema).one().id(key).find()\n\tif (!row) {\n\t\tthrow new OrmReplayError({ key, name: 'unknown', cause: new Error(`Event with key \"${key}\" not found`) })\n\t}\n\tawait executeReplay(repo, registry.get(row.name), row)\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { Schema } = await import('../schema')\n\tconst { Repo } = await import('../repo/repo')\n\tconst { OrmReplayError } = await import('../errors/replay')\n\tconst { HandlerRegistry } = await import('./registry')\n\tconst { EventLogSchema } = await import('./schema')\n\tconst { fire } = await import('./executor')\n\ttype EventContext = import('./registry').EventContext\n\n\tconst CounterSchema = Schema.from('counters')\n\t\t.pk('id', v.string(), () => `c-${Math.random()}`)\n\t\t.field('name', v.string())\n\t\t.field('count', v.number())\n\t\t.build()\n\n\tfunction makeRepo() {\n\t\tconst adapter = InMemoryAdapter.create({})\n\t\treturn new Repo({\n\t\t\tadapter,\n\t\t\tresolve: (s) => {\n\t\t\t\tif (s === EventLogSchema) return { table: 'events' }\n\t\t\t\tif (s === CounterSchema) return { table: 'counters' }\n\t\t\t\treturn { table: s.name }\n\t\t\t},\n\t\t})\n\t}\n\n\tdescribe('ReplayWalker', () => {\n\t\ttest('replay walks rows in ts-ascending order', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tconst order: string[] = []\n\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ label: v.string() }),\n\t\t\t\thandle: async (payload: { label: string }) => {\n\t\t\t\t\torder.push(payload.label)\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('test', def)\n\n\t\t\tawait fire(repo, 'test', def, { label: 'second' }, { at: new Date('2025-01-02') })\n\t\t\tawait fire(repo, 'test', def, { label: 'first' }, { at: new Date('2025-01-01') })\n\t\t\tawait fire(repo, 'test', def, { label: 'third' }, { at: new Date('2025-01-03') })\n\n\t\t\torder.length = 0\n\t\t\tawait replay(repo, registry)\n\n\t\t\texpect(order).toEqual(['first', 'second', 'third'])\n\t\t})\n\n\t\ttest('replay({ from }) skips rows with ts < from', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tconst order: string[] = []\n\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ label: v.string() }),\n\t\t\t\thandle: async (payload: { label: string }) => {\n\t\t\t\t\torder.push(payload.label)\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('test', def)\n\n\t\t\tawait fire(repo, 'test', def, { label: 'old' }, { at: new Date('2025-01-01') })\n\t\t\tawait fire(repo, 'test', def, { label: 'new' }, { at: new Date('2025-01-03') })\n\n\t\t\torder.length = 0\n\t\t\tawait replay(repo, registry, { from: new Date('2025-01-02') })\n\n\t\t\texpect(order).toEqual(['new'])\n\t\t})\n\n\t\ttest('replay passes firstRun: false in EventContext', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tlet captured: EventContext | undefined\n\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ x: v.number() }),\n\t\t\t\thandle: async (_payload: unknown, ctx: EventContext) => {\n\t\t\t\t\tcaptured = ctx\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('test', def)\n\n\t\t\tawait fire(repo, 'test', def, { x: 1 })\n\n\t\t\tawait replay(repo, registry)\n\n\t\t\texpect(captured).toBeDefined()\n\t\t\texpect(captured!.firstRun).toBe(false)\n\t\t})\n\n\t\ttest('replay throws OrmReplayError on first failure with key/name/cause', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\n\t\t\tconst boom = new Error('handler exploded')\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ fail: v.boolean() }),\n\t\t\t\thandle: async (payload: { fail: boolean }, ctx: EventContext) => {\n\t\t\t\t\tif (!ctx.firstRun && payload.fail) throw boom\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('evt', def)\n\n\t\t\tawait fire(repo, 'evt', def, { fail: false }, { at: new Date('2025-01-01') })\n\t\t\tawait fire(repo, 'evt', def, { fail: true }, { at: new Date('2025-01-02') })\n\t\t\tawait fire(repo, 'evt', def, { fail: false }, { at: new Date('2025-01-03') })\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().orderBy('ts', 'asc').find()\n\t\t\tconst failKey = rows[1].key\n\n\t\t\tawait expect(replay(repo, registry)).rejects.toThrow(OrmReplayError)\n\t\t\ttry {\n\t\t\t\tawait replay(repo, registry)\n\t\t\t} catch (e: any) {\n\t\t\t\texpect(e.key).toBe(failKey)\n\t\t\t\texpect(e.eventName).toBe('evt')\n\t\t\t\texpect(e.cause).toBe(boom)\n\t\t\t}\n\t\t})\n\n\t\ttest('replay stops on first failure — events after failure not attempted', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tconst executed: string[] = []\n\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ label: v.string(), fail: v.boolean() }),\n\t\t\t\thandle: async (payload: { label: string; fail: boolean }, ctx: EventContext) => {\n\t\t\t\t\texecuted.push(payload.label)\n\t\t\t\t\tif (!ctx.firstRun && payload.fail) throw new Error('boom')\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('test', def)\n\n\t\t\tawait fire(repo, 'test', def, { label: 'A', fail: false }, { at: new Date('2025-01-01') })\n\t\t\tawait fire(repo, 'test', def, { label: 'B', fail: true }, { at: new Date('2025-01-02') })\n\t\t\tawait fire(repo, 'test', def, { label: 'C', fail: false }, { at: new Date('2025-01-03') })\n\n\t\t\texecuted.length = 0\n\t\t\tawait expect(replay(repo, registry)).rejects.toThrow(OrmReplayError)\n\n\t\t\texpect(executed).toEqual(['A', 'B'])\n\t\t})\n\n\t\ttest('per-event session isolation: failure on event N does not roll back events 1..N−1', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ name: v.string(), fail: v.boolean() }),\n\t\t\t\thandle: async (payload: { name: string; fail: boolean }, ctx: EventContext) => {\n\t\t\t\t\tawait repo.on(CounterSchema).one().create({ name: payload.name, count: 1 })\n\t\t\t\t\tif (!ctx.firstRun && payload.fail) throw new Error('boom')\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('test', def)\n\n\t\t\tawait fire(repo, 'test', def, { name: 'alpha', fail: false }, { at: new Date('2025-01-01') })\n\t\t\tawait fire(repo, 'test', def, { name: 'beta', fail: true }, { at: new Date('2025-01-02') })\n\n\t\t\tconst countersBefore = await repo.on(CounterSchema).all().find()\n\t\t\texpect(countersBefore).toHaveLength(2)\n\n\t\t\tawait expect(replay(repo, registry)).rejects.toThrow(OrmReplayError)\n\n\t\t\tconst countersAfter = await repo.on(CounterSchema).all().find()\n\t\t\texpect(countersAfter).toHaveLength(3)\n\t\t\texpect(countersAfter.filter((c) => c.name === 'alpha')).toHaveLength(2)\n\t\t})\n\n\t\ttest('rerun re-executes a single event with firstRun: false', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tlet captured: EventContext | undefined\n\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ x: v.number() }),\n\t\t\t\thandle: async (_payload: unknown, ctx: EventContext) => {\n\t\t\t\t\tcaptured = ctx\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('test', def)\n\n\t\t\tawait fire(repo, 'test', def, { x: 42 })\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\tconst key = rows[0].key\n\n\t\t\tawait rerun(repo, registry, key)\n\n\t\t\texpect(captured).toBeDefined()\n\t\t\texpect(captured!.firstRun).toBe(false)\n\t\t\texpect(captured!.key).toBe(key)\n\t\t\texpect(captured!.body).toEqual({ x: 42 })\n\t\t})\n\n\t\ttest('rerun throws OrmReplayError for missing key', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\n\t\t\tawait expect(rerun(repo, registry, 'nonexistent')).rejects.toThrow(OrmReplayError)\n\t\t})\n\t})\n}\n","import type { Pipe, PipeInput } from 'valleyed'\n\nimport { fire } from './executor'\nimport { HandlerRegistry, type FireFn, type HandlerDef } from './registry'\nimport { replay, rerun } from './walker'\nimport type { OrmAdapterLike } from '../adapters/base'\nimport type { Repo } from '../repo/repo'\n\nexport { type EventContext } from './registry'\n\nexport class EventLog<A extends OrmAdapterLike<any>> {\n\treadonly #repo: Repo<A>\n\treadonly #registry: HandlerRegistry\n\n\tconstructor(repo: Repo<A>, registry: HandlerRegistry) {\n\t\tthis.#repo = repo\n\t\tthis.#registry = registry\n\t}\n\n\thandler<P extends Pipe<any, any>, R>(\n\t\tname: string,\n\t\tdef: HandlerDef<P, R>,\n\t): FireFn<P, R> {\n\t\tthis.#registry.register(name, def)\n\t\treturn (payload: PipeInput<P>, ctx?: { by?: string; at?: Date }) =>\n\t\t\tfire<R>(this.#repo as Repo<any>, name, def, payload, ctx)\n\t}\n\n\treplay(opts?: { from?: Date }): Promise<void> {\n\t\treturn replay(this.#repo as Repo<any>, this.#registry, opts)\n\t}\n\n\trerun(key: string): Promise<void> {\n\t\treturn rerun(this.#repo as Repo<any>, this.#registry, key)\n\t}\n\n\tstatic from<A extends OrmAdapterLike<any>>(repo: Repo<A>) {\n\t\treturn { build: () => new EventLog(repo, new HandlerRegistry()) }\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { Schema } = await import('../schema')\n\tconst { Repo } = await import('../repo/repo')\n\tconst { OrmValidationError } = await import('../errors')\n\tconst { EventLogSchema } = await import('./schema')\n\n\tconst UserSchema = Schema.from('users')\n\t\t.pk('id', v.string(), () => `u-${Math.random()}`)\n\t\t.field('email', v.string())\n\t\t.field('createdAt', v.number(), { onCreate: () => Date.now() })\n\t\t.build()\n\n\tfunction makeRepo() {\n\t\tconst adapter = InMemoryAdapter.create({})\n\t\treturn new Repo({\n\t\t\tadapter,\n\t\t\tresolve: (s) => {\n\t\t\t\tif (s === EventLogSchema) return { table: 'events' }\n\t\t\t\tif (s === UserSchema) return { table: 'users' }\n\t\t\t\treturn { table: s.name }\n\t\t\t},\n\t\t})\n\t}\n\n\tdescribe('EventLog', () => {\n\t\ttest('EventLog.from(repo).build() constructs a working instance', () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\t\t\texpect(log).toBeInstanceOf(EventLog)\n\t\t})\n\n\t\ttest('handler returns a typed fire function', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\n\t\t\tconst fireSignup = log.handler('user.signup', {\n\t\t\t\tpipe: v.object({ email: v.string() }),\n\t\t\t\thandle: async (payload) => `created-${payload.email}`,\n\t\t\t})\n\n\t\t\tconst result = await fireSignup({ email: 'a@b.com' }, { by: 'admin' })\n\t\t\texpect(result).toBe('created-a@b.com')\n\t\t})\n\n\t\ttest('duplicate handler name throws', () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\t\t\tconst def = { pipe: v.string(), handle: async () => {} }\n\n\t\t\tlog.handler('test', def)\n\t\t\texpect(() => log.handler('test', def)).toThrow('already registered')\n\t\t})\n\n\t\ttest('fire persists EventLogSchema row', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\n\t\t\tconst fireEvent = log.handler('order.placed', {\n\t\t\t\tpipe: v.object({ item: v.string(), qty: v.number() }),\n\t\t\t\thandle: async () => {},\n\t\t\t})\n\n\t\t\tawait fireEvent({ item: 'widget', qty: 3 }, { by: 'user-42' })\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(rows).toHaveLength(1)\n\t\t\texpect(rows[0].name).toBe('order.placed')\n\t\t\texpect(rows[0].body).toEqual({ item: 'widget', qty: 3 })\n\t\t\texpect(rows[0].by).toBe('user-42')\n\t\t})\n\n\t\ttest('invalid payload throws OrmValidationError, no row persisted', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\n\t\t\tconst fireEvent = log.handler('test', {\n\t\t\t\tpipe: v.object({ x: v.number() }),\n\t\t\t\thandle: async () => {},\n\t\t\t})\n\n\t\t\tawait expect(fireEvent({ x: 'not-a-number' } as any)).rejects.toThrow(OrmValidationError)\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(rows).toHaveLength(0)\n\t\t})\n\n\t\ttest('handler throw rolls back session — no row persisted, no side writes', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\n\t\t\tconst fireEvent = log.handler('user.create', {\n\t\t\t\tpipe: v.object({ email: v.string() }),\n\t\t\t\thandle: async (payload) => {\n\t\t\t\t\tawait repo.on(UserSchema).one().create({ email: payload.email })\n\t\t\t\t\tthrow new Error('oops')\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tawait expect(fireEvent({ email: 'a@b.com' })).rejects.toThrow('oops')\n\n\t\t\tconst eventRows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(eventRows).toHaveLength(0)\n\n\t\t\tconst userRows = await repo.on(UserSchema).all().find()\n\t\t\texpect(userRows).toHaveLength(0)\n\t\t})\n\n\t\ttest('handler receives firstRun: true and correct EventContext', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\t\t\tlet captured: any\n\n\t\t\tconst fireEvent = log.handler('test', {\n\t\t\t\tpipe: v.object({ val: v.number() }),\n\t\t\t\thandle: async (_payload, ctx) => {\n\t\t\t\t\tcaptured = ctx\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tconst at = new Date('2025-06-01T00:00:00Z')\n\t\t\tawait fireEvent({ val: 99 }, { by: 'admin', at })\n\n\t\t\texpect(captured.firstRun).toBe(true)\n\t\t\texpect(captured.name).toBe('test')\n\t\t\texpect(captured.by).toBe('admin')\n\t\t\texpect(captured.at).toEqual(at)\n\t\t\texpect(captured.ts).toBe(at.getTime())\n\t\t\texpect(captured.body).toEqual({ val: 99 })\n\t\t})\n\n\t\ttest('end-to-end: register → fire → replay flow', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\t\t\tconst replayedPayloads: unknown[] = []\n\n\t\t\tconst fireEvent = log.handler('order.placed', {\n\t\t\t\tpipe: v.object({ item: v.string() }),\n\t\t\t\thandle: async (payload, ctx) => {\n\t\t\t\t\tif (!ctx.firstRun) replayedPayloads.push(payload)\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tawait fireEvent({ item: 'A' }, { at: new Date('2025-01-02') })\n\t\t\tawait fireEvent({ item: 'B' }, { at: new Date('2025-01-01') })\n\n\t\t\tawait log.replay()\n\n\t\t\texpect(replayedPayloads).toEqual([{ item: 'B' }, { item: 'A' }])\n\t\t})\n\n\t\ttest('rerun re-executes a single event with firstRun: false', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\t\t\tlet rerunCtx: any\n\n\t\t\tconst fireEvent = log.handler('test', {\n\t\t\t\tpipe: v.object({ val: v.number() }),\n\t\t\t\thandle: async (_payload, ctx) => {\n\t\t\t\t\tif (!ctx.firstRun) rerunCtx = ctx\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tawait fireEvent({ val: 7 }, { by: 'admin' })\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\tawait log.rerun(rows[0].key)\n\n\t\t\texpect(rerunCtx).toBeDefined()\n\t\t\texpect(rerunCtx.firstRun).toBe(false)\n\t\t\texpect(rerunCtx.body).toEqual({ val: 7 })\n\t\t\texpect(rerunCtx.by).toBe('admin')\n\t\t})\n\n\t\ttest('repo.session(() => log.replay()) makes replay atomic — failure rolls back all', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\n\t\t\tconst fireEvent = log.handler('user.create', {\n\t\t\t\tpipe: v.object({ email: v.string(), fail: v.boolean() }),\n\t\t\t\thandle: async (payload, ctx) => {\n\t\t\t\t\tawait repo.on(UserSchema).one().create({ email: payload.email })\n\t\t\t\t\tif (!ctx.firstRun && payload.fail) throw new Error('replay boom')\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tawait fireEvent({ email: 'alice@test.com', fail: false }, { at: new Date('2025-01-01') })\n\t\t\tawait fireEvent({ email: 'bob@test.com', fail: true }, { at: new Date('2025-01-02') })\n\n\t\t\tconst usersBefore = await repo.on(UserSchema).all().find()\n\t\t\texpect(usersBefore).toHaveLength(2)\n\n\t\t\tawait expect(\n\t\t\t\trepo.session(() => log.replay()),\n\t\t\t).rejects.toThrow()\n\n\t\t\tconst usersAfter = await repo.on(UserSchema).all().find()\n\t\t\texpect(usersAfter).toHaveLength(2)\n\t\t})\n\n\t\ttest('end-to-end: fire persists row + handler-side writes atomically', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\n\t\t\tconst fireSignup = log.handler('user.signup', {\n\t\t\t\tpipe: v.object({ email: v.string() }),\n\t\t\t\thandle: async (payload, evCtx) => {\n\t\t\t\t\tconst user = await repo.on(UserSchema).one().create({\n\t\t\t\t\t\temail: payload.email,\n\t\t\t\t\t\tcreatedAt: evCtx.at.getTime(),\n\t\t\t\t\t})\n\t\t\t\t\treturn user\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tconst user = await fireSignup({ email: 'alice@test.com' }, { by: 'system' })\n\t\t\texpect(user.email).toBe('alice@test.com')\n\n\t\t\tconst eventRows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(eventRows).toHaveLength(1)\n\n\t\t\tconst userRows = await repo.on(UserSchema).all().find()\n\t\t\texpect(userRows).toHaveLength(1)\n\t\t})\n\t})\n}\n","import type { FieldTypeName } from '../adapter'\nimport type { OrmAdapter } from '../orm-adapter'\nimport type { AnySchema } from '../schema'\nimport type { DiscoveredField, DiscoveredSchema } from './introspection-types'\nimport type { AnyChange } from './types'\n\nconst EMISSION_ORDER: AnyChange['kind'][] = [\n\t'dropForeignKey',\n\t'dropIndex',\n\t'dropField',\n\t'dropTable',\n\t'renameTable',\n\t'renameField',\n\t'createTable',\n\t'addField',\n\t'modifyField',\n\t'addIndex',\n\t'addForeignKey',\n]\n\ntype SchemaFieldInfo = {\n\tname: string\n\ttype: FieldTypeName\n\tnullable?: boolean\n\tdefault?: string | number | boolean | null\n\tunique?: boolean\n}\n\nfunction adapterSupports(adapter: OrmAdapter, kind: AnyChange['kind']): boolean {\n\tif (kind === 'execute') return true\n\tconst method = `apply${kind[0].toUpperCase()}${kind.slice(1)}` as keyof OrmAdapter\n\treturn typeof (adapter as any)[method] === 'function'\n}\n\nfunction fieldsEqual(target: SchemaFieldInfo, discovered: DiscoveredField): boolean {\n\tif (target.type !== discovered.type) return false\n\tif ((target.nullable ?? false) !== discovered.nullable) return false\n\tif (target.default !== discovered.default) return false\n\tif ((target.unique ?? false) !== (discovered.unique ?? false)) return false\n\treturn true\n}\n\nconst toFieldPayload = (f: SchemaFieldInfo) => ({\n\tname: f.name,\n\ttype: f.type,\n\t...(f.nullable ? { nullable: true as const } : {}),\n})\n\nfunction extractSchemaInfo(schema: AnySchema): {\n\tname: string\n\tpk: { name: string; type: FieldTypeName }\n\tfields: SchemaFieldInfo[]\n} {\n\tconst pkField = schema.pkField\n\tconst pkType = inferFieldType(pkField.pipe)\n\tconst fields: SchemaFieldInfo[] = []\n\tfor (const field of Object.values(schema.fieldDefs)) {\n\t\tconst f = field as any\n\t\tfields.push({\n\t\t\tname: f.name,\n\t\t\ttype: inferFieldType(f.pipe),\n\t\t\tnullable: isNullable(f.pipe),\n\t\t})\n\t}\n\treturn { name: schema.name, pk: { name: pkField.name, type: pkType }, fields }\n}\n\nconst KNOWN_FIELD_TYPES: ReadonlySet<string> = new Set<FieldTypeName>(['string', 'number', 'boolean', 'array', 'object', 'date'])\n\nfunction inferFieldType(pipe: any): FieldTypeName {\n\tif (!pipe) return 'string'\n\tconst schema = typeof pipe.schema === 'function' ? pipe.schema() : undefined\n\tif (schema?.type) {\n\t\tif (KNOWN_FIELD_TYPES.has(schema.type)) return schema.type as FieldTypeName\n\t\treturn 'string'\n\t}\n\tconst std = pipe['~standard']\n\tif (std?.validate) {\n\t\tif (!std.validate(0).issues) return 'number'\n\t\tif (!std.validate('').issues) return 'string'\n\t\tif (!std.validate(true).issues) return 'boolean'\n\t\tif (!std.validate([]).issues) return 'array'\n\t\tif (!std.validate({}).issues) return 'object'\n\t}\n\treturn 'string'\n}\n\nfunction isNullable(pipe: any): boolean {\n\tif (!pipe) return false\n\tconst ctx = typeof pipe.context === 'function' ? pipe.context() : undefined\n\tif (ctx?.optional) return true\n\tconst std = pipe['~standard']\n\tif (std?.validate && !std.validate(undefined).issues) return true\n\treturn false\n}\n\nexport function diffSchemas(\n\tadapter: OrmAdapter,\n\ttarget: ReadonlyArray<AnySchema>,\n\tcurrent: ReadonlyArray<DiscoveredSchema>,\n): ReadonlyArray<AnyChange> {\n\tconst changes: AnyChange[] = []\n\tconst currentByName = new Map(current.map((s) => [s.name, s]))\n\tconst targetByName = new Map(target.map((s) => [s.name, s]))\n\n\tfor (const disc of current) {\n\t\tif (!targetByName.has(disc.name)) {\n\t\t\tfor (const fk of disc.foreignKeys) {\n\t\t\t\tchanges.push({ kind: 'dropForeignKey', table: disc.name, name: fk.name })\n\t\t\t}\n\t\t\tfor (const idx of disc.indexes) {\n\t\t\t\tchanges.push({ kind: 'dropIndex', name: idx.name })\n\t\t\t}\n\t\t\tchanges.push({ kind: 'dropTable', name: disc.name })\n\t\t}\n\t}\n\n\tfor (const schema of target) {\n\t\tconst info = extractSchemaInfo(schema)\n\t\tconst disc = currentByName.get(info.name)\n\n\t\tif (!disc) {\n\t\t\tchanges.push({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: info.name,\n\t\t\t\tpk: info.pk,\n\t\t\t\tfields: info.fields.map(toFieldPayload),\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\tconst discFieldsByName = new Map(disc.fields.map((f) => [f.name, f]))\n\t\tconst targetFieldsByName = new Map(info.fields.map((f) => [f.name, f]))\n\n\t\tfor (const discField of disc.fields) {\n\t\t\tif (!targetFieldsByName.has(discField.name)) {\n\t\t\t\tchanges.push({ kind: 'dropField', table: info.name, name: discField.name })\n\t\t\t}\n\t\t}\n\n\t\tfor (const tField of info.fields) {\n\t\t\tconst existing = discFieldsByName.get(tField.name)\n\t\t\tif (!existing) {\n\t\t\t\tchanges.push({ kind: 'addField', table: info.name, field: toFieldPayload(tField) })\n\t\t\t} else if (!fieldsEqual(tField, existing)) {\n\t\t\t\tchanges.push({ kind: 'modifyField', table: info.name, name: tField.name, to: toFieldPayload(tField) })\n\t\t\t}\n\t\t}\n\t}\n\n\treturn changes\n\t\t.filter((c) => adapterSupports(adapter, c.kind))\n\t\t.sort((a, b) => EMISSION_ORDER.indexOf(a.kind) - EMISSION_ORDER.indexOf(b.kind))\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { Schema } = await import('../schema')\n\n\tdescribe('diffSchemas', () => {\n\t\tfunction makeAdapter() {\n\t\t\treturn InMemoryAdapter.create({})\n\t\t}\n\n\t\ttest('returns empty array when no changes needed', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'email', type: 'string', nullable: false }],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\texpect(result).toEqual([])\n\t\t})\n\n\t\ttest('fresh DB returns createTable for everything', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('age', v.number())\n\t\t\t\t.build()\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], [])\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0]).toEqual({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [\n\t\t\t\t\t{ name: 'email', type: 'string' },\n\t\t\t\t\t{ name: 'age', type: 'number' },\n\t\t\t\t],\n\t\t\t})\n\t\t})\n\n\t\ttest('add field detected when target has field absent from current', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('age', v.number())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'email', type: 'string', nullable: false }],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0]).toEqual({\n\t\t\t\tkind: 'addField',\n\t\t\t\ttable: 'users',\n\t\t\t\tfield: { name: 'age', type: 'number' },\n\t\t\t})\n\t\t})\n\n\t\ttest('drop field detected when current has field absent from target', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [\n\t\t\t\t\t{ name: 'email', type: 'string', nullable: false },\n\t\t\t\t\t{ name: 'age', type: 'number', nullable: false },\n\t\t\t\t],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0]).toEqual({\n\t\t\t\tkind: 'dropField',\n\t\t\t\ttable: 'users',\n\t\t\t\tname: 'age',\n\t\t\t})\n\t\t})\n\n\t\ttest('modify field detected when type changes', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('age', v.string())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'age', type: 'number', nullable: false }],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0]).toEqual({\n\t\t\t\tkind: 'modifyField',\n\t\t\t\ttable: 'users',\n\t\t\t\tname: 'age',\n\t\t\t\tto: { name: 'age', type: 'string' },\n\t\t\t})\n\t\t})\n\n\t\ttest('drop table detected when current has table absent from target', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'posts',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'title', type: 'string', nullable: false }],\n\t\t\t\tindexes: [{ name: 'posts_title_idx', on: ['title'], unique: false }],\n\t\t\t\tforeignKeys: [{ name: 'posts_author_fk', on: 'authorId', references: { table: 'users', column: 'id' } }],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [], current)\n\t\t\tconst kinds = result.map((c) => c.kind)\n\t\t\texpect(kinds).toContain('dropForeignKey')\n\t\t\texpect(kinds).toContain('dropIndex')\n\t\t\texpect(kinds).toContain('dropTable')\n\t\t})\n\n\t\ttest('rename surfaces as drop+add (NOT auto-rename)', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('fullName', v.string())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'name', type: 'string', nullable: false }],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\texpect(result).toHaveLength(2)\n\t\t\tconst kinds = result.map((c) => c.kind)\n\t\t\texpect(kinds).toContain('dropField')\n\t\t\texpect(kinds).toContain('addField')\n\t\t\texpect(kinds).not.toContain('renameField')\n\t\t})\n\n\t\ttest('emission order respects fixed canonical sequence', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('newField', v.number())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [\n\t\t\t\t{\n\t\t\t\t\tname: 'users',\n\t\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{ name: 'email', type: 'number', nullable: false },\n\t\t\t\t\t\t{ name: 'oldField', type: 'string', nullable: false },\n\t\t\t\t\t],\n\t\t\t\t\tindexes: [],\n\t\t\t\t\tforeignKeys: [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'posts',\n\t\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\t\tfields: [],\n\t\t\t\t\tindexes: [],\n\t\t\t\t\tforeignKeys: [],\n\t\t\t\t},\n\t\t\t]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\tconst kinds = result.map((c) => c.kind)\n\t\t\tfor (let i = 0; i < kinds.length - 1; i++) {\n\t\t\t\tconst a = EMISSION_ORDER.indexOf(kinds[i])\n\t\t\t\tconst b = EMISSION_ORDER.indexOf(kinds[i + 1])\n\t\t\t\texpect(a).toBeLessThanOrEqual(b)\n\t\t\t}\n\t\t})\n\n\t\ttest('adapter-aware filtering removes unsupported variants', async () => {\n\t\t\tconst { OrmAdapter } = await import('../orm-adapter')\n\t\t\tclass IndexOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\tasync applyAddIndex() {}\n\t\t\t\tasync applyDropIndex() {}\n\t\t\t\tasync loadMigrations() { return [] }\n\t\t\t\tasync recordMigration() {}\n\t\t\t\tasync introspect() { return [] }\n\t\t\t}\n\t\t\tconst adapter = new (IndexOnlyAdapter as any)() as IndexOnlyAdapter\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.build()\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], [])\n\t\t\texpect(result).toEqual([])\n\t\t})\n\n\t\ttest('multiple tables: creates missing and drops extra', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.build()\n\t\t\tconst PostSchema = Schema.from('posts')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('title', v.string())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'email', type: 'string', nullable: false }],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}, {\n\t\t\t\tname: 'comments',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema, PostSchema], current)\n\t\t\tconst kinds = result.map((c) => c.kind)\n\t\t\texpect(kinds).toContain('dropTable')\n\t\t\texpect(kinds).toContain('createTable')\n\t\t\tconst dropTable = result.find((c) => c.kind === 'dropTable') as any\n\t\t\texpect(dropTable.name).toBe('comments')\n\t\t\tconst createTable = result.find((c) => c.kind === 'createTable') as any\n\t\t\texpect(createTable.name).toBe('posts')\n\t\t})\n\n\t\ttest('Mongo-style adapter with only index ops: field-bearing target returns empty diff', async () => {\n\t\t\tconst { OrmAdapter } = await import('../orm-adapter')\n\t\t\tclass MongoStyleAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number', 'object', 'array'] as const\n\t\t\t\tasync applyAddIndex() {}\n\t\t\t\tasync applyDropIndex() {}\n\t\t\t\tasync loadMigrations() { return [] }\n\t\t\t\tasync recordMigration() {}\n\t\t\t}\n\t\t\tconst adapter = new (MongoStyleAdapter as any)() as MongoStyleAdapter\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('age', v.number())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [],\n\t\t\t\tindexes: [{ name: 'users_email_idx', on: ['email'], unique: true }],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\tconst kinds = result.map((c) => c.kind)\n\t\t\texpect(kinds.every((k) => k === 'addIndex' || k === 'dropIndex')).toBe(true)\n\t\t})\n\n\t\ttest('drop index and drop FK emitted when table is dropped', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'posts',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [],\n\t\t\t\tindexes: [{ name: 'posts_title_idx', on: ['title'], unique: false }],\n\t\t\t\tforeignKeys: [{ name: 'posts_author_fk', on: 'authorId', references: { table: 'users', column: 'id' } }],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [], current)\n\t\t\texpect(result).toHaveLength(3)\n\t\t\texpect(result[0].kind).toBe('dropForeignKey')\n\t\t\texpect(result[1].kind).toBe('dropIndex')\n\t\t\texpect(result[2].kind).toBe('dropTable')\n\t\t})\n\n\t\ttest('nullable field mismatch detected as modify', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.optional(v.string()), { onCreate: () => undefined })\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'email', type: 'string', nullable: false }],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0].kind).toBe('modifyField')\n\t\t})\n\t})\n}\n","import type { OrmAdapterLike } from '../adapters/base'\nimport type { OrmAdapter } from '../orm-adapter'\nimport { diffSchemas } from './diff'\nimport type { DiscoveredSchema } from './introspection-types'\nimport type { ChangeFor } from './types'\nimport type { Repo } from '../repo/repo'\nimport type { AnySchema } from '../schema'\n\nexport type IntrospectableAdapter<A> = A extends { introspect(): Promise<DiscoveredSchema[]> } ? A : never\n\nexport class MigrationCodegen<A extends OrmAdapterLike<any>> {\n\treadonly #adapter: OrmAdapter & { introspect(): Promise<DiscoveredSchema[]> }\n\treadonly #target: ReadonlyArray<AnySchema>\n\n\tconstructor(\n\t\t_repo: Repo<A>,\n\t\tadapter: OrmAdapter & { introspect(): Promise<DiscoveredSchema[]> },\n\t\ttarget: ReadonlyArray<AnySchema>,\n\t) {\n\t\tthis.#adapter = adapter\n\t\tthis.#target = target\n\t}\n\n\tasync diff(): Promise<ReadonlyArray<ChangeFor<A>> | null> {\n\t\tconst current = await this.#adapter.introspect()\n\t\tconst changes = diffSchemas(this.#adapter, this.#target, current)\n\t\tif (changes.length === 0) return null\n\t\treturn changes as unknown as ReadonlyArray<ChangeFor<A>>\n\t}\n\n\tasync discover(): Promise<ReadonlyArray<DiscoveredSchema>> {\n\t\treturn this.#adapter.introspect()\n\t}\n\n\tstatic from<A extends OrmAdapterLike<any>>(\n\t\trepo: Repo<IntrospectableAdapter<A>>,\n\t\tadapter: A & OrmAdapter & { introspect(): Promise<DiscoveredSchema[]> },\n\t) {\n\t\treturn {\n\t\t\ttarget(schemas: ReadonlyArray<AnySchema>) {\n\t\t\t\treturn {\n\t\t\t\t\tbuild(): MigrationCodegen<A> {\n\t\t\t\t\t\treturn new MigrationCodegen(repo as unknown as Repo<A>, adapter, schemas)\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { Schema } = await import('../schema')\n\tconst { Repo } = await import('../repo/repo')\n\tconst { OrmIntrospectionError } = await import('../errors/introspection')\n\n\tconst UserSchema = Schema.from('users')\n\t\t.pk('id', v.string(), () => `u-${Math.random().toString(36).slice(2)}`)\n\t\t.field('email', v.string())\n\t\t.field('age', v.number())\n\t\t.build()\n\n\tconst PostSchema = Schema.from('posts')\n\t\t.pk('id', v.string(), () => `p-${Math.random().toString(36).slice(2)}`)\n\t\t.field('title', v.string())\n\t\t.field('authorId', v.string())\n\t\t.build()\n\n\tfunction makeEnv() {\n\t\tconst adapter = InMemoryAdapter.create({})\n\t\tconst repo = new Repo({ adapter, resolve: (s) => ({ table: s.name }) })\n\t\treturn { adapter, repo }\n\t}\n\n\tdescribe('MigrationCodegen', () => {\n\t\ttest('diff() returns createTable changes for fresh DB', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst codegen = MigrationCodegen.from(repo, adapter).target([UserSchema]).build()\n\t\t\tconst changes = await codegen.diff()\n\t\t\texpect(changes).not.toBeNull()\n\t\t\texpect(changes).toHaveLength(1)\n\t\t\texpect(changes![0].kind).toBe('createTable')\n\t\t\tconst ct = changes![0] as any\n\t\t\texpect(ct.name).toBe('users')\n\t\t\texpect(ct.pk).toEqual({ name: 'id', type: 'string' })\n\t\t\texpect(ct.fields).toEqual([\n\t\t\t\t{ name: 'email', type: 'string' },\n\t\t\t\t{ name: 'age', type: 'number' },\n\t\t\t])\n\t\t})\n\n\t\ttest('diff() returns null when target matches current', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [\n\t\t\t\t\t{ name: 'email', type: 'string' },\n\t\t\t\t\t{ name: 'age', type: 'number' },\n\t\t\t\t],\n\t\t\t})\n\t\t\tconst codegen = MigrationCodegen.from(repo, adapter).target([UserSchema]).build()\n\t\t\tconst changes = await codegen.diff()\n\t\t\texpect(changes).toBeNull()\n\t\t})\n\n\t\ttest('discover() returns raw introspection descriptors', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'email', type: 'string' }],\n\t\t\t})\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'users', on: ['email'], unique: true })\n\t\t\tconst codegen = MigrationCodegen.from(repo, adapter).target([UserSchema]).build()\n\t\t\tconst discovered = await codegen.discover()\n\t\t\texpect(discovered).toHaveLength(1)\n\t\t\texpect(discovered[0].name).toBe('users')\n\t\t\texpect(discovered[0].pk).toEqual({ name: 'id', type: 'string' })\n\t\t\texpect(discovered[0].fields).toEqual([{ name: 'email', type: 'string', nullable: false }])\n\t\t\texpect(discovered[0].indexes).toEqual([{ name: 'users_email_idx', on: ['email'], unique: true }])\n\t\t})\n\n\t\ttest('end-to-end: seed adapter state, declare target, call diff()', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'email', type: 'string' }],\n\t\t\t})\n\t\t\tconst codegen = MigrationCodegen.from(repo, adapter).target([UserSchema, PostSchema]).build()\n\t\t\tconst changes = await codegen.diff()\n\t\t\texpect(changes).not.toBeNull()\n\t\t\tconst kinds = changes!.map((c) => c.kind)\n\t\t\texpect(kinds).toContain('addField')\n\t\t\texpect(kinds).toContain('createTable')\n\t\t\tconst addField = changes!.find((c) => c.kind === 'addField') as any\n\t\t\texpect(addField.table).toBe('users')\n\t\t\texpect(addField.field.name).toBe('age')\n\t\t\tconst createTable = changes!.find((c) => c.kind === 'createTable') as any\n\t\t\texpect(createTable.name).toBe('posts')\n\t\t})\n\n\t\ttest('compile-time: IntrospectableAdapter is never when adapter lacks introspect', async () => {\n\t\t\tconst { OrmAdapter } = await import('../orm-adapter')\n\t\t\tclass _NoIntrospectAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t}\n\t\t\ttype NoIntrospect = InstanceType<typeof _NoIntrospectAdapter>\n\t\t\texpectTypeOf<IntrospectableAdapter<NoIntrospect>>().toBeNever()\n\t\t})\n\n\t\ttest('OrmIntrospectionError thrown on unrecognized DB type (sentinel)', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\t// Inject a sentinel value with an invalid type into the adapter's table state\n\t\t\tadapter.tables.set('broken', {\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: new Map([['weirdCol', { name: 'weirdCol', type: 'bytea' as any }]]),\n\t\t\t})\n\t\t\tconst codegen = MigrationCodegen.from(repo, adapter).target([UserSchema]).build()\n\t\t\tconst origIntrospect = adapter.introspect.bind(adapter)\n\t\t\tadapter.introspect = async () => {\n\t\t\t\tconst schemas = await origIntrospect()\n\t\t\t\tfor (const s of schemas) {\n\t\t\t\t\tfor (const f of s.fields) {\n\t\t\t\t\t\tconst validTypes = ['string', 'number', 'boolean', 'null', 'object', 'array', 'date']\n\t\t\t\t\t\tif (!validTypes.includes(f.type)) {\n\t\t\t\t\t\t\tthrow new OrmIntrospectionError({ adapter: 'in-memory', table: s.name, cause: `unsupported type '${f.type}' on column '${f.name}'` })\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn schemas\n\t\t\t}\n\t\t\tawait expect(codegen.diff()).rejects.toThrow(OrmIntrospectionError)\n\t\t\ttry {\n\t\t\t\tawait codegen.diff()\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err.adapter).toBe('in-memory')\n\t\t\t\texpect(err.table).toBe('broken')\n\t\t\t}\n\t\t})\n\t})\n}\n","import type { OrmAdapterLike } from '../adapters/base'\nimport type { OrmAdapter } from '../orm-adapter'\nimport type { AnyChange } from './types'\nimport type { Repo } from '../repo/repo'\n\nexport async function applyChange(adapter: OrmAdapter, repo: Repo<OrmAdapterLike<any>>, change: AnyChange): Promise<void> {\n\tif (change.kind === 'execute') {\n\t\tawait change.up(repo)\n\t\treturn\n\t}\n\n\tconst methodName = `apply${change.kind[0].toUpperCase()}${change.kind.slice(1)}`\n\tconst method = (adapter as any)[methodName]\n\tif (typeof method !== 'function') {\n\t\tthrow new Error(`Adapter does not support change kind '${change.kind}'`)\n\t}\n\tawait method.call(adapter, change)\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, vi } = import.meta.vitest\n\n\tdescribe('applyChange', () => {\n\t\ttest('routes addIndex to adapter.applyAddIndex', async () => {\n\t\t\tconst applyAddIndex = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyAddIndex } as any\n\t\t\tconst repo = {} as any\n\t\t\tawait applyChange(adapter, repo, { kind: 'addIndex', table: 'users', on: ['email'] })\n\t\t\texpect(applyAddIndex).toHaveBeenCalledWith({ kind: 'addIndex', table: 'users', on: ['email'] })\n\t\t})\n\n\t\ttest('routes execute to change.up(repo)', async () => {\n\t\t\tconst up = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = {} as any\n\t\t\tconst repo = {} as any\n\t\t\tawait applyChange(adapter, repo, { kind: 'execute', up })\n\t\t\texpect(up).toHaveBeenCalledWith(repo)\n\t\t})\n\n\t\ttest('throws when adapter lacks the apply method for a declarative change', async () => {\n\t\t\tconst adapter = {} as any\n\t\t\tconst repo = {} as any\n\t\t\tawait expect(applyChange(adapter, repo, { kind: 'addIndex', table: 't', on: ['a'] }))\n\t\t\t\t.rejects.toThrow(\"Adapter does not support change kind 'addIndex'\")\n\t\t})\n\n\t\ttest('routes createTable to adapter.applyCreateTable', async () => {\n\t\t\tconst applyCreateTable = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyCreateTable } as any\n\t\t\tconst change = { kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'string' }, fields: [] }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyCreateTable).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes dropTable to adapter.applyDropTable', async () => {\n\t\t\tconst applyDropTable = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyDropTable } as any\n\t\t\tconst change = { kind: 'dropTable' as const, name: 'users' }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyDropTable).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes addField to adapter.applyAddField', async () => {\n\t\t\tconst applyAddField = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyAddField } as any\n\t\t\tconst change = { kind: 'addField' as const, table: 'users', field: { name: 'age', type: 'number' } }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyAddField).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes dropField to adapter.applyDropField', async () => {\n\t\t\tconst applyDropField = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyDropField } as any\n\t\t\tconst change = { kind: 'dropField' as const, table: 'users', name: 'age' }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyDropField).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes modifyField to adapter.applyModifyField', async () => {\n\t\t\tconst applyModifyField = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyModifyField } as any\n\t\t\tconst change = { kind: 'modifyField' as const, table: 'users', name: 'age', to: { name: 'age', type: 'string' } }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyModifyField).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes renameTable to adapter.applyRenameTable', async () => {\n\t\t\tconst applyRenameTable = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyRenameTable } as any\n\t\t\tconst change = { kind: 'renameTable' as const, from: 'users', to: 'accounts' }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyRenameTable).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes renameField to adapter.applyRenameField', async () => {\n\t\t\tconst applyRenameField = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyRenameField } as any\n\t\t\tconst change = { kind: 'renameField' as const, table: 'users', from: 'name', to: 'fullName' }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyRenameField).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes dropIndex to adapter.applyDropIndex', async () => {\n\t\t\tconst applyDropIndex = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyDropIndex } as any\n\t\t\tconst change = { kind: 'dropIndex' as const, name: 'users_email_idx' }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyDropIndex).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes addForeignKey to adapter.applyAddForeignKey', async () => {\n\t\t\tconst applyAddForeignKey = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyAddForeignKey } as any\n\t\t\tconst change = { kind: 'addForeignKey' as const, table: 'posts', on: 'authorId', references: { table: 'users', column: 'id' } }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyAddForeignKey).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes dropForeignKey to adapter.applyDropForeignKey', async () => {\n\t\t\tconst applyDropForeignKey = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyDropForeignKey } as any\n\t\t\tconst change = { kind: 'dropForeignKey' as const, table: 'posts', name: 'posts_authorId_fk' }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyDropForeignKey).toHaveBeenCalledWith(change)\n\t\t})\n\t})\n}\n","import type { AnyMigration } from './types'\nimport { OrmMigrationError } from '../errors/migration'\n\nexport type PendingOpts = { to?: string; steps?: number }\n\nexport function computePending(\n\tdeclared: ReadonlyArray<AnyMigration>,\n\tapplied: ReadonlyArray<{ id: string; appliedAt: number }>,\n\topts?: PendingOpts,\n): { pending: AnyMigration[]; skipped: string[] } {\n\tconst appliedIds = new Set(applied.map((a) => a.id))\n\tconst declaredIds = new Set(declared.map((d) => d.id))\n\n\tconst orphans = applied.filter((a) => !declaredIds.has(a.id)).map((a) => a.id)\n\tif (orphans.length > 0) {\n\t\tthrow new OrmMigrationError({\n\t\t\tid: orphans[0],\n\t\t\tphase: 'load',\n\t\t\tcause: `orphan migrations: [${orphans.join(', ')}]`,\n\t\t})\n\t}\n\n\tconst sorted = [...declared].sort((a, b) => a.id.localeCompare(b.id))\n\n\tconst pending: AnyMigration[] = []\n\tconst skipped: string[] = []\n\tfor (const m of sorted) {\n\t\tif (appliedIds.has(m.id)) {\n\t\t\tskipped.push(m.id)\n\t\t} else {\n\t\t\tpending.push(m)\n\t\t}\n\t}\n\n\tif (opts?.to !== undefined) {\n\t\tconst toIdx = pending.findIndex((m) => m.id === opts.to)\n\t\tif (toIdx === -1) {\n\t\t\tif (appliedIds.has(opts.to)) return { pending: [], skipped }\n\t\t\tthrow new OrmMigrationError({\n\t\t\t\tid: opts.to,\n\t\t\t\tphase: 'load',\n\t\t\t\tcause: `unknown migration id: ${opts.to}`,\n\t\t\t})\n\t\t}\n\t\tpending.splice(toIdx + 1)\n\t}\n\n\tif (opts?.steps !== undefined) {\n\t\tpending.splice(opts.steps)\n\t}\n\n\treturn { pending, skipped }\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { OrmMigrationError } = await import('../errors/migration')\n\n\tdescribe('computePending', () => {\n\t\ttest('returns all as pending when none applied', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: '0002-add-index', changes: [] },\n\t\t\t\t{ id: '0001-create-table', changes: [] },\n\t\t\t]\n\t\t\tconst result = computePending(declared, [])\n\t\t\texpect(result.pending.map((m) => m.id)).toEqual(['0001-create-table', '0002-add-index'])\n\t\t\texpect(result.skipped).toEqual([])\n\t\t})\n\n\t\ttest('skips already applied migrations', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t]\n\t\t\tconst applied = [{ id: '0001', appliedAt: 1 }]\n\t\t\tconst result = computePending(declared, applied)\n\t\t\texpect(result.pending.map((m) => m.id)).toEqual(['0002', '0003'])\n\t\t\texpect(result.skipped).toEqual(['0001'])\n\t\t})\n\n\t\ttest('throws on orphan migrations', () => {\n\t\t\tconst declared = [{ id: '0001', changes: [] }]\n\t\t\tconst applied = [{ id: '0001', appliedAt: 1 }, { id: 'ghost', appliedAt: 2 }]\n\t\t\texpect(() => computePending(declared, applied)).toThrow(OrmMigrationError)\n\t\t\ttry {\n\t\t\t\tcomputePending(declared, applied)\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err.phase).toBe('load')\n\t\t\t\texpect(err.cause).toContain('ghost')\n\t\t\t}\n\t\t})\n\n\t\ttest('returns empty pending when all applied', () => {\n\t\t\tconst declared = [{ id: '0001', changes: [] }]\n\t\t\tconst applied = [{ id: '0001', appliedAt: 1 }]\n\t\t\tconst result = computePending(declared, applied)\n\t\t\texpect(result.pending).toEqual([])\n\t\t\texpect(result.skipped).toEqual(['0001'])\n\t\t})\n\n\t\ttest('sorts by lex id order', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: 'c', changes: [] },\n\t\t\t\t{ id: 'a', changes: [] },\n\t\t\t\t{ id: 'b', changes: [] },\n\t\t\t]\n\t\t\tconst result = computePending(declared, [])\n\t\t\texpect(result.pending.map((m) => m.id)).toEqual(['a', 'b', 'c'])\n\t\t})\n\n\t\ttest('to: returns pending up to and including the named id', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t]\n\t\t\tconst result = computePending(declared, [], { to: '0002' })\n\t\t\texpect(result.pending.map((m) => m.id)).toEqual(['0001', '0002'])\n\t\t})\n\n\t\ttest('to: no-op when target id already applied', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t]\n\t\t\tconst applied = [{ id: '0001', appliedAt: 1 }, { id: '0002', appliedAt: 2 }]\n\t\t\tconst result = computePending(declared, applied, { to: '0002' })\n\t\t\texpect(result.pending).toEqual([])\n\t\t})\n\n\t\ttest('to: throws on unknown id', () => {\n\t\t\tconst declared = [{ id: '0001', changes: [] }]\n\t\t\texpect(() => computePending(declared, [], { to: 'unknown' })).toThrow(OrmMigrationError)\n\t\t\ttry {\n\t\t\t\tcomputePending(declared, [], { to: 'unknown' })\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err.phase).toBe('load')\n\t\t\t\texpect(err.id).toBe('unknown')\n\t\t\t}\n\t\t})\n\n\t\ttest('steps: returns the first N pending', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t]\n\t\t\tconst result = computePending(declared, [], { steps: 1 })\n\t\t\texpect(result.pending.map((m) => m.id)).toEqual(['0001'])\n\t\t})\n\n\t\ttest('steps: returns all pending when N exceeds count', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t]\n\t\t\tconst result = computePending(declared, [], { steps: 5 })\n\t\t\texpect(result.pending.map((m) => m.id)).toEqual(['0001', '0002'])\n\t\t})\n\t})\n}\n","import { OrmValidationError, type OrmValidationFailure } from '../errors/validation'\nimport type { OrmAdapter } from '../orm-adapter'\nimport type { AnyChange, AnyMigration } from './types'\n\nfunction isEmpty(s: string | undefined | null): boolean {\n\treturn !s || s.trim() === ''\n}\n\ntype ChangeContext = { adapter: OrmAdapter; migrationId: string; changeIndex: number; failures: OrmValidationFailure[] }\n\nfunction validateFieldSpec(ctx: ChangeContext, fieldSpec: { name: string; type: string }, fieldLabel: string): void {\n\tif (isEmpty(fieldSpec.name)) {\n\t\tctx.failures.push({ migrationId: ctx.migrationId, changeIndex: ctx.changeIndex, field: fieldLabel, cause: `${fieldLabel} name must be non-empty` })\n\t}\n\tif (ctx.adapter.supportedFieldTypes.length > 0 && !ctx.adapter.supportedFieldTypes.includes(fieldSpec.type as any)) {\n\t\tctx.failures.push({ migrationId: ctx.migrationId, changeIndex: ctx.changeIndex, field: fieldLabel, cause: `unsupported field type '${fieldSpec.type}'` })\n\t}\n}\n\nfunction fail(ctx: ChangeContext, field: string | undefined, cause: string): void {\n\tctx.failures.push({ migrationId: ctx.migrationId, changeIndex: ctx.changeIndex, ...(field ? { field } : {}), cause })\n}\n\nfunction validateChange(adapter: OrmAdapter, change: AnyChange, migrationId: string, changeIndex: number, failures: OrmValidationFailure[]): void {\n\tif (change.kind === 'execute') return\n\n\tconst ctx: ChangeContext = { adapter, migrationId, changeIndex, failures }\n\tconst methodName = `apply${change.kind[0].toUpperCase()}${change.kind.slice(1)}`\n\tif (typeof (adapter as any)[methodName] !== 'function') {\n\t\tfail(ctx, undefined, `adapter does not support change kind '${change.kind}'`)\n\t}\n\n\tswitch (change.kind) {\n\t\tcase 'createTable': {\n\t\t\tif (isEmpty(change.name)) fail(ctx, 'name', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.pk.name)) fail(ctx, 'pk.name', 'pk name must be non-empty')\n\t\t\tif (adapter.supportedFieldTypes.length > 0 && !adapter.supportedFieldTypes.includes(change.pk.type as any)) {\n\t\t\t\tfail(ctx, 'pk.type', `unsupported field type '${change.pk.type}'`)\n\t\t\t}\n\t\t\tconst fieldNames = new Set<string>()\n\t\t\tfor (const f of change.fields) {\n\t\t\t\tvalidateFieldSpec(ctx, f, 'field')\n\t\t\t\tif (fieldNames.has(f.name)) fail(ctx, 'fields', `duplicate field name '${f.name}' in createTable`)\n\t\t\t\tfieldNames.add(f.name)\n\t\t\t}\n\t\t\tif (change.pk.name && fieldNames.has(change.pk.name)) {\n\t\t\t\tfail(ctx, 'pk.name', `pk name '${change.pk.name}' collides with a field name`)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tcase 'dropTable': {\n\t\t\tif (isEmpty(change.name)) fail(ctx, 'name', 'table name must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'addField': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tvalidateFieldSpec(ctx, change.field, 'field')\n\t\t\tbreak\n\t\t}\n\t\tcase 'dropField': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.name)) fail(ctx, 'name', 'field name must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'modifyField': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.name)) fail(ctx, 'name', 'field name must be non-empty')\n\t\t\tvalidateFieldSpec(ctx, change.to, 'to')\n\t\t\tbreak\n\t\t}\n\t\tcase 'renameTable': {\n\t\t\tif (isEmpty(change.from)) fail(ctx, 'from', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.to)) fail(ctx, 'to', 'table name must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'renameField': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.from)) fail(ctx, 'from', 'field name must be non-empty')\n\t\t\tif (isEmpty(change.to)) fail(ctx, 'to', 'field name must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'addIndex': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tif (!change.on || change.on.length === 0) fail(ctx, 'on', 'addIndex.on must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'dropIndex': {\n\t\t\tif (isEmpty(change.name)) fail(ctx, 'name', 'index name must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'addForeignKey': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.on)) fail(ctx, 'on', 'addForeignKey.on must be non-empty')\n\t\t\tif (isEmpty(change.references?.table)) fail(ctx, 'references.table', 'references table must be non-empty')\n\t\t\tif (isEmpty(change.references?.column)) fail(ctx, 'references.column', 'references column must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'dropForeignKey': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.name)) fail(ctx, 'name', 'foreign key name must be non-empty')\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nexport function assertNormalisedChanges(adapter: OrmAdapter, migrations: ReadonlyArray<AnyMigration>): void {\n\tconst failures: OrmValidationFailure[] = []\n\n\tconst seenIds = new Set<string>()\n\tfor (const m of migrations) {\n\t\tif (isEmpty(m.id)) {\n\t\t\tfailures.push({ cause: 'migration id must be a non-empty string' })\n\t\t\tcontinue\n\t\t}\n\n\t\tif (seenIds.has(m.id)) {\n\t\t\tfailures.push({ migrationId: m.id, cause: `duplicate migration id '${m.id}'` })\n\t\t}\n\t\tseenIds.add(m.id)\n\n\t\tfor (let i = 0; i < m.changes.length; i++) {\n\t\t\tvalidateChange(adapter, m.changes[i], m.id, i, failures)\n\t\t}\n\t}\n\n\tif (failures.length > 0) {\n\t\tthrow new OrmValidationError('changes', 'migrations', 'build', failures)\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\n\tdescribe('assertNormalisedChanges', () => {\n\t\tconst fullAdapter = {\n\t\t\tsupportedFieldTypes: ['string', 'number', 'boolean'],\n\t\t\tapplyCreateTable: async () => {},\n\t\t\tapplyDropTable: async () => {},\n\t\t\tapplyAddField: async () => {},\n\t\t\tapplyDropField: async () => {},\n\t\t\tapplyModifyField: async () => {},\n\t\t\tapplyRenameTable: async () => {},\n\t\t\tapplyRenameField: async () => {},\n\t\t\tapplyAddIndex: async () => {},\n\t\t\tapplyDropIndex: async () => {},\n\t\t\tapplyAddForeignKey: async () => {},\n\t\t\tapplyDropForeignKey: async () => {},\n\t\t} as any\n\n\t\tconst adapterWithIndex = { supportedFieldTypes: ['string', 'number'], applyAddIndex: async () => {} } as any\n\t\tconst adapterWithout = { supportedFieldTypes: [] } as any\n\n\t\ttest('passes for valid migrations with all variant kinds', () => {\n\t\t\tconst migrations = [\n\t\t\t\t{ id: '0001', changes: [\n\t\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'email', type: 'string' }] },\n\t\t\t\t\t{ kind: 'addField' as const, table: 'users', field: { name: 'age', type: 'number' } },\n\t\t\t\t\t{ kind: 'addIndex' as const, table: 'users', on: ['email'] },\n\t\t\t\t\t{ kind: 'addForeignKey' as const, table: 'users', on: 'orgId', references: { table: 'orgs', column: 'id' } },\n\t\t\t\t] },\n\t\t\t]\n\t\t\texpect(() => assertNormalisedChanges(fullAdapter, migrations)).not.toThrow()\n\t\t})\n\n\t\ttest('invariant A: throws on empty migration id', () => {\n\t\t\tconst migrations = [{ id: '', changes: [] }]\n\t\t\texpect(() => assertNormalisedChanges(fullAdapter, migrations)).toThrow(OrmValidationError)\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.kind).toBe('changes')\n\t\t\t\texpect(err.failures).toHaveLength(1)\n\t\t\t\texpect(err.failures[0].cause).toContain('non-empty')\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant B: throws on duplicate migration ids with migrationId field', () => {\n\t\t\tconst migrations = [{ id: 'dup', changes: [] }, { id: 'dup', changes: [] }]\n\t\t\texpect(() => assertNormalisedChanges(fullAdapter, migrations)).toThrow(OrmValidationError)\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.kind).toBe('changes')\n\t\t\t\tconst dup = err.failures.find((f: any) => f.cause.includes('duplicate'))\n\t\t\t\texpect(dup).toBeDefined()\n\t\t\t\texpect(dup.migrationId).toBe('dup')\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant C: throws when field type not in supportedFieldTypes', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'data', type: 'bigint' }] },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"unsupported field type 'bigint'\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant C: throws when pk type not in supportedFieldTypes', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'uuid' }, fields: [] },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"unsupported field type 'uuid'\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant C: throws for addField with unsupported type', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'addField' as const, table: 'users', field: { name: 'x', type: 'bigint' } },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"unsupported field type\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant C: throws for modifyField with unsupported type', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'modifyField' as const, table: 'users', name: 'x', to: { name: 'x', type: 'bigint' } },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"unsupported field type\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant C: skips field type check when supportedFieldTypes is empty', () => {\n\t\t\tconst adapter = { ...fullAdapter, supportedFieldTypes: [] } as any\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'anything' }, fields: [{ name: 'x', type: 'custom' }] },\n\t\t\t] }]\n\t\t\texpect(() => assertNormalisedChanges(adapter, migrations)).not.toThrow()\n\t\t})\n\n\t\ttest('invariant D: throws on duplicate field names in createTable', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'string' }, fields: [\n\t\t\t\t\t{ name: 'email', type: 'string' },\n\t\t\t\t\t{ name: 'email', type: 'string' },\n\t\t\t\t] },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"duplicate field name 'email'\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant D: throws when pk.name collides with a field name', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'email', type: 'string' }, fields: [\n\t\t\t\t\t{ name: 'email', type: 'string' },\n\t\t\t\t] },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"pk name 'email' collides\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant E: throws on empty table name in addIndex', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [{ kind: 'addIndex' as const, table: '', on: ['email'] }] }]\n\t\t\texpect(() => assertNormalisedChanges(adapterWithIndex, migrations)).toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('invariant E: throws on empty names in dropTable, dropField, renameTable, renameField, dropIndex, dropForeignKey', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'dropTable' as const, name: '' },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('table name must be non-empty'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant E: throws on empty field name in dropField', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'dropField' as const, table: 'users', name: '' },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('field name must be non-empty'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant E: throws on empty renameTable from/to', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'renameTable' as const, from: '', to: '' },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.filter((f: any) => f.cause.includes('table name must be non-empty'))).toHaveLength(2)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant E: throws on empty renameField from/to/table', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'renameField' as const, table: '', from: '', to: '' },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.length).toBeGreaterThanOrEqual(3)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant E: throws on empty dropIndex name', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'dropIndex' as const, name: '' },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('index name must be non-empty'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant E: throws on empty dropForeignKey table/name', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'dropForeignKey' as const, table: '', name: '' },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.length).toBeGreaterThanOrEqual(2)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant F: throws on empty addIndex.on', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [{ kind: 'addIndex' as const, table: 'users', on: [] as string[] }] }]\n\t\t\texpect(() => assertNormalisedChanges(adapterWithIndex, migrations)).toThrow(OrmValidationError)\n\t\t\ttry { assertNormalisedChanges(adapterWithIndex, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('non-empty'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant F: throws on empty addForeignKey.on', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'addForeignKey' as const, table: 'users', on: '', references: { table: 'orgs', column: 'id' } },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('addForeignKey.on must be non-empty'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant F: throws on empty addForeignKey references', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'addForeignKey' as const, table: 'users', on: 'orgId', references: { table: '', column: '' } },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('references table must be non-empty'))).toBe(true)\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('references column must be non-empty'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant G: throws when adapter lacks required apply method', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [{ kind: 'addIndex' as const, table: 'users', on: ['email'] }] }]\n\t\t\texpect(() => assertNormalisedChanges(adapterWithout, migrations)).toThrow(OrmValidationError)\n\t\t\ttry { assertNormalisedChanges(adapterWithout, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('does not support'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant G: throws for each unsupported variant', () => {\n\t\t\tconst noOpAdapter = { supportedFieldTypes: ['string'] } as any\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'string' }, fields: [] },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(noOpAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"does not support change kind 'createTable'\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant H: allows empty changes array (no-op baseline)', () => {\n\t\t\tconst migrations = [{ id: '0001-baseline', changes: [] }]\n\t\t\texpect(() => assertNormalisedChanges(adapterWithIndex, migrations)).not.toThrow()\n\t\t})\n\n\t\ttest('invariant I: collects all failures into single throw', () => {\n\t\t\tconst migrations = [\n\t\t\t\t{ id: '', changes: [] },\n\t\t\t\t{ id: 'dup', changes: [] },\n\t\t\t\t{ id: 'dup', changes: [{ kind: 'addIndex' as const, table: '', on: [] as string[] }] },\n\t\t\t]\n\t\t\ttry { assertNormalisedChanges(adapterWithIndex, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.length).toBeGreaterThanOrEqual(4)\n\t\t\t}\n\t\t})\n\n\t\ttest('failures carry migrationId and changeIndex', () => {\n\t\t\tconst migrations = [{ id: 'mig-1', changes: [\n\t\t\t\t{ kind: 'addIndex' as const, table: '', on: [] as string[] },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(adapterWithIndex, migrations) } catch (err: any) {\n\t\t\t\tfor (const f of err.failures) {\n\t\t\t\t\texpect(f.migrationId).toBe('mig-1')\n\t\t\t\t\texpect(f.changeIndex).toBe(0)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\ttest('passes for execute changes without adapter check', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [{ kind: 'execute' as const, up: async () => {} }] }]\n\t\t\texpect(() => assertNormalisedChanges(adapterWithout, migrations)).not.toThrow()\n\t\t})\n\t})\n}\n","import type { OrmAdapterLike } from '../adapters/base'\nimport { OrmMigrationError } from '../errors/migration'\nimport type { OrmAdapter } from '../orm-adapter'\nimport { applyChange } from './apply'\nimport { computePending, type PendingOpts } from './pending'\nimport type { AnyChange, AnyMigration, Migration } from './types'\nimport { assertNormalisedChanges } from './validate'\nimport type { Repo } from '../repo/repo'\n\ntype RunResult = { ran: string[]; skipped: string[] }\nexport type StatusEntry = { id: string; applied: boolean; appliedAt?: number }\n\ntype HasAcquireMigrationLock<A> =\n\t'acquireMigrationLock' extends keyof A\n\t\t? A['acquireMigrationLock'] extends (...args: any) => any ? true : false\n\t\t: false\n\ntype WithoutLockStep<A extends OrmAdapterLike<any>> = HasAcquireMigrationLock<A> extends true\n\t? {}\n\t: { withoutLock(): { build(): Migrator<A> } }\n\nexport class Migrator<A extends OrmAdapterLike<any>> {\n\treadonly #repo: Repo<A>\n\treadonly #adapter: OrmAdapter\n\treadonly #migrations: ReadonlyArray<Migration<A>>\n\treadonly #withoutLock: boolean\n\n\tconstructor(repo: Repo<A>, adapter: OrmAdapter, migrations: ReadonlyArray<Migration<A>>, withoutLock = false) {\n\t\tthis.#repo = repo\n\t\tthis.#adapter = adapter\n\t\tthis.#migrations = migrations\n\t\tthis.#withoutLock = withoutLock\n\t}\n\n\t#requireMethod(name: 'loadMigrations' | 'recordMigration'): void {\n\t\tif (typeof this.#adapter[name] !== 'function') {\n\t\t\tconst phase = name === 'loadMigrations' ? 'load' : 'record' as const\n\t\t\tthrow new OrmMigrationError({ id: '', phase, cause: `adapter does not implement ${name}` })\n\t\t}\n\t}\n\n\tasync up(opts?: PendingOpts): Promise<RunResult> {\n\t\tthis.#requireMethod('loadMigrations')\n\t\tthis.#requireMethod('recordMigration')\n\n\t\tconst useLock = !this.#withoutLock && typeof this.#adapter.acquireMigrationLock === 'function'\n\t\tif (useLock) {\n\t\t\ttry {\n\t\t\t\treturn await this.#adapter.acquireMigrationLock!(() => this.#runPending(opts))\n\t\t\t} catch (err) {\n\t\t\t\tif (err instanceof OrmMigrationError) throw err\n\t\t\t\tthrow new OrmMigrationError({ id: '', phase: 'lock', cause: err })\n\t\t\t}\n\t\t}\n\t\treturn this.#runPending(opts)\n\t}\n\n\tasync status(): Promise<StatusEntry[]> {\n\t\tthis.#requireMethod('loadMigrations')\n\t\tconst applied = await this.#adapter.loadMigrations!()\n\t\tconst appliedMap = new Map(applied.map((a) => [a.id, a.appliedAt]))\n\t\tconst sorted = [...this.#migrations].sort((a, b) => a.id.localeCompare(b.id))\n\t\treturn sorted.map((m) => {\n\t\t\tconst appliedAt = appliedMap.get(m.id)\n\t\t\tif (appliedAt !== undefined) return { id: m.id, applied: true as const, appliedAt }\n\t\t\treturn { id: m.id, applied: false as const }\n\t\t})\n\t}\n\n\tasync dry(opts?: PendingOpts): Promise<{ would: string[] }> {\n\t\tthis.#requireMethod('loadMigrations')\n\t\tconst applied = await this.#adapter.loadMigrations!()\n\t\tconst { pending } = computePending(this.#migrations as unknown as ReadonlyArray<AnyMigration>, applied, opts)\n\t\treturn { would: pending.map((m) => m.id) }\n\t}\n\n\tasync #runPending(opts?: PendingOpts): Promise<RunResult> {\n\t\tlet applied: { id: string; appliedAt: number }[]\n\t\ttry {\n\t\t\tapplied = await this.#adapter.loadMigrations!()\n\t\t} catch (err) {\n\t\t\tthrow new OrmMigrationError({ id: '', phase: 'load', cause: err })\n\t\t}\n\n\t\tconst { pending, skipped } = computePending(this.#migrations as unknown as ReadonlyArray<AnyMigration>, applied, opts)\n\t\tconst ran: string[] = []\n\n\t\tfor (const m of pending) {\n\t\t\tconst execute = async () => {\n\t\t\t\tfor (const c of m.changes) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait applyChange(this.#adapter, this.#repo as unknown as Repo<OrmAdapterLike<any>>, c as AnyChange)\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tthrow new OrmMigrationError({ id: m.id, phase: 'user', cause: err })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.#adapter.recordMigration!(m.id, Date.now())\n\t\t\t\t} catch (err) {\n\t\t\t\t\tthrow new OrmMigrationError({ id: m.id, phase: 'record', cause: err })\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst shouldWrapInSession = m.tx !== false && typeof this.#adapter.session === 'function'\n\t\t\tif (shouldWrapInSession) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.#repo.session(execute)\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (err instanceof OrmMigrationError) throw err\n\t\t\t\t\tthrow new OrmMigrationError({ id: m.id, phase: 'session', cause: err })\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tawait execute()\n\t\t\t}\n\n\t\t\tran.push(m.id)\n\t\t}\n\n\t\treturn { ran, skipped }\n\t}\n\n\tstatic from<A extends OrmAdapterLike<any>>(repo: Repo<A>, adapter: A & OrmAdapter) {\n\t\treturn {\n\t\t\tmigrations(migrations: ReadonlyArray<Migration<A>>) {\n\t\t\t\treturn {\n\t\t\t\t\tbuild(): Migrator<A> {\n\t\t\t\t\t\tassertNormalisedChanges(adapter, migrations as any)\n\t\t\t\t\t\treturn new Migrator(repo, adapter, migrations)\n\t\t\t\t\t},\n\t\t\t\t\twithoutLock() {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tbuild(): Migrator<A> {\n\t\t\t\t\t\t\t\tassertNormalisedChanges(adapter, migrations as any)\n\t\t\t\t\t\t\t\treturn new Migrator(repo, adapter, migrations, true)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t} as { build(): Migrator<A> } & WithoutLockStep<A>\n\t\t\t},\n\t\t}\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { Schema } = await import('../schema')\n\tconst { Repo } = await import('../repo/repo')\n\tconst { OrmValidationError } = await import('../errors/validation')\n\tconst { OrmMigrationError } = await import('../errors/migration')\n\n\tconst UserSchema = Schema.from('users')\n\t\t.pk('id', v.string(), () => `u-${Math.random().toString(36).slice(2)}`)\n\t\t.field('email', v.string())\n\t\t.build()\n\n\tfunction makeEnv() {\n\t\tconst adapter = InMemoryAdapter.create({})\n\t\tconst repo = new Repo({ adapter, resolve: (s) => ({ table: s.name }) })\n\t\treturn { adapter, repo }\n\t}\n\n\tdescribe('Migrator', () => {\n\t\ttest('addIndex migration applies and is recorded', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-add-email-idx',\n\t\t\t\tchanges: [{ kind: 'addIndex', table: 'users', on: ['email'], unique: true }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tconst result = await migrator.up()\n\t\t\texpect(result.ran).toEqual(['0001-add-email-idx'])\n\t\t\texpect(result.skipped).toEqual([])\n\n\t\t\texpect(adapter.indexes.has('users_email_idx')).toBe(true)\n\t\t\tconst idx = adapter.indexes.get('users_email_idx')!\n\t\t\texpect(idx.table).toBe('users')\n\t\t\texpect(idx.on).toEqual(['email'])\n\t\t\texpect(idx.unique).toBe(true)\n\n\t\t\tconst recorded = await adapter.loadMigrations()\n\t\t\texpect(recorded).toHaveLength(1)\n\t\t\texpect(recorded[0].id).toBe('0001-add-email-idx')\n\t\t})\n\n\t\ttest('execute migration runs user code with the same Repo', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-seed-user',\n\t\t\t\tchanges: [{\n\t\t\t\t\tkind: 'execute',\n\t\t\t\t\tup: async (r) => {\n\t\t\t\t\t\tawait r.on(UserSchema).one().create({ id: 'seed-1', email: 'test@example.com' })\n\t\t\t\t\t},\n\t\t\t\t}],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\n\t\t\tconst row = await repo.on(UserSchema).one().id('seed-1').find()\n\t\t\texpect(row).not.toBeNull()\n\t\t\texpect(row!.email).toBe('test@example.com')\n\t\t})\n\n\t\ttest('duplicate id throws OrmValidationError at build()', () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\texpect(() =>\n\t\t\t\tMigrator.from(repo, adapter)\n\t\t\t\t\t.migrations([\n\t\t\t\t\t\t{ id: 'dup', changes: [] },\n\t\t\t\t\t\t{ id: 'dup', changes: [] },\n\t\t\t\t\t])\n\t\t\t\t\t.build(),\n\t\t\t).toThrow(OrmValidationError)\n\n\t\t\ttry {\n\t\t\t\tMigrator.from(repo, adapter)\n\t\t\t\t\t.migrations([\n\t\t\t\t\t\t{ id: 'dup', changes: [] },\n\t\t\t\t\t\t{ id: 'dup', changes: [] },\n\t\t\t\t\t])\n\t\t\t\t\t.build()\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err.kind).toBe('changes')\n\t\t\t}\n\t\t})\n\n\t\ttest('up() skips already-applied migrations', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m1: Migration<typeof adapter> = { id: '0001', changes: [] }\n\t\t\tconst m2: Migration<typeof adapter> = {\n\t\t\t\tid: '0002',\n\t\t\t\tchanges: [{ kind: 'addIndex', table: 'users', on: ['email'] }],\n\t\t\t}\n\n\t\t\tawait adapter.recordMigration('0001', Date.now())\n\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m1, m2]).build()\n\t\t\tconst result = await migrator.up()\n\t\t\texpect(result.ran).toEqual(['0002'])\n\t\t\texpect(result.skipped).toEqual(['0001'])\n\t\t})\n\n\t\ttest('up() returns empty ran when all applied', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.recordMigration('0001', Date.now())\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([{ id: '0001', changes: [] }]).build()\n\t\t\tconst result = await migrator.up()\n\t\t\texpect(result.ran).toEqual([])\n\t\t\texpect(result.skipped).toEqual(['0001'])\n\t\t})\n\n\t\ttest('failed migration rolls back via session and throws OrmMigrationError', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m1: Migration<typeof adapter> = {\n\t\t\t\tid: '0001',\n\t\t\t\tchanges: [{ kind: 'addIndex', table: 'users', on: ['email'] }],\n\t\t\t}\n\t\t\tconst m2: Migration<typeof adapter> = {\n\t\t\t\tid: '0002',\n\t\t\t\tchanges: [{\n\t\t\t\t\tkind: 'execute',\n\t\t\t\t\tup: async () => { throw new Error('boom') },\n\t\t\t\t}],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m1, m2]).build()\n\t\t\tawait expect(migrator.up()).rejects.toThrow(OrmMigrationError)\n\n\t\t\tconst recorded = await adapter.loadMigrations()\n\t\t\texpect(recorded.map((r) => r.id)).toEqual(['0001'])\n\t\t})\n\n\t\ttest('multiple changes in one migration all apply', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-multi',\n\t\t\t\tchanges: [\n\t\t\t\t\t{ kind: 'addIndex', table: 'users', on: ['email'], unique: true },\n\t\t\t\t\t{ kind: 'addIndex', table: 'users', on: ['id', 'email'], name: 'users_compound_idx' },\n\t\t\t\t],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\n\t\t\texpect(adapter.indexes.size).toBe(2)\n\t\t\texpect(adapter.indexes.has('users_email_idx')).toBe(true)\n\t\t\texpect(adapter.indexes.has('users_compound_idx')).toBe(true)\n\t\t})\n\n\t\ttest('lex-sorts migrations by id before running', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst order: string[] = []\n\t\t\tconst m1: Migration<typeof adapter> = {\n\t\t\t\tid: '0002',\n\t\t\t\tchanges: [{ kind: 'execute', up: async () => { order.push('0002') } }],\n\t\t\t}\n\t\t\tconst m2: Migration<typeof adapter> = {\n\t\t\t\tid: '0001',\n\t\t\t\tchanges: [{ kind: 'execute', up: async () => { order.push('0001') } }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m1, m2]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(order).toEqual(['0001', '0002'])\n\t\t})\n\n\t\ttest('createTable migration creates table metadata', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-create-users',\n\t\t\t\tchanges: [{\n\t\t\t\t\tkind: 'createTable',\n\t\t\t\t\tname: 'users',\n\t\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{ name: 'email', type: 'string', unique: true },\n\t\t\t\t\t\t{ name: 'age', type: 'number', nullable: true },\n\t\t\t\t\t],\n\t\t\t\t}],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\n\t\t\texpect(adapter.tables.has('users')).toBe(true)\n\t\t\tconst table = adapter.tables.get('users')!\n\t\t\texpect(table.pk).toEqual({ name: 'id', type: 'string' })\n\t\t\texpect(table.fields.size).toBe(2)\n\t\t\texpect(table.fields.get('email')).toEqual({ name: 'email', type: 'string', unique: true })\n\t\t\texpect(table.fields.get('age')).toEqual({ name: 'age', type: 'number', nullable: true })\n\t\t})\n\n\t\ttest('dropTable migration removes table metadata', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [] })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-drop-users',\n\t\t\t\tchanges: [{ kind: 'dropTable', name: 'users' }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.tables.has('users')).toBe(false)\n\t\t})\n\n\t\ttest('addField migration adds field to existing table', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [] })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-add-email',\n\t\t\t\tchanges: [{ kind: 'addField', table: 'users', field: { name: 'email', type: 'string' } }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.tables.get('users')!.fields.has('email')).toBe(true)\n\t\t})\n\n\t\ttest('dropField migration removes field from table', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'email', type: 'string' }] })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-drop-email',\n\t\t\t\tchanges: [{ kind: 'dropField', table: 'users', name: 'email' }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.tables.get('users')!.fields.has('email')).toBe(false)\n\t\t})\n\n\t\ttest('modifyField migration updates field spec', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'age', type: 'string' }] })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-modify-age',\n\t\t\t\tchanges: [{ kind: 'modifyField', table: 'users', name: 'age', to: { name: 'age', type: 'number', nullable: true } }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.tables.get('users')!.fields.get('age')).toEqual({ name: 'age', type: 'number', nullable: true })\n\t\t})\n\n\t\ttest('renameTable migration renames the table key', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [] })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-rename-users',\n\t\t\t\tchanges: [{ kind: 'renameTable', from: 'users', to: 'accounts' }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.tables.has('users')).toBe(false)\n\t\t\texpect(adapter.tables.has('accounts')).toBe(true)\n\t\t})\n\n\t\ttest('renameField migration renames a field', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'name', type: 'string' }] })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-rename-name',\n\t\t\t\tchanges: [{ kind: 'renameField', table: 'users', from: 'name', to: 'fullName' }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.tables.get('users')!.fields.has('name')).toBe(false)\n\t\t\texpect(adapter.tables.get('users')!.fields.has('fullName')).toBe(true)\n\t\t\texpect(adapter.tables.get('users')!.fields.get('fullName')!.name).toBe('fullName')\n\t\t})\n\n\t\ttest('dropIndex migration removes an index', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'users', on: ['email'], name: 'users_email_idx' })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-drop-idx',\n\t\t\t\tchanges: [{ kind: 'dropIndex', name: 'users_email_idx' }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.indexes.has('users_email_idx')).toBe(false)\n\t\t})\n\n\t\ttest('addForeignKey migration creates a FK entry', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-add-fk',\n\t\t\t\tchanges: [{ kind: 'addForeignKey', table: 'posts', on: 'authorId', references: { table: 'users', column: 'id' } }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.foreignKeys.has('posts_authorId_fk')).toBe(true)\n\t\t\tconst fk = adapter.foreignKeys.get('posts_authorId_fk')!\n\t\t\texpect(fk.table).toBe('posts')\n\t\t\texpect(fk.on).toBe('authorId')\n\t\t\texpect(fk.references).toEqual({ table: 'users', column: 'id' })\n\t\t})\n\n\t\ttest('dropForeignKey migration removes a FK entry', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyAddForeignKey({ kind: 'addForeignKey', table: 'posts', on: 'authorId', references: { table: 'users', column: 'id' }, name: 'posts_authorId_fk' })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-drop-fk',\n\t\t\t\tchanges: [{ kind: 'dropForeignKey', table: 'posts', name: 'posts_authorId_fk' }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.foreignKeys.has('posts_authorId_fk')).toBe(false)\n\t\t})\n\n\t\ttest('full lifecycle: create table, add fields, indexes, FKs, then rename and drop', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{\n\t\t\t\t\tid: '0001-create',\n\t\t\t\t\tchanges: [\n\t\t\t\t\t\t{ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'email', type: 'string' }] },\n\t\t\t\t\t\t{ kind: 'createTable', name: 'posts', pk: { name: 'id', type: 'string' }, fields: [{ name: 'title', type: 'string' }, { name: 'authorId', type: 'string' }] },\n\t\t\t\t\t\t{ kind: 'addIndex', table: 'users', on: ['email'], unique: true },\n\t\t\t\t\t\t{ kind: 'addForeignKey', table: 'posts', on: 'authorId', references: { table: 'users', column: 'id' } },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0002-evolve',\n\t\t\t\t\tchanges: [\n\t\t\t\t\t\t{ kind: 'addField', table: 'users', field: { name: 'age', type: 'number', nullable: true } },\n\t\t\t\t\t\t{ kind: 'renameField', table: 'users', from: 'email', to: 'emailAddress' },\n\t\t\t\t\t\t{ kind: 'renameTable', from: 'posts', to: 'articles' },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0003-cleanup',\n\t\t\t\t\tchanges: [\n\t\t\t\t\t\t{ kind: 'dropField', table: 'users', name: 'age' },\n\t\t\t\t\t\t{ kind: 'dropForeignKey', table: 'posts', name: 'posts_authorId_fk' },\n\t\t\t\t\t\t{ kind: 'dropIndex', name: 'users_email_idx' },\n\t\t\t\t\t\t{ kind: 'dropTable', name: 'articles' },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst result = await migrator.up()\n\t\t\texpect(result.ran).toEqual(['0001-create', '0002-evolve', '0003-cleanup'])\n\n\t\t\texpect(adapter.tables.has('users')).toBe(true)\n\t\t\texpect(adapter.tables.get('users')!.fields.has('emailAddress')).toBe(true)\n\t\t\texpect(adapter.tables.get('users')!.fields.has('age')).toBe(false)\n\t\t\texpect(adapter.tables.has('articles')).toBe(false)\n\t\t\texpect(adapter.indexes.has('users_email_idx')).toBe(false)\n\t\t\texpect(adapter.foreignKeys.has('posts_authorId_fk')).toBe(false)\n\t\t})\n\n\t\ttest('tx:true migration that throws rolls back both user effects and tracker row', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-will-fail',\n\t\t\t\tchanges: [\n\t\t\t\t\t{ kind: 'addIndex', table: 'users', on: ['email'] },\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: 'execute',\n\t\t\t\t\t\tup: async (r) => {\n\t\t\t\t\t\t\tawait r.on(UserSchema).one().create({ id: 'partial', email: 'fail@test.com' })\n\t\t\t\t\t\t\tthrow new Error('mid-migration boom')\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait expect(migrator.up()).rejects.toThrow(OrmMigrationError)\n\n\t\t\tconst recorded = await adapter.loadMigrations()\n\t\t\texpect(recorded).toHaveLength(0)\n\t\t\texpect(adapter.indexes.size).toBe(0)\n\t\t\tconst row = await repo.on(UserSchema).one().id('partial').find()\n\t\t\texpect(row).toBeNull()\n\t\t})\n\n\t\ttest('tx:false migration that throws leaves partial state durable', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-no-tx',\n\t\t\t\ttx: false,\n\t\t\t\tchanges: [\n\t\t\t\t\t{ kind: 'addIndex', table: 'users', on: ['email'] },\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: 'execute',\n\t\t\t\t\t\tup: async (r) => {\n\t\t\t\t\t\t\tawait r.on(UserSchema).one().create({ id: 'durable', email: 'stay@test.com' })\n\t\t\t\t\t\t\tthrow new Error('partial failure')\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait expect(migrator.up()).rejects.toThrow(OrmMigrationError)\n\n\t\t\tconst recorded = await adapter.loadMigrations()\n\t\t\texpect(recorded).toHaveLength(0)\n\t\t\texpect(adapter.indexes.has('users_email_idx')).toBe(true)\n\t\t\tconst row = await repo.on(UserSchema).one().id('durable').find()\n\t\t\texpect(row).not.toBeNull()\n\t\t\texpect(row!.email).toBe('stay@test.com')\n\t\t})\n\n\t\ttest('atomic-across-migrations: outer repo.session() wraps all in one tx', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m1: Migration<typeof adapter> = {\n\t\t\t\tid: '0001',\n\t\t\t\tchanges: [{ kind: 'addIndex', table: 'users', on: ['email'] }],\n\t\t\t}\n\t\t\tconst m2: Migration<typeof adapter> = {\n\t\t\t\tid: '0002',\n\t\t\t\tchanges: [{\n\t\t\t\t\tkind: 'execute',\n\t\t\t\t\tup: async () => { throw new Error('fail in m2') },\n\t\t\t\t}],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m1, m2]).build()\n\t\t\tawait expect(\n\t\t\t\trepo.session(() => migrator.up()),\n\t\t\t).rejects.toThrow()\n\n\t\t\tconst recorded = await adapter.loadMigrations()\n\t\t\texpect(recorded).toHaveLength(0)\n\t\t\texpect(adapter.indexes.size).toBe(0)\n\t\t})\n\n\t\ttest('simultaneous up() calls serialize via acquireMigrationLock', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst order: string[] = []\n\t\t\tlet resolveGate!: () => void\n\t\t\tconst gate = new Promise<void>((r) => { resolveGate = r })\n\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{\n\t\t\t\t\tid: '0001',\n\t\t\t\t\tchanges: [{\n\t\t\t\t\t\tkind: 'execute',\n\t\t\t\t\t\tup: async () => {\n\t\t\t\t\t\t\torder.push('0001-start')\n\t\t\t\t\t\t\tawait gate\n\t\t\t\t\t\t\torder.push('0001-end')\n\t\t\t\t\t\t},\n\t\t\t\t\t}],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0002',\n\t\t\t\t\tchanges: [{\n\t\t\t\t\t\tkind: 'execute',\n\t\t\t\t\t\tup: async () => { order.push('0002') },\n\t\t\t\t\t}],\n\t\t\t\t},\n\t\t\t]\n\n\t\t\tconst migrator1 = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst migrator2 = Migrator.from(repo, adapter).migrations(migrations).build()\n\n\t\t\tconst p1 = migrator1.up()\n\t\t\tconst p2 = migrator2.up()\n\n\t\t\tawait new Promise((r) => setTimeout(r, 10))\n\t\t\texpect(order).toEqual(['0001-start'])\n\n\t\t\tresolveGate()\n\t\t\tawait Promise.all([p1, p2])\n\n\t\t\texpect(order).toEqual(['0001-start', '0001-end', '0002'])\n\t\t})\n\n\t\ttest('tx:false retries cleanly from scratch after failure', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tlet callCount = 0\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-retry',\n\t\t\t\ttx: false,\n\t\t\t\tchanges: [{\n\t\t\t\t\tkind: 'execute',\n\t\t\t\t\tup: async (r) => {\n\t\t\t\t\t\tcallCount++\n\t\t\t\t\t\tif (callCount === 1) {\n\t\t\t\t\t\t\tawait r.on(UserSchema).one().create({ id: 'partial', email: 'p@test.com' })\n\t\t\t\t\t\t\tthrow new Error('first attempt fails')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait r.on(UserSchema).one().create({ id: 'complete', email: 'c@test.com' })\n\t\t\t\t\t},\n\t\t\t\t}],\n\t\t\t}\n\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait expect(migrator.up()).rejects.toThrow(OrmMigrationError)\n\t\t\texpect(callCount).toBe(1)\n\n\t\t\tconst migrator2 = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tconst result = await migrator2.up()\n\t\t\texpect(result.ran).toEqual(['0001-retry'])\n\t\t\texpect(callCount).toBe(2)\n\t\t})\n\n\t\ttest('type-level: withoutLock() rejected when adapter declares acquireMigrationLock', () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst step = Migrator.from(repo, adapter).migrations([])\n\t\t\texpectTypeOf(step).toHaveProperty('build')\n\t\t\texpectTypeOf(step).not.toHaveProperty('withoutLock')\n\t\t})\n\n\t\ttest('type-level: withoutLock() accepted when adapter lacks acquireMigrationLock', async () => {\n\t\t\tconst { OrmAdapter } = await import('../orm-adapter')\n\t\t\tclass NoLockAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync loadMigrations() { return [] }\n\t\t\t\tasync recordMigration() {}\n\t\t\t\tasync session<T>(fn: () => Promise<T>): Promise<T> { return fn() }\n\t\t\t}\n\t\t\tconst nlAdapter = new (NoLockAdapter as any)() as NoLockAdapter\n\t\t\tconst nlRepo = new Repo({ adapter: nlAdapter, resolve: (s) => ({ table: s.name }) })\n\t\t\tconst step = Migrator.from(nlRepo, nlAdapter).migrations([])\n\t\t\texpectTypeOf(step).toHaveProperty('build')\n\t\t\texpectTypeOf(step).toHaveProperty('withoutLock')\n\t\t})\n\n\t\ttest('up({ to }) runs only migrations up to and including the target', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst order: string[] = []\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: 'm-001', changes: [{ kind: 'execute', up: async () => { order.push('m-001') } }] },\n\t\t\t\t{ id: 'm-002', changes: [{ kind: 'execute', up: async () => { order.push('m-002') } }] },\n\t\t\t\t{ id: 'm-003', changes: [{ kind: 'execute', up: async () => { order.push('m-003') } }] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst result = await migrator.up({ to: 'm-002' })\n\t\t\texpect(result.ran).toEqual(['m-001', 'm-002'])\n\t\t\texpect(order).toEqual(['m-001', 'm-002'])\n\t\t})\n\n\t\ttest('up({ to }) is a no-op when target already applied', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.recordMigration('m-001', Date.now())\n\t\t\tawait adapter.recordMigration('m-002', Date.now())\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: 'm-001', changes: [] },\n\t\t\t\t{ id: 'm-002', changes: [] },\n\t\t\t\t{ id: 'm-003', changes: [] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst result = await migrator.up({ to: 'm-002' })\n\t\t\texpect(result.ran).toEqual([])\n\t\t})\n\n\t\ttest('up({ to: unknown }) throws OrmMigrationError before any side effect', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tlet executed = false\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: 'm-001', changes: [{ kind: 'execute', up: async () => { executed = true } }] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tawait expect(migrator.up({ to: 'unknown' })).rejects.toThrow(OrmMigrationError)\n\t\t\texpect(executed).toBe(false)\n\t\t\ttry {\n\t\t\t\tawait Migrator.from(repo, adapter).migrations(migrations).build().up({ to: 'unknown' })\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err.phase).toBe('load')\n\t\t\t}\n\t\t})\n\n\t\ttest('up({ steps: 1 }) runs exactly 1 pending migration', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: '0001', changes: [{ kind: 'addIndex', table: 'users', on: ['email'] }] },\n\t\t\t\t{ id: '0002', changes: [{ kind: 'addIndex', table: 'users', on: ['id'] }] },\n\t\t\t\t{ id: '0003', changes: [{ kind: 'addIndex', table: 'users', on: ['email', 'id'] }] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst result = await migrator.up({ steps: 1 })\n\t\t\texpect(result.ran).toEqual(['0001'])\n\t\t\texpect(adapter.indexes.size).toBe(1)\n\t\t})\n\n\t\ttest('status() returns sorted entries with correct applied/pending flags', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst now = Date.now()\n\t\t\tawait adapter.recordMigration('0002', now)\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst entries = await migrator.status()\n\t\t\texpect(entries).toEqual([\n\t\t\t\t{ id: '0001', applied: false },\n\t\t\t\t{ id: '0002', applied: true, appliedAt: now },\n\t\t\t\t{ id: '0003', applied: false },\n\t\t\t])\n\t\t})\n\n\t\ttest('dry() returns the same plan up() would execute, without executing', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.recordMigration('0001', Date.now())\n\t\t\tlet executed = false\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [{ kind: 'execute', up: async () => { executed = true } }] },\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst plan = await migrator.dry()\n\t\t\texpect(plan).toEqual({ would: ['0002', '0003'] })\n\t\t\texpect(executed).toBe(false)\n\t\t})\n\n\t\ttest('dry(opts) respects to/steps', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\texpect(await migrator.dry({ to: '0002' })).toEqual({ would: ['0001', '0002'] })\n\t\t\texpect(await migrator.dry({ steps: 1 })).toEqual({ would: ['0001'] })\n\t\t})\n\n\t\ttest('orphan migration in tracker throws OrmMigrationError with phase load', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.recordMigration('ghost-001', Date.now())\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\ttry {\n\t\t\t\tawait migrator.up()\n\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err).toBeInstanceOf(OrmMigrationError)\n\t\t\t\texpect(err.phase).toBe('load')\n\t\t\t\texpect(err.cause).toContain('ghost-001')\n\t\t\t}\n\t\t})\n\n\t\ttest('failing user code throws OrmMigrationError with phase user', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001',\n\t\t\t\tchanges: [{ kind: 'execute', up: async () => { throw new Error('user boom') } }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\ttry {\n\t\t\t\tawait migrator.up()\n\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err).toBeInstanceOf(OrmMigrationError)\n\t\t\t\texpect(err.phase).toBe('user')\n\t\t\t\texpect(err.id).toBe('0001')\n\t\t\t}\n\t\t})\n\n\t\ttest('failing recordMigration throws OrmMigrationError with phase record', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst origRecord = adapter.recordMigration.bind(adapter)\n\t\t\tadapter.recordMigration = async (id: string, at: number) => {\n\t\t\t\tif (id === '0001') throw new Error('record boom')\n\t\t\t\treturn origRecord(id, at)\n\t\t\t}\n\t\t\tconst m: Migration<typeof adapter> = { id: '0001', changes: [] }\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\ttry {\n\t\t\t\tawait migrator.up()\n\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err).toBeInstanceOf(OrmMigrationError)\n\t\t\t\texpect(err.phase).toBe('record')\n\t\t\t\texpect(err.id).toBe('0001')\n\t\t\t}\n\t\t})\n\n\t\ttest('failing acquireMigrationLock throws OrmMigrationError with phase lock', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tadapter.acquireMigrationLock = async () => { throw new Error('lock boom') }\n\t\t\tconst m: Migration<typeof adapter> = { id: '0001', changes: [] }\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\ttry {\n\t\t\t\tawait migrator.up()\n\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err).toBeInstanceOf(OrmMigrationError)\n\t\t\t\texpect(err.phase).toBe('lock')\n\t\t\t}\n\t\t})\n\t})\n}\n","import { toFieldName, type AnyField } from './fields'\n\nexport class OrderBy {\n\treadonly field: string\n\tconstructor(\n\t\tfield: string | AnyField,\n\t\treadonly direction: 'asc' | 'desc',\n\t) {\n\t\tthis.field = toFieldName(field)\n\t}\n}\n\nexport type QueryOptions<Sel extends string = string> = {\n\torderBy?: OrderBy[]\n\tlimit?: number\n\toffset?: number\n\tselect?: readonly Sel[]\n}\n\nexport type IterationOptions = {\n\tbatchSize?: number\n}\n\nexport type IterationQueryOptions<Sel extends string = string> = QueryOptions<Sel> & IterationOptions\n","import type { AnyField, Field } from './fields'\nimport type { AnySchema, SchemaOutput } from './schema'\n\ntype SchemaPkValueType<S extends AnySchema> = NonNullable<S['pkField']['__valueType']>\ntype FkPkMatch<S extends AnySchema, FK extends AnyField> =\n\tNonNullable<FK['__valueType']> extends SchemaPkValueType<S> ? FK : never\n\nexport class ManyRelation<\n\tN extends string = string,\n\tTgtOutput extends Record<string, any> = Record<string, any>,\n\tFK extends AnyField = AnyField,\n> {\n\tdeclare readonly _output: TgtOutput\n\tconstructor(\n\t\treadonly name: N,\n\t\treadonly source: AnySchema,\n\t\treadonly target: AnySchema,\n\t\treadonly foreignKey: FK,\n\t\treadonly references: AnyField,\n\t) {}\n}\n\nexport class OneRelation<\n\tN extends string = string,\n\tTgtOutput extends Record<string, any> = Record<string, any>,\n\tFK extends AnyField = AnyField,\n> {\n\tdeclare readonly _output: TgtOutput\n\tconstructor(\n\t\treadonly name: N,\n\t\treadonly source: AnySchema,\n\t\treadonly target: AnySchema,\n\t\treadonly foreignKey: FK,\n\t\treadonly fkOwner: 'source' | 'target',\n\t\treadonly references: AnyField,\n\t) {}\n}\n\nexport type AnyRelDef = ManyRelation<string, Record<string, any>, any> | OneRelation<string, Record<string, any>, any>\n\nexport type ResolveRelDef<D extends AnyRelDef> =\n\tD extends OneRelation<any, infer TOut, any> ? TOut | null : D extends ManyRelation<any, infer TOut, any> ? TOut[] : never\n\nexport interface NestedPreloadDef<D extends AnyRelDef = AnyRelDef> {\n\tdef: D\n\tpreloads?: readonly AnyPreloadDef[]\n}\n\nexport type AnyPreloadDef = AnyRelDef | NestedPreloadDef\n\ntype Shift<T extends readonly unknown[]> = T extends readonly [unknown, ...infer R] ? R : []\ntype NodeName<N extends AnyPreloadDef> = N extends AnyRelDef\n\t? N['name']\n\t: N extends NestedPreloadDef<infer D extends AnyRelDef>\n\t\t? D['name']\n\t\t: never\n\ntype ResolveRelDefWithNested<D extends AnyRelDef, P extends readonly AnyPreloadDef[], Depth extends readonly unknown[]> = Depth extends []\n\t? ResolveRelDef<D>\n\t: D extends OneRelation<any, infer TOut, any>\n\t\t? (TOut & PreloadedMap<P, Shift<Depth>>) | null\n\t\t: D extends ManyRelation<any, infer TOut, any>\n\t\t\t? (TOut & PreloadedMap<P, Shift<Depth>>)[]\n\t\t\t: never\n\ntype NodeValue<N extends AnyPreloadDef, Depth extends readonly unknown[]> =\n\tN extends OneRelation<any, infer TOut, any>\n\t\t? TOut | null\n\t\t: N extends ManyRelation<any, infer TOut, any>\n\t\t\t? TOut[]\n\t\t\t: N extends { def: infer D extends AnyRelDef; preloads?: infer P extends readonly AnyPreloadDef[] }\n\t\t\t\t? ResolveRelDefWithNested<D, P, Depth>\n\t\t\t\t: never\n\nexport type PreloadedMap<P extends readonly AnyPreloadDef[], Depth extends readonly unknown[] = [1, 2, 3, 4, 5]> = Depth extends []\n\t? Record<never, never>\n\t: {\n\t\t\t[N in P[number] as NodeName<N>]: NodeValue<N, Depth>\n\t\t}\n\nclass RelationsBuilder<S extends AnySchema, R extends Record<string, AnyRelDef> = Record<never, never>> {\n\treadonly #source: S\n\treadonly #defs: Record<string, AnyRelDef>\n\n\tconstructor(source: S, defs?: Record<string, AnyRelDef>) {\n\t\tthis.#source = source\n\t\tthis.#defs = defs ?? {}\n\t}\n\n\thasMany<K extends string, T extends AnySchema, FK extends Field<any, any, T>>(\n\t\tname: K extends keyof R ? never : K,\n\t\tfk: FkPkMatch<S, FK>,\n\t): RelationsBuilder<\n\t\tS,\n\t\t{\n\t\t\t[Key in keyof R | K]: Key extends K\n\t\t\t\t? ManyRelation<K, SchemaOutput<T>, FK>\n\t\t\t\t: Key extends keyof R\n\t\t\t\t\t? R[Key]\n\t\t\t\t\t: never\n\t\t}\n\t> {\n\t\tconst target = (fk as any).__schema as AnySchema\n\t\tconst nextDefs = { ...this.#defs, [name]: new ManyRelation(name, this.#source, target, fk as any, this.#source.pkField) }\n\t\treturn new RelationsBuilder(this.#source, nextDefs) as any\n\t}\n\n\thasOne<K extends string, T extends AnySchema, FK extends Field<any, any, T>>(\n\t\tname: K extends keyof R ? never : K,\n\t\tfk: FkPkMatch<S, FK>,\n\t): RelationsBuilder<\n\t\tS,\n\t\t{\n\t\t\t[Key in keyof R | K]: Key extends K\n\t\t\t\t? OneRelation<K, SchemaOutput<T>, FK>\n\t\t\t\t: Key extends keyof R\n\t\t\t\t\t? R[Key]\n\t\t\t\t\t: never\n\t\t}\n\t> {\n\t\tconst target = (fk as any).__schema as AnySchema\n\t\tconst nextDefs = { ...this.#defs, [name]: new OneRelation(name, this.#source, target, fk as any, 'target', this.#source.pkField) }\n\t\treturn new RelationsBuilder(this.#source, nextDefs) as any\n\t}\n\n\tbelongsTo<K extends string, T extends AnySchema, FK extends Field<any, any, S>>(\n\t\tname: K extends keyof R ? never : K,\n\t\tfk: FkPkMatch<T, FK>,\n\t\ttarget: T,\n\t\treferences?: Field<NonNullable<FK['__valueType']>, any, T>,\n\t): RelationsBuilder<\n\t\tS,\n\t\t{\n\t\t\t[Key in keyof R | K]: Key extends K\n\t\t\t\t? OneRelation<K, SchemaOutput<T>, FK>\n\t\t\t\t: Key extends keyof R\n\t\t\t\t\t? R[Key]\n\t\t\t\t\t: never\n\t\t}\n\t> {\n\t\tconst ref = references ?? target.pkField\n\t\tconst nextDefs = { ...this.#defs, [name]: new OneRelation(name, this.#source, target, fk as any, 'source', ref as any) }\n\t\treturn new RelationsBuilder(this.#source, nextDefs) as any\n\t}\n\n\tbuild(): R {\n\t\treturn this.#defs as R\n\t}\n}\n\nexport class Relations {\n\tstatic from<S extends AnySchema>(source: S) {\n\t\treturn new RelationsBuilder(source)\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { Schema } = await import('./schema')\n\n\tdescribe('Relations.from()', () => {\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => 'user-id')\n\t\t\t.field('name', v.string())\n\t\t\t.field('orgId', v.string())\n\t\t\t.build()\n\n\t\tconst PostSchema = Schema.from('posts')\n\t\t\t.pk('id', v.string(), () => 'post-id')\n\t\t\t.field('title', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst OrgSchema = Schema.from('orgs')\n\t\t\t.pk('id', v.string(), () => 'org-id')\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tconst ProfileSchema = Schema.from('profiles')\n\t\t\t.pk('id', v.string(), () => 'profile-id')\n\t\t\t.field('bio', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\ttest('builds relations with hasMany, belongsTo, hasOne', () => {\n\t\t\tconst rels = Relations.from(UserSchema)\n\t\t\t\t.hasMany('posts', PostSchema.fields.userId)\n\t\t\t\t.belongsTo('org', UserSchema.fields.orgId, OrgSchema)\n\t\t\t\t.hasOne('profile', ProfileSchema.fields.userId)\n\t\t\t\t.build()\n\n\t\t\texpect(rels.posts).toBeInstanceOf(ManyRelation)\n\t\t\texpect(rels.org).toBeInstanceOf(OneRelation)\n\t\t\texpect(rels.profile).toBeInstanceOf(OneRelation)\n\t\t})\n\n\t\ttest('source references use outer-scope const (no src param)', () => {\n\t\t\tconst rels = Relations.from(UserSchema)\n\t\t\t\t.belongsTo('org', UserSchema.fields.orgId, OrgSchema)\n\t\t\t\t.build()\n\n\t\t\texpect(rels.org.foreignKey).toBe(UserSchema.fields.orgId)\n\t\t\texpect(rels.org.target).toBe(OrgSchema)\n\t\t})\n\n\t\ttest('clone-on-step: .hasMany() returns a new builder', () => {\n\t\t\tconst base = Relations.from(UserSchema)\n\t\t\tconst a = base.hasMany('posts', PostSchema.fields.userId)\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('clone-on-step: .hasOne() returns a new builder', () => {\n\t\t\tconst base = Relations.from(UserSchema)\n\t\t\tconst a = base.hasOne('profile', ProfileSchema.fields.userId)\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('clone-on-step: .belongsTo() returns a new builder', () => {\n\t\t\tconst base = Relations.from(UserSchema)\n\t\t\tconst a = base.belongsTo('org', UserSchema.fields.orgId, OrgSchema)\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('clone-on-step: fan-out from shared base does not pollute either branch', () => {\n\t\t\tconst base = Relations.from(UserSchema)\n\t\t\tconst branchA = base.hasMany('posts', PostSchema.fields.userId).build()\n\t\t\tconst branchB = base.hasOne('profile', ProfileSchema.fields.userId).build()\n\n\t\t\texpect(Object.keys(branchA)).toEqual(['posts'])\n\t\t\texpect(Object.keys(branchB)).toEqual(['profile'])\n\t\t})\n\t})\n\n\tdescribe('Relations.from() behavior', () => {\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => 'user-id')\n\t\t\t.field('name', v.string())\n\t\t\t.field('orgId', v.string())\n\t\t\t.field('managerId', v.optional(v.string()), { onCreate: () => undefined })\n\t\t\t.build()\n\n\t\tconst PostSchema = Schema.from('posts')\n\t\t\t.pk('id', v.string(), () => 'post-id')\n\t\t\t.field('title', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst OrgSchema = Schema.from('orgs')\n\t\t\t.pk('id', v.string(), () => 'org-id')\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tconst TagSchema = Schema.from('tags')\n\t\t\t.pk('id', v.string(), () => 'tag-id')\n\t\t\t.field('label', v.string())\n\t\t\t.build()\n\n\t\tconst PostTagSchema = Schema.from('post_tags')\n\t\t\t.pk('id', v.string(), () => 'pt-id')\n\t\t\t.field('postId', v.string())\n\t\t\t.field('tagId', v.string())\n\t\t\t.build()\n\n\t\tconst ProfileSchema = Schema.from('profiles')\n\t\t\t.pk('id', v.string(), () => 'profile-id')\n\t\t\t.field('bio', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst UserRels = Relations.from(UserSchema)\n\t\t\t.hasMany('posts', PostSchema.fields.userId)\n\t\t\t.belongsTo('org', UserSchema.fields.orgId, OrgSchema)\n\t\t\t.hasOne('profile', ProfileSchema.fields.userId)\n\t\t\t.build()\n\n\t\tconst PostRels = Relations.from(PostSchema)\n\t\t\t.belongsTo('author', PostSchema.fields.userId, UserSchema)\n\t\t\t.hasMany('postTags', PostTagSchema.fields.postId)\n\t\t\t.build()\n\n\t\tconst TagRels = Relations.from(TagSchema)\n\t\t\t.hasMany('postTags', PostTagSchema.fields.tagId)\n\t\t\t.build()\n\n\t\tconst PostTagRels = Relations.from(PostTagSchema)\n\t\t\t.belongsTo('post', PostTagSchema.fields.postId, PostSchema)\n\t\t\t.belongsTo('tag', PostTagSchema.fields.tagId, TagSchema)\n\t\t\t.build()\n\n\t\ttest('hasMany returns ManyRelation instances', () => {\n\t\t\texpect(UserRels.posts).toBeInstanceOf(ManyRelation)\n\t\t\texpect(PostRels.postTags).toBeInstanceOf(ManyRelation)\n\t\t\texpect(TagRels.postTags).toBeInstanceOf(ManyRelation)\n\t\t})\n\n\t\ttest('belongsTo returns OneRelation instances', () => {\n\t\t\texpect(UserRels.org).toBeInstanceOf(OneRelation)\n\t\t\texpect(PostRels.author).toBeInstanceOf(OneRelation)\n\t\t\texpect(PostTagRels.post).toBeInstanceOf(OneRelation)\n\t\t\texpect(PostTagRels.tag).toBeInstanceOf(OneRelation)\n\t\t})\n\n\t\ttest('hasOne returns OneRelation instances', () => {\n\t\t\texpect(UserRels.profile).toBeInstanceOf(OneRelation)\n\t\t})\n\n\t\ttest('hasMany stores correct source, target, foreignKey, and references', () => {\n\t\t\tconst rel = UserRels.posts\n\t\t\texpect(rel.name).toBe('posts')\n\t\t\texpect(rel.source).toBe(UserSchema)\n\t\t\texpect(rel.target).toBe(PostSchema)\n\t\t\texpect(rel.foreignKey).toBe(PostSchema.fields.userId)\n\t\t\texpect(rel.references).toBe(UserSchema.pkField)\n\t\t})\n\n\t\ttest('hasOne stores correct source, target, foreignKey, and fkOwner', () => {\n\t\t\tconst rel = UserRels.profile\n\t\t\texpect(rel.name).toBe('profile')\n\t\t\texpect(rel.source).toBe(UserSchema)\n\t\t\texpect(rel.target).toBe(ProfileSchema)\n\t\t\texpect(rel.foreignKey).toBe(ProfileSchema.fields.userId)\n\t\t\texpect(rel.fkOwner).toBe('target')\n\t\t\texpect(rel.references).toBe(UserSchema.pkField)\n\t\t})\n\n\t\ttest('belongsTo stores correct source, target, foreignKey, and fkOwner', () => {\n\t\t\tconst rel = UserRels.org\n\t\t\texpect(rel.name).toBe('org')\n\t\t\texpect(rel.source).toBe(UserSchema)\n\t\t\texpect(rel.target).toBe(OrgSchema)\n\t\t\texpect(rel.foreignKey).toBe(UserSchema.fields.orgId)\n\t\t\texpect(rel.fkOwner).toBe('source')\n\t\t\texpect(rel.references).toBe(OrgSchema.pkField)\n\t\t})\n\n\t\ttest('join-table hasMany stores correct metadata', () => {\n\t\t\tconst rel = PostRels.postTags\n\t\t\texpect(rel.name).toBe('postTags')\n\t\t\texpect(rel.source).toBe(PostSchema)\n\t\t\texpect(rel.target).toBe(PostTagSchema)\n\t\t\texpect(rel.foreignKey).toBe(PostTagSchema.fields.postId)\n\t\t})\n\n\t\ttest('join-table belongsTo stores correct metadata', () => {\n\t\t\tconst rel = PostTagRels.tag\n\t\t\texpect(rel.name).toBe('tag')\n\t\t\texpect(rel.source).toBe(PostTagSchema)\n\t\t\texpect(rel.target).toBe(TagSchema)\n\t\t\texpect(rel.foreignKey).toBe(PostTagSchema.fields.tagId)\n\t\t})\n\n\t\ttest('self-referential relation works without special casing', () => {\n\t\t\tconst SelfRels = Relations.from(UserSchema)\n\t\t\t\t.belongsTo('manager', UserSchema.fields.managerId!, UserSchema)\n\t\t\t\t.build()\n\n\t\t\texpect(SelfRels.manager).toBeInstanceOf(OneRelation)\n\t\t\texpect(SelfRels.manager.source).toBe(UserSchema)\n\t\t\texpect(SelfRels.manager.target).toBe(UserSchema)\n\t\t\texpect(SelfRels.manager.fkOwner).toBe('source')\n\t\t})\n\n\t\ttest('many-to-many via explicit join schema', () => {\n\t\t\texpect(PostRels.postTags).toBeInstanceOf(ManyRelation)\n\t\t\texpect(PostTagRels.post).toBeInstanceOf(OneRelation)\n\t\t\texpect(PostTagRels.tag).toBeInstanceOf(OneRelation)\n\t\t\texpect(PostTagRels.post.target).toBe(PostSchema)\n\t\t\texpect(PostTagRels.tag.target).toBe(TagSchema)\n\t\t})\n\t})\n\n\tdescribe('type-level: Relations.from uniqueness guard', () => {\n\t\ttest('duplicate relation name is a TS error', () => {\n\t\t\tconst S = Schema.from('test').pk('id', v.string(), () => 'x').build()\n\t\t\tconst T = Schema.from('targets')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('sId', v.string())\n\t\t\t\t.build()\n\t\t\t// @ts-expect-error — duplicate name 'items' should fail\n\t\t\tRelations.from(S).hasMany('items', T.fields.sId).hasMany('items', T.fields.sId)\n\t\t})\n\t})\n\n\tdescribe('type-level: FK-PK type-match guarantee', () => {\n\t\ttest('string FK pointing at number PK is a TS error', () => {\n\t\t\tconst NumPkSchema = Schema.from('nums')\n\t\t\t\t.pk('id', v.number(), () => 0)\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\n\t\t\tconst StringFkSchema = Schema.from('strings')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('numRef', v.string())\n\t\t\t\t.build()\n\n\t\t\t// @ts-expect-error — string FK does not match number PK\n\t\t\tRelations.from(NumPkSchema).hasMany('items', StringFkSchema.fields.numRef)\n\t\t})\n\n\t\ttest('matching FK-PK types compile correctly', () => {\n\t\t\tconst S = Schema.from('source').pk('id', v.string(), () => 'x').build()\n\t\t\tconst T = Schema.from('target')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('sourceId', v.string())\n\t\t\t\t.build()\n\t\t\tconst rels = Relations.from(S).hasMany('items', T.fields.sourceId).build()\n\t\t\texpect(rels.items).toBeInstanceOf(ManyRelation)\n\t\t})\n\t})\n\n\tdescribe('type-level: Field-only-FK rule', () => {\n\t\ttest('raw string FK is a TS error for hasMany', () => {\n\t\t\tconst S = Schema.from('s').pk('id', v.string(), () => 'x').build()\n\t\t\t// @ts-expect-error — raw string not allowed, must be a Field instance\n\t\t\tRelations.from(S).hasMany('items', 'someKey')\n\t\t})\n\n\t\ttest('raw string FK is a TS error for belongsTo', () => {\n\t\t\tconst S = Schema.from('s')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('ref', v.string())\n\t\t\t\t.build()\n\t\t\tconst T = Schema.from('t').pk('id', v.string(), () => 'x').build()\n\t\t\t// @ts-expect-error — raw string not allowed, must be a Field instance\n\t\t\tRelations.from(S).belongsTo('parent', 'ref', T)\n\t\t})\n\t})\n\n\tdescribe('type-level: schema relations-agnosticism', () => {\n\t\ttest('schema artifact contains no relational information', () => {\n\t\t\tconst _S = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\ttype SKeys = keyof typeof _S\n\t\t\texpectTypeOf<'relations' extends SKeys ? true : false>().toEqualTypeOf<false>()\n\t\t})\n\t})\n}\n","import { v, type Pipe } from 'valleyed'\n\nimport { EquippedError } from '../../../errors'\nimport type { AnySchema } from '../../schema'\n\nexport type ComputedSelectionPlan = {\n\trequestedSelect: Set<string> | null\n\tadapterSelect?: string[]\n\tcomputeNames: string[]\n}\n\nexport function planSelection(schema: AnySchema, select?: readonly string[]): ComputedSelectionPlan {\n\tconst computedDefs = schema.computedDefs as Record<string, { deps: readonly string[] }>\n\tconst computedNames = new Set(Object.keys(computedDefs))\n\tconst persistedNames = new Set(Object.keys(schema.fields))\n\n\tif (!select || select.length === 0) {\n\t\treturn {\n\t\t\trequestedSelect: null,\n\t\t\tadapterSelect: undefined,\n\t\t\tcomputeNames: [...computedNames],\n\t\t}\n\t}\n\n\tconst requestedSelect = new Set(select)\n\tconst adapterSelect = new Set<string>()\n\tconst selectedComputeNames = new Set<string>()\n\n\tfor (const key of select) {\n\t\tif (persistedNames.has(key)) {\n\t\t\tadapterSelect.add(key)\n\t\t\tcontinue\n\t\t}\n\t\tif (computedNames.has(key)) {\n\t\t\tselectedComputeNames.add(key)\n\t\t\tfor (const dep of computedDefs[key].deps) adapterSelect.add(dep)\n\t\t\tcontinue\n\t\t}\n\t\tthrow new EquippedError('Unknown selected field', {\n\t\t\tschema: schema.name,\n\t\t\tselectedField: key,\n\t\t\tavailableFields: [...persistedNames, ...computedNames],\n\t\t})\n\t}\n\n\treturn {\n\t\trequestedSelect,\n\t\tadapterSelect: [...adapterSelect],\n\t\tcomputeNames: [...selectedComputeNames],\n\t}\n}\n\ntype ComputedDef = {\n\tpipe: Pipe<any, any>\n\tdeps: readonly string[]\n\tcompute: (data: Record<string, unknown>) => unknown\n}\n\nexport function applyComputedSelection(\n\tschema: AnySchema,\n\trows: Record<string, unknown>[],\n\tplan: ComputedSelectionPlan,\n): Record<string, unknown>[] {\n\tconst computedDefs = schema.computedDefs as Record<string, ComputedDef>\n\n\treturn rows.map((row) => {\n\t\tconst enriched: Record<string, unknown> = { ...row }\n\t\tfor (const computeName of plan.computeNames) {\n\t\t\tconst def = computedDefs[computeName]\n\t\t\tconst depInput: Record<string, unknown> = {}\n\t\t\tfor (const dep of def.deps) {\n\t\t\t\tif (!(dep in row)) {\n\t\t\t\t\tthrow new EquippedError('Computed field dependency missing from adapter result', {\n\t\t\t\t\t\tschema: schema.name,\n\t\t\t\t\t\tcomputedField: computeName,\n\t\t\t\t\t\tdependency: dep,\n\t\t\t\t\t\tdependencies: def.deps,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tdepInput[dep] = row[dep]\n\t\t\t}\n\t\t\tconst r = v.validate(def.pipe, def.compute(depInput))\n\t\t\tif (!r.valid) throw new EquippedError('Computed field validation failed', {\n\t\t\t\tschema: schema.name,\n\t\t\t\tcomputedField: computeName,\n\t\t\t\tcause: r.error,\n\t\t\t})\n\t\t\tenriched[computeName] = r.value\n\t\t}\n\n\t\tif (!plan.requestedSelect) return enriched\n\n\t\tconst shaped: Record<string, unknown> = {}\n\t\tfor (const key of plan.requestedSelect) {\n\t\t\tif (key in enriched) shaped[key] = enriched[key]\n\t\t}\n\t\treturn shaped\n\t})\n}\n","import { Instance } from '../../../instance'\nimport { OrmValidationError, type OrmValidationFailure } from '../../errors'\nimport { ManyRelation, OneRelation, type AnyPreloadDef, type AnyRelDef, type NestedPreloadDef } from '../../relations'\nimport type { AnySchema } from '../../schema'\n\nconst FALLBACK_PAGINATION_DEFAULT_LIMIT = 100\nconst MAX_PRELOAD_DEPTH = 5\n\nexport type ReadOffsetSource =\n\t| { kind: 'offset'; value: unknown }\n\t| { kind: 'page'; value: unknown }\n\nexport type ReadLimitSource = { value: unknown }\n\nexport type NormalisedAllReadQuery = {\n\tlimit?: number\n\toffset?: number\n}\n\nexport type NormalisedIterationReadQuery = NormalisedAllReadQuery & {\n\tbatchSize?: number\n}\n\nexport type NormalisedPaginatedReadQuery = {\n\tlimit: number\n\toffset: number\n\tcurrent: number\n}\n\nfunction isRelDef(def: unknown): def is AnyRelDef {\n\treturn def instanceof ManyRelation || def instanceof OneRelation\n}\n\nfunction isNestedPreloadDef(def: AnyPreloadDef): def is NestedPreloadDef {\n\treturn typeof def === 'object' && def != null && 'def' in def\n}\n\nfunction relationStep(def: AnyRelDef) {\n\treturn `${def.source.name}.${def.name}->${def.target.name}`\n}\n\nfunction isPositiveInteger(value: unknown): value is number {\n\treturn typeof value === 'number' && Number.isSafeInteger(value) && value > 0\n}\n\nfunction isNonNegativeInteger(value: unknown): value is number {\n\treturn typeof value === 'number' && Number.isSafeInteger(value) && value >= 0\n}\n\nfunction getPaginationDefaultLimit() {\n\treturn Instance.maybeGet()?.settings.utils.paginationDefaultLimit ?? FALLBACK_PAGINATION_DEFAULT_LIMIT\n}\n\nfunction collectSelectFailures(schema: AnySchema, select: readonly string[] | undefined, failures: OrmValidationFailure[]) {\n\tif (!select || select.length === 0) return\n\n\tconst persistedNames = new Set(Object.keys(schema.fields))\n\tconst computedNames = new Set(Object.keys(schema.computedDefs as Record<string, unknown>))\n\tfor (const field of select) {\n\t\tif (persistedNames.has(field) || computedNames.has(field)) continue\n\t\tfailures.push({\n\t\t\tfield,\n\t\t\tcause: `Unknown selected field \"${field}\" on schema \"${schema.name}\"`,\n\t\t})\n\t}\n}\n\nfunction collectPreloadFailures(\n\tschema: AnySchema,\n\tdefs: readonly AnyPreloadDef[] | undefined,\n\tfailures: OrmValidationFailure[],\n\tdepth = 1,\n\tpath: readonly string[] = [],\n) {\n\tif (defs == null) return\n\tif (!Array.isArray(defs)) {\n\t\tfailures.push({ cause: 'Preloads must be an array' })\n\t\treturn\n\t}\n\tif (defs.length === 0) return\n\n\tif (depth > MAX_PRELOAD_DEPTH) {\n\t\tfailures.push({ cause: `Preload depth exceeded max depth ${MAX_PRELOAD_DEPTH}` })\n\t\treturn\n\t}\n\n\tfor (const preload of defs) {\n\t\tconst rawDef = isRelDef(preload) ? preload : isNestedPreloadDef(preload) ? preload.def : undefined\n\t\tif (!isRelDef(rawDef)) {\n\t\t\tfailures.push({ cause: 'Invalid preload definition: expected a relation definition or nested preload definition with `def`' })\n\t\t\tcontinue\n\t\t}\n\n\t\tif (rawDef.source !== schema) {\n\t\t\tfailures.push({\n\t\t\t\tfield: rawDef.name,\n\t\t\t\tcause: `Preload relation \"${rawDef.name}\" belongs to source schema \"${rawDef.source.name}\" but was used from schema \"${schema.name}\"`,\n\t\t\t})\n\t\t}\n\n\t\tconst step = relationStep(rawDef)\n\t\tif (path.includes(step)) {\n\t\t\tfailures.push({ field: rawDef.name, cause: `Preload cycle detected: ${[...path, step].join(' -> ')}` })\n\t\t\tcontinue\n\t\t}\n\n\t\tif (isNestedPreloadDef(preload)) {\n\t\t\tconst nested = preload.preloads ?? []\n\t\t\tif (!Array.isArray(nested)) {\n\t\t\t\tfailures.push({ field: rawDef.name, cause: `Nested preloads for relation \"${rawDef.name}\" must be an array` })\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcollectPreloadFailures(rawDef.target, nested, failures, depth + 1, [...path, step])\n\t\t}\n\t}\n}\n\nfunction collectLimitFailure(value: unknown, failures: OrmValidationFailure[]): number | undefined {\n\tif (isPositiveInteger(value)) return value\n\tfailures.push({ field: 'limit', option: 'limit', cause: 'Limit must be a positive safe integer' })\n\treturn undefined\n}\n\nfunction collectOffsetFailure(value: unknown, failures: OrmValidationFailure[]): number | undefined {\n\tif (isNonNegativeInteger(value)) return value\n\tfailures.push({ field: 'offset', option: 'offset', cause: 'Offset must be a non-negative safe integer' })\n\treturn undefined\n}\n\nfunction collectPageFailure(value: unknown, failures: OrmValidationFailure[]): number | undefined {\n\tif (isPositiveInteger(value)) return value\n\tfailures.push({ field: 'page', option: 'page', cause: 'Page must be a positive safe integer' })\n\treturn undefined\n}\n\nfunction collectBatchSizeFailure(value: unknown, failures: OrmValidationFailure[]): number | undefined {\n\tif (value === undefined) return undefined\n\tif (isPositiveInteger(value)) return value\n\tfailures.push({ field: 'batchSize', option: 'batchSize', cause: 'Batch size must be a positive safe integer' })\n\treturn undefined\n}\n\nfunction collectIterationOptionFailures(options: unknown, failures: OrmValidationFailure[]): number | undefined {\n\tif (options === undefined) return undefined\n\tif (options == null || typeof options !== 'object' || Array.isArray(options)) {\n\t\tfailures.push({ option: 'batchSize', cause: 'Iteration options must be an object' })\n\t\treturn undefined\n\t}\n\treturn collectBatchSizeFailure((options as { batchSize?: unknown }).batchSize, failures)\n}\n\nfunction throwIfFailures(schema: AnySchema, operation: string, failures: OrmValidationFailure[]) {\n\tif (failures.length > 0) throw new OrmValidationError('query-shape', schema.name, operation, failures)\n}\n\nexport function assertNormalisedFindReadShape(\n\tschema: AnySchema,\n\toperation: string,\n\tstate: {\n\t\tselect: readonly string[] | undefined\n\t\tpreloads: readonly AnyPreloadDef[] | undefined\n\t},\n): void {\n\tconst failures: OrmValidationFailure[] = []\n\tcollectSelectFailures(schema, state.select, failures)\n\tcollectPreloadFailures(schema, state.preloads, failures)\n\tthrowIfFailures(schema, operation, failures)\n}\n\nexport function normaliseAllFindReadShape(\n\tschema: AnySchema,\n\toperation: string,\n\tstate: {\n\t\tselect: readonly string[] | undefined\n\t\tpreloads: readonly AnyPreloadDef[] | undefined\n\t\tlimitSource?: ReadLimitSource\n\t\toffsetSource?: ReadOffsetSource\n\t},\n): NormalisedAllReadQuery {\n\tconst failures: OrmValidationFailure[] = []\n\tcollectSelectFailures(schema, state.select, failures)\n\tcollectPreloadFailures(schema, state.preloads, failures)\n\n\tlet limit = state.limitSource === undefined ? undefined : collectLimitFailure(state.limitSource.value, failures)\n\tlet offset: number | undefined\n\n\tif (state.offsetSource?.kind === 'offset') {\n\t\toffset = collectOffsetFailure(state.offsetSource.value, failures)\n\t} else if (state.offsetSource?.kind === 'page') {\n\t\tconst page = collectPageFailure(state.offsetSource.value, failures)\n\t\tif (limit === undefined && state.limitSource === undefined) {\n\t\t\tlimit = getPaginationDefaultLimit()\n\t\t\tif (!isPositiveInteger(limit)) {\n\t\t\t\tfailures.push({ field: 'limit', cause: 'Default page limit must be a positive safe integer' })\n\t\t\t\tlimit = undefined\n\t\t\t}\n\t\t}\n\t\tif (page !== undefined && limit !== undefined) {\n\t\t\tconst resolvedOffset = (page - 1) * limit\n\t\t\tif (isNonNegativeInteger(resolvedOffset)) {\n\t\t\t\toffset = resolvedOffset\n\t\t\t} else {\n\t\t\t\tfailures.push({ field: 'offset', cause: 'Resolved page offset must be a non-negative safe integer' })\n\t\t\t}\n\t\t}\n\t}\n\n\tthrowIfFailures(schema, operation, failures)\n\treturn { limit, offset }\n}\n\nexport function normaliseAllIterateReadShape(\n\tschema: AnySchema,\n\toperation: string,\n\tstate: {\n\t\tselect: readonly string[] | undefined\n\t\tpreloads: readonly AnyPreloadDef[] | undefined\n\t\tlimitSource?: ReadLimitSource\n\t\toffsetSource?: ReadOffsetSource\n\t},\n\toptions?: unknown,\n): NormalisedIterationReadQuery {\n\tconst failures: OrmValidationFailure[] = []\n\tcollectSelectFailures(schema, state.select, failures)\n\tcollectPreloadFailures(schema, state.preloads, failures)\n\n\tlet limit = state.limitSource === undefined ? undefined : collectLimitFailure(state.limitSource.value, failures)\n\tlet offset: number | undefined\n\tconst batchSize = collectIterationOptionFailures(options, failures)\n\n\tif (state.offsetSource?.kind === 'offset') {\n\t\toffset = collectOffsetFailure(state.offsetSource.value, failures)\n\t} else if (state.offsetSource?.kind === 'page') {\n\t\tconst page = collectPageFailure(state.offsetSource.value, failures)\n\t\tif (limit === undefined && state.limitSource === undefined) {\n\t\t\tlimit = getPaginationDefaultLimit()\n\t\t\tif (!isPositiveInteger(limit)) {\n\t\t\t\tfailures.push({ field: 'limit', option: 'limit', cause: 'Default page limit must be a positive safe integer' })\n\t\t\t\tlimit = undefined\n\t\t\t}\n\t\t}\n\t\tif (page !== undefined && limit !== undefined) {\n\t\t\tconst resolvedOffset = (page - 1) * limit\n\t\t\tif (isNonNegativeInteger(resolvedOffset)) {\n\t\t\t\toffset = resolvedOffset\n\t\t\t} else {\n\t\t\t\tfailures.push({ field: 'offset', option: 'offset', cause: 'Resolved page offset must be a non-negative safe integer' })\n\t\t\t}\n\t\t}\n\t}\n\n\tthrowIfFailures(schema, operation, failures)\n\treturn { limit, offset, batchSize }\n}\n\nexport function normaliseAllPaginateReadShape(\n\tschema: AnySchema,\n\toperation: string,\n\tstate: {\n\t\tselect: readonly string[] | undefined\n\t\tpreloads: readonly AnyPreloadDef[] | undefined\n\t\tlimitSource?: ReadLimitSource\n\t\toffsetSource?: ReadOffsetSource\n\t},\n): NormalisedPaginatedReadQuery {\n\tconst failures: OrmValidationFailure[] = []\n\tcollectSelectFailures(schema, state.select, failures)\n\tcollectPreloadFailures(schema, state.preloads, failures)\n\n\tlet limit: number | undefined\n\tif (state.limitSource === undefined) {\n\t\tlimit = getPaginationDefaultLimit()\n\t\tif (!isPositiveInteger(limit)) {\n\t\t\tfailures.push({ field: 'limit', cause: 'Default page limit must be a positive safe integer' })\n\t\t\tlimit = undefined\n\t\t}\n\t} else {\n\t\tlimit = collectLimitFailure(state.limitSource.value, failures)\n\t}\n\n\tlet offset = 0\n\tlet current = 1\n\n\tif (state.offsetSource?.kind === 'offset') {\n\t\tconst resolvedOffset = collectOffsetFailure(state.offsetSource.value, failures)\n\t\tif (resolvedOffset !== undefined) {\n\t\t\toffset = resolvedOffset\n\t\t\tif (limit !== undefined) current = Math.floor(resolvedOffset / limit) + 1\n\t\t}\n\t} else if (state.offsetSource?.kind === 'page') {\n\t\tconst page = collectPageFailure(state.offsetSource.value, failures)\n\t\tif (page !== undefined) current = page\n\t\tif (page !== undefined && limit !== undefined) {\n\t\t\tconst resolvedOffset = (page - 1) * limit\n\t\t\tif (isNonNegativeInteger(resolvedOffset)) {\n\t\t\t\toffset = resolvedOffset\n\t\t\t} else {\n\t\t\t\tfailures.push({ field: 'offset', cause: 'Resolved page offset must be a non-negative safe integer' })\n\t\t\t}\n\t\t}\n\t}\n\n\tthrowIfFailures(schema, operation, failures)\n\treturn { limit: limit as number, offset, current }\n}\n","import { v, type Pipe, type PipeInput, type PipeOutput } from 'valleyed'\n\nimport { OrmValidationError, type OrmValidationFailure } from './errors'\nimport type { AnySchemaField, SchemaField } from './fields'\nimport { Schema, type AnySchema, type SchemaFields, type SchemaOutput } from './schema'\nimport { SetOp, isUpdateOp, opTouchedFields, type AnyUpdateOp } from './updates'\nimport type { Prettify } from './utils'\n\nexport type SchemaCreateInput<S extends AnySchema> = Prettify<\n\t{\n\t\t[K in keyof SchemaFields<S> as SchemaFields<S>[K] extends SchemaField<any, any, true>\n\t\t\t? never\n\t\t\t: K]: SchemaFields<S>[K] extends AnySchemaField ? PipeInput<SchemaFields<S>[K]['pipe']> : never\n\t} & {\n\t\t[K in keyof SchemaFields<S> as SchemaFields<S>[K] extends SchemaField<any, any, true>\n\t\t\t? K\n\t\t\t: never]?: SchemaFields<S>[K] extends AnySchemaField ? PipeInput<SchemaFields<S>[K]['pipe']> : never\n\t}\n>\n\nexport type SchemaUpdateInput<S extends AnySchema> =\n\tS extends Schema<any, any, infer F>\n\t\t? { [K in keyof F]?: F[K] extends AnySchemaField ? PipeInput<F[K]['pipe']> | AnyUpdateOp : never }\n\t\t: Record<string, unknown>\n\nexport type SchemaUpdateOutput<S extends AnySchema> =\n\tS extends Schema<any, any, infer F>\n\t\t? { [K in keyof F]?: F[K] extends AnySchemaField ? PipeOutput<F[K]['pipe']> | AnyUpdateOp : never }\n\t\t: Record<string, unknown>\n\nexport function tryValidateCreateRow<S extends AnySchema>(\n\ts: S,\n\tdata: Record<string, unknown>,\n): { ok: true; value: SchemaOutput<S> } | { ok: false; failures: OrmValidationFailure[] } {\n\tconst failures: OrmValidationFailure[] = []\n\tconst result: Record<string, unknown> = {}\n\n\tfor (const [key, entry] of Object.entries(s.fields)) {\n\t\tconst pipe = entry.onCreate ? v.defaults(entry.pipe, entry.onCreate()) : entry.pipe\n\t\tconst fieldValue = key in data ? data[key] : undefined\n\t\tconst validated = v.validate(pipe, fieldValue)\n\t\tif (validated.valid) {\n\t\t\tresult[key] = validated.value\n\t\t} else {\n\t\t\tfailures.push({ field: key, cause: validated.error })\n\t\t}\n\t}\n\n\tif (failures.length > 0) return { ok: false, failures }\n\treturn { ok: true, value: result as SchemaOutput<S> }\n}\n\nexport function validateCreate<S extends AnySchema>(s: S, data: Record<string, unknown>): SchemaOutput<S> {\n\tconst result = tryValidateCreateRow(s, data)\n\tif (!result.ok) {\n\t\tthrow new OrmValidationError('validation', s.name, 'createOne', result.failures)\n\t}\n\treturn result.value\n}\n\nexport function validateCreateMany<S extends AnySchema>(s: S, rows: Record<string, unknown>[]): SchemaOutput<S>[] {\n\tconst allFailures: OrmValidationFailure[] = []\n\tconst validated: SchemaOutput<S>[] = []\n\n\tfor (let i = 0; i < rows.length; i++) {\n\t\tconst result = tryValidateCreateRow(s, rows[i])\n\t\tif (result.ok) {\n\t\t\tvalidated.push(result.value)\n\t\t} else {\n\t\t\tfor (const failure of result.failures) {\n\t\t\t\tallFailures.push({ ...failure, rowIndex: i })\n\t\t\t}\n\t\t}\n\t}\n\n\tif (allFailures.length > 0) {\n\t\tthrow new OrmValidationError('validation', s.name, 'createMany', allFailures)\n\t}\n\n\treturn validated\n}\n\nexport function validateUpdate<S extends AnySchema>(s: S, data: Record<string, unknown>): SchemaUpdateOutput<S> {\n\tconst pipes: Record<string, Pipe<any, any>> = {}\n\tconst ops: Record<string, unknown> = {}\n\n\tfor (const [key, value] of Object.entries(data)) {\n\t\tif (isUpdateOp(value)) ops[key] = value\n\t\telse if (key in s.fieldDefs) pipes[key] = s.fieldDefs[key].pipe\n\t}\n\n\tfor (const [key, entry] of Object.entries(s.fieldDefs)) {\n\t\tif (!(key in data) && entry.onUpdate) pipes[key] = v.defaults(entry.pipe, entry.onUpdate())\n\t}\n\n\tconst r = v.validate(v.object(pipes), data)\n\tif (!r.valid) throw new OrmValidationError('validation', s.name, 'updateByPk', [{ cause: r.error }])\n\tconst validated = r.value as Record<string, unknown>\n\treturn { ...validated, ...ops } as SchemaUpdateOutput<S>\n}\n\nexport function validateUpdateOps(schema: AnySchema, ops: AnyUpdateOp[], operation = 'updateByPk'): AnyUpdateOp[] {\n\tconst touched = new Map<string, number[]>()\n\n\tfor (let i = 0; i < ops.length; i++) {\n\t\tfor (const field of opTouchedFields(ops[i])) {\n\t\t\tif (!touched.has(field)) touched.set(field, [])\n\t\t\ttouched.get(field)!.push(i)\n\t\t}\n\t}\n\n\tconst autoBumped: AnyUpdateOp[] = []\n\tfor (const [key, entry] of Object.entries(schema.fieldDefs)) {\n\t\tif (entry.onUpdate && !touched.has(key)) {\n\t\t\tconst bumpOp = new SetOp({ [key]: entry.onUpdate() })\n\t\t\tautoBumped.push(bumpOp)\n\t\t\ttouched.set(key, [ops.length + autoBumped.length - 1])\n\t\t}\n\t}\n\n\tconst allOps = [...ops, ...autoBumped]\n\n\tconst conflicts: OrmValidationFailure[] = []\n\tfor (const [field, indices] of touched) {\n\t\tif (indices.length > 1) {\n\t\t\tconflicts.push({ field, cause: `field \"${field}\" touched by multiple ops at indices [${indices.join(', ')}]` })\n\t\t}\n\t}\n\tif (conflicts.length > 0) {\n\t\tthrow new OrmValidationError('conflicting-ops', schema.name, operation, conflicts)\n\t}\n\n\tconst failures: OrmValidationFailure[] = []\n\tfor (let i = 0; i < allOps.length; i++) {\n\t\tconst op = allOps[i]\n\t\tif (op instanceof SetOp) {\n\t\t\tfor (const [key, value] of Object.entries(op.values)) {\n\t\t\t\tconst fieldDef = schema.fields[key] as AnySchemaField | undefined\n\t\t\t\tif (!fieldDef) continue\n\t\t\t\tconst r = v.validate(fieldDef.pipe, value)\n\t\t\t\tif (!r.valid) {\n\t\t\t\t\tfailures.push({ opIndex: i, field: key, cause: r.error })\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif (failures.length > 0) {\n\t\tthrow new OrmValidationError('validation', schema.name, operation, failures)\n\t}\n\n\treturn allOps\n}\n\nexport function composeSchemaConfig(\n\tresolve: (schema: AnySchema) => unknown,\n\ttransforms: ReadonlyArray<(config: any, schema: AnySchema) => any>,\n\tschema: AnySchema,\n\tpipe: Pipe<any, any>,\n): unknown {\n\tlet config = resolve(schema)\n\tfor (const transform of transforms) {\n\t\tconfig = transform(config, schema)\n\t}\n\tconst r = v.validate(pipe, config)\n\tif (!r.valid) throw new OrmValidationError('validation', schema.name, 'schemaConfig', [{ cause: r.error }])\n\treturn r.value\n}\n\nexport function validateUpsertConflicts(\n\tschema: AnySchema,\n\trawCreate: Record<string, unknown>,\n\tops: AnyUpdateOp[],\n): void {\n\tconst createFields = new Set(Object.keys(rawCreate))\n\tconst conflicts: OrmValidationFailure[] = []\n\tfor (const op of ops) {\n\t\tif (op instanceof SetOp) continue\n\t\tfor (const field of opTouchedFields(op)) {\n\t\t\tif (createFields.has(field)) {\n\t\t\t\tconflicts.push({ field, cause: `field \"${field}\" present in both create payload and atomic op \"${op.kind}\"` })\n\t\t\t}\n\t\t}\n\t}\n\tif (conflicts.length > 0) {\n\t\tthrow new OrmValidationError('conflicting-ops', schema.name, 'upsertOne', conflicts)\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { IncOp, MulOp, SetOp, UnsetOp } = await import('./updates')\n\tconst { EquippedError } = await import('../errors')\n\n\tdescribe('validateCreate', () => {\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => 'auto-id')\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.field('age', v.optional(v.number()))\n\t\t\t.field('createdAt', v.number(), { onCreate: () => 1000 })\n\t\t\t.build()\n\n\t\ttest('generates pk when not provided', () => {\n\t\t\tconst result = validateCreate(UserSchema, { email: 'a@b.com', name: 'Alice' })\n\t\t\texpect(result.id).toBe('auto-id')\n\t\t})\n\n\t\ttest('uses provided pk when given', () => {\n\t\t\tconst result = validateCreate(UserSchema, { id: 'custom-id', email: 'a@b.com', name: 'Alice' })\n\t\t\texpect(result.id).toBe('custom-id')\n\t\t})\n\n\t\ttest('applies onCreate generator for generated fields', () => {\n\t\t\tconst result = validateCreate(UserSchema, { email: 'a@b.com', name: 'Alice' })\n\t\t\texpect(result.createdAt).toBe(1000)\n\t\t})\n\n\t\ttest('allows overriding generated field values', () => {\n\t\t\tconst result = validateCreate(UserSchema, { email: 'a@b.com', name: 'Alice', createdAt: 9999 })\n\t\t\texpect(result.createdAt).toBe(9999)\n\t\t})\n\n\t\ttest('optional fields default to undefined when not provided', () => {\n\t\t\tconst result = validateCreate(UserSchema, { email: 'a@b.com', name: 'Alice' })\n\t\t\texpect(result.age).toBeUndefined()\n\t\t})\n\n\t\ttest('strips unknown fields', () => {\n\t\t\tconst result = validateCreate(UserSchema, { email: 'a@b.com', name: 'Alice', admin: true })\n\t\t\texpect((result as any).admin).toBeUndefined()\n\t\t})\n\n\t\ttest('throws OrmValidationError on invalid field type', () => {\n\t\t\ttry {\n\t\t\t\tvalidateCreate(UserSchema, { email: 123, name: 'Alice' })\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\texpect(err.schema).toBe('users')\n\t\t\t\texpect(err.operation).toBe('createOne')\n\t\t\t\texpect(err.failures.length).toBeGreaterThan(0)\n\t\t\t\texpect(err.failures[0].field).toBe('email')\n\t\t\t}\n\t\t})\n\n\t\ttest('throws OrmValidationError when required field is missing', () => {\n\t\t\ttry {\n\t\t\t\tvalidateCreate(UserSchema, { email: 'a@b.com' })\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\texpect(err.failures.some((f) => f.field === 'name')).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('collects all field failures in a single error', () => {\n\t\t\ttry {\n\t\t\t\tvalidateCreate(UserSchema, { email: 123, name: 456 })\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\tconst failedFields = err.failures.map((f) => f.field)\n\t\t\t\texpect(failedFields).toContain('email')\n\t\t\t\texpect(failedFields).toContain('name')\n\t\t\t}\n\t\t})\n\t})\n\n\tdescribe('validateCreateMany', () => {\n\t\tconst ItemSchema = Schema.from('items')\n\t\t\t.pk('id', v.string(), () => 'item-id')\n\t\t\t.field('title', v.string())\n\t\t\t.field('price', v.number())\n\t\t\t.build()\n\n\t\ttest('validates all rows and returns validated documents', () => {\n\t\t\tconst results = validateCreateMany(ItemSchema, [\n\t\t\t\t{ title: 'A', price: 10 },\n\t\t\t\t{ title: 'B', price: 20 },\n\t\t\t])\n\t\t\texpect(results).toHaveLength(2)\n\t\t\texpect(results[0].title).toBe('A')\n\t\t\texpect(results[1].title).toBe('B')\n\t\t})\n\n\t\ttest('collects failures across rows with rowIndex populated', () => {\n\t\t\ttry {\n\t\t\t\tvalidateCreateMany(ItemSchema, [\n\t\t\t\t\t{ title: 'Good', price: 10 },\n\t\t\t\t\t{ title: 123, price: 20 },\n\t\t\t\t\t{ title: 'Also bad', price: 'not-a-number' },\n\t\t\t\t])\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\texpect(err.schema).toBe('items')\n\t\t\t\texpect(err.operation).toBe('createMany')\n\t\t\t\texpect(err.failures.length).toBeGreaterThanOrEqual(2)\n\t\t\t\tconst rowIndices = err.failures.map((f) => f.rowIndex)\n\t\t\t\texpect(rowIndices).toContain(1)\n\t\t\t\texpect(rowIndices).toContain(2)\n\t\t\t\texpect(rowIndices).not.toContain(0)\n\t\t\t}\n\t\t})\n\n\t\ttest('throws single error even with multiple bad rows', () => {\n\t\t\ttry {\n\t\t\t\tvalidateCreateMany(ItemSchema, [\n\t\t\t\t\t{ title: 1, price: 'bad' },\n\t\t\t\t\t{ title: 2, price: 'worse' },\n\t\t\t\t])\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.failures.filter((f) => f.rowIndex === 0).length).toBeGreaterThan(0)\n\t\t\t\texpect(err.failures.filter((f) => f.rowIndex === 1).length).toBeGreaterThan(0)\n\t\t\t}\n\t\t})\n\t})\n\n\tdescribe('validateUpdate', () => {\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => 'auto-id')\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.field('updatedAt', v.number(), { onCreate: () => 1000, onUpdate: () => 2000 })\n\t\t\t.build()\n\n\t\ttest('validates only provided fields', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { name: 'Bob' })\n\t\t\texpect(result).toHaveProperty('name', 'Bob')\n\t\t\texpect(result).not.toHaveProperty('email')\n\t\t})\n\n\t\ttest('applies onUpdate generator for unset generated fields', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { name: 'Bob' })\n\t\t\texpect(result).toHaveProperty('updatedAt', 2000)\n\t\t})\n\n\t\ttest('allows overriding onUpdate field explicitly', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { name: 'Bob', updatedAt: 5000 })\n\t\t\texpect(result).toHaveProperty('updatedAt', 5000)\n\t\t})\n\n\t\ttest('strips unknown fields', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { name: 'Bob', admin: true })\n\t\t\texpect((result as any).admin).toBeUndefined()\n\t\t})\n\n\t\ttest('throws on invalid field type', () => {\n\t\t\texpect(() => validateUpdate(UserSchema, { name: 123 })).toThrow()\n\t\t})\n\n\t\ttest('passes Op instances through without validation', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { name: new IncOp('name', 1) })\n\t\t\texpect(result.name).toBeInstanceOf(IncOp)\n\t\t})\n\n\t\ttest('Op on a field suppresses onUpdate for that field but not others', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { updatedAt: new IncOp('updatedAt', 1) })\n\t\t\texpect(result.updatedAt).toBeInstanceOf(IncOp)\n\t\t})\n\n\t\ttest('plain value and Op can coexist in same update', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { name: 'Bob', email: new UnsetOp('email') })\n\t\t\texpect(result.name).toBe('Bob')\n\t\t\texpect(result.email).toBeInstanceOf(UnsetOp)\n\t\t\texpect(result.updatedAt).toBe(2000)\n\t\t})\n\n\t\ttest('Op on onUpdate field suppresses its generator', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { updatedAt: new MulOp('updatedAt', 2) })\n\t\t\texpect(result.updatedAt).toBeInstanceOf(MulOp)\n\t\t})\n\t})\n\n\tdescribe('OrmValidationError', () => {\n\t\ttest('has correct kind, schema, operation, and failures', () => {\n\t\t\tconst err = new OrmValidationError('conflicting-ops', 'users', 'updateByPk', [\n\t\t\t\t{ field: 'views', cause: 'conflict' },\n\t\t\t])\n\t\t\texpect(err).toBeInstanceOf(EquippedError)\n\t\t\texpect(err.kind).toBe('conflicting-ops')\n\t\t\texpect(err.schema).toBe('users')\n\t\t\texpect(err.operation).toBe('updateByPk')\n\t\t\texpect(err.failures).toHaveLength(1)\n\t\t})\n\t})\n\n\tdescribe('validateUpdateOps', () => {\n\t\tconst UpdateSchema = Schema.from('items')\n\t\t\t.pk('id', v.string(), () => 'auto')\n\t\t\t.field('name', v.string())\n\t\t\t.field('views', v.number())\n\t\t\t.field('updatedAt', v.number(), { onCreate: () => 1000, onUpdate: () => 2000 })\n\t\t\t.build()\n\n\t\ttest('passes through valid ops', () => {\n\t\t\tconst ops = validateUpdateOps(UpdateSchema, [new SetOp({ name: 'New Name' })])\n\t\t\texpect(ops.length).toBeGreaterThanOrEqual(1)\n\t\t\texpect(ops[0]).toBeInstanceOf(SetOp)\n\t\t})\n\n\t\ttest('auto-bumps onUpdate fields not touched by user ops', () => {\n\t\t\tconst ops = validateUpdateOps(UpdateSchema, [new SetOp({ name: 'New Name' })])\n\t\t\tconst bumped = ops.find((op) => op instanceof SetOp && 'updatedAt' in op.values && op !== ops[0])\n\t\t\texpect(bumped).toBeDefined()\n\t\t\texpect((bumped as SetOp).values.updatedAt).toBe(2000)\n\t\t})\n\n\t\ttest('user set({updatedAt:X}) suppresses auto-bump for that field', () => {\n\t\t\tconst ops = validateUpdateOps(UpdateSchema, [new SetOp({ updatedAt: 9999 })])\n\t\t\tconst setOps = ops.filter((op) => op instanceof SetOp) as SetOp[]\n\t\t\tconst allUpdatedAtValues = setOps.flatMap((op) =>\n\t\t\t\t'updatedAt' in op.values ? [op.values.updatedAt] : [],\n\t\t\t)\n\t\t\texpect(allUpdatedAtValues).toEqual([9999])\n\t\t})\n\n\t\ttest('atomic op on onUpdate field suppresses auto-bump', () => {\n\t\t\tconst ops = validateUpdateOps(UpdateSchema, [new IncOp('updatedAt', 1)])\n\t\t\tconst setOps = ops.filter((op) => op instanceof SetOp) as SetOp[]\n\t\t\tconst hasAutoBumpedUpdatedAt = setOps.some((op) => 'updatedAt' in op.values)\n\t\t\texpect(hasAutoBumpedUpdatedAt).toBe(false)\n\t\t})\n\n\t\ttest('set({views:0}) + inc(views, 1) throws conflicting-ops', () => {\n\t\t\texpect(() =>\n\t\t\t\tvalidateUpdateOps(UpdateSchema, [new SetOp({ views: 0 }), new IncOp('views', 1)]),\n\t\t\t).toThrow(OrmValidationError)\n\n\t\t\ttry {\n\t\t\t\tvalidateUpdateOps(UpdateSchema, [new SetOp({ views: 0 }), new IncOp('views', 1)])\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('conflicting-ops')\n\t\t\t\texpect(err.failures[0].field).toBe('views')\n\t\t\t}\n\t\t})\n\n\t\ttest('cross-kind conflict (unset + inc on same field) throws', () => {\n\t\t\tconst UpdateSchema2 = Schema.from('items2')\n\t\t\t\t.pk('id', v.string(), () => 'auto')\n\t\t\t\t.field('score', v.optional(v.number()))\n\t\t\t\t.build()\n\t\t\texpect(() =>\n\t\t\t\tvalidateUpdateOps(UpdateSchema2, [new UnsetOp('score'), new IncOp('score', 5)]),\n\t\t\t).toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('SetOp values are pipe-validated', () => {\n\t\t\texpect(() =>\n\t\t\t\tvalidateUpdateOps(UpdateSchema, [new SetOp({ name: 123 as any })]),\n\t\t\t).toThrow(OrmValidationError)\n\n\t\t\ttry {\n\t\t\t\tvalidateUpdateOps(UpdateSchema, [new SetOp({ name: 123 as any })])\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\texpect(err.failures[0].field).toBe('name')\n\t\t\t}\n\t\t})\n\n\t\ttest('atomic op operands are NOT pipe-validated', () => {\n\t\t\tconst ops = validateUpdateOps(UpdateSchema, [new IncOp('views', -999)])\n\t\t\texpect(ops).toHaveLength(2)\n\t\t})\n\n\t\ttest('auto-bumped SetOp values are pipe-validated', () => {\n\t\t\tconst BadSchema = Schema.from('bad')\n\t\t\t\t.pk('id', v.string(), () => 'auto')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.field('counter', v.number(), { onUpdate: () => 'not-a-number' as any })\n\t\t\t\t.build()\n\t\t\texpect(() =>\n\t\t\t\tvalidateUpdateOps(BadSchema, [new SetOp({ name: 'test' })]),\n\t\t\t).toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('collects all conflicts in one error', () => {\n\t\t\ttry {\n\t\t\t\tvalidateUpdateOps(UpdateSchema, [\n\t\t\t\t\tnew SetOp({ views: 0, name: 'A' }),\n\t\t\t\t\tnew IncOp('views', 1),\n\t\t\t\t\tnew SetOp({ name: 'B' }),\n\t\t\t\t])\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('conflicting-ops')\n\t\t\t\texpect(err.failures.length).toBe(2)\n\t\t\t}\n\t\t})\n\t})\n\n\tdescribe('composeSchemaConfig', () => {\n\t\tconst TestSchema = Schema.from('cfg_test')\n\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t.build()\n\n\t\tconst tablePipe = v.object({ table: v.string() })\n\n\t\ttest('composes base resolver output and validates against pipe', () => {\n\t\t\tconst result = composeSchemaConfig(\n\t\t\t\t() => ({ table: 'users' }),\n\t\t\t\t[],\n\t\t\t\tTestSchema,\n\t\t\t\ttablePipe,\n\t\t\t)\n\t\t\texpect(result).toEqual({ table: 'users' })\n\t\t})\n\n\t\ttest('applies transforms in order before validation', () => {\n\t\t\tconst result = composeSchemaConfig(\n\t\t\t\t() => ({ table: 'users' }),\n\t\t\t\t[\n\t\t\t\t\t(cfg: any) => ({ ...cfg, table: `a_${cfg.table}` }),\n\t\t\t\t\t(cfg: any) => ({ ...cfg, table: `b_${cfg.table}` }),\n\t\t\t\t],\n\t\t\t\tTestSchema,\n\t\t\t\ttablePipe,\n\t\t\t)\n\t\t\texpect(result).toEqual({ table: 'b_a_users' })\n\t\t})\n\n\t\ttest('throws OrmValidationError when composed config fails pipe validation', () => {\n\t\t\ttry {\n\t\t\t\tcomposeSchemaConfig(\n\t\t\t\t\t() => ({ table: 123 }),\n\t\t\t\t\t[],\n\t\t\t\t\tTestSchema,\n\t\t\t\t\ttablePipe,\n\t\t\t\t)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\texpect(err.schema).toBe('cfg_test')\n\t\t\t\texpect(err.operation).toBe('schemaConfig')\n\t\t\t\texpect(err.failures).toHaveLength(1)\n\t\t\t}\n\t\t})\n\n\t\ttest('throws OrmValidationError when transform corrupts valid base config', () => {\n\t\t\ttry {\n\t\t\t\tcomposeSchemaConfig(\n\t\t\t\t\t() => ({ table: 'users' }),\n\t\t\t\t\t[(cfg: any) => ({ ...cfg, table: 42 })],\n\t\t\t\t\tTestSchema,\n\t\t\t\t\ttablePipe,\n\t\t\t\t)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\texpect(err.operation).toBe('schemaConfig')\n\t\t\t}\n\t\t})\n\n\t\ttest('returns typed effective config on success', () => {\n\t\t\tconst pipe = v.object({ table: v.string(), prefix: v.optional(v.string()) })\n\t\t\tconst result = composeSchemaConfig(\n\t\t\t\t() => ({ table: 'orders' }),\n\t\t\t\t[(cfg: any) => ({ ...cfg, prefix: 'tenant1' })],\n\t\t\t\tTestSchema,\n\t\t\t\tpipe,\n\t\t\t)\n\t\t\texpect(result).toEqual({ table: 'orders', prefix: 'tenant1' })\n\t\t})\n\t})\n}\n","import { planSelection } from './computeds'\nimport { assertNormalisedFindReadShape, normaliseAllFindReadShape, normaliseAllIterateReadShape, normaliseAllPaginateReadShape, type ReadLimitSource, type ReadOffsetSource } from './query-shape'\nimport type { Paginated, SelectedWithPreloads } from './types'\nimport { assertNormalisedAggregate, assertNormalisedFilter, type FilterGroup } from '../../filter'\nimport type { AggregateSpec } from '../../orm-adapter'\nimport type { IterationOptions, OrderBy } from '../../query-options'\nimport type { AnyPreloadDef } from '../../relations'\nimport type { AnySchema } from '../../schema'\nimport { validateCreate, validateCreateMany, validateUpdate, validateUpsertConflicts, type SchemaCreateInput, type SchemaUpdateInput } from '../../schema-validations'\nimport { SetOp, isUpdateOp, type AnyUpdateOp } from '../../updates'\nimport type { SchemaContext, UpsertInput } from '../builders'\n\nexport async function runOneRead<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: {\n\t\twhere: FilterGroup\n\t\tselect: readonly Sel[] | undefined\n\t\tpreloads: P\n\t},\n): Promise<SelectedWithPreloads<S, Sel, P> | null> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tassertNormalisedFindReadShape(context.schema, 'findOne', state)\n\tconst row = await context.use.findOne(state.where)\n\tif (!row) return null\n\treturn context.shapeOneRow(state.select, state.preloads, row)\n}\n\nexport async function runAllRead<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: {\n\t\twhere: FilterGroup\n\t\tselect: readonly Sel[] | undefined\n\t\tpreloads: P\n\t\torderBy: readonly OrderBy[]\n\t\tlimitSource?: ReadLimitSource\n\t\toffsetSource?: ReadOffsetSource\n\t},\n): Promise<SelectedWithPreloads<S, Sel, P>[]> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst query = normaliseAllFindReadShape(context.schema, 'findMany', state)\n\tconst plan = planSelection(context.schema, state.select as readonly string[] | undefined)\n\tconst rows = await context.use.findMany(state.where, {\n\t\tselect: plan.adapterSelect,\n\t\torderBy: [...state.orderBy],\n\t\tlimit: query.limit,\n\t\toffset: query.offset,\n\t})\n\treturn context.shapeRows(state.select, state.preloads, rows)\n}\n\nexport async function runAllCount<S extends AnySchema>(\n\tcontext: SchemaContext<S>,\n\tstate: { where: FilterGroup },\n): Promise<number> {\n\tassertNormalisedFilter(context.schema, state.where)\n\treturn context.use.count(state.where)\n}\n\nfunction toPaginated<T>(items: T[], total: number, limit: number, current: number): Paginated<T> {\n\tconst start = 1\n\tconst last = Math.ceil(total / limit) || 1\n\tconst previous = current <= start || current > last ? null : current - 1\n\tconst next = current >= last ? null : current + 1\n\treturn {\n\t\tpages: { current, start, last, previous, next },\n\t\tdocs: { limit, total, count: items.length },\n\t\titems,\n\t}\n}\n\nexport async function runAllPaginate<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: {\n\t\twhere: FilterGroup\n\t\tselect: readonly Sel[] | undefined\n\t\tpreloads: P\n\t\torderBy: readonly OrderBy[]\n\t\tlimitSource?: ReadLimitSource\n\t\toffsetSource?: ReadOffsetSource\n\t},\n): Promise<Paginated<SelectedWithPreloads<S, Sel, P>>> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst query = normaliseAllPaginateReadShape(context.schema, 'paginate', state)\n\tconst plan = planSelection(context.schema, state.select as readonly string[] | undefined)\n\tconst use = context.use\n\tconst [rows, total] = await Promise.all([\n\t\tuse.findMany(state.where, {\n\t\t\tselect: plan.adapterSelect,\n\t\t\torderBy: [...state.orderBy],\n\t\t\tlimit: query.limit,\n\t\t\toffset: query.offset,\n\t\t}),\n\t\tuse.count(state.where),\n\t])\n\tconst items = await context.shapeRows(state.select, state.preloads, rows)\n\treturn toPaginated(items, total, query.limit, query.current)\n}\n\nexport async function* runAllIterate<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: {\n\t\twhere: FilterGroup\n\t\tselect: readonly Sel[] | undefined\n\t\tpreloads: P\n\t\torderBy: readonly OrderBy[]\n\t\tlimitSource?: ReadLimitSource\n\t\toffsetSource?: ReadOffsetSource\n\t},\n\toptions?: IterationOptions,\n): AsyncGenerator<SelectedWithPreloads<S, Sel, P>, void, void> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst query = normaliseAllIterateReadShape(context.schema, 'iterate', state, options)\n\tconst plan = planSelection(context.schema, state.select as readonly string[] | undefined)\n\n\tfor await (const row of context.use.iterateMany(state.where, {\n\t\tselect: plan.adapterSelect,\n\t\torderBy: [...state.orderBy],\n\t\tlimit: query.limit,\n\t\toffset: query.offset,\n\t\t...(query.batchSize === undefined ? {} : { batchSize: query.batchSize }),\n\t})) {\n\t\tconst shaped = await context.shapeRows(state.select, state.preloads, [row])\n\t\tconst first = shaped[0]\n\t\tif (first) yield first\n\t}\n}\n\nexport async function runOneCreate<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { select: readonly Sel[] | undefined; preloads: P },\n\tdata: SchemaCreateInput<S>,\n): Promise<SelectedWithPreloads<S, Sel, P>> {\n\tconst validated = validateCreate(context.schema, data as any)\n\tconst row = await context.use.createOne(validated as any)\n\tconst [resolved] = await context.shapeRows(state.select, state.preloads, [row])\n\treturn resolved\n}\n\nexport async function runAllCreate<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { select: readonly Sel[] | undefined; preloads: P },\n\tdata: SchemaCreateInput<S>[],\n): Promise<SelectedWithPreloads<S, Sel, P>[]> {\n\tconst validated = validateCreateMany(context.schema, data as any)\n\tconst rows = await context.use.createMany(validated as any)\n\treturn context.shapeRows(state.select, state.preloads, rows)\n}\n\nexport async function runOneUpdate<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { where: FilterGroup; select: readonly Sel[] | undefined; preloads: P },\n\tdata: SchemaUpdateInput<S>,\n): Promise<SelectedWithPreloads<S, Sel, P> | null> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst validated = validateUpdate(context.schema, data as any)\n\tconst row = await context.use.updateOne(state.where, validated as any)\n\treturn context.shapeOneRow(state.select, state.preloads, row)\n}\n\nexport async function runAllUpdate<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { where: FilterGroup; select: readonly Sel[] | undefined; preloads: P },\n\tdata: SchemaUpdateInput<S>,\n): Promise<SelectedWithPreloads<S, Sel, P>[]> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst validated = validateUpdate(context.schema, data as any)\n\tconst rows = await context.use.updateMany(state.where, validated as any)\n\treturn context.shapeRows(state.select, state.preloads, rows)\n}\n\nexport async function runOneUpsert<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { where: FilterGroup; select: readonly Sel[] | undefined; preloads: P },\n\tdata: UpsertInput<S>,\n): Promise<SelectedWithPreloads<S, Sel, P>> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst create = validateCreate(context.schema, data.create as any)\n\tconst ops: AnyUpdateOp[] = []\n\tif ('update' in data) {\n\t\tconst validated = validateUpdate(context.schema, data.update as any)\n\t\tconst plainValues: Record<string, unknown> = {}\n\t\tfor (const [key, value] of Object.entries(validated)) {\n\t\t\tif (isUpdateOp(value)) {\n\t\t\t\tops.push(value)\n\t\t\t} else {\n\t\t\t\tplainValues[key] = value\n\t\t\t}\n\t\t}\n\t\tif (Object.keys(plainValues).length > 0) {\n\t\t\tops.unshift(new SetOp(plainValues))\n\t\t}\n\t}\n\tif (ops.length > 0) {\n\t\tvalidateUpsertConflicts(context.schema, data.create as Record<string, unknown>, ops)\n\t}\n\tconst row = await context.use.upsertOne(state.where, create as any, ops)\n\treturn (await context.shapeOneRow(state.select, state.preloads, row)) as SelectedWithPreloads<S, Sel, P>\n}\n\nexport async function runOneDelete<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { where: FilterGroup; select: readonly Sel[] | undefined; preloads: P },\n): Promise<SelectedWithPreloads<S, Sel, P> | null> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst row = await context.use.deleteOne(state.where)\n\treturn context.shapeOneRow(state.select, state.preloads, row)\n}\n\nexport async function runAllDelete<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { where: FilterGroup; select: readonly Sel[] | undefined; preloads: P },\n): Promise<SelectedWithPreloads<S, Sel, P>[]> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst rows = await context.use.deleteMany(state.where)\n\treturn context.shapeRows(state.select, state.preloads, rows)\n}\n\nexport async function runAggregate<S extends AnySchema>(\n\tcontext: SchemaContext<S>,\n\tspec: AggregateSpec,\n): Promise<Array<Record<string, unknown>>> {\n\tassertNormalisedAggregate(context.schema, context.use, spec)\n\treturn context.use.aggregate(spec)\n}\n","import { EquippedError } from '../../../errors'\nimport type { OrmUse } from '../../adapters/base'\nimport { FilterGroup } from '../../filter'\nimport type { AnyPreloadDef, AnyRelDef, NestedPreloadDef } from '../../relations'\nimport { ManyRelation, OneRelation } from '../../relations'\nimport type { AnySchema } from '../../schema'\n\nconst MAX_PRELOAD_DEPTH = 5\n\ntype ResolvedPreloadDef = {\n\tdef: AnyRelDef\n\tpreloads: ResolvedPreloadDef[]\n}\n\nfunction isNestedPreloadDef(def: AnyPreloadDef): def is NestedPreloadDef {\n\treturn typeof def === 'object' && def != null && 'def' in def\n}\n\nfunction relationStep(def: AnyRelDef) {\n\treturn `${def.source.name}.${def.name}->${def.target.name}`\n}\n\nfunction uniqueDefinedValues(entities: readonly Record<string, unknown>[], key: string) {\n\treturn [...new Set(entities.map((entity) => entity[key]).filter((value) => value != null))]\n}\n\nfunction attachOneRelation(\n\tentities: readonly Record<string, unknown>[],\n\tname: string,\n\tlookupKey: string,\n\tlookup: ReadonlyMap<unknown, Record<string, unknown>>,\n) {\n\treturn entities.map((entity) => ({ ...entity, [name]: lookup.get(entity[lookupKey]) ?? null }))\n}\n\nfunction attachManyRelation(\n\tentities: readonly Record<string, unknown>[],\n\tname: string,\n\tlookupKey: string,\n\tlookup: ReadonlyMap<unknown, Record<string, unknown>[]>,\n) {\n\treturn entities.map((entity) => ({ ...entity, [name]: lookup.get(entity[lookupKey]) ?? [] }))\n}\n\nfunction normalizePreloads(defs: readonly AnyPreloadDef[]): ResolvedPreloadDef[] {\n\treturn defs.map((def) => {\n\t\tif (def instanceof ManyRelation || def instanceof OneRelation) {\n\t\t\treturn { def, preloads: [] }\n\t\t}\n\n\t\tif (!isNestedPreloadDef(def) || !(def.def instanceof ManyRelation || def.def instanceof OneRelation)) {\n\t\t\tthrow new Error('Invalid preload definition: nested preloads must include a relation definition in `def`')\n\t\t}\n\n\t\treturn {\n\t\t\tdef: def.def,\n\t\t\tpreloads: normalizePreloads(def.preloads ?? []),\n\t\t}\n\t})\n}\n\nexport async function resolvePreloads<T extends Record<string, unknown>>(\n\tentities: T[],\n\tdefs: readonly AnyPreloadDef[],\n\tgetUse: (s: AnySchema) => OrmUse,\n) {\n\treturn resolvePreloadNodes(entities, normalizePreloads(defs), getUse, 1, []) as unknown as T[]\n}\n\nasync function resolvePreloadNodes(\n\tentities: Record<string, unknown>[],\n\tdefs: readonly ResolvedPreloadDef[],\n\tgetUse: (s: AnySchema) => OrmUse,\n\tdepth: number,\n\tpath: readonly string[],\n) {\n\tfor (const def of defs) entities = await resolvePreload(entities, def, getUse, depth, path)\n\treturn entities\n}\n\nasync function resolvePreload(\n\tentities: Record<string, unknown>[],\n\tnode: ResolvedPreloadDef,\n\tgetUse: (s: AnySchema) => OrmUse,\n\tdepth: number,\n\tpath: readonly string[],\n): Promise<Record<string, unknown>[]> {\n\tif (depth > MAX_PRELOAD_DEPTH) {\n\t\tthrow new EquippedError(`Preload depth exceeded max depth ${MAX_PRELOAD_DEPTH}`, {\n\t\t\toperation: 'resolvePreload',\n\t\t\tdepth,\n\t\t\tmaxDepth: MAX_PRELOAD_DEPTH,\n\t\t})\n\t}\n\n\tconst { def } = node\n\tconst { target, name } = def\n\tconst step = relationStep(def)\n\tif (path.includes(step)) {\n\t\tthrow new EquippedError(`Preload cycle detected: ${[...path, step].join(' -> ')}`, {\n\t\t\toperation: 'resolvePreload',\n\t\t\tpath,\n\t\t\tstep,\n\t\t})\n\t}\n\tconst nextPath = [...path, step]\n\n\tif (def instanceof OneRelation) {\n\t\tif (def.fkOwner === 'source') {\n\t\t\tconst refCol = def.references.name\n\t\t\tconst fkValues = uniqueDefinedValues(entities, def.foreignKey.name)\n\t\t\tif (fkValues.length === 0) return entities.map((e) => ({ ...e, [name]: null }))\n\n\t\t\tlet related = await getUse(target).findMany(FilterGroup.create().in(refCol, fkValues))\n\t\t\tif (node.preloads.length > 0 && related.length > 0) {\n\t\t\t\trelated = await resolvePreloadNodes(related, node.preloads, getUse, depth + 1, nextPath)\n\t\t\t}\n\t\t\tconst lookup = new Map(related.map((r) => [r[refCol], r]))\n\t\t\treturn attachOneRelation(entities, name, def.foreignKey.name, lookup)\n\t\t}\n\n\t\tconst refCol = def.references.name\n\t\tconst refValues = uniqueDefinedValues(entities, refCol)\n\t\tif (refValues.length === 0) return entities.map((e) => ({ ...e, [name]: null }))\n\n\t\tlet related = await getUse(target).findMany(FilterGroup.create().in(def.foreignKey, refValues))\n\t\tif (node.preloads.length > 0 && related.length > 0) {\n\t\t\trelated = await resolvePreloadNodes(related, node.preloads, getUse, depth + 1, nextPath)\n\t\t}\n\t\tconst lookup = new Map(related.map((r) => [r[def.foreignKey.name], r]))\n\t\treturn attachOneRelation(entities, name, refCol, lookup)\n\t}\n\n\tif (def instanceof ManyRelation) {\n\t\tconst refCol = def.references.name\n\t\tconst refValues = uniqueDefinedValues(entities, refCol)\n\t\tif (refValues.length === 0) return entities.map((e) => ({ ...e, [name]: [] }))\n\n\t\tlet related = await getUse(target).findMany(FilterGroup.create().in(def.foreignKey, refValues))\n\t\tif (node.preloads.length > 0 && related.length > 0) {\n\t\t\trelated = await resolvePreloadNodes(related, node.preloads, getUse, depth + 1, nextPath)\n\t\t}\n\n\t\tconst grouped = new Map<unknown, Record<string, unknown>[]>()\n\t\tfor (const r of related) {\n\t\t\tconst fk = r[def.foreignKey.name]\n\t\t\tif (!grouped.has(fk)) grouped.set(fk, [])\n\t\t\tgrouped.get(fk)!.push(r)\n\t\t}\n\t\treturn attachManyRelation(entities, name, refCol, grouped)\n\t}\n\n\tthrow new Error(`Unknown relation kind: ${String(Reflect.get(def as object, 'kind'))}; expected OneRelation or ManyRelation`)\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../../adapters/in-memory')\n\tconst { OrmValidationError } = await import('../../errors')\n\tconst { Relations } = await import('../../relations')\n\tconst { Repo } = await import('../repo')\n\tconst { Schema } = await import('../../schema')\n\n\tdescribe('repo preload resolution', () => {\n\t\tlet userCounter = 0\n\t\tlet postCounter = 0\n\t\tlet profileCounter = 0\n\t\tlet orgCounter = 0\n\t\tlet aCounter = 0\n\t\tlet bCounter = 0\n\t\tlet cCounter = 0\n\t\tlet dCounter = 0\n\t\tlet eCounter = 0\n\t\tlet fCounter = 0\n\t\tlet gCounter = 0\n\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => `u${++userCounter}`)\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.field('orgId', v.optional(v.string()), { onCreate: () => undefined })\n\t\t\t.build()\n\n\t\tconst PostSchema = Schema.from('posts')\n\t\t\t.pk('id', v.string(), () => `p${++postCounter}`)\n\t\t\t.field('title', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst ProfileSchema = Schema.from('profiles')\n\t\t\t.pk('id', v.string(), () => `pr${++profileCounter}`)\n\t\t\t.field('bio', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst OrgSchema = Schema.from('orgs')\n\t\t\t.pk('id', v.string(), () => `o${++orgCounter}`)\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tconst ASchema = Schema.from('as')\n\t\t\t.pk('id', v.string(), () => `a${++aCounter}`)\n\t\t\t.build()\n\t\tconst BSchema = Schema.from('bs')\n\t\t\t.pk('id', v.string(), () => `b${++bCounter}`)\n\t\t\t.field('aId', v.string())\n\t\t\t.build()\n\t\tconst CSchema = Schema.from('cs')\n\t\t\t.pk('id', v.string(), () => `c${++cCounter}`)\n\t\t\t.field('bId', v.string())\n\t\t\t.build()\n\t\tconst DSchema = Schema.from('ds')\n\t\t\t.pk('id', v.string(), () => `d${++dCounter}`)\n\t\t\t.field('cId', v.string())\n\t\t\t.build()\n\t\tconst ESchema = Schema.from('es')\n\t\t\t.pk('id', v.string(), () => `e${++eCounter}`)\n\t\t\t.field('dId', v.string())\n\t\t\t.build()\n\t\tconst FSchema = Schema.from('fs')\n\t\t\t.pk('id', v.string(), () => `f${++fCounter}`)\n\t\t\t.field('eId', v.string())\n\t\t\t.build()\n\t\tconst GSchema = Schema.from('gs')\n\t\t\t.pk('id', v.string(), () => `g${++gCounter}`)\n\t\t\t.field('fId', v.string())\n\t\t\t.build()\n\n\t\tconst UserRels = Relations.from(UserSchema)\n\t\t\t.hasMany('posts', PostSchema.fields.userId)\n\t\t\t.hasOne('profile', ProfileSchema.fields.userId)\n\t\t\t.belongsTo('org', UserSchema.fields.orgId, OrgSchema)\n\t\t\t.build()\n\n\t\tconst PostRels = Relations.from(PostSchema)\n\t\t\t.belongsTo('author', PostSchema.fields.userId, UserSchema)\n\t\t\t.build()\n\n\t\tconst ARels = Relations.from(ASchema).hasMany('bs', BSchema.fields.aId).build()\n\t\tconst BRels = Relations.from(BSchema).hasMany('cs', CSchema.fields.bId).build()\n\t\tconst CRels = Relations.from(CSchema).hasMany('ds', DSchema.fields.cId).build()\n\t\tconst DRels = Relations.from(DSchema).hasMany('es', ESchema.fields.dId).build()\n\t\tconst ERels = Relations.from(ESchema).hasMany('fs', FSchema.fields.eId).build()\n\t\tconst FRels = Relations.from(FSchema).hasMany('gs', GSchema.fields.fId).build()\n\n\t\tfunction makeRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\treturn Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t}\n\n\t\tasync function expectPreloadQueryShapeError(read: Promise<unknown>, cause: RegExp) {\n\t\t\ttry {\n\t\t\t\tawait read\n\t\t\t\texpect.unreachable('preload query-shape validation should have failed')\n\t\t\t} catch (error) {\n\t\t\t\texpect(error).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = error as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.kind).toBe('query-shape')\n\t\t\t\texpect(err.failures.some((failure) => cause.test(String(failure.cause)))).toBe(true)\n\t\t\t}\n\t\t}\n\n\t\ttest('hasMany preload resolves related entities', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tconst user = await Repo.on(UserSchema).one().create({ email: 'u@test.com', name: 'User' })\n\t\t\tawait Repo.on(PostSchema).one().create({ title: 'Post 1', userId: user.id })\n\t\t\tawait Repo.on(PostSchema).one().create({ title: 'Post 2', userId: user.id })\n\n\t\t\tconst users = await Repo.on(UserSchema).all().preload([UserRels.posts]).find()\n\t\t\texpect(users[0].posts).toHaveLength(2)\n\t\t})\n\n\t\ttest('hasOne and belongsTo preloads resolve null and non-null branches', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tconst user = await Repo.on(UserSchema).one().create({ email: 'x@test.com', name: 'X' })\n\t\t\tawait Repo.on(ProfileSchema).one().create({ bio: 'Hello', userId: user.id })\n\n\t\t\tconst users = await Repo.on(UserSchema).all().preload([UserRels.profile]).find()\n\t\t\texpect(users[0].profile?.bio).toBe('Hello')\n\n\t\t\tconst usersWithoutOrg = await Repo.on(UserSchema).all().preload([UserRels.org]).find()\n\t\t\texpect(usersWithoutOrg[0].org).toBeNull()\n\t\t})\n\n\t\ttest('nested preload resolves recursively', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tconst user = await Repo.on(UserSchema).one().create({ email: 'nested@test.com', name: 'Nested User' })\n\t\t\tawait Repo.on(ProfileSchema).one().create({ bio: 'Hello nested', userId: user.id })\n\t\t\tawait Repo.on(PostSchema).one().create({ title: 'Nested Post', userId: user.id })\n\n\t\t\tconst users = await Repo.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.preload([\n\t\t\t\t\t{\n\t\t\t\t\t\tdef: UserRels.posts,\n\t\t\t\t\t\tpreloads: [{ def: PostRels.author, preloads: [UserRels.profile] }],\n\t\t\t\t\t},\n\t\t\t\t])\n\t\t\t\t.find()\n\n\t\t\tconst author = users[0].posts[0].author\n\t\t\tconst profile = author?.profile\n\t\t\texpect(author?.id).toBe(user.id)\n\t\t\texpect(profile?.bio).toBe('Hello nested')\n\t\t})\n\n\t\ttest('cycle detection throws descriptive error', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tconst user = await Repo.on(UserSchema).one().create({ email: 'cycle@test.com', name: 'Cycle User' })\n\t\t\tawait Repo.on(PostSchema).one().create({ title: 'Cycle Post', userId: user.id })\n\n\t\t\tawait expectPreloadQueryShapeError(\n\t\t\t\tRepo.on(UserSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.preload([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdef: UserRels.posts,\n\t\t\t\t\t\t\tpreloads: [{ def: PostRels.author, preloads: [UserRels.posts] }],\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t\t.find(),\n\t\t\t\t/Preload cycle detected/,\n\t\t\t)\n\t\t})\n\n\t\ttest('depth limit throws when chain exceeds max depth', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tconst a = await Repo.on(ASchema).one().create({})\n\t\t\tconst b = await Repo.on(BSchema).one().create({ aId: a.id })\n\t\t\tconst c = await Repo.on(CSchema).one().create({ bId: b.id })\n\t\t\tconst d = await Repo.on(DSchema).one().create({ cId: c.id })\n\t\t\tconst e = await Repo.on(ESchema).one().create({ dId: d.id })\n\t\t\tconst f = await Repo.on(FSchema).one().create({ eId: e.id })\n\t\t\tawait Repo.on(GSchema).one().create({ fId: f.id })\n\n\t\t\tawait expectPreloadQueryShapeError(\n\t\t\t\tRepo.on(ASchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.preload([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdef: ARels.bs,\n\t\t\t\t\t\t\tpreloads: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tdef: BRels.cs,\n\t\t\t\t\t\t\t\t\tpreloads: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tdef: CRels.ds,\n\t\t\t\t\t\t\t\t\t\t\tpreloads: [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tdef: DRels.es,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpreloads: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdef: ERels.fs,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpreloads: [FRels.gs],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\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\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t\t.find(),\n\t\t\t\t/Preload depth exceeded/,\n\t\t\t)\n\t\t})\n\n\t\ttest('invalid nested preload definition throws a validation error', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tawait Repo.on(UserSchema).one().create({ email: 'u@test.com', name: 'User' })\n\n\t\t\tawait expectPreloadQueryShapeError(\n\t\t\t\tRepo.on(UserSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.preload([{ def: {} as any }])\n\t\t\t\t\t.find(),\n\t\t\t\t/Invalid preload definition/,\n\t\t\t)\n\t\t})\n\n\t\ttest('findOne with preloads resolves relations', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tconst user = await Repo.on(UserSchema).one().create({ email: 'u@test.com', name: 'User' })\n\t\t\tawait Repo.on(PostSchema).one().create({ title: 'Post', userId: user.id })\n\n\t\t\tconst found = await Repo.on(UserSchema).one().id(user.id).preload([UserRels.posts]).find()\n\t\t\texpect(found?.posts).toHaveLength(1)\n\t\t})\n\n\t\ttest('N+1 avoidance: N parents + children loaded in 2 queries, not N+1', async () => {\n\t\t\tconst { vi } = await import('vitest')\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tlet queryCount = 0\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((schema: any, config: any) => {\n\t\t\t\tconst use = origUse(schema, config)\n\t\t\t\treturn {\n\t\t\t\t\t...use,\n\t\t\t\t\tfindMany: async (...args: any[]) => {\n\t\t\t\t\t\tqueryCount++\n\t\t\t\t\t\treturn use.findMany(...(args as [any, any]))\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst repo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t\tconst u1 = await repo.on(UserSchema).one().create({ email: 'a@test.com', name: 'A' })\n\t\t\tconst u2 = await repo.on(UserSchema).one().create({ email: 'b@test.com', name: 'B' })\n\t\t\tconst u3 = await repo.on(UserSchema).one().create({ email: 'c@test.com', name: 'C' })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'P1', userId: u1.id })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'P2', userId: u1.id })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'P3', userId: u2.id })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'P4', userId: u3.id })\n\n\t\t\tqueryCount = 0\n\t\t\tconst users = await repo.on(UserSchema).all().preload([UserRels.posts]).find()\n\n\t\t\texpect(users).toHaveLength(3)\n\t\t\texpect(users.find((u) => u.id === u1.id)!.posts).toHaveLength(2)\n\t\t\texpect(users.find((u) => u.id === u2.id)!.posts).toHaveLength(1)\n\t\t\texpect(users.find((u) => u.id === u3.id)!.posts).toHaveLength(1)\n\t\t\texpect(queryCount).toBe(2)\n\t\t})\n\t})\n}\n","import type { InferRawArgs, InferRawReturn } from '../adapter'\nimport type { OrmUse } from '../adapters/base'\nimport { OrmNotFoundError, type OrmNotFoundOperation } from '../errors'\nimport { toFieldName, type AnyField, type Field } from '../fields'\nimport { FilterGroup, type FilterFactory } from '../filter'\nimport type { AggregateSpec } from '../orm-adapter'\nimport { OrderBy, type IterationOptions } from '../query-options'\nimport type { AnyPreloadDef } from '../relations'\nimport type { AnySchema, SchemaOutput } from '../schema'\nimport type { SchemaCreateInput, SchemaUpdateInput } from '../schema-validations'\nimport { applyComputedSelection, planSelection } from './internals/computeds'\nimport {\n\trunAggregate,\n\trunAllCount,\n\trunAllCreate,\n\trunAllDelete,\n\trunAllIterate,\n\trunAllPaginate,\n\trunAllRead,\n\trunAllUpdate,\n\trunOneCreate,\n\trunOneDelete,\n\trunOneRead,\n\trunOneUpdate,\n\trunOneUpsert,\n} from './internals/executors'\nimport { resolvePreloads } from './internals/preloads'\nimport type { ReadLimitSource, ReadOffsetSource } from './internals/query-shape'\nimport type { Paginated, SelectedWithPreloads } from './internals/types'\n\nexport type { Paginated }\n\ntype MaybeNull<T, Req extends boolean> = Req extends true ? T : T | null\ntype SchemaPrimaryKeyValue<S extends AnySchema> = SchemaOutput<S>[S['pkField']['name'] & keyof SchemaOutput<S>]\nexport type UpsertInput<S extends AnySchema> = { create: SchemaCreateInput<S> } | { create: SchemaCreateInput<S>; update: SchemaUpdateInput<S> }\ntype ReadState<Sel extends string, P extends readonly AnyPreloadDef[] = readonly AnyPreloadDef[]> = {\n\twhere?: FilterGroup\n\tselect?: readonly Sel[]\n\tpreloads?: P\n}\n\nexport type HasMethod<A, Method extends string> =\n\tMethod extends keyof A\n\t\t? A[Method] extends (...args: any) => any\n\t\t\t? true\n\t\t\t: false\n\t\t: false\n\nexport type OneBuilderSurface<S extends AnySchema, A = unknown, Sel extends string = never, P extends readonly AnyPreloadDef[] = [], Req extends boolean = false> =\n\tOneBuilder<S, A, Sel, P, Req> &\n\t(HasMethod<A, 'updateMany'> extends true ? {} : { update: never }) &\n\t(HasMethod<A, 'deleteMany'> extends true ? {} : { delete: never }) &\n\t(HasMethod<A, 'upsertOne'> extends true ? {} : { upsert: never })\n\nexport type AllBuilderSurface<S extends AnySchema, A = unknown, Sel extends string = never, P extends readonly AnyPreloadDef[] = []> =\n\tAllBuilder<S, A, Sel, P> &\n\t(HasMethod<A, 'iterateMany'> extends true ? {} : { iterate: never }) &\n\t(HasMethod<A, 'updateMany'> extends true ? {} : { update: never }) &\n\t(HasMethod<A, 'deleteMany'> extends true ? {} : { delete: never }) &\n\t(HasMethod<A, 'count'> extends true ? {} : { count: never }) &\n\t([HasMethod<A, 'findMany'>, HasMethod<A, 'count'>] extends [true, true] ? {} : { paginate: never })\n\ntype HasNonEmptyAggregateOps<A> = A extends { aggregateOps: readonly [any, ...any[]] } ? true : false\n\nexport type SchemaRefSurface<S extends AnySchema, A = unknown> =\n\tOmit<SchemaRef<S, A>, 'raw' | 'aggregate'> &\n\t(HasMethod<A, 'raw'> extends true\n\t\t? { raw: <T = InferRawReturn<A>>(...args: InferRawArgs<A>) => Promise<T> }\n\t\t: { raw: never }) &\n\t([HasMethod<A, 'aggregate'>, HasNonEmptyAggregateOps<A>] extends [true, true]\n\t\t? { aggregate: SchemaRef<S, A>['aggregate'] }\n\t\t: { aggregate: never })\n\ntype ReadBuilderFor<TBuilder, S extends AnySchema, A, Sel extends string, P extends readonly AnyPreloadDef[]> = TBuilder extends {\n\t_builderKind: 'one'\n\t_req: infer Req extends boolean\n}\n\t? OneBuilderSurface<S, A, Sel, P, Req>\n\t: TBuilder extends { _builderKind: 'all' }\n\t\t? AllBuilderSurface<S, A, Sel, P>\n\t\t: never\n\nexport class SchemaContext<S extends AnySchema> {\n\tconstructor(\n\t\treadonly schema: S,\n\t\tprivate readonly getUse: (target: AnySchema) => OrmUse,\n\t) {}\n\n\tasync shapeRows<Sel extends string, P extends readonly AnyPreloadDef[]>(\n\t\tselect: readonly Sel[] | undefined,\n\t\tpreloads: P,\n\t\trows: Record<string, unknown>[],\n\t): Promise<SelectedWithPreloads<S, Sel, P>[]> {\n\t\tconst plan = planSelection(this.schema, select)\n\t\tconst selected = applyComputedSelection(this.schema, rows, plan)\n\t\tif (preloads.length === 0) return selected as SelectedWithPreloads<S, Sel, P>[]\n\t\treturn (await resolvePreloads(selected, preloads, this.getUse)) as SelectedWithPreloads<S, Sel, P>[]\n\t}\n\n\tasync shapeOneRow<Sel extends string, P extends readonly AnyPreloadDef[]>(\n\t\tselect: readonly Sel[] | undefined,\n\t\tpreloads: P,\n\t\trow: Record<string, unknown> | null,\n\t): Promise<SelectedWithPreloads<S, Sel, P> | null> {\n\t\tif (!row) return null\n\t\tconst [resolved] = await this.shapeRows(select, preloads, [row])\n\t\treturn resolved ?? null\n\t}\n\n\tget use() {\n\t\treturn this.getUse(this.schema)\n\t}\n}\n\nabstract class ReadSelectState<S extends AnySchema, A = unknown, Sel extends string = never, P extends readonly AnyPreloadDef[] = []> {\n\tprotected readonly _context: SchemaContext<S>\n\tprotected _where: FilterGroup\n\tprotected _select: readonly Sel[] | undefined\n\tprotected _preloads: P\n\n\tconstructor(context: SchemaContext<S>, state?: ReadState<Sel, P>) {\n\t\tthis._context = context\n\t\tthis._where = state?.where ? state.where.clone() : FilterGroup.create()\n\t\tthis._select = state?.select\n\t\tthis._preloads = state?.preloads ?? ([] as unknown as P)\n\t}\n\n\twhere(factory: FilterFactory): this {\n\t\tconst nextGroup = factory(this._where.clone())\n\t\treturn this._clone<Sel, P>({\n\t\t\twhere: nextGroup,\n\t\t\tselect: this._select as readonly Sel[] | undefined,\n\t\t\tpreloads: this._preloads,\n\t\t}) as unknown as this\n\t}\n\n\tselect<NewSel extends keyof SchemaOutput<S> & string>(fields: readonly NewSel[]): ReadBuilderFor<this, S, A, NewSel, P> {\n\t\treturn this._clone<NewSel, P>({ select: fields })\n\t}\n\n\tpreload<NewP extends readonly AnyPreloadDef[]>(defs: NewP): ReadBuilderFor<this, S, A, Sel, NewP> {\n\t\treturn this._clone<Sel, NewP>({ preloads: defs })\n\t}\n\n\tprotected _readState<NewSel extends string = Sel, NewP extends readonly AnyPreloadDef[] = P>(\n\t\tnext: ReadState<NewSel, NewP> = {} as ReadState<NewSel, NewP>,\n\t): ReadState<NewSel, NewP> {\n\t\treturn {\n\t\t\twhere: next.where ?? this._where.clone(),\n\t\t\tselect: next.select ?? (this._select as unknown as NewSel[]),\n\t\t\tpreloads: next.preloads ?? ([...this._preloads] as unknown as NewP),\n\t\t}\n\t}\n\n\tprotected abstract _clone<NewSel extends string, NewP extends readonly AnyPreloadDef[]>(\n\t\t_next: ReadState<NewSel, NewP>,\n\t): ReadBuilderFor<this, S, A, NewSel, NewP>\n}\n\nexport class SchemaRef<S extends AnySchema, A = unknown> {\n\treadonly #context: SchemaContext<S>\n\n\tconstructor(context: SchemaContext<S>) {\n\t\tthis.#context = context\n\t}\n\n\tone(): OneBuilderSurface<S, A, never, []> {\n\t\treturn new OneBuilder<S, A, never, []>(this.#context) as OneBuilderSurface<S, A, never, []>\n\t}\n\n\tall(): AllBuilderSurface<S, A, never, []> {\n\t\treturn new AllBuilder<S, A, never, []>(this.#context) as AllBuilderSurface<S, A, never, []>\n\t}\n\n\taggregate(): AggregateBuilder<S, A, {}, {}, false, false, false> {\n\t\treturn new AggregateBuilder<S, A, {}, {}, false, false, false>(this.#context)\n\t}\n\n\traw(...args: any[]) {\n\t\treturn this.#context.use.raw(...args)\n\t}\n}\n\nexport class OneBuilder<S extends AnySchema, A = unknown, Sel extends string = never, P extends readonly AnyPreloadDef[] = [], Req extends boolean = false> extends ReadSelectState<S, A, Sel, P> {\n\tdeclare readonly _builderKind: 'one'\n\tdeclare readonly _req: Req\n\n\tprotected _required: boolean\n\tprotected _requiredMessage: string | undefined\n\n\tconstructor(context: SchemaContext<S>, state?: ReadState<Sel, P>, reqState?: { required: boolean; message?: string }) {\n\t\tsuper(context, state)\n\t\tthis._required = reqState?.required ?? false\n\t\tthis._requiredMessage = reqState?.message\n\t}\n\n\tid(value: SchemaPrimaryKeyValue<S>): this {\n\t\tconst nextGroup = this._where.clone().eq(this._context.schema.pkField, value)\n\t\treturn this._clone<Sel, P>({\n\t\t\twhere: nextGroup,\n\t\t\tselect: this._select as readonly Sel[] | undefined,\n\t\t\tpreloads: this._preloads,\n\t\t}) as this\n\t}\n\n\trequired(this: OneBuilder<S, A, Sel, P, false>, message?: string): OneBuilderSurface<S, A, Sel, P, true> {\n\t\treturn new OneBuilder<S, A, Sel, P, true>(this._context, this._readState(), { required: true, message }) as OneBuilderSurface<S, A, Sel, P, true>\n\t}\n\n\tprivate _assertFound(result: unknown, operation: OrmNotFoundOperation): void {\n\t\tif (this._required && result === null) {\n\t\t\tthrow new OrmNotFoundError({ schema: this._context.schema.name, operation, where: this._where, message: this._requiredMessage })\n\t\t}\n\t}\n\n\tprotected _clone<NewSel extends string, NewP extends readonly AnyPreloadDef[]>(next: ReadState<NewSel, NewP>) {\n\t\treturn new OneBuilder<S, A, NewSel, NewP, Req>(this._context, this._readState(next), { required: this._required, message: this._requiredMessage }) as any\n\t}\n\n\tcreate(data: SchemaCreateInput<S>) {\n\t\treturn runOneCreate(\n\t\t\tthis._context,\n\t\t\t{\n\t\t\t\tselect: this._select,\n\t\t\t\tpreloads: this._preloads,\n\t\t\t},\n\t\t\tdata,\n\t\t)\n\t}\n\n\tasync update(data: SchemaUpdateInput<S>): Promise<MaybeNull<SelectedWithPreloads<S, Sel, P>, Req>> {\n\t\tconst result = await runOneUpdate(\n\t\t\tthis._context,\n\t\t\t{\n\t\t\t\twhere: this._where,\n\t\t\t\tselect: this._select,\n\t\t\t\tpreloads: this._preloads,\n\t\t\t},\n\t\t\tdata,\n\t\t)\n\t\tthis._assertFound(result, 'updateOne')\n\t\treturn result as any\n\t}\n\n\tupsert(data: UpsertInput<S>) {\n\t\treturn runOneUpsert(\n\t\t\tthis._context,\n\t\t\t{\n\t\t\t\twhere: this._where,\n\t\t\t\tselect: this._select,\n\t\t\t\tpreloads: this._preloads,\n\t\t\t},\n\t\t\tdata,\n\t\t)\n\t}\n\n\tasync delete(): Promise<MaybeNull<SelectedWithPreloads<S, Sel, P>, Req>> {\n\t\tconst result = await runOneDelete(this._context, {\n\t\t\twhere: this._where,\n\t\t\tselect: this._select,\n\t\t\tpreloads: this._preloads,\n\t\t})\n\t\tthis._assertFound(result, 'deleteOne')\n\t\treturn result as any\n\t}\n\n\tasync find(): Promise<MaybeNull<SelectedWithPreloads<S, Sel, P>, Req>> {\n\t\tconst result = await runOneRead(this._context, {\n\t\t\twhere: this._where,\n\t\t\tselect: this._select,\n\t\t\tpreloads: this._preloads,\n\t\t})\n\t\tthis._assertFound(result, 'findOne')\n\t\treturn result as any\n\t}\n}\n\nexport class AllBuilder<S extends AnySchema, A = unknown, Sel extends string = never, P extends readonly AnyPreloadDef[] = []> extends ReadSelectState<S, A, Sel, P> {\n\tdeclare readonly _builderKind: 'all'\n\n\t#orderBy: OrderBy[]\n\t#limitSource: ReadLimitSource | undefined\n\t#offsetSource: ReadOffsetSource | undefined\n\n\tconstructor(\n\t\tcontext: SchemaContext<S>,\n\t\tstate?: ReadState<Sel, P>,\n\t\tqueryState?: { orderBy?: OrderBy[]; limitSource?: ReadLimitSource; offsetSource?: ReadOffsetSource },\n\t) {\n\t\tsuper(context, state)\n\t\tthis.#orderBy = queryState?.orderBy ?? []\n\t\tthis.#limitSource = queryState?.limitSource\n\t\tthis.#offsetSource = queryState?.offsetSource\n\t}\n\n\t#withQuery(queryOverride: Partial<{ orderBy: OrderBy[]; limitSource: ReadLimitSource; offsetSource: ReadOffsetSource }>) {\n\t\tconst has = (key: keyof typeof queryOverride) => Object.prototype.hasOwnProperty.call(queryOverride, key)\n\t\treturn new AllBuilder<S, A, Sel, P>(\n\t\t\tthis._context,\n\t\t\tthis._readState(),\n\t\t\t{\n\t\t\t\torderBy: has('orderBy') ? queryOverride.orderBy : [...this.#orderBy],\n\t\t\t\tlimitSource: has('limitSource') ? queryOverride.limitSource : this.#limitSource,\n\t\t\t\toffsetSource: has('offsetSource') ? queryOverride.offsetSource : this.#offsetSource,\n\t\t\t},\n\t\t) as this\n\t}\n\n\tprotected _clone<NewSel extends string, NewP extends readonly AnyPreloadDef[]>(next: ReadState<NewSel, NewP>) {\n\t\treturn new AllBuilder<S, A, NewSel, NewP>(\n\t\t\tthis._context,\n\t\t\tthis._readState({\n\t\t\t\twhere: next.where,\n\t\t\t\tselect: next.select,\n\t\t\t\tpreloads: next.preloads,\n\t\t\t}),\n\t\t\t{ orderBy: [...this.#orderBy], limitSource: this.#limitSource, offsetSource: this.#offsetSource },\n\t\t) as any\n\t}\n\n\torderBy(field: string | AnyField, direction: 'asc' | 'desc' = 'asc') {\n\t\treturn this.#withQuery({ orderBy: [...this.#orderBy, new OrderBy(field, direction)] })\n\t}\n\n\tlimit(limit: number) {\n\t\treturn this.#withQuery({ limitSource: { value: limit } })\n\t}\n\n\toffset(offset: number) {\n\t\treturn this.#withQuery({ offsetSource: { kind: 'offset', value: offset } })\n\t}\n\n\tpage(page: number) {\n\t\treturn this.#withQuery({ offsetSource: { kind: 'page', value: page } })\n\t}\n\n\tcreate(data: SchemaCreateInput<S>[]) {\n\t\treturn runAllCreate(\n\t\t\tthis._context,\n\t\t\t{\n\t\t\t\tselect: this._select,\n\t\t\t\tpreloads: this._preloads,\n\t\t\t},\n\t\t\tdata,\n\t\t)\n\t}\n\n\tupdate(data: SchemaUpdateInput<S>) {\n\t\treturn runAllUpdate(\n\t\t\tthis._context,\n\t\t\t{\n\t\t\t\twhere: this._where,\n\t\t\t\tselect: this._select,\n\t\t\t\tpreloads: this._preloads,\n\t\t\t},\n\t\t\tdata,\n\t\t)\n\t}\n\n\tdelete() {\n\t\treturn runAllDelete(this._context, {\n\t\t\twhere: this._where,\n\t\t\tselect: this._select,\n\t\t\tpreloads: this._preloads,\n\t\t})\n\t}\n\n\tfind() {\n\t\treturn runAllRead(this._context, {\n\t\t\twhere: this._where,\n\t\t\tselect: this._select,\n\t\t\tpreloads: this._preloads,\n\t\t\torderBy: this.#orderBy,\n\t\t\tlimitSource: this.#limitSource,\n\t\t\toffsetSource: this.#offsetSource,\n\t\t})\n\t}\n\n\tcount() {\n\t\treturn runAllCount(this._context, { where: this._where })\n\t}\n\n\tpaginate(): Promise<Paginated<SelectedWithPreloads<S, Sel, P>>> {\n\t\treturn runAllPaginate(this._context, {\n\t\t\twhere: this._where,\n\t\t\tselect: this._select,\n\t\t\tpreloads: this._preloads,\n\t\t\torderBy: this.#orderBy,\n\t\t\tlimitSource: this.#limitSource,\n\t\t\toffsetSource: this.#offsetSource,\n\t\t})\n\t}\n\n\titerate(options?: IterationOptions) {\n\t\treturn runAllIterate(this._context, {\n\t\t\twhere: this._where,\n\t\t\tselect: this._select,\n\t\t\tpreloads: this._preloads,\n\t\t\torderBy: this.#orderBy,\n\t\t\tlimitSource: this.#limitSource,\n\t\t\toffsetSource: this.#offsetSource,\n\t\t}, options)\n\t}\n}\n\ntype AggregateEntry = AggregateSpec['aggregates'][number]\n\ntype FieldsToGroupKeys<F extends readonly AnyField[]> = {\n\t[E in F[number] as E extends Field<any, infer N> ? N : never]: E extends Field<infer V> ? V : never\n}\n\nexport class AggregateBuilder<\n\tS extends AnySchema,\n\tA = unknown,\n\tAggs = {},\n\tGroupKeys = {},\n\tHasGroupBy extends boolean = false,\n\tHasWhere extends boolean = false,\n\tHasHaving extends boolean = false,\n> {\n\treadonly #context: SchemaContext<S>\n\treadonly #where: FilterGroup\n\treadonly #having: FilterGroup\n\treadonly #aggregates: readonly AggregateEntry[]\n\treadonly #groupBy: readonly string[]\n\n\tconstructor(\n\t\tcontext: SchemaContext<S>,\n\t\tstate?: { where?: FilterGroup; having?: FilterGroup; aggregates?: readonly AggregateEntry[]; groupBy?: readonly string[] },\n\t) {\n\t\tthis.#context = context\n\t\tthis.#where = state?.where ? state.where.clone() : FilterGroup.create()\n\t\tthis.#having = state?.having ? state.having.clone() : FilterGroup.create()\n\t\tthis.#aggregates = state?.aggregates ?? []\n\t\tthis.#groupBy = state?.groupBy ?? []\n\t}\n\n\tget #state() {\n\t\treturn { where: this.#where, having: this.#having, aggregates: this.#aggregates, groupBy: this.#groupBy }\n\t}\n\n\twhere(\n\t\t...args: HasWhere extends true ? [never] : [factory: FilterFactory]\n\t): AggregateBuilder<S, A, Aggs, GroupKeys, HasGroupBy, true, HasHaving> {\n\t\tconst factory = args[0] as FilterFactory\n\t\treturn new AggregateBuilder<S, A, Aggs, GroupKeys, HasGroupBy, true, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\twhere: factory(this.#where.clone()),\n\t\t})\n\t}\n\n\thaving(\n\t\t...args: HasHaving extends true ? [never] : [factory: FilterFactory]\n\t): AggregateBuilder<S, A, Aggs, GroupKeys, HasGroupBy, HasWhere, true> {\n\t\tconst factory = args[0] as FilterFactory\n\t\treturn new AggregateBuilder<S, A, Aggs, GroupKeys, HasGroupBy, HasWhere, true>(this.#context, {\n\t\t\t...this.#state,\n\t\t\thaving: factory(this.#having.clone()),\n\t\t})\n\t}\n\n\tgroupBy<F extends readonly Field<string | number | boolean | Date>[]>(\n\t\t...fields: HasGroupBy extends true ? [never] : [...F]\n\t): AggregateBuilder<S, A, Aggs, GroupKeys & FieldsToGroupKeys<F>, true, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs, GroupKeys & FieldsToGroupKeys<F>, true, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\tgroupBy: (fields as readonly AnyField[]).map((f) => toFieldName(f)),\n\t\t})\n\t}\n\n\tcount<K extends string>(\n\t\t...[alias]: K extends keyof Aggs ? [never] : [alias: K]\n\t): AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\taggregates: [...this.#aggregates, { fn: 'count', alias: alias as string }],\n\t\t})\n\t}\n\n\tcountDistinct<K extends string>(\n\t\tfield: AnyField,\n\t\t...[alias]: K extends keyof Aggs ? [never] : [alias: K]\n\t): AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\taggregates: [...this.#aggregates, { fn: 'countDistinct', field: toFieldName(field), alias: alias as string }],\n\t\t})\n\t}\n\n\tsum<K extends string>(\n\t\tfield: Field<number>,\n\t\t...[alias]: K extends keyof Aggs ? [never] : [alias: K]\n\t): AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\taggregates: [...this.#aggregates, { fn: 'sum', field: toFieldName(field), alias: alias as string }],\n\t\t})\n\t}\n\n\tavg<K extends string>(\n\t\tfield: Field<number>,\n\t\t...[alias]: K extends keyof Aggs ? [never] : [alias: K]\n\t): AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\taggregates: [...this.#aggregates, { fn: 'avg', field: toFieldName(field), alias: alias as string }],\n\t\t})\n\t}\n\n\tmin<F extends Field<number | string | Date>, K extends string>(\n\t\tfield: F,\n\t\t...[alias]: K extends keyof Aggs ? [never] : [alias: K]\n\t): AggregateBuilder<S, A, Aggs & Record<K, F extends Field<infer V> ? V : never>, GroupKeys, HasGroupBy, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs & Record<K, F extends Field<infer V> ? V : never>, GroupKeys, HasGroupBy, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\taggregates: [...this.#aggregates, { fn: 'min', field: toFieldName(field), alias: alias as string }],\n\t\t})\n\t}\n\n\tmax<F extends Field<number | string | Date>, K extends string>(\n\t\tfield: F,\n\t\t...[alias]: K extends keyof Aggs ? [never] : [alias: K]\n\t): AggregateBuilder<S, A, Aggs & Record<K, F extends Field<infer V> ? V : never>, GroupKeys, HasGroupBy, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs & Record<K, F extends Field<infer V> ? V : never>, GroupKeys, HasGroupBy, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\taggregates: [...this.#aggregates, { fn: 'max', field: toFieldName(field), alias: alias as string }],\n\t\t})\n\t}\n\n\tasync run(\n\t\t..._: [keyof Aggs] extends [never] ? [never] : []\n\t): Promise<HasGroupBy extends true ? (Aggs & GroupKeys)[] : Aggs> {\n\t\tconst spec: AggregateSpec = {\n\t\t\taggregates: this.#aggregates,\n\t\t\tgroupBy: this.#groupBy,\n\t\t}\n\t\tif (this.#where.children.length > 0) {\n\t\t\tspec.where = this.#where\n\t\t}\n\t\tif (this.#having.children.length > 0) {\n\t\t\tspec.having = this.#having\n\t\t}\n\t\tconst rows = await runAggregate(this.#context, spec)\n\t\tif (this.#groupBy.length > 0) {\n\t\t\treturn rows as any\n\t\t}\n\t\treturn rows[0] as any\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf, beforeEach, vi } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { Instance } = await import('../../instance')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { OrmValidationError } = await import('../errors')\n\tconst { OrmAdapter } = await import('../orm-adapter')\n\tconst { Relations } = await import('../relations')\n\tconst { Repo } = await import('./repo')\n\tconst { Schema } = await import('../schema')\n\n\tdescribe('builders', () => {\n\t\tlet repo: any\n\t\tbeforeEach(() => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\trepo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t})\n\n\t\ttest('update() executes and returns updated row', async () => {\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => `u-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\n\t\t\tconst created = await repo.on(UserSchema).one().create({ email: 'up@test.com', name: 'Before' })\n\t\t\tconst updated = await repo.on(UserSchema).one().id(created.id).update({ name: 'After' })\n\t\t\texpect(updated?.name).toBe('After')\n\t\t\tconst found = await repo.on(UserSchema).one().id(created.id).find()\n\t\t\texpect(found?.name).toBe('After')\n\t\t})\n\n\t\ttest('find() returns rows', async () => {\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => `u-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@x.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'b@x.com', name: 'Bob' },\n\t\t\t\t])\n\n\t\t\tconst rows = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.or([(g) => g.eq('name', 'Alice'), (g) => g.eq('name', 'Bob')]))\n\t\t\t\t.find()\n\t\t\texpect(rows).toHaveLength(2)\n\t\t})\n\n\t\ttest('write branches do not leak filters', async () => {\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => `u-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'alice@x.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'bob@x.com', name: 'Bob' },\n\t\t\t\t])\n\n\t\t\tconst base = repo.on(UserSchema).all()\n\t\t\tawait base.where((q) => q.eq('name', 'Alice')).update({ name: 'A Updated' })\n\t\t\tawait base.where((q) => q.eq('name', 'Bob')).update({ name: 'B Updated' })\n\n\t\t\tconst all = await repo.on(UserSchema).all().orderBy('name', 'asc').find()\n\t\t\texpect(all.map((r) => r.name)).toEqual(['A Updated', 'B Updated'])\n\t\t})\n\t})\n\n\tdescribe('.required() modifier', () => {\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => `u-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tlet repo: any\n\t\tbeforeEach(() => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\trepo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t})\n\n\t\tdescribe('type narrowing', () => {\n\t\t\ttype IsExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : false) : false\n\t\t\ttype TestA = { findOne: (...a: any[]) => any; createOne: (...a: any[]) => any; createMany: (...a: any[]) => any; updateMany: (...a: any[]) => any; deleteMany: (...a: any[]) => any; upsertOne: (...a: any[]) => any; findMany: (...a: any[]) => any; deleteOne: (...a: any[]) => any; updateOne: (...a: any[]) => any }\n\t\t\ttype S = typeof UserSchema\n\t\t\ttype Result = import('./internals/types').SelectedWithPreloads<S, never, []>\n\t\t\ttype NameOnly = import('./internals/types').SelectedWithPreloads<S, 'name', []>\n\n\t\t\ttest('find() returns T | null without .required()', () => {\n\t\t\t\ttype R = ReturnType<OneBuilderSurface<S, TestA, never, [], false>['find']>\n\t\t\t\tconst _: IsExact<R, Promise<Result | null>> = true\n\t\t\t\tvoid _\n\t\t\t})\n\n\t\t\ttest('find() returns T with .required()', () => {\n\t\t\t\ttype R = ReturnType<OneBuilderSurface<S, TestA, never, [], true>['find']>\n\t\t\t\tconst _: IsExact<R, Promise<Result>> = true\n\t\t\t\tvoid _\n\t\t\t})\n\n\t\t\ttest('update() returns T with .required()', () => {\n\t\t\t\ttype R = ReturnType<OneBuilderSurface<S, TestA, never, [], true>['update']>\n\t\t\t\tconst _: IsExact<R, Promise<Result>> = true\n\t\t\t\tvoid _\n\t\t\t})\n\n\t\t\ttest('delete() returns T with .required()', () => {\n\t\t\t\ttype R = ReturnType<OneBuilderSurface<S, TestA, never, [], true>['delete']>\n\t\t\t\tconst _: IsExact<R, Promise<Result>> = true\n\t\t\t\tvoid _\n\t\t\t})\n\n\t\t\ttest('create() return type unchanged regardless of Req', () => {\n\t\t\t\ttype WithReq = ReturnType<OneBuilderSurface<S, TestA, never, [], true>['create']>\n\t\t\t\ttype WithoutReq = ReturnType<OneBuilderSurface<S, TestA, never, [], false>['create']>\n\t\t\t\tconst _: IsExact<WithReq, WithoutReq> = true\n\t\t\t\tvoid _\n\t\t\t})\n\n\t\t\ttest('.required() preserves Req through select()', () => {\n\t\t\t\ttype R = ReturnType<OneBuilderSurface<S, TestA, 'name', [], true>['find']>\n\t\t\t\tconst _: IsExact<R, Promise<NameOnly>> = true\n\t\t\t\tvoid _\n\t\t\t})\n\n\t\t\ttest('.required() once-per-step: Req=true surface has uncallable required()', () => {\n\t\t\t\ttype ReqBuilder = OneBuilderSurface<S, TestA, never, [], true>\n\t\t\t\ttype RequiredMethod = ReqBuilder['required']\n\t\t\t\ttype ThisParam = ThisParameterType<RequiredMethod>\n\t\t\t\ttype _check = ThisParam extends OneBuilder<S, TestA, never, [], false> ? true : false\n\t\t\t\tconst _: _check = true\n\t\t\t\tvoid _\n\t\t\t})\n\t\t})\n\n\t\tdescribe('runtime throw behaviour', () => {\n\t\t\ttest('.required().find() throws OrmNotFoundError when no row matched', async () => {\n\t\t\t\tawait expect(\n\t\t\t\t\trepo.on(UserSchema).one().required().id('nonexistent').find(),\n\t\t\t\t).rejects.toThrow(OrmNotFoundError)\n\t\t\t})\n\n\t\t\ttest('.required().update() throws OrmNotFoundError when no row matched', async () => {\n\t\t\t\tawait expect(\n\t\t\t\t\trepo.on(UserSchema).one().required().id('nonexistent').update({ name: 'X' }),\n\t\t\t\t).rejects.toThrow(OrmNotFoundError)\n\t\t\t})\n\n\t\t\ttest('.required().delete() throws OrmNotFoundError when no row matched', async () => {\n\t\t\t\tawait expect(\n\t\t\t\t\trepo.on(UserSchema).one().required().id('nonexistent').delete(),\n\t\t\t\t).rejects.toThrow(OrmNotFoundError)\n\t\t\t})\n\n\t\t\ttest('thrown error carries schema, operation, and where', async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).one().required().id('u-abc').find()\n\t\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect(e).toBeInstanceOf(OrmNotFoundError)\n\t\t\t\t\tconst err = e as InstanceType<typeof OrmNotFoundError>\n\t\t\t\t\texpect(err.schema).toBe('users')\n\t\t\t\t\texpect(err.operation).toBe('findOne')\n\t\t\t\t\texpect(err.where).toBeInstanceOf(FilterGroup)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttest('update throws with operation updateOne', async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).one().required().id('u-abc').update({ name: 'X' })\n\t\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect((e as any).operation).toBe('updateOne')\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttest('delete throws with operation deleteOne', async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).one().required().id('u-abc').delete()\n\t\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect((e as any).operation).toBe('deleteOne')\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tdescribe('no throw when row exists', () => {\n\t\t\ttest('.required().find() returns the row when found', async () => {\n\t\t\t\tconst created = await repo.on(UserSchema).one().create({ email: 'a@b.com', name: 'A' })\n\t\t\t\tconst found = await repo.on(UserSchema).one().required().id(created.id).find()\n\t\t\t\texpect(found.name).toBe('A')\n\t\t\t})\n\n\t\t\ttest('.required().update() returns the updated row', async () => {\n\t\t\t\tconst created = await repo.on(UserSchema).one().create({ email: 'a@b.com', name: 'A' })\n\t\t\t\tconst updated = await repo.on(UserSchema).one().required().id(created.id).update({ name: 'B' })\n\t\t\t\texpect(updated.name).toBe('B')\n\t\t\t})\n\n\t\t\ttest('.required().delete() returns the deleted row', async () => {\n\t\t\t\tconst created = await repo.on(UserSchema).one().create({ email: 'a@b.com', name: 'A' })\n\t\t\t\tconst deleted = await repo.on(UserSchema).one().required().id(created.id).delete()\n\t\t\t\texpect(deleted.name).toBe('A')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('custom message', () => {\n\t\t\ttest('.required(message) uses custom message on throw', async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).one().required('user must exist').id('u-abc').find()\n\t\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect((e as any).message).toBe('user must exist')\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttest('default message for PK-keyed chain', async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).one().required().id('u-abc').find()\n\t\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect((e as any).message).toBe('users.findOne: no row matched id=u-abc')\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tdescribe('default behaviour preserved', () => {\n\t\t\ttest('find() returns null without .required()', async () => {\n\t\t\t\tconst result = await repo.on(UserSchema).one().id('nonexistent').find()\n\t\t\t\texpect(result).toBeNull()\n\t\t\t})\n\n\t\t\ttest('update() returns null without .required()', async () => {\n\t\t\t\tconst result = await repo.on(UserSchema).one().id('nonexistent').update({ name: 'X' })\n\t\t\t\texpect(result).toBeNull()\n\t\t\t})\n\n\t\t\ttest('delete() returns null without .required()', async () => {\n\t\t\t\tconst result = await repo.on(UserSchema).one().id('nonexistent').delete()\n\t\t\t\texpect(result).toBeNull()\n\t\t\t})\n\t\t})\n\n\t\tdescribe('runtime no-op for create/upsert', () => {\n\t\t\ttest('.required() before create() returns the created row', async () => {\n\t\t\t\tconst created = await repo.on(UserSchema).one().required().create({ email: 'x@y.com', name: 'X' })\n\t\t\t\texpect(created.email).toBe('x@y.com')\n\t\t\t\texpect(created.name).toBe('X')\n\t\t\t})\n\n\t\t\ttest('.required() before upsert() returns the upserted row', async () => {\n\t\t\t\tconst upserted = await repo\n\t\t\t\t\t.on(UserSchema)\n\t\t\t\t\t.one()\n\t\t\t\t\t.required()\n\t\t\t\t\t.where((q: any) => q.eq('email', 'x@y.com'))\n\t\t\t\t\t.upsert({ create: { email: 'x@y.com', name: 'X' } })\n\t\t\t\texpect(upserted.email).toBe('x@y.com')\n\t\t\t\texpect(upserted.name).toBe('X')\n\t\t\t})\n\t\t})\n\t})\n\n\tdescribe('read query-shape validation and page state', () => {\n\t\tlet itemCounter = 0\n\t\tlet userCounter = 0\n\t\tlet postCounter = 0\n\n\t\tconst ItemSchema = Schema.from('paged_items')\n\t\t\t.pk('id', v.string(), () => `item-${++itemCounter}`)\n\t\t\t.field('position', v.number())\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tconst UserSchema = Schema.from('query_shape_users')\n\t\t\t.pk('id', v.string(), () => `user-${++userCounter}`)\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tconst PostSchema = Schema.from('query_shape_posts')\n\t\t\t.pk('id', v.string(), () => `post-${++postCounter}`)\n\t\t\t.field('userId', v.string())\n\t\t\t.field('title', v.string())\n\t\t\t.build()\n\n\t\tconst UserRels = Relations.from(UserSchema).hasMany('posts', PostSchema.fields.userId).build()\n\t\tconst PostRels = Relations.from(PostSchema).belongsTo('author', PostSchema.fields.userId, UserSchema).build()\n\n\t\tfunction makeRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\treturn Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t}\n\n\t\tasync function seedItems(repo: any, count: number) {\n\t\t\tawait repo.on(ItemSchema).all().create(\n\t\t\t\tArray.from({ length: count }, (_, index) => ({ position: index + 1, name: `Item ${index + 1}` })),\n\t\t\t)\n\t\t}\n\n\t\tfunction expectQueryShapeError(error: unknown, field?: string) {\n\t\t\texpect(error).toBeInstanceOf(OrmValidationError)\n\t\t\tconst err = error as InstanceType<typeof OrmValidationError>\n\t\t\texpect(err.kind).toBe('query-shape')\n\t\t\tif (field) expect(err.failures.some((failure) => failure.field === field)).toBe(true)\n\t\t}\n\n\t\ttest('.page(n) is 1-based offset sugar for .find()', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 10)\n\n\t\t\tconst rows = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(3).page(2).find()\n\n\t\t\texpect(rows.map((row) => row.position)).toEqual([4, 5, 6])\n\t\t})\n\n\t\ttest('.page(2).limit(50).find() uses the final effective limit for offset', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 125)\n\n\t\t\tconst rows = await repo.on(ItemSchema).all().orderBy('position', 'asc').page(2).limit(50).find()\n\n\t\t\texpect(rows).toHaveLength(50)\n\t\t\texpect(rows[0].position).toBe(51)\n\t\t\texpect(rows.at(-1)?.position).toBe(100)\n\t\t})\n\n\t\ttest('duplicate .limit(...) calls keep last-wins behavior', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 10)\n\n\t\t\tconst rows = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(7).limit(3).find()\n\n\t\t\texpect(rows.map((row) => row.position)).toEqual([1, 2, 3])\n\t\t})\n\n\t\ttest('.offset(...) and .page(...) are last-source-wins', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 20)\n\n\t\t\tconst offsetWins = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(5).page(2).offset(10).find()\n\t\t\tconst pageWins = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(5).offset(10).page(2).find()\n\n\t\t\texpect(offsetWins.map((row) => row.position)).toEqual([11, 12, 13, 14, 15])\n\t\t\texpect(pageWins.map((row) => row.position)).toEqual([6, 7, 8, 9, 10])\n\t\t})\n\n\t\ttest('invalid page, limit, and offset values fail as query-shape errors at find()', async () => {\n\t\t\tconst repo = makeRepo()\n\n\t\t\tfor (const [field, read] of [\n\t\t\t\t['page', () => repo.on(ItemSchema).all().page(0 as any).find()],\n\t\t\t\t['limit', () => repo.on(ItemSchema).all().limit(0 as any).find()],\n\t\t\t\t['limit', () => repo.on(ItemSchema).all().limit(undefined as any).page(2).find()],\n\t\t\t\t['offset', () => repo.on(ItemSchema).all().offset(-1 as any).find()],\n\t\t\t] as const) {\n\t\t\t\ttry {\n\t\t\t\t\tawait read()\n\t\t\t\t\texpect.unreachable(`${field} should have failed`)\n\t\t\t\t} catch (error) {\n\t\t\t\t\texpectQueryShapeError(error, field)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\ttest('unknown selected fields fail as query-shape errors on find reads before rows are loaded', async () => {\n\t\t\tconst repo = makeRepo()\n\n\t\t\ttry {\n\t\t\t\tawait repo.on(ItemSchema).one().select(['unknownField' as any]).find()\n\t\t\t\texpect.unreachable('one().find() should have failed')\n\t\t\t} catch (error) {\n\t\t\t\texpectQueryShapeError(error, 'unknownField')\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait repo.on(ItemSchema).all().select(['unknownField' as any]).find()\n\t\t\t\texpect.unreachable('all().find() should have failed')\n\t\t\t} catch (error) {\n\t\t\t\texpectQueryShapeError(error, 'unknownField')\n\t\t\t}\n\t\t})\n\n\t\ttest('invalid and coherency-broken preload definitions fail as query-shape errors on find reads', async () => {\n\t\t\tconst repo = makeRepo()\n\n\t\t\tfor (const read of [\n\t\t\t\t() => repo.on(UserSchema).all().preload([{ def: {} as any }]).find(),\n\t\t\t\t() => repo.on(UserSchema).all().preload([PostRels.author]).find(),\n\t\t\t\t() => repo.on(UserSchema).all().preload([{ def: UserRels.posts, preloads: [UserRels.posts] }]).find(),\n\t\t\t]) {\n\t\t\t\ttry {\n\t\t\t\t\tawait read()\n\t\t\t\t\texpect.unreachable('preload should have failed')\n\t\t\t\t} catch (error) {\n\t\t\t\t\texpectQueryShapeError(error)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\ttest('orderBy(string) remains an unvalidated raw-string escape hatch', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 2)\n\n\t\t\tconst rows = await repo.on(ItemSchema).all().orderBy('missingRawSortField', 'asc').find()\n\n\t\t\texpect(rows).toHaveLength(2)\n\t\t})\n\n\t\ttest('page-based reads without an initialized Instance use default limit 100', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 250)\n\n\t\t\tconst rows = await repo.on(ItemSchema).all().orderBy('position', 'asc').page(2).find()\n\n\t\t\texpect(rows).toHaveLength(100)\n\t\t\texpect(rows[0].position).toBe(101)\n\t\t\texpect(rows.at(-1)?.position).toBe(200)\n\t\t})\n\n\t\ttest('find() without page, offset, or limit keeps existing flat-array behavior', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 12)\n\n\t\t\tconst rows = await repo.on(ItemSchema).all().orderBy('position', 'asc').find()\n\n\t\t\texpect(rows).toHaveLength(12)\n\t\t\texpect(rows.map((row) => row.position)).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])\n\t\t})\n\n\t\ttest('.paginate() returns a first-page envelope with docs computed from filter-only count', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 5)\n\n\t\t\tconst page = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(2).paginate()\n\n\t\t\texpect(page.items.map((row) => row.position)).toEqual([1, 2])\n\t\t\texpect(page.docs).toEqual({ limit: 2, total: 5, count: 2 })\n\t\t\texpect(page.pages).toEqual({ current: 1, start: 1, last: 3, previous: null, next: 2 })\n\t\t})\n\n\t\ttest('.paginate() reports pages.last = 1 for empty result sets', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 3)\n\n\t\t\tconst page = await repo.on(ItemSchema).all().where((q) => q.eq('name', 'missing')).limit(5).paginate()\n\n\t\t\texpect(page.items).toEqual([])\n\t\t\texpect(page.docs).toEqual({ limit: 5, total: 0, count: 0 })\n\t\t\texpect(page.pages).toEqual({ current: 1, start: 1, last: 1, previous: null, next: null })\n\t\t})\n\n\t\ttest('.paginate() preserves the previous neighbor on the last real page', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 5)\n\n\t\t\tconst page = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(2).page(3).paginate()\n\n\t\t\texpect(page.items.map((row) => row.position)).toEqual([5])\n\t\t\texpect(page.docs).toEqual({ limit: 2, total: 5, count: 1 })\n\t\t\texpect(page.pages).toEqual({ current: 3, start: 1, last: 3, previous: 2, next: null })\n\t\t})\n\n\t\ttest('.paginate() preserves past-last page requests with no navigation neighbors', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 5)\n\n\t\t\tconst page = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(2).page(4).paginate()\n\n\t\t\texpect(page.items).toEqual([])\n\t\t\texpect(page.docs).toEqual({ limit: 2, total: 5, count: 0 })\n\t\t\texpect(page.pages).toEqual({ current: 4, start: 1, last: 3, previous: null, next: null })\n\t\t})\n\n\t\ttest('.paginate() does not require orderBy', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 3)\n\n\t\t\tconst page = await repo.on(ItemSchema).all().limit(2).paginate()\n\n\t\t\texpect(page.items).toHaveLength(2)\n\t\t\texpect(page.docs).toEqual({ limit: 2, total: 3, count: 2 })\n\t\t\texpect(page.pages).toEqual({ current: 1, start: 1, last: 2, previous: null, next: 2 })\n\t\t})\n\n\t\ttest('.paginate() without an explicit limit uses the safe default page limit without Instance.get()', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 101)\n\t\t\tconst getSpy = vi.spyOn(Instance, 'get').mockImplementation(() => {\n\t\t\t\tthrow new Error('Instance.get() should not be required for pagination defaults')\n\t\t\t})\n\n\t\t\ttry {\n\t\t\t\tconst page = await repo.on(ItemSchema).all().orderBy('position', 'asc').paginate()\n\n\t\t\t\texpect(page.items).toHaveLength(100)\n\t\t\t\texpect(page.docs).toEqual({ limit: 100, total: 101, count: 100 })\n\t\t\t\texpect(page.pages).toEqual({ current: 1, start: 1, last: 2, previous: null, next: 2 })\n\t\t\t} finally {\n\t\t\t\tgetSpy.mockRestore()\n\t\t\t}\n\t\t})\n\n\t\ttest('.paginate() counts only the filter while page items honor limit and offset', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo.on(ItemSchema).all().create([\n\t\t\t\t{ position: 1, name: 'keep' },\n\t\t\t\t{ position: 2, name: 'drop' },\n\t\t\t\t{ position: 3, name: 'keep' },\n\t\t\t\t{ position: 4, name: 'keep' },\n\t\t\t])\n\n\t\t\tconst page = await repo\n\t\t\t\t.on(ItemSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('name', 'keep'))\n\t\t\t\t.orderBy('position', 'asc')\n\t\t\t\t.limit(1)\n\t\t\t\t.page(2)\n\t\t\t\t.paginate()\n\n\t\t\texpect(page.items.map((row) => row.position)).toEqual([3])\n\t\t\texpect(page.docs).toEqual({ limit: 1, total: 3, count: 1 })\n\t\t\texpect(page.pages).toEqual({ current: 2, start: 1, last: 3, previous: 1, next: 3 })\n\t\t})\n\n\t\ttest('.paginate() starts item and count reads in parallel after query-shape validation and config resolution', async () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\tconst events: string[] = []\n\t\t\t;(adapter as any).use = vi.fn((schema: AnySchema, config: any) => {\n\t\t\t\tconst use = origUse(schema, config)\n\t\t\t\treturn {\n\t\t\t\t\t...use,\n\t\t\t\t\tfindMany: async (...args: any[]) => {\n\t\t\t\t\t\tevents.push('findMany:start')\n\t\t\t\t\t\tawait Promise.resolve()\n\t\t\t\t\t\tevents.push('findMany:end')\n\t\t\t\t\t\treturn use.findMany(...(args as [any, any]))\n\t\t\t\t\t},\n\t\t\t\t\tcount: async (...args: any[]) => {\n\t\t\t\t\t\tevents.push('count:start')\n\t\t\t\t\t\tawait Promise.resolve()\n\t\t\t\t\t\tevents.push('count:end')\n\t\t\t\t\t\treturn use.count(...(args as [any]))\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t})\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => {\n\t\t\t\t\tevents.push('resolve')\n\t\t\t\t\treturn { table: s.name }\n\t\t\t\t})\n\t\t\t\t.build()\n\t\t\tawait seedItems(repo, 3)\n\t\t\tevents.length = 0\n\n\t\t\tconst page = await repo.on(ItemSchema).all().where((q) => q.eq('name', 'Item 1')).limit(1).paginate()\n\n\t\t\texpect(events[0]).toBe('resolve')\n\t\t\texpect(events).toContain('count:start')\n\t\t\texpect(events).toContain('findMany:end')\n\t\t\texpect(events.indexOf('count:start')).toBeLessThan(events.indexOf('findMany:end'))\n\t\t\texpect(page.items.map((row) => row.position)).toEqual([1])\n\t\t\texpect(page.docs).toEqual({ limit: 1, total: 1, count: 1 })\n\t\t})\n\n\t\ttest('.paginate() items preserve selected row shape', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 2)\n\n\t\t\tconst page = await repo.on(ItemSchema).all().orderBy('position', 'asc').select(['name']).limit(1).paginate()\n\n\t\t\texpect(page.items).toEqual([{ name: 'Item 1' }])\n\t\t\texpect(page.docs).toMatchObject({ total: 2, count: 1 })\n\t\t})\n\n\t\ttest('.paginate() items preserve preloaded row shape', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst alice = await repo.on(UserSchema).one().create({ name: 'Alice' })\n\t\t\tconst bob = await repo.on(UserSchema).one().create({ name: 'Bob' })\n\t\t\tawait repo.on(PostSchema).all().create([\n\t\t\t\t{ userId: alice.id, title: 'A1' },\n\t\t\t\t{ userId: alice.id, title: 'A2' },\n\t\t\t\t{ userId: bob.id, title: 'B1' },\n\t\t\t])\n\n\t\t\tconst page = await repo.on(UserSchema).all().orderBy('name', 'asc').preload([UserRels.posts]).limit(1).paginate()\n\n\t\t\texpect(page.items).toHaveLength(1)\n\t\t\texpect(page.items[0].name).toBe('Alice')\n\t\t\texpect(page.items[0].posts.map((post: any) => post.title)).toEqual(['A1', 'A2'])\n\t\t\texpect(page.docs).toEqual({ limit: 1, total: 2, count: 1 })\n\t\t})\n\n\t\ttest('.paginate() uses offset-source last-wins and the final effective limit', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 10)\n\n\t\t\tconst pageSource = await repo.on(ItemSchema).all().orderBy('position', 'asc').page(2).limit(3).paginate()\n\t\t\tconst offsetSource = await repo.on(ItemSchema).all().orderBy('position', 'asc').page(2).limit(2).offset(4).paginate()\n\n\t\t\texpect(pageSource.items.map((row) => row.position)).toEqual([4, 5, 6])\n\t\t\texpect(pageSource.pages.current).toBe(2)\n\t\t\texpect(pageSource.docs.limit).toBe(3)\n\t\t\texpect(offsetSource.items.map((row) => row.position)).toEqual([5, 6])\n\t\t\texpect(offsetSource.pages.current).toBe(3)\n\t\t\texpect(offsetSource.docs.limit).toBe(2)\n\t\t})\n\t})\n\n\tdescribe('type-level: paginate surface', () => {\n\t\tconst _TestSchema = Schema.from('paginate_type_users')\n\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\t\ttype S = typeof _TestSchema\n\n\t\ttest('Paginated<T> exposes pages, docs, and items', () => {\n\t\t\ttype Page = Paginated<{ id: string }>\n\t\t\texpectTypeOf<Page>().toHaveProperty('pages')\n\t\t\texpectTypeOf<Page>().toHaveProperty('docs')\n\t\t\texpectTypeOf<Page>().toHaveProperty('items')\n\t\t\texpectTypeOf<Page['items']>().toEqualTypeOf<{ id: string }[]>()\n\t\t})\n\n\t\ttest('.paginate() is a no-argument AllBuilder terminal', () => {\n\t\t\ttype Adapter = { findMany: (...a: any[]) => any; count: (...a: any[]) => any }\n\t\t\ttype All = AllBuilderSurface<S, Adapter>\n\t\t\ttype Result = import('./internals/types').SelectedWithPreloads<S, never, []>\n\n\t\t\texpectTypeOf<All['paginate']>().toBeFunction()\n\t\t\texpectTypeOf<Parameters<All['paginate']>>().toEqualTypeOf<[]>()\n\t\t\texpectTypeOf<ReturnType<All['paginate']>>().toEqualTypeOf<Promise<Paginated<Result>>>()\n\t\t})\n\n\t\ttest('.paginate() exists only on AllBuilder', () => {\n\t\t\ttype Adapter = { findMany: (...a: any[]) => any; count: (...a: any[]) => any }\n\t\t\ttype One = OneBuilderSurface<S, Adapter>\n\t\t\ttype OneHasPaginate = 'paginate' extends keyof One ? true : false\n\n\t\t\texpectTypeOf<OneHasPaginate>().toEqualTypeOf<false>()\n\t\t})\n\n\t\ttest('.paginate() is gated on both findMany and count', () => {\n\t\t\tclass FullAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync count() { return 0 }\n\t\t\t}\n\t\t\tclass CountOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync count() { return 0 }\n\t\t\t}\n\t\t\tclass FindOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype Full = AllBuilderSurface<S, FullAdapter>\n\t\t\ttype MissingFindMany = AllBuilderSurface<S, CountOnlyAdapter>\n\t\t\ttype MissingCount = AllBuilderSurface<S, FindOnlyAdapter>\n\n\t\t\texpectTypeOf<Full['paginate']>().toBeFunction()\n\t\t\texpectTypeOf<MissingFindMany['paginate']>().toBeNever()\n\t\t\texpectTypeOf<MissingCount['paginate']>().toBeNever()\n\t\t})\n\t})\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\n\nimport type { AnySchema } from '../schema'\n\nexport type ConfigTransform<C> = (config: C, schema: AnySchema) => C\n\nconst store = new AsyncLocalStorage<ConfigTransform<any>[]>()\n\nexport function run<C, T>(transform: ConfigTransform<C>, fn: () => T): T {\n\tconst current = store.getStore() ?? []\n\treturn store.run([...current, transform], fn)\n}\n\nexport function currentTransforms<C>(): ConfigTransform<C>[] {\n\treturn store.getStore() ?? []\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\n\ttype TestConfig = { prefix: string }\n\tconst dummySchema = { name: 'test' } as AnySchema\n\n\tfunction applyTransforms(base: TestConfig): TestConfig {\n\t\tlet config = base\n\t\tfor (const t of currentTransforms<TestConfig>()) {\n\t\t\tconfig = t(config, dummySchema)\n\t\t}\n\t\treturn config\n\t}\n\n\tdescribe('ALS runtime', () => {\n\t\ttest('reads outside run() see no transforms (default config)', () => {\n\t\t\tconst transforms = currentTransforms<TestConfig>()\n\t\t\texpect(transforms).toEqual([])\n\t\t\texpect(applyTransforms({ prefix: 'base' })).toEqual({ prefix: 'base' })\n\t\t})\n\n\t\ttest('reads inside run() see the override', () => {\n\t\t\tconst result = run<TestConfig, TestConfig>(\n\t\t\t\t(config) => ({ prefix: `scoped_${config.prefix}` }),\n\t\t\t\t() => applyTransforms({ prefix: 'base' }),\n\t\t\t)\n\t\t\texpect(result).toEqual({ prefix: 'scoped_base' })\n\t\t})\n\n\t\ttest('reads after run() returns see no transforms', () => {\n\t\t\trun<TestConfig, void>(\n\t\t\t\t(config) => ({ prefix: `inner_${config.prefix}` }),\n\t\t\t\t() => {},\n\t\t\t)\n\t\t\texpect(applyTransforms({ prefix: 'base' })).toEqual({ prefix: 'base' })\n\t\t})\n\n\t\ttest('nested run() calls compose — inner derives from outer', () => {\n\t\t\tconst result = run<TestConfig, TestConfig>(\n\t\t\t\t(config) => ({ prefix: `a_${config.prefix}` }),\n\t\t\t\t() =>\n\t\t\t\t\trun<TestConfig, TestConfig>(\n\t\t\t\t\t\t(config) => ({ prefix: `b_${config.prefix}` }),\n\t\t\t\t\t\t() => applyTransforms({ prefix: 'base' }),\n\t\t\t\t\t),\n\t\t\t)\n\t\t\texpect(result).toEqual({ prefix: 'b_a_base' })\n\t\t})\n\n\t\ttest('two parallel run() calls do not bleed into each other', async () => {\n\t\t\tconst results = await Promise.all([\n\t\t\t\trun<TestConfig, Promise<TestConfig>>(\n\t\t\t\t\t(config) => ({ prefix: `tenant1_${config.prefix}` }),\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 10))\n\t\t\t\t\t\treturn applyTransforms({ prefix: 'base' })\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\trun<TestConfig, Promise<TestConfig>>(\n\t\t\t\t\t(config) => ({ prefix: `tenant2_${config.prefix}` }),\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 10))\n\t\t\t\t\t\treturn applyTransforms({ prefix: 'base' })\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t])\n\n\t\t\texpect(results[0]).toEqual({ prefix: 'tenant1_base' })\n\t\t\texpect(results[1]).toEqual({ prefix: 'tenant2_base' })\n\t\t})\n\n\t\ttest('overrides survive across awaits inside fn', async () => {\n\t\t\tconst result = await run<TestConfig, Promise<TestConfig>>(\n\t\t\t\t(config) => ({ prefix: `async_${config.prefix}` }),\n\t\t\t\tasync () => {\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 5))\n\t\t\t\t\tconst mid = applyTransforms({ prefix: 'step1' })\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 5))\n\t\t\t\t\tconst end = applyTransforms({ prefix: 'step2' })\n\t\t\t\t\treturn { prefix: `${mid.prefix}+${end.prefix}` }\n\t\t\t\t},\n\t\t\t)\n\t\t\texpect(result).toEqual({ prefix: 'async_step1+async_step2' })\n\t\t})\n\t})\n}\n","import type { Pipe } from 'valleyed'\n\nimport type { InferAdapterConfig } from '../adapter'\nimport { currentTransforms, run } from './als'\nimport { SchemaContext, SchemaRef, type HasMethod, type SchemaRefSurface } from './builders'\nimport type { OrmAdapterConfig, OrmAdapterLike } from '../adapters/base'\nimport type { IterationOptions } from '../query-options'\nimport type { AnySchema } from '../schema'\nimport { composeSchemaConfig } from '../schema-validations'\n\nexport type { ConfigTransform } from './als'\n\nexport class Repo<A extends OrmAdapterLike<any>> {\n\treadonly #adapter: A\n\treadonly #defaults: (schema: AnySchema) => InferAdapterConfig<A>\n\treadonly #schemaConfigPipe: Pipe<any, any> | undefined\n\n\tconstructor({ adapter, resolve }: { adapter: A; resolve: (schema: AnySchema) => InferAdapterConfig<A> }) {\n\t\tthis.#adapter = adapter\n\t\tthis.#defaults = resolve\n\t\tthis.#schemaConfigPipe = (adapter as any).schemaConfigPipe\n\t}\n\n\t#getConfig(s: AnySchema): InferAdapterConfig<A> {\n\t\tconst transforms = [...currentTransforms<InferAdapterConfig<A>>()]\n\t\tif (this.#schemaConfigPipe) {\n\t\t\treturn composeSchemaConfig(this.#defaults, transforms, s, this.#schemaConfigPipe) as InferAdapterConfig<A>\n\t\t}\n\t\tlet config = this.#defaults(s)\n\t\tfor (const transform of transforms) {\n\t\t\tconfig = transform(config, s)\n\t\t}\n\t\treturn config\n\t}\n\n\t#getUse(s: AnySchema) {\n\t\treturn this.#adapter.use(s, this.#getConfig(s))\n\t}\n\n\ton<S extends AnySchema>(schema: S): SchemaRefSurface<S, A> {\n\t\treturn new SchemaRef<S, A>(new SchemaContext(schema, (target) => this.#getUse(target))) as unknown as SchemaRefSurface<S, A>\n\t}\n\n\tstatic from<NewA extends OrmAdapterLike<any>>(adapter: NewA): RepoBuilder<NewA> {\n\t\treturn new RepoBuilder<NewA>(adapter)\n\t}\n\n\tasync session<T>(fn: () => Promise<T>): Promise<T> {\n\t\treturn this.#adapter.session?.(fn) ?? fn()\n\t}\n\n\tresolve<T>(resolver: (config: InferAdapterConfig<A>, schema: AnySchema) => InferAdapterConfig<A>, fn: () => T): T {\n\t\treturn run<InferAdapterConfig<A>, T>(resolver, fn)\n\t}\n}\n\nclass RepoBuilder<A extends OrmAdapterLike<any>> {\n\t#adapter: unknown\n\t#resolve: unknown\n\n\tconstructor(adapter?: unknown, resolve?: unknown) {\n\t\tthis.#adapter = adapter\n\t\tthis.#resolve = resolve\n\t}\n\n\tresolve(fn: (schema: AnySchema) => OrmAdapterConfig<A>): RepoBuilder<A> {\n\t\treturn new RepoBuilder<A>(this.#adapter, fn)\n\t}\n\n\tbuild(this: RepoBuilder<A>): RepoSurface<A> {\n\t\treturn new Repo<A>({\n\t\t\tadapter: this.#adapter as any,\n\t\t\tresolve: this.#resolve as any,\n\t\t}) as RepoSurface<A>\n\t}\n}\n\nexport type RepoSurface<A extends OrmAdapterLike<any>> = Repo<A> &\n\t(HasMethod<A, 'session'> extends true ? {} : { session: never })\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf, vi } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { OrmAdapter } = await import('../orm-adapter')\n\tconst { OrmValidationError } = await import('../errors')\n\tconst { Instance } = await import('../../instance')\n\tconst { Relations } = await import('../relations')\n\tconst { Schema } = await import('../schema')\n\n\tfunction mockInstance() {\n\t\treturn vi.spyOn(Instance, 'on').mockImplementation(() => {})\n\t}\n\n\tdescribe('Repo.from() and repo.on()', () => {\n\t\ttest('Repo.from(adapter).resolve(...).build() creates a working repo', async () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t\tconst created = await repo.on(TestSchema).one().create({ name: 'Hello' })\n\t\t\texpect(created.name).toBe('Hello')\n\t\t\tconst found = await repo.on(TestSchema).one().id(created.id).find()\n\t\t\texpect(found?.name).toBe('Hello')\n\t\t})\n\n\t\ttest('repo.on(schema) returns a SchemaRef', async () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t\tconst ref = repo.on(TestSchema)\n\t\t\texpect(ref).toBeInstanceOf(SchemaRef)\n\t\t})\n\t})\n\n\tdescribe('clone-on-step: RepoBuilder fan-out independence', () => {\n\t\ttest('.resolve() returns a new builder, not the same instance', () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst base = Repo.from(adapter)\n\t\t\tconst a = base.resolve((s) => ({ table: s.name }))\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\t})\n\n\tdescribe('repo/Repo core behavior', () => {\n\t\tlet userCounter = 0\n\t\tlet postCounter = 0\n\t\tlet profileCounter = 0\n\t\tlet orgCounter = 0\n\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => `u${++userCounter}`)\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.field('orgId', v.optional(v.string()), { onCreate: () => undefined })\n\t\t\t.field('createdAt', v.number(), { onCreate: () => 1000 })\n\t\t\t.build()\n\n\t\tconst PostSchema = Schema.from('posts')\n\t\t\t.pk('id', v.string(), () => `p${++postCounter}`)\n\t\t\t.field('title', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst ProfileSchema = Schema.from('profiles')\n\t\t\t.pk('id', v.string(), () => `pr${++profileCounter}`)\n\t\t\t.field('bio', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst OrgSchema = Schema.from('orgs')\n\t\t\t.pk('id', v.string(), () => `o${++orgCounter}`)\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tconst PersonSchema = Schema.from('people')\n\t\t\t.pk('id', v.string(), () => `person-${++userCounter}`)\n\t\t\t.field('firstName', v.string())\n\t\t\t.field('lastName', v.string())\n\t\t\t.computed('fullName', ['firstName', 'lastName'], v.string(), ({ firstName, lastName }) => `${firstName} ${lastName}`)\n\t\t\t.build()\n\n\t\tconst UserRels = Relations.from(UserSchema)\n\t\t\t.hasMany('posts', PostSchema.fields.userId)\n\t\t\t.hasOne('profile', ProfileSchema.fields.userId)\n\t\t\t.belongsTo('org', UserSchema.fields.orgId, OrgSchema)\n\t\t\t.build()\n\n\t\tfunction makeRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\treturn Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t}\n\n\t\ttest('fluent builders support one/all read chains', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst created = await repo.on(UserSchema).one().create({ email: 'fluent@test.com', name: 'Fluent User' })\n\n\t\t\tconst one = await repo.on(UserSchema).one().id(created.id).select(['id', 'name']).find()\n\t\t\texpect(one).toEqual({ id: created.id, name: 'Fluent User' })\n\n\t\t\tconst all = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('id', created.id))\n\t\t\t\t.orderBy('createdAt', 'desc')\n\t\t\t\t.limit(1)\n\t\t\t\t.select(['id'])\n\t\t\t\t.find()\n\n\t\t\texpect(all).toEqual([{ id: created.id }])\n\t\t})\n\n\t\ttest('all().count() returns filtered counts and ignores query-shape state', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'alice@count.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'bob@count.com', name: 'Bob' },\n\t\t\t\t\t{ email: 'alice2@count.com', name: 'Alice' },\n\t\t\t\t])\n\n\t\t\tconst count = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('name', 'Alice'))\n\t\t\t\t.select(['does_not_exist'] as any)\n\t\t\t\t.preload(['does_not_exist'] as any)\n\t\t\t\t.orderBy('does_not_exist')\n\t\t\t\t.limit(0)\n\t\t\t\t.page(0)\n\t\t\t\t.count()\n\n\t\t\texpect(count).toBe(2)\n\t\t})\n\n\t\ttest('all().count() validates only the filter', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo.on(UserSchema).one().create({ email: 'bad-filter-count@test.com', name: 'Alice' })\n\n\t\t\tawait expect(\n\t\t\t\trepo\n\t\t\t\t\t.on(UserSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.where((q) => q.eq('does_not_exist' as any, 'x'))\n\t\t\t\t\t.select(['also_missing'] as any)\n\t\t\t\t\t.preload(['also_missing'] as any)\n\t\t\t\t\t.limit(0)\n\t\t\t\t\t.count(),\n\t\t\t).rejects.toBeInstanceOf(OrmValidationError)\n\t\t})\n\n\t\ttest('all().count() is distinct from aggregate count', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'one@agg-count.com', name: 'Same' },\n\t\t\t\t\t{ email: 'two@agg-count.com', name: 'Same' },\n\t\t\t\t])\n\n\t\t\tconst count = await repo.on(UserSchema).all().where((q) => q.eq('name', 'Same')).count()\n\t\t\tconst aggregate = await repo.on(UserSchema).aggregate().count('total').where((q) => q.eq('name', 'Same')).run()\n\n\t\t\texpect(count).toBe(2)\n\t\t\texpect(aggregate).toEqual({ total: 2 })\n\t\t})\n\n\t\ttest('builder snapshots are immutable across chain branches', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'alice@branch.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'bob@branch.com', name: 'Bob' },\n\t\t\t\t])\n\n\t\t\tconst base = repo.on(UserSchema).all()\n\t\t\tconst branchA = base.where((q) => q.eq('name', 'Alice')).select(['id'])\n\t\t\tconst branchB = base.where((q) => q.eq('name', 'Bob')).select(['name'])\n\n\t\t\tconst rowsA = await branchA.find()\n\t\t\tconst rowsB = await branchB.find()\n\n\t\t\texpect(rowsA).toHaveLength(1)\n\t\t\texpect(rowsB).toHaveLength(1)\n\t\t\texpect(rowsA.every((r) => 'id' in r && !('name' in r))).toBe(true)\n\t\t\texpect(rowsB).toEqual([{ name: 'Bob' }])\n\t\t})\n\n\t\ttest('fluent builders support write chains with preloads', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst org = await repo.on(OrgSchema).one().create({ name: 'Fluent Org' })\n\n\t\t\tconst user = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.preload([UserRels.org])\n\t\t\t\t.create({ email: 'writer@test.com', name: 'Writer', orgId: org.id })\n\n\t\t\texpect((user.org as any).name).toBe('Fluent Org')\n\n\t\t\tconst updated = await repo.on(UserSchema).one().id(user.id).select(['id', 'name']).update({ name: 'Updated Writer' })\n\n\t\t\texpect(updated).toEqual({ id: user.id, name: 'Updated Writer' })\n\n\t\t\tconst deleted = await repo.on(UserSchema).one().id(user.id).select(['id']).delete()\n\t\t\texpect(deleted).toEqual({ id: user.id })\n\t\t})\n\n\t\ttest('session supports multi-operation writes with fluent builders', async () => {\n\t\t\tconst repo = makeRepo()\n\n\t\t\tconst insertedId = await repo.session(async () => {\n\t\t\t\tconst created = await repo.on(UserSchema).one().create({ email: 'tx@fluent.com', name: 'Tx Fluent' })\n\t\t\t\tawait repo.on(UserSchema).one().id(created.id).update({ name: 'Tx Fluent Updated' })\n\t\t\t\treturn created.id\n\t\t\t})\n\n\t\t\tconst persisted = await repo.on(UserSchema).one().id(insertedId).select(['name']).find()\n\t\t\texpect(persisted).toEqual({ name: 'Tx Fluent Updated' })\n\t\t})\n\n\t\ttest('create/find/update/delete flows work', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst user = await repo.on(UserSchema).one().create({ email: 'a@b.com', name: 'Alice' })\n\t\t\texpect(user.id).toMatch(/^u\\d+$/)\n\t\t\texpect(user.createdAt).toBe(1000)\n\n\t\t\tconst found = await repo.on(UserSchema).one().id(user.id).find()\n\t\t\texpect(found?.id).toBe(user.id)\n\n\t\t\tconst updated = await repo.on(UserSchema).one().id(user.id).update({ name: 'Updated' })\n\t\t\texpect(updated?.name).toBe('Updated')\n\n\t\t\tconst deleted = await repo.on(UserSchema).one().id(user.id).delete()\n\t\t\texpect(deleted?.id).toBe(user.id)\n\t\t})\n\n\t\ttest('findById, updateById, and deleteById target the schema primary key', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst user = await repo.on(UserSchema).one().create({ email: 'id@test.com', name: 'ById' })\n\n\t\t\tconst found = await repo.on(UserSchema).one().id(user.id).find()\n\t\t\texpect(found?.id).toBe(user.id)\n\n\t\t\tconst updated = await repo.on(UserSchema).one().id(user.id).update({ name: 'Changed' })\n\t\t\texpect(updated?.name).toBe('Changed')\n\n\t\t\tconst deleted = await repo.on(UserSchema).one().id(user.id).delete()\n\t\t\texpect(deleted?.id).toBe(user.id)\n\t\t\texpect(await repo.on(UserSchema).one().id(user.id).find()).toBeNull()\n\t\t})\n\n\t\ttest('createMany, findMany and upsertOne work', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@b.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'b@c.com', name: 'Bob' },\n\t\t\t\t])\n\t\t\texpect(await repo.on(UserSchema).all().find()).toHaveLength(2)\n\n\t\t\tconst inserted = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('id', 'u-fixed'))\n\t\t\t\t.upsert({ create: { email: 'new@test.com', name: 'New' } })\n\t\t\texpect(inserted.name).toBe('New')\n\t\t})\n\n\t\ttest('accepts chainable where input for filters and options', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@b.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'b@c.com', name: 'Bob' },\n\t\t\t\t])\n\n\t\t\tconst rows = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.or([(g) => g.eq('name', 'Alice'), (g) => g.eq('name', 'Bob')]))\n\t\t\t\t.orderBy('name', 'desc')\n\t\t\t\t.limit(1)\n\t\t\t\t.find()\n\n\t\t\texpect(rows).toHaveLength(1)\n\t\t\texpect(rows[0].name).toBe('Bob')\n\t\t})\n\n\t\ttest('all().iterate uses adapter iterateMany without findMany emulation', async () => {\n\t\t\tconst TestSchema = Schema.from('iter_repo_users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.field('age', v.number())\n\t\t\t\t.build()\n\t\t\tlet findManyCalls = 0\n\t\t\tlet capturedOptions: unknown\n\n\t\t\tclass IterAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly queryableOps = ['gt'] as const\n\t\t\t\tasync findMany(): Promise<Record<string, unknown>[]> {\n\t\t\t\t\tfindManyCalls += 1\n\t\t\t\t\tthrow new Error('findMany should not be called')\n\t\t\t\t}\n\t\t\t\tasync *iterateMany(_s: AnySchema, _c: unknown, _f: unknown, options?: unknown) {\n\t\t\t\t\tcapturedOptions = options\n\t\t\t\t\tyield { id: 'u3', name: 'Carol', age: 40 }\n\t\t\t\t\tyield { id: 'u1', name: 'Alice', age: 30 }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (IterAdapter as any)() as IterAdapter\n\t\t\tconst repo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t\tconst rows: Array<{ id: string; name: string; age: number }> = []\n\t\t\tfor await (const row of repo.on(TestSchema).all().where((q) => q.gt('age', 19)).orderBy('age', 'desc').offset(1).limit(2).iterate()) {\n\t\t\t\trows.push(row)\n\t\t\t}\n\n\t\t\texpect(findManyCalls).toBe(0)\n\t\t\texpect(capturedOptions).toMatchObject({ orderBy: [{ field: 'age', direction: 'desc' }], offset: 1, limit: 2 })\n\t\t\texpect(rows.map((row) => row.name)).toEqual(['Carol', 'Alice'])\n\t\t})\n\n\t\ttest('all().iterate accepts batchSize and forwards it only to iterateMany', async () => {\n\t\t\tconst TestSchema = Schema.from('iter_batch_users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst events: unknown[] = []\n\n\t\t\tclass IterAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany(_s: AnySchema, _c: unknown, _f: unknown, options?: unknown) {\n\t\t\t\t\tevents.push({ method: 'findMany', options })\n\t\t\t\t\treturn [{ id: 'u1', name: 'Alice' }]\n\t\t\t\t}\n\t\t\t\tasync count(_s: AnySchema, _c: unknown, _f: unknown) {\n\t\t\t\t\tevents.push({ method: 'count' })\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\tasync *iterateMany(_s: AnySchema, _c: unknown, _f: unknown, options?: unknown) {\n\t\t\t\t\tevents.push({ method: 'iterateMany', options })\n\t\t\t\t\tyield { id: 'u1', name: 'Alice' }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (IterAdapter as any)() as IterAdapter\n\t\t\tconst repo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\n\t\t\tconst iterated: Array<{ id: string; name: string }> = []\n\t\t\tfor await (const row of repo.on(TestSchema).all().limit(10).iterate({ batchSize: 3 })) {\n\t\t\t\titerated.push(row)\n\t\t\t}\n\t\t\tawait repo.on(TestSchema).all().limit(10).find()\n\t\t\tawait repo.on(TestSchema).all().limit(10).paginate()\n\n\t\t\texpect(iterated).toEqual([{ id: 'u1', name: 'Alice' }])\n\t\t\texpect(events).toEqual([\n\t\t\t\t{ method: 'iterateMany', options: expect.objectContaining({ limit: 10, batchSize: 3 }) },\n\t\t\t\t{ method: 'findMany', options: expect.not.objectContaining({ batchSize: expect.anything() }) },\n\t\t\t\t{ method: 'findMany', options: expect.not.objectContaining({ batchSize: expect.anything() }) },\n\t\t\t\t{ method: 'count' },\n\t\t\t])\n\t\t})\n\n\t\ttest('all().iterate validates batchSize before adapter iteration runs', async () => {\n\t\t\tconst TestSchema = Schema.from('iter_invalid_batch_users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tlet iterateManyCalls = 0\n\n\t\t\tclass IterAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync *iterateMany() {\n\t\t\t\t\titerateManyCalls += 1\n\t\t\t\t\tyield { id: 'u1', name: 'Alice' }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (IterAdapter as any)() as IterAdapter\n\t\t\tconst repo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\n\t\t\tfor (const batchSize of [0, -1, 1.5, Number.MAX_SAFE_INTEGER + 1, Number.POSITIVE_INFINITY, Number.NaN, '2'] as const) {\n\t\t\t\ttry {\n\t\t\t\t\tfor await (const _row of repo.on(TestSchema).all().iterate({ batchSize } as any)) {\n\t\t\t\t\t\tvoid _row\n\t\t\t\t\t}\n\t\t\t\t\texpect.unreachable(`batchSize ${String(batchSize)} should have failed`)\n\t\t\t\t} catch (error) {\n\t\t\t\t\texpect(error).toBeInstanceOf(OrmValidationError)\n\t\t\t\t\tconst err = error as InstanceType<typeof OrmValidationError>\n\t\t\t\t\texpect(err.kind).toBe('query-shape')\n\t\t\t\t\texpect(err.operation).toBe('iterate')\n\t\t\t\t\texpect(err.failures).toEqual([\n\t\t\t\t\t\texpect.objectContaining({ option: 'batchSize' }),\n\t\t\t\t\t])\n\t\t\t\t}\n\t\t\t}\n\t\t\texpect(iterateManyCalls).toBe(0)\n\t\t})\n\n\t\ttest('all().iterate yields selected and preloaded documents one at a time', async () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tlet preloadReads = 0\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((schema: AnySchema, config: any) => {\n\t\t\t\tconst use = origUse(schema, config)\n\t\t\t\treturn {\n\t\t\t\t\t...use,\n\t\t\t\t\tfindMany: async (...args: any[]) => {\n\t\t\t\t\t\tif (schema === PostSchema) preloadReads += 1\n\t\t\t\t\t\treturn use.findMany(...(args as [any, any]))\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t})\n\t\t\tconst repo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t\tconst alice = await repo.on(UserSchema).one().create({ email: 'alice@iter.com', name: 'Alice' })\n\t\t\tconst bob = await repo.on(UserSchema).one().create({ email: 'bob@iter.com', name: 'Bob' })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'A1', userId: alice.id })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'A2', userId: alice.id })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'B1', userId: bob.id })\n\n\t\t\tconst rows: any[] = []\n\t\t\tconst iterator = repo.on(UserSchema).all().orderBy('name', 'asc').select(['id', 'name']).preload([UserRels.posts]).iterate({ batchSize: 1 })\n\t\t\texpect(iterator[Symbol.asyncIterator]()).toBe(iterator)\n\t\t\tfor await (const row of iterator) rows.push(row)\n\n\t\t\texpect(rows).toHaveLength(2)\n\t\t\texpect(rows.map((row) => row.name)).toEqual(['Alice', 'Bob'])\n\t\t\texpect(rows[0]).not.toHaveProperty('email')\n\t\t\texpect(rows[0].posts.map((post) => post.title)).toEqual(['A1', 'A2'])\n\t\t\texpect(rows[1].posts.map((post) => post.title)).toEqual(['B1'])\n\t\t\texpect(preloadReads).toBe(2)\n\t\t})\n\n\t\ttest('all().iterate honors page-based offsets and validates read query shape', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo.on(UserSchema).all().create([\n\t\t\t\t{ email: 'u1@iter.com', name: 'A' },\n\t\t\t\t{ email: 'u2@iter.com', name: 'B' },\n\t\t\t\t{ email: 'u3@iter.com', name: 'C' },\n\t\t\t\t{ email: 'u4@iter.com', name: 'D' },\n\t\t\t\t{ email: 'u5@iter.com', name: 'E' },\n\t\t\t])\n\n\t\t\tconst paged: string[] = []\n\t\t\tfor await (const row of repo.on(UserSchema).all().orderBy('name', 'asc').limit(2).page(2).iterate()) {\n\t\t\t\tpaged.push(row.name)\n\t\t\t}\n\t\t\texpect(paged).toEqual(['C', 'D'])\n\n\t\t\ttry {\n\t\t\t\tfor await (const _row of repo.on(UserSchema).all().select(['missing' as any]).iterate()) {\n\t\t\t\t\tvoid _row\n\t\t\t\t}\n\t\t\t\texpect.unreachable('iterate should validate selected fields before reading')\n\t\t\t} catch (error) {\n\t\t\t\texpect(error).toBeInstanceOf(OrmValidationError)\n\t\t\t\texpect((error as InstanceType<typeof OrmValidationError>).kind).toBe('query-shape')\n\t\t\t}\n\t\t})\n\n\t\ttest('resolve chains adapter config transforms', async () => {\n\t\t\tconst seenConfigs: unknown[] = []\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((s: any, config: any) => {\n\t\t\t\tseenConfigs.push(config)\n\t\t\t\treturn origUse(s, config)\n\t\t\t})\n\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tawait repo.resolve(\n\t\t\t\t(config) => ({ table: `a_${config.table}` }),\n\t\t\t\tasync () => {\n\t\t\t\t\tawait repo.resolve(\n\t\t\t\t\t\t(config) => ({ table: `b_${config.table}` }),\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tawait repo.on(UserSchema).all().find()\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t)\n\n\t\t\texpect(seenConfigs[0]).toEqual({ table: 'b_a_users' })\n\t\t})\n\n\t\ttest('session returns callback value and persists writes', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tlet insertedId = ''\n\t\t\tconst result = await repo.session(async () => {\n\t\t\t\tconst inserted = await repo.on(UserSchema).one().create({ email: 't@test.com', name: 'TxUser' })\n\t\t\t\tinsertedId = inserted.id\n\t\t\t\treturn 42\n\t\t\t})\n\n\t\t\texpect(result).toBe(42)\n\t\t\texpect(await repo.on(UserSchema).one().id(insertedId).find()).not.toBeNull()\n\t\t})\n\n\t\ttest('preloads can be resolved on mutation methods', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst org = await repo.on(OrgSchema).one().create({ name: 'Corp' })\n\t\t\tconst user = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.preload([UserRels.org])\n\t\t\t\t.create({ email: 'u@test.com', name: 'User', orgId: org.id })\n\t\t\texpect((user.org as any).name).toBe('Corp')\n\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'Post', userId: user.id })\n\t\t\tconst updated = await repo.on(UserSchema).one().id(user.id).preload([UserRels.posts]).update({ name: 'Updated' })\n\t\t\texpect(updated?.posts).toHaveLength(1)\n\t\t})\n\n\t\ttest('in-memory adapter without crud.raw collapses schemaRef.raw to never', () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst ref = repo.on(UserSchema)\n\t\t\texpectTypeOf(ref.raw).toBeNever()\n\t\t})\n\n\t\ttest('raw forwards user args through adapter.use to adapter.raw', async () => {\n\t\t\tlet capturedArgs: unknown[] = []\n\t\t\tconst spy = mockInstance()\n\t\t\tclass RawAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync raw(_s: any, _c: any, command: string, params: unknown[]) {\n\t\t\t\t\tcapturedArgs = [_s, _c, command, params]\n\t\t\t\t\treturn { rows: [{ id: '1' }] }\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst rawAdapter = new (RawAdapter as any)() as InstanceType<typeof RawAdapter>\n\t\t\tspy.mockRestore()\n\n\t\t\tconst repo = Repo.from(rawAdapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t\tconst TestSchema = Schema.from('raw_test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\n\t\t\tconst result = await repo.on(TestSchema).raw('SELECT * FROM raw_test WHERE id = $1', ['abc'])\n\t\t\texpect(capturedArgs[0]).toBe(TestSchema)\n\t\t\texpect(capturedArgs[1]).toEqual({ table: 'raw_test' })\n\t\t\texpect(capturedArgs[2]).toBe('SELECT * FROM raw_test WHERE id = $1')\n\t\t\texpect(capturedArgs[3]).toEqual(['abc'])\n\t\t\texpect(result).toEqual({ rows: [{ id: '1' }] })\n\t\t})\n\n\t\ttest('raw with single-arg adapter (mongo-style) forwards correctly', async () => {\n\t\t\tlet capturedPipeline: unknown = undefined\n\t\t\tconst spy = mockInstance()\n\t\t\tclass MongoStyleAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ col: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync raw(_s: any, _c: any, pipeline: Record<string, unknown>[]) {\n\t\t\t\t\tcapturedPipeline = pipeline\n\t\t\t\t\treturn [{ total: 42 }]\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst mongoStyleAdapter = new (MongoStyleAdapter as any)() as InstanceType<typeof MongoStyleAdapter>\n\t\t\tspy.mockRestore()\n\n\t\t\tconst repo = Repo.from(mongoStyleAdapter)\n\t\t\t\t.resolve(() => ({ col: 'test' }))\n\t\t\t\t.build()\n\t\t\tconst TestSchema = Schema.from('mongo_test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\n\t\t\tconst result = await repo.on(TestSchema).raw([{ $count: 'total' }])\n\t\t\texpect(capturedPipeline).toEqual([{ $count: 'total' }])\n\t\t\texpect(result).toEqual([{ total: 42 }])\n\t\t})\n\n\t\ttest('computed fields are derived and shaped correctly when selected', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst created = await repo.on(PersonSchema).one().create({ firstName: 'Ada', lastName: 'Lovelace' })\n\t\t\tconst rows = await repo.on(PersonSchema).all().select(['id', 'fullName']).find()\n\n\t\t\texpect(rows).toEqual([{ id: created.id, fullName: 'Ada Lovelace' }])\n\t\t})\n\n\t\ttest('computed field selection auto-includes dependencies for adapter reads', async () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\tlet seenSelect: string[] | undefined\n\t\t\t;(adapter as any).use = vi.fn((schema: any, config: any) => {\n\t\t\t\tconst use = origUse(schema, config)\n\t\t\t\treturn {\n\t\t\t\t\t...use,\n\t\t\t\t\tfindMany: async (filter: any, options: any) => {\n\t\t\t\t\t\tseenSelect = options?.select as string[] | undefined\n\t\t\t\t\t\treturn use.findMany(filter, options)\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t\tawait repo.on(PersonSchema).one().create({ firstName: 'Grace', lastName: 'Hopper' })\n\t\t\tawait repo.on(PersonSchema).all().select(['id', 'fullName']).find()\n\n\t\t\texpect(seenSelect).toEqual(expect.arrayContaining(['id', 'firstName', 'lastName']))\n\t\t})\n\n\t\ttest('unknown selected fields fail fast', async () => {\n\t\t\tconst { EquippedError } = await import('../../errors')\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo.on(PersonSchema).one().create({ firstName: 'Ada', lastName: 'Lovelace' })\n\n\t\t\tawait expect(\n\t\t\t\trepo\n\t\t\t\t\t.on(PersonSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.select(['unknownField' as any])\n\t\t\t\t\t.find(),\n\t\t\t).rejects.toBeInstanceOf(EquippedError)\n\t\t})\n\n\t\ttest('missing computed dependencies in adapter output fail fast', async () => {\n\t\t\tconst { EquippedError } = await import('../../errors')\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((schema: any, config: any) => {\n\t\t\t\tconst use = origUse(schema, config)\n\t\t\t\treturn {\n\t\t\t\t\t...use,\n\t\t\t\t\tfindMany: async (filter: any, options: any) => {\n\t\t\t\t\t\tconst rows = await use.findMany(filter, options)\n\t\t\t\t\t\treturn rows.map((row: any) => {\n\t\t\t\t\t\t\tconst next = { ...row }\n\t\t\t\t\t\t\tdelete (next as any).lastName\n\t\t\t\t\t\t\treturn next\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t\tawait repo.on(PersonSchema).one().create({ firstName: 'Katherine', lastName: 'Johnson' })\n\n\t\t\tawait expect(repo.on(PersonSchema).all().select(['fullName']).find()).rejects.toBeInstanceOf(EquippedError)\n\t\t})\n\n\t\ttest('one().id().find() returns seeded document and null for missing', async () => {\n\t\t\tconst TestSchema = Schema.from('findbytest')\n\t\t\t\t.pk('id', v.string(), () => 'gen')\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tconst use = adapter.use(TestSchema, { table: 'findbytest' })\n\t\t\tawait use.createOne({ id: 'x' })\n\n\t\t\tconst found = await repo.on(TestSchema).one().id('x').find()\n\t\t\texpect(found).toEqual({ id: 'x' })\n\n\t\t\tconst missing = await repo.on(TestSchema).one().id('missing').find()\n\t\t\texpect(missing).toBeNull()\n\t\t})\n\n\t\tdescribe('schema-per-call create path', () => {\n\t\t\ttest('createOne round-trip via one().id().find()', async () => {\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\tconst inserted = await repo.on(UserSchema).one().create({ email: 'rt@test.com', name: 'RoundTrip' })\n\t\t\t\texpect(inserted.email).toBe('rt@test.com')\n\t\t\t\texpect(inserted.name).toBe('RoundTrip')\n\t\t\t\texpect(inserted.id).toBeDefined()\n\n\t\t\t\tconst found = await repo.on(UserSchema).one().id(inserted.id).find()\n\t\t\t\texpect(found).not.toBeNull()\n\t\t\t\texpect(found!.id).toBe(inserted.id)\n\t\t\t\texpect(found!.email).toBe('rt@test.com')\n\t\t\t})\n\n\t\t\ttest('createOne injects onCreate defaults for missing fields', async () => {\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\tconst inserted = await repo.on(UserSchema).one().create({ email: 'defaults@test.com', name: 'Defaults' })\n\t\t\t\texpect(inserted.createdAt).toBe(1000)\n\t\t\t\texpect(inserted.id).toBeDefined()\n\t\t\t})\n\n\t\t\ttest('createOne throws OrmValidationError with kind validation and field populated', async () => {\n\t\t\t\tconst { OrmValidationError } = await import('../errors')\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).one().create({ email: 123 as any, name: 'Bad' })\n\t\t\t\t\texpect.unreachable()\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\t\texpect(err.operation).toBe('createOne')\n\t\t\t\t\texpect(err.schema).toBe('users')\n\t\t\t\t\texpect(err.failures.length).toBeGreaterThan(0)\n\t\t\t\t\texpect(err.failures[0].field).toBe('email')\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttest('createMany round-trip via one().id().find()', async () => {\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\tconst inserted = await repo.on(UserSchema).all().create([\n\t\t\t\t\t{ email: 'a@test.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'b@test.com', name: 'Bob' },\n\t\t\t\t])\n\t\t\t\texpect(inserted).toHaveLength(2)\n\n\t\t\t\tconst foundA = await repo.on(UserSchema).one().id(inserted[0].id).find()\n\t\t\t\tconst foundB = await repo.on(UserSchema).one().id(inserted[1].id).find()\n\t\t\t\texpect(foundA!.email).toBe('a@test.com')\n\t\t\t\texpect(foundB!.email).toBe('b@test.com')\n\t\t\t})\n\n\t\t\ttest('createMany collects all failures with rowIndex and throws single OrmValidationError', async () => {\n\t\t\t\tconst { OrmValidationError } = await import('../errors')\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).all().create([\n\t\t\t\t\t\t{ email: 'good@test.com', name: 'Good' },\n\t\t\t\t\t\t{ email: 123 as any, name: 'Bad' },\n\t\t\t\t\t\t{ email: 'also-bad' as any, name: 456 as any },\n\t\t\t\t\t])\n\t\t\t\t\texpect.unreachable()\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\t\texpect(err.operation).toBe('createMany')\n\t\t\t\t\texpect(err.schema).toBe('users')\n\t\t\t\t\tconst rowIndices = err.failures.map((f) => f.rowIndex)\n\t\t\t\t\texpect(rowIndices).toContain(1)\n\t\t\t\t\texpect(rowIndices).toContain(2)\n\t\t\t\t\texpect(rowIndices).not.toContain(0)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttest('one().id().find() returns null for non-existent pk', async () => {\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\tconst result = await repo.on(UserSchema).one().id('nonexistent').find()\n\t\t\t\texpect(result).toBeNull()\n\t\t\t})\n\n\t\t\ttest('createMany with onCreate defaults applied to all rows', async () => {\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\tconst inserted = await repo.on(UserSchema).all().create([\n\t\t\t\t\t{ email: 'x@test.com', name: 'X' },\n\t\t\t\t\t{ email: 'y@test.com', name: 'Y' },\n\t\t\t\t])\n\t\t\t\texpect(inserted[0].createdAt).toBe(1000)\n\t\t\t\texpect(inserted[1].createdAt).toBe(1000)\n\t\t\t\texpect(inserted[0].id).toBeDefined()\n\t\t\t\texpect(inserted[1].id).toBeDefined()\n\t\t\t})\n\t\t})\n\n\t\ttest('one().id().delete() removes and returns document, null for missing', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst user = await repo.on(UserSchema).one().create({ email: 'del@test.com', name: 'ToDelete' })\n\n\t\t\tconst deleted = await repo.on(UserSchema).one().id(user.id).delete()\n\t\t\texpect(deleted).toEqual(expect.objectContaining({ id: user.id, name: 'ToDelete' }))\n\n\t\t\tconst found = await repo.on(UserSchema).one().id(user.id).find()\n\t\t\texpect(found).toBeNull()\n\n\t\t\tconst missing = await repo.on(UserSchema).one().id('nonexistent').delete()\n\t\t\texpect(missing).toBeNull()\n\t\t})\n\n\t\ttest('one().where().update() updates first matching document via filter', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@test.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'b@test.com', name: 'Bob' },\n\t\t\t\t])\n\n\t\t\tconst updated = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('name', 'Alice'))\n\t\t\t\t.update({ name: 'Alicia' })\n\t\t\texpect(updated?.name).toBe('Alicia')\n\t\t})\n\n\t\ttest('one().where().update() with non-unique filter selects first match', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@test.com', name: 'Same' },\n\t\t\t\t\t{ email: 'b@test.com', name: 'Same' },\n\t\t\t\t])\n\n\t\t\tconst updated = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('name', 'Same'))\n\t\t\t\t.update({ name: 'Changed' })\n\t\t\texpect(updated?.name).toBe('Changed')\n\n\t\t\tconst all = await repo.on(UserSchema).all().find()\n\t\t\tconst changedCount = all.filter((u) => u.name === 'Changed').length\n\t\t\texpect(changedCount).toBe(1)\n\t\t})\n\n\t\ttest('all().where().update() updates all matching documents', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@test.com', name: 'Same' },\n\t\t\t\t\t{ email: 'b@test.com', name: 'Same' },\n\t\t\t\t\t{ email: 'c@test.com', name: 'Different' },\n\t\t\t\t])\n\n\t\t\tconst updated = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('name', 'Same'))\n\t\t\t\t.update({ name: 'Updated' })\n\t\t\texpect(updated).toHaveLength(2)\n\t\t\texpect(updated.every((u) => u.name === 'Updated')).toBe(true)\n\t\t})\n\n\t\ttest('all().where().update() applies auto-bump for onUpdate fields', async () => {\n\t\t\tconst AutoSchema = Schema.from('auto')\n\t\t\t\t.pk('id', v.string(), () => `a${++userCounter}`)\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.field('updatedAt', v.number(), { onCreate: () => 0, onUpdate: () => 9999 })\n\t\t\t\t.build()\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo.on(AutoSchema).one().create({ name: 'A' })\n\n\t\t\tconst updated = await repo\n\t\t\t\t.on(AutoSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('name', 'A'))\n\t\t\t\t.update({ name: 'B' })\n\t\t\texpect(updated[0].updatedAt).toBe(9999)\n\t\t})\n\n\t\ttest('one().where().delete() removes first matching document', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@test.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'b@test.com', name: 'Bob' },\n\t\t\t\t])\n\n\t\t\tconst deleted = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('name', 'Alice'))\n\t\t\t\t.delete()\n\t\t\texpect(deleted?.name).toBe('Alice')\n\n\t\t\tconst remaining = await repo.on(UserSchema).all().find()\n\t\t\texpect(remaining).toHaveLength(1)\n\t\t})\n\n\t\ttest('all().where().delete() removes all matching and returns them', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@test.com', name: 'ToDelete' },\n\t\t\t\t\t{ email: 'b@test.com', name: 'ToDelete' },\n\t\t\t\t\t{ email: 'c@test.com', name: 'Keep' },\n\t\t\t\t])\n\n\t\t\tconst deleted = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('name', 'ToDelete'))\n\t\t\t\t.delete()\n\t\t\texpect(deleted).toHaveLength(2)\n\n\t\t\tconst remaining = await repo.on(UserSchema).all().find()\n\t\t\texpect(remaining).toHaveLength(1)\n\t\t\texpect(remaining[0].name).toBe('Keep')\n\t\t})\n\n\t\ttest('round-trip update via filter preserves data integrity', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst user = await repo.on(UserSchema).one().create({ email: 'rt@test.com', name: 'Original' })\n\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('id', user.id))\n\t\t\t\t.update({ name: 'Modified' })\n\n\t\t\tconst found = await repo.on(UserSchema).one().id(user.id).find()\n\t\t\texpect(found?.name).toBe('Modified')\n\t\t\texpect(found?.email).toBe('rt@test.com')\n\t\t})\n\t})\n\n\tdescribe('type-level: per-op gating on FilterGroup', () => {\n\t\ttest('undeclared filter op is never on GatedFilterGroup', () => {\n\t\t\tconst { GatedFilterGroup: _type } = {} as any\n\t\t\ttype EqOnlyOps = readonly ['eq']\n\t\t\ttype Gated = import('../filter').GatedFilterGroup<EqOnlyOps>\n\t\t\texpectTypeOf<Gated['eq']>().not.toBeNever()\n\t\t\texpectTypeOf<Gated['ne']>().toBeNever()\n\t\t\texpectTypeOf<Gated['gt']>().toBeNever()\n\t\t\texpectTypeOf<Gated['and']>().not.toBeNever()\n\t\t\texpectTypeOf<Gated['or']>().not.toBeNever()\n\t\t})\n\n\t\ttest('all declared ops are available, undeclared are never', () => {\n\t\t\ttype TwoOps = readonly ['eq', 'gt']\n\t\t\ttype Gated = import('../filter').GatedFilterGroup<TwoOps>\n\t\t\texpectTypeOf<Gated['eq']>().not.toBeNever()\n\t\t\texpectTypeOf<Gated['gt']>().not.toBeNever()\n\t\t\texpectTypeOf<Gated['ne']>().toBeNever()\n\t\t\texpectTypeOf<Gated['lt']>().toBeNever()\n\t\t\texpectTypeOf<Gated['in']>().toBeNever()\n\t\t})\n\t})\n\n\tdescribe('type-level: missing queryableOps yields empty ops', () => {\n\t\ttest('adapter without queryableOps yields empty InferAdapterQueryableOps', () => {\n\t\t\tclass MinimalAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = [] as const\n\t\t\t}\n\t\t\ttype Ops = import('../adapter').InferAdapterQueryableOps<MinimalAdapter>\n\t\t\texpectTypeOf<Ops>().toEqualTypeOf<readonly []>()\n\t\t})\n\t})\n\n\tdescribe('type-level: method gating via class-based adapter', () => {\n\t\ttest('adapter with findMany enables all().find()', () => {\n\t\t\tclass FindAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = FindAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<All['find']>().toBeFunction()\n\t\t})\n\n\t\ttest('adapter with iterateMany enables all().iterate(options?)', () => {\n\t\t\tclass IterateAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync *iterateMany() {}\n\t\t\t}\n\t\t\ttype A = IterateAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<All['iterate']>().toBeFunction()\n\t\t\texpectTypeOf<Parameters<All['iterate']>>().toEqualTypeOf<[options?: IterationOptions]>()\n\t\t\texpectTypeOf<ReturnType<All['iterate']>>().toEqualTypeOf<AsyncGenerator<import('./internals/types').SelectedWithPreloads<S, never, []>, void, void>>()\n\t\t})\n\n\t\ttest('iterate exists only on AllBuilder and has no CDC-style sibling methods', () => {\n\t\t\tclass IterateAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync *iterateMany() {}\n\t\t\t}\n\t\t\ttype A = IterateAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\ttype OneHasIterate = 'iterate' extends keyof One ? true : false\n\t\t\ttype CdcKeys = Extract<'stream' | 'watch' | 'subscribe' | 'changeFeed', keyof All>\n\t\t\texpectTypeOf<OneHasIterate>().toEqualTypeOf<false>()\n\t\t\texpectTypeOf<CdcKeys>().toBeNever()\n\t\t})\n\n\t\ttest('missing iterateMany collapses all().iterate to never', () => {\n\t\t\tclass FindOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = FindOnlyAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<All['iterate']>().toBeNever()\n\t\t})\n\n\t\ttest('missing updateMany collapses one().update and all().update to never', () => {\n\t\t\tclass ReadOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = ReadOnlyAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['update']>().toBeNever()\n\t\t\texpectTypeOf<All['update']>().toBeNever()\n\t\t})\n\n\t\ttest('missing deleteMany collapses one().delete and all().delete to never', () => {\n\t\t\tclass NoDeleteAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = NoDeleteAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['delete']>().toBeNever()\n\t\t\texpectTypeOf<All['delete']>().toBeNever()\n\t\t})\n\n\t\ttest('missing raw collapses schemaRef.raw to never', () => {\n\t\t\tclass NoRawAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = NoRawAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['raw']>().toBeNever()\n\t\t})\n\n\t\ttest('missing upsertOne collapses one().upsert to never', () => {\n\t\t\tclass NoUpsertAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = NoUpsertAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['upsert']>().toBeNever()\n\t\t})\n\n\t\ttest('adapter with updateMany enables one().update and all().update', () => {\n\t\t\tclass WithUpdateAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync updateMany() { return [] }\n\t\t\t}\n\t\t\ttype A = WithUpdateAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['update']>().toBeFunction()\n\t\t\texpectTypeOf<All['update']>().toBeFunction()\n\t\t})\n\n\t\ttest('adapter with deleteMany enables one().delete and all().delete', () => {\n\t\t\tclass WithDeleteAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync deleteMany() { return [] }\n\t\t\t}\n\t\t\ttype A = WithDeleteAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['delete']>().toBeFunction()\n\t\t\texpectTypeOf<All['delete']>().toBeFunction()\n\t\t})\n\n\t\ttest('missing count collapses all().count to never', () => {\n\t\t\tclass NoCountAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = NoCountAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<All['count']>().toBeNever()\n\t\t})\n\n\t\ttest('adapter with count enables all().count', () => {\n\t\t\tclass WithCountAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync count() { return 0 }\n\t\t\t}\n\t\t\ttype A = WithCountAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<All['count']>().toBeFunction()\n\t\t})\n\n\t\ttest('adapter with raw enables schemaRef.raw', () => {\n\t\t\tclass WithRawAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync raw(_s: any, _c: any, _command: string) { return { rows: [] } }\n\t\t\t}\n\t\t\ttype A = WithRawAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['raw']>().toBeFunction()\n\t\t})\n\n\t\ttest('adapter raw signature drives arg-tuple inference on schemaRef.raw', () => {\n\t\t\tclass TypedRawAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync raw(_s: any, _c: any, _sql: string, _params: number[]) { return [42] }\n\t\t\t}\n\t\t\ttype A = TypedRawAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['raw']>().toBeFunction()\n\t\t\texpectTypeOf<Ref['raw']>().parameters.toEqualTypeOf<[sql: string, params: number[]]>()\n\t\t})\n\n\t\ttest('per-call <T> override narrows raw return type', () => {\n\t\t\tclass DefaultRawAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync raw(_s: any, _c: any, _sql: string) { return { rows: [] as unknown[] } }\n\t\t\t}\n\t\t\ttype A = DefaultRawAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['raw']>().toBeFunction()\n\t\t\texpectTypeOf<Ref['raw']>().parameters.toEqualTypeOf<[sql: string]>()\n\t\t})\n\n\t\ttest('adapter with zero-arg raw infers empty arg tuple', () => {\n\t\t\tclass ZeroArgRawAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync raw(_s: any, _c: any) { return 'pong' }\n\t\t\t}\n\t\t\ttype A = ZeroArgRawAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['raw']>().parameters.toEqualTypeOf<[]>()\n\t\t\texpectTypeOf<Ref['raw']>().toBeFunction()\n\t\t})\n\n\t\ttest('gating survives through select() chains', () => {\n\t\t\tclass MinimalAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t}\n\t\t\ttype A = MinimalAdapter\n\t\t\tconst _TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\ttype S = typeof _TestSchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A, 'id'>\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A, 'id'>\n\t\t\texpectTypeOf<One['update']>().toBeNever()\n\t\t\texpectTypeOf<One['delete']>().toBeNever()\n\t\t\texpectTypeOf<All['update']>().toBeNever()\n\t\t\texpectTypeOf<All['delete']>().toBeNever()\n\t\t})\n\t})\n\n\tdescribe('type-level: aggregate gating', () => {\n\t\ttest('adapter with aggregateOps = [] narrows repo.on(S).aggregate to never', () => {\n\t\t\tclass EmptyAggAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly aggregateOps = [] as const\n\t\t\t}\n\t\t\ttype A = EmptyAggAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['aggregate']>().toBeNever()\n\t\t})\n\n\t\ttest('adapter with aggregate method and non-empty aggregateOps narrows to callable', () => {\n\t\t\tclass FullAggAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly aggregateOps = ['count', 'sum'] as const\n\t\t\t\tasync aggregate() { return [] }\n\t\t\t}\n\t\t\ttype A = FullAggAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['aggregate']>().toBeFunction()\n\t\t})\n\n\t\ttest('adapter with aggregate method but empty aggregateOps narrows to never', () => {\n\t\t\tclass MethodOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly aggregateOps = [] as const\n\t\t\t\tasync aggregate() { return [] }\n\t\t\t}\n\t\t\ttype A = MethodOnlyAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['aggregate']>().toBeNever()\n\t\t})\n\n\t\ttest('adapter with non-empty aggregateOps but no aggregate method narrows to never', () => {\n\t\t\tclass OpsOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly aggregateOps = ['count'] as const\n\t\t\t}\n\t\t\ttype A = OpsOnlyAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['aggregate']>().toBeNever()\n\t\t})\n\n\t\ttest('default aggregateOps on OrmAdapter is empty, so aggregate is never by default', () => {\n\t\t\tclass DefaultAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t}\n\t\t\ttype A = DefaultAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['aggregate']>().toBeNever()\n\t\t})\n\t})\n\n\tdescribe('type-level: AggregateBuilder', () => {\n\t\tclass AggAdapter extends OrmAdapter {\n\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\treadonly supportedFieldTypes = ['string', 'number', 'boolean', 'object', 'array'] as const\n\t\t\treadonly aggregateOps = ['count', 'countDistinct', 'sum', 'avg', 'min', 'max'] as const\n\t\t\tasync aggregate() { return [] }\n\t\t}\n\t\tconst _S = Schema.from('items')\n\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t.field('name', v.string())\n\t\t\t.field('amount', v.number())\n\t\t\t.field('active', v.boolean())\n\t\t\t.field('tags', v.array(v.string()))\n\t\t\t.field('meta', v.object({ x: v.number() }))\n\t\t\t.build()\n\t\ttype S = typeof _S\n\t\ttype A = AggAdapter\n\t\ttype Builder = import('./builders').AggregateBuilder<S, A, {}, {}, false>\n\n\t\ttest('.count(alias) adds alias to result type as number', () => {\n\t\t\ttype AfterCount = ReturnType<Builder['count']>\n\t\t\ttype Result = Awaited<ReturnType<AfterCount['run']>>\n\t\t\texpectTypeOf<Result>().toHaveProperty('total')\n\t\t})\n\n\t\ttest('duplicate alias: \"a\" extends keyof Aggs triggers never guard', () => {\n\t\t\ttype AggsWithA = { a: number }\n\t\t\ttype DuplicateGuard = 'a' extends keyof AggsWithA ? [never] : [alias: 'a']\n\t\t\texpectTypeOf<DuplicateGuard>().toEqualTypeOf<[never]>()\n\t\t})\n\n\t\ttest('.run() on empty Aggs requires never arg (compile error gate)', () => {\n\t\t\ttype RunParams = Parameters<Builder['run']>\n\t\t\texpectTypeOf<RunParams>().toEqualTypeOf<[never]>()\n\t\t})\n\n\t\ttest('.run() on non-empty Aggs takes no args', () => {\n\t\t\ttype WithCount = import('./builders').AggregateBuilder<S, A, { total: number }, {}, false>\n\t\t\ttype RunParams = Parameters<WithCount['run']>\n\t\t\texpectTypeOf<RunParams>().toEqualTypeOf<[]>()\n\t\t})\n\n\t\ttest('.run() returns single object when HasGroupBy = false', () => {\n\t\t\ttype WithCount = import('./builders').AggregateBuilder<S, A, { total: number }, {}, false>\n\t\t\ttype Result = Awaited<ReturnType<WithCount['run']>>\n\t\t\texpectTypeOf<Result>().toEqualTypeOf<{ total: number }>()\n\t\t})\n\n\t\ttest('.run() returns array when HasGroupBy = true', () => {\n\t\t\ttype WithGroupBy = import('./builders').AggregateBuilder<S, A, { total: number }, { name: string }, true>\n\t\t\ttype Result = Awaited<ReturnType<WithGroupBy['run']>>\n\t\t\texpectTypeOf<Result>().toEqualTypeOf<({ total: number } & { name: string })[]>()\n\t\t})\n\n\t\ttest('group-key fields appear in result row with schema-declared types', () => {\n\t\t\ttype WithGroupBy = import('./builders').AggregateBuilder<S, A, { total: number }, { name: string; amount: number }, true>\n\t\t\ttype Result = Awaited<ReturnType<WithGroupBy['run']>>\n\t\t\ttype Row = Result[number]\n\t\t\texpectTypeOf<Row>().toHaveProperty('total')\n\t\t\texpectTypeOf<Row>().toHaveProperty('name')\n\t\t\texpectTypeOf<Row>().toHaveProperty('amount')\n\t\t})\n\n\t\ttest('.sum rejects string field (field-type constraint)', () => {\n\t\t\ttype SumFieldParam = Parameters<Builder['sum']>[0]\n\t\t\ttype IsAccepted = typeof _S.fields.name extends SumFieldParam ? true : false\n\t\t\texpectTypeOf<IsAccepted>().toEqualTypeOf<false>()\n\t\t})\n\n\t\ttest('.avg rejects string field (field-type constraint)', () => {\n\t\t\ttype AvgFieldParam = Parameters<Builder['avg']>[0]\n\t\t\ttype IsAccepted = typeof _S.fields.name extends AvgFieldParam ? true : false\n\t\t\texpectTypeOf<IsAccepted>().toEqualTypeOf<false>()\n\t\t})\n\n\t\ttest('.min rejects array field', () => {\n\t\t\ttype MinFieldParam = Parameters<Builder['min']>[0]\n\t\t\ttype IsAccepted = typeof _S.fields.tags extends MinFieldParam ? true : false\n\t\t\texpectTypeOf<IsAccepted>().toEqualTypeOf<false>()\n\t\t})\n\n\t\ttest('.max rejects object field', () => {\n\t\t\ttype MaxFieldParam = Parameters<Builder['max']>[0]\n\t\t\ttype IsAccepted = typeof _S.fields.meta extends MaxFieldParam ? true : false\n\t\t\texpectTypeOf<IsAccepted>().toEqualTypeOf<false>()\n\t\t})\n\n\t\ttest('.where().where() is a compile error', () => {\n\t\t\ttype AfterWhere = import('./builders').AggregateBuilder<S, A, {}, {}, false, true, false>\n\t\t\ttype WhereParams = Parameters<AfterWhere['where']>\n\t\t\texpectTypeOf<WhereParams>().toEqualTypeOf<[never]>()\n\t\t})\n\n\t\ttest('.having().having() is a compile error', () => {\n\t\t\ttype AfterHaving = import('./builders').AggregateBuilder<S, A, {}, {}, false, false, true>\n\t\t\ttype HavingParams = Parameters<AfterHaving['having']>\n\t\t\texpectTypeOf<HavingParams>().toEqualTypeOf<[never]>()\n\t\t})\n\n\t\ttest('.groupBy().groupBy() is a compile error', () => {\n\t\t\ttype AfterGroupBy = import('./builders').AggregateBuilder<S, A, {}, { name: string }, true, false, false>\n\t\t\ttype GroupByParams = Parameters<AfterGroupBy['groupBy']>\n\t\t\texpectTypeOf<GroupByParams>().toEqualTypeOf<[never]>()\n\t\t})\n\n\t\ttest('clone-on-step: .where() returns a new builder', () => {\n\t\t\ttype After = ReturnType<Builder['where']>\n\t\t\texpectTypeOf<After>().toMatchTypeOf<import('./builders').AggregateBuilder<S, A, {}, {}, false, true, false>>()\n\t\t})\n\t})\n\n\tdescribe('repo.on().all().where().find() end-to-end', () => {\n\t\tconst TestSchema = Schema.from('e2e')\n\t\t\t.pk('id', v.string(), () => `e-${Math.random().toString(36).slice(2)}`)\n\t\t\t.field('name', v.string())\n\t\t\t.field('age', v.number())\n\t\t\t.field('active', v.boolean())\n\t\t\t.field('tags', v.array(v.string()))\n\t\t\t.field('score', v.optional(v.number()), { onCreate: () => undefined })\n\t\t\t.build()\n\n\t\tfunction makeE2eRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t\treturn { repo, adapter }\n\t\t}\n\n\t\tasync function seedData(repo: any) {\n\t\t\tawait repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ name: 'Alice', age: 30, active: true, tags: ['admin', 'user'] },\n\t\t\t\t\t{ name: 'Bob', age: 20, active: false, tags: ['user'] },\n\t\t\t\t\t{ name: 'Carol', age: 40, active: true, tags: ['admin'] },\n\t\t\t\t\t{ name: 'Dave', age: 25, active: true, tags: ['user', 'guest'], score: 100 },\n\t\t\t\t])\n\t\t}\n\n\t\ttest('all().where().find() returns matching documents', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq(TestSchema.fields.active, true))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(3)\n\t\t\texpect(results.every((r) => r.active === true)).toBe(true)\n\t\t})\n\n\t\ttest('one().where().find() returns first matching document', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq(TestSchema.fields.name, 'Bob'))\n\t\t\t\t.find()\n\t\t\texpect(result).not.toBeNull()\n\t\t\texpect(result!.name).toBe('Bob')\n\t\t})\n\n\t\ttest('one().where().find() returns null when no match', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq(TestSchema.fields.name, 'Nobody'))\n\t\t\t\t.find()\n\t\t\texpect(result).toBeNull()\n\t\t})\n\n\t\ttest('eq filter op matches exact value', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq(TestSchema.fields.age, 30))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(1)\n\t\t\texpect(results[0].name).toBe('Alice')\n\t\t})\n\n\t\ttest('ne filter op excludes matching values', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.ne(TestSchema.fields.name, 'Alice'))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(3)\n\t\t\texpect(results.every((r) => r.name !== 'Alice')).toBe(true)\n\t\t})\n\n\t\ttest('gt filter op matches values greater than', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.gt(TestSchema.fields.age, 25))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Alice', 'Carol'])\n\t\t})\n\n\t\ttest('gte filter op matches values greater than or equal', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.gte(TestSchema.fields.age, 30))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Alice', 'Carol'])\n\t\t})\n\n\t\ttest('lt filter op matches values less than', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.lt(TestSchema.fields.age, 25))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(1)\n\t\t\texpect(results[0].name).toBe('Bob')\n\t\t})\n\n\t\ttest('lte filter op matches values less than or equal', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.lte(TestSchema.fields.age, 25))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Bob', 'Dave'])\n\t\t})\n\n\t\ttest('in filter op matches values in array', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.in(TestSchema.fields.name, ['Alice', 'Carol']))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Alice', 'Carol'])\n\t\t})\n\n\t\ttest('notIn filter op excludes values in array', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.notIn(TestSchema.fields.name, ['Alice', 'Carol']))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Bob', 'Dave'])\n\t\t})\n\n\t\ttest('like filter op matches substring case-insensitively', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.like(TestSchema.fields.name, 'ali'))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(1)\n\t\t\texpect(results[0].name).toBe('Alice')\n\t\t})\n\n\t\ttest('exists filter op matches non-null values', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.exists(TestSchema.fields.score))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(1)\n\t\t\texpect(results[0].name).toBe('Dave')\n\t\t})\n\n\t\ttest('notExists filter op matches null/undefined values', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.notExists(TestSchema.fields.score))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(3)\n\t\t})\n\n\t\ttest('contains filter op matches array subset', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.contains('tags', ['admin']))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Alice', 'Carol'])\n\t\t})\n\n\t\ttest('notContains filter op excludes array subset', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.notContains('tags', ['admin']))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Bob', 'Dave'])\n\t\t})\n\n\t\ttest('and combinator requires all conditions', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.and([(g) => g.gt(TestSchema.fields.age, 20), (g) => g.eq(TestSchema.fields.active, true)]))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Alice', 'Carol', 'Dave'])\n\t\t})\n\n\t\ttest('or combinator matches any condition', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.or([(g) => g.eq(TestSchema.fields.name, 'Alice'), (g) => g.eq(TestSchema.fields.name, 'Bob')]))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Alice', 'Bob'])\n\t\t})\n\n\t\ttest('raw-string field overload works end-to-end', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('name', 'Alice'))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(1)\n\t\t\texpect(results[0].name).toBe('Alice')\n\t\t})\n\n\t\ttest('empty and([]) throws at builder time', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\texpect(() =>\n\t\t\t\trepo\n\t\t\t\t\t.on(TestSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.where((q) => q.and([]))\n\t\t\t\t\t.find(),\n\t\t\t).toThrow()\n\t\t})\n\n\t\ttest('empty or([]) throws at builder time', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\texpect(() =>\n\t\t\t\trepo\n\t\t\t\t\t.on(TestSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.where((q) => q.or([]))\n\t\t\t\t\t.find(),\n\t\t\t).toThrow()\n\t\t})\n\n\t\ttest('unknown field in filter throws OrmValidationError at boundary', async () => {\n\t\t\tconst { OrmValidationError: OrmValErr } = await import('../errors')\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tawait expect(\n\t\t\t\trepo\n\t\t\t\t\t.on(TestSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.where((q) => q.eq('nonexistentField', 42))\n\t\t\t\t\t.find(),\n\t\t\t).rejects.toBeInstanceOf(OrmValErr)\n\t\t})\n\t})\n\n\tdescribe('one().id().update() (replaces updateByPk)', () => {\n\t\tlet viewCounter = 0\n\t\tconst ItemSchema = Schema.from('items')\n\t\t\t.pk('id', v.string(), () => `item-${++viewCounter}`)\n\t\t\t.field('title', v.string())\n\t\t\t.field('views', v.number())\n\t\t\t.field('updatedAt', v.number(), { onCreate: () => 1000, onUpdate: () => Date.now() })\n\t\t\t.build()\n\n\t\tfunction makeUpdateRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\treturn Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t}\n\n\t\ttest('round-trip update via one().id().update()', async () => {\n\t\t\tconst repo = makeUpdateRepo()\n\t\t\tconst item = await repo.on(ItemSchema).one().create({ title: 'Hello', views: 0 })\n\t\t\tconst updated = await repo.on(ItemSchema).one().id(item.id).update({ title: 'Updated' })\n\t\t\texpect(updated).not.toBeNull()\n\t\t\texpect(updated!.title).toBe('Updated')\n\t\t\texpect(updated!.views).toBe(0)\n\n\t\t\tconst found = await repo.on(ItemSchema).one().id(item.id).find()\n\t\t\texpect(found!.title).toBe('Updated')\n\t\t})\n\n\t\ttest('auto-bump injects updatedAt on un-touched onUpdate field', async () => {\n\t\t\tconst repo = makeUpdateRepo()\n\t\t\tconst item = await repo.on(ItemSchema).one().create({ title: 'Hello', views: 0 })\n\t\t\tconst before = item.updatedAt\n\n\t\t\tconst updated = await repo.on(ItemSchema).one().id(item.id).update({ title: 'Changed' })\n\t\t\texpect(updated!.updatedAt).not.toBe(before)\n\t\t\texpect(updated!.updatedAt).toBeGreaterThanOrEqual(before)\n\t\t})\n\n\t\ttest('user set({updatedAt:X}) suppresses auto-bump', async () => {\n\t\t\tconst repo = makeUpdateRepo()\n\t\t\tconst item = await repo.on(ItemSchema).one().create({ title: 'Hello', views: 0 })\n\n\t\t\tconst updated = await repo.on(ItemSchema).one().id(item.id).update({ updatedAt: 9999 })\n\t\t\texpect(updated!.updatedAt).toBe(9999)\n\t\t})\n\n\t\ttest('update with inc op via SchemaUpdateInput', async () => {\n\t\t\tconst { IncOp } = await import('../updates')\n\t\t\tconst repo = makeUpdateRepo()\n\t\t\tconst item = await repo.on(ItemSchema).one().create({ title: 'Hello', views: 10 })\n\n\t\t\tconst updated = await repo.on(ItemSchema).one().id(item.id).update({ views: new IncOp('views', 5) })\n\t\t\texpect(updated!.views).toBe(15)\n\t\t})\n\n\t\ttest('update returns null for missing pk', async () => {\n\t\t\tconst repo = makeUpdateRepo()\n\t\t\tconst result = await repo.on(ItemSchema).one().id('nonexistent').update({ title: 'X' })\n\t\t\texpect(result).toBeNull()\n\t\t})\n\t})\n\n\tdescribe('one().where().upsert() (replaces upsertOne)', () => {\n\t\tlet upsertCounter = 0\n\n\t\tconst UpsertSchema = Schema.from('upserts')\n\t\t\t.pk('id', v.string(), () => `up-${++upsertCounter}`)\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.field('views', v.number())\n\t\t\t.field('createdAt', v.number(), { onCreate: () => 1000 })\n\t\t\t.field('updatedAt', v.number(), { onCreate: () => 1000, onUpdate: () => 9999 })\n\t\t\t.build()\n\n\t\tfunction makeUpsertRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\treturn Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t}\n\n\t\ttest('create-then-update path: row missing → inserts and applies update', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tconst result = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'alice@test.com'))\n\t\t\t\t.upsert({\n\t\t\t\t\tcreate: { email: 'alice@test.com', name: 'Alice', views: 0 },\n\t\t\t\t\tupdate: { name: 'Alice Updated' },\n\t\t\t\t})\n\n\t\t\texpect(result.email).toBe('alice@test.com')\n\t\t\texpect(result.name).toBe('Alice Updated')\n\t\t\texpect(result.createdAt).toBe(1000)\n\t\t})\n\n\t\ttest('create path with set value overriding create field is allowed', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tconst result = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'override@test.com'))\n\t\t\t\t.upsert({\n\t\t\t\t\tcreate: { email: 'override@test.com', name: 'Original', views: 0 },\n\t\t\t\t\tupdate: { views: 42 },\n\t\t\t\t})\n\n\t\t\texpect(result.views).toBe(42)\n\t\t\texpect(result.name).toBe('Original')\n\t\t})\n\n\t\ttest('update-only-on-exists path: row exists → ignores create, applies update + auto-bump', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tawait repo.on(UpsertSchema).one().create({ email: 'bob@test.com', name: 'Bob', views: 42 })\n\n\t\t\tconst result = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'bob@test.com'))\n\t\t\t\t.upsert({\n\t\t\t\t\tcreate: { email: 'bob@test.com', name: 'IGNORED', views: 0 },\n\t\t\t\t\tupdate: { name: 'Bob Updated' },\n\t\t\t\t})\n\n\t\t\texpect(result.name).toBe('Bob Updated')\n\t\t\texpect(result.views).toBe(42)\n\t\t\texpect(result.updatedAt).toBe(9999)\n\t\t})\n\n\t\ttest('create-vs-op conflict throws OrmValidationError with kind conflicting-ops', async () => {\n\t\t\tconst { IncOp } = await import('../updates')\n\t\t\tconst { OrmValidationError } = await import('../errors')\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\ttry {\n\t\t\t\tawait repo\n\t\t\t\t\t.on(UpsertSchema)\n\t\t\t\t\t.one()\n\t\t\t\t\t.where((q) => q.eq('email', 'conflict@test.com'))\n\t\t\t\t\t.upsert({\n\t\t\t\t\t\tcreate: { email: 'conflict@test.com', name: 'Conflict', views: 0 },\n\t\t\t\t\t\tupdate: { views: new IncOp('views', 1) },\n\t\t\t\t\t})\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.kind).toBe('conflicting-ops')\n\t\t\t\texpect(err.operation).toBe('upsertOne')\n\t\t\t\texpect(err.failures[0].field).toBe('views')\n\t\t\t}\n\t\t})\n\n\t\ttest('empty-update-allowed: create with no update is allowed', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tconst result = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'noops@test.com'))\n\t\t\t\t.upsert({ create: { email: 'noops@test.com', name: 'NoOps', views: 0 } })\n\n\t\t\texpect(result.email).toBe('noops@test.com')\n\t\t\texpect(result.name).toBe('NoOps')\n\t\t})\n\n\t\ttest('empty-update-allowed: if exists do nothing', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tawait repo.on(UpsertSchema).one().create({ email: 'exists@test.com', name: 'Original', views: 5 })\n\n\t\t\tconst result = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'exists@test.com'))\n\t\t\t\t.upsert({ create: { email: 'exists@test.com', name: 'IGNORED', views: 0 } })\n\n\t\t\texpect(result.name).toBe('Original')\n\t\t\texpect(result.views).toBe(5)\n\t\t})\n\n\t\ttest('upsert-returns-document rule: returns resulting document', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tconst insertResult = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'doc@test.com'))\n\t\t\t\t.upsert({ create: { email: 'doc@test.com', name: 'Doc', views: 0 } })\n\t\t\texpect(insertResult.id).toBeDefined()\n\t\t\texpect(insertResult.email).toBe('doc@test.com')\n\n\t\t\tconst updateResult = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'doc@test.com'))\n\t\t\t\t.upsert({\n\t\t\t\t\tcreate: { email: 'doc@test.com', name: 'IGNORED', views: 0 },\n\t\t\t\t\tupdate: { name: 'DocUpdated' },\n\t\t\t\t})\n\t\t\texpect(updateResult.id).toBe(insertResult.id)\n\t\t\texpect(updateResult.name).toBe('DocUpdated')\n\t\t})\n\n\t\ttest('validates create payload via validateCreate (onCreate defaults injected)', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tconst result = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'defaults@test.com'))\n\t\t\t\t.upsert({ create: { email: 'defaults@test.com', name: 'Defaults', views: 0 } })\n\n\t\t\texpect(result.id).toBeDefined()\n\t\t\texpect(result.createdAt).toBe(1000)\n\t\t})\n\n\t\ttest('validates create payload and throws OrmValidationError on invalid', async () => {\n\t\t\tconst { OrmValidationError } = await import('../errors')\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tawait expect(\n\t\t\t\trepo\n\t\t\t\t\t.on(UpsertSchema)\n\t\t\t\t\t.one()\n\t\t\t\t\t.where((q) => q.eq('email', 'bad@test.com'))\n\t\t\t\t\t.upsert({ create: { email: 123 as any, name: 'Bad', views: 0 } }),\n\t\t\t).rejects.toBeInstanceOf(OrmValidationError)\n\t\t})\n\n\t\ttest('upsert-filter-incompatible error from adapter boundary', async () => {\n\t\t\tconst { OrmValidationError } = await import('../errors')\n\n\t\t\tconst spy = mockInstance()\n\t\t\tclass RestrictedAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number', 'boolean'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\treadonly updateOps = ['set'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync upsertOne(_schema: any, _config: any, _filter: any, _create: any, _ops: any): Promise<Record<string, unknown>> {\n\t\t\t\t\tthrow new OrmValidationError('upsert-filter-incompatible', 'test', 'upsertOne', [\n\t\t\t\t\t\t{ cause: 'adapter requires single eq filter on unique column, received complex filter' },\n\t\t\t\t\t])\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst restrictedAdapter = new (RestrictedAdapter as any)() as InstanceType<typeof RestrictedAdapter>\n\t\t\tspy.mockRestore()\n\n\t\t\tconst repo = Repo.from(restrictedAdapter)\n\t\t\t\t.resolve(() => ({ table: 'test' }))\n\t\t\t\t.build()\n\n\t\t\ttry {\n\t\t\t\tawait repo\n\t\t\t\t\t.on(UpsertSchema)\n\t\t\t\t\t.one()\n\t\t\t\t\t.where((q: any) => q.eq('email', 'x@test.com'))\n\t\t\t\t\t.upsert({ create: { email: 'x@test.com', name: 'X', views: 0 } })\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.kind).toBe('upsert-filter-incompatible')\n\t\t\t}\n\t\t})\n\t})\n\n\tdescribe('type-level: upsert gating', () => {\n\t\ttest('adapter with upsertOne enables one().upsert', () => {\n\t\t\tclass WithUpsertAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\treadonly updateOps = ['set'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync upsertOne() { return {} }\n\t\t\t}\n\t\t\ttype A = WithUpsertAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['upsert']>().toBeFunction()\n\t\t})\n\n\t\ttest('adapter without upsertOne collapses one().upsert to never', () => {\n\t\t\tclass NoUpsertAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\treadonly updateOps = ['set'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = NoUpsertAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['upsert']>().toBeNever()\n\t\t})\n\n\t\ttest('adapter without upsertOne (crud-only) collapses one().upsert to never', () => {\n\t\t\tclass CrudOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly updateOps = ['set'] as const\n\t\t\t\tasync findByPk() { return null }\n\t\t\t}\n\t\t\ttype A = CrudOnlyAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['upsert']>().toBeNever()\n\t\t})\n\t})\n\n\tdescribe('repo.session — transactional behaviour', () => {\n\t\tconst SchemaA = Schema.from('accounts')\n\t\t\t.pk('id', v.string(), () => `a-${Math.random().toString(36).slice(2)}`)\n\t\t\t.field('balance', v.number())\n\t\t\t.build()\n\t\tconst SchemaB = Schema.from('ledger')\n\t\t\t.pk('id', v.string(), () => `l-${Math.random().toString(36).slice(2)}`)\n\t\t\t.field('amount', v.number())\n\t\t\t.field('accountId', v.string())\n\t\t\t.build()\n\n\t\tfunction makeSessionRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\treturn Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t}\n\n\t\ttest('throw-to-rollback: uncaught throw rolls back all writes and rejects with same error', async () => {\n\t\t\tconst repo = makeSessionRepo()\n\t\t\tawait repo.on(SchemaA).one().create({ balance: 100 })\n\n\t\t\tconst err = new Error('boom')\n\t\t\tawait expect(\n\t\t\t\trepo.session(async () => {\n\t\t\t\t\tawait repo.on(SchemaA).one().create({ balance: 200 })\n\t\t\t\t\tthrow err\n\t\t\t\t}),\n\t\t\t).rejects.toBe(err)\n\n\t\t\tconst all = await repo\n\t\t\t\t.on(SchemaA)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.gte('balance', 0))\n\t\t\t\t.find()\n\t\t\texpect(all).toHaveLength(1)\n\t\t\texpect(all[0].balance).toBe(100)\n\t\t})\n\n\t\ttest('return-to-commit: successful return commits and resolves with callback value', async () => {\n\t\t\tconst repo = makeSessionRepo()\n\t\t\tconst result = await repo.session(async () => {\n\t\t\t\tawait repo.on(SchemaA).one().create({ balance: 500 })\n\t\t\t\treturn 'committed'\n\t\t\t})\n\n\t\t\texpect(result).toBe('committed')\n\t\t\tconst all = await repo\n\t\t\t\t.on(SchemaA)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.gte('balance', 0))\n\t\t\t\t.find()\n\t\t\texpect(all).toHaveLength(1)\n\t\t\texpect(all[0].balance).toBe(500)\n\t\t})\n\n\t\ttest('cross-schema session: multiple schemas share one tx; on throw both roll back', async () => {\n\t\t\tconst repo = makeSessionRepo()\n\t\t\tconst account = await repo.on(SchemaA).one().create({ balance: 1000 })\n\n\t\t\tawait expect(\n\t\t\t\trepo.session(async () => {\n\t\t\t\t\tawait repo\n\t\t\t\t\t\t.on(SchemaA)\n\t\t\t\t\t\t.all()\n\t\t\t\t\t\t.where((q) => q.eq('id', account.id))\n\t\t\t\t\t\t.update({ balance: 900 })\n\t\t\t\t\tawait repo.on(SchemaB).one().create({ amount: 100, accountId: account.id })\n\t\t\t\t\tthrow new Error('tx failure')\n\t\t\t\t}),\n\t\t\t).rejects.toThrow('tx failure')\n\n\t\t\tconst acct = await repo.on(SchemaA).one().id(account.id).find()\n\t\t\texpect(acct!.balance).toBe(1000)\n\n\t\t\tconst entries = await repo\n\t\t\t\t.on(SchemaB)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('accountId', account.id))\n\t\t\t\t.find()\n\t\t\texpect(entries).toHaveLength(0)\n\t\t})\n\n\t\ttest('nested session: inner repo.session delegates to adapter (flat in in-memory)', async () => {\n\t\t\tconst repo = makeSessionRepo()\n\n\t\t\tconst result = await repo.session(async () => {\n\t\t\t\tawait repo.on(SchemaA).one().create({ balance: 100 })\n\t\t\t\tconst inner = await repo.session(async () => {\n\t\t\t\t\tawait repo.on(SchemaA).one().create({ balance: 200 })\n\t\t\t\t\treturn 'inner'\n\t\t\t\t})\n\t\t\t\treturn inner\n\t\t\t})\n\n\t\t\texpect(result).toBe('inner')\n\t\t\tconst all = await repo\n\t\t\t\t.on(SchemaA)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.gte('balance', 0))\n\t\t\t\t.find()\n\t\t\texpect(all).toHaveLength(2)\n\t\t})\n\n\t\ttest('nested session: throw in inner rolls back entire outer tx (flat nesting)', async () => {\n\t\t\tconst repo = makeSessionRepo()\n\t\t\tawait repo.on(SchemaA).one().create({ balance: 50 })\n\n\t\t\tawait expect(\n\t\t\t\trepo.session(async () => {\n\t\t\t\t\tawait repo.on(SchemaA).one().create({ balance: 100 })\n\t\t\t\t\tawait repo.session(async () => {\n\t\t\t\t\t\tawait repo.on(SchemaA).one().create({ balance: 200 })\n\t\t\t\t\t\tthrow new Error('inner boom')\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t).rejects.toThrow('inner boom')\n\n\t\t\tconst all = await repo\n\t\t\t\t.on(SchemaA)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.gte('balance', 0))\n\t\t\t\t.find()\n\t\t\texpect(all).toHaveLength(1)\n\t\t\texpect(all[0].balance).toBe(50)\n\t\t})\n\n\t\ttest('no-tx-argument rule: session callback receives no arguments', async () => {\n\t\t\tconst repo = makeSessionRepo()\n\t\t\tlet argCount = -1\n\t\t\tawait repo.session(async function () {\n\t\t\t\targCount = arguments.length\n\t\t\t})\n\t\t\texpect(argCount).toBe(0)\n\t\t})\n\t})\n\n\tdescribe('type-level: session gating', () => {\n\t\ttest('missing session collapses repo.session to never', () => {\n\t\t\tclass NoSessionAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = NoSessionAdapter\n\t\t\tconst _repo = {} as import('./repo').RepoSurface<A>\n\t\t\texpectTypeOf(_repo.session).toBeNever()\n\t\t})\n\n\t\ttest('adapter with session enables repo.session', () => {\n\t\t\tclass WithSessionAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync session<T>(fn: () => Promise<T>): Promise<T> { return fn() }\n\t\t\t}\n\t\t\ttype A = WithSessionAdapter\n\t\t\tconst _repo = {} as import('./repo').RepoSurface<A>\n\t\t\texpectTypeOf(_repo.session).toBeFunction()\n\t\t})\n\t})\n\n\tdescribe('ALS-backed resolve', () => {\n\t\ttest('reads inside repo.resolve see the override', async () => {\n\t\t\tconst seenConfigs: unknown[] = []\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((s: any, config: any) => {\n\t\t\t\tseenConfigs.push(config)\n\t\t\t\treturn origUse(s, config)\n\t\t\t})\n\n\t\t\tconst TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tawait repo.resolve(\n\t\t\t\t(config) => ({ table: `override_${config.table}` }),\n\t\t\t\tasync () => {\n\t\t\t\t\tawait repo.on(TestSchema).all().find()\n\t\t\t\t},\n\t\t\t)\n\n\t\t\texpect(seenConfigs[0]).toEqual({ table: 'override_test' })\n\t\t})\n\n\t\ttest('reads outside repo.resolve see the default config', async () => {\n\t\t\tconst seenConfigs: unknown[] = []\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((s: any, config: any) => {\n\t\t\t\tseenConfigs.push(config)\n\t\t\t\treturn origUse(s, config)\n\t\t\t})\n\n\t\t\tconst TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tawait repo.resolve(\n\t\t\t\t(config) => ({ table: `scoped_${config.table}` }),\n\t\t\t\tasync () => {},\n\t\t\t)\n\n\t\t\tawait repo.on(TestSchema).all().find()\n\t\t\texpect(seenConfigs[0]).toEqual({ table: 'test' })\n\t\t})\n\n\t\ttest('two parallel repo.resolve calls do not bleed into each other', async () => {\n\t\t\tconst seenConfigs: unknown[] = []\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((s: any, config: any) => {\n\t\t\t\tseenConfigs.push(config)\n\t\t\t\treturn origUse(s, config)\n\t\t\t})\n\n\t\t\tconst TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tawait Promise.all([\n\t\t\t\trepo.resolve(\n\t\t\t\t\t(config) => ({ table: `tenant1_${config.table}` }),\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 10))\n\t\t\t\t\t\tawait repo.on(TestSchema).all().find()\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\trepo.resolve(\n\t\t\t\t\t(config) => ({ table: `tenant2_${config.table}` }),\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 10))\n\t\t\t\t\t\tawait repo.on(TestSchema).all().find()\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t])\n\n\t\t\texpect(seenConfigs).toContainEqual({ table: 'tenant1_test' })\n\t\t\texpect(seenConfigs).toContainEqual({ table: 'tenant2_test' })\n\t\t\texpect(seenConfigs).not.toContainEqual({ table: 'tenant2_tenant1_test' })\n\t\t\texpect(seenConfigs).not.toContainEqual({ table: 'tenant1_tenant2_test' })\n\t\t})\n\n\t\ttest('overrides survive across awaits inside fn', async () => {\n\t\t\tconst seenConfigs: unknown[] = []\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((s: any, config: any) => {\n\t\t\t\tseenConfigs.push(config)\n\t\t\t\treturn origUse(s, config)\n\t\t\t})\n\n\t\t\tconst TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tawait repo.resolve(\n\t\t\t\t(config) => ({ table: `async_${config.table}` }),\n\t\t\t\tasync () => {\n\t\t\t\t\tawait repo.on(TestSchema).all().find()\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 10))\n\t\t\t\t\tawait repo.on(TestSchema).all().find()\n\t\t\t\t},\n\t\t\t)\n\n\t\t\texpect(seenConfigs).toHaveLength(2)\n\t\t\texpect(seenConfigs[0]).toEqual({ table: 'async_test' })\n\t\t\texpect(seenConfigs[1]).toEqual({ table: 'async_test' })\n\t\t})\n\t})\n\n\tdescribe('class-based OrmAdapter with Repo', async () => {\n\t\tconst { OrmAdapter } = await import('../orm-adapter')\n\t\tconst { FilterGroup } = await import('../filter')\n\t\tconst { OrmValidationError } = await import('../errors')\n\n\t\tfunction makeClassAdapter() {\n\t\t\tconst stores = new Map<string, Map<string, Record<string, unknown>>>()\n\t\t\tfunction getStore(name: string) {\n\t\t\t\tif (!stores.has(name)) stores.set(name, new Map())\n\t\t\t\treturn stores.get(name)!\n\t\t\t}\n\n\t\t\tclass TestClassAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\treadonly updateOps = ['set'] as const\n\n\t\t\t\tasync findMany(_schema: import('../schema').AnySchema, config: unknown, group: import('../filter').FilterGroup) {\n\t\t\t\t\tconst cfg = config as { table: string }\n\t\t\t\t\tconst store = getStore(cfg.table)\n\t\t\t\t\treturn [...store.values()].filter((doc) => {\n\t\t\t\t\t\tfor (const child of group.children) {\n\t\t\t\t\t\t\tif (child instanceof (FilterGroup as any).constructor) continue\n\t\t\t\t\t\t\tconst f = child as any\n\t\t\t\t\t\t\tif (f.op === 'eq' && doc[f.field] !== f.value) return false\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tasync createMany(s: import('../schema').AnySchema, config: unknown, data: Record<string, unknown>[]) {\n\t\t\t\t\tconst cfg = config as { table: string }\n\t\t\t\t\tconst store = getStore(cfg.table)\n\t\t\t\t\tconst pk = s.pkField.name\n\t\t\t\t\tfor (const d of data) store.set(String(d[pk]), { ...d })\n\t\t\t\t\treturn data.map((d) => ({ ...d }))\n\t\t\t\t}\n\n\t\t\t\tasync updateMany(s: import('../schema').AnySchema, config: unknown, group: import('../filter').FilterGroup, data: Record<string, unknown>) {\n\t\t\t\t\tconst rows = await this.findMany(s, config, group)\n\t\t\t\t\tconst cfg = config as { table: string }\n\t\t\t\t\tconst store = getStore(cfg.table)\n\t\t\t\t\tconst pk = s.pkField.name\n\t\t\t\t\treturn rows.map((row) => {\n\t\t\t\t\t\tconst updated = { ...row, ...data }\n\t\t\t\t\t\tstore.set(String(updated[pk]), updated)\n\t\t\t\t\t\treturn { ...updated }\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tasync deleteMany(s: import('../schema').AnySchema, config: unknown, group: import('../filter').FilterGroup) {\n\t\t\t\t\tconst rows = await this.findMany(s, config, group)\n\t\t\t\t\tconst cfg = config as { table: string }\n\t\t\t\t\tconst store = getStore(cfg.table)\n\t\t\t\t\tconst pk = s.pkField.name\n\t\t\t\t\tfor (const row of rows) store.delete(String(row[pk]))\n\t\t\t\t\treturn rows\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst spy = mockInstance()\n\t\t\tconst adapter = new (TestClassAdapter as any)() as InstanceType<typeof TestClassAdapter>\n\t\t\tspy.mockRestore()\n\t\t\treturn { adapter, stores }\n\t\t}\n\n\t\tconst TestSchema = Schema.from('class_test')\n\t\t\t.pk('id', v.string(), () => `ct-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t.field('name', v.string())\n\t\t\t.field('age', v.number())\n\t\t\t.build()\n\n\t\ttest('Repo.from(classAdapter).resolve(...).build() creates a working repo', async () => {\n\t\t\tconst { adapter } = makeClassAdapter()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tconst created = await repo.on(TestSchema).one().create({ name: 'Alice', age: 30 })\n\t\t\texpect(created.name).toBe('Alice')\n\t\t\texpect(created.age).toBe(30)\n\n\t\t\tconst found = await repo.on(TestSchema).one().id(created.id).find()\n\t\t\texpect(found).not.toBeNull()\n\t\t\texpect(found!.name).toBe('Alice')\n\t\t})\n\n\t\ttest('dispatch validator validates config against schemaConfigPipe', async () => {\n\t\t\tconst { adapter } = makeClassAdapter()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve(() => ({ table: 123 }) as any)\n\t\t\t\t.build()\n\n\t\t\tawait expect(\n\t\t\t\trepo.on(TestSchema).all().find(),\n\t\t\t).rejects.toBeInstanceOf(OrmValidationError)\n\t\t})\n\n\t\ttest('dispatch validator validates after transforms applied', async () => {\n\t\t\tconst { adapter } = makeClassAdapter()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tawait expect(\n\t\t\t\trepo.resolve(\n\t\t\t\t\t() => ({ table: 42 }) as any,\n\t\t\t\t\tasync () => repo.on(TestSchema).all().find(),\n\t\t\t\t),\n\t\t\t).rejects.toBeInstanceOf(OrmValidationError)\n\t\t})\n\n\t\ttest('createMany + findMany round-trip works', async () => {\n\t\t\tconst { adapter } = makeClassAdapter()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tconst created = await repo.on(TestSchema).all().create([\n\t\t\t\t{ name: 'Alice', age: 30 },\n\t\t\t\t{ name: 'Bob', age: 25 },\n\t\t\t])\n\t\t\texpect(created).toHaveLength(2)\n\n\t\t\tconst all = await repo.on(TestSchema).all().find()\n\t\t\texpect(all).toHaveLength(2)\n\t\t})\n\n\t\ttest('update and delete work on class-based adapter', async () => {\n\t\t\tconst { adapter } = makeClassAdapter()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tconst user = await repo.on(TestSchema).one().create({ name: 'Alice', age: 30 })\n\t\t\tconst updated = await repo.on(TestSchema).one().id(user.id).update({ name: 'Alicia' })\n\t\t\texpect(updated?.name).toBe('Alicia')\n\n\t\t\tconst deleted = await repo.on(TestSchema).one().id(user.id).delete()\n\t\t\texpect(deleted?.id).toBe(user.id)\n\n\t\t\tconst found = await repo.on(TestSchema).one().id(user.id).find()\n\t\t\texpect(found).toBeNull()\n\t\t})\n\t})\n\n\tdescribe('repo.on().aggregate() end-to-end', () => {\n\t\tconst OrderSchema = Schema.from('orders')\n\t\t\t.pk('id', v.string(), () => `o-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t.field('product', v.string())\n\t\t\t.field('amount', v.number())\n\t\t\t.field('region', v.string())\n\t\t\t.build()\n\n\t\tfunction makeAggRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst repo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t\treturn { repo, adapter }\n\t\t}\n\n\t\tasync function seedOrders(repo: any) {\n\t\t\tawait repo.on(OrderSchema).all().create([\n\t\t\t\t{ product: 'Widget', amount: 10, region: 'US' },\n\t\t\t\t{ product: 'Gadget', amount: 20, region: 'EU' },\n\t\t\t\t{ product: 'Widget', amount: 30, region: 'US' },\n\t\t\t\t{ product: 'Gadget', amount: 40, region: 'EU' },\n\t\t\t\t{ product: 'Widget', amount: 50, region: 'US' },\n\t\t\t])\n\t\t}\n\n\t\ttest('count returns total row count', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().count('total').run()\n\t\t\texpect(result).toEqual({ total: 5 })\n\t\t})\n\n\t\ttest('count with where filter returns filtered count', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.where((q) => q.eq('region', 'US'))\n\t\t\t\t.count('total')\n\t\t\t\t.run()\n\t\t\texpect(result).toEqual({ total: 3 })\n\t\t})\n\n\t\ttest('count on empty result returns zero', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().count('total').run()\n\t\t\texpect(result).toEqual({ total: 0 })\n\t\t})\n\n\t\ttest('clone-on-step: base builder is not mutated by fan-out', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst base = repo.on(OrderSchema).aggregate().count('a')\n\t\t\tconst withFilter = base.where((q) => q.eq('region', 'US'))\n\t\t\tconst resultAll = await base.count('b').run()\n\t\t\tconst resultFiltered = await withFilter.count('c').run()\n\t\t\texpect(resultAll.a).toBe(5)\n\t\t\texpect(resultFiltered.a).toBe(3)\n\t\t})\n\n\t\ttest('where before count produces correct result', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.count('total')\n\t\t\t\t.where((q) => q.eq('product', 'Gadget'))\n\t\t\t\t.run()\n\t\t\texpect(result).toEqual({ total: 2 })\n\t\t})\n\n\t\ttest('boundary validation rejects unknown field in where filter', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait expect(\n\t\t\t\trepo.on(OrderSchema).aggregate().count('total').where((q) => q.eq('nonexistent', 'x')).run(),\n\t\t\t).rejects.toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('sum returns total of numeric field', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().sum(OrderSchema.fields.amount, 'revenue').run()\n\t\t\texpect(result).toEqual({ revenue: 150 })\n\t\t})\n\n\t\ttest('avg returns average of numeric field', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().avg(OrderSchema.fields.amount, 'avgAmount').run()\n\t\t\texpect(result).toEqual({ avgAmount: 30 })\n\t\t})\n\n\t\ttest('min returns minimum value', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().min(OrderSchema.fields.amount, 'lowest').run()\n\t\t\texpect(result).toEqual({ lowest: 10 })\n\t\t})\n\n\t\ttest('max returns maximum value', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().max(OrderSchema.fields.amount, 'highest').run()\n\t\t\texpect(result).toEqual({ highest: 50 })\n\t\t})\n\n\t\ttest('countDistinct returns unique value count', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().countDistinct(OrderSchema.fields.product, 'unique').run()\n\t\t\texpect(result).toEqual({ unique: 2 })\n\t\t})\n\n\t\ttest('min on string field returns lexicographic minimum', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().min(OrderSchema.fields.region, 'firstRegion').run()\n\t\t\texpect(result).toEqual({ firstRegion: 'EU' })\n\t\t})\n\n\t\ttest('max on string field returns lexicographic maximum', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().max(OrderSchema.fields.region, 'lastRegion').run()\n\t\t\texpect(result).toEqual({ lastRegion: 'US' })\n\t\t})\n\n\t\ttest('combined aggregators in single chain', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.count('total')\n\t\t\t\t.sum(OrderSchema.fields.amount, 'revenue')\n\t\t\t\t.avg(OrderSchema.fields.amount, 'avgAmount')\n\t\t\t\t.min(OrderSchema.fields.amount, 'lowest')\n\t\t\t\t.max(OrderSchema.fields.amount, 'highest')\n\t\t\t\t.run()\n\t\t\texpect(result).toEqual({ total: 5, revenue: 150, avgAmount: 30, lowest: 10, highest: 50 })\n\t\t})\n\n\t\ttest('groupBy single column returns per-group results', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.count('cnt')\n\t\t\t\t.sum(OrderSchema.fields.amount, 'total')\n\t\t\t\t.run()\n\t\t\texpect(result).toHaveLength(2)\n\t\t\tconst us = result.find((r) => r.region === 'US')\n\t\t\tconst eu = result.find((r) => r.region === 'EU')\n\t\t\texpect(us).toEqual({ region: 'US', cnt: 3, total: 90 })\n\t\t\texpect(eu).toEqual({ region: 'EU', cnt: 2, total: 60 })\n\t\t})\n\n\t\ttest('groupBy multi-column returns per-combo results', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.groupBy(OrderSchema.fields.region, OrderSchema.fields.product)\n\t\t\t\t.count('cnt')\n\t\t\t\t.run()\n\t\t\texpect(result).toHaveLength(2)\n\t\t\tconst usWidget = result.find((r) => r.region === 'US' && r.product === 'Widget')\n\t\t\tconst euGadget = result.find((r) => r.region === 'EU' && r.product === 'Gadget')\n\t\t\texpect(usWidget?.cnt).toBe(3)\n\t\t\texpect(euGadget?.cnt).toBe(2)\n\t\t})\n\n\t\ttest('where + groupBy filters before grouping', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.where((q) => q.gt('amount', 15))\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.count('cnt')\n\t\t\t\t.run()\n\t\t\tconst us = result.find((r) => r.region === 'US')\n\t\t\tconst eu = result.find((r) => r.region === 'EU')\n\t\t\texpect(us?.cnt).toBe(2)\n\t\t\texpect(eu?.cnt).toBe(2)\n\t\t})\n\n\t\ttest('having filters after aggregation', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.count('cnt')\n\t\t\t\t.sum(OrderSchema.fields.amount, 'total')\n\t\t\t\t.having((q) => q.gt('total', 80))\n\t\t\t\t.run()\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0].region).toBe('US')\n\t\t\texpect(result[0].total).toBe(90)\n\t\t})\n\n\t\ttest('where + having work together', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.where((q) => q.gt('amount', 15))\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.count('cnt')\n\t\t\t\t.having((q) => q.gte('cnt', 2))\n\t\t\t\t.run()\n\t\t\texpect(result).toHaveLength(2)\n\t\t})\n\n\t\ttest('countDistinct with groupBy', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.countDistinct(OrderSchema.fields.product, 'uniqueProducts')\n\t\t\t\t.run()\n\t\t\tconst us = result.find((r) => r.region === 'US')\n\t\t\tconst eu = result.find((r) => r.region === 'EU')\n\t\t\texpect(us?.uniqueProducts).toBe(1)\n\t\t\texpect(eu?.uniqueProducts).toBe(1)\n\t\t})\n\n\t\ttest('step order is irrelevant: groupBy before or after aggregators', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst resultA = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.count('cnt')\n\t\t\t\t.run()\n\t\t\tconst resultB = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.count('cnt')\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.run()\n\t\t\texpect(resultA.sort((a, b) => a.region.localeCompare(b.region)))\n\t\t\t\t.toEqual(resultB.sort((a, b) => a.region.localeCompare(b.region)))\n\t\t})\n\n\t\ttest('boundary validation rejects unknown groupBy field', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait expect(\n\t\t\t\t(repo.on(OrderSchema).aggregate() as any).groupBy({ name: 'nonexistent', path: ['nonexistent'] }).count('total').run(),\n\t\t\t).rejects.toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('boundary validation rejects unknown having field', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait expect(\n\t\t\t\trepo\n\t\t\t\t\t.on(OrderSchema)\n\t\t\t\t\t.aggregate()\n\t\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t\t.count('cnt')\n\t\t\t\t\t.having((q) => q.gt('nonexistent', 0))\n\t\t\t\t\t.run(),\n\t\t\t).rejects.toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('min/max on empty store returns null', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.min(OrderSchema.fields.amount, 'lowest')\n\t\t\t\t.max(OrderSchema.fields.amount, 'highest')\n\t\t\t\t.run()\n\t\t\texpect(result).toEqual({ lowest: null, highest: null })\n\t\t})\n\n\t\ttest('avg on empty store returns zero', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().avg(OrderSchema.fields.amount, 'avgAmount').run()\n\t\t\texpect(result).toEqual({ avgAmount: 0 })\n\t\t})\n\t})\n\n}\n"],"mappings":"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","names":["EquippedError","OrmValidationError","OrmNotFoundError","OrmReplayError","OrmValidationError","FilterGroup","EquippedError","OrmValidationError","OrmNotFoundError","ulid","v","v","v","v","ulid","Repo","EventLogSchema","makeRepo","OrmValidationError","v","EquippedError","Repo","EventLogSchema","makeRepo","v","Schema","OrmReplayError","HandlerRegistry","fire","Repo","EventLogSchema","makeRepo","v","Schema","OrmValidationError","user","v","Schema","OrmAdapter","Repo","makeEnv","v","Schema","OrmIntrospectionError","OrmAdapter","OrmMigrationError","Repo","makeEnv","v","Schema","OrmValidationError","OrmMigrationError","OrmAdapter","v","Schema","v","v","v","v","IncOp","MulOp","SetOp","UnsetOp","EquippedError","MAX_PRELOAD_DEPTH","isNestedPreloadDef","relationStep","refCol","related","lookup","v","OrmValidationError","Relations","Repo","Schema","v","Instance","OrmValidationError","OrmAdapter","Relations","Repo","Schema","applyTransforms","Instance","mockInstance","v","OrmAdapter","OrmValidationError","Relations","Schema","EquippedError","IncOp","FilterGroup","store"]}