{"version":3,"sources":["../../src/orm/adapters/in-memory/index.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks'\n\nimport { v, differ } from 'valleyed'\n\nimport { configurable } from '../../../utilities/configurable'\nimport type { FieldTypeName } from '../../adapter'\nimport { Filter, FilterGroup, type FilterChild } from '../../filter'\nimport type { DiscoveredSchema, ForeignKeyAction } from '../../migrations/introspection-types'\nimport type { AddFieldChange, AddForeignKeyChange, AddIndexChange, AnyFieldSpec, CreateTableChange, DropFieldChange, DropForeignKeyChange, DropIndexChange, DropTableChange, ModifyFieldChange, RenameFieldChange, RenameTableChange } from '../../migrations/types'\nimport { OrmAdapter, type AggregateSpec } from '../../orm-adapter'\nimport type { IterationQueryOptions, QueryOptions } from '../../query-options'\nimport type { AnySchema } from '../../schema'\nimport { IncOp, MaxOp, MinOp, MulOp, PatchOp, PullOp, PushOp, SetOp, UnsetOp, type AnyUpdateOp } from '../../updates'\n\nconst inMemoryConnectionPipe = () => v.object({})\n\nexport type InMemoryRepoConfig = {\n\ttable: string\n\tprefix?: string\n}\n\ntype MigrationRecord = { id: string; appliedAt: number }\ntype TableMeta = { pk: { name: string; type: string }; fields: Map<string, AnyFieldSpec> }\ntype IndexMeta = { table: string; on: readonly string[]; unique: boolean }\ntype ForeignKeyMeta = { table: string; on: string; references: { table: string; column: string }; onDelete?: ForeignKeyAction; onUpdate?: ForeignKeyAction }\n\ntype Snapshot = {\n\tstores: Map<string, Map<string, Record<string, unknown>>>\n\tmigrations: Map<string, MigrationRecord>\n\tindexes: Map<string, IndexMeta>\n\ttables: Map<string, TableMeta>\n\tforeignKeys: Map<string, ForeignKeyMeta>\n}\n\nfunction clone<T>(value: T): T {\n\treturn structuredClone(value)\n}\n\nconst replaceMap = <K, V>(target: Map<K, V>, source: Map<K, V>) => {\n\ttarget.clear()\n\tfor (const [k, val] of source.entries()) target.set(k, val)\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction containsSubset(source: unknown, needle: unknown): boolean {\n\tif (Array.isArray(source)) {\n\t\tconst wanted = Array.isArray(needle) ? needle : [needle]\n\t\treturn wanted.every((item) => source.some((existing) => differ.equal(existing, item)))\n\t}\n\n\tif (isPlainObject(source) && isPlainObject(needle)) {\n\t\treturn Object.entries(needle).every(([k, v]) => containsSubset(source[k], v))\n\t}\n\n\treturn differ.equal(source, needle)\n}\n\nfunction compareValues(a: unknown, b: unknown): number {\n\tif (a === b) return 0\n\tif (a == null) return -1\n\tif (b == null) return 1\n\tif (typeof a === 'number' && typeof b === 'number') return a < b ? -1 : 1\n\tif (typeof a === 'string' && typeof b === 'string') return a < b ? -1 : 1\n\tif (typeof a === 'boolean' && typeof b === 'boolean') return a === false ? -1 : 1\n\tconst sa = JSON.stringify(a)\n\tconst sb = JSON.stringify(b)\n\tif (sa === sb) return 0\n\treturn sa < sb ? -1 : 1\n}\n\nfunction resolveConfigName(_: AnySchema, config: InMemoryRepoConfig): string {\n\treturn `${config.prefix ?? ''}${config.table}`\n}\n\nfunction evaluateFilter(doc: Record<string, unknown>, filter: Filter): boolean {\n\tconst fieldValue = doc[filter.field]\n\tconst value = filter.value\n\n\tswitch (filter.op) {\n\t\tcase 'eq':\n\t\t\treturn differ.equal(fieldValue, value)\n\t\tcase 'ne':\n\t\t\treturn !differ.equal(fieldValue, value)\n\t\tcase 'gt':\n\t\t\treturn compareValues(fieldValue, value) > 0\n\t\tcase 'gte':\n\t\t\treturn compareValues(fieldValue, value) >= 0\n\t\tcase 'lt':\n\t\t\treturn compareValues(fieldValue, value) < 0\n\t\tcase 'lte':\n\t\t\treturn compareValues(fieldValue, value) <= 0\n\t\tcase 'in': {\n\t\t\tif (!Array.isArray(value)) return false\n\t\t\treturn value.some((v) => differ.equal(fieldValue, v))\n\t\t}\n\t\tcase 'notIn': {\n\t\t\tif (!Array.isArray(value)) return true\n\t\t\treturn !value.some((v) => differ.equal(fieldValue, v))\n\t\t}\n\t\tcase 'like':\n\t\t\treturn String(fieldValue ?? '')\n\t\t\t\t.toLowerCase()\n\t\t\t\t.includes(String(value ?? '').toLowerCase())\n\t\tcase 'exists':\n\t\t\treturn fieldValue != null\n\t\tcase 'notExists':\n\t\t\treturn fieldValue == null\n\t\tcase 'contains':\n\t\t\treturn containsSubset(fieldValue, value)\n\t\tcase 'notContains':\n\t\t\treturn !containsSubset(fieldValue, value)\n\t\tdefault:\n\t\t\treturn false\n\t}\n}\n\nfunction evaluateChild(doc: Record<string, unknown>, child: FilterChild): boolean {\n\tif (child instanceof Filter) return evaluateFilter(doc, child)\n\tif (child instanceof FilterGroup) {\n\t\tif (child.op === 'and') return child.children.every((c) => evaluateChild(doc, c))\n\t\tif (child.op === 'or') return child.children.some((c) => evaluateChild(doc, c))\n\t}\n\treturn true\n}\n\nfunction matchesFilter(doc: Record<string, unknown>, group: FilterGroup): boolean {\n\tfor (const clause of group.children) {\n\t\tif (!evaluateChild(doc, clause)) return false\n\t}\n\treturn true\n}\n\nfunction applyOptions(rows: Record<string, unknown>[], options?: QueryOptions): Record<string, unknown>[] {\n\tlet results = rows\n\n\tif (options?.orderBy?.length) {\n\t\tresults = [...results].sort((a, b) => {\n\t\t\tfor (const ord of options.orderBy ?? []) {\n\t\t\t\tconst cmp = compareValues(a[ord.field], b[ord.field])\n\t\t\t\tif (cmp !== 0) return ord.direction === 'asc' ? cmp : -cmp\n\t\t\t}\n\t\t\treturn 0\n\t\t})\n\t}\n\n\tif (options?.offset != null) {\n\t\tresults = results.slice(Math.max(0, options.offset))\n\t}\n\n\tif (options?.limit != null) {\n\t\tresults = results.slice(0, options.limit)\n\t}\n\n\tif (options?.select?.length) {\n\t\tconst fields = new Set<string>(options.select)\n\t\tresults = results.map((row) => {\n\t\t\tconst out: Record<string, unknown> = {}\n\t\t\tfor (const key of fields) out[key] = row[key]\n\t\t\treturn out\n\t\t})\n\t}\n\n\treturn results\n}\n\nfunction applyUpdateOp(current: Record<string, unknown>, key: string, value: unknown) {\n\tif (value instanceof IncOp) {\n\t\tconst base = Number(current[key] ?? 0)\n\t\tcurrent[key] = base + value.value\n\t\treturn\n\t}\n\tif (value instanceof MulOp) {\n\t\tconst base = Number(current[key] ?? 0)\n\t\tcurrent[key] = base * value.value\n\t\treturn\n\t}\n\tif (value instanceof MinOp) {\n\t\tconst base = current[key]\n\t\tcurrent[key] = base == null || compareValues(value.value, base) < 0 ? value.value : base\n\t\treturn\n\t}\n\tif (value instanceof MaxOp) {\n\t\tconst base = current[key]\n\t\tcurrent[key] = base == null || compareValues(value.value, base) > 0 ? value.value : base\n\t\treturn\n\t}\n\tif (value instanceof UnsetOp) {\n\t\tcurrent[key] = null\n\t\treturn\n\t}\n\tif (value instanceof PushOp) {\n\t\tconst arr = Array.isArray(current[key]) ? [...(current[key] as unknown[])] : []\n\t\tarr.push(clone(value.value))\n\t\tcurrent[key] = arr\n\t\treturn\n\t}\n\tif (value instanceof PullOp) {\n\t\tconst arr = Array.isArray(current[key]) ? (current[key] as unknown[]) : []\n\t\tcurrent[key] = arr.filter((entry) => !differ.equal(entry, value.value))\n\t\treturn\n\t}\n\tif (value instanceof PatchOp) {\n\t\tconst target = isPlainObject(current[key]) ? clone(current[key] as Record<string, unknown>) : {}\n\t\tif (isPlainObject(value.value)) {\n\t\t\tfor (const [k, v] of Object.entries(value.value as Record<string, unknown>)) {\n\t\t\t\ttarget[k] = clone(v)\n\t\t\t}\n\t\t}\n\t\tcurrent[key] = target\n\t\treturn\n\t}\n\tcurrent[key] = clone(value)\n}\n\nfunction applyUpdateData(doc: Record<string, unknown>, data: Record<string, unknown>): Record<string, unknown> {\n\tconst updated = clone(doc)\n\tfor (const [key, value] of Object.entries(data)) {\n\t\tapplyUpdateOp(updated, key, value)\n\t}\n\treturn updated\n}\n\nfunction applyOps(doc: Record<string, unknown>, ops: AnyUpdateOp[]): Record<string, unknown> {\n\tconst updated = clone(doc)\n\tfor (const op of ops) {\n\t\tif (op instanceof SetOp) {\n\t\t\tfor (const [key, value] of Object.entries(op.values)) {\n\t\t\t\tupdated[key] = clone(value)\n\t\t\t}\n\t\t} else {\n\t\t\tapplyUpdateOp(updated, op.field, op)\n\t\t}\n\t}\n\treturn updated\n}\n\nconst sessionActiveStore = new AsyncLocalStorage<boolean>()\n\nexport class InMemoryAdapter extends configurable(inMemoryConnectionPipe, OrmAdapter) {\n\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\n\treadonly supportedFieldTypes = ['string', 'number', 'boolean', 'null', 'object', 'array', 'date'] as const\n\treadonly queryableOps = ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'notIn', 'like', 'exists', 'notExists', 'contains', 'notContains'] 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 stores = new Map<string, Map<string, Record<string, unknown>>>()\n\treadonly migrations = new Map<string, MigrationRecord>()\n\treadonly indexes = new Map<string, IndexMeta>()\n\treadonly tables = new Map<string, TableMeta>()\n\treadonly foreignKeys = new Map<string, ForeignKeyMeta>()\n\n\t#migrationLock: Promise<void> = Promise.resolve()\n\n\tprotected constructor(config: typeof InMemoryAdapter.Config) {\n\t\tsuper(config)\n\t}\n\n\t#getStore(name: string) {\n\t\tif (!this.stores.has(name)) this.stores.set(name, new Map())\n\t\treturn this.stores.get(name)!\n\t}\n\n\t#resolveStore(schema: AnySchema, config: unknown) {\n\t\treturn this.#getStore(resolveConfigName(schema, config as InMemoryRepoConfig))\n\t}\n\n\t#snapshot(): Snapshot {\n\t\tconst stores = new Map<string, Map<string, Record<string, unknown>>>()\n\t\tfor (const [name, store] of this.stores.entries()) {\n\t\t\tconst storeCopy = new Map<string, Record<string, unknown>>()\n\t\t\tfor (const [id, doc] of store.entries()) {\n\t\t\t\tstoreCopy.set(id, clone(doc))\n\t\t\t}\n\t\t\tstores.set(name, storeCopy)\n\t\t}\n\t\tconst migrations = new Map(this.migrations)\n\t\tconst indexes = new Map(this.indexes)\n\t\tconst tables = new Map<string, TableMeta>()\n\t\tfor (const [name, meta] of this.tables.entries()) {\n\t\t\ttables.set(name, { pk: { ...meta.pk }, fields: new Map(meta.fields) })\n\t\t}\n\t\tconst foreignKeys = new Map(this.foreignKeys)\n\t\treturn { stores, migrations, indexes, tables, foreignKeys }\n\t}\n\n\t#restore(snap: Snapshot) {\n\t\treplaceMap(this.stores, snap.stores)\n\t\treplaceMap(this.migrations, snap.migrations)\n\t\treplaceMap(this.indexes, snap.indexes)\n\t\treplaceMap(this.tables, snap.tables)\n\t\treplaceMap(this.foreignKeys, snap.foreignKeys)\n\t}\n\n\tasync findByPk(schema: AnySchema, config: unknown, pk: unknown) {\n\t\tconst store = this.#resolveStore(schema, config)\n\t\tconst doc = store.get(String(pk))\n\t\treturn doc ? clone(doc) : null\n\t}\n\n\tasync createMany(schema: AnySchema, config: unknown, data: Record<string, unknown>[]) {\n\t\tconst pk = schema.pkField.name\n\t\tconst store = this.#resolveStore(schema, config)\n\t\treturn data.map((d) => {\n\t\t\tconst row = clone(d)\n\t\t\tstore.set(String(row[pk]), row)\n\t\t\treturn clone(row)\n\t\t})\n\t}\n\n\tasync deleteByPk(schema: AnySchema, config: unknown, pk: unknown) {\n\t\tconst store = this.#resolveStore(schema, config)\n\t\tconst pkStr = String(pk)\n\t\tconst doc = store.get(pkStr)\n\t\tif (!doc) return null\n\t\tstore.delete(pkStr)\n\t\treturn clone(doc)\n\t}\n\n\tasync updateByPk(schema: AnySchema, config: unknown, pk: unknown, ops: AnyUpdateOp[]) {\n\t\tconst store = this.#resolveStore(schema, config)\n\t\tconst pkStr = String(pk)\n\t\tconst doc = store.get(pkStr)\n\t\tif (!doc) return null\n\t\tconst updated = applyOps(doc, ops)\n\t\tstore.set(pkStr, updated)\n\t\treturn clone(updated)\n\t}\n\n\tasync findMany(schema: AnySchema, config: unknown, group: FilterGroup, options?: QueryOptions) {\n\t\tconst store = this.#resolveStore(schema, config)\n\t\tconst rows = [...store.values()].filter((doc) => matchesFilter(doc, group)).map((doc) => clone(doc))\n\t\treturn applyOptions(rows, options)\n\t}\n\n\tasync count(schema: AnySchema, config: unknown, group: FilterGroup) {\n\t\tconst store = this.#resolveStore(schema, config)\n\t\treturn [...store.values()].filter((doc) => matchesFilter(doc, group)).length\n\t}\n\n\tasync *iterateMany(schema: AnySchema, config: unknown, group: FilterGroup, options?: IterationQueryOptions) {\n\t\tconst store = this.#resolveStore(schema, config)\n\t\tconst rows = applyOptions([...store.values()].filter((doc) => matchesFilter(doc, group)).map((doc) => clone(doc)), options)\n\t\tconst batchSize = typeof options?.batchSize === 'number' && Number.isSafeInteger(options.batchSize) && options.batchSize > 0 ? options.batchSize : 1\n\t\tfor (let start = 0; start < rows.length; start += batchSize) {\n\t\t\tfor (const row of rows.slice(start, start + batchSize)) {\n\t\t\t\tyield row\n\t\t\t}\n\t\t}\n\t}\n\n\tasync updateMany(schema: AnySchema, config: unknown, group: FilterGroup, data: Record<string, unknown>) {\n\t\tconst store = this.#resolveStore(schema, config)\n\t\tconst ids = [...store.entries()].filter(([, doc]) => matchesFilter(doc, group)).map(([id]) => id)\n\n\t\tconst updated: Record<string, unknown>[] = []\n\t\tfor (const id of ids) {\n\t\t\tconst current = store.get(id)\n\t\t\tif (!current) continue\n\t\t\tconst next = applyUpdateData(current, data)\n\t\t\tstore.set(id, next)\n\t\t\tupdated.push(clone(next))\n\t\t}\n\t\treturn updated\n\t}\n\n\tasync deleteMany(schema: AnySchema, config: unknown, filter: FilterGroup) {\n\t\tconst store = this.#resolveStore(schema, config)\n\t\tconst pk = schema.pkField.name\n\t\tconst rows = [...store.values()].filter((doc) => matchesFilter(doc, filter)).map((doc) => clone(doc))\n\t\tfor (const row of rows) store.delete(String(row[pk]))\n\t\treturn rows\n\t}\n\n\tasync upsertOne(schema: AnySchema, config: unknown, filter: FilterGroup, create: Record<string, unknown>, ops: AnyUpdateOp[]) {\n\t\tconst store = this.#resolveStore(schema, config)\n\t\tconst pk = schema.pkField.name\n\t\tconst rows = [...store.values()].filter((doc) => matchesFilter(doc, filter))\n\t\tconst current = rows[0]\n\t\tif (current) {\n\t\t\tconst next = ops.length > 0 ? applyOps(current, ops) : clone(current)\n\t\t\tstore.set(String(next[pk]), next)\n\t\t\treturn clone(next)\n\t\t}\n\t\tconst base = clone(create)\n\t\tconst result = ops.length > 0 ? applyOps(base, ops) : base\n\t\tstore.set(String(result[pk]), result)\n\t\treturn clone(result)\n\t}\n\n\tasync aggregate(schema: AnySchema, config: unknown, spec: AggregateSpec): Promise<Array<Record<string, unknown>>> {\n\t\tconst store = this.#resolveStore(schema, config)\n\t\tlet rows = [...store.values()]\n\t\tif (spec.where) {\n\t\t\tconst where = spec.where\n\t\t\trows = rows.filter((doc) => matchesFilter(doc, where))\n\t\t}\n\n\t\tconst groups = new Map<string, Record<string, unknown>[]>()\n\t\tif (spec.groupBy.length > 0) {\n\t\t\tfor (const row of rows) {\n\t\t\t\tconst key = JSON.stringify(spec.groupBy.map((f) => row[f]))\n\t\t\t\tif (!groups.has(key)) groups.set(key, [])\n\t\t\t\tgroups.get(key)!.push(row)\n\t\t\t}\n\t\t} else {\n\t\t\tgroups.set('__all__', rows)\n\t\t}\n\n\t\tconst results: Record<string, unknown>[] = []\n\t\tfor (const [, groupRows] of groups) {\n\t\t\tconst result: Record<string, unknown> = {}\n\t\t\tif (spec.groupBy.length > 0) {\n\t\t\t\tfor (const field of spec.groupBy) {\n\t\t\t\t\tresult[field] = groupRows[0][field]\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const agg of spec.aggregates) {\n\t\t\t\tswitch (agg.fn) {\n\t\t\t\t\tcase 'count':\n\t\t\t\t\t\tresult[agg.alias] = groupRows.length\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'countDistinct': {\n\t\t\t\t\t\tconst vals = new Set(groupRows.map((r) => JSON.stringify(r[agg.field!])))\n\t\t\t\t\t\tresult[agg.alias] = vals.size\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase 'sum':\n\t\t\t\t\t\tresult[agg.alias] = groupRows.reduce((acc, r) => acc + Number(r[agg.field!] ?? 0), 0)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'avg': {\n\t\t\t\t\t\tconst sum = groupRows.reduce((acc, r) => acc + Number(r[agg.field!] ?? 0), 0)\n\t\t\t\t\t\tresult[agg.alias] = groupRows.length > 0 ? sum / groupRows.length : 0\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase 'min': {\n\t\t\t\t\t\tlet minVal: unknown = null\n\t\t\t\t\t\tfor (const r of groupRows) {\n\t\t\t\t\t\t\tconst val = r[agg.field!]\n\t\t\t\t\t\t\tif (val != null && (minVal === null || compareValues(val, minVal) < 0)) minVal = val\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult[agg.alias] = minVal\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase 'max': {\n\t\t\t\t\t\tlet maxVal: unknown = null\n\t\t\t\t\t\tfor (const r of groupRows) {\n\t\t\t\t\t\t\tconst val = r[agg.field!]\n\t\t\t\t\t\t\tif (val != null && (maxVal === null || compareValues(val, maxVal) > 0)) maxVal = val\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult[agg.alias] = maxVal\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tresults.push(result)\n\t\t}\n\n\t\tif (spec.having) {\n\t\t\tconst having = spec.having\n\t\t\treturn results.filter((r) => matchesFilter(r, having))\n\t\t}\n\t\treturn results\n\t}\n\n\tasync loadMigrations(): Promise<{ id: string; appliedAt: number }[]> {\n\t\treturn [...this.migrations.values()].map((m) => ({ id: m.id, appliedAt: m.appliedAt }))\n\t}\n\n\tasync recordMigration(id: string, appliedAt: number): Promise<void> {\n\t\tthis.migrations.set(id, { id, appliedAt })\n\t}\n\n\tasync applyCreateTable(change: CreateTableChange<any>): Promise<void> {\n\t\tconst fields = new Map<string, AnyFieldSpec>()\n\t\tfor (const f of change.fields) {\n\t\t\tfields.set(f.name, { ...f })\n\t\t}\n\t\tthis.tables.set(change.name, { pk: { name: change.pk.name, type: change.pk.type }, fields })\n\t}\n\n\tasync applyDropTable(change: DropTableChange): Promise<void> {\n\t\tthis.tables.delete(change.name)\n\t}\n\n\tasync applyAddField(change: AddFieldChange<any>): Promise<void> {\n\t\tconst table = this.tables.get(change.table)\n\t\tif (table) {\n\t\t\ttable.fields.set(change.field.name, { ...change.field })\n\t\t}\n\t}\n\n\tasync applyDropField(change: DropFieldChange): Promise<void> {\n\t\tconst table = this.tables.get(change.table)\n\t\tif (table) {\n\t\t\ttable.fields.delete(change.name)\n\t\t}\n\t}\n\n\tasync applyModifyField(change: ModifyFieldChange<any>): Promise<void> {\n\t\tconst table = this.tables.get(change.table)\n\t\tif (table) {\n\t\t\ttable.fields.delete(change.name)\n\t\t\ttable.fields.set(change.to.name, { ...change.to })\n\t\t}\n\t}\n\n\tasync applyRenameTable(change: RenameTableChange): Promise<void> {\n\t\tconst table = this.tables.get(change.from)\n\t\tif (table) {\n\t\t\tthis.tables.delete(change.from)\n\t\t\tthis.tables.set(change.to, table)\n\t\t}\n\t}\n\n\tasync applyRenameField(change: RenameFieldChange): Promise<void> {\n\t\tconst table = this.tables.get(change.table)\n\t\tif (table) {\n\t\t\tconst field = table.fields.get(change.from)\n\t\t\tif (field) {\n\t\t\t\ttable.fields.delete(change.from)\n\t\t\t\ttable.fields.set(change.to, { ...field, name: change.to })\n\t\t\t}\n\t\t}\n\t}\n\n\tasync applyAddIndex(change: AddIndexChange): Promise<void> {\n\t\tconst indexName = change.name ?? `${change.table}_${change.on.join('_')}_idx`\n\t\tthis.indexes.set(indexName, { table: change.table, on: change.on, unique: change.unique ?? false })\n\t}\n\n\tasync applyDropIndex(change: DropIndexChange): Promise<void> {\n\t\tthis.indexes.delete(change.name)\n\t}\n\n\tasync applyAddForeignKey(change: AddForeignKeyChange): Promise<void> {\n\t\tconst fkName = change.name ?? `${change.table}_${change.on}_fk`\n\t\tthis.foreignKeys.set(fkName, {\n\t\t\ttable: change.table,\n\t\t\ton: change.on,\n\t\t\treferences: { table: change.references.table, column: change.references.column },\n\t\t\tonDelete: change.onDelete as ForeignKeyAction | undefined,\n\t\t\tonUpdate: change.onUpdate as ForeignKeyAction | undefined,\n\t\t})\n\t}\n\n\tasync applyDropForeignKey(change: DropForeignKeyChange): Promise<void> {\n\t\tthis.foreignKeys.delete(change.name)\n\t}\n\n\tasync introspect(): Promise<DiscoveredSchema[]> {\n\t\tconst schemas: DiscoveredSchema[] = []\n\t\tfor (const [name, meta] of this.tables.entries()) {\n\t\t\tconst fields = [...meta.fields.values()].map((f) => ({\n\t\t\t\tname: f.name,\n\t\t\t\ttype: f.type as FieldTypeName,\n\t\t\t\tnullable: f.nullable ?? false,\n\t\t\t\t...(f.default !== undefined ? { default: f.default } : {}),\n\t\t\t\t...(f.unique ? { unique: true } : {}),\n\t\t\t}))\n\t\t\tconst indexes = [...this.indexes.entries()]\n\t\t\t\t.filter(([, idx]) => idx.table === name)\n\t\t\t\t.map(([idxName, idx]) => ({ name: idxName, on: idx.on, unique: idx.unique }))\n\t\t\tconst foreignKeys = [...this.foreignKeys.entries()]\n\t\t\t\t.filter(([, fk]) => fk.table === name)\n\t\t\t\t.map(([fkName, fk]) => ({\n\t\t\t\t\tname: fkName,\n\t\t\t\t\ton: fk.on,\n\t\t\t\t\treferences: { table: fk.references.table, column: fk.references.column },\n\t\t\t\t\t...(fk.onDelete ? { onDelete: fk.onDelete } : {}),\n\t\t\t\t\t...(fk.onUpdate ? { onUpdate: fk.onUpdate } : {}),\n\t\t\t\t}))\n\t\t\tschemas.push({\n\t\t\t\tname,\n\t\t\t\tpk: { name: meta.pk.name, type: meta.pk.type as FieldTypeName },\n\t\t\t\tfields,\n\t\t\t\tindexes,\n\t\t\t\tforeignKeys,\n\t\t\t})\n\t\t}\n\t\treturn schemas\n\t}\n\n\tasync acquireMigrationLock<T>(fn: () => Promise<T>): Promise<T> {\n\t\tlet release!: () => void\n\t\tconst next = new Promise<void>((r) => { release = r })\n\t\tconst prev = this.#migrationLock\n\t\tthis.#migrationLock = next\n\t\tawait prev\n\t\ttry {\n\t\t\treturn await fn()\n\t\t} finally {\n\t\t\trelease()\n\t\t}\n\t}\n\n\tasync session<T>(fn: () => Promise<T>): Promise<T> {\n\t\tif (sessionActiveStore.getStore()) return fn()\n\t\tconst snap = this.#snapshot()\n\t\ttry {\n\t\t\treturn await sessionActiveStore.run(true, fn)\n\t\t} catch (error) {\n\t\t\tthis.#restore(snap)\n\t\t\tthrow error\n\t\t}\n\t}\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 { Schema } = await import('../../schema')\n\tconst { IncOp, PatchOp, PullOp, PushOp } = await import('../../updates')\n\n\tconst { v } = await import('valleyed')\n\n\tdescribe('in-memory adapter', () => {\n\t\ttest('InMemoryAdapter.create({}) produces a working adapter', () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\texpect(adapter).toBeInstanceOf(InMemoryAdapter)\n\t\t\texpect(adapter.schemaConfigPipe).toBeDefined()\n\t\t\texpect(adapter.supportedFieldTypes).toEqual(['string', 'number', 'boolean', 'null', 'object', 'array', 'date'])\n\t\t})\n\n\t\ttest('supports nested filters, ordering, select, offset and limit', async () => {\n\t\t\tconst schema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'u')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.field('age', v.number())\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst use = adapter.use(schema, { table: 'users' })\n\t\t\tawait use.createMany([\n\t\t\t\t{ id: 'u1', name: 'Alice', age: 30 },\n\t\t\t\t{ id: 'u2', name: 'Bob', age: 20 },\n\t\t\t\t{ id: 'u3', name: 'Carol', age: 40 },\n\t\t\t])\n\t\t\tconst builtGroup = FilterGroup.create().and([\n\t\t\t\t(q) => q.gt('age', 19),\n\t\t\t\t(q) => q.or([(g) => g.eq('name', 'Alice'), (g) => g.eq('name', 'Carol')]),\n\t\t\t])\n\t\t\tconst options = { orderBy: [new OrderBy('age', 'desc')], offset: 1, limit: 1, select: ['id', 'name'] }\n\t\t\tconst rows = await use.findMany(builtGroup, options)\n\t\t\texpect(rows).toEqual([{ id: 'u1', name: 'Alice' }])\n\t\t})\n\n\t\ttest('count returns the number of matching rows without query options', async () => {\n\t\t\tconst schema = Schema.from('count_users')\n\t\t\t\t.pk('id', v.string(), () => 'u')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst use = adapter.use(schema, { table: 'count_users' })\n\t\t\tawait use.createMany([\n\t\t\t\t{ id: 'u1', name: 'Alice' },\n\t\t\t\t{ id: 'u2', name: 'Bob' },\n\t\t\t\t{ id: 'u3', name: 'Alice' },\n\t\t\t])\n\n\t\t\tawait expect(use.count(FilterGroup.create().eq('name', 'Alice'))).resolves.toBe(2)\n\t\t})\n\n\t\ttest('iterateMany with batchSize matches findMany filtering ordering offset limit and selection', async () => {\n\t\t\tconst schema = Schema.from('iter_users')\n\t\t\t\t.pk('id', v.string(), () => 'u')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.field('age', v.number())\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst use = adapter.use(schema, { table: 'iter_users' })\n\t\t\tawait use.createMany([\n\t\t\t\t{ id: 'u1', name: 'Alice', age: 30 },\n\t\t\t\t{ id: 'u2', name: 'Bob', age: 20 },\n\t\t\t\t{ id: 'u3', name: 'Carol', age: 40 },\n\t\t\t\t{ id: 'u4', name: 'Dan', age: 50 },\n\t\t\t])\n\n\t\t\tconst filter = FilterGroup.create().gt('age', 19)\n\t\t\tconst options = {\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\tselect: ['id', 'name'],\n\t\t\t}\n\t\t\tconst expected = await use.findMany(filter, options)\n\t\t\tconst rows: Record<string, unknown>[] = []\n\t\t\tfor await (const row of use.iterateMany(filter, { ...options, batchSize: 2 })) {\n\t\t\t\trows.push(row)\n\t\t\t}\n\n\t\t\texpect(rows).toEqual(expected)\n\t\t\texpect(rows).toEqual([\n\t\t\t\t{ id: 'u3', name: 'Carol' },\n\t\t\t\t{ id: 'u1', name: 'Alice' },\n\t\t\t])\n\t\t})\n\n\t\ttest('supports update operators and rollback on failed session', async () => {\n\t\t\tconst schema = Schema.from('docs')\n\t\t\t\t.pk('id', v.string(), () => 'd1')\n\t\t\t\t.field('count', v.number())\n\t\t\t\t.field('tags', v.array(v.string()))\n\t\t\t\t.field('meta', v.object({ a: v.number() }))\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst use = adapter.use(schema, { table: 'docs' })\n\t\t\tawait use.createOne({ id: 'd1', count: 1, tags: ['x'], meta: { a: 1 } })\n\n\t\t\tawait adapter.session(async () => {\n\t\t\t\tawait use.updateOne(FilterGroup.create().eq('id', 'd1'), {\n\t\t\t\t\tcount: new IncOp('count', 2),\n\t\t\t\t\ttags: new PushOp('tags', 'y'),\n\t\t\t\t\tmeta: new PatchOp('meta', { a: 9 }),\n\t\t\t\t})\n\t\t\t})\n\n\t\t\tawait expect(\n\t\t\t\tadapter.session(async () => {\n\t\t\t\t\tawait use.updateOne(FilterGroup.create().eq('id', 'd1'), { tags: new PullOp('tags', 'x') })\n\t\t\t\t\tthrow new Error('boom')\n\t\t\t\t}),\n\t\t\t).rejects.toThrow('boom')\n\n\t\t\tconst row = await use.findOne(FilterGroup.create().eq('id', 'd1'))\n\t\t\texpect(row).toEqual({ id: 'd1', count: 3, tags: ['x', 'y'], meta: { a: 9 } })\n\t\t})\n\n\t\ttest('notIn filter excludes matching values', async () => {\n\t\t\tconst schema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'u')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst use = adapter.use(schema, { table: 'users' })\n\t\t\tawait use.createMany([\n\t\t\t\t{ id: 'u1', name: 'Alice' },\n\t\t\t\t{ id: 'u2', name: 'Bob' },\n\t\t\t\t{ id: 'u3', name: 'Carol' },\n\t\t\t])\n\t\t\tconst rows = await use.findMany(FilterGroup.create().notIn('name', ['Alice', 'Carol']))\n\t\t\texpect(rows).toHaveLength(1)\n\t\t\texpect(rows[0].name).toBe('Bob')\n\t\t})\n\n\t\ttest('exists / notExists filter ops work correctly', async () => {\n\t\t\tconst schema = Schema.from('items')\n\t\t\t\t.pk('id', v.string(), () => 'i')\n\t\t\t\t.field('val', v.optional(v.string()), { onCreate: () => undefined })\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst use = adapter.use(schema, { table: 'items' })\n\t\t\tawait use.createMany([\n\t\t\t\t{ id: 'i1', val: 'present' },\n\t\t\t\t{ id: 'i2', val: null },\n\t\t\t\t{ id: 'i3', val: undefined },\n\t\t\t])\n\t\t\tconst existsRows = await use.findMany(FilterGroup.create().exists('val'))\n\t\t\texpect(existsRows).toHaveLength(1)\n\t\t\texpect(existsRows[0].id).toBe('i1')\n\n\t\t\tconst notExistsRows = await use.findMany(FilterGroup.create().notExists('val'))\n\t\t\texpect(notExistsRows).toHaveLength(2)\n\t\t})\n\n\t\ttest('findByPk returns seeded document and null for missing', async () => {\n\t\t\tconst schema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'gen')\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\n\t\t\tconst use = adapter.use(schema, { table: 'test' })\n\t\t\tawait use.createOne({ id: 'x' })\n\n\t\t\tconst found = await adapter.findByPk(schema, { table: 'test' }, 'x')\n\t\t\texpect(found).toEqual({ id: 'x' })\n\n\t\t\tconst missing = await adapter.findByPk(schema, { table: 'test' }, 'missing')\n\t\t\texpect(missing).toBeNull()\n\t\t})\n\n\t\ttest('auto-wired Instance hooks register correctly keyed by class', async () => {\n\t\t\tconst { Instance: Inst } = await import('../../../instance')\n\t\t\tconst onSpy = (await import('vitest')).vi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tInMemoryAdapter.create({})\n\n\t\t\texpect(onSpy).not.toHaveBeenCalled()\n\n\t\t\tonSpy.mockRestore()\n\t\t})\n\n\t\ttest('declares aggregateOps with all six canonical ops', () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\texpect(adapter.aggregateOps).toEqual(['count', 'countDistinct', 'sum', 'avg', 'min', 'max'])\n\t\t})\n\n\t\ttest('aggregate count returns correct total', async () => {\n\t\t\tconst schema = Schema.from('items')\n\t\t\t\t.pk('id', v.string(), () => `i-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t\t.field('category', v.string())\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst use = adapter.use(schema, { table: 'items' })\n\t\t\tawait use.createMany([\n\t\t\t\t{ id: 'i1', category: 'A' },\n\t\t\t\t{ id: 'i2', category: 'B' },\n\t\t\t\t{ id: 'i3', category: 'A' },\n\t\t\t])\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'items' }, {\n\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\tgroupBy: [],\n\t\t\t})\n\t\t\texpect(result).toEqual([{ total: 3 }])\n\t\t})\n\n\t\ttest('aggregate count with where filter', async () => {\n\t\t\tconst schema = Schema.from('items')\n\t\t\t\t.pk('id', v.string(), () => `i-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t\t.field('category', v.string())\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst use = adapter.use(schema, { table: 'items' })\n\t\t\tawait use.createMany([\n\t\t\t\t{ id: 'i1', category: 'A' },\n\t\t\t\t{ id: 'i2', category: 'B' },\n\t\t\t\t{ id: 'i3', category: 'A' },\n\t\t\t])\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'items' }, {\n\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\tgroupBy: [],\n\t\t\t\twhere: FilterGroup.create().eq('category', 'A'),\n\t\t\t})\n\t\t\texpect(result).toEqual([{ total: 2 }])\n\t\t})\n\n\t\ttest('aggregate count on empty store returns zero', async () => {\n\t\t\tconst schema = Schema.from('items')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'items' }, {\n\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\tgroupBy: [],\n\t\t\t})\n\t\t\texpect(result).toEqual([{ total: 0 }])\n\t\t})\n\n\t\ttest('aggregate sum/avg/min/max compute correctly', async () => {\n\t\t\tconst schema = Schema.from('items')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('price', v.number())\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst use = adapter.use(schema, { table: 'items' })\n\t\t\tawait use.createMany([\n\t\t\t\t{ id: 'i1', price: 10 },\n\t\t\t\t{ id: 'i2', price: 20 },\n\t\t\t\t{ id: 'i3', price: 30 },\n\t\t\t])\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'items' }, {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'sum', field: 'price', alias: 'total' },\n\t\t\t\t\t{ fn: 'avg', field: 'price', alias: 'avg' },\n\t\t\t\t\t{ fn: 'min', field: 'price', alias: 'low' },\n\t\t\t\t\t{ fn: 'max', field: 'price', alias: 'high' },\n\t\t\t\t],\n\t\t\t\tgroupBy: [],\n\t\t\t})\n\t\t\texpect(result).toEqual([{ total: 60, avg: 20, low: 10, high: 30 }])\n\t\t})\n\n\t\ttest('aggregate countDistinct counts unique values', async () => {\n\t\t\tconst schema = Schema.from('items')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('category', v.string())\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst use = adapter.use(schema, { table: 'items' })\n\t\t\tawait use.createMany([\n\t\t\t\t{ id: 'i1', category: 'A' },\n\t\t\t\t{ id: 'i2', category: 'B' },\n\t\t\t\t{ id: 'i3', category: 'A' },\n\t\t\t])\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'items' }, {\n\t\t\t\taggregates: [{ fn: 'countDistinct', field: 'category', alias: 'unique' }],\n\t\t\t\tgroupBy: [],\n\t\t\t})\n\t\t\texpect(result).toEqual([{ unique: 2 }])\n\t\t})\n\n\t\ttest('aggregate groupBy produces per-group results', async () => {\n\t\t\tconst schema = Schema.from('orders')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('region', v.string())\n\t\t\t\t.field('amount', v.number())\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst use = adapter.use(schema, { table: 'orders' })\n\t\t\tawait use.createMany([\n\t\t\t\t{ id: 'o1', region: 'US', amount: 10 },\n\t\t\t\t{ id: 'o2', region: 'EU', amount: 20 },\n\t\t\t\t{ id: 'o3', region: 'US', amount: 30 },\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: 'total' },\n\t\t\t\t],\n\t\t\t\tgroupBy: ['region'],\n\t\t\t})\n\t\t\texpect(result).toHaveLength(2)\n\t\t\tconst us = result.find((r) => r.region === 'US')\n\t\t\tconst eu = result.find((r) => r.region === 'EU')\n\t\t\texpect(us).toEqual({ region: 'US', cnt: 2, total: 40 })\n\t\t\texpect(eu).toEqual({ region: 'EU', cnt: 1, total: 20 })\n\t\t})\n\n\t\ttest('aggregate having filters post-aggregation', async () => {\n\t\t\tconst schema = Schema.from('orders')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('region', v.string())\n\t\t\t\t.field('amount', v.number())\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst use = adapter.use(schema, { table: 'orders' })\n\t\t\tawait use.createMany([\n\t\t\t\t{ id: 'o1', region: 'US', amount: 10 },\n\t\t\t\t{ id: 'o2', region: 'EU', amount: 20 },\n\t\t\t\t{ id: 'o3', region: 'US', amount: 30 },\n\t\t\t])\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'orders' }, {\n\t\t\t\taggregates: [{ fn: 'sum', field: 'amount', alias: 'total' }],\n\t\t\t\tgroupBy: ['region'],\n\t\t\t\thaving: FilterGroup.create().gt('total', 25),\n\t\t\t})\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0]).toEqual({ region: 'US', total: 40 })\n\t\t})\n\t})\n}\n"],"mappings":"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","names":["v","FilterGroup","IncOp","PatchOp","PullOp","PushOp"]}