{"version":3,"sources":["../../../../../src/errors/equippedError.ts","../../../../../src/errors/requestError.ts","../../../../../src/instance/hooks.ts","../../../../../src/instance/settings.ts","../../../../../src/instance/index.ts","../../../../../src/errors/types/badRequestError.ts","../../../../../src/errors/types/notAuthenticatedError.ts","../../../../../src/errors/types/notAuthorizedError.ts","../../../../../src/errors/types/notFoundError.ts","../../../../../src/errors/types/preconditionRequiredError.ts","../../../../../src/errors/types/tokenExpired.ts","../../../../../src/errors/types/validationError.ts","../../../../../src/errors/index.ts","../../../../../src/orm/errors/introspection.ts","../../../../../src/orm/adapters/postgresql/index.ts","../../../../../src/orm/filter.ts","../../../../../src/orm/fields.ts","../../../../../src/orm/errors/validation.ts","../../../../../src/orm/updates.ts","../../../../../src/orm/adapters/postgresql/query.ts","../../../../../src/utilities/configurable.ts","../../../../../src/orm/orm-adapter.ts"],"sourcesContent":["export class EquippedError extends Error {\n\tconstructor(\n\t\tpublic readonly message: string,\n\t\tpublic readonly context: Record<string, unknown>,\n\t\tpublic readonly cause?: unknown,\n\t) {\n\t\tsuper(message, { cause })\n\t}\n}\n","import type { StatusCodesEnum } from '../server'\nimport { EquippedError } from './equippedError'\n\nexport abstract class RequestError extends EquippedError {\n\tabstract readonly statusCode: StatusCodesEnum\n\n\tprotected constructor(\n\t\tpublic readonly message: string,\n\t\tpublic readonly serializedErrors: { message: string; field?: string }[],\n\t\tcause?: unknown,\n\t) {\n\t\tsuper(message, { serializedErrors }, cause)\n\t}\n}\n","export type HookEvent = 'setup' | 'start' | 'close'\nexport type HookCb = Promise<unknown | void> | (() => void | unknown | Promise<void | unknown>)\n\nexport type ClassRef = Function & { prototype: unknown; name: string }\nexport type HookOptions = {\n\tclass?: ClassRef\n\tafter?: ClassRef[]\n}\nexport type HookRecord = { cb: HookCb; class?: ClassRef; after: ClassRef[] }\n\nexport function registerHook(hooks: HookRecord[], record: HookRecord): void {\n\tfor (const dep of record.after) {\n\t\tif (!hooks.some((h) => h.class === dep)) {\n\t\t\tconst depName = dep.name || 'unknown'\n\t\t\tconst ownerName = record.class?.name || 'anonymous'\n\t\t\tthrow new Error(`Missing dependency: ${ownerName} declares after: [${depName}], but ${depName} is not registered`)\n\t\t}\n\t}\n\n\tif (record.class) {\n\t\tconst tentative = [...hooks, record]\n\t\tdetectCycle(tentative)\n\t}\n\n\thooks.push(record)\n}\n\nfunction detectCycle(hooks: HookRecord[]): void {\n\tconst classToAfter = new Map<ClassRef, ClassRef[]>()\n\tfor (const h of hooks) {\n\t\tif (!h.class) continue\n\t\tconst existing = classToAfter.get(h.class)\n\t\tif (existing) {\n\t\t\tfor (const dep of h.after) {\n\t\t\t\tif (!existing.includes(dep)) existing.push(dep)\n\t\t\t}\n\t\t} else {\n\t\t\tclassToAfter.set(h.class, [...h.after])\n\t\t}\n\t}\n\n\tconst visited = new Set<ClassRef>()\n\tconst stack = new Set<ClassRef>()\n\n\tfunction visit(cls: ClassRef, path: ClassRef[]): void {\n\t\tif (stack.has(cls)) {\n\t\t\tconst cycleStart = path.indexOf(cls)\n\t\t\tconst cycle = [...path.slice(cycleStart), cls]\n\t\t\tconst names = cycle.map((c) => c.name || 'unknown')\n\t\t\tthrow new Error(`Cycle detected: ${names.join(' → ')}`)\n\t\t}\n\t\tif (visited.has(cls)) return\n\t\tstack.add(cls)\n\t\tpath.push(cls)\n\t\tfor (const dep of classToAfter.get(cls) ?? []) {\n\t\t\tvisit(dep, path)\n\t\t}\n\t\tpath.pop()\n\t\tstack.delete(cls)\n\t\tvisited.add(cls)\n\t}\n\n\tfor (const cls of classToAfter.keys()) {\n\t\tvisit(cls, [])\n\t}\n}\n\nexport type HookLayer = HookRecord[]\n\nexport function resolveHookDAG(hooks: HookRecord[], invert: boolean = false): HookLayer[] {\n\tif (hooks.length === 0) return []\n\n\tconst classToHooks = new Map<ClassRef, HookRecord[]>()\n\tconst anonymous: HookRecord[] = []\n\n\tfor (const h of hooks) {\n\t\tif (h.class) {\n\t\t\tconst list = classToHooks.get(h.class)\n\t\t\tif (list) list.push(h)\n\t\t\telse classToHooks.set(h.class, [h])\n\t\t} else {\n\t\t\tanonymous.push(h)\n\t\t}\n\t}\n\n\tconst classes = [...classToHooks.keys()]\n\n\tconst inDegree = new Map<ClassRef, number>()\n\tconst graph = new Map<ClassRef, ClassRef[]>()\n\n\tfor (const cls of classes) {\n\t\tinDegree.set(cls, 0)\n\t\tgraph.set(cls, [])\n\t}\n\n\tfor (const h of hooks) {\n\t\tif (!h.class) continue\n\t\tfor (const dep of h.after) {\n\t\t\tconst [from, to] = invert ? [h.class, dep] : [dep, h.class]\n\t\t\tconst edges = graph.get(from)!\n\t\t\tif (!edges.includes(to)) {\n\t\t\t\tedges.push(to)\n\t\t\t\tinDegree.set(to, inDegree.get(to)! + 1)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst layers: HookLayer[] = []\n\tlet queue = classes.filter((c) => inDegree.get(c) === 0)\n\n\twhile (queue.length > 0) {\n\t\tconst layer: HookRecord[] = []\n\t\tconst next: ClassRef[] = []\n\n\t\tfor (const cls of queue) {\n\t\t\tlayer.push(...(classToHooks.get(cls) ?? []))\n\t\t}\n\t\tlayers.push(layer)\n\n\t\tfor (const cls of queue) {\n\t\t\tfor (const neighbor of graph.get(cls) ?? []) {\n\t\t\t\tconst d = inDegree.get(neighbor)! - 1\n\t\t\t\tinDegree.set(neighbor, d)\n\t\t\t\tif (d === 0) next.push(neighbor)\n\t\t\t}\n\t\t}\n\n\t\tqueue = next\n\t}\n\n\tif (anonymous.length > 0) {\n\t\tconst anonWithDeps = anonymous.filter((h) => h.after.length > 0)\n\t\tconst anonWithoutDeps = anonymous.filter((h) => h.after.length === 0)\n\n\t\tif (anonWithDeps.length > 0) {\n\t\t\tlet maxLayer = -1\n\t\t\tfor (const h of anonWithDeps) {\n\t\t\t\tfor (const dep of h.after) {\n\t\t\t\t\tconst depLayer = layers.findIndex((l) => l.some((r) => r.class === dep))\n\t\t\t\t\tif (depLayer > maxLayer) maxLayer = depLayer\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst insertAt = maxLayer + 1\n\t\t\tif (insertAt < layers.length) {\n\t\t\t\tlayers[insertAt].push(...anonWithDeps)\n\t\t\t} else {\n\t\t\t\tlayers.push(anonWithDeps)\n\t\t\t}\n\t\t}\n\n\t\tif (anonWithoutDeps.length > 0) {\n\t\t\tif (layers.length > 0) {\n\t\t\t\tlayers[layers.length - 1].push(...anonWithoutDeps)\n\t\t\t} else {\n\t\t\t\tlayers.push(anonWithoutDeps)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn layers\n}\n\nexport async function runHooks(\n\thooks: HookRecord[],\n\tonError: (error: Error) => void = (error) => {\n\t\tthrow error\n\t},\n\tinvert: boolean = false,\n) {\n\tconst layers = resolveHookDAG(hooks, invert)\n\tfor (const layer of layers)\n\t\tawait Promise.all(\n\t\t\tlayer.map(async (h) => {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof h.cb === 'function') return await h.cb()\n\t\t\t\t\treturn await h.cb\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn onError(error instanceof Error ? error : new Error(`${error}`))\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\n\tclass A {}\n\tclass B {}\n\tclass C {}\n\tclass D {}\n\n\tconst noop = () => {}\n\n\tdescribe('registerHook', () => {\n\t\ttest('registers a hook with no dependencies', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\tregisterHook(hooks, { cb: noop, class: A, after: [] })\n\t\t\texpect(hooks).toHaveLength(1)\n\t\t})\n\n\t\ttest('throws on missing dependency', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\texpect(() => registerHook(hooks, { cb: noop, class: B, after: [A] })).toThrow(/Missing dependency.*B.*A/)\n\t\t})\n\n\t\ttest('throws on cycle: A→B→A', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\tregisterHook(hooks, { cb: noop, class: A, after: [] })\n\t\t\tregisterHook(hooks, { cb: noop, class: B, after: [A] })\n\t\t\texpect(() => registerHook(hooks, { cb: noop, class: A, after: [B] })).toThrow(/Cycle detected/)\n\t\t})\n\n\t\ttest('throws on transitive cycle: A→B→C→A', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\tregisterHook(hooks, { cb: noop, class: A, after: [] })\n\t\t\tregisterHook(hooks, { cb: noop, class: B, after: [A] })\n\t\t\tregisterHook(hooks, { cb: noop, class: C, after: [B] })\n\t\t\texpect(() => registerHook(hooks, { cb: noop, class: A, after: [C] })).toThrow(/Cycle detected/)\n\t\t})\n\n\t\ttest('allows anonymous hooks with dependencies', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\tregisterHook(hooks, { cb: noop, class: A, after: [] })\n\t\t\tregisterHook(hooks, { cb: noop, after: [A] })\n\t\t\texpect(hooks).toHaveLength(2)\n\t\t})\n\n\t\ttest('anonymous hook throws on missing dependency', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\texpect(() => registerHook(hooks, { cb: noop, after: [A] })).toThrow(/Missing dependency.*anonymous.*A/)\n\t\t})\n\t})\n\n\tdescribe('resolveHookDAG', () => {\n\t\ttest('linear chain: A → B → C', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [B] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(3)\n\t\t\texpect(layers[0].every((h) => h.class === A)).toBe(true)\n\t\t\texpect(layers[1].every((h) => h.class === B)).toBe(true)\n\t\t\texpect(layers[2].every((h) => h.class === C)).toBe(true)\n\t\t})\n\n\t\ttest('fan-out: A → B, A → C (B and C are parallel)', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [A] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\texpect(layers[0].every((h) => h.class === A)).toBe(true)\n\t\t\tconst secondClasses = layers[1].map((h) => h.class)\n\t\t\texpect(secondClasses).toContain(B)\n\t\t\texpect(secondClasses).toContain(C)\n\t\t})\n\n\t\ttest('fan-in: B → D, C → D', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: B, after: [] },\n\t\t\t\t{ cb: noop, class: C, after: [] },\n\t\t\t\t{ cb: noop, class: D, after: [B, C] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\tconst firstClasses = layers[0].map((h) => h.class)\n\t\t\texpect(firstClasses).toContain(B)\n\t\t\texpect(firstClasses).toContain(C)\n\t\t\texpect(layers[1].every((h) => h.class === D)).toBe(true)\n\t\t})\n\n\t\ttest('diamond: A → B, A → C, B → D, C → D', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [A] },\n\t\t\t\t{ cb: noop, class: D, after: [B, C] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(3)\n\t\t\texpect(layers[0][0].class).toBe(A)\n\t\t\tconst midClasses = layers[1].map((h) => h.class)\n\t\t\texpect(midClasses).toContain(B)\n\t\t\texpect(midClasses).toContain(C)\n\t\t\texpect(layers[2][0].class).toBe(D)\n\t\t})\n\n\t\ttest('close-event inversion reverses the graph', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [B] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks, true)\n\t\t\texpect(layers).toHaveLength(3)\n\t\t\texpect(layers[0].every((h) => h.class === C)).toBe(true)\n\t\t\texpect(layers[1].every((h) => h.class === B)).toBe(true)\n\t\t\texpect(layers[2].every((h) => h.class === A)).toBe(true)\n\t\t})\n\n\t\ttest('close inversion: fan-out becomes fan-in', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [A] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks, true)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\tconst firstClasses = layers[0].map((h) => h.class)\n\t\t\texpect(firstClasses).toContain(B)\n\t\t\texpect(firstClasses).toContain(C)\n\t\t\texpect(layers[1].every((h) => h.class === A)).toBe(true)\n\t\t})\n\n\t\ttest('multiple hooks per class are all in the same layer', () => {\n\t\t\tconst cb1 = () => {}\n\t\t\tconst cb2 = () => {}\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: cb1, class: A, after: [] },\n\t\t\t\t{ cb: cb2, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\texpect(layers[0]).toHaveLength(2)\n\t\t\texpect(layers[0].every((h) => h.class === A)).toBe(true)\n\t\t})\n\n\t\ttest('anonymous hooks without deps run at deepest level', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, after: [] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\tconst lastLayer = layers[layers.length - 1]\n\t\t\texpect(lastLayer.some((h) => h.class === undefined)).toBe(true)\n\t\t})\n\n\t\ttest('anonymous hooks with deps run after their dependencies', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [B] },\n\t\t\t\t{ cb: noop, after: [A] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\tconst anonLayer = layers.findIndex((l) => l.some((h) => h.class === undefined))\n\t\t\tconst aLayer = layers.findIndex((l) => l.some((h) => h.class === A))\n\t\t\texpect(anonLayer).toBeGreaterThan(aLayer)\n\t\t})\n\n\t\ttest('empty hooks returns empty layers', () => {\n\t\t\texpect(resolveHookDAG([])).toEqual([])\n\t\t})\n\t})\n\n\tdescribe('runHooks', () => {\n\t\ttest('same-depth siblings observably overlap', async () => {\n\t\t\tconst log: string[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{\n\t\t\t\t\tcb: async () => {\n\t\t\t\t\t\tlog.push('B-start')\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 20))\n\t\t\t\t\t\tlog.push('B-end')\n\t\t\t\t\t},\n\t\t\t\t\tclass: B,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcb: async () => {\n\t\t\t\t\t\tlog.push('C-start')\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 20))\n\t\t\t\t\t\tlog.push('C-end')\n\t\t\t\t\t},\n\t\t\t\t\tclass: C,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t]\n\t\t\tawait runHooks(hooks)\n\t\t\texpect(log[0]).toBe('B-start')\n\t\t\texpect(log[1]).toBe('C-start')\n\t\t})\n\n\t\ttest('different depths run sequentially', async () => {\n\t\t\tconst log: string[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{\n\t\t\t\t\tcb: async () => {\n\t\t\t\t\t\tlog.push('A')\n\t\t\t\t\t},\n\t\t\t\t\tclass: A,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcb: async () => {\n\t\t\t\t\t\tlog.push('B')\n\t\t\t\t\t},\n\t\t\t\t\tclass: B,\n\t\t\t\t\tafter: [A],\n\t\t\t\t},\n\t\t\t]\n\t\t\tawait runHooks(hooks)\n\t\t\texpect(log).toEqual(['A', 'B'])\n\t\t})\n\n\t\ttest('close inversion runs hooks in reverse dependency order', async () => {\n\t\t\tconst log: string[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: async () => log.push('A'), class: A, after: [] },\n\t\t\t\t{ cb: async () => log.push('B'), class: B, after: [A] },\n\t\t\t\t{ cb: async () => log.push('C'), class: C, after: [B] },\n\t\t\t]\n\t\t\tawait runHooks(hooks, undefined, true)\n\t\t\texpect(log).toEqual(['C', 'B', 'A'])\n\t\t})\n\n\t\ttest('errors are routed to onError handler', async () => {\n\t\t\tconst errors: Error[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{\n\t\t\t\t\tcb: () => {\n\t\t\t\t\t\tthrow new Error('boom')\n\t\t\t\t\t},\n\t\t\t\t\tclass: A,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t]\n\t\t\tawait runHooks(hooks, (e) => {\n\t\t\t\terrors.push(e)\n\t\t\t})\n\t\t\texpect(errors).toHaveLength(1)\n\t\t\texpect(errors[0].message).toBe('boom')\n\t\t})\n\n\t\ttest('raw promise callbacks are awaited', async () => {\n\t\t\tconst log: string[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{\n\t\t\t\t\tcb: Promise.resolve().then(() => log.push('resolved')),\n\t\t\t\t\tclass: A,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t]\n\t\t\tawait runHooks(hooks)\n\t\t\texpect(log).toContain('resolved')\n\t\t})\n\t})\n}\n","import { type ConditionalObjectKeys, type PipeInput, type PipeOutput, v } from 'valleyed'\n\nexport const instanceSettingsPipe = () =>\n\tv.object({\n\t\tapp: v.object({\n\t\t\tname: v.string(),\n\t\t}),\n\t\tlog: v.defaults(\n\t\t\tv.object({\n\t\t\t\tlevel: v.defaults(v.in(['fatal', 'error', 'warn', 'info', 'debug', 'trace', 'silent'] as const), 'info'),\n\t\t\t}),\n\t\t\t{},\n\t\t),\n\t\tutils: v.defaults(\n\t\t\tv.object({\n\t\t\t\thashSaltRounds: v.defaults(v.number(), 10),\n\t\t\t\tpaginationDefaultLimit: v.defaults(v.number(), 100),\n\t\t\t\tmaxFileUploadSizeInMb: v.defaults(v.number(), 500),\n\t\t\t}),\n\t\t\t{},\n\t\t),\n\t})\n\nexport type Settings = PipeOutput<ReturnType<typeof instanceSettingsPipe>>\nexport type SettingsInput = ConditionalObjectKeys<PipeInput<ReturnType<typeof instanceSettingsPipe>>>\n","import pino, { type Logger } from 'pino'\nimport { ulid } from 'ulid'\nimport { type Pipe, v } from 'valleyed'\n\nimport { EquippedError } from '../errors'\nimport { type ClassRef, type HookCb, type HookEvent, type HookOptions, type HookRecord, registerHook, runHooks } from './hooks'\nimport { instanceSettingsPipe, type Settings, type SettingsInput } from './settings'\n\nexport type { ClassRef, HookCb, HookEvent, HookOptions }\n\nexport class Instance {\n\tstatic #id: string | undefined\n\tstatic #instance: Instance | undefined\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: Logger<never>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = pino<never>({\n\t\t\tlevel: this.settings.log.level,\n\t\t\tserializers: {\n\t\t\t\terr: pino.stdSerializers.err,\n\t\t\t\terror: pino.stdSerializers.err,\n\t\t\t\treq: pino.stdSerializers.req,\n\t\t\t\tres: pino.stdSerializers.res,\n\t\t\t},\n\t\t\tmixin: () => ({\n\t\t\t\tinstanceId: Instance.#id,\n\t\t\t}),\n\t\t})\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\talias(id: string) {\n\t\tif (Instance.#id !== undefined) return Instance.crash(new EquippedError('Instance already has an alias', {}))\n\t\tInstance.#id = id\n\t}\n\n\tget id() {\n\t\tif (Instance.#id === undefined) return Instance.crash(new EquippedError('Instance doesnt have an alias yet', {}))\n\t\treturn Instance.#id\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tif (Instance.#instance) return Instance.crash(new EquippedError('Instance has been initialized already', {}))\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic maybeGet() {\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, options?: HookOptions) {\n\t\tInstance.#hooks[event] ??= []\n\t\tconst record: HookRecord = { cb, class: options?.class, after: options?.after ?? [] }\n\t\tregisterHook(Instance.#hooks[event], record)\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {}, true)\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createId(opts?: { prefix?: string; time?: Date }) {\n\t\treturn `${opts?.prefix ?? ''}${ulid(opts?.time?.getTime())}`\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class BadRequestError extends RequestError {\n\tstatusCode = StatusCodes.BadRequest\n\n\tconstructor(message: string, cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class NotAuthenticatedError extends RequestError {\n\tstatusCode = StatusCodes.NotAuthenticated\n\n\tconstructor(message = 'Not authenticated', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class NotAuthorizedError extends RequestError {\n\tstatusCode = StatusCodes.NotAuthorized\n\n\tconstructor(message = 'Not authorized', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class NotFoundError extends RequestError {\n\tstatusCode = StatusCodes.NotFound\n\n\tconstructor(message = 'Not found', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class PreconditionRequiredError extends RequestError {\n\tstatusCode = StatusCodes.PreconditionRequired\n\n\tconstructor(message = 'Precondition required', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class TokenExpired extends RequestError {\n\tstatusCode = StatusCodes.TokenExpired\n\n\tconstructor(message = 'Token expired', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\ntype ValidError = {\n\tmessages: string[]\n\tfield: string\n}\n\nexport class ValidationError extends RequestError {\n\tstatusCode = StatusCodes.ValidationError\n\n\tconstructor(errors: ValidError[], cause?: unknown) {\n\t\tsuper(\n\t\t\t'Unprocessable Entity',\n\t\t\terrors.flatMap(({ field, messages }) => messages.map((message) => ({ message, field }))),\n\t\t\tcause,\n\t\t)\n\t}\n}\n","export * from './equippedError'\nexport * from './requestError'\nexport * from './types/badRequestError'\nexport * from './types/notAuthenticatedError'\nexport * from './types/notAuthorizedError'\nexport * from './types/notFoundError'\nexport * from './types/preconditionRequiredError'\nexport * from './types/tokenExpired'\nexport * from './types/validationError'\n","import { EquippedError } from '../../errors'\n\nexport class OrmIntrospectionError extends EquippedError {\n\treadonly adapter: string\n\treadonly table: string\n\n\tconstructor(opts: { adapter: string; table: string; cause: unknown }) {\n\t\tsuper(`Introspection failed for table '${opts.table}' on adapter '${opts.adapter}'`, { adapter: opts.adapter, table: opts.table }, opts.cause)\n\t\tthis.adapter = opts.adapter\n\t\tthis.table = opts.table\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('OrmIntrospectionError', () => {\n\t\ttest('stores adapter, table, and cause on the instance', () => {\n\t\t\tconst cause = new Error('unknown column type')\n\t\t\tconst err = new OrmIntrospectionError({ adapter: 'postgres', table: 'users', cause })\n\t\t\texpect(err.adapter).toBe('postgres')\n\t\t\texpect(err.table).toBe('users')\n\t\t\texpect(err.cause).toBe(cause)\n\t\t})\n\n\t\ttest('message includes adapter and table', () => {\n\t\t\tconst err = new OrmIntrospectionError({ adapter: 'pg', table: 'posts', cause: 'bad type' })\n\t\t\texpect(err.message).toBe(\"Introspection failed for table 'posts' on adapter 'pg'\")\n\t\t})\n\n\t\ttest('instanceof EquippedError is true', () => {\n\t\t\tconst err = new OrmIntrospectionError({ adapter: 'x', table: 'y', cause: null })\n\t\t\texpect(err).toBeInstanceOf(OrmIntrospectionError)\n\t\t\texpect(err).toBeInstanceOf(EquippedError)\n\t\t})\n\n\t\ttest('context carries adapter and table', () => {\n\t\t\tconst err = new OrmIntrospectionError({ adapter: 'mem', table: 'items', cause: 'fail' })\n\t\t\texpect((err.context as any).adapter).toBe('mem')\n\t\t\texpect((err.context as any).table).toBe('items')\n\t\t})\n\n\t\ttest('discriminates from sibling error classes', async () => {\n\t\t\tconst { OrmMigrationError } = await import('./migration')\n\t\t\tconst { OrmValidationError } = await import('./validation')\n\t\t\tconst err = new OrmIntrospectionError({ adapter: 'x', table: 'y', cause: null })\n\t\t\texpect(err).not.toBeInstanceOf(OrmMigrationError)\n\t\t\texpect(err).not.toBeInstanceOf(OrmValidationError)\n\t\t})\n\t})\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\n\nimport { Pool, type PoolClient } from 'pg'\nimport Cursor from 'pg-cursor'\nimport { v } from 'valleyed'\n\nimport {\n\tbuildAggregateQuery,\n\tbuildCountQuery,\n\tbuildCreateQuery,\n\tbuildDeleteQuery,\n\tbuildPkUpdateQuery,\n\tbuildSelectQuery,\n\tbuildUpdateQuery,\n\tbuildUpsertQuery,\n\textractUpsertConflictColumn,\n} from './query'\nimport { EquippedError } from '../../../errors'\nimport { configurable } from '../../../utilities'\nimport type { FieldTypeName } from '../../adapter'\nimport type { FilterGroup } from '../../filter'\nimport type { DiscoveredSchema, ForeignKeyAction } from '../../migrations/introspection-types'\nimport type {\n\tAddFieldChange,\n\tAddForeignKeyChange,\n\tAddIndexChange,\n\tCreateTableChange,\n\tDropFieldChange,\n\tDropForeignKeyChange,\n\tDropIndexChange,\n\tDropTableChange,\n\tModifyFieldChange,\n\tRenameFieldChange,\n\tRenameTableChange,\n} from '../../migrations/types'\nimport { OrmAdapter, type AggregateSpec } from '../../orm-adapter'\nimport type { IterationQueryOptions, QueryOptions } from '../../query-options'\nimport type { AnySchema } from '../../schema'\nimport { flattenOps, type AnyUpdateOp } from '../../updates'\n\nexport type PostgresqlRepoConfig = {\n\tschema?: string\n\ttable: string\n}\n\nexport type PostgresqlConnectionConfig = {\n\thost: string\n\tport: number\n\tusername: string\n\tpassword: string\n\tdatabase: string\n\tssl?: boolean\n}\n\nconst postgresqlConnectionPipe = () =>\n\tv.object({\n\t\thost: v.string(),\n\t\tport: v.number(),\n\t\tusername: v.string(),\n\t\tpassword: v.string(),\n\t\tdatabase: v.string(),\n\t\tssl: v.defaults(v.boolean(), false),\n\t})\n\nconst TRACKER_TABLE = 'equipped_migrations'\nconst ADVISORY_LOCK_KEY = 3_735_928_559\nconst DEFAULT_CURSOR_BATCH_SIZE = 1000\n\ntype PostgresCursor<T extends Record<string, unknown>> = {\n\tread: (rowCount: number) => Promise<T[]>\n\tclose: () => Promise<void>\n}\n\nconst FIELD_TYPE_TO_PG: Record<string, string> = {\n\tstring: 'text',\n\tnumber: 'double precision',\n\tboolean: 'boolean',\n\tdate: 'timestamptz',\n\tnull: 'text',\n\tobject: 'jsonb',\n\tarray: 'jsonb',\n}\n\nconst PG_TO_FIELD_TYPE: Record<string, FieldTypeName> = {\n\ttext: 'string',\n\t'character varying': 'string',\n\tvarchar: 'string',\n\tchar: 'string',\n\tcharacter: 'string',\n\t'double precision': 'number',\n\treal: 'number',\n\tinteger: 'number',\n\tsmallint: 'number',\n\tnumeric: 'number',\n\tdecimal: 'number',\n\tboolean: 'boolean',\n\t'timestamp with time zone': 'date',\n\t'timestamp without time zone': 'date',\n\ttimestamptz: 'date',\n\ttimestamp: 'date',\n\tdate: 'date',\n\tjsonb: 'object',\n\tjson: 'object',\n}\n\nexport class PostgresAdapter extends configurable(postgresqlConnectionPipe, OrmAdapter) {\n\treadonly schemaConfigPipe = v.object({\n\t\tschema: v.optional(v.string()),\n\t\ttable: v.string(),\n\t})\n\n\treadonly supportedFieldTypes = ['string', 'number', 'boolean', 'null', 'object', 'array', 'date'] as const\n\treadonly queryableOps = [\n\t\t'eq',\n\t\t'ne',\n\t\t'gt',\n\t\t'gte',\n\t\t'lt',\n\t\t'lte',\n\t\t'in',\n\t\t'notIn',\n\t\t'like',\n\t\t'exists',\n\t\t'notExists',\n\t\t'contains',\n\t\t'notContains',\n\t] as const\n\treadonly updateOps = ['set', 'inc', 'mul', 'min', 'max', 'unset', 'push', 'pull', 'patch'] as const\n\treadonly aggregateOps = ['count', 'countDistinct', 'sum', 'avg', 'min', 'max'] as const\n\n\treadonly pool: Pool\n\t#sessionStore = new AsyncLocalStorage<PoolClient | undefined>()\n\n\tprotected constructor(config: typeof PostgresAdapter.Config) {\n\t\tsuper(config)\n\t\tthis.pool = new Pool({\n\t\t\thost: config.host,\n\t\t\tport: config.port,\n\t\t\tuser: config.username,\n\t\t\tpassword: config.password,\n\t\t\tdatabase: config.database,\n\t\t\tssl: config.ssl ? { rejectUnauthorized: false } : false,\n\t\t})\n\t}\n\n\t#getClient() {\n\t\treturn this.#sessionStore.getStore() ?? this.pool\n\t}\n\n\t#resolveTableName(config: PostgresqlRepoConfig) {\n\t\treturn config.schema && config.schema !== 'public' ? `${config.schema}.${config.table}` : config.table\n\t}\n\n\tasync connect() {}\n\n\tasync disconnect() {\n\t\ttry {\n\t\t\tawait this.pool.end()\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError('Failed to disconnect PostgreSQL pool', { adapter: 'postgresql' }, error)\n\t\t}\n\t}\n\n\tasync findByPk(schema: AnySchema, config: unknown, pk: unknown) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst pkName = schema.pkField.name\n\t\t\tconst result = await this.#getClient().query(`SELECT * FROM \"${tableName}\" WHERE \"${pkName}\" = $1`, [pk])\n\t\t\treturn result.rows[0] ?? null\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError('PostgreSQL findByPk failed', { adapter: 'postgresql', operation: 'findByPk', table: c.table }, error)\n\t\t}\n\t}\n\n\tasync createMany(_schema: AnySchema, config: unknown, data: Record<string, unknown>[]) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst client = this.#getClient()\n\t\t\tconst results: Record<string, unknown>[] = []\n\t\t\tfor (const doc of data) {\n\t\t\t\tconst { sql, params } = buildCreateQuery(tableName, doc)\n\t\t\t\tconst result = await client.query(sql, params)\n\t\t\t\tresults.push(result.rows[0])\n\t\t\t}\n\t\t\treturn results\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'PostgreSQL createMany failed',\n\t\t\t\t{ adapter: 'postgresql', operation: 'createMany', table: c.table },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync updateByPk(schema: AnySchema, config: unknown, pk: unknown, ops: AnyUpdateOp[]) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst pkName = schema.pkField.name\n\t\t\tconst data = flattenOps(ops)\n\t\t\tif (Object.keys(data).length === 0) {\n\t\t\t\tconst result = await this.#getClient().query(`SELECT * FROM \"${tableName}\" WHERE \"${pkName}\" = $1`, [pk])\n\t\t\t\treturn result.rows[0] ?? null\n\t\t\t}\n\t\t\tconst { sql, params } = buildPkUpdateQuery(tableName, pkName, pk, data)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn result.rows[0] ?? null\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'PostgreSQL updateByPk failed',\n\t\t\t\t{ adapter: 'postgresql', operation: 'updateByPk', table: c.table },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync deleteByPk(schema: AnySchema, config: unknown, pk: unknown) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst pkName = schema.pkField.name\n\t\t\tconst result = await this.#getClient().query(`DELETE FROM \"${tableName}\" WHERE \"${pkName}\" = $1 RETURNING *`, [pk])\n\t\t\treturn result.rows[0] ?? null\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'PostgreSQL deleteByPk failed',\n\t\t\t\t{ adapter: 'postgresql', operation: 'deleteByPk', table: c.table },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync raw(_schema: AnySchema, config: unknown, command: string, params: unknown[] = []) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst result = await this.#getClient().query(command, params)\n\t\t\treturn result\n\t\t} catch (error) {\n\t\t\tif (error instanceof EquippedError) throw error\n\t\t\tthrow new EquippedError('PostgreSQL raw failed', { adapter: 'postgresql', operation: 'raw', table: c.table }, error)\n\t\t}\n\t}\n\n\tasync findMany(schema: AnySchema, config: unknown, filter: FilterGroup, options?: QueryOptions) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst { sql, params } = buildSelectQuery(filter, options, tableName, schema.pkField.name)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn result.rows\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError('PostgreSQL findMany failed', { adapter: 'postgresql', operation: 'findMany', table: c.table }, error)\n\t\t}\n\t}\n\n\tasync count(schema: AnySchema, config: unknown, filter: FilterGroup) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst { sql, params } = buildCountQuery(filter, tableName, schema.pkField.name)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn Number(result.rows[0]?.count ?? 0)\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError('PostgreSQL count failed', { adapter: 'postgresql', operation: 'count', table: c.table }, error)\n\t\t}\n\t}\n\n\tasync *iterateMany(schema: AnySchema, config: unknown, filter: FilterGroup, options?: IterationQueryOptions) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\tlet client: PoolClient | undefined\n\t\tlet releaseClient = false\n\t\tlet cursor: PostgresCursor<Record<string, unknown>> | undefined\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst { sql, params } = buildSelectQuery(filter, options, tableName, schema.pkField.name)\n\t\t\tconst sessionClient = this.#sessionStore.getStore()\n\t\t\tif (sessionClient) {\n\t\t\t\tclient = sessionClient\n\t\t\t} else {\n\t\t\t\tclient = await this.pool.connect()\n\t\t\t\treleaseClient = true\n\t\t\t}\n\t\t\tcursor = client.query(new Cursor<Record<string, unknown>>(sql, params) as any) as PostgresCursor<Record<string, unknown>>\n\t\t\tconst batchSize = options?.batchSize ?? DEFAULT_CURSOR_BATCH_SIZE\n\n\t\t\twhile (true) {\n\t\t\t\tconst rows = await cursor.read(batchSize)\n\t\t\t\tif (rows.length === 0) break\n\t\t\t\tfor (const row of rows) yield row\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError('PostgreSQL iterateMany failed', { adapter: 'postgresql', operation: 'iterateMany', table: c.table }, error)\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tawait cursor?.close()\n\t\t\t} finally {\n\t\t\t\tif (releaseClient) client?.release()\n\t\t\t}\n\t\t}\n\t}\n\n\tasync updateMany(schema: AnySchema, config: unknown, filter: FilterGroup, data: Record<string, unknown>) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst { sql, params } = buildUpdateQuery(filter, tableName, schema.pkField.name, data)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn result.rows\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'PostgreSQL updateMany failed',\n\t\t\t\t{ adapter: 'postgresql', operation: 'updateMany', table: c.table },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync deleteMany(schema: AnySchema, config: unknown, filter: FilterGroup) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst { sql, params } = buildDeleteQuery(filter, tableName, schema.pkField.name)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn result.rows\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'PostgreSQL deleteMany failed',\n\t\t\t\t{ adapter: 'postgresql', operation: 'deleteMany', table: c.table },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync upsertOne(schema: AnySchema, config: unknown, filter: FilterGroup, create: Record<string, unknown>, ops: AnyUpdateOp[]) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst conflictColumn = extractUpsertConflictColumn(filter, schema.name)\n\t\t\tconst data = ops.length > 0 ? flattenOps(ops) : {}\n\t\t\tconst { sql, params } = buildUpsertQuery(tableName, conflictColumn, schema.pkField.name, create, data)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn result.rows[0]\n\t\t} catch (error) {\n\t\t\tif (error instanceof EquippedError) throw error\n\t\t\tthrow new EquippedError('PostgreSQL upsertOne failed', { adapter: 'postgresql', operation: 'upsertOne', table: c.table }, error)\n\t\t}\n\t}\n\n\tasync aggregate(schema: AnySchema, config: unknown, spec: AggregateSpec): Promise<Array<Record<string, unknown>>> {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst { sql, params } = buildAggregateQuery(spec, tableName, schema.pkField.name)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn result.rows.map((row: Record<string, unknown>) => {\n\t\t\t\tconst mapped: Record<string, unknown> = {}\n\t\t\t\tfor (const agg of spec.aggregates) {\n\t\t\t\t\tconst val = row[agg.alias]\n\t\t\t\t\tif (agg.fn === 'min' || agg.fn === 'max') {\n\t\t\t\t\t\tmapped[agg.alias] = val\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmapped[agg.alias] = typeof val === 'string' ? Number(val) : Number(val ?? 0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const field of spec.groupBy) {\n\t\t\t\t\tmapped[field] = row[field]\n\t\t\t\t}\n\t\t\t\treturn mapped\n\t\t\t})\n\t\t} catch (error) {\n\t\t\tif (error instanceof EquippedError) throw error\n\t\t\tthrow new EquippedError('PostgreSQL aggregate failed', { adapter: 'postgresql', operation: 'aggregate', table: c.table }, error)\n\t\t}\n\t}\n\n\tasync loadMigrations(): Promise<{ id: string; appliedAt: number }[]> {\n\t\tconst client = this.#getClient()\n\t\tawait client.query(`\n\t\t\tCREATE TABLE IF NOT EXISTS \"${TRACKER_TABLE}\" (\n\t\t\t\tid text PRIMARY KEY,\n\t\t\t\tapplied_at bigint NOT NULL\n\t\t\t)\n\t\t`)\n\t\tconst result = await client.query(`SELECT id, applied_at FROM \"${TRACKER_TABLE}\"`)\n\t\treturn result.rows.map((row: any) => ({ id: row.id, appliedAt: Number(row.applied_at) }))\n\t}\n\n\tasync recordMigration(id: string, appliedAt: number): Promise<void> {\n\t\tconst client = this.#getClient()\n\t\tawait client.query(`INSERT INTO \"${TRACKER_TABLE}\" (id, applied_at) VALUES ($1, $2)`, [id, appliedAt])\n\t}\n\n\tasync acquireMigrationLock<T>(fn: () => Promise<T>): Promise<T> {\n\t\tconst client = this.#getClient()\n\t\tawait client.query(`SELECT pg_advisory_lock($1)`, [ADVISORY_LOCK_KEY])\n\t\ttry {\n\t\t\treturn await fn()\n\t\t} finally {\n\t\t\tawait client.query(`SELECT pg_advisory_unlock($1)`, [ADVISORY_LOCK_KEY])\n\t\t}\n\t}\n\n\tasync applyCreateTable(change: CreateTableChange<any>): Promise<void> {\n\t\tconst pkType = FIELD_TYPE_TO_PG[change.pk.type] ?? 'text'\n\t\tconst cols = [`\"${change.pk.name}\" ${pkType} PRIMARY KEY`]\n\t\tfor (const f of change.fields) {\n\t\t\tcols.push(this.#renderColumnDef(f))\n\t\t}\n\t\tawait this.#getClient().query(`CREATE TABLE \"${change.name}\" (${cols.join(', ')})`)\n\t}\n\n\tasync applyDropTable(change: DropTableChange): Promise<void> {\n\t\tawait this.#getClient().query(`DROP TABLE \"${change.name}\"`)\n\t}\n\n\tasync applyAddField(change: AddFieldChange<any>): Promise<void> {\n\t\tconst colDef = this.#renderColumnDef(change.field)\n\t\tawait this.#getClient().query(`ALTER TABLE \"${change.table}\" ADD COLUMN ${colDef}`)\n\t}\n\n\tasync applyDropField(change: DropFieldChange): Promise<void> {\n\t\tawait this.#getClient().query(`ALTER TABLE \"${change.table}\" DROP COLUMN \"${change.name}\"`)\n\t}\n\n\tasync applyModifyField(change: ModifyFieldChange<any>): Promise<void> {\n\t\tconst client = this.#getClient()\n\t\tconst table = `\"${change.table}\"`\n\t\tconst col = `\"${change.name}\"`\n\t\tconst newType = FIELD_TYPE_TO_PG[change.to.type] ?? 'text'\n\t\tawait client.query(`ALTER TABLE ${table} ALTER COLUMN ${col} TYPE ${newType} USING ${col}::${newType}`)\n\t\tif (change.to.nullable) {\n\t\t\tawait client.query(`ALTER TABLE ${table} ALTER COLUMN ${col} DROP NOT NULL`)\n\t\t} else {\n\t\t\tawait client.query(`ALTER TABLE ${table} ALTER COLUMN ${col} SET NOT NULL`)\n\t\t}\n\t\tif (change.to.default !== undefined) {\n\t\t\tawait client.query(`ALTER TABLE ${table} ALTER COLUMN ${col} SET DEFAULT ${this.#renderDefault(change.to.default)}`)\n\t\t} else {\n\t\t\tawait client.query(`ALTER TABLE ${table} ALTER COLUMN ${col} DROP DEFAULT`)\n\t\t}\n\t\tif (change.to.name !== change.name) {\n\t\t\tawait client.query(`ALTER TABLE ${table} RENAME COLUMN ${col} TO \"${change.to.name}\"`)\n\t\t}\n\t}\n\n\tasync applyRenameTable(change: RenameTableChange): Promise<void> {\n\t\tawait this.#getClient().query(`ALTER TABLE \"${change.from}\" RENAME TO \"${change.to}\"`)\n\t}\n\n\tasync applyRenameField(change: RenameFieldChange): Promise<void> {\n\t\tawait this.#getClient().query(`ALTER TABLE \"${change.table}\" RENAME COLUMN \"${change.from}\" TO \"${change.to}\"`)\n\t}\n\n\tasync applyAddIndex(change: AddIndexChange): Promise<void> {\n\t\tconst name = change.name ?? this.#deriveIndexName(change.table, change.on as string[], change.unique)\n\t\tconst unique = change.unique ? 'UNIQUE ' : ''\n\t\tconst cols = (change.on as string[]).map((c) => `\"${c}\"`).join(', ')\n\t\tawait this.#getClient().query(`CREATE ${unique}INDEX \"${name}\" ON \"${change.table}\" (${cols})`)\n\t}\n\n\tasync applyDropIndex(change: DropIndexChange): Promise<void> {\n\t\tawait this.#getClient().query(`DROP INDEX \"${change.name}\"`)\n\t}\n\n\tasync applyAddForeignKey(change: AddForeignKeyChange): Promise<void> {\n\t\tconst name = change.name ?? `fk_${change.table}_${change.on}`\n\t\tlet sql = `ALTER TABLE \"${change.table}\" ADD CONSTRAINT \"${name}\" FOREIGN KEY (\"${change.on}\") REFERENCES \"${change.references.table}\" (\"${change.references.column}\")`\n\t\tif (change.onDelete) sql += ` ON DELETE ${this.#renderFkAction(change.onDelete)}`\n\t\tif (change.onUpdate) sql += ` ON UPDATE ${this.#renderFkAction(change.onUpdate)}`\n\t\tawait this.#getClient().query(sql)\n\t}\n\n\tasync applyDropForeignKey(change: DropForeignKeyChange): Promise<void> {\n\t\tawait this.#getClient().query(`ALTER TABLE \"${change.table}\" DROP CONSTRAINT \"${change.name}\"`)\n\t}\n\n\tasync introspect(): Promise<DiscoveredSchema[]> {\n\t\tconst { OrmIntrospectionError } = await import('../../errors/introspection')\n\t\tconst client = this.#getClient()\n\n\t\tconst tablesResult = await client.query(`\n\t\t\tSELECT table_name FROM information_schema.tables\n\t\t\tWHERE table_schema = 'public' AND table_type = 'BASE TABLE' AND table_name != $1\n\t\t`, [TRACKER_TABLE])\n\n\t\tconst schemas: DiscoveredSchema[] = []\n\n\t\tfor (const tableRow of tablesResult.rows) {\n\t\t\tconst tableName = tableRow.table_name\n\n\t\t\tconst colsResult = await client.query(`\n\t\t\t\tSELECT column_name, data_type, is_nullable, column_default\n\t\t\t\tFROM information_schema.columns\n\t\t\t\tWHERE table_schema = 'public' AND table_name = $1\n\t\t\t\tORDER BY ordinal_position\n\t\t\t`, [tableName])\n\n\t\t\tconst pkResult = await client.query(`\n\t\t\t\tSELECT kcu.column_name\n\t\t\t\tFROM information_schema.table_constraints tc\n\t\t\t\tJOIN information_schema.key_column_usage kcu\n\t\t\t\t\tON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema\n\t\t\t\tWHERE tc.table_schema = 'public' AND tc.table_name = $1 AND tc.constraint_type = 'PRIMARY KEY'\n\t\t\t`, [tableName])\n\n\t\t\tconst pkColName = pkResult.rows[0]?.column_name as string | undefined\n\n\t\t\tconst uniqueResult = await client.query(`\n\t\t\t\tSELECT kcu.column_name\n\t\t\t\tFROM information_schema.table_constraints tc\n\t\t\t\tJOIN information_schema.key_column_usage kcu\n\t\t\t\t\tON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema\n\t\t\t\tWHERE tc.table_schema = 'public' AND tc.table_name = $1 AND tc.constraint_type = 'UNIQUE'\n\t\t\t`, [tableName])\n\t\t\tconst uniqueCols = new Set(uniqueResult.rows.map((r: any) => r.column_name))\n\n\t\t\tlet pk: { name: string; type: FieldTypeName } | undefined\n\t\t\tconst fields: { name: string; type: FieldTypeName; nullable: boolean; default?: string | number | boolean | null; unique?: boolean }[] = []\n\n\t\t\tfor (const col of colsResult.rows) {\n\t\t\t\tconst pgType = (col.data_type as string).toLowerCase()\n\t\t\t\tconst fieldType = PG_TO_FIELD_TYPE[pgType]\n\t\t\t\tif (!fieldType) {\n\t\t\t\t\tthrow new OrmIntrospectionError({ adapter: 'postgresql', table: tableName, cause: `Unsupported column type '${pgType}' on column '${col.column_name}'` })\n\t\t\t\t}\n\n\t\t\t\tif (col.column_name === pkColName) {\n\t\t\t\t\tpk = { name: col.column_name, type: fieldType }\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst nullable = col.is_nullable === 'YES'\n\t\t\t\tconst raw = col.column_default as string | null\n\t\t\t\tconst def = this.#parseDefault(raw)\n\n\t\t\t\tfields.push({\n\t\t\t\t\tname: col.column_name,\n\t\t\t\t\ttype: fieldType,\n\t\t\t\t\tnullable,\n\t\t\t\t\t...(def !== undefined ? { default: def } : {}),\n\t\t\t\t\t...(uniqueCols.has(col.column_name) ? { unique: true } : {}),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst idxResult = await client.query(`\n\t\t\t\tSELECT indexname, indexdef\n\t\t\t\tFROM pg_indexes\n\t\t\t\tWHERE schemaname = 'public' AND tablename = $1\n\t\t\t`, [tableName])\n\n\t\t\tconst indexes: { name: string; on: readonly string[]; unique: boolean }[] = []\n\t\t\tfor (const idx of idxResult.rows) {\n\t\t\t\tconst idxName = idx.indexname as string\n\t\t\t\tconst idxDef = idx.indexdef as string\n\t\t\t\tif (idxDef.includes('PRIMARY KEY') || idxName.endsWith('_pkey')) continue\n\t\t\t\tconst unique = idxDef.toUpperCase().includes('UNIQUE')\n\t\t\t\tconst colMatch = idxDef.match(/\\(([^)]+)\\)/)\n\t\t\t\tconst cols = colMatch ? colMatch[1].split(',').map((c: string) => c.trim().replace(/\"/g, '')) : []\n\t\t\t\tindexes.push({ name: idxName, on: cols, unique })\n\t\t\t}\n\n\t\t\tconst fkResult = await client.query(`\n\t\t\t\tSELECT\n\t\t\t\t\ttc.constraint_name,\n\t\t\t\t\tkcu.column_name,\n\t\t\t\t\tccu.table_name AS foreign_table_name,\n\t\t\t\t\tccu.column_name AS foreign_column_name,\n\t\t\t\t\trc.delete_rule,\n\t\t\t\t\trc.update_rule\n\t\t\t\tFROM information_schema.table_constraints tc\n\t\t\t\tJOIN information_schema.key_column_usage kcu\n\t\t\t\t\tON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema\n\t\t\t\tJOIN information_schema.constraint_column_usage ccu\n\t\t\t\t\tON tc.constraint_name = ccu.constraint_name AND tc.table_schema = ccu.table_schema\n\t\t\t\tJOIN information_schema.referential_constraints rc\n\t\t\t\t\tON tc.constraint_name = rc.constraint_name AND tc.table_schema = rc.constraint_schema\n\t\t\t\tWHERE tc.table_schema = 'public' AND tc.table_name = $1 AND tc.constraint_type = 'FOREIGN KEY'\n\t\t\t`, [tableName])\n\n\t\t\tconst foreignKeys: { name: string; on: string; references: { table: string; column: string }; onDelete?: ForeignKeyAction; onUpdate?: ForeignKeyAction }[] = []\n\t\t\tfor (const fk of fkResult.rows) {\n\t\t\t\tforeignKeys.push({\n\t\t\t\t\tname: fk.constraint_name,\n\t\t\t\t\ton: fk.column_name,\n\t\t\t\t\treferences: { table: fk.foreign_table_name, column: fk.foreign_column_name },\n\t\t\t\t\t...(fk.delete_rule && fk.delete_rule !== 'NO ACTION' ? { onDelete: this.#parseFkAction(fk.delete_rule) } : {}),\n\t\t\t\t\t...(fk.update_rule && fk.update_rule !== 'NO ACTION' ? { onUpdate: this.#parseFkAction(fk.update_rule) } : {}),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tschemas.push({ name: tableName, pk, fields, indexes, foreignKeys })\n\t\t}\n\n\t\treturn schemas\n\t}\n\n\t#renderColumnDef(f: { name: string; type: string; nullable?: boolean; default?: string | number | boolean | null; unique?: boolean }): string {\n\t\tconst pgType = FIELD_TYPE_TO_PG[f.type] ?? 'text'\n\t\tlet def = `\"${f.name}\" ${pgType}`\n\t\tif (!f.nullable) def += ' NOT NULL'\n\t\tif (f.default !== undefined) def += ` DEFAULT ${this.#renderDefault(f.default)}`\n\t\tif (f.unique) def += ' UNIQUE'\n\t\treturn def\n\t}\n\n\t#renderDefault(val: string | number | boolean | null | undefined): string {\n\t\tif (val === null) return 'NULL'\n\t\tif (typeof val === 'string') return `'${val.replace(/'/g, \"''\")}'`\n\t\tif (typeof val === 'boolean') return val ? 'TRUE' : 'FALSE'\n\t\treturn String(val)\n\t}\n\n\t#deriveIndexName(table: string, cols: string[], unique?: boolean): string {\n\t\tconst base = `idx_${table}_${cols.join('_')}`\n\t\treturn unique ? `${base}_unique` : base\n\t}\n\n\t#renderFkAction(action: string): string {\n\t\tconst map: Record<string, string> = { cascade: 'CASCADE', restrict: 'RESTRICT', setnull: 'SET NULL', noaction: 'NO ACTION' }\n\t\treturn map[action.toLowerCase()] ?? 'NO ACTION'\n\t}\n\n\t#parseFkAction(rule: string): ForeignKeyAction {\n\t\tconst map: Record<string, ForeignKeyAction> = { CASCADE: 'cascade', RESTRICT: 'restrict', 'SET NULL': 'setNull' }\n\t\treturn map[rule.toUpperCase()] ?? 'noAction'\n\t}\n\n\t#parseDefault(raw: string | null): string | number | boolean | null | undefined {\n\t\tif (raw === null || raw === undefined) return undefined\n\t\tif (raw === 'NULL' || raw === 'NULL::text') return null\n\t\tif (raw === 'true' || raw === 'TRUE') return true\n\t\tif (raw === 'false' || raw === 'FALSE') return false\n\t\tconst numMatch = raw.match(/^(-?\\d+(?:\\.\\d+)?)$/)\n\t\tif (numMatch) return Number(numMatch[1])\n\t\tconst strMatch = raw.match(/^'(.*)'(?:::.*)?$/)\n\t\tif (strMatch) return strMatch[1].replace(/''/g, \"'\")\n\t\treturn undefined\n\t}\n\n\tasync session<T>(fn: () => Promise<T>): Promise<T> {\n\t\tif (this.#sessionStore.getStore()) return fn()\n\t\tlet client: PoolClient | undefined\n\t\ttry {\n\t\t\tclient = await this.pool.connect()\n\t\t\tawait client.query('BEGIN')\n\t\t\tconst result = await this.#sessionStore.run(client, fn)\n\t\t\tawait client.query('COMMIT')\n\t\t\treturn result\n\t\t} catch (error) {\n\t\t\tif (client) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.query('ROLLBACK')\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore rollback errors and report original failure\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (error instanceof EquippedError) throw error\n\t\t\tthrow new EquippedError('PostgreSQL session failed', { adapter: 'postgresql', operation: 'session' }, error)\n\t\t} finally {\n\t\t\tclient?.release()\n\t\t}\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf, vi, beforeEach, afterEach } = import.meta.vitest\n\n\tconst testConnectionConfig = {\n\t\thost: 'localhost',\n\t\tport: 5432,\n\t\tusername: 'test',\n\t\tpassword: 'test',\n\t\tdatabase: 'testdb',\n\t\tssl: false,\n\t} as const\n\n\tdescribe('PostgresAdapter: class-via-configurable shape', () => {\n\t\tlet onSpy: ReturnType<typeof vi.spyOn>\n\n\t\tbeforeEach(async () => {\n\t\t\tconst { Instance } = await import('../../../instance')\n\t\t\tonSpy = vi.spyOn(Instance, 'on').mockImplementation(() => {})\n\t\t})\n\n\t\tafterEach(() => {\n\t\t\tonSpy.mockRestore()\n\t\t})\n\n\t\ttest('PostgresAdapter.create returns instance with correct capability declarations', () => {\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\n\t\t\texpect(adapter.supportedFieldTypes).toEqual(['string', 'number', 'boolean', 'null', 'object', 'array', 'date'])\n\t\t\texpect(adapter.queryableOps).toEqual([\n\t\t\t\t'eq',\n\t\t\t\t'ne',\n\t\t\t\t'gt',\n\t\t\t\t'gte',\n\t\t\t\t'lt',\n\t\t\t\t'lte',\n\t\t\t\t'in',\n\t\t\t\t'notIn',\n\t\t\t\t'like',\n\t\t\t\t'exists',\n\t\t\t\t'notExists',\n\t\t\t\t'contains',\n\t\t\t\t'notContains',\n\t\t\t])\n\t\t\texpect(adapter.updateOps).toEqual(['set', 'inc', 'mul', 'min', 'max', 'unset', 'push', 'pull', 'patch'])\n\t\t})\n\n\t\ttest('PostgresAdapter.create validates connection config', () => {\n\t\t\texpect(() => PostgresAdapter.create({ host: 123, port: 'bad' } as any)).toThrow()\n\t\t})\n\n\t\ttest('pool is exposed as a readonly instance field', () => {\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\n\t\t\texpect(adapter.pool).toBeInstanceOf(Pool)\n\t\t})\n\n\t\ttest('schemaConfigPipe is declared as readonly with table-name shape', () => {\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\n\t\t\texpect(adapter.schemaConfigPipe).toBeDefined()\n\t\t})\n\n\t\ttest('auto-wires Instance hooks for connect and disconnect', () => {\n\t\t\tPostgresAdapter.create(testConnectionConfig)\n\n\t\t\texpect(onSpy).toHaveBeenCalledWith('start', expect.any(Function), expect.objectContaining({ class: PostgresAdapter }))\n\t\t\texpect(onSpy).toHaveBeenCalledWith('close', expect.any(Function), expect.objectContaining({ class: PostgresAdapter }))\n\t\t})\n\n\t\ttest('adapter.use returns OrmUse-shaped object', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst use = adapter.use(schema, { table: 'test' })\n\n\t\t\texpect(use.findMany).toBeTypeOf('function')\n\t\t\texpect(use.iterateMany).toBeTypeOf('function')\n\t\t\texpect(use.findOne).toBeTypeOf('function')\n\t\t\texpect(use.count).toBeTypeOf('function')\n\t\t\texpect(use.createOne).toBeTypeOf('function')\n\t\t\texpect(use.createMany).toBeTypeOf('function')\n\t\t\texpect(use.updateMany).toBeTypeOf('function')\n\t\t\texpect(use.updateOne).toBeTypeOf('function')\n\t\t\texpect(use.upsertOne).toBeTypeOf('function')\n\t\t\texpect(use.deleteOne).toBeTypeOf('function')\n\t\t\texpect(use.deleteMany).toBeTypeOf('function')\n\t\t\texpect(use.raw).toBeTypeOf('function')\n\t\t})\n\n\t\ttest('type-level: capability declarations use as const', () => {\n\t\t\tconst _adapter = PostgresAdapter.create(testConnectionConfig)\n\n\t\t\ttype Ops = typeof _adapter.updateOps\n\t\t\texpectTypeOf<Ops>().toEqualTypeOf<readonly ['set', 'inc', 'mul', 'min', 'max', 'unset', 'push', 'pull', 'patch']>()\n\n\t\t\ttype Types = typeof _adapter.supportedFieldTypes\n\t\t\texpectTypeOf<Types>().toEqualTypeOf<readonly ['string', 'number', 'boolean', 'null', 'object', 'array', 'date']>()\n\n\t\t\ttype QOps = typeof _adapter.queryableOps\n\t\t\texpectTypeOf<QOps>().toEqualTypeOf<\n\t\t\t\treadonly ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'notIn', 'like', 'exists', 'notExists', 'contains', 'notContains']\n\t\t\t>()\n\t\t})\n\n\t\ttest('type-level: Repo.from with PostgresAdapter enables all builder methods', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve(() => ({ table: 'test' }))\n\t\t\t\t.build()\n\t\t\tconst _TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\n\t\t\tconst _one = repo.on(_TestSchema).one()\n\t\t\tconst _all = repo.on(_TestSchema).all()\n\t\t\tconst _ref = repo.on(_TestSchema)\n\t\t\texpectTypeOf(_one.create).toBeFunction()\n\t\t\texpectTypeOf(_one.find).toBeFunction()\n\t\t\texpectTypeOf(_one.update).toBeFunction()\n\t\t\texpectTypeOf(_one.delete).toBeFunction()\n\t\t\texpectTypeOf(_one.upsert).toBeFunction()\n\t\t\texpectTypeOf(_all.create).toBeFunction()\n\t\t\texpectTypeOf(_all.find).toBeFunction()\n\t\t\texpectTypeOf(_all.count).toBeFunction()\n\t\t\texpectTypeOf(_all.update).toBeFunction()\n\t\t\texpectTypeOf(_all.delete).toBeFunction()\n\t\t\texpectTypeOf(_ref.raw).toBeFunction()\n\t\t\texpectTypeOf(repo.session).toBeFunction()\n\t\t})\n\n\t\ttest('type-level: raw arg-tuple infers (command: string, params?: unknown[]) from PostgresAdapter', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve(() => ({ table: 'test' }))\n\t\t\t\t.build()\n\t\t\tconst _TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst _ref = repo.on(_TestSchema)\n\n\t\t\texpectTypeOf(_ref.raw).parameters.toEqualTypeOf<[command: string, params?: unknown[]]>()\n\t\t})\n\n\t\ttest('type-level: per-call <T> override narrows PostgresAdapter raw return type', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve(() => ({ table: 'test' }))\n\t\t\t\t.build()\n\t\t\tconst _TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst _ref = repo.on(_TestSchema)\n\n\t\t\texpectTypeOf(_ref.raw<{ id: string }[]>).returns.toEqualTypeOf<Promise<{ id: string }[]>>()\n\t\t})\n\n\t\ttest('count forwards COUNT query to pool.query and returns a number', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\n\t\t\tconst schema = Schema.from('pg_count')\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 adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tlet capturedSql: unknown\n\t\t\tlet capturedParams: unknown\n\t\t\t;(adapter.pool as any).query = async (sql: unknown, params: unknown) => {\n\t\t\t\tcapturedSql = sql\n\t\t\t\tcapturedParams = params\n\t\t\t\treturn { rows: [{ count: '4' }] }\n\t\t\t}\n\n\t\t\tconst result = await adapter.count(schema, { table: 'users' }, FilterGroup.create().eq('name', 'Alice'))\n\t\t\texpect(capturedSql).toBe('SELECT COUNT(*) as count FROM \"users\" WHERE \"name\" = $1')\n\t\t\texpect(capturedParams).toEqual(['Alice'])\n\t\t\texpect(result).toBe(4)\n\t\t})\n\n\t\ttest('raw forwards (command, params) to pool.query at runtime', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('pg_raw')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tlet capturedCommand: unknown\n\t\t\tlet capturedParams: unknown\n\t\t\tconst mockResult = { rows: [{ id: '1' }], rowCount: 1 }\n\t\t\t;(adapter.pool as any).query = async (cmd: unknown, params: unknown) => {\n\t\t\t\tcapturedCommand = cmd\n\t\t\t\tcapturedParams = params\n\t\t\t\treturn mockResult\n\t\t\t}\n\t\t\tconst result = await adapter.use(schema, { table: 'users' }).raw('SELECT * FROM users WHERE id = $1', ['abc'])\n\t\t\texpect(capturedCommand).toBe('SELECT * FROM users WHERE id = $1')\n\t\t\texpect(capturedParams).toEqual(['abc'])\n\t\t\texpect(result).toBe(mockResult)\n\t\t})\n\n\t\ttest('raw defaults params to [] when omitted', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('pg_raw2')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tlet capturedParams: unknown\n\t\t\t;(adapter.pool as any).query = async (_cmd: unknown, params: unknown) => {\n\t\t\t\tcapturedParams = params\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t\tawait adapter.use(schema, { table: 'users' }).raw('SELECT 1')\n\t\t\texpect(capturedParams).toEqual([])\n\t\t})\n\n\t\ttest('iterateMany opens a dedicated cursor client, reads in batchSize chunks, and releases on completion', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\t\t\tconst { OrderBy } = await import('../../query-options')\n\n\t\t\tconst schema = Schema.from('pg_iter')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('age', v.number())\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tlet capturedCursor: Cursor<Record<string, unknown>> | undefined\n\t\t\tconst release = vi.fn()\n\t\t\tconst cursor = {\n\t\t\t\tread: vi.fn()\n\t\t\t\t\t.mockResolvedValueOnce([{ id: 'u3', age: 40 }])\n\t\t\t\t\t.mockResolvedValueOnce([{ id: 'u1', age: 30 }])\n\t\t\t\t\t.mockResolvedValueOnce([]),\n\t\t\t\tclose: vi.fn().mockResolvedValue(undefined),\n\t\t\t}\n\t\t\tconst client = {\n\t\t\t\tquery: vi.fn((query: Cursor<Record<string, unknown>>) => {\n\t\t\t\t\tcapturedCursor = query\n\t\t\t\t\treturn cursor\n\t\t\t\t}),\n\t\t\t\trelease,\n\t\t\t}\n\t\t\t;(adapter.pool as any).connect = vi.fn(async () => client)\n\n\t\t\tconst rows: Record<string, unknown>[] = []\n\t\t\tfor await (const row of adapter.use(schema, { table: 'people' }).iterateMany(FilterGroup.create().gt('age', 19), {\n\t\t\t\torderBy: [new OrderBy('age', 'desc')],\n\t\t\t\toffset: 1,\n\t\t\t\tlimit: 2,\n\t\t\t\tbatchSize: 1,\n\t\t\t})) {\n\t\t\t\trows.push(row)\n\t\t\t}\n\n\t\t\texpect((adapter.pool as any).connect).toHaveBeenCalledTimes(1)\n\t\t\texpect(capturedCursor).toBeInstanceOf(Cursor)\n\t\t\tconst capturedCursorConfig = capturedCursor as unknown as { text: string; values: unknown[] }\n\t\t\texpect(capturedCursorConfig.text).toBe('SELECT * FROM \"people\" WHERE \"age\" > $1 ORDER BY \"age\" DESC LIMIT $2 OFFSET $3')\n\t\t\texpect(capturedCursorConfig.values).toEqual(['19', '2', '1'])\n\t\t\texpect(cursor.read).toHaveBeenNthCalledWith(1, 1)\n\t\t\texpect(cursor.read).toHaveBeenNthCalledWith(2, 1)\n\t\t\texpect(cursor.read).toHaveBeenNthCalledWith(3, 1)\n\t\t\texpect(cursor.close).toHaveBeenCalledTimes(1)\n\t\t\texpect(release).toHaveBeenCalledTimes(1)\n\t\t\texpect(rows).toEqual([{ id: 'u3', age: 40 }, { id: 'u1', age: 30 }])\n\t\t})\n\n\t\ttest('iterateMany closes cursor and releases dedicated client on early break', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\n\t\t\tconst schema = Schema.from('pg_iter_break')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst release = vi.fn()\n\t\t\tconst cursor = {\n\t\t\t\tread: vi.fn().mockResolvedValueOnce([{ id: 'u1' }, { id: 'u2' }]),\n\t\t\t\tclose: vi.fn().mockResolvedValue(undefined),\n\t\t\t}\n\t\t\t;(adapter.pool as any).connect = vi.fn(async () => ({\n\t\t\t\tquery: vi.fn(() => cursor),\n\t\t\t\trelease,\n\t\t\t}))\n\n\t\t\tconst rows: Record<string, unknown>[] = []\n\t\t\tfor await (const row of adapter.use(schema, { table: 'people' }).iterateMany(FilterGroup.create())) {\n\t\t\t\trows.push(row)\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\texpect(rows).toEqual([{ id: 'u1' }])\n\t\t\texpect(cursor.close).toHaveBeenCalledTimes(1)\n\t\t\texpect(release).toHaveBeenCalledTimes(1)\n\t\t})\n\n\t\ttest('iterateMany closes cursor and releases dedicated client when the consumer throws', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\n\t\t\tconst schema = Schema.from('pg_iter_throw')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst release = vi.fn()\n\t\t\tconst cursor = {\n\t\t\t\tread: vi.fn().mockResolvedValueOnce([{ id: 'u1' }]),\n\t\t\t\tclose: vi.fn().mockResolvedValue(undefined),\n\t\t\t}\n\t\t\t;(adapter.pool as any).connect = vi.fn(async () => ({\n\t\t\t\tquery: vi.fn(() => cursor),\n\t\t\t\trelease,\n\t\t\t}))\n\t\t\tconst consumerError = new Error('consumer failed')\n\n\t\t\tawait expect(async () => {\n\t\t\t\tfor await (const _row of adapter.use(schema, { table: 'people' }).iterateMany(FilterGroup.create())) {\n\t\t\t\t\tthrow consumerError\n\t\t\t\t}\n\t\t\t}).rejects.toThrow(consumerError)\n\n\t\t\texpect(cursor.close).toHaveBeenCalledTimes(1)\n\t\t\texpect(release).toHaveBeenCalledTimes(1)\n\t\t})\n\n\t\ttest('iterateMany inside a session uses the active client and leaves release ownership to session', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\n\t\t\tconst schema = Schema.from('pg_iter_session')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst events: string[] = []\n\t\t\tconst release = vi.fn(() => events.push('release'))\n\t\t\tconst cursor = {\n\t\t\t\tread: vi.fn()\n\t\t\t\t\t.mockResolvedValueOnce([{ id: 'u1' }])\n\t\t\t\t\t.mockResolvedValueOnce([]),\n\t\t\t\tclose: vi.fn(async () => events.push('cursor.close')),\n\t\t\t}\n\t\t\tconst client = {\n\t\t\t\tquery: vi.fn((query: string | Cursor<Record<string, unknown>>) => {\n\t\t\t\t\tif (typeof query === 'string') {\n\t\t\t\t\t\tevents.push(query)\n\t\t\t\t\t\treturn { rows: [] }\n\t\t\t\t\t}\n\t\t\t\t\tevents.push('cursor.open')\n\t\t\t\t\treturn cursor\n\t\t\t\t}),\n\t\t\t\trelease,\n\t\t\t}\n\t\t\t;(adapter.pool as any).connect = vi.fn(async () => client)\n\n\t\t\tconst rows: Record<string, unknown>[] = []\n\t\t\tawait adapter.session(async () => {\n\t\t\t\tfor await (const row of adapter.use(schema, { table: 'people' }).iterateMany(FilterGroup.create(), { batchSize: 1 })) {\n\t\t\t\t\trows.push(row)\n\t\t\t\t}\n\t\t\t\tevents.push('session.body.done')\n\t\t\t})\n\n\t\t\texpect((adapter.pool as any).connect).toHaveBeenCalledTimes(1)\n\t\t\texpect(rows).toEqual([{ id: 'u1' }])\n\t\t\texpect(events).toEqual(['BEGIN', 'cursor.open', 'cursor.close', 'session.body.done', 'COMMIT', 'release'])\n\t\t\texpect(release).toHaveBeenCalledTimes(1)\n\t\t})\n\n\t\ttest('session method is exposed on the adapter', () => {\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\texpect(adapter.session).toBeDefined()\n\t\t\texpect(adapter.session).toBeTypeOf('function')\n\t\t})\n\n\t\ttest('declares aggregateOps with all six canonical ops', () => {\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\texpect(adapter.aggregateOps).toEqual(['count', 'countDistinct', 'sum', 'avg', 'min', 'max'])\n\t\t})\n\n\t\ttest('type-level: aggregateOps is a readonly tuple of all six ops', () => {\n\t\t\tconst _adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\ttype AggOps = typeof _adapter.aggregateOps\n\t\t\texpectTypeOf<AggOps>().toEqualTypeOf<\n\t\t\t\treadonly ['count', 'countDistinct', 'sum', 'avg', 'min', 'max']\n\t\t\t>()\n\t\t})\n\n\t\ttest('aggregate method forwards spec to pool.query and returns mapped rows', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('pg_agg')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('amount', v.number())\n\t\t\t\t.field('region', v.string())\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tlet capturedSql: unknown\n\t\t\tlet capturedParams: unknown\n\t\t\t;(adapter.pool as any).query = async (sql: unknown, params: unknown) => {\n\t\t\t\tcapturedSql = sql\n\t\t\t\tcapturedParams = params\n\t\t\t\treturn { rows: [{ total: '5' }] }\n\t\t\t}\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'orders' }, {\n\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\tgroupBy: [],\n\t\t\t})\n\t\t\texpect(capturedSql).toBe('SELECT COUNT(*) AS \"total\" FROM \"orders\"')\n\t\t\texpect(capturedParams).toEqual([])\n\t\t\texpect(result).toEqual([{ total: 5 }])\n\t\t})\n\n\t\ttest('aggregate converts PG bigint/numeric strings to numbers for count/sum/avg', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('pg_agg_types')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('amount', v.number())\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\t;(adapter.pool as any).query = async () => ({\n\t\t\t\trows: [{ cnt: '10', revenue: '250.50', avgAmt: '25.05' }],\n\t\t\t})\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'orders' }, {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'count', alias: 'cnt' },\n\t\t\t\t\t{ fn: 'sum', field: 'amount', alias: 'revenue' },\n\t\t\t\t\t{ fn: 'avg', field: 'amount', alias: 'avgAmt' },\n\t\t\t\t],\n\t\t\t\tgroupBy: [],\n\t\t\t})\n\t\t\texpect(result[0].cnt).toBe(10)\n\t\t\texpect(result[0].revenue).toBe(250.5)\n\t\t\texpect(result[0].avgAmt).toBe(25.05)\n\t\t})\n\n\t\ttest('aggregate preserves original type for min/max', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('pg_agg_minmax')\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 adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\t;(adapter.pool as any).query = async () => ({\n\t\t\t\trows: [{ lowest: 'Alice', highest: 'Zara' }],\n\t\t\t})\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'users' }, {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'min', field: 'name', alias: 'lowest' },\n\t\t\t\t\t{ fn: 'max', field: 'name', alias: 'highest' },\n\t\t\t\t],\n\t\t\t\tgroupBy: [],\n\t\t\t})\n\t\t\texpect(result[0].lowest).toBe('Alice')\n\t\t\texpect(result[0].highest).toBe('Zara')\n\t\t})\n\n\t\ttest('aggregate includes groupBy fields in result rows', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('pg_agg_group')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('region', v.string())\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\t;(adapter.pool as any).query = async () => ({\n\t\t\t\trows: [\n\t\t\t\t\t{ cnt: '3', region: 'US' },\n\t\t\t\t\t{ cnt: '2', region: 'EU' },\n\t\t\t\t],\n\t\t\t})\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'orders' }, {\n\t\t\t\taggregates: [{ fn: 'count', alias: 'cnt' }],\n\t\t\t\tgroupBy: ['region'],\n\t\t\t})\n\t\t\texpect(result).toEqual([\n\t\t\t\t{ cnt: 3, region: 'US' },\n\t\t\t\t{ cnt: 2, region: 'EU' },\n\t\t\t])\n\t\t})\n\n\t\ttest('type-level: Repo.from with PostgresAdapter enables aggregate method', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve(() => ({ table: 'test' }))\n\t\t\t\t.build()\n\t\t\tconst _TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\n\t\t\tconst _ref = repo.on(_TestSchema)\n\t\t\texpectTypeOf(_ref.aggregate).toBeFunction()\n\t\t})\n\t})\n\n\tdescribe('PostgresAdapter: migration methods', () => {\n\t\tlet onSpy: ReturnType<typeof vi.spyOn>\n\t\tlet adapter: PostgresAdapter\n\t\tlet queries: { sql: string; params?: unknown[] }[]\n\n\t\tbeforeEach(async () => {\n\t\t\tconst { Instance } = await import('../../../instance')\n\t\t\tonSpy = vi.spyOn(Instance, 'on').mockImplementation(() => {})\n\t\t\tadapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tqueries = []\n\t\t\t;(adapter.pool as any).query = async (sql: string, params?: unknown[]) => {\n\t\t\t\tqueries.push({ sql, params })\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t})\n\n\t\tafterEach(() => {\n\t\t\tonSpy.mockRestore()\n\t\t})\n\n\t\ttest('loadMigrations creates tracker table then selects rows', async () => {\n\t\t\t;(adapter.pool as any).query = async (sql: string, params?: unknown[]) => {\n\t\t\t\tqueries.push({ sql, params })\n\t\t\t\tif (sql.includes('SELECT id')) {\n\t\t\t\t\treturn { rows: [{ id: '0001', applied_at: '1700000000000' }] }\n\t\t\t\t}\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t\tconst result = await adapter.loadMigrations()\n\t\t\texpect(queries).toHaveLength(2)\n\t\t\texpect(queries[0].sql).toContain('CREATE TABLE IF NOT EXISTS')\n\t\t\texpect(queries[0].sql).toContain('equipped_migrations')\n\t\t\texpect(queries[1].sql).toContain('SELECT id, applied_at')\n\t\t\texpect(result).toEqual([{ id: '0001', appliedAt: 1700000000000 }])\n\t\t})\n\n\t\ttest('recordMigration inserts into tracker table', async () => {\n\t\t\tawait adapter.recordMigration('0001-init', 1700000000000)\n\t\t\texpect(queries).toHaveLength(1)\n\t\t\texpect(queries[0].sql).toContain('INSERT INTO')\n\t\t\texpect(queries[0].sql).toContain('equipped_migrations')\n\t\t\texpect(queries[0].params).toEqual(['0001-init', 1700000000000])\n\t\t})\n\n\t\ttest('acquireMigrationLock wraps fn with pg_advisory_lock/unlock', async () => {\n\t\t\tconst result = await adapter.acquireMigrationLock(async () => {\n\t\t\t\tqueries.push({ sql: 'USER_FN' })\n\t\t\t\treturn 42\n\t\t\t})\n\t\t\texpect(result).toBe(42)\n\t\t\texpect(queries[0].sql).toContain('pg_advisory_lock')\n\t\t\texpect(queries[1].sql).toBe('USER_FN')\n\t\t\texpect(queries[2].sql).toContain('pg_advisory_unlock')\n\t\t})\n\n\t\ttest('acquireMigrationLock unlocks even on error', async () => {\n\t\t\tawait expect(adapter.acquireMigrationLock(async () => {\n\t\t\t\tthrow new Error('boom')\n\t\t\t})).rejects.toThrow('boom')\n\t\t\texpect(queries[0].sql).toContain('pg_advisory_lock')\n\t\t\texpect(queries[1].sql).toContain('pg_advisory_unlock')\n\t\t})\n\n\t\ttest('applyCreateTable generates correct DDL', async () => {\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', unique: true },\n\t\t\t\t\t{ name: 'age', type: 'number', nullable: true },\n\t\t\t\t\t{ name: 'active', type: 'boolean', default: true },\n\t\t\t\t],\n\t\t\t})\n\t\t\texpect(queries).toHaveLength(1)\n\t\t\tconst sql = queries[0].sql\n\t\t\texpect(sql).toContain('CREATE TABLE \"users\"')\n\t\t\texpect(sql).toContain('\"id\" text PRIMARY KEY')\n\t\t\texpect(sql).toContain('\"email\" text NOT NULL UNIQUE')\n\t\t\texpect(sql).toContain('\"age\" double precision')\n\t\t\texpect(sql).not.toContain('\"age\" double precision NOT NULL')\n\t\t\texpect(sql).toContain('\"active\" boolean NOT NULL DEFAULT TRUE')\n\t\t})\n\n\t\ttest('applyDropTable generates DROP TABLE', async () => {\n\t\t\tawait adapter.applyDropTable({ kind: 'dropTable', name: 'users' })\n\t\t\texpect(queries[0].sql).toBe('DROP TABLE \"users\"')\n\t\t})\n\n\t\ttest('applyAddField generates ALTER TABLE ADD COLUMN', async () => {\n\t\t\tawait adapter.applyAddField({\n\t\t\t\tkind: 'addField',\n\t\t\t\ttable: 'users',\n\t\t\t\tfield: { name: 'bio', type: 'string', nullable: true, default: 'none' },\n\t\t\t})\n\t\t\texpect(queries[0].sql).toContain('ALTER TABLE \"users\" ADD COLUMN')\n\t\t\texpect(queries[0].sql).toContain('\"bio\" text')\n\t\t\texpect(queries[0].sql).not.toContain('NOT NULL')\n\t\t\texpect(queries[0].sql).toContain(\"DEFAULT 'none'\")\n\t\t})\n\n\t\ttest('applyDropField generates ALTER TABLE DROP COLUMN', async () => {\n\t\t\tawait adapter.applyDropField({ kind: 'dropField', table: 'users', name: 'bio' })\n\t\t\texpect(queries[0].sql).toBe('ALTER TABLE \"users\" DROP COLUMN \"bio\"')\n\t\t})\n\n\t\ttest('applyModifyField generates ALTER COLUMN statements for type, nullable, default', async () => {\n\t\t\tawait adapter.applyModifyField({\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', nullable: true, default: null },\n\t\t\t})\n\t\t\texpect(queries[0].sql).toContain('ALTER COLUMN \"age\" TYPE text')\n\t\t\texpect(queries[1].sql).toContain('DROP NOT NULL')\n\t\t\texpect(queries[2].sql).toContain('SET DEFAULT NULL')\n\t\t})\n\n\t\ttest('applyModifyField renames column when to.name differs', async () => {\n\t\t\tawait adapter.applyModifyField({\n\t\t\t\tkind: 'modifyField',\n\t\t\t\ttable: 'users',\n\t\t\t\tname: 'age',\n\t\t\t\tto: { name: 'years', type: 'number' },\n\t\t\t})\n\t\t\tconst renameSql = queries.find((q) => q.sql.includes('RENAME COLUMN'))\n\t\t\texpect(renameSql).toBeDefined()\n\t\t\texpect(renameSql!.sql).toContain('RENAME COLUMN \"age\" TO \"years\"')\n\t\t})\n\n\t\ttest('applyRenameTable generates ALTER TABLE RENAME', async () => {\n\t\t\tawait adapter.applyRenameTable({ kind: 'renameTable', from: 'users', to: 'accounts' })\n\t\t\texpect(queries[0].sql).toBe('ALTER TABLE \"users\" RENAME TO \"accounts\"')\n\t\t})\n\n\t\ttest('applyRenameField generates ALTER TABLE RENAME COLUMN', async () => {\n\t\t\tawait adapter.applyRenameField({ kind: 'renameField', table: 'users', from: 'name', to: 'fullName' })\n\t\t\texpect(queries[0].sql).toBe('ALTER TABLE \"users\" RENAME COLUMN \"name\" TO \"fullName\"')\n\t\t})\n\n\t\ttest('applyAddIndex generates CREATE INDEX with auto-derived name', async () => {\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'users', on: ['email'] })\n\t\t\texpect(queries[0].sql).toBe('CREATE INDEX \"idx_users_email\" ON \"users\" (\"email\")')\n\t\t})\n\n\t\ttest('applyAddIndex generates CREATE UNIQUE INDEX with explicit name', async () => {\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'users', on: ['email'], unique: true, name: 'my_idx' })\n\t\t\texpect(queries[0].sql).toBe('CREATE UNIQUE INDEX \"my_idx\" ON \"users\" (\"email\")')\n\t\t})\n\n\t\ttest('applyAddIndex auto-derives unique suffix when unique and no name', async () => {\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'posts', on: ['author', 'title'], unique: true })\n\t\t\texpect(queries[0].sql).toBe('CREATE UNIQUE INDEX \"idx_posts_author_title_unique\" ON \"posts\" (\"author\", \"title\")')\n\t\t})\n\n\t\ttest('applyDropIndex generates DROP INDEX', async () => {\n\t\t\tawait adapter.applyDropIndex({ kind: 'dropIndex', name: 'idx_users_email' })\n\t\t\texpect(queries[0].sql).toBe('DROP INDEX \"idx_users_email\"')\n\t\t})\n\n\t\ttest('applyAddForeignKey generates ALTER TABLE ADD CONSTRAINT with auto-derived name', async () => {\n\t\t\tawait adapter.applyAddForeignKey({\n\t\t\t\tkind: 'addForeignKey',\n\t\t\t\ttable: 'posts',\n\t\t\t\ton: 'authorId',\n\t\t\t\treferences: { table: 'users', column: 'id' },\n\t\t\t\tonDelete: 'cascade',\n\t\t\t\tonUpdate: 'setNull',\n\t\t\t})\n\t\t\tconst sql = queries[0].sql\n\t\t\texpect(sql).toContain('ALTER TABLE \"posts\" ADD CONSTRAINT \"fk_posts_authorId\"')\n\t\t\texpect(sql).toContain('FOREIGN KEY (\"authorId\") REFERENCES \"users\" (\"id\")')\n\t\t\texpect(sql).toContain('ON DELETE CASCADE')\n\t\t\texpect(sql).toContain('ON UPDATE SET NULL')\n\t\t})\n\n\t\ttest('applyAddForeignKey uses explicit name when provided', async () => {\n\t\t\tawait adapter.applyAddForeignKey({\n\t\t\t\tkind: 'addForeignKey',\n\t\t\t\ttable: 'posts',\n\t\t\t\ton: 'authorId',\n\t\t\t\treferences: { table: 'users', column: 'id' },\n\t\t\t\tname: 'custom_fk',\n\t\t\t})\n\t\t\texpect(queries[0].sql).toContain('ADD CONSTRAINT \"custom_fk\"')\n\t\t})\n\n\t\ttest('applyDropForeignKey generates ALTER TABLE DROP CONSTRAINT', async () => {\n\t\t\tawait adapter.applyDropForeignKey({ kind: 'dropForeignKey', table: 'posts', name: 'fk_posts_authorId' })\n\t\t\texpect(queries[0].sql).toBe('ALTER TABLE \"posts\" DROP CONSTRAINT \"fk_posts_authorId\"')\n\t\t})\n\n\t\ttest('introspect queries information_schema and builds DiscoveredSchema[]', async () => {\n\t\t\t;(adapter.pool as any).query = async (sql: string, params?: unknown[]) => {\n\t\t\t\tqueries.push({ sql, params })\n\t\t\t\tif (sql.includes('information_schema.tables')) {\n\t\t\t\t\treturn { rows: [{ table_name: 'users' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes('information_schema.columns')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trows: [\n\t\t\t\t\t\t\t{ column_name: 'id', data_type: 'text', is_nullable: 'NO', column_default: null },\n\t\t\t\t\t\t\t{ column_name: 'email', data_type: 'character varying', is_nullable: 'NO', column_default: null },\n\t\t\t\t\t\t\t{ column_name: 'age', data_type: 'integer', is_nullable: 'YES', column_default: '25' },\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (sql.includes('PRIMARY KEY')) {\n\t\t\t\t\treturn { rows: [{ column_name: 'id' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes(\"constraint_type = 'UNIQUE'\")) {\n\t\t\t\t\treturn { rows: [{ column_name: 'email' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes('pg_indexes')) {\n\t\t\t\t\treturn { rows: [{ indexname: 'users_email_idx', indexdef: 'CREATE UNIQUE INDEX users_email_idx ON public.users USING btree (email)' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes(\"constraint_type = 'FOREIGN KEY'\")) {\n\t\t\t\t\treturn { rows: [] }\n\t\t\t\t}\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t\tconst schemas = await adapter.introspect()\n\t\t\texpect(schemas).toHaveLength(1)\n\t\t\tconst s = schemas[0]\n\t\t\texpect(s.name).toBe('users')\n\t\t\texpect(s.pk).toEqual({ name: 'id', type: 'string' })\n\t\t\texpect(s.fields).toEqual([\n\t\t\t\t{ name: 'email', type: 'string', nullable: false, unique: true },\n\t\t\t\t{ name: 'age', type: 'number', nullable: true, default: 25 },\n\t\t\t])\n\t\t\texpect(s.indexes).toEqual([{ name: 'users_email_idx', on: ['email'], unique: true }])\n\t\t\texpect(s.foreignKeys).toEqual([])\n\t\t})\n\n\t\ttest('introspect throws OrmIntrospectionError on unsupported PG type', async () => {\n\t\t\tconst { OrmIntrospectionError } = await import('../../errors/introspection')\n\t\t\t;(adapter.pool as any).query = async (sql: string) => {\n\t\t\t\tif (sql.includes('information_schema.tables')) {\n\t\t\t\t\treturn { rows: [{ table_name: 'files' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes('information_schema.columns')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trows: [\n\t\t\t\t\t\t\t{ column_name: 'id', data_type: 'text', is_nullable: 'NO', column_default: null },\n\t\t\t\t\t\t\t{ column_name: 'data', data_type: 'bytea', is_nullable: 'YES', column_default: null },\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (sql.includes('PRIMARY KEY')) {\n\t\t\t\t\treturn { rows: [{ column_name: 'id' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes(\"constraint_type = 'UNIQUE'\")) {\n\t\t\t\t\treturn { rows: [] }\n\t\t\t\t}\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t\tawait expect(adapter.introspect()).rejects.toThrow(OrmIntrospectionError)\n\t\t\ttry {\n\t\t\t\tawait adapter.introspect()\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err.adapter).toBe('postgresql')\n\t\t\t\texpect(err.table).toBe('files')\n\t\t\t\texpect(err.cause).toContain('bytea')\n\t\t\t}\n\t\t})\n\n\t\ttest('introspect parses foreign keys with cascade actions', async () => {\n\t\t\t;(adapter.pool as any).query = async (sql: string) => {\n\t\t\t\tif (sql.includes('information_schema.tables')) {\n\t\t\t\t\treturn { rows: [{ table_name: 'posts' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes('information_schema.columns')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trows: [\n\t\t\t\t\t\t\t{ column_name: 'id', data_type: 'text', is_nullable: 'NO', column_default: null },\n\t\t\t\t\t\t\t{ column_name: 'author_id', data_type: 'text', is_nullable: 'NO', column_default: null },\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (sql.includes('PRIMARY KEY')) {\n\t\t\t\t\treturn { rows: [{ column_name: 'id' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes(\"constraint_type = 'UNIQUE'\")) {\n\t\t\t\t\treturn { rows: [] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes('pg_indexes')) {\n\t\t\t\t\treturn { rows: [] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes(\"constraint_type = 'FOREIGN KEY'\")) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trows: [{\n\t\t\t\t\t\t\tconstraint_name: 'fk_posts_author_id',\n\t\t\t\t\t\t\tcolumn_name: 'author_id',\n\t\t\t\t\t\t\tforeign_table_name: 'users',\n\t\t\t\t\t\t\tforeign_column_name: 'id',\n\t\t\t\t\t\t\tdelete_rule: 'CASCADE',\n\t\t\t\t\t\t\tupdate_rule: 'SET NULL',\n\t\t\t\t\t\t}],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t\tconst schemas = await adapter.introspect()\n\t\t\texpect(schemas[0].foreignKeys).toEqual([{\n\t\t\t\tname: 'fk_posts_author_id',\n\t\t\t\ton: 'author_id',\n\t\t\t\treferences: { table: 'users', column: 'id' },\n\t\t\t\tonDelete: 'cascade',\n\t\t\t\tonUpdate: 'setNull',\n\t\t\t}])\n\t\t})\n\n\t\ttest('introspect excludes tracker table from results', async () => {\n\t\t\t;(adapter.pool as any).query = async (sql: string, params?: unknown[]) => {\n\t\t\t\tif (sql.includes('information_schema.tables')) {\n\t\t\t\t\texpect(params).toContain('equipped_migrations')\n\t\t\t\t\treturn { rows: [] }\n\t\t\t\t}\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t\tconst schemas = await adapter.introspect()\n\t\t\texpect(schemas).toEqual([])\n\t\t})\n\n\t\ttest('type-level: PostgresAdapter declares all migration methods', () => {\n\t\t\texpectTypeOf(adapter.loadMigrations).toBeFunction()\n\t\t\texpectTypeOf(adapter.recordMigration).toBeFunction()\n\t\t\texpectTypeOf(adapter.acquireMigrationLock).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyCreateTable).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyDropTable).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyAddField).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyDropField).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyModifyField).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyRenameTable).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyRenameField).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyAddIndex).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyDropIndex).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyAddForeignKey).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyDropForeignKey).toBeFunction()\n\t\t\texpectTypeOf(adapter.introspect).toBeFunction()\n\t\t})\n\n\t\ttest('type-level: Migrator.from rejects withoutLock for PostgresAdapter', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Migrator } = await import('../../migrations/migrator')\n\t\t\tconst repo = Repo.from(adapter).resolve(() => ({ table: 'test' })).build()\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('applyCreateTable maps all field types to correct PG types', async () => {\n\t\t\tawait adapter.applyCreateTable({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: 'all_types',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [\n\t\t\t\t\t{ name: 'f_num', type: 'number' },\n\t\t\t\t\t{ name: 'f_bool', type: 'boolean' },\n\t\t\t\t\t{ name: 'f_date', type: 'date' },\n\t\t\t\t\t{ name: 'f_null', type: 'null' },\n\t\t\t\t\t{ name: 'f_obj', type: 'object' },\n\t\t\t\t\t{ name: 'f_arr', type: 'array' },\n\t\t\t\t],\n\t\t\t})\n\t\t\tconst sql = queries[0].sql\n\t\t\texpect(sql).toContain('\"f_num\" double precision NOT NULL')\n\t\t\texpect(sql).toContain('\"f_bool\" boolean NOT NULL')\n\t\t\texpect(sql).toContain('\"f_date\" timestamptz NOT NULL')\n\t\t\texpect(sql).toContain('\"f_null\" text NOT NULL')\n\t\t\texpect(sql).toContain('\"f_obj\" jsonb NOT NULL')\n\t\t\texpect(sql).toContain('\"f_arr\" jsonb NOT NULL')\n\t\t})\n\n\t\ttest('applyModifyField sets NOT NULL when nullable is falsy', async () => {\n\t\t\tawait adapter.applyModifyField({\n\t\t\t\tkind: 'modifyField',\n\t\t\t\ttable: 'users',\n\t\t\t\tname: 'email',\n\t\t\t\tto: { name: 'email', type: 'string' },\n\t\t\t})\n\t\t\texpect(queries[1].sql).toContain('SET NOT NULL')\n\t\t})\n\n\t\ttest('applyModifyField drops default when to.default is undefined', async () => {\n\t\t\tawait adapter.applyModifyField({\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: 'number' },\n\t\t\t})\n\t\t\texpect(queries[2].sql).toContain('DROP DEFAULT')\n\t\t})\n\n\t\ttest('applyAddField with string default escapes single quotes', async () => {\n\t\t\tawait adapter.applyAddField({\n\t\t\t\tkind: 'addField',\n\t\t\t\ttable: 'users',\n\t\t\t\tfield: { name: 'bio', type: 'string', default: \"it's\" },\n\t\t\t})\n\t\t\texpect(queries[0].sql).toContain(\"DEFAULT 'it''s'\")\n\t\t})\n\n\t\ttest('end-to-end: Migrator.from(repo, adapter) wires up correctly', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Migrator } = await import('../../migrations/migrator')\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tSchema.from('users').pk('id', v.string(), () => 'x').field('email', v.string()).build()\n\t\t\tconst repo = Repo.from(adapter).resolve(() => ({ table: 'test' })).build()\n\n\t\t\tlet loadCalls = 0\n\t\t\tconst mockClient = {\n\t\t\t\tquery: async (sql: string, _params?: unknown[]) => {\n\t\t\t\t\tif (sql.includes('pg_advisory_lock') || sql.includes('pg_advisory_unlock')) return { rows: [] }\n\t\t\t\t\tif (sql.includes('CREATE TABLE IF NOT EXISTS')) return { rows: [] }\n\t\t\t\t\tif (sql.includes('SELECT id, applied_at')) { loadCalls++; return { rows: [] } }\n\t\t\t\t\tif (sql.includes('INSERT INTO')) return { rows: [] }\n\t\t\t\t\tif (sql.includes('CREATE TABLE')) return { rows: [] }\n\t\t\t\t\tif (sql === 'BEGIN' || sql === 'COMMIT' || sql === 'ROLLBACK') return { rows: [] }\n\t\t\t\t\treturn { rows: [] }\n\t\t\t\t},\n\t\t\t\trelease: () => {},\n\t\t\t}\n\t\t\t;(adapter.pool as any).query = mockClient.query\n\t\t\t;(adapter.pool as any).connect = async () => mockClient\n\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([\n\t\t\t\t{ id: '0001', changes: [{ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'email', type: 'string' }] }] },\n\t\t\t]).build()\n\n\t\t\tconst result = await migrator.up()\n\t\t\texpect(result.ran).toEqual(['0001'])\n\t\t\texpect(loadCalls).toBe(1)\n\t\t})\n\t})\n}\n","import type { FilterOpName } from './adapter'\nimport { EquippedError } from '../errors'\nimport { OrmValidationError, type OrmValidationFailure } from './errors'\nimport { toFieldName, type AnyField, type Field } from './fields'\nimport type { AggregateSpec } from './orm-adapter'\nimport type { AnySchema } from './schema'\n\nexport class Filter {\n\treadonly field: string\n\tconstructor(\n\t\tfield: string | AnyField,\n\t\treadonly op: FilterOpName,\n\t\treadonly value: unknown,\n\t) {\n\t\tthis.field = toFieldName(field)\n\t}\n}\n\nexport type FilterChild = Filter | FilterGroup\n\nexport type FilterFactory = (q: FilterGroup) => FilterGroup\n\nexport type FilterGroupOp = 'and' | 'or'\n\nexport class FilterGroup {\n\treadonly children: readonly FilterChild[]\n\n\tprivate constructor(\n\t\treadonly op: FilterGroupOp = 'and',\n\t\tchildren?: readonly FilterChild[],\n\t) {\n\t\tthis.children = children ?? []\n\t}\n\n\t#withChild(child: FilterChild): FilterGroup {\n\t\treturn new FilterGroup(this.op, [...this.children, child])\n\t}\n\n\teq<T>(field: string | Field<T>, value: T): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'eq', value))\n\t}\n\n\tne<T>(field: string | Field<T>, value: T): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'ne', value))\n\t}\n\n\tgt<T>(field: string | Field<T>, value: T): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'gt', value))\n\t}\n\n\tgte<T>(field: string | Field<T>, value: T): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'gte', value))\n\t}\n\n\tlt<T>(field: string | Field<T>, value: T): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'lt', value))\n\t}\n\n\tlte<T>(field: string | Field<T>, value: T): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'lte', value))\n\t}\n\n\tin<T>(field: string | Field<T>, value: T[]): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'in', value))\n\t}\n\n\tnotIn<T>(field: string | Field<T>, value: T[]): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'notIn', value))\n\t}\n\n\tlike(field: string | Field<string>, value: string): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'like', value))\n\t}\n\n\texists(field: string | Field<unknown>): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'exists', true))\n\t}\n\n\tnotExists(field: string | Field<unknown>): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'notExists', true))\n\t}\n\n\tcontains<T>(field: string | Field<T>, value: T[]): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'contains', value))\n\t}\n\n\tnotContains<T>(field: string | Field<T>, value: T[]): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'notContains', value))\n\t}\n\n\tand(facFns: FilterFactory[]): FilterGroup {\n\t\tif (facFns.length === 0) throw new EquippedError('and() requires at least one filter factory', { op: 'and' })\n\t\tconst group = new FilterGroup('and', facFns.map((fn) => fn(FilterGroup.create())))\n\t\treturn this.#withChild(group)\n\t}\n\n\tor(facFns: FilterFactory[]): FilterGroup {\n\t\tif (facFns.length === 0) throw new EquippedError('or() requires at least one filter factory', { op: 'or' })\n\t\tconst group = new FilterGroup('or', facFns.map((fn) => fn(FilterGroup.create())))\n\t\treturn this.#withChild(group)\n\t}\n\n\tclone(): FilterGroup {\n\t\treturn new FilterGroup(\n\t\t\tthis.op,\n\t\t\tthis.children.map((c) => {\n\t\t\t\tif (c instanceof Filter) return new Filter(c.field, c.op, structuredClone(c.value))\n\t\t\t\treturn c.clone()\n\t\t\t}),\n\t\t)\n\t}\n\n\tstatic create(): FilterGroup {\n\t\treturn new FilterGroup()\n\t}\n}\n\n\nexport type GatedFilterGroup<DeclaredOps extends readonly FilterOpName[]> = {\n\t[K in FilterOpName]: K extends DeclaredOps[number] ? FilterGroup[K] : never\n} & Pick<FilterGroup, 'and' | 'or' | 'clone' | 'children' | 'op'>\n\nexport type GatedFilterFactory<DeclaredOps extends readonly FilterOpName[]> = (\n\tq: GatedFilterGroup<DeclaredOps>,\n) => GatedFilterGroup<DeclaredOps>\n\nexport function assertNormalisedAggregate(schema: AnySchema, adapter: { aggregateOps: readonly string[] }, spec: AggregateSpec): void {\n\tconst failures: OrmValidationFailure[] = []\n\n\tif (spec.aggregates.length === 0) {\n\t\tfailures.push({ cause: 'At least one aggregator step is required' })\n\t}\n\n\tconst seenAliases = new Set<string>()\n\tfor (const agg of spec.aggregates) {\n\t\tif (seenAliases.has(agg.alias)) {\n\t\t\tfailures.push({ alias: agg.alias, cause: `Duplicate alias \"${agg.alias}\"` })\n\t\t}\n\t\tseenAliases.add(agg.alias)\n\n\t\tif (!adapter.aggregateOps.includes(agg.fn)) {\n\t\t\tfailures.push({ alias: agg.alias, cause: `Undeclared aggregate op \"${agg.fn}\"` })\n\t\t}\n\t}\n\n\tconst allFields = schema.fields as Record<string, unknown>\n\tconst fieldNames = new Set(Object.keys(allFields))\n\tfor (const field of spec.groupBy) {\n\t\tif (!fieldNames.has(field)) {\n\t\t\tfailures.push({ field, cause: `Unknown groupBy field \"${field}\" on schema \"${schema.name}\"` })\n\t\t}\n\t\tif (seenAliases.has(field)) {\n\t\t\tfailures.push({ alias: field, cause: `Alias \"${field}\" collides with groupBy field name` })\n\t\t}\n\t}\n\n\tif (failures.length > 0) {\n\t\tthrow new OrmValidationError('aggregate', schema.name, 'aggregate', failures)\n\t}\n\n\tif (spec.where) {\n\t\tassertNormalisedFilter(schema, spec.where)\n\t}\n\n\tif (spec.having) {\n\t\tconst validHavingFields = new Set([...seenAliases, ...spec.groupBy])\n\t\tconst havingErrors: OrmValidationFailure[] = []\n\n\t\tfunction walkHaving(node: FilterChild): void {\n\t\t\tif (node instanceof Filter) {\n\t\t\t\tif (!validHavingFields.has(node.field)) {\n\t\t\t\t\thavingErrors.push({ field: node.field, cause: `Unknown having field \"${node.field}\" — must be an aggregator alias or groupBy field` })\n\t\t\t\t}\n\t\t\t} else if (node instanceof FilterGroup) {\n\t\t\t\tfor (const child of node.children) walkHaving(child)\n\t\t\t}\n\t\t}\n\n\t\tfor (const child of spec.having.children) walkHaving(child)\n\n\t\tif (havingErrors.length > 0) {\n\t\t\tthrow new OrmValidationError('aggregate', schema.name, 'aggregate', havingErrors)\n\t\t}\n\t}\n}\n\nexport function assertNormalisedFilter(schema: AnySchema, group: FilterGroup): void {\n\tconst allFields = schema.fields as Record<string, unknown>\n\tconst fieldNames = new Set(Object.keys(allFields))\n\tconst errors: Array<{ field: string; cause: string }> = []\n\n\tfunction walk(node: FilterChild): void {\n\t\tif (node instanceof Filter) {\n\t\t\tif (!fieldNames.has(node.field)) {\n\t\t\t\terrors.push({ field: node.field, cause: `Unknown field \"${node.field}\" on schema \"${schema.name}\"` })\n\t\t\t}\n\t\t} else if (node instanceof FilterGroup) {\n\t\t\tfor (const child of node.children) walk(child)\n\t\t}\n\t}\n\n\tfor (const child of group.children) walk(child)\n\n\tif (errors.length > 0) {\n\t\tthrow new OrmValidationError(\n\t\t\t'validation',\n\t\t\tschema.name,\n\t\t\t'filter',\n\t\t\terrors.map((e) => ({ field: e.field, cause: e.cause })),\n\t\t)\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { Schema } = await import('./schema')\n\n\tconst UserSchema = Schema.from('users')\n\t\t.pk('id', v.string(), () => 'u1')\n\t\t.field('email', v.string())\n\t\t.field('age', v.number())\n\t\t.field('name', v.string())\n\t\t.field('tags', v.array(v.string()))\n\t\t.build()\n\n\tdescribe('FilterGroup', () => {\n\t\tdescribe('filter-op methods', () => {\n\t\t\ttest('eq adds a filter clause with op eq', () => {\n\t\t\t\tconst g = FilterGroup.create().eq(UserSchema.fields.age, 25)\n\t\t\t\texpect(g.children).toHaveLength(1)\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.field).toBe('age')\n\t\t\t\texpect(f.op).toBe('eq')\n\t\t\t\texpect(f.value).toBe(25)\n\t\t\t})\n\n\t\t\ttest('ne adds a filter clause with op ne', () => {\n\t\t\t\tconst g = FilterGroup.create().ne('name', 'Bob')\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.op).toBe('ne')\n\t\t\t\texpect(f.value).toBe('Bob')\n\t\t\t})\n\n\t\t\ttest('gt/gte/lt/lte produce correct ops', () => {\n\t\t\t\tconst g = FilterGroup.create()\n\t\t\t\t\t.gt(UserSchema.fields.age, 10)\n\t\t\t\t\t.gte(UserSchema.fields.age, 20)\n\t\t\t\t\t.lt(UserSchema.fields.age, 30)\n\t\t\t\t\t.lte(UserSchema.fields.age, 40)\n\t\t\t\texpect(g.children.map((c) => (c as Filter).op)).toEqual(['gt', 'gte', 'lt', 'lte'])\n\t\t\t})\n\n\t\t\ttest('in adds a filter clause with array value', () => {\n\t\t\t\tconst g = FilterGroup.create().in(UserSchema.fields.age, [1, 2, 3])\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.op).toBe('in')\n\t\t\t\texpect(f.value).toEqual([1, 2, 3])\n\t\t\t})\n\n\t\t\ttest('notIn adds a filter clause with op notIn', () => {\n\t\t\t\tconst g = FilterGroup.create().notIn(UserSchema.fields.age, [4, 5])\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.op).toBe('notIn')\n\t\t\t\texpect(f.value).toEqual([4, 5])\n\t\t\t})\n\n\t\t\ttest('like adds a filter clause with op like', () => {\n\t\t\t\tconst g = FilterGroup.create().like(UserSchema.fields.email, 'alice')\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.op).toBe('like')\n\t\t\t\texpect(f.value).toBe('alice')\n\t\t\t})\n\n\t\t\ttest('exists adds a filter clause with op exists', () => {\n\t\t\t\tconst g = FilterGroup.create().exists(UserSchema.fields.name)\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.op).toBe('exists')\n\t\t\t})\n\n\t\t\ttest('notExists is its own op, not a boolean form of exists', () => {\n\t\t\t\tconst g = FilterGroup.create().notExists(UserSchema.fields.name)\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.op).toBe('notExists')\n\t\t\t\texpect(f.op).not.toBe('exists')\n\t\t\t})\n\n\t\t\ttest('contains/notContains produce correct ops', () => {\n\t\t\t\tconst g = FilterGroup.create()\n\t\t\t\t\t.contains('tags', ['a'])\n\t\t\t\t\t.notContains('tags', ['b'])\n\t\t\t\texpect((g.children[0] as Filter).op).toBe('contains')\n\t\t\t\texpect((g.children[1] as Filter).op).toBe('notContains')\n\t\t\t})\n\n\t\t\ttest('all 13 filter ops produce matching Filter.op values (name-parity)', () => {\n\t\t\t\tconst g = FilterGroup.create()\n\t\t\t\t\t.eq('f', 1)\n\t\t\t\t\t.ne('f', 1)\n\t\t\t\t\t.gt('f', 1)\n\t\t\t\t\t.gte('f', 1)\n\t\t\t\t\t.lt('f', 1)\n\t\t\t\t\t.lte('f', 1)\n\t\t\t\t\t.in('f', [1])\n\t\t\t\t\t.notIn('f', [1])\n\t\t\t\t\t.like('f', 'x')\n\t\t\t\t\t.exists('f')\n\t\t\t\t\t.notExists('f')\n\t\t\t\t\t.contains('f', [1])\n\t\t\t\t\t.notContains('f', [1])\n\t\t\t\tconst ops = g.children.map((c) => (c as Filter).op)\n\t\t\t\texpect(ops).toEqual([\n\t\t\t\t\t'eq', 'ne', 'gt', 'gte', 'lt', 'lte',\n\t\t\t\t\t'in', 'notIn', 'like', 'exists', 'notExists',\n\t\t\t\t\t'contains', 'notContains',\n\t\t\t\t])\n\t\t\t})\n\t\t})\n\n\t\tdescribe('raw-string field overload', () => {\n\t\t\ttest('accepts raw string field name', () => {\n\t\t\t\tconst g = FilterGroup.create().eq('age', 18)\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.field).toBe('age')\n\t\t\t})\n\n\t\t\ttest('accepts typed Field ref and extracts field name', () => {\n\t\t\t\tconst g = FilterGroup.create().eq(UserSchema.fields.age, 18)\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.field).toBe('age')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('structural combinators', () => {\n\t\t\ttest('and() creates a nested and-group', () => {\n\t\t\t\tconst g = FilterGroup.create().and([\n\t\t\t\t\t(q) => q.eq('age', 10),\n\t\t\t\t\t(q) => q.eq('name', 'Alice'),\n\t\t\t\t])\n\t\t\t\texpect(g.children).toHaveLength(1)\n\t\t\t\tconst nested = g.children[0] as FilterGroup\n\t\t\t\texpect(nested.op).toBe('and')\n\t\t\t\texpect(nested.children).toHaveLength(2)\n\t\t\t})\n\n\t\t\ttest('or() creates a nested or-group', () => {\n\t\t\t\tconst g = FilterGroup.create().or([\n\t\t\t\t\t(q) => q.eq('name', 'Alice'),\n\t\t\t\t\t(q) => q.eq('name', 'Bob'),\n\t\t\t\t])\n\t\t\t\tconst nested = g.children[0] as FilterGroup\n\t\t\t\texpect(nested.op).toBe('or')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('empty-combinator rejection', () => {\n\t\t\ttest('and([]) throws at builder time', () => {\n\t\t\t\texpect(() => FilterGroup.create().and([])).toThrow()\n\t\t\t})\n\n\t\t\ttest('or([]) throws at builder time', () => {\n\t\t\t\texpect(() => FilterGroup.create().or([])).toThrow()\n\t\t\t})\n\n\t\t\ttest('thrown error has stack pointing at offending call', () => {\n\t\t\t\ttry {\n\t\t\t\t\tFilterGroup.create().and([])\n\t\t\t\t\texpect.unreachable()\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect((e as Error).stack).toContain('filter.ts')\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tdescribe('clone()', () => {\n\t\t\ttest('deep-clones the tree', () => {\n\t\t\t\tconst original = FilterGroup.create()\n\t\t\t\t\t.eq('name', 'Alice')\n\t\t\t\t\t.and([(q) => q.gt('age', 20)])\n\t\t\t\tconst cloned = original.clone()\n\n\t\t\t\texpect(cloned.children).toHaveLength(2)\n\t\t\t\texpect(cloned).not.toBe(original)\n\t\t\t\texpect(cloned.children[0]).not.toBe(original.children[0])\n\t\t\t})\n\n\t\t\ttest('structuredClone of values — mutations on clone do not leak', () => {\n\t\t\t\tconst arr = [1, 2, 3]\n\t\t\t\tconst original = FilterGroup.create().in('ids', arr)\n\t\t\t\tconst cloned = original.clone()\n\n\t\t\t\tconst clonedValue = (cloned.children[0] as Filter).value as number[]\n\t\t\t\tclonedValue.push(4)\n\n\t\t\t\texpect((original.children[0] as Filter).value).toEqual([1, 2, 3])\n\t\t\t\texpect(clonedValue).toEqual([1, 2, 3, 4])\n\t\t\t})\n\t\t})\n\t})\n\n\tdescribe('clone-on-step: fan-out independence', () => {\n\t\ttest('.eq() returns a new FilterGroup, not the same instance', () => {\n\t\t\tconst base = FilterGroup.create()\n\t\t\tconst a = base.eq('name', 'Alice')\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 = FilterGroup.create().eq('name', 'Alice')\n\t\t\tconst branchA = base.gt('age', 20)\n\t\t\tconst branchB = base.lt('age', 40)\n\n\t\t\texpect(branchA.children).toHaveLength(2)\n\t\t\texpect(branchB.children).toHaveLength(2)\n\t\t\texpect(base.children).toHaveLength(1)\n\t\t\texpect((branchA.children[1] as Filter).op).toBe('gt')\n\t\t\texpect((branchB.children[1] as Filter).op).toBe('lt')\n\t\t})\n\n\t\ttest('.and() returns a new FilterGroup', () => {\n\t\t\tconst base = FilterGroup.create().eq('name', 'Alice')\n\t\t\tconst withAnd = base.and([(q) => q.gt('age', 20)])\n\t\t\texpect(withAnd).not.toBe(base)\n\t\t\texpect(base.children).toHaveLength(1)\n\t\t\texpect(withAnd.children).toHaveLength(2)\n\t\t})\n\n\t\ttest('.or() returns a new FilterGroup', () => {\n\t\t\tconst base = FilterGroup.create().eq('name', 'Alice')\n\t\t\tconst withOr = base.or([(q) => q.gt('age', 20)])\n\t\t\texpect(withOr).not.toBe(base)\n\t\t\texpect(base.children).toHaveLength(1)\n\t\t\texpect(withOr.children).toHaveLength(2)\n\t\t})\n\t})\n\n\tdescribe('assertNormalisedFilter', () => {\n\t\ttest('passes for valid filter referencing known fields', () => {\n\t\t\tconst g = FilterGroup.create().eq(UserSchema.fields.age, 25)\n\t\t\texpect(() => assertNormalisedFilter(UserSchema, g)).not.toThrow()\n\t\t})\n\n\t\ttest('passes for raw string field that exists on schema', () => {\n\t\t\tconst g = FilterGroup.create().eq('email', 'test@test.com')\n\t\t\texpect(() => assertNormalisedFilter(UserSchema, g)).not.toThrow()\n\t\t})\n\n\t\ttest('rejects unknown field name with OrmValidationError', () => {\n\t\t\tconst g = FilterGroup.create().eq('unknownField', 42)\n\t\t\texpect(() => assertNormalisedFilter(UserSchema, g)).toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('rejected error has kind validation', () => {\n\t\t\tconst g = FilterGroup.create().eq('badField', 42)\n\t\t\ttry {\n\t\t\t\tassertNormalisedFilter(UserSchema, g)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\texpect((e as OrmValidationError).kind).toBe('validation')\n\t\t\t\texpect((e as OrmValidationError).failures).toHaveLength(1)\n\t\t\t\texpect((e as OrmValidationError).failures[0].field).toBe('badField')\n\t\t\t}\n\t\t})\n\n\t\ttest('preserves logical field names verbatim for Field refs', () => {\n\t\t\tconst g = FilterGroup.create().eq(UserSchema.fields.email, 'a@b.com')\n\t\t\tconst f = g.children[0] as Filter\n\t\t\texpect(f.field).toBe('email')\n\t\t\tassertNormalisedFilter(UserSchema, g)\n\t\t})\n\n\t\ttest('preserves logical field names verbatim for raw-string overloads', () => {\n\t\t\tconst g = FilterGroup.create().eq('age', 18)\n\t\t\tconst f = g.children[0] as Filter\n\t\t\texpect(f.field).toBe('age')\n\t\t\tassertNormalisedFilter(UserSchema, g)\n\t\t})\n\n\t\ttest('walks nested groups to detect unknown fields', () => {\n\t\t\tconst g = FilterGroup.create().and([\n\t\t\t\t(q) => q.eq('name', 'Alice'),\n\t\t\t\t(q) => q.or([(inner) => inner.eq('nonexistent', 'val')]),\n\t\t\t])\n\t\t\texpect(() => assertNormalisedFilter(UserSchema, g)).toThrow(OrmValidationError)\n\t\t})\n\t})\n\n\tdescribe('assertNormalisedAggregate', () => {\n\t\tconst adapter = { aggregateOps: ['count'] as readonly string[] }\n\n\t\ttest('passes for valid count aggregate', () => {\n\t\t\tconst spec = { aggregates: [{ fn: 'count' as const, alias: 'total' }], groupBy: [] }\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, adapter, spec)).not.toThrow()\n\t\t})\n\n\t\ttest('rejects empty aggregator list', () => {\n\t\t\tconst spec = { aggregates: [], groupBy: [] }\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, adapter, spec)).toThrow(OrmValidationError)\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, adapter, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect((e as OrmValidationError).kind).toBe('aggregate')\n\t\t\t}\n\t\t})\n\n\t\ttest('rejects undeclared aggregate op', () => {\n\t\t\tconst spec = { aggregates: [{ fn: 'sum' as const, alias: 'total', field: 'age' }], groupBy: [] }\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, adapter, spec)).toThrow(OrmValidationError)\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, adapter, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('aggregate')\n\t\t\t\texpect(err.failures[0].alias).toBe('total')\n\t\t\t\texpect(err.failures[0].cause).toContain('Undeclared')\n\t\t\t}\n\t\t})\n\n\t\ttest('rejects duplicate aliases', () => {\n\t\t\tconst spec = {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'count' as const, alias: 'total' },\n\t\t\t\t\t{ fn: 'count' as const, alias: 'total' },\n\t\t\t\t],\n\t\t\t\tgroupBy: [],\n\t\t\t}\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, adapter, spec)).toThrow(OrmValidationError)\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, adapter, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.failures.some((f) => f.alias === 'total')).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('validates where filter against schema', () => {\n\t\t\tconst spec = {\n\t\t\t\taggregates: [{ fn: 'count' as const, alias: 'total' }],\n\t\t\t\tgroupBy: [],\n\t\t\t\twhere: FilterGroup.create().eq('unknownField', 42),\n\t\t\t}\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, adapter, spec)).toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('collects multiple failures', () => {\n\t\t\tconst spec = {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'sum' as const, alias: 'x', field: 'age' },\n\t\t\t\t\t{ fn: 'avg' as const, alias: 'x', field: 'age' },\n\t\t\t\t],\n\t\t\t\tgroupBy: [],\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, adapter, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.failures.length).toBeGreaterThanOrEqual(2)\n\t\t\t}\n\t\t})\n\n\t\ttest('rejects unknown groupBy field', () => {\n\t\t\tconst allOps = { aggregateOps: ['count', 'sum'] as readonly string[] }\n\t\t\tconst spec = {\n\t\t\t\taggregates: [{ fn: 'count' as const, alias: 'total' }],\n\t\t\t\tgroupBy: ['nonexistent'],\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, allOps, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('aggregate')\n\t\t\t\texpect(err.failures[0].cause).toContain('groupBy')\n\t\t\t\texpect(err.failures[0].field).toBe('nonexistent')\n\t\t\t}\n\t\t})\n\n\t\ttest('rejects alias colliding with groupBy field name', () => {\n\t\t\tconst allOps = { aggregateOps: ['count'] as readonly string[] }\n\t\t\tconst spec = {\n\t\t\t\taggregates: [{ fn: 'count' as const, alias: 'name' }],\n\t\t\t\tgroupBy: ['name'],\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, allOps, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('aggregate')\n\t\t\t\texpect(err.failures.some((f) => String(f.cause).includes('collides'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('rejects unknown having field', () => {\n\t\t\tconst allOps = { aggregateOps: ['count'] as readonly string[] }\n\t\t\tconst spec = {\n\t\t\t\taggregates: [{ fn: 'count' as const, alias: 'total' }],\n\t\t\t\tgroupBy: ['name'],\n\t\t\t\thaving: FilterGroup.create().gt('nonexistent', 0),\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, allOps, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('aggregate')\n\t\t\t\texpect(err.failures[0].cause).toContain('having')\n\t\t\t}\n\t\t})\n\n\t\ttest('having accepts alias and groupBy field names', () => {\n\t\t\tconst allOps = { aggregateOps: ['count'] as readonly string[] }\n\t\t\tconst spec = {\n\t\t\t\taggregates: [{ fn: 'count' as const, alias: 'total' }],\n\t\t\t\tgroupBy: ['name'],\n\t\t\t\thaving: FilterGroup.create().gt('total', 0).eq('name', 'Alice'),\n\t\t\t}\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, allOps, spec)).not.toThrow()\n\t\t})\n\n\t\ttest('passes valid groupBy with known schema fields', () => {\n\t\t\tconst allOps = { aggregateOps: ['count'] as readonly string[] }\n\t\t\tconst spec = {\n\t\t\t\taggregates: [{ fn: 'count' as const, alias: 'total' }],\n\t\t\t\tgroupBy: ['name', 'age'],\n\t\t\t}\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, allOps, spec)).not.toThrow()\n\t\t})\n\t})\n}\n","import { v, type Pipe, type PipeOutput } from 'valleyed'\n\nexport class Field<T = unknown, Name extends string = string, S = unknown> {\n\tdeclare readonly __valueType?: T\n\tdeclare readonly __schema?: S\n\treadonly name: Name\n\treadonly path: readonly string[]\n\n\tconstructor(name: Name, path?: readonly string[]) {\n\t\tthis.name = name\n\t\tthis.path = path ?? [name]\n\t}\n}\n\nexport type AnyField = Field<unknown, string, any>\n\nexport function toFieldName(field: string | AnyField): string {\n\tif (field instanceof Field) return field.path.join('.')\n\treturn field\n}\n\nexport class SchemaField<\n\tName extends string = string,\n\tP extends Pipe<any, any> = Pipe<any, any>,\n\tHasOnCreate extends boolean = false,\n> extends Field<PipeOutput<P>, Name> {\n\tdeclare readonly __hasOnCreate?: HasOnCreate\n\treadonly pipe: P\n\treadonly onCreate?: () => PipeOutput<P>\n\treadonly onUpdate?: () => PipeOutput<P>\n\n\tconstructor(name: Name, pipe: P, opts?: { onCreate?: () => PipeOutput<P>; onUpdate?: () => PipeOutput<P> }) {\n\t\tsuper(name)\n\t\tthis.pipe = pipe\n\t\tthis.onCreate = opts?.onCreate\n\t\tthis.onUpdate = opts?.onUpdate\n\t}\n}\n\nexport type AnySchemaField = SchemaField<string, Pipe<any, any>, boolean>\n\nexport class ComputedField<\n\tName extends string = string,\n\tP extends Pipe<any, any> = Pipe<any, any>,\n\tDeps extends readonly string[] = readonly string[],\n> {\n\tconstructor(\n\t\treadonly name: Name,\n\t\treadonly pipe: P,\n\t\treadonly deps: Deps,\n\t\treadonly compute: (data: Record<Deps[number], unknown>) => PipeOutput<P>,\n\t) {}\n}\n\nexport type AnyComputedField = ComputedField<string, Pipe<any, any>, readonly string[]>\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\n\tdescribe('Fields', () => {\n\t\tdescribe('Field', () => {\n\t\t\ttest('stores name and defaults path to [name]', () => {\n\t\t\t\tconst f = new Field('email')\n\t\t\t\texpect(f.name).toBe('email')\n\t\t\t\texpect(f.path).toEqual(['email'])\n\t\t\t})\n\n\t\t\ttest('stores provided custom path', () => {\n\t\t\t\tconst f = new Field('profile', ['profile', 'displayName'])\n\t\t\t\texpect(f.name).toBe('profile')\n\t\t\t\texpect(f.path).toEqual(['profile', 'displayName'])\n\t\t\t})\n\t\t})\n\n\t\tdescribe('toFieldName()', () => {\n\t\t\ttest('returns string input unchanged', () => {\n\t\t\t\texpect(toFieldName('createdAt')).toBe('createdAt')\n\t\t\t})\n\n\t\t\ttest('converts Field path into dot notation', () => {\n\t\t\t\tconst f = new Field('profile', ['profile', 'displayName'])\n\t\t\t\texpect(toFieldName(f)).toBe('profile.displayName')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('SchemaField', () => {\n\t\t\ttest('extends Field and stores pipe', () => {\n\t\t\t\tconst mockPipe = v.string()\n\t\t\t\tconst f = new SchemaField('email', mockPipe)\n\t\t\t\texpect(f).toBeInstanceOf(Field)\n\t\t\t\texpect(f.name).toBe('email')\n\t\t\t\texpect(f.path).toEqual(['email'])\n\t\t\t\texpect(f.pipe).toBe(mockPipe)\n\t\t\t})\n\n\t\t\ttest('stores lifecycle hooks when provided', () => {\n\t\t\t\tconst mockPipe = v.number()\n\t\t\t\tconst f = new SchemaField('updatedAt', mockPipe, {\n\t\t\t\t\tonCreate: () => 1000,\n\t\t\t\t\tonUpdate: () => 2000,\n\t\t\t\t})\n\t\t\t\texpect(f.onCreate?.()).toBe(1000)\n\t\t\t\texpect(f.onUpdate?.()).toBe(2000)\n\t\t\t})\n\n\t\t\ttest('keeps lifecycle hooks undefined when omitted', () => {\n\t\t\t\tconst mockPipe = v.string()\n\t\t\t\tconst f = new SchemaField('name', mockPipe)\n\t\t\t\texpect(f.onCreate).toBeUndefined()\n\t\t\t\texpect(f.onUpdate).toBeUndefined()\n\t\t\t})\n\t\t})\n\t})\n}\n","import { EquippedError } from '../../errors'\n\nexport type OrmValidationErrorKind = 'validation' | 'conflicting-ops' | 'empty-group' | 'undeclared-op' | 'upsert-filter-incompatible' | 'aggregate' | 'query-shape' | 'changes'\n\nexport type OrmValidationFailure = {\n\topIndex?: number\n\trowIndex?: number\n\tfield?: string\n\talias?: string\n\toption?: 'limit' | 'offset' | 'page' | 'batchSize'\n\tmigrationId?: string\n\tchangeIndex?: number\n\tcause: unknown\n}\n\nexport class OrmValidationError extends EquippedError {\n\tconstructor(\n\t\treadonly kind: OrmValidationErrorKind,\n\t\treadonly schema: string,\n\t\treadonly operation: string,\n\t\treadonly failures: OrmValidationFailure[],\n\t) {\n\t\tsuper(`ORM validation error (${kind}) on ${schema}.${operation}`, {\n\t\t\tkind,\n\t\t\tschema,\n\t\t\toperation,\n\t\t\tfailures,\n\t\t})\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('OrmValidationError', () => {\n\t\ttest('constructs with aggregate kind', () => {\n\t\t\tconst err = new OrmValidationError('aggregate', 'orders', 'aggregate', [])\n\t\t\texpect(err.kind).toBe('aggregate')\n\t\t\texpect(err.operation).toBe('aggregate')\n\t\t\texpect(err.message).toBe('ORM validation error (aggregate) on orders.aggregate')\n\t\t\texpect(err).toBeInstanceOf(OrmValidationError)\n\t\t\texpect(err).toBeInstanceOf(EquippedError)\n\t\t})\n\n\t\ttest('failure carries alias through to context', () => {\n\t\t\tconst failures: OrmValidationFailure[] = [\n\t\t\t\t{ alias: 'total_price', cause: 'alias collision' },\n\t\t\t]\n\t\t\tconst err = new OrmValidationError('aggregate', 'orders', 'aggregate', failures)\n\t\t\texpect(err.failures[0].alias).toBe('total_price')\n\t\t\texpect((err.context as any).failures[0].alias).toBe('total_price')\n\t\t})\n\n\t\ttest('failure without alias still works', () => {\n\t\t\tconst failures: OrmValidationFailure[] = [\n\t\t\t\t{ field: 'amount', cause: 'invalid field' },\n\t\t\t]\n\t\t\tconst err = new OrmValidationError('validation', 'orders', 'createOne', failures)\n\t\t\texpect(err.failures[0].alias).toBeUndefined()\n\t\t\texpect(err.failures[0].field).toBe('amount')\n\t\t})\n\n\t\ttest.each([\n\t\t\t'validation',\n\t\t\t'conflicting-ops',\n\t\t\t'empty-group',\n\t\t\t'undeclared-op',\n\t\t\t'upsert-filter-incompatible',\n\t\t\t'query-shape',\n\t\t\t'changes',\n\t\t] as const)('kind %s still works', (kind) => {\n\t\t\tconst err = new OrmValidationError(kind, 'users', 'createOne', [])\n\t\t\texpect(err.kind).toBe(kind)\n\t\t})\n\t})\n}\n","import type { PipeInput, PipeOutput } from 'valleyed'\n\nimport type { AnyField, AnySchemaField, SchemaField } from './fields'\nimport { toFieldName } from './fields'\nimport type { AnySchema, SchemaFields } from './schema'\nimport type { Prettify } from './utils'\n\nexport type NumericFieldOf<S extends AnySchema> = {\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends SchemaField<any, infer P, any>\n\t\t? PipeOutput<P> extends number\n\t\t\t? SchemaFields<S>[K]\n\t\t\t: never\n\t\t: never\n}[keyof SchemaFields<S>]\n\nexport type ComparableFieldOf<S extends AnySchema> = {\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends SchemaField<any, infer P, any>\n\t\t? PipeOutput<P> extends number | string | Date\n\t\t\t? SchemaFields<S>[K]\n\t\t\t: never\n\t\t: never\n}[keyof SchemaFields<S>]\n\nexport type OptionalFieldOf<S extends AnySchema> = {\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends SchemaField<any, infer P, any>\n\t\t? undefined extends PipeOutput<P>\n\t\t\t? SchemaFields<S>[K]\n\t\t\t: never\n\t\t: never\n}[keyof SchemaFields<S>]\n\nexport type ArrayFieldOf<S extends AnySchema> = {\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends SchemaField<any, infer P, any>\n\t\t? PipeOutput<P> extends readonly any[]\n\t\t\t? SchemaFields<S>[K]\n\t\t\t: never\n\t\t: never\n}[keyof SchemaFields<S>]\n\nexport type ObjectFieldOf<S extends AnySchema> = {\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends SchemaField<any, infer P, any>\n\t\t? PipeOutput<P> extends Record<string, any>\n\t\t\t? PipeOutput<P> extends readonly any[]\n\t\t\t\t? never\n\t\t\t\t: SchemaFields<S>[K]\n\t\t\t: never\n\t\t: never\n}[keyof SchemaFields<S>]\n\nexport type SetValues<S extends AnySchema> = Prettify<\n\tPartial<{\n\t\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends AnySchemaField ? PipeInput<SchemaFields<S>[K]['pipe']> : never\n\t}>\n>\n\nexport class SetOp {\n\treadonly kind = 'set' as const\n\tconstructor(readonly values: Record<string, unknown>) {}\n}\nexport class IncOp {\n\treadonly kind = 'inc' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: number,\n\t) {}\n}\nexport class MulOp {\n\treadonly kind = 'mul' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: number,\n\t) {}\n}\nexport class MinOp<T = unknown> {\n\treadonly kind = 'min' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: T,\n\t) {}\n}\nexport class MaxOp<T = unknown> {\n\treadonly kind = 'max' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: T,\n\t) {}\n}\nexport class UnsetOp {\n\treadonly kind = 'unset' as const\n\tconstructor(readonly field: string) {}\n}\nexport class PushOp<T = unknown> {\n\treadonly kind = 'push' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: T,\n\t) {}\n}\nexport class PullOp<T = unknown> {\n\treadonly kind = 'pull' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: T,\n\t) {}\n}\nexport class PatchOp<T = unknown> {\n\treadonly kind = 'patch' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: T,\n\t) {}\n}\n\nexport type AnyUpdateOp = SetOp | IncOp | MulOp | MinOp | MaxOp | UnsetOp | PushOp | PullOp | PatchOp\n\nexport function isUpdateOp(v: unknown): v is AnyUpdateOp {\n\treturn (\n\t\tv instanceof SetOp ||\n\t\tv instanceof IncOp ||\n\t\tv instanceof MulOp ||\n\t\tv instanceof MinOp ||\n\t\tv instanceof MaxOp ||\n\t\tv instanceof UnsetOp ||\n\t\tv instanceof PushOp ||\n\t\tv instanceof PullOp ||\n\t\tv instanceof PatchOp\n\t)\n}\n\nexport type HasOp<A, Op extends string> = A extends { updateOps: readonly (infer U)[] } ? (Op extends U ? true : false) : false\n\nexport type UpdateOp<_S extends AnySchema, A> =\n\t| (HasOp<A, 'set'> extends true ? SetOp : never)\n\t| (HasOp<A, 'inc'> extends true ? IncOp : never)\n\t| (HasOp<A, 'mul'> extends true ? MulOp : never)\n\t| (HasOp<A, 'min'> extends true ? MinOp : never)\n\t| (HasOp<A, 'max'> extends true ? MaxOp : never)\n\t| (HasOp<A, 'unset'> extends true ? UnsetOp : never)\n\t| (HasOp<A, 'push'> extends true ? PushOp : never)\n\t| (HasOp<A, 'pull'> extends true ? PullOp : never)\n\t| (HasOp<A, 'patch'> extends true ? PatchOp : never)\n\nexport function set<S extends AnySchema>(values: SetValues<S>): SetOp {\n\treturn new SetOp(values as Record<string, unknown>)\n}\n\nexport function inc<S extends AnySchema>(field: NumericFieldOf<S>, value: number): IncOp {\n\treturn new IncOp(toFieldName(field as AnyField), value)\n}\n\nexport function mul<S extends AnySchema>(field: NumericFieldOf<S>, value: number): MulOp {\n\treturn new MulOp(toFieldName(field as AnyField), value)\n}\n\nexport function min<S extends AnySchema>(field: ComparableFieldOf<S>, value: unknown): MinOp {\n\treturn new MinOp(toFieldName(field as AnyField), value)\n}\n\nexport function max<S extends AnySchema>(field: ComparableFieldOf<S>, value: unknown): MaxOp {\n\treturn new MaxOp(toFieldName(field as AnyField), value)\n}\n\nexport function unset<S extends AnySchema>(field: OptionalFieldOf<S>): UnsetOp {\n\treturn new UnsetOp(toFieldName(field as AnyField))\n}\n\nexport function push<S extends AnySchema>(field: ArrayFieldOf<S>, value: unknown): PushOp {\n\treturn new PushOp(toFieldName(field as AnyField), value)\n}\n\nexport function pull<S extends AnySchema>(field: ArrayFieldOf<S>, value: unknown): PullOp {\n\treturn new PullOp(toFieldName(field as AnyField), value)\n}\n\nexport function patch<S extends AnySchema>(field: ObjectFieldOf<S>, value: Record<string, unknown>): PatchOp {\n\treturn new PatchOp(toFieldName(field as AnyField), value)\n}\n\nexport function opTouchedFields(op: AnyUpdateOp): string[] {\n\tif (op instanceof SetOp) return Object.keys(op.values)\n\treturn [op.field]\n}\n\nexport function flattenOps(ops: AnyUpdateOp[]): Record<string, unknown> {\n\tconst data: Record<string, unknown> = {}\n\tfor (const op of ops) {\n\t\tif (op instanceof SetOp) Object.assign(data, op.values)\n\t\telse data[op.field] = op\n\t}\n\treturn data\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\tconst TestSchema = Schema.from('test')\n\t\t.pk('id', v.string(), () => 'x')\n\t\t.field('name', v.string())\n\t\t.field('age', v.number())\n\t\t.field('score', v.optional(v.number()))\n\t\t.field('tags', v.array(v.string()))\n\t\t.field('meta', v.object({ a: v.number() }))\n\t\t.field('createdAt', v.number(), { onCreate: () => 1000 })\n\t\t.field('updatedAt', v.number(), { onCreate: () => 1000, onUpdate: () => 2000 })\n\t\t.build()\n\n\tdescribe('op classes', () => {\n\t\ttest('SetOp has kind \"set\" and stores values', () => {\n\t\t\tconst op = new SetOp({ name: 'Alice' })\n\t\t\texpect(op.kind).toBe('set')\n\t\t\texpect(op.values).toEqual({ name: 'Alice' })\n\t\t})\n\t\ttest('IncOp has kind \"inc\" and stores field + value', () => {\n\t\t\tconst op = new IncOp('age', 5)\n\t\t\texpect(op.kind).toBe('inc')\n\t\t\texpect(op.field).toBe('age')\n\t\t\texpect(op.value).toBe(5)\n\t\t})\n\t\ttest('MulOp has kind \"mul\" and stores field + value', () => {\n\t\t\tconst op = new MulOp('score', 3)\n\t\t\texpect(op.kind).toBe('mul')\n\t\t\texpect(op.field).toBe('score')\n\t\t\texpect(op.value).toBe(3)\n\t\t})\n\t\ttest('MinOp has kind \"min\"', () => {\n\t\t\texpect(new MinOp('age', 10).kind).toBe('min')\n\t\t})\n\t\ttest('MaxOp has kind \"max\"', () => {\n\t\t\texpect(new MaxOp('age', 99).kind).toBe('max')\n\t\t})\n\t\ttest('UnsetOp has kind \"unset\"', () => {\n\t\t\texpect(new UnsetOp('score').kind).toBe('unset')\n\t\t})\n\t\ttest('PushOp has kind \"push\"', () => {\n\t\t\texpect(new PushOp('tags', 'x').kind).toBe('push')\n\t\t})\n\t\ttest('PullOp has kind \"pull\"', () => {\n\t\t\texpect(new PullOp('tags', 'x').kind).toBe('pull')\n\t\t})\n\t\ttest('PatchOp has kind \"patch\"', () => {\n\t\t\texpect(new PatchOp('meta', { a: 9 }).kind).toBe('patch')\n\t\t})\n\t})\n\n\tdescribe('isUpdateOp', () => {\n\t\ttest('returns true for every op class', () => {\n\t\t\texpect(isUpdateOp(new SetOp({}))).toBe(true)\n\t\t\texpect(isUpdateOp(new IncOp('f', 1))).toBe(true)\n\t\t\texpect(isUpdateOp(new MulOp('f', 2))).toBe(true)\n\t\t\texpect(isUpdateOp(new MinOp('f', 0))).toBe(true)\n\t\t\texpect(isUpdateOp(new MaxOp('f', 10))).toBe(true)\n\t\t\texpect(isUpdateOp(new UnsetOp('f'))).toBe(true)\n\t\t\texpect(isUpdateOp(new PushOp('f', 'v'))).toBe(true)\n\t\t\texpect(isUpdateOp(new PullOp('f', 'v'))).toBe(true)\n\t\t\texpect(isUpdateOp(new PatchOp('f', {}))).toBe(true)\n\t\t})\n\t\ttest('returns false for non-op values', () => {\n\t\t\texpect(isUpdateOp('string')).toBe(false)\n\t\t\texpect(isUpdateOp(42)).toBe(false)\n\t\t\texpect(isUpdateOp(null)).toBe(false)\n\t\t\texpect(isUpdateOp({})).toBe(false)\n\t\t})\n\t})\n\n\tdescribe('op helper functions', () => {\n\t\ttest('set() creates SetOp with values', () => {\n\t\t\tconst op = set<typeof TestSchema>({ name: 'Alice', age: 30 })\n\t\t\texpect(op).toBeInstanceOf(SetOp)\n\t\t\texpect(op.kind).toBe('set')\n\t\t\texpect(op.values).toEqual({ name: 'Alice', age: 30 })\n\t\t})\n\t\ttest('inc() creates IncOp from field ref', () => {\n\t\t\tconst op = inc<typeof TestSchema>(TestSchema.fields.age, 5)\n\t\t\texpect(op).toBeInstanceOf(IncOp)\n\t\t\texpect(op.field).toBe('age')\n\t\t\texpect(op.value).toBe(5)\n\t\t})\n\t\ttest('mul() creates MulOp from field ref', () => {\n\t\t\tconst op = mul<typeof TestSchema>(TestSchema.fields.age, 3)\n\t\t\texpect(op).toBeInstanceOf(MulOp)\n\t\t\texpect(op.field).toBe('age')\n\t\t\texpect(op.value).toBe(3)\n\t\t})\n\t\ttest('min() creates MinOp from field ref', () => {\n\t\t\tconst op = min<typeof TestSchema>(TestSchema.fields.age, 10)\n\t\t\texpect(op).toBeInstanceOf(MinOp)\n\t\t\texpect(op.field).toBe('age')\n\t\t})\n\t\ttest('max() creates MaxOp from field ref', () => {\n\t\t\tconst op = max<typeof TestSchema>(TestSchema.fields.age, 99)\n\t\t\texpect(op).toBeInstanceOf(MaxOp)\n\t\t\texpect(op.field).toBe('age')\n\t\t})\n\t\ttest('unset() creates UnsetOp from field ref', () => {\n\t\t\tconst op = unset<typeof TestSchema>(TestSchema.fields.score)\n\t\t\texpect(op).toBeInstanceOf(UnsetOp)\n\t\t\texpect(op.field).toBe('score')\n\t\t})\n\t\ttest('push() creates PushOp from field ref', () => {\n\t\t\tconst op = push<typeof TestSchema>(TestSchema.fields.tags, 'new-tag')\n\t\t\texpect(op).toBeInstanceOf(PushOp)\n\t\t\texpect(op.field).toBe('tags')\n\t\t\texpect(op.value).toBe('new-tag')\n\t\t})\n\t\ttest('pull() creates PullOp from field ref', () => {\n\t\t\tconst op = pull<typeof TestSchema>(TestSchema.fields.tags, 'old-tag')\n\t\t\texpect(op).toBeInstanceOf(PullOp)\n\t\t\texpect(op.field).toBe('tags')\n\t\t})\n\t\ttest('patch() creates PatchOp from field ref', () => {\n\t\t\tconst op = patch<typeof TestSchema>(TestSchema.fields.meta, { a: 9 })\n\t\t\texpect(op).toBeInstanceOf(PatchOp)\n\t\t\texpect(op.field).toBe('meta')\n\t\t\texpect(op.value).toEqual({ a: 9 })\n\t\t})\n\t})\n\n\tdescribe('opTouchedFields', () => {\n\t\ttest('SetOp returns all keys from values', () => {\n\t\t\texpect(opTouchedFields(new SetOp({ name: 'A', age: 1 }))).toEqual(['name', 'age'])\n\t\t})\n\t\ttest('IncOp returns the field', () => {\n\t\t\texpect(opTouchedFields(new IncOp('age', 1))).toEqual(['age'])\n\t\t})\n\t\ttest('UnsetOp returns the field', () => {\n\t\t\texpect(opTouchedFields(new UnsetOp('score'))).toEqual(['score'])\n\t\t})\n\t})\n\n\tdescribe('type-level: field-category helpers', () => {\n\t\ttest('NumericFieldOf only matches numeric fields (excludes optional numeric)', () => {\n\t\t\ttype Numeric = NumericFieldOf<typeof TestSchema>\n\t\t\texpectTypeOf<Numeric['name']>().toEqualTypeOf<'age' | 'createdAt' | 'updatedAt'>()\n\t\t})\n\t\ttest('ComparableFieldOf matches numeric and string fields (excludes optional)', () => {\n\t\t\ttype Comparable = ComparableFieldOf<typeof TestSchema>\n\t\t\texpectTypeOf<Comparable['name']>().toEqualTypeOf<'id' | 'name' | 'age' | 'createdAt' | 'updatedAt'>()\n\t\t})\n\t\ttest('OptionalFieldOf only matches optional fields', () => {\n\t\t\ttype Optional = OptionalFieldOf<typeof TestSchema>\n\t\t\texpectTypeOf<Optional['name']>().toEqualTypeOf<'score'>()\n\t\t})\n\t\ttest('ArrayFieldOf only matches array fields', () => {\n\t\t\ttype Arr = ArrayFieldOf<typeof TestSchema>\n\t\t\texpectTypeOf<Arr['name']>().toEqualTypeOf<'tags'>()\n\t\t})\n\t\ttest('ObjectFieldOf only matches object fields (not arrays)', () => {\n\t\t\ttype Obj = ObjectFieldOf<typeof TestSchema>\n\t\t\texpectTypeOf<Obj['name']>().toEqualTypeOf<'meta'>()\n\t\t})\n\t})\n\n\tdescribe('type-level: inc on a string field is a TS error', () => {\n\t\ttest('inc rejects non-numeric fields', () => {\n\t\t\t// @ts-expect-error — name is a string field, not numeric\n\t\t\tinc<typeof TestSchema>(TestSchema.fields.name, 1)\n\t\t})\n\t})\n\n\tdescribe('type-level: push on a non-array field is a TS error', () => {\n\t\ttest('push rejects non-array fields', () => {\n\t\t\t// @ts-expect-error — name is a string field, not array\n\t\t\tpush<typeof TestSchema>(TestSchema.fields.name, 'val')\n\t\t})\n\t})\n\n\tdescribe('type-level: per-op gating via UpdateOp<S, A>', () => {\n\t\ttest('undeclared ops resolve to never', async () => {\n\t\t\tconst { OrmAdapter } = await import('./orm-adapter')\n\t\t\tclass LimitedAdapter 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', 'inc'] as const\n\t\t\t}\n\n\t\t\ttype Limited = UpdateOp<typeof TestSchema, LimitedAdapter>\n\t\t\texpectTypeOf<Limited>().toEqualTypeOf<SetOp | IncOp>()\n\t\t})\n\n\t\ttest('adapter with no updateOps resolves all variants to never', async () => {\n\t\t\tconst { OrmAdapter } = await import('./orm-adapter')\n\t\t\tclass NoOpsAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly updateOps = [] as const\n\t\t\t}\n\n\t\t\ttype NoOps = UpdateOp<typeof TestSchema, NoOpsAdapter>\n\t\t\texpectTypeOf<NoOps>().toBeNever()\n\t\t})\n\n\t\ttest('adapter with all updateOps includes all variants', async () => {\n\t\t\tconst { OrmAdapter } = await import('./orm-adapter')\n\t\t\tclass FullAdapter 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', 'inc', 'mul', 'min', 'max', 'unset', 'push', 'pull', 'patch'] as const\n\t\t\t}\n\n\t\t\ttype Full = UpdateOp<typeof TestSchema, FullAdapter>\n\t\t\ttype Expected =\n\t\t\t\t| SetOp\n\t\t\t\t| IncOp\n\t\t\t\t| MulOp\n\t\t\t\t| MinOp\n\t\t\t\t| MaxOp\n\t\t\t\t| UnsetOp\n\t\t\t\t| PushOp\n\t\t\t\t| PullOp\n\t\t\t\t| PatchOp\n\t\t\texpectTypeOf<Full>().toEqualTypeOf<Expected>()\n\t\t})\n\t})\n}\n","import type { AggregateOpName } from '../../adapter'\nimport { OrmValidationError } from '../../errors'\nimport { Filter, FilterGroup, type FilterChild } from '../../filter'\nimport type { AggregateSpec } from '../../orm-adapter'\nimport type { QueryOptions } from '../../query-options'\nimport { IncOp, MaxOp, MinOp, MulOp, PatchOp, PullOp, PushOp, UnsetOp } from '../../updates'\n\nfunction mapField(field: string, primaryKey: string): string {\n\tif (field === 'id' && primaryKey !== 'id') return primaryKey\n\treturn field\n}\n\nfunction compileOps(f: Filter, field: string, nextParam: (v: unknown) => string): string {\n\tswitch (f.op) {\n\t\tcase 'eq':\n\t\t\treturn f.value === null ? `${field} IS NULL` : `${field} = ${nextParam(f.value)}`\n\t\tcase 'ne':\n\t\t\treturn f.value === null ? `${field} IS NOT NULL` : `${field} != ${nextParam(f.value)}`\n\t\tcase 'gt':\n\t\t\treturn `${field} > ${nextParam(f.value)}`\n\t\tcase 'gte':\n\t\t\treturn `${field} >= ${nextParam(f.value)}`\n\t\tcase 'lt':\n\t\t\treturn `${field} < ${nextParam(f.value)}`\n\t\tcase 'lte':\n\t\t\treturn `${field} <= ${nextParam(f.value)}`\n\t\tcase 'in':\n\t\t\treturn `${field} = ANY(${nextParam(f.value)})`\n\t\tcase 'notIn':\n\t\t\treturn `NOT (${field} = ANY(${nextParam(f.value)}))`\n\t\tcase 'like':\n\t\t\treturn `${field} ILIKE ${nextParam(`%${f.value}%`)}`\n\t\tcase 'exists':\n\t\t\treturn `${field} IS NOT NULL`\n\t\tcase 'notExists':\n\t\t\treturn `${field} IS NULL`\n\t\tcase 'contains':\n\t\t\treturn `${field} @> ${nextParam(JSON.stringify(f.value))}::jsonb`\n\t\tcase 'notContains':\n\t\t\treturn `NOT (${field} @> ${nextParam(JSON.stringify(f.value))}::jsonb)`\n\t\tdefault:\n\t\t\treturn `${field} = ${nextParam(f.value)}`\n\t}\n}\n\nfunction compileFilter(f: Filter, primaryKey: string, nextParam: (v: unknown) => string): string {\n\treturn compileOps(f, `\"${mapField(f.field, primaryKey)}\"`, nextParam)\n}\n\nfunction compileChildren(group: FilterGroup, compileLeaf: (f: Filter) => string): string[] {\n\treturn group.children.map((c) => compileChild(c, compileLeaf)).filter((c): c is string => c !== null)\n}\n\nfunction compileGroup(group: FilterGroup, compileLeaf: (f: Filter) => string): string | null {\n\tconst parts = compileChildren(group, compileLeaf)\n\tif (parts.length === 0) return null\n\tif (parts.length === 1) return parts[0]\n\treturn `(${parts.join(group.op === 'or' ? ' OR ' : ' AND ')})`\n}\n\nfunction compileChild(child: FilterChild, compileLeaf: (f: Filter) => string): string | null {\n\tif (child instanceof Filter) return compileLeaf(child)\n\tif (child instanceof FilterGroup) return compileGroup(child, compileLeaf)\n\treturn null\n}\n\nfunction compilePgFilter(\n\tgroup: FilterGroup,\n\tprimaryKey: string,\n\tstartIndex = 1,\n): { whereClause: string; params: unknown[]; nextParamIndex: number } {\n\tconst params: unknown[] = []\n\tlet paramIndex = startIndex\n\n\tfunction nextParam(value: unknown): string {\n\t\tparams.push(value)\n\t\treturn `$${paramIndex++}`\n\t}\n\n\tconst leaf = (f: Filter) => compileFilter(f, primaryKey, nextParam)\n\tconst whereParts = compileChildren(group, leaf)\n\n\tconst whereClause = whereParts.length > 0 ? `WHERE ${whereParts.join(' AND ')}` : ''\n\treturn { whereClause, params, nextParamIndex: paramIndex }\n}\n\nfunction buildSetParts(\n\tdata: Record<string, unknown>,\n\tstartIndex: number,\n): { setParts: string[]; params: unknown[]; nextParamIndex: number } {\n\tconst params: unknown[] = []\n\tlet paramIndex = startIndex\n\n\tconst setParts = Object.entries(data).map(([key, value]) => {\n\t\tconst col = `\"${key}\"`\n\n\t\tif (value instanceof IncOp) {\n\t\t\tparams.push(value.value)\n\t\t\treturn `${col} = ${col} + $${paramIndex++}`\n\t\t}\n\t\tif (value instanceof MulOp) {\n\t\t\tparams.push(value.value)\n\t\t\treturn `${col} = ${col} * $${paramIndex++}`\n\t\t}\n\t\tif (value instanceof MinOp) {\n\t\t\tparams.push(value.value)\n\t\t\treturn `${col} = LEAST(${col}, $${paramIndex++})`\n\t\t}\n\t\tif (value instanceof MaxOp) {\n\t\t\tparams.push(value.value)\n\t\t\treturn `${col} = GREATEST(${col}, $${paramIndex++})`\n\t\t}\n\t\tif (value instanceof UnsetOp) {\n\t\t\treturn `${col} = NULL`\n\t\t}\n\t\tif (value instanceof PushOp) {\n\t\t\tparams.push(JSON.stringify(value.value))\n\t\t\treturn `${col} = ${col} || jsonb_build_array($${paramIndex++}::jsonb)`\n\t\t}\n\t\tif (value instanceof PullOp) {\n\t\t\tparams.push(JSON.stringify(value.value))\n\t\t\treturn `${col} = (SELECT COALESCE(jsonb_agg(e), '[]'::jsonb) FROM jsonb_array_elements(${col}) e WHERE e <> $${paramIndex++}::jsonb)`\n\t\t}\n\t\tif (value instanceof PatchOp) {\n\t\t\tparams.push(JSON.stringify(value.value))\n\t\t\treturn `${col} = ${col} || $${paramIndex++}::jsonb`\n\t\t}\n\n\t\tparams.push(value)\n\t\treturn `${col} = $${paramIndex++}`\n\t})\n\n\treturn { setParts, params, nextParamIndex: paramIndex }\n}\n\nexport function buildSelectQuery(\n\tgroup: FilterGroup,\n\toptions: QueryOptions | undefined,\n\ttableName: string,\n\tprimaryKey: string,\n): { sql: string; params: unknown[] } {\n\tconst { whereClause, params, nextParamIndex } = compilePgFilter(group, primaryKey)\n\tlet i = nextParamIndex\n\n\tconst orderParts = (options?.orderBy ?? []).map((o) => `\"${mapField(o.field, primaryKey)}\" ${o.direction.toUpperCase()}`)\n\tconst orderClause = orderParts.length > 0 ? `ORDER BY ${orderParts.join(', ')}` : ''\n\n\tlet limitClause = ''\n\tif (options?.limit != null) {\n\t\tparams.push(options.limit)\n\t\tlimitClause = `LIMIT $${i++}`\n\t}\n\tlet offsetClause = ''\n\tif (options?.offset != null) {\n\t\tparams.push(options.offset)\n\t\toffsetClause = `OFFSET $${i++}`\n\t}\n\tconst selectClause = options?.select?.length ? options.select.map((f) => `\"${mapField(f, primaryKey)}\"`).join(', ') : '*'\n\n\tconst sql = `SELECT ${selectClause} FROM \"${tableName}\" ${whereClause} ${orderClause} ${limitClause} ${offsetClause}`\n\t\t.trim()\n\t\t.replace(/\\s+/g, ' ')\n\treturn { sql, params }\n}\n\nexport function buildCountQuery(group: FilterGroup, tableName: string, primaryKey: string): { sql: string; params: unknown[] } {\n\tconst { whereClause, params } = compilePgFilter(group, primaryKey)\n\tconst sql = `SELECT COUNT(*) as count FROM \"${tableName}\" ${whereClause}`.trim().replace(/\\s+/g, ' ')\n\treturn { sql, params }\n}\n\nexport function buildCreateQuery(tableName: string, data: Record<string, unknown>): { sql: string; params: unknown[] } {\n\tconst keys = Object.keys(data)\n\tconst params = Object.values(data)\n\tconst placeholders = keys.map((_, i) => `$${i + 1}`)\n\tconst columns = keys.map((k) => `\"${k}\"`).join(', ')\n\tconst sql = `INSERT INTO \"${tableName}\" (${columns}) VALUES (${placeholders.join(', ')}) RETURNING *`\n\treturn { sql, params }\n}\n\nexport function buildUpdateQuery(\n\tgroup: FilterGroup,\n\ttableName: string,\n\tprimaryKey: string,\n\tdata: Record<string, unknown>,\n): { sql: string; params: unknown[] } {\n\tconst { setParts, params: setParams, nextParamIndex } = buildSetParts(data, 1)\n\tconst { whereClause, params: whereParams } = compilePgFilter(group, primaryKey, nextParamIndex)\n\tconst params = [...setParams, ...whereParams]\n\tconst sql = `UPDATE \"${tableName}\" SET ${setParts.join(', ')} ${whereClause} RETURNING *`.trim().replace(/\\s+/g, ' ')\n\treturn { sql, params }\n}\n\nexport function buildPkUpdateQuery(\n\ttableName: string,\n\tprimaryKey: string,\n\tpk: unknown,\n\tdata: Record<string, unknown>,\n): { sql: string; params: unknown[] } {\n\tconst { setParts, params: setParams, nextParamIndex } = buildSetParts(data, 1)\n\tsetParams.push(pk)\n\tconst sql = `UPDATE \"${tableName}\" SET ${setParts.join(', ')} WHERE \"${primaryKey}\" = $${nextParamIndex} RETURNING *`.replace(\n\t\t/\\s+/g,\n\t\t' ',\n\t)\n\treturn { sql, params: setParams }\n}\n\nexport function buildDeleteQuery(group: FilterGroup, tableName: string, primaryKey: string): { sql: string; params: unknown[] } {\n\tconst { whereClause, params } = compilePgFilter(group, primaryKey)\n\tconst sql = `DELETE FROM \"${tableName}\" ${whereClause} RETURNING *`.trim().replace(/\\s+/g, ' ')\n\treturn { sql, params }\n}\n\nexport function buildUpsertQuery(\n\ttableName: string,\n\tconflictColumn: string,\n\tprimaryKey: string,\n\tcreate: Record<string, unknown>,\n\tdata: Record<string, unknown>,\n): { sql: string; params: unknown[] } {\n\tconst columns = Object.keys(create)\n\tconst createParams = Object.values(create)\n\tconst placeholders = columns.map((_, i) => `$${i + 1}`)\n\tconst pgConflictCol = mapField(conflictColumn, primaryKey)\n\n\tlet setClause: string\n\tconst allParams = [...createParams]\n\n\tif (Object.keys(data).length > 0) {\n\t\tconst { setParts, params: setParams } = buildSetParts(data, columns.length + 1)\n\t\tsetClause = setParts.join(', ')\n\t\tallParams.push(...setParams)\n\t} else {\n\t\tsetClause = `\"${pgConflictCol}\" = EXCLUDED.\"${pgConflictCol}\"`\n\t}\n\n\tconst sql =\n\t\t`INSERT INTO \"${tableName}\" (${columns.map((c) => `\"${c}\"`).join(', ')}) VALUES (${placeholders.join(', ')}) ON CONFLICT (\"${pgConflictCol}\") DO UPDATE SET ${setClause} RETURNING *`.replace(\n\t\t\t/\\s+/g,\n\t\t\t' ',\n\t\t)\n\treturn { sql, params: allParams }\n}\n\nexport function extractUpsertConflictColumn(filter: FilterGroup, schemaName: string): string {\n\tif (filter.children.length === 1 && filter.children[0] instanceof Filter && filter.children[0].op === 'eq') {\n\t\treturn filter.children[0].field\n\t}\n\n\tlet description: string\n\tif (filter.children.length === 0) {\n\t\tdescription = 'empty filter'\n\t} else if (filter.children.length === 1) {\n\t\tconst child = filter.children[0]\n\t\tconst opDesc = child instanceof Filter ? child.op : 'group'\n\t\tdescription = `single non-eq filter (op: ${opDesc})`\n\t} else {\n\t\tdescription = `${filter.children.length} filter clauses`\n\t}\n\n\tthrow new OrmValidationError('upsert-filter-incompatible', schemaName, 'upsertOne', [\n\t\t{\n\t\t\tcause: `PostgreSQL upsert requires a single eq filter on a UNIQUE-indexed column; received ${description}`,\n\t\t},\n\t])\n}\n\nfunction aggFnToSql(fn: AggregateOpName, field: string | undefined, primaryKey: string): string {\n\tif (fn === 'count') return 'COUNT(*)'\n\tconst col = `\"${mapField(field!, primaryKey)}\"`\n\tswitch (fn) {\n\t\tcase 'countDistinct':\n\t\t\treturn `COUNT(DISTINCT ${col})`\n\t\tcase 'sum':\n\t\t\treturn `SUM(${col})`\n\t\tcase 'avg':\n\t\t\treturn `AVG(${col})`\n\t\tcase 'min':\n\t\t\treturn `MIN(${col})`\n\t\tcase 'max':\n\t\t\treturn `MAX(${col})`\n\t}\n}\n\nfunction resolveHavingField(\n\tfield: string,\n\tprimaryKey: string,\n\taliasToExpr: Map<string, string>,\n\tgroupBySet: Set<string>,\n): string {\n\tif (aliasToExpr.has(field)) return aliasToExpr.get(field)!\n\tif (groupBySet.has(field)) return `\"${mapField(field, primaryKey)}\"`\n\treturn `\"${field}\"`\n}\n\nexport function buildAggregateQuery(\n\tspec: AggregateSpec,\n\ttableName: string,\n\tprimaryKey: string,\n): { sql: string; params: unknown[] } {\n\tconst params: unknown[] = []\n\tlet paramIndex = 1\n\n\tfunction nextParam(value: unknown): string {\n\t\tparams.push(value)\n\t\treturn `$${paramIndex++}`\n\t}\n\n\tconst selectParts: string[] = []\n\tconst aliasToExpr = new Map<string, string>()\n\n\tfor (const agg of spec.aggregates) {\n\t\tconst expr = aggFnToSql(agg.fn, agg.field, primaryKey)\n\t\taliasToExpr.set(agg.alias, expr)\n\t\tselectParts.push(`${expr} AS \"${agg.alias}\"`)\n\t}\n\n\tconst groupByFields: string[] = []\n\tfor (const f of spec.groupBy) {\n\t\tconst col = `\"${mapField(f, primaryKey)}\"`\n\t\tgroupByFields.push(col)\n\t\tselectParts.push(`${col} AS \"${f}\"`)\n\t}\n\n\tlet whereClause = ''\n\tif (spec.where) {\n\t\tconst whereLeaf = (f: Filter) => compileFilter(f, primaryKey, nextParam)\n\t\tconst whereParts = compileChildren(spec.where, whereLeaf)\n\t\tif (whereParts.length > 0) whereClause = `WHERE ${whereParts.join(' AND ')}`\n\t}\n\n\tconst groupByClause = groupByFields.length > 0 ? `GROUP BY ${groupByFields.join(', ')}` : ''\n\n\tlet havingClause = ''\n\tif (spec.having) {\n\t\tconst groupBySet = new Set(spec.groupBy)\n\t\tconst havingLeaf = (f: Filter) =>\n\t\t\tcompileOps(f, resolveHavingField(f.field, primaryKey, aliasToExpr, groupBySet), nextParam)\n\t\tconst havingParts = compileChildren(spec.having, havingLeaf)\n\t\tif (havingParts.length > 0) havingClause = `HAVING ${havingParts.join(' AND ')}`\n\t}\n\n\tconst sql = `SELECT ${selectParts.join(', ')} FROM \"${tableName}\" ${whereClause} ${groupByClause} ${havingClause}`\n\t\t.trim()\n\t\t.replace(/\\s+/g, ' ')\n\treturn { sql, params }\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { FilterGroup } = await import('../../filter')\n\tconst { OrderBy } = await import('../../query-options')\n\tconst { IncOp, MulOp, MinOp, MaxOp, UnsetOp, PushOp, PullOp, PatchOp, SetOp, flattenOps } = await import('../../updates')\n\tconst { OrmValidationError } = await import('../../errors')\n\n\tdescribe('compilePgFilter', () => {\n\t\ttest('empty filter group compiles to empty WHERE clause', () => {\n\t\t\tconst group = FilterGroup.create()\n\t\t\tconst { sql } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toBe('SELECT * FROM \"users\"')\n\t\t})\n\n\t\ttest('single eq filter compiles to WHERE field = $1', () => {\n\t\t\tconst group = FilterGroup.create().eq('name', 'Alice')\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toBe('SELECT * FROM \"users\" WHERE \"name\" = $1')\n\t\t\texpect(params).toEqual(['Alice'])\n\t\t})\n\n\t\ttest('eq with null compiles to IS NULL', () => {\n\t\t\tconst group = FilterGroup.create().eq('name', null)\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toBe('SELECT * FROM \"users\" WHERE \"name\" IS NULL')\n\t\t\texpect(params).toEqual([])\n\t\t})\n\n\t\ttest('ne compiles to != (or IS NOT NULL for null)', () => {\n\t\t\tconst group = FilterGroup.create().ne('age', 5)\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toBe('SELECT * FROM \"users\" WHERE \"age\" != $1')\n\t\t\texpect(params).toEqual([5])\n\n\t\t\tconst nullGroup = FilterGroup.create().ne('age', null)\n\t\t\tconst { sql: nullSql } = buildSelectQuery(nullGroup, undefined, 'users', 'id')\n\t\t\texpect(nullSql).toBe('SELECT * FROM \"users\" WHERE \"age\" IS NOT NULL')\n\t\t})\n\n\t\ttest('gt, gte, lt, lte compile to >, >=, <, <=', () => {\n\t\t\texpect(buildSelectQuery(FilterGroup.create().gt('age', 10), undefined, 't', 'id').sql).toContain('\"age\" > $1')\n\t\t\texpect(buildSelectQuery(FilterGroup.create().gte('age', 20), undefined, 't', 'id').sql).toContain('\"age\" >= $1')\n\t\t\texpect(buildSelectQuery(FilterGroup.create().lt('age', 30), undefined, 't', 'id').sql).toContain('\"age\" < $1')\n\t\t\texpect(buildSelectQuery(FilterGroup.create().lte('age', 40), undefined, 't', 'id').sql).toContain('\"age\" <= $1')\n\t\t})\n\n\t\ttest('in compiles to = ANY($N)', () => {\n\t\t\tconst group = FilterGroup.create().in('status', ['a', 'b'])\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('\"status\" = ANY($1)')\n\t\t\texpect(params).toEqual([['a', 'b']])\n\t\t})\n\n\t\ttest('notIn compiles to NOT (field = ANY($N)) — canonical name notIn', () => {\n\t\t\tconst group = FilterGroup.create().notIn('status', ['x', 'y'])\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('NOT (\"status\" = ANY($1))')\n\t\t\texpect(params).toEqual([['x', 'y']])\n\t\t})\n\n\t\ttest('like compiles to ILIKE with % wrapping', () => {\n\t\t\tconst group = FilterGroup.create().like('name', 'ali')\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('\"name\" ILIKE $1')\n\t\t\texpect(params).toEqual(['%ali%'])\n\t\t})\n\n\t\ttest('exists compiles to IS NOT NULL (own op, not boolean form)', () => {\n\t\t\tconst group = FilterGroup.create().exists('val')\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('\"val\" IS NOT NULL')\n\t\t\texpect(params).toEqual([])\n\t\t})\n\n\t\ttest('notExists is its own op — compiles to IS NULL', () => {\n\t\t\tconst group = FilterGroup.create().notExists('val')\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('\"val\" IS NULL')\n\t\t\texpect(params).toEqual([])\n\t\t})\n\n\t\ttest('contains compiles to @> jsonb', () => {\n\t\t\tconst group = FilterGroup.create().contains('tags', ['a', 'b'])\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('\"tags\" @> $1::jsonb')\n\t\t\texpect(params).toEqual([JSON.stringify(['a', 'b'])])\n\t\t})\n\n\t\ttest('notContains compiles to NOT (@> jsonb)', () => {\n\t\t\tconst group = FilterGroup.create().notContains('tags', ['x'])\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('NOT (\"tags\" @> $1::jsonb)')\n\t\t\texpect(params).toEqual([JSON.stringify(['x'])])\n\t\t})\n\n\t\ttest('multiple clauses produce AND-joined WHERE', () => {\n\t\t\tconst group = FilterGroup.create().eq('a', 1).gt('b', 2)\n\t\t\tconst { sql } = buildSelectQuery(group, undefined, 't', 'id')\n\t\t\texpect(sql).toContain('WHERE \"a\" = $1 AND \"b\" > $2')\n\t\t})\n\n\t\ttest('nested and/or groups compile correctly', () => {\n\t\t\tconst group = FilterGroup.create().and([\n\t\t\t\t(q) => q.eq('a', 1),\n\t\t\t\t(q) => q.or([(g) => g.eq('b', 2), (g) => g.eq('c', 3)]),\n\t\t\t])\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 't', 'id')\n\t\t\texpect(sql).toContain('(\"a\" = $1 AND (\"b\" = $2 OR \"c\" = $3))')\n\t\t\texpect(params).toEqual([1, 2, 3])\n\t\t})\n\n\t\ttest('maps id field to primaryKey when primaryKey differs', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'abc')\n\t\t\tconst { sql } = buildSelectQuery(group, undefined, 'users', 'user_id')\n\t\t\texpect(sql).toContain('\"user_id\" = $1')\n\t\t})\n\t})\n\n\tdescribe('buildSelectQuery', () => {\n\t\ttest('options: sort, limit, offset, select', () => {\n\t\t\tconst group = FilterGroup.create().eq('active', true)\n\t\t\tconst options = {\n\t\t\t\torderBy: [new OrderBy('name', 'asc'), new OrderBy('age', 'desc')],\n\t\t\t\tlimit: 10,\n\t\t\t\toffset: 5,\n\t\t\t\tselect: ['name', 'age'] as const,\n\t\t\t}\n\t\t\tconst { sql, params } = buildSelectQuery(group, options, 'users', 'id')\n\t\t\texpect(sql).toContain('SELECT \"name\", \"age\"')\n\t\t\texpect(sql).toContain('ORDER BY \"name\" ASC, \"age\" DESC')\n\t\t\texpect(sql).toContain('LIMIT $2')\n\t\t\texpect(sql).toContain('OFFSET $3')\n\t\t\texpect(params).toEqual([true, 10, 5])\n\t\t})\n\n\t\ttest('undefined options returns basic SELECT *', () => {\n\t\t\tconst group = FilterGroup.create().eq('x', 1)\n\t\t\tconst { sql } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toBe('SELECT * FROM \"users\" WHERE \"x\" = $1')\n\t\t})\n\t})\n\n\tdescribe('buildCreateQuery', () => {\n\t\ttest('produces INSERT with RETURNING *', () => {\n\t\t\tconst { sql, params } = buildCreateQuery('users', { name: 'Alice', age: 30 })\n\t\t\texpect(sql).toBe('INSERT INTO \"users\" (\"name\", \"age\") VALUES ($1, $2) RETURNING *')\n\t\t\texpect(params).toEqual(['Alice', 30])\n\t\t})\n\t})\n\n\tdescribe('buildUpdateQuery', () => {\n\t\ttest('plain values produce SET col = $N', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql, params } = buildUpdateQuery(group, 'users', 'id', { name: 'Bob', age: 25 })\n\t\t\texpect(sql).toBe('UPDATE \"users\" SET \"name\" = $1, \"age\" = $2 WHERE \"id\" = $3 RETURNING *')\n\t\t\texpect(params).toEqual(['Bob', 25, 'u1'])\n\t\t})\n\n\t\ttest('IncOp produces col = col + $N', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql, params } = buildUpdateQuery(group, 'users', 'id', { count: new IncOp('count', 5) })\n\t\t\texpect(sql).toContain('\"count\" = \"count\" + $1')\n\t\t\texpect(params[0]).toBe(5)\n\t\t})\n\n\t\ttest('MulOp produces col = col * $N', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql } = buildUpdateQuery(group, 'users', 'id', { score: new MulOp('score', 2) })\n\t\t\texpect(sql).toContain('\"score\" = \"score\" * $1')\n\t\t})\n\n\t\ttest('MinOp/MaxOp produce LEAST/GREATEST', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql } = buildUpdateQuery(group, 'users', 'id', {\n\t\t\t\tlo: new MinOp('lo', 1),\n\t\t\t\thi: new MaxOp('hi', 99),\n\t\t\t})\n\t\t\texpect(sql).toContain('LEAST(\"lo\", $1)')\n\t\t\texpect(sql).toContain('GREATEST(\"hi\", $2)')\n\t\t})\n\n\t\ttest('UnsetOp produces col = NULL', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql } = buildUpdateQuery(group, 'users', 'id', { old: new UnsetOp('old') })\n\t\t\texpect(sql).toContain('\"old\" = NULL')\n\t\t})\n\n\t\ttest('PushOp produces jsonb array append', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql } = buildUpdateQuery(group, 'users', 'id', { tags: new PushOp('tags', 'new') })\n\t\t\texpect(sql).toContain('jsonb_build_array($1::jsonb)')\n\t\t})\n\n\t\ttest('PullOp produces jsonb array removal', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql } = buildUpdateQuery(group, 'users', 'id', { tags: new PullOp('tags', 'old') })\n\t\t\texpect(sql).toContain('jsonb_array_elements')\n\t\t})\n\n\t\ttest('PatchOp produces jsonb merge', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql } = buildUpdateQuery(group, 'users', 'id', { meta: new PatchOp('meta', { a: 1 }) })\n\t\t\texpect(sql).toContain('|| $1::jsonb')\n\t\t})\n\t})\n\n\tdescribe('buildPkUpdateQuery', () => {\n\t\ttest('builds UPDATE with PK WHERE clause', () => {\n\t\t\tconst { sql, params } = buildPkUpdateQuery('users', 'id', 'u1', { name: 'Bob' })\n\t\t\texpect(sql).toBe('UPDATE \"users\" SET \"name\" = $1 WHERE \"id\" = $2 RETURNING *')\n\t\t\texpect(params).toEqual(['Bob', 'u1'])\n\t\t})\n\n\t\ttest('handles ops in PK update', () => {\n\t\t\tconst { sql, params } = buildPkUpdateQuery('users', 'id', 'u1', { count: new IncOp('count', 3) })\n\t\t\texpect(sql).toContain('\"count\" = \"count\" + $1')\n\t\t\texpect(sql).toContain('WHERE \"id\" = $2')\n\t\t\texpect(params).toEqual([3, 'u1'])\n\t\t})\n\t})\n\n\tdescribe('buildDeleteQuery', () => {\n\t\ttest('produces DELETE with RETURNING *', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql, params } = buildDeleteQuery(group, 'users', 'id')\n\t\t\texpect(sql).toBe('DELETE FROM \"users\" WHERE \"id\" = $1 RETURNING *')\n\t\t\texpect(params).toEqual(['u1'])\n\t\t})\n\t})\n\n\tdescribe('buildUpsertQuery', () => {\n\t\ttest('produces INSERT ON CONFLICT with SET parts from data', () => {\n\t\t\tconst data = flattenOps([new SetOp({ name: 'Updated' })])\n\t\t\tconst { sql, params } = buildUpsertQuery('users', 'email', 'id', { id: 'u1', email: 'a@b.com', name: 'Alice' }, data)\n\t\t\texpect(sql).toContain('INSERT INTO \"users\"')\n\t\t\texpect(sql).toContain('ON CONFLICT (\"email\") DO UPDATE SET')\n\t\t\texpect(sql).toContain('\"name\" = $4')\n\t\t\texpect(sql).toContain('RETURNING *')\n\t\t\texpect(params).toEqual(['u1', 'a@b.com', 'Alice', 'Updated'])\n\t\t})\n\n\t\ttest('empty data produces no-op SET on conflict column', () => {\n\t\t\tconst { sql, params } = buildUpsertQuery('users', 'email', 'id', { id: 'u1', email: 'a@b.com' }, {})\n\t\t\texpect(sql).toContain('ON CONFLICT (\"email\") DO UPDATE SET \"email\" = EXCLUDED.\"email\"')\n\t\t\texpect(params).toEqual(['u1', 'a@b.com'])\n\t\t})\n\n\t\ttest('maps conflict column via mapField when primaryKey differs', () => {\n\t\t\tconst { sql } = buildUpsertQuery('users', 'id', 'user_id', { user_id: 'u1', name: 'A' }, {})\n\t\t\texpect(sql).toContain('ON CONFLICT (\"user_id\")')\n\t\t})\n\n\t\ttest('handles ops in upsert SET clause', () => {\n\t\t\tconst data = flattenOps([new IncOp('views', 1)])\n\t\t\tconst { sql, params } = buildUpsertQuery('posts', 'slug', 'id', { id: 'p1', slug: 'hello', views: 0 }, data)\n\t\t\texpect(sql).toContain('\"views\" = \"views\" + $4')\n\t\t\texpect(params).toEqual(['p1', 'hello', 0, 1])\n\t\t})\n\t})\n\n\tdescribe('extractUpsertConflictColumn', () => {\n\t\ttest('extracts field from single eq filter', () => {\n\t\t\tconst filter = FilterGroup.create().eq('email', 'a@b.com')\n\t\t\texpect(extractUpsertConflictColumn(filter, 'users')).toBe('email')\n\t\t})\n\n\t\ttest('throws upsert-filter-incompatible on empty filter', () => {\n\t\t\tconst filter = FilterGroup.create()\n\t\t\texpect(() => extractUpsertConflictColumn(filter, 'users')).toThrow(OrmValidationError)\n\t\t\ttry {\n\t\t\t\textractUpsertConflictColumn(filter, 'users')\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('upsert-filter-incompatible')\n\t\t\t\texpect(err.schema).toBe('users')\n\t\t\t\texpect(err.operation).toBe('upsertOne')\n\t\t\t\texpect(err.failures[0].cause).toContain('empty filter')\n\t\t\t}\n\t\t})\n\n\t\ttest('throws upsert-filter-incompatible on multiple filters', () => {\n\t\t\tconst filter = FilterGroup.create().eq('a', 1).eq('b', 2)\n\t\t\texpect(() => extractUpsertConflictColumn(filter, 'users')).toThrow(OrmValidationError)\n\t\t\ttry {\n\t\t\t\textractUpsertConflictColumn(filter, 'users')\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('upsert-filter-incompatible')\n\t\t\t\texpect(err.failures[0].cause).toContain('2 filter clauses')\n\t\t\t}\n\t\t})\n\n\t\ttest('throws upsert-filter-incompatible on non-eq filter', () => {\n\t\t\tconst filter = FilterGroup.create().gt('age', 10)\n\t\t\texpect(() => extractUpsertConflictColumn(filter, 'users')).toThrow(OrmValidationError)\n\t\t\ttry {\n\t\t\t\textractUpsertConflictColumn(filter, 'users')\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('upsert-filter-incompatible')\n\t\t\t\texpect(err.failures[0].cause).toContain('non-eq filter')\n\t\t\t}\n\t\t})\n\n\t\ttest('throws with clear message naming received filter shape', () => {\n\t\t\tconst filter = FilterGroup.create().in('status', ['a', 'b'])\n\t\t\ttry {\n\t\t\t\textractUpsertConflictColumn(filter, 'test')\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('upsert-filter-incompatible')\n\t\t\t\texpect(err.failures[0].cause).toContain('single eq filter')\n\t\t\t\texpect(err.failures[0].cause).toContain('UNIQUE-indexed column')\n\t\t\t}\n\t\t})\n\t})\n\n\tdescribe('buildAggregateQuery', () => {\n\t\ttest('bare count produces SELECT COUNT(*) AS alias', () => {\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{ aggregates: [{ fn: 'count', alias: 'total' }], groupBy: [] },\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe('SELECT COUNT(*) AS \"total\" FROM \"orders\"')\n\t\t\texpect(params).toEqual([])\n\t\t})\n\n\t\ttest('multi-aggregator produces all functions', () => {\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [\n\t\t\t\t\t\t{ fn: 'count', alias: 'cnt' },\n\t\t\t\t\t\t{ fn: 'sum', field: 'amount', alias: 'revenue' },\n\t\t\t\t\t\t{ fn: 'avg', field: 'amount', alias: 'avgAmt' },\n\t\t\t\t\t\t{ fn: 'min', field: 'amount', alias: 'lo' },\n\t\t\t\t\t\t{ fn: 'max', field: 'amount', alias: 'hi' },\n\t\t\t\t\t],\n\t\t\t\t\tgroupBy: [],\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe(\n\t\t\t\t'SELECT COUNT(*) AS \"cnt\", SUM(\"amount\") AS \"revenue\", AVG(\"amount\") AS \"avgAmt\", MIN(\"amount\") AS \"lo\", MAX(\"amount\") AS \"hi\" FROM \"orders\"',\n\t\t\t)\n\t\t\texpect(params).toEqual([])\n\t\t})\n\n\t\ttest('countDistinct produces COUNT(DISTINCT col)', () => {\n\t\t\tconst { sql } = buildAggregateQuery(\n\t\t\t\t{ aggregates: [{ fn: 'countDistinct', field: 'category', alias: 'unique' }], groupBy: [] },\n\t\t\t\t'items',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe('SELECT COUNT(DISTINCT \"category\") AS \"unique\" FROM \"items\"')\n\t\t})\n\n\t\ttest('single-column groupBy produces GROUP BY clause', () => {\n\t\t\tconst { sql } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'count', alias: 'cnt' }],\n\t\t\t\t\tgroupBy: ['region'],\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe('SELECT COUNT(*) AS \"cnt\", \"region\" AS \"region\" FROM \"orders\" GROUP BY \"region\"')\n\t\t})\n\n\t\ttest('multi-column groupBy produces all GROUP BY columns', () => {\n\t\t\tconst { sql } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'count', alias: 'cnt' }],\n\t\t\t\t\tgroupBy: ['region', 'product'],\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe(\n\t\t\t\t'SELECT COUNT(*) AS \"cnt\", \"region\" AS \"region\", \"product\" AS \"product\" FROM \"orders\" GROUP BY \"region\", \"product\"',\n\t\t\t)\n\t\t})\n\n\t\ttest('where-only produces WHERE clause with params', () => {\n\t\t\tconst where = FilterGroup.create().eq('status', 'active')\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{ aggregates: [{ fn: 'count', alias: 'total' }], groupBy: [], where },\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe('SELECT COUNT(*) AS \"total\" FROM \"orders\" WHERE \"status\" = $1')\n\t\t\texpect(params).toEqual(['active'])\n\t\t})\n\n\t\ttest('having-only filters on aggregate alias via repeated expression', () => {\n\t\t\tconst having = FilterGroup.create().gt('total', 10)\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\t\tgroupBy: ['region'],\n\t\t\t\t\thaving,\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe(\n\t\t\t\t'SELECT COUNT(*) AS \"total\", \"region\" AS \"region\" FROM \"orders\" GROUP BY \"region\" HAVING COUNT(*) > $1',\n\t\t\t)\n\t\t\texpect(params).toEqual([10])\n\t\t})\n\n\t\ttest('where + having both produce correct param ordering', () => {\n\t\t\tconst where = FilterGroup.create().eq('status', 'active')\n\t\t\tconst having = FilterGroup.create().gte('revenue', 1000)\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'sum', field: 'amount', alias: 'revenue' }],\n\t\t\t\t\tgroupBy: ['region'],\n\t\t\t\t\twhere,\n\t\t\t\t\thaving,\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe(\n\t\t\t\t'SELECT SUM(\"amount\") AS \"revenue\", \"region\" AS \"region\" FROM \"orders\" WHERE \"status\" = $1 GROUP BY \"region\" HAVING SUM(\"amount\") >= $2',\n\t\t\t)\n\t\t\texpect(params).toEqual(['active', 1000])\n\t\t})\n\n\t\ttest('having on groupBy field uses column name directly', () => {\n\t\t\tconst having = FilterGroup.create().eq('region', 'US')\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'count', alias: 'cnt' }],\n\t\t\t\t\tgroupBy: ['region'],\n\t\t\t\t\thaving,\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe(\n\t\t\t\t'SELECT COUNT(*) AS \"cnt\", \"region\" AS \"region\" FROM \"orders\" GROUP BY \"region\" HAVING \"region\" = $1',\n\t\t\t)\n\t\t\texpect(params).toEqual(['US'])\n\t\t})\n\n\t\ttest('field-name mapping: id maps to primaryKey when primaryKey differs', () => {\n\t\t\tconst { sql } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'countDistinct', field: 'id', alias: 'uniqueIds' }],\n\t\t\t\t\tgroupBy: [],\n\t\t\t\t},\n\t\t\t\t'users',\n\t\t\t\t'user_id',\n\t\t\t)\n\t\t\texpect(sql).toBe('SELECT COUNT(DISTINCT \"user_id\") AS \"uniqueIds\" FROM \"users\"')\n\t\t})\n\n\t\ttest('groupBy with id field maps to primaryKey', () => {\n\t\t\tconst { sql } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'count', alias: 'cnt' }],\n\t\t\t\t\tgroupBy: ['id'],\n\t\t\t\t},\n\t\t\t\t'users',\n\t\t\t\t'user_id',\n\t\t\t)\n\t\t\texpect(sql).toContain('GROUP BY \"user_id\"')\n\t\t\texpect(sql).toContain('\"user_id\" AS \"id\"')\n\t\t})\n\n\t\ttest('complex having with AND/OR groups', () => {\n\t\t\tconst having = FilterGroup.create().and([\n\t\t\t\t(q) => q.gt('cnt', 5),\n\t\t\t\t(q) => q.or([(g) => g.eq('region', 'US'), (g) => g.eq('region', 'EU')]),\n\t\t\t])\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'count', alias: 'cnt' }],\n\t\t\t\t\tgroupBy: ['region'],\n\t\t\t\t\thaving,\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toContain('HAVING (COUNT(*) > $1 AND (\"region\" = $2 OR \"region\" = $3))')\n\t\t\texpect(params).toEqual([5, 'US', 'EU'])\n\t\t})\n\t})\n}\n","import { v, type ConditionalObjectKeys, type Pipe, type PipeInput, type PipeOutput } from 'valleyed'\n\ntype CtorParams<T> = ConstructorParameters<T & (abstract new (...args: any[]) => any)>\ntype BaseCtorParams<T> = T extends abstract new (...args: infer A) => any ? A : never\n\nexport function configurable<P extends Pipe<any, any>, Base extends abstract new (...args: any[]) => any>(pipeFn: () => P, base: Base) {\n\tconst pipe = pipeFn()\n\tv.compile(pipe)\n\n\tabstract class Configurable extends (base as unknown as new (...args: any[]) => any) {\n\t\tdeclare static readonly Config: PipeOutput<P>\n\n\t\tprotected constructor (protected readonly config: PipeOutput<P>, ...baseArgs: BaseCtorParams<Base>) {\n\t\t\t// eslint-disable-next-line constructor-super\n\t\t\tsuper(...baseArgs)\n\t\t}\n\n\t\tstatic create<This extends Function & { prototype: any }>(\n\t\t\tthis: This,\n\t\t\tinput: ConditionalObjectKeys<PipeInput<P>>,\n\t\t\t...args: CtorParams<This> extends [PipeOutput<P>, ...infer R] ? R : never\n\t\t): This['prototype'] {\n\t\t\tconst r = v.validate(pipe, input)\n\t\t\tif (!r.valid) throw r.error\n\t\t\treturn new (this as any)(r.value, ...args) as This['prototype']\n\t\t}\n\t}\n\n\treturn Configurable as unknown as (abstract new (validated: PipeOutput<P>, ...baseArgs: BaseCtorParams<Base>) => InstanceType<Base> & { readonly config: PipeOutput<P> }) & {\n\t\treadonly Config: PipeOutput<P>\n\t\tcreate<This extends Function & { prototype: any }>(\n\t\t\tthis: This,\n\t\t\tinput: ConditionalObjectKeys<PipeInput<P>>,\n\t\t\t...args: CtorParams<This> extends [PipeOutput<P>, ...infer R] ? R : never\n\t\t): This['prototype']\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\n\tconst testPipe = () =>\n\t\tv.object({\n\t\t\thost: v.string(),\n\t\t\tport: v.number(),\n\t\t})\n\n\ttype TestConfig = PipeOutput<ReturnType<typeof testPipe>>\n\n\tclass TestBase {\n\t\tbaseValue: string\n\t\tconstructor() {\n\t\t\tthis.baseValue = 'base'\n\t\t}\n\t}\n\n\tclass TestBaseWithArgs {\n\t\tlabel: string\n\t\tconstructor(label: string) {\n\t\t\tthis.label = label\n\t\t}\n\t}\n\n\tdescribe('configurable', () => {\n\t\ttest('validation runs in static create before constructor body executes', () => {\n\t\t\tlet constructorRan = false\n\n\t\t\tconst Wrapped = configurable(testPipe, TestBase)\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof MyClass.Config) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t\tconstructorRan = true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\texpect(() => MyClass.create({ host: 123, port: 'bad' } as any)).toThrow()\n\t\t\texpect(constructorRan).toBe(false)\n\n\t\t\tMyClass.create({ host: 'localhost', port: 3000 })\n\t\t\texpect(constructorRan).toBe(true)\n\t\t})\n\n\t\ttest('constructor receives validated value', () => {\n\t\t\tconst Wrapped = configurable(testPipe, TestBase)\n\t\t\tlet receivedConfig: unknown\n\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof MyClass.Config) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t\treceivedConfig = this.config\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tMyClass.create({ host: 'localhost', port: 3000 })\n\n\t\t\texpect(receivedConfig).toEqual({ host: 'localhost', port: 3000 })\n\t\t})\n\n\t\ttest('external new is a compile error', () => {\n\t\t\tconst Wrapped = configurable(testPipe, TestBase)\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof MyClass.Config) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// @ts-expect-error — external `new` on a class with protected constructor is a compile error\n\t\t\tvoid (() => new MyClass({ host: 'localhost', port: 3000 }))\n\t\t})\n\n\t\ttest('static Config resolves to PipeOutput<P> at the type level', () => {\n\t\t\tconst Wrapped = configurable(testPipe, TestBase)\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof MyClass.Config) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\texpectTypeOf<typeof MyClass.Config>().toEqualTypeOf<TestConfig>()\n\t\t\texpect(MyClass.create).toBeTypeOf('function')\n\t\t})\n\n\t\ttest('ConstructorParameters<This>-based extras inference works for non-zero-arg leaf signatures', () => {\n\t\t\tconst Wrapped = configurable(testPipe, TestBase)\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\textra: number\n\t\t\t\tprotected constructor(config: typeof MyClass.Config, extra: number) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t\tthis.extra = extra\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst instance = MyClass.create({ host: 'localhost', port: 3000 }, 42)\n\n\t\t\texpect(instance.extra).toBe(42)\n\t\t\texpectTypeOf(instance).toHaveProperty('extra')\n\t\t\texpectTypeOf(instance.extra).toEqualTypeOf<number>()\n\n\t\t\t// @ts-expect-error — wrong extra type\n\t\t\tvoid (() => MyClass.create({ host: 'localhost', port: 3000 }, 'not-a-number'))\n\t\t})\n\n\t\ttest('base-args forwarding works for non-zero-arg bases', () => {\n\t\t\tconst Wrapped = configurable(testPipe, TestBaseWithArgs)\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof MyClass.Config, label: string) {\n\t\t\t\t\tsuper(config, label)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst instance = MyClass.create({ host: 'localhost', port: 3000 }, 'test-label')\n\n\t\t\texpect(instance.label).toBe('test-label')\n\t\t})\n\n\t\ttest('config is accessible as protected readonly on instances', () => {\n\t\t\tconst Wrapped = configurable(testPipe, TestBase)\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof MyClass.Config) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t}\n\n\t\t\t\tgetHost() {\n\t\t\t\t\treturn this.config.host\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst instance = MyClass.create({ host: 'localhost', port: 3000 })\n\t\t\texpect(instance.getHost()).toBe('localhost')\n\t\t})\n\n\t\ttest('accepts an abstract base class', () => {\n\t\t\tabstract class AbstractBase {\n\t\t\t\tabstract greet(): string\n\t\t\t}\n\n\t\t\tconst Wrapped = configurable(testPipe, AbstractBase)\n\t\t\tclass Concrete extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof Concrete.Config) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t}\n\t\t\t\tgreet() {\n\t\t\t\t\treturn `hello from ${this.config.host}`\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst instance = Concrete.create({ host: 'localhost', port: 3000 })\n\t\t\texpect(instance.greet()).toBe('hello from localhost')\n\t\t\texpectTypeOf(instance).toHaveProperty('config')\n\t\t})\n\t})\n}\n","import type { Pipe } from 'valleyed'\n\nimport { EquippedError } from '../errors'\nimport { Instance, type ClassRef } from '../instance'\nimport type { AggregateOpName, FieldTypeName, FilterOpName, UpdateOpName } from './adapter'\nimport type { OrmUse } from './adapters/base'\nimport { FilterGroup } from './filter'\nimport type { DiscoveredSchema } from './migrations/introspection-types'\nimport type { AddFieldChange, AddForeignKeyChange, AddIndexChange, CreateTableChange, DropFieldChange, DropForeignKeyChange, DropIndexChange, DropTableChange, ModifyFieldChange, RenameFieldChange, RenameTableChange } from './migrations/types'\nimport type { IterationQueryOptions, QueryOptions } from './query-options'\nimport type { AnySchema } from './schema'\nimport type { AnyUpdateOp } from './updates'\n\nexport type AggregateSpec = {\n\twhere?: FilterGroup\n\taggregates: ReadonlyArray<{\n\t\tfn: AggregateOpName\n\t\tfield?: string\n\t\talias: string\n\t}>\n\tgroupBy: readonly string[]\n\thaving?: FilterGroup\n}\n\nexport abstract class OrmAdapter {\n\treadonly queryableOps: readonly FilterOpName[] = []\n\treadonly updateOps: readonly UpdateOpName[] = []\n\treadonly aggregateOps: readonly AggregateOpName[] = []\n\treadonly supportedFieldTypes: readonly FieldTypeName[] = []\n\n\tabstract readonly schemaConfigPipe: Pipe<any, any>\n\n\tconnect?(): Promise<void>\n\tdisconnect?(): Promise<void>\n\tfindByPk?(schema: AnySchema, config: unknown, pk: unknown): Promise<Record<string, unknown> | null>\n\tcreateMany?(schema: AnySchema, config: unknown, data: Record<string, unknown>[]): Promise<Record<string, unknown>[]>\n\tupdateByPk?(schema: AnySchema, config: unknown, pk: unknown, ops: AnyUpdateOp[]): Promise<Record<string, unknown> | null>\n\tdeleteByPk?(schema: AnySchema, config: unknown, pk: unknown): Promise<Record<string, unknown> | null>\n\traw?(schema: AnySchema, config: unknown, ...args: any[]): Promise<any>\n\tfindMany?(schema: AnySchema, config: unknown, filter: FilterGroup, options?: QueryOptions): Promise<Record<string, unknown>[]>\n\tcount?(schema: AnySchema, config: unknown, filter: FilterGroup): Promise<number>\n\titerateMany?(schema: AnySchema, config: unknown, filter: FilterGroup, options?: IterationQueryOptions): AsyncGenerator<Record<string, unknown>, void, void>\n\tupdateMany?(schema: AnySchema, config: unknown, filter: FilterGroup, data: Record<string, unknown>): Promise<Record<string, unknown>[]>\n\tdeleteMany?(schema: AnySchema, config: unknown, filter: FilterGroup): Promise<Record<string, unknown>[]>\n\tupsertOne?(\n\t\tschema: AnySchema,\n\t\tconfig: unknown,\n\t\tfilter: FilterGroup,\n\t\tcreate: Record<string, unknown>,\n\t\tops: AnyUpdateOp[],\n\t): Promise<Record<string, unknown>>\n\taggregate?(schema: AnySchema, config: unknown, spec: AggregateSpec): Promise<Array<Record<string, unknown>>>\n\tsession?<T>(fn: () => Promise<T>): Promise<T>\n\n\tloadMigrations?(): Promise<{ id: string; appliedAt: number }[]>\n\trecordMigration?(id: string, appliedAt: number): Promise<void>\n\tacquireMigrationLock?<T>(fn: () => Promise<T>): Promise<T>\n\tapplyCreateTable?(change: CreateTableChange<any>): Promise<void>\n\tapplyDropTable?(change: DropTableChange): Promise<void>\n\tapplyAddField?(change: AddFieldChange<any>): Promise<void>\n\tapplyDropField?(change: DropFieldChange): Promise<void>\n\tapplyModifyField?(change: ModifyFieldChange<any>): Promise<void>\n\tapplyRenameTable?(change: RenameTableChange): Promise<void>\n\tapplyRenameField?(change: RenameFieldChange): Promise<void>\n\tapplyAddIndex?(change: AddIndexChange): Promise<void>\n\tapplyDropIndex?(change: DropIndexChange): Promise<void>\n\tapplyAddForeignKey?(change: AddForeignKeyChange): Promise<void>\n\tapplyDropForeignKey?(change: DropForeignKeyChange): Promise<void>\n\tintrospect?(): Promise<DiscoveredSchema[]>\n\n\tprotected onFatalError(err: unknown): never {\n\t\tconst wrapped = err instanceof EquippedError ? err : new EquippedError('OrmAdapter fatal error', {}, err)\n\t\tInstance.crash(wrapped)\n\t}\n\n\tconstructor() {\n\t\tconst self = this as any\n\t\tif (typeof self.connect === 'function') {\n\t\t\tInstance.on('start', () => self.connect(), { class: this.constructor as ClassRef })\n\t\t}\n\t\tif (typeof self.disconnect === 'function') {\n\t\t\tInstance.on('close', () => self.disconnect(), { class: this.constructor as ClassRef })\n\t\t}\n\t}\n\n\tuse(schema: AnySchema, config: unknown): OrmUse {\n\t\tconst self = this as any\n\t\tconst emptyIterator = async function* (): AsyncGenerator<Record<string, unknown>, void, void> {}\n\t\tconst use: OrmUse = {\n\t\t\tfindMany: (filter, opts) => self.findMany?.(schema, config, filter, opts) ?? Promise.resolve([]),\n\t\t\titerateMany: (filter, opts) => self.iterateMany?.(schema, config, filter, opts) ?? emptyIterator(),\n\t\t\tfindOne: async (filter) => {\n\t\t\t\tconst rows = await use.findMany(filter, { limit: 1 })\n\t\t\t\treturn rows[0] ?? null\n\t\t\t},\n\t\t\tcount: (filter) => self.count?.(schema, config, filter) ?? Promise.reject(new Error('count not implemented')),\n\t\t\tcreateOne: async (d) => {\n\t\t\t\tconst rows = await use.createMany([d])\n\t\t\t\treturn rows[0]\n\t\t\t},\n\t\t\tcreateMany: (d) => self.createMany?.(schema, config, d) ?? Promise.resolve([]),\n\t\t\tupdateMany: (filter, d) => self.updateMany?.(schema, config, filter, d) ?? Promise.resolve([]),\n\t\t\tupdateOne: async (filter, d) => {\n\t\t\t\tconst match = await use.findOne(filter)\n\t\t\t\tif (!match) return null\n\t\t\t\tconst pk = schema.pkField.name\n\t\t\t\tconst pkFilter = FilterGroup.create().eq(pk, match[pk])\n\t\t\t\tconst rows = await use.updateMany(pkFilter, d)\n\t\t\t\treturn rows[0] ?? null\n\t\t\t},\n\t\t\tupsertOne: (filter, create, ops) =>\n\t\t\t\tself.upsertOne?.(schema, config, filter, create, ops) ?? Promise.reject(new Error('upsertOne not implemented')),\n\t\t\tdeleteOne: async (filter) => {\n\t\t\t\tconst row = await use.findOne(filter)\n\t\t\t\tif (!row) return null\n\t\t\t\tconst pk = schema.pkField.name\n\t\t\t\tif (self.deleteByPk) {\n\t\t\t\t\tawait self.deleteByPk(schema, config, row[pk])\n\t\t\t\t} else if (self.deleteMany) {\n\t\t\t\t\tconst pkFilter = FilterGroup.create().eq(pk, row[pk])\n\t\t\t\t\tawait self.deleteMany(schema, config, pkFilter)\n\t\t\t\t}\n\t\t\t\treturn row\n\t\t\t},\n\t\t\tdeleteMany: (filter) => self.deleteMany?.(schema, config, filter) ?? Promise.resolve([]),\n\t\t\traw: (...args: any[]) => self.raw?.(schema, config, ...args) ?? Promise.reject(new Error('raw not implemented')),\n\t\t\taggregate: (spec) => self.aggregate?.(schema, config, spec) ?? Promise.reject(new Error('aggregate not implemented')),\n\t\t\taggregateOps: self.aggregateOps ?? [],\n\t\t}\n\t\treturn use\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, vi } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\n\tdescribe('OrmAdapter', () => {\n\t\ttest('subclass with connect/disconnect auto-registers Instance hooks', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tconst onSpy = vi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tclass TestAdapter 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 connect() {}\n\t\t\t\tasync disconnect() {}\n\t\t\t}\n\n\t\t\tnew (TestAdapter as any)()\n\n\t\t\texpect(onSpy).toHaveBeenCalledWith('start', expect.any(Function), expect.objectContaining({ class: TestAdapter }))\n\t\t\texpect(onSpy).toHaveBeenCalledWith('close', expect.any(Function), expect.objectContaining({ class: TestAdapter }))\n\n\t\t\tonSpy.mockRestore()\n\t\t})\n\n\t\ttest('subclass without connect/disconnect does not register hooks', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tconst onSpy = vi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tclass MinimalAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t}\n\n\t\t\tnew (MinimalAdapter as any)()\n\t\t\texpect(onSpy).not.toHaveBeenCalled()\n\n\t\t\tonSpy.mockRestore()\n\t\t})\n\n\t\ttest('capability declarations default to empty arrays', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tclass DefaultAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t}\n\t\t\tconst adapter = new (DefaultAdapter as any)() as DefaultAdapter\n\t\t\texpect(adapter.queryableOps).toEqual([])\n\t\t\texpect(adapter.updateOps).toEqual([])\n\t\t\texpect(adapter.aggregateOps).toEqual([])\n\t\t\texpect(adapter.supportedFieldTypes).toEqual([])\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('onFatalError wraps non-EquippedError and calls Instance.crash', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\t\t\tconst crashSpy = vi.spyOn(Inst, 'crash').mockImplementation((() => {\n\t\t\t\tthrow new Error('crash')\n\t\t\t}) as any)\n\n\t\t\tclass FatalAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\ttriggerFatal() {\n\t\t\t\t\tthis.onFatalError(new Error('something broke'))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (FatalAdapter as any)() as FatalAdapter\n\t\t\texpect(() => adapter.triggerFatal()).toThrow('crash')\n\t\t\texpect(crashSpy).toHaveBeenCalled()\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('onFatalError passes through EquippedError directly', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\t\t\tlet crashedWith: unknown\n\t\t\tvi.spyOn(Inst, 'crash').mockImplementation(((err: any) => {\n\t\t\t\tcrashedWith = err\n\t\t\t\tthrow err\n\t\t\t}) as any)\n\n\t\t\tclass FatalAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\ttriggerFatal() {\n\t\t\t\t\tthis.onFatalError(new EquippedError('equipped error', { detail: 'test' }))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (FatalAdapter as any)() as FatalAdapter\n\t\t\texpect(() => adapter.triggerFatal()).toThrow()\n\t\t\texpect(crashedWith).toBeInstanceOf(EquippedError)\n\t\t\texpect((crashedWith as EquippedError).message).toBe('equipped error')\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('use() creates OrmUse bridge that delegates to flat methods', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tconst { Schema } = await import('./schema')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tclass BridgeAdapter 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\n\t\t\t\tasync findMany(_s: AnySchema, _c: unknown, _f: any, _o?: any) {\n\t\t\t\t\treturn [{ id: 'found' }]\n\t\t\t\t}\n\t\t\t\tasync count(_s: AnySchema, _c: unknown, _f: any) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\tasync *iterateMany(_s: AnySchema, _c: unknown, _f: any, _o?: any) {\n\t\t\t\t\tyield { id: 'iterated' }\n\t\t\t\t}\n\t\t\t\tasync createMany(_s: AnySchema, _c: unknown, data: Record<string, unknown>[]) {\n\t\t\t\t\treturn data\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst TestSchema = Schema.from('bridge_test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = new (BridgeAdapter as any)() as BridgeAdapter\n\t\t\tconst ormUse = adapter.use(TestSchema, { table: 'bridge_test' })\n\n\t\t\tconst rows = await ormUse.findMany(FilterGroup.create())\n\t\t\texpect(rows).toEqual([{ id: 'found' }])\n\t\t\tawait expect(ormUse.count(FilterGroup.create())).resolves.toBe(1)\n\n\t\t\tconst iterated: Record<string, unknown>[] = []\n\t\t\tfor await (const row of ormUse.iterateMany(FilterGroup.create())) iterated.push(row)\n\t\t\texpect(iterated).toEqual([{ id: 'iterated' }])\n\n\t\t\tconst created = await ormUse.createOne({ id: 'new' })\n\t\t\texpect(created).toEqual({ id: 'new' })\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('use() bridge delegates updateMany to flat method', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tconst { Schema } = await import('./schema')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tclass UpdateAdapter 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 updateOps = ['set'] as const\n\n\t\t\t\tasync findMany(_s: AnySchema, _c: unknown, _f: any) {\n\t\t\t\t\treturn [{ id: 'u1', name: 'old' }]\n\t\t\t\t}\n\t\t\t\tasync updateMany(_s: AnySchema, _c: unknown, _f: any, data: Record<string, unknown>) {\n\t\t\t\t\treturn [{ id: 'u1', ...data }]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst TestSchema = Schema.from('upd_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 adapter = new (UpdateAdapter as any)() as UpdateAdapter\n\t\t\tconst ormUse = adapter.use(TestSchema, { table: 'upd_test' })\n\n\t\t\tconst updated = await ormUse.updateOne(FilterGroup.create().eq('id', 'u1'), { name: 'new' })\n\t\t\texpect(updated).not.toBeNull()\n\t\t\texpect(updated!.name).toBe('new')\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('use().iterateMany does not fall back to findMany when adapter omits iterateMany', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tconst { Schema } = await import('./schema')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tlet findManyCalls = 0\n\t\t\tclass FindOnlyAdapter 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 findMany() {\n\t\t\t\t\tfindManyCalls += 1\n\t\t\t\t\treturn [{ id: 'found' }]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst TestSchema = Schema.from('iter_no_fallback')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = new (FindOnlyAdapter as any)() as FindOnlyAdapter\n\t\t\tconst rows: Record<string, unknown>[] = []\n\t\t\tfor await (const row of adapter.use(TestSchema, { table: 'iter_no_fallback' }).iterateMany(FilterGroup.create())) rows.push(row)\n\n\t\t\texpect(rows).toEqual([])\n\t\t\texpect(findManyCalls).toBe(0)\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('use() bridge delegates deleteByPk via deleteOne', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tconst { Schema } = await import('./schema')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tlet deletedPk: unknown = null\n\t\t\tclass DeleteAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\n\t\t\t\tasync findMany(_s: AnySchema, _c: unknown, _f: any) {\n\t\t\t\t\treturn [{ id: 'd1' }]\n\t\t\t\t}\n\t\t\t\tasync deleteByPk(_s: AnySchema, _c: unknown, pk: unknown) {\n\t\t\t\t\tdeletedPk = pk\n\t\t\t\t\treturn { id: String(pk) }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst TestSchema = Schema.from('del_test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = new (DeleteAdapter as any)() as DeleteAdapter\n\t\t\tconst ormUse = adapter.use(TestSchema, { table: 'del_test' })\n\n\t\t\tconst deleted = await ormUse.deleteOne(FilterGroup.create().eq('id', 'd1'))\n\t\t\texpect(deleted).toEqual({ id: 'd1' })\n\t\t\texpect(deletedPk).toBe('d1')\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('use() bridge delegates session to flat method', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tlet sessionRan = false\n\t\t\tclass SessionAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\tasync session<T>(fn: () => Promise<T>): Promise<T> {\n\t\t\t\t\tsessionRan = true\n\t\t\t\t\treturn fn()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (SessionAdapter as any)() as SessionAdapter\n\t\t\tconst result = await adapter.session!(async () => 42)\n\t\t\texpect(result).toBe(42)\n\t\t\texpect(sessionRan).toBe(true)\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('type-level: subclass method override enforces canonical signature', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tclass CorrectAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\tasync findByPk(_s: AnySchema, _c: unknown, _pk: unknown) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\tasync createMany(_s: AnySchema, _c: unknown, _d: Record<string, unknown>[]) {\n\t\t\t\t\treturn []\n\t\t\t\t}\n\t\t\t\tasync raw(_s: AnySchema, _c: unknown, ..._args: any[]) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (CorrectAdapter as any)() as CorrectAdapter\n\t\t\texpect(adapter.findByPk).toBeTypeOf('function')\n\t\t\texpect(adapter.createMany).toBeTypeOf('function')\n\t\t\texpect(adapter.raw).toBeTypeOf('function')\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\t})\n}\n"],"mappings":"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","names":["import_valleyed","pino","EquippedError","OrmValidationError","import_valleyed","import_valleyed","v","v","EquippedError","v","OrmAdapter","FilterGroup","IncOp","MulOp","MinOp","MaxOp","UnsetOp","PushOp","PullOp","PatchOp","SetOp","flattenOps","OrmValidationError","import_valleyed","v","v","result","Cursor","OrmIntrospectionError","Instance","FilterGroup"]}