@fragno-dev/db 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +41 -39
- package/CHANGELOG.md +19 -0
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +1 -1
- package/dist/adapters/drizzle/drizzle-query.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-query.js +42 -34
- package/dist/adapters/drizzle/drizzle-query.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.js +2 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-decoder.js +25 -1
- package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +1 -1
- package/dist/adapters/drizzle/generate.js +1 -1
- package/dist/adapters/kysely/kysely-adapter.d.ts +4 -3
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
- package/dist/adapters/kysely/kysely-query.d.ts +22 -0
- package/dist/adapters/kysely/kysely-query.d.ts.map +1 -0
- package/dist/adapters/kysely/kysely-query.js +101 -51
- package/dist/adapters/kysely/kysely-query.js.map +1 -1
- package/dist/adapters/kysely/kysely-uow-compiler.js +2 -1
- package/dist/adapters/kysely/kysely-uow-compiler.js.map +1 -1
- package/dist/adapters/kysely/kysely-uow-executor.js +2 -2
- package/dist/adapters/kysely/kysely-uow-executor.js.map +1 -1
- package/dist/adapters/kysely/migration/execute-base.js +1 -1
- package/dist/migration-engine/generation-engine.d.ts +1 -1
- package/dist/migration-engine/generation-engine.d.ts.map +1 -1
- package/dist/migration-engine/generation-engine.js.map +1 -1
- package/dist/mod.d.ts +7 -6
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +2 -1
- package/dist/mod.js.map +1 -1
- package/dist/query/cursor.d.ts +67 -32
- package/dist/query/cursor.d.ts.map +1 -1
- package/dist/query/cursor.js +84 -31
- package/dist/query/cursor.js.map +1 -1
- package/dist/query/query.d.ts +29 -8
- package/dist/query/query.d.ts.map +1 -1
- package/dist/query/result-transform.js +17 -5
- package/dist/query/result-transform.js.map +1 -1
- package/dist/query/unit-of-work.d.ts +19 -8
- package/dist/query/unit-of-work.d.ts.map +1 -1
- package/dist/query/unit-of-work.js +54 -12
- package/dist/query/unit-of-work.js.map +1 -1
- package/dist/schema/serialize.js +2 -0
- package/dist/schema/serialize.js.map +1 -1
- package/package.json +3 -3
- package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +242 -55
- package/src/adapters/drizzle/drizzle-adapter-sqlite.test.ts +95 -39
- package/src/adapters/drizzle/drizzle-query.test.ts +54 -4
- package/src/adapters/drizzle/drizzle-query.ts +74 -60
- package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +82 -6
- package/src/adapters/drizzle/drizzle-uow-compiler.ts +3 -2
- package/src/adapters/drizzle/drizzle-uow-decoder.ts +40 -1
- package/src/adapters/kysely/kysely-adapter-pglite.test.ts +190 -4
- package/src/adapters/kysely/kysely-adapter.ts +6 -3
- package/src/adapters/kysely/kysely-query.test.ts +498 -0
- package/src/adapters/kysely/kysely-query.ts +187 -83
- package/src/adapters/kysely/kysely-uow-compiler.test.ts +85 -3
- package/src/adapters/kysely/kysely-uow-compiler.ts +3 -2
- package/src/adapters/kysely/kysely-uow-executor.ts +5 -9
- package/src/migration-engine/generation-engine.ts +2 -1
- package/src/mod.ts +12 -7
- package/src/query/cursor.test.ts +113 -68
- package/src/query/cursor.ts +127 -36
- package/src/query/query-type.test.ts +34 -14
- package/src/query/query.ts +94 -34
- package/src/query/result-transform.test.ts +5 -5
- package/src/query/result-transform.ts +29 -11
- package/src/query/unit-of-work.ts +141 -26
- package/src/schema/serialize.test.ts +223 -0
- package/src/schema/serialize.ts +16 -0
package/dist/query/cursor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","names":["json: string","indexValues: Record<string, unknown>","serialized: Record<string, unknown>"],"sources":["../../src/query/cursor.ts"],"sourcesContent":["import type { AnyColumn } from \"../schema/create\";\nimport { serialize } from \"../schema/serialize\";\nimport type { SQLProvider } from \"../shared/providers\";\n\n/**\n * Cursor
|
|
1
|
+
{"version":3,"file":"cursor.js","names":["#indexName","#orderDirection","#pageSize","#indexValues","json: string","indexValues: Record<string, unknown>","serialized: Record<string, unknown>"],"sources":["../../src/query/cursor.ts"],"sourcesContent":["import type { AnyColumn } from \"../schema/create\";\nimport { serialize } from \"../schema/serialize\";\nimport type { SQLProvider } from \"../shared/providers\";\n\n/**\n * Cursor object containing all information needed for pagination\n */\nexport class Cursor {\n readonly #indexName: string;\n readonly #orderDirection: \"asc\" | \"desc\";\n readonly #pageSize: number;\n readonly #indexValues: Record<string, unknown>;\n\n constructor(data: {\n indexName: string;\n orderDirection: \"asc\" | \"desc\";\n pageSize: number;\n indexValues: Record<string, unknown>;\n }) {\n this.#indexName = data.indexName;\n this.#orderDirection = data.orderDirection;\n this.#pageSize = data.pageSize;\n this.#indexValues = data.indexValues;\n }\n\n /**\n * Get the index name being used for pagination\n */\n get indexName(): string {\n return this.#indexName;\n }\n\n /**\n * Get the ordering direction\n */\n get orderDirection(): \"asc\" | \"desc\" {\n return this.#orderDirection;\n }\n\n /**\n * Get the page size\n */\n get pageSize(): number {\n return this.#pageSize;\n }\n\n /**\n * Get the cursor position values\n */\n get indexValues(): Record<string, unknown> {\n return this.#indexValues;\n }\n\n /**\n * Encode cursor to an opaque base64 string (safe to send to client)\n */\n encode(): string {\n const data: CursorData = {\n v: 1,\n indexName: this.#indexName,\n orderDirection: this.#orderDirection,\n pageSize: this.#pageSize,\n indexValues: this.#indexValues,\n };\n return encodeCursorData(data);\n }\n}\n\n/**\n * Result of a cursor-based query containing items and pagination cursor\n */\nexport interface CursorResult<T> {\n /**\n * The query results\n */\n items: T[];\n /**\n * Cursor to fetch the next page (undefined if no more results)\n */\n cursor?: Cursor;\n}\n\n/**\n * Cursor data structure for serialization\n */\nexport interface CursorData {\n v: number; // version\n indexName: string;\n orderDirection: \"asc\" | \"desc\";\n pageSize: number;\n indexValues: Record<string, unknown>;\n}\n\n/**\n * Encode cursor data to a base64 string (internal)\n */\nfunction encodeCursorData(data: CursorData): string {\n const json = JSON.stringify(data);\n // Use Buffer in Node.js or btoa in browsers\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(json, \"utf-8\").toString(\"base64\");\n }\n return btoa(json);\n}\n\n/**\n * Decode a base64 cursor string back to a Cursor object\n *\n * @param cursor - The base64-encoded cursor string\n * @returns Decoded Cursor object\n * @throws Error if cursor is invalid or malformed\n *\n * @example\n * ```ts\n * const cursor = decodeCursor(\"eyJpbmRleFZhbHVlcyI6e30sImRpcmVjdGlvbiI6ImZvcndhcmQifQ==\");\n * ```\n */\nexport function decodeCursor(cursor: string): Cursor {\n try {\n let json: string;\n if (typeof Buffer !== \"undefined\") {\n json = Buffer.from(cursor, \"base64\").toString(\"utf-8\");\n } else {\n json = atob(cursor);\n }\n const data = JSON.parse(json);\n\n // Validate structure\n if (\n !data ||\n typeof data !== \"object\" ||\n !data.indexValues ||\n typeof data.indexValues !== \"object\" ||\n typeof data.pageSize !== \"number\" ||\n !data.indexName ||\n !data.orderDirection ||\n (data.orderDirection !== \"asc\" && data.orderDirection !== \"desc\")\n ) {\n throw new Error(\"Invalid cursor structure\");\n }\n\n // Only support v1\n const version = typeof data.v === \"number\" ? data.v : 0;\n if (version !== 1) {\n throw new Error(`Unsupported cursor version: ${version}. Only v1 is supported.`);\n }\n\n return new Cursor({\n indexName: data.indexName,\n orderDirection: data.orderDirection,\n pageSize: data.pageSize,\n indexValues: data.indexValues,\n });\n } catch (error) {\n throw new Error(`Invalid cursor: ${error instanceof Error ? error.message : \"malformed data\"}`);\n }\n}\n\n/**\n * Create a cursor from a record and pagination metadata\n *\n * @param record - The database record\n * @param indexColumns - The columns that make up the index\n * @param metadata - Pagination metadata (index name, order direction, page size)\n * @returns Cursor object\n *\n * @example\n * ```ts\n * const cursor = createCursorFromRecord(\n * { id: \"abc\", name: \"Alice\", createdAt: 123 },\n * [table.columns.createdAt, table.columns.id],\n * {\n * indexName: \"idx_created\",\n * orderDirection: \"asc\",\n * pageSize: 10\n * }\n * );\n * ```\n */\nexport function createCursorFromRecord(\n record: Record<string, unknown>,\n indexColumns: AnyColumn[],\n metadata: {\n indexName: string;\n orderDirection: \"asc\" | \"desc\";\n pageSize: number;\n },\n): Cursor {\n const indexValues: Record<string, unknown> = {};\n\n for (const col of indexColumns) {\n indexValues[col.ormName] = record[col.ormName];\n }\n\n return new Cursor({\n indexName: metadata.indexName,\n orderDirection: metadata.orderDirection,\n pageSize: metadata.pageSize,\n indexValues,\n });\n}\n\n/**\n * Serialize cursor values for database queries\n *\n * Converts cursor values (which are in application format) to database format\n * using the column serialization rules.\n *\n * @param cursor - The cursor object\n * @param indexColumns - The columns that make up the index\n * @param provider - The SQL provider\n * @returns Serialized values ready for database queries\n *\n * @example\n * ```ts\n * const serialized = serializeCursorValues(\n * cursor,\n * [table.columns.createdAt],\n * \"postgresql\"\n * );\n * ```\n */\nexport function serializeCursorValues(\n cursor: Cursor,\n indexColumns: AnyColumn[],\n provider: SQLProvider,\n): Record<string, unknown> {\n const serialized: Record<string, unknown> = {};\n\n for (const col of indexColumns) {\n const value = cursor.indexValues[col.ormName];\n if (value !== undefined) {\n serialized[col.ormName] = serialize(value, col, provider);\n }\n }\n\n return serialized;\n}\n"],"mappings":";;;;;;AAOA,IAAa,SAAb,MAAoB;CAClB,CAASA;CACT,CAASC;CACT,CAASC;CACT,CAASC;CAET,YAAY,MAKT;AACD,QAAKH,YAAa,KAAK;AACvB,QAAKC,iBAAkB,KAAK;AAC5B,QAAKC,WAAY,KAAK;AACtB,QAAKC,cAAe,KAAK;;;;;CAM3B,IAAI,YAAoB;AACtB,SAAO,MAAKH;;;;;CAMd,IAAI,iBAAiC;AACnC,SAAO,MAAKC;;;;;CAMd,IAAI,WAAmB;AACrB,SAAO,MAAKC;;;;;CAMd,IAAI,cAAuC;AACzC,SAAO,MAAKC;;;;;CAMd,SAAiB;AAQf,SAAO,iBAPkB;GACvB,GAAG;GACH,WAAW,MAAKH;GAChB,gBAAgB,MAAKC;GACrB,UAAU,MAAKC;GACf,aAAa,MAAKC;GACnB,CAC4B;;;;;;AAgCjC,SAAS,iBAAiB,MAA0B;CAClD,MAAM,OAAO,KAAK,UAAU,KAAK;AAEjC,KAAI,OAAO,WAAW,YACpB,QAAO,OAAO,KAAK,MAAM,QAAQ,CAAC,SAAS,SAAS;AAEtD,QAAO,KAAK,KAAK;;;;;;;;;;;;;;AAenB,SAAgB,aAAa,QAAwB;AACnD,KAAI;EACF,IAAIC;AACJ,MAAI,OAAO,WAAW,YACpB,QAAO,OAAO,KAAK,QAAQ,SAAS,CAAC,SAAS,QAAQ;MAEtD,QAAO,KAAK,OAAO;EAErB,MAAM,OAAO,KAAK,MAAM,KAAK;AAG7B,MACE,CAAC,QACD,OAAO,SAAS,YAChB,CAAC,KAAK,eACN,OAAO,KAAK,gBAAgB,YAC5B,OAAO,KAAK,aAAa,YACzB,CAAC,KAAK,aACN,CAAC,KAAK,kBACL,KAAK,mBAAmB,SAAS,KAAK,mBAAmB,OAE1D,OAAM,IAAI,MAAM,2BAA2B;EAI7C,MAAM,UAAU,OAAO,KAAK,MAAM,WAAW,KAAK,IAAI;AACtD,MAAI,YAAY,EACd,OAAM,IAAI,MAAM,+BAA+B,QAAQ,yBAAyB;AAGlF,SAAO,IAAI,OAAO;GAChB,WAAW,KAAK;GAChB,gBAAgB,KAAK;GACrB,UAAU,KAAK;GACf,aAAa,KAAK;GACnB,CAAC;UACK,OAAO;AACd,QAAM,IAAI,MAAM,mBAAmB,iBAAiB,QAAQ,MAAM,UAAU,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;AAyBnG,SAAgB,uBACd,QACA,cACA,UAKQ;CACR,MAAMC,cAAuC,EAAE;AAE/C,MAAK,MAAM,OAAO,aAChB,aAAY,IAAI,WAAW,OAAO,IAAI;AAGxC,QAAO,IAAI,OAAO;EAChB,WAAW,SAAS;EACpB,gBAAgB,SAAS;EACzB,UAAU,SAAS;EACnB;EACD,CAAC;;;;;;;;;;;;;;;;;;;;;;AAuBJ,SAAgB,sBACd,QACA,cACA,UACyB;CACzB,MAAMC,aAAsC,EAAE;AAE9C,MAAK,MAAM,OAAO,cAAc;EAC9B,MAAM,QAAQ,OAAO,YAAY,IAAI;AACrC,MAAI,UAAU,OACZ,YAAW,IAAI,WAAW,UAAU,OAAO,KAAK,SAAS;;AAI7D,QAAO"}
|
package/dist/query/query.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AnySchema, AnyTable, FragnoId, IdColumn, Relation } from "../schema/create.js";
|
|
2
2
|
import { Condition, ConditionBuilder } from "./condition-builder.js";
|
|
3
|
+
import { CursorResult } from "./cursor.js";
|
|
3
4
|
import { DeleteBuilder, FindBuilder, UnitOfWork, UpdateBuilder, UpdateManyBuilder } from "./unit-of-work.js";
|
|
4
5
|
import { Prettify } from "../util/types.js";
|
|
5
6
|
|
|
@@ -7,20 +8,30 @@ import { Prettify } from "../util/types.js";
|
|
|
7
8
|
type AnySelectClause = SelectClause<AnyTable>;
|
|
8
9
|
type SelectClause<T extends AnyTable> = true | (keyof T["columns"])[];
|
|
9
10
|
type RawColumnValues<T extends AnyTable> = { [K in keyof T["columns"] as string extends K ? never : K]: T["columns"][K]["$out"] };
|
|
10
|
-
type TableToColumnValues<T extends AnyTable> = RawColumnValues<T
|
|
11
|
+
type TableToColumnValues<T extends AnyTable> = Prettify<RawColumnValues<T>>;
|
|
11
12
|
type PickNullable<T> = { [P in keyof T as null extends T[P] ? P : never]: T[P] };
|
|
12
13
|
type PickNotNullable<T> = { [P in keyof T as null extends T[P] ? never : P]: T[P] };
|
|
13
14
|
type RawInsertValues<T extends AnyTable> = { [K in keyof T["columns"] as string extends K ? never : K]: T["columns"][K]["$in"] };
|
|
14
15
|
type TableToInsertValues<T extends AnyTable> = Prettify<Partial<PickNullable<RawInsertValues<T>>> & PickNotNullable<RawInsertValues<T>>>;
|
|
15
16
|
type TableToUpdateValues<T extends AnyTable> = { [K in keyof T["columns"] as string extends K ? never : K]?: T["columns"][K] extends IdColumn ? never : T["columns"][K]["$in"] };
|
|
16
|
-
type MainSelectResult<S extends SelectClause<T>, T extends AnyTable> = S extends true ? TableToColumnValues<T> : S extends (keyof T["columns"])[] ? { [K in S[number] as string extends K ? never : K]: K extends keyof T["columns"] ? T["columns"][K]["$out"] : never } : never;
|
|
17
|
-
type SelectResult<T extends AnyTable, JoinOut, Select extends SelectClause<T>> = MainSelectResult<Select, T> & JoinOut
|
|
17
|
+
type MainSelectResult<S extends SelectClause<T>, T extends AnyTable> = S extends true ? TableToColumnValues<T> : S extends (keyof T["columns"])[] ? Prettify<{ [K in S[number] as string extends K ? never : K]: K extends keyof T["columns"] ? T["columns"][K]["$out"] : never }> : never;
|
|
18
|
+
type SelectResult<T extends AnyTable, JoinOut, Select extends SelectClause<T>> = Prettify<MainSelectResult<Select, T> & JoinOut>;
|
|
18
19
|
interface MapRelationType<Type$1> {
|
|
19
20
|
one: Type$1 | null;
|
|
20
21
|
many: Type$1[];
|
|
21
22
|
}
|
|
22
|
-
type JoinBuilder<T extends AnyTable, Out = {}> = { [K in keyof T["relations"]]: T["relations"][K] extends Relation<infer Type, infer Target> ? <Select extends SelectClause<Target> = true, JoinOut = {}>(options?: FindManyOptions<Target, Select, JoinOut, false>) => JoinBuilder<T, Out & { [$K in K]: MapRelationType<SelectResult<Target, JoinOut, Select>>[Type] }
|
|
23
|
+
type JoinBuilder<T extends AnyTable, Out = {}> = { [K in keyof T["relations"]]: T["relations"][K] extends Relation<infer Type, infer Target> ? <Select extends SelectClause<Target> = true, JoinOut = {}>(options?: FindManyOptions<Target, Select, JoinOut, false>) => JoinBuilder<T, Prettify<Out & { [$K in K]: MapRelationType<SelectResult<Target, JoinOut, Select>>[Type] }>> : never };
|
|
23
24
|
type OrderBy<Column = string> = [columnName: Column, "asc" | "desc"];
|
|
25
|
+
/**
|
|
26
|
+
* Extract Select type parameter from a FindBuilder type (handles Omit wrapper)
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
type ExtractSelect<T> = T extends FindBuilder<any, infer TSelect, any> ? TSelect : T extends Omit<FindBuilder<any, infer TSelect, any>, any> ? TSelect : true;
|
|
30
|
+
/**
|
|
31
|
+
* Extract JoinOut type parameter from a FindBuilder type (handles Omit wrapper)
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
type ExtractJoinOut<T> = T extends FindBuilder<any, any, infer TJoinOut> ? TJoinOut : T extends Omit<FindBuilder<any, any, infer TJoinOut>, any> ? TJoinOut : {};
|
|
24
35
|
type FindFirstOptions<T extends AnyTable = AnyTable, Select extends SelectClause<T> = SelectClause<T>, JoinOut = {}, IsRoot extends boolean = true> = Omit<FindManyOptions<T, Select, JoinOut, IsRoot>, IsRoot extends true ? "limit" : "limit" | "offset" | "orderBy">;
|
|
25
36
|
type FindManyOptions<T extends AnyTable = AnyTable, Select extends SelectClause<T> = SelectClause<T>, _JoinOut = {}, IsRoot extends boolean = true> = {
|
|
26
37
|
select?: Select;
|
|
@@ -35,12 +46,22 @@ interface AbstractQuery<TSchema extends AnySchema, TUOWConfig = void> {
|
|
|
35
46
|
/**
|
|
36
47
|
* Find multiple records using a builder pattern
|
|
37
48
|
*/
|
|
38
|
-
find:
|
|
49
|
+
find: {
|
|
50
|
+
<TableName extends keyof TSchema["tables"] & string, const TBuilderResult>(table: TableName, builderFn: (builder: Omit<FindBuilder<TSchema["tables"][TableName]>, "build">) => TBuilderResult): Promise<SelectResult<TSchema["tables"][TableName], ExtractJoinOut<TBuilderResult>, Extract<ExtractSelect<TBuilderResult>, SelectClause<TSchema["tables"][TableName]>>>[]>;
|
|
51
|
+
<TableName extends keyof TSchema["tables"] & string>(table: TableName): Promise<SelectResult<TSchema["tables"][TableName], {}, true>[]>;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Find multiple records with cursor pagination metadata
|
|
55
|
+
*/
|
|
56
|
+
findWithCursor: <TableName extends keyof TSchema["tables"] & string, const TBuilderResult>(table: TableName, builderFn: (builder: Omit<FindBuilder<TSchema["tables"][TableName]>, "build">) => TBuilderResult) => Promise<CursorResult<SelectResult<TSchema["tables"][TableName], ExtractJoinOut<TBuilderResult>, Extract<ExtractSelect<TBuilderResult>, SelectClause<TSchema["tables"][TableName]>>>>>;
|
|
39
57
|
/**
|
|
40
58
|
* Find the first record matching the criteria
|
|
41
59
|
* Implemented as a wrapper around find() with pageSize(1)
|
|
42
60
|
*/
|
|
43
|
-
findFirst:
|
|
61
|
+
findFirst: {
|
|
62
|
+
<TableName extends keyof TSchema["tables"] & string, const TBuilderResult>(table: TableName, builderFn: (builder: Omit<FindBuilder<TSchema["tables"][TableName]>, "build">) => TBuilderResult): Promise<SelectResult<TSchema["tables"][TableName], ExtractJoinOut<TBuilderResult>, Extract<ExtractSelect<TBuilderResult>, SelectClause<TSchema["tables"][TableName]>>> | null>;
|
|
63
|
+
<TableName extends keyof TSchema["tables"] & string>(table: TableName): Promise<SelectResult<TSchema["tables"][TableName], {}, true> | null>;
|
|
64
|
+
};
|
|
44
65
|
/**
|
|
45
66
|
* Create a single record
|
|
46
67
|
* @returns The ID of the created record
|
|
@@ -55,7 +76,7 @@ interface AbstractQuery<TSchema extends AnySchema, TUOWConfig = void> {
|
|
|
55
76
|
* Update a single record by ID
|
|
56
77
|
* Note: you cannot update the id of a row, some databases don't support that (including MongoDB).
|
|
57
78
|
*/
|
|
58
|
-
update: <TableName extends keyof TSchema["tables"] & string>(table: TableName, id: FragnoId | string, builderFn: (builder: Omit<UpdateBuilder<TSchema["tables"][TableName]>, "build"
|
|
79
|
+
update: <TableName extends keyof TSchema["tables"] & string>(table: TableName, id: FragnoId | string, builderFn: (builder: Omit<UpdateBuilder<TSchema["tables"][TableName]>, "build">) => Omit<UpdateBuilder<TSchema["tables"][TableName]>, "build">) => Promise<void>;
|
|
59
80
|
/**
|
|
60
81
|
* Update multiple records matching a where clause
|
|
61
82
|
* Note: you cannot update the id of a row, some databases don't support that (including MongoDB).
|
|
@@ -64,7 +85,7 @@ interface AbstractQuery<TSchema extends AnySchema, TUOWConfig = void> {
|
|
|
64
85
|
/**
|
|
65
86
|
* Delete a single record by ID
|
|
66
87
|
*/
|
|
67
|
-
delete: <TableName extends keyof TSchema["tables"] & string>(table: TableName, id: FragnoId | string, builderFn?: (builder: Omit<DeleteBuilder, "build"
|
|
88
|
+
delete: <TableName extends keyof TSchema["tables"] & string>(table: TableName, id: FragnoId | string, builderFn?: (builder: Omit<DeleteBuilder, "build">) => Omit<DeleteBuilder, "build">) => Promise<void>;
|
|
68
89
|
/**
|
|
69
90
|
* Delete multiple records matching a where clause
|
|
70
91
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","names":[],"sources":["../../src/query/query.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"query.d.ts","names":[],"sources":["../../src/query/query.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -75,13 +75,25 @@ function encodeValues(values, table, generateDefault, provider) {
|
|
|
75
75
|
let value = values[k];
|
|
76
76
|
if (generateDefault && value === void 0) value = generateRuntimeDefault(col);
|
|
77
77
|
if (value !== void 0) {
|
|
78
|
-
if (col.role === "reference"
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
if (col.role === "reference") {
|
|
79
|
+
if (typeof value === "string") {
|
|
80
|
+
const relation = Object.values(table.relations).find((rel) => rel.on.some(([localCol]) => localCol === k));
|
|
81
|
+
if (relation) {
|
|
82
|
+
result[col.name] = new ReferenceSubquery(relation.table, value);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
throw new Error(`Reference column ${k} not found in table ${table.name}`);
|
|
86
|
+
} else if (value instanceof FragnoId) if (value.internalId !== void 0) {
|
|
87
|
+
result[col.name] = value.internalId;
|
|
82
88
|
continue;
|
|
89
|
+
} else {
|
|
90
|
+
const relation = Object.values(table.relations).find((rel) => rel.on.some(([localCol]) => localCol === k));
|
|
91
|
+
if (relation) {
|
|
92
|
+
result[col.name] = new ReferenceSubquery(relation.table, value.externalId);
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
throw new Error(`Reference column ${k} not found in table ${table.name}`);
|
|
83
96
|
}
|
|
84
|
-
throw new Error(`Reference column ${k} not found in table ${table.name}`);
|
|
85
97
|
}
|
|
86
98
|
result[col.name] = serialize(value, col, provider);
|
|
87
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-transform.js","names":["#referencedTable","#externalIdValue","result: Record<string, unknown>","output: Record<string, unknown>","columnValues: Record<string, unknown>","relationData: Record<string, Record<string, unknown>>"],"sources":["../../src/query/result-transform.ts"],"sourcesContent":["import type { AnyColumn, AnyTable } from \"../schema/create\";\nimport type { SQLProvider } from \"../shared/providers\";\nimport { deserialize, serialize } from \"../schema/serialize\";\nimport { FragnoId, FragnoReference } from \"../schema/create\";\nimport { createId } from \"../id\";\n\n/**\n * Marker class for reference column values that need subquery resolution.\n * When a reference column receives a string (external ID), this marker tells\n * the query builder to generate a subquery to look up the internal ID.\n * @internal\n */\nexport class ReferenceSubquery {\n #referencedTable: AnyTable;\n #externalIdValue: string;\n\n constructor(referencedTable: AnyTable, externalIdValue: string) {\n this.#referencedTable = referencedTable;\n this.#externalIdValue = externalIdValue;\n }\n\n get referencedTable() {\n return this.#referencedTable;\n }\n\n get externalIdValue() {\n return this.#externalIdValue;\n }\n}\n\n/**\n * Generate a runtime default value for a column that has defaultTo$()\n *\n * Only generates values for runtime defaults (defaultTo$), NOT static defaults (defaultTo).\n * Static defaults should be handled by the database via DEFAULT constraints.\n *\n * @param column - The column with a default value configuration\n * @returns The generated default value, or undefined if the column has no runtime default\n *\n * @internal\n */\nexport function generateRuntimeDefault(column: AnyColumn): unknown {\n // Check if column has a default value configuration\n if (!column.default) {\n return undefined;\n }\n\n // If it's a static default value (defaultTo), return undefined\n // as the database should handle this via DEFAULT constraint\n if (\"value\" in column.default) {\n return undefined;\n }\n\n // If it's a database-level special function (defaultTo(b => b.now())), return undefined\n // as the database should handle this via DEFAULT NOW() or equivalent\n if (\"dbSpecial\" in column.default) {\n return undefined;\n }\n\n // Handle runtime defaults (defaultTo$)\n const runtime = column.default.runtime;\n\n if (runtime === \"cuid\") {\n return createId();\n }\n\n if (runtime === \"now\") {\n return new Date();\n }\n\n if (typeof runtime === \"function\") {\n return runtime();\n }\n\n return undefined;\n}\n\n/**\n * Encodes a record of values from the application format to database format.\n *\n * This function transforms object keys to match SQL column names and serializes\n * values according to the database provider's requirements (e.g., converting\n * JavaScript Date objects to numbers for SQLite).\n *\n * @param values - The record of values to encode in application format\n * @param table - The table schema definition containing column information\n * @param generateDefault - Whether to generate default values for undefined columns\n * @param provider - The SQL provider (sqlite, postgresql, mysql, etc.)\n * @returns A record with database-compatible column names and serialized values\n *\n * @example\n * ```ts\n * const encoded = encodeValues(\n * { userId: 123, createdAt: new Date() },\n * userTable,\n * true,\n * 'sqlite'\n * );\n * // Returns: { user_id: 123, created_at: 1234567890 }\n * ```\n */\nexport function encodeValues(\n values: Record<string, unknown>,\n table: AnyTable,\n generateDefault: boolean,\n provider: SQLProvider,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const k in table.columns) {\n const col = table.columns[k];\n\n // Skip internal ID - never provided by user, auto-generated by database\n if (col.role === \"internal-id\") {\n continue;\n }\n let value = values[k];\n\n if (generateDefault && value === undefined) {\n // Only generate runtime defaults (defaultTo$), not static defaults (defaultTo).\n // Static defaults should be handled by the database via DEFAULT constraints.\n value = generateRuntimeDefault(col);\n }\n\n if (value !== undefined) {\n // Handle string references - convert external ID to internal ID via subquery\n if (col.role === \"reference\" && typeof value === \"string\") {\n // Find relation that uses this column\n const relation = Object.values(table.relations).find((rel) =>\n rel.on.some(([localCol]) => localCol === k),\n );\n if (relation) {\n result[col.name] = new ReferenceSubquery(relation.table, value);\n continue;\n }\n\n throw new Error(`Reference column ${k} not found in table ${table.name}`);\n }\n\n result[col.name] = serialize(value, col, provider);\n }\n }\n\n return result;\n}\n\n/**\n * Decodes a database result record to application format.\n *\n * This function transforms database column names back to application property names\n * and deserializes values according to the database provider's format (e.g., converting\n * SQLite integers back to JavaScript Date objects).\n *\n * Supports relation data encoded with the pattern `relationName:columnName`.\n *\n * @param result - The raw database result record\n * @param table - The table schema definition containing column and relation information\n * @param provider - The SQL provider (sqlite, postgresql, mysql, etc.)\n * @returns A record in application format with deserialized values\n *\n * @example\n * ```ts\n * const decoded = decodeResult(\n * { user_id: 123, created_at: 1234567890, 'posts:title': 'Hello' },\n * userTable,\n * 'sqlite'\n * );\n * // Returns: { userId: 123, createdAt: Date, posts: { title: 'Hello' } }\n * ```\n */\nexport function decodeResult(\n result: Record<string, unknown>,\n table: AnyTable,\n provider: SQLProvider,\n): Record<string, unknown> {\n const output: Record<string, unknown> = {};\n // First pass: collect all column values\n const columnValues: Record<string, unknown> = {};\n\n // Collect all relation data (including nested) keyed by relation name\n const relationData: Record<string, Record<string, unknown>> = {};\n\n for (const k in result) {\n const colonIndex = k.indexOf(\":\");\n const value = result[k];\n\n // Direct column (no colon)\n if (colonIndex === -1) {\n const col = table.columns[k];\n if (!col) {\n continue;\n }\n\n // Store all column values (including hidden ones for FragnoId creation)\n columnValues[k] = deserialize(value, col, provider);\n continue;\n }\n\n // Relation column (has colon)\n const relationName = k.slice(0, colonIndex);\n const remainder = k.slice(colonIndex + 1);\n\n const relation = table.relations[relationName];\n if (relation === undefined) {\n continue;\n }\n\n // Collect relation data with the remaining key path\n relationData[relationName] ??= {};\n relationData[relationName][remainder] = value;\n }\n\n // Process each relation's data recursively\n for (const relationName in relationData) {\n const relation = table.relations[relationName];\n if (!relation) {\n continue;\n }\n\n // Recursively decode the relation data\n output[relationName] = decodeResult(relationData[relationName], relation.table, provider);\n }\n\n // Second pass: create output with FragnoId objects where appropriate\n for (const k in columnValues) {\n const col = table.columns[k];\n if (!col) {\n continue;\n }\n\n // Filter out hidden columns (like _internalId, _version) from results\n if (col.isHidden) {\n continue;\n }\n\n // For external ID columns, create FragnoId if we have both external and internal IDs\n if (col.role === \"external-id\" && columnValues[\"_internalId\"] !== undefined) {\n output[k] = new FragnoId({\n externalId: columnValues[k] as string,\n internalId: columnValues[\"_internalId\"] as bigint,\n // _version is always selected as a hidden column, so it should always be present\n version: columnValues[\"_version\"] as number,\n });\n } else if (col.role === \"reference\") {\n // For reference columns, create FragnoReference with internal ID\n output[k] = FragnoReference.fromInternal(columnValues[k] as bigint);\n } else {\n output[k] = columnValues[k];\n }\n }\n\n return output;\n}\n"],"mappings":";;;;;;;;;;;AAYA,IAAa,oBAAb,MAA+B;CAC7B;CACA;CAEA,YAAY,iBAA2B,iBAAyB;AAC9D,QAAKA,kBAAmB;AACxB,QAAKC,kBAAmB;;CAG1B,IAAI,kBAAkB;AACpB,SAAO,MAAKD;;CAGd,IAAI,kBAAkB;AACpB,SAAO,MAAKC;;;;;;;;;;;;;;AAehB,SAAgB,uBAAuB,QAA4B;AAEjE,KAAI,CAAC,OAAO,QACV;AAKF,KAAI,WAAW,OAAO,QACpB;AAKF,KAAI,eAAe,OAAO,QACxB;CAIF,MAAM,UAAU,OAAO,QAAQ;AAE/B,KAAI,YAAY,OACd,QAAO,UAAU;AAGnB,KAAI,YAAY,MACd,wBAAO,IAAI,MAAM;AAGnB,KAAI,OAAO,YAAY,WACrB,QAAO,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BpB,SAAgB,aACd,QACA,OACA,iBACA,UACyB;CACzB,MAAMC,SAAkC,EAAE;AAE1C,MAAK,MAAM,KAAK,MAAM,SAAS;EAC7B,MAAM,MAAM,MAAM,QAAQ;AAG1B,MAAI,IAAI,SAAS,cACf;EAEF,IAAI,QAAQ,OAAO;AAEnB,MAAI,mBAAmB,UAAU,OAG/B,SAAQ,uBAAuB,IAAI;AAGrC,MAAI,UAAU,QAAW;AAEvB,OAAI,IAAI,SAAS,eAAe,OAAO,UAAU,UAAU;IAEzD,MAAM,WAAW,OAAO,OAAO,MAAM,UAAU,CAAC,MAAM,QACpD,IAAI,GAAG,MAAM,CAAC,cAAc,aAAa,EAAE,CAC5C;AACD,QAAI,UAAU;AACZ,YAAO,IAAI,QAAQ,IAAI,kBAAkB,SAAS,OAAO,MAAM;AAC/D;;AAGF,UAAM,IAAI,MAAM,oBAAoB,EAAE,sBAAsB,MAAM,OAAO;;AAG3E,UAAO,IAAI,QAAQ,UAAU,OAAO,KAAK,SAAS;;;AAItD,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BT,SAAgB,aACd,QACA,OACA,UACyB;CACzB,MAAMC,SAAkC,EAAE;CAE1C,MAAMC,eAAwC,EAAE;CAGhD,MAAMC,eAAwD,EAAE;AAEhE,MAAK,MAAM,KAAK,QAAQ;EACtB,MAAM,aAAa,EAAE,QAAQ,IAAI;EACjC,MAAM,QAAQ,OAAO;AAGrB,MAAI,eAAe,IAAI;GACrB,MAAM,MAAM,MAAM,QAAQ;AAC1B,OAAI,CAAC,IACH;AAIF,gBAAa,KAAK,YAAY,OAAO,KAAK,SAAS;AACnD;;EAIF,MAAM,eAAe,EAAE,MAAM,GAAG,WAAW;EAC3C,MAAM,YAAY,EAAE,MAAM,aAAa,EAAE;AAGzC,MADiB,MAAM,UAAU,kBAChB,OACf;AAIF,eAAa,kBAAkB,EAAE;AACjC,eAAa,cAAc,aAAa;;AAI1C,MAAK,MAAM,gBAAgB,cAAc;EACvC,MAAM,WAAW,MAAM,UAAU;AACjC,MAAI,CAAC,SACH;AAIF,SAAO,gBAAgB,aAAa,aAAa,eAAe,SAAS,OAAO,SAAS;;AAI3F,MAAK,MAAM,KAAK,cAAc;EAC5B,MAAM,MAAM,MAAM,QAAQ;AAC1B,MAAI,CAAC,IACH;AAIF,MAAI,IAAI,SACN;AAIF,MAAI,IAAI,SAAS,iBAAiB,aAAa,mBAAmB,OAChE,QAAO,KAAK,IAAI,SAAS;GACvB,YAAY,aAAa;GACzB,YAAY,aAAa;GAEzB,SAAS,aAAa;GACvB,CAAC;WACO,IAAI,SAAS,YAEtB,QAAO,KAAK,gBAAgB,aAAa,aAAa,GAAa;MAEnE,QAAO,KAAK,aAAa;;AAI7B,QAAO"}
|
|
1
|
+
{"version":3,"file":"result-transform.js","names":["#referencedTable","#externalIdValue","result: Record<string, unknown>","output: Record<string, unknown>","columnValues: Record<string, unknown>","relationData: Record<string, Record<string, unknown>>"],"sources":["../../src/query/result-transform.ts"],"sourcesContent":["import type { AnyColumn, AnyTable } from \"../schema/create\";\nimport type { SQLProvider } from \"../shared/providers\";\nimport { deserialize, serialize } from \"../schema/serialize\";\nimport { FragnoId, FragnoReference } from \"../schema/create\";\nimport { createId } from \"../id\";\n\n/**\n * Marker class for reference column values that need subquery resolution.\n * When a reference column receives a string (external ID), this marker tells\n * the query builder to generate a subquery to look up the internal ID.\n * @internal\n */\nexport class ReferenceSubquery {\n #referencedTable: AnyTable;\n #externalIdValue: string;\n\n constructor(referencedTable: AnyTable, externalIdValue: string) {\n this.#referencedTable = referencedTable;\n this.#externalIdValue = externalIdValue;\n }\n\n get referencedTable() {\n return this.#referencedTable;\n }\n\n get externalIdValue() {\n return this.#externalIdValue;\n }\n}\n\n/**\n * Generate a runtime default value for a column that has defaultTo$()\n *\n * Only generates values for runtime defaults (defaultTo$), NOT static defaults (defaultTo).\n * Static defaults should be handled by the database via DEFAULT constraints.\n *\n * @param column - The column with a default value configuration\n * @returns The generated default value, or undefined if the column has no runtime default\n *\n * @internal\n */\nexport function generateRuntimeDefault(column: AnyColumn): unknown {\n // Check if column has a default value configuration\n if (!column.default) {\n return undefined;\n }\n\n // If it's a static default value (defaultTo), return undefined\n // as the database should handle this via DEFAULT constraint\n if (\"value\" in column.default) {\n return undefined;\n }\n\n // If it's a database-level special function (defaultTo(b => b.now())), return undefined\n // as the database should handle this via DEFAULT NOW() or equivalent\n if (\"dbSpecial\" in column.default) {\n return undefined;\n }\n\n // Handle runtime defaults (defaultTo$)\n const runtime = column.default.runtime;\n\n if (runtime === \"cuid\") {\n return createId();\n }\n\n if (runtime === \"now\") {\n return new Date();\n }\n\n if (typeof runtime === \"function\") {\n return runtime();\n }\n\n return undefined;\n}\n\n/**\n * Encodes a record of values from the application format to database format.\n *\n * This function transforms object keys to match SQL column names and serializes\n * values according to the database provider's requirements (e.g., converting\n * JavaScript Date objects to numbers for SQLite).\n *\n * @param values - The record of values to encode in application format\n * @param table - The table schema definition containing column information\n * @param generateDefault - Whether to generate default values for undefined columns\n * @param provider - The SQL provider (sqlite, postgresql, mysql, etc.)\n * @returns A record with database-compatible column names and serialized values\n *\n * @example\n * ```ts\n * const encoded = encodeValues(\n * { userId: 123, createdAt: new Date() },\n * userTable,\n * true,\n * 'sqlite'\n * );\n * // Returns: { user_id: 123, created_at: 1234567890 }\n * ```\n */\nexport function encodeValues(\n values: Record<string, unknown>,\n table: AnyTable,\n generateDefault: boolean,\n provider: SQLProvider,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const k in table.columns) {\n const col = table.columns[k];\n\n // Skip internal ID - never provided by user, auto-generated by database\n if (col.role === \"internal-id\") {\n continue;\n }\n let value = values[k];\n\n if (generateDefault && value === undefined) {\n // Only generate runtime defaults (defaultTo$), not static defaults (defaultTo).\n // Static defaults should be handled by the database via DEFAULT constraints.\n value = generateRuntimeDefault(col);\n }\n\n if (value !== undefined) {\n // Handle string references and FragnoId objects\n if (col.role === \"reference\") {\n if (typeof value === \"string\") {\n // String external ID - generate subquery\n const relation = Object.values(table.relations).find((rel) =>\n rel.on.some(([localCol]) => localCol === k),\n );\n if (relation) {\n result[col.name] = new ReferenceSubquery(relation.table, value);\n continue;\n }\n throw new Error(`Reference column ${k} not found in table ${table.name}`);\n } else if (value instanceof FragnoId) {\n // FragnoId object\n if (value.internalId !== undefined) {\n // If internal ID is populated, use it directly (no subquery needed)\n result[col.name] = value.internalId;\n continue;\n } else {\n // If internal ID is not populated, use external ID via subquery\n const relation = Object.values(table.relations).find((rel) =>\n rel.on.some(([localCol]) => localCol === k),\n );\n if (relation) {\n result[col.name] = new ReferenceSubquery(relation.table, value.externalId);\n continue;\n }\n throw new Error(`Reference column ${k} not found in table ${table.name}`);\n }\n }\n }\n\n result[col.name] = serialize(value, col, provider);\n }\n }\n\n return result;\n}\n\n/**\n * Decodes a database result record to application format.\n *\n * This function transforms database column names back to application property names\n * and deserializes values according to the database provider's format (e.g., converting\n * SQLite integers back to JavaScript Date objects).\n *\n * Supports relation data encoded with the pattern `relationName:columnName`.\n *\n * @param result - The raw database result record\n * @param table - The table schema definition containing column and relation information\n * @param provider - The SQL provider (sqlite, postgresql, mysql, etc.)\n * @returns A record in application format with deserialized values\n *\n * @example\n * ```ts\n * const decoded = decodeResult(\n * { user_id: 123, created_at: 1234567890, 'posts:title': 'Hello' },\n * userTable,\n * 'sqlite'\n * );\n * // Returns: { userId: 123, createdAt: Date, posts: { title: 'Hello' } }\n * ```\n */\nexport function decodeResult(\n result: Record<string, unknown>,\n table: AnyTable,\n provider: SQLProvider,\n): Record<string, unknown> {\n const output: Record<string, unknown> = {};\n // First pass: collect all column values\n const columnValues: Record<string, unknown> = {};\n\n // Collect all relation data (including nested) keyed by relation name\n const relationData: Record<string, Record<string, unknown>> = {};\n\n for (const k in result) {\n const colonIndex = k.indexOf(\":\");\n const value = result[k];\n\n // Direct column (no colon)\n if (colonIndex === -1) {\n const col = table.columns[k];\n if (!col) {\n continue;\n }\n\n // Store all column values (including hidden ones for FragnoId creation)\n columnValues[k] = deserialize(value, col, provider);\n continue;\n }\n\n // Relation column (has colon)\n const relationName = k.slice(0, colonIndex);\n const remainder = k.slice(colonIndex + 1);\n\n const relation = table.relations[relationName];\n if (relation === undefined) {\n continue;\n }\n\n // Collect relation data with the remaining key path\n relationData[relationName] ??= {};\n relationData[relationName][remainder] = value;\n }\n\n // Process each relation's data recursively\n for (const relationName in relationData) {\n const relation = table.relations[relationName];\n if (!relation) {\n continue;\n }\n\n // Recursively decode the relation data\n output[relationName] = decodeResult(relationData[relationName], relation.table, provider);\n }\n\n // Second pass: create output with FragnoId objects where appropriate\n for (const k in columnValues) {\n const col = table.columns[k];\n if (!col) {\n continue;\n }\n\n // Filter out hidden columns (like _internalId, _version) from results\n if (col.isHidden) {\n continue;\n }\n\n // For external ID columns, create FragnoId if we have both external and internal IDs\n if (col.role === \"external-id\" && columnValues[\"_internalId\"] !== undefined) {\n output[k] = new FragnoId({\n externalId: columnValues[k] as string,\n internalId: columnValues[\"_internalId\"] as bigint,\n // _version is always selected as a hidden column, so it should always be present\n version: columnValues[\"_version\"] as number,\n });\n } else if (col.role === \"reference\") {\n // For reference columns, create FragnoReference with internal ID\n output[k] = FragnoReference.fromInternal(columnValues[k] as bigint);\n } else {\n output[k] = columnValues[k];\n }\n }\n\n return output;\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AnySchema, AnyTable, FragnoId, IdColumn, Index, Relation } from "../schema/create.js";
|
|
2
2
|
import { Condition, ConditionBuilder } from "./condition-builder.js";
|
|
3
3
|
import { CompiledJoin } from "./orm/orm.js";
|
|
4
|
+
import { Cursor, CursorResult } from "./cursor.js";
|
|
4
5
|
import { SelectClause, SelectResult, TableToInsertValues, TableToUpdateValues } from "./query.js";
|
|
5
6
|
|
|
6
7
|
//#region src/query/unit-of-work.d.ts
|
|
@@ -72,11 +73,11 @@ type FindOptions<TTable extends AnyTable = AnyTable, TSelect extends SelectClaus
|
|
|
72
73
|
/**
|
|
73
74
|
* Cursor for pagination - continue after this cursor
|
|
74
75
|
*/
|
|
75
|
-
after?: string;
|
|
76
|
+
after?: Cursor | string;
|
|
76
77
|
/**
|
|
77
78
|
* Cursor for pagination - continue before this cursor
|
|
78
79
|
*/
|
|
79
|
-
before?: string;
|
|
80
|
+
before?: Cursor | string;
|
|
80
81
|
/**
|
|
81
82
|
* Number of results per page
|
|
82
83
|
*/
|
|
@@ -98,6 +99,7 @@ type RetrievalOperation<TSchema extends AnySchema, TTable extends AnyTable = TSc
|
|
|
98
99
|
table: TTable;
|
|
99
100
|
indexName: string;
|
|
100
101
|
options: FindOptions<TTable, SelectClause<TTable>>;
|
|
102
|
+
withCursor?: boolean;
|
|
101
103
|
} | {
|
|
102
104
|
type: "count";
|
|
103
105
|
table: TTable;
|
|
@@ -212,12 +214,16 @@ declare class FindBuilder<TTable extends AnyTable, TSelect extends SelectClause<
|
|
|
212
214
|
orderByIndex<TIndexName extends ValidIndexName<TTable>>(indexName: TIndexName, direction: "asc" | "desc"): this;
|
|
213
215
|
/**
|
|
214
216
|
* Set cursor to continue pagination after this point (forward pagination)
|
|
217
|
+
* If a Cursor object is provided, its metadata will be used to set defaults for
|
|
218
|
+
* index, orderByIndex, and pageSize (if not explicitly set)
|
|
215
219
|
*/
|
|
216
|
-
after(cursor: string): this;
|
|
220
|
+
after(cursor: Cursor | string): this;
|
|
217
221
|
/**
|
|
218
222
|
* Set cursor to continue pagination before this point (backward pagination)
|
|
223
|
+
* If a Cursor object is provided, its metadata will be used to set defaults for
|
|
224
|
+
* index, orderByIndex, and pageSize (if not explicitly set)
|
|
219
225
|
*/
|
|
220
|
-
before(cursor: string): this;
|
|
226
|
+
before(cursor: Cursor | string): this;
|
|
221
227
|
/**
|
|
222
228
|
* Set the number of results per page
|
|
223
229
|
*/
|
|
@@ -387,19 +393,24 @@ declare class UnitOfWork<const TSchema extends AnySchema, const TRetrievalResult
|
|
|
387
393
|
/**
|
|
388
394
|
* Add a find operation using a builder callback (retrieval phase only)
|
|
389
395
|
*/
|
|
390
|
-
find<TTableName extends keyof TSchema["tables"] & string, TSelect extends SelectClause<TSchema["tables"][TTableName]> = true, TJoinOut = {}>(tableName: TTableName, builderFn?: (builder: Omit<FindBuilder<TSchema["tables"][TTableName]>, "build">) => Omit<FindBuilder<TSchema["tables"][TTableName], TSelect, TJoinOut>, "build">): UnitOfWork<TSchema, [...TRetrievalResults, SelectResult<TSchema["tables"][TTableName], TJoinOut, TSelect>[]], TRawInput>;
|
|
396
|
+
find<TTableName extends keyof TSchema["tables"] & string, TSelect extends SelectClause<TSchema["tables"][TTableName]> = true, TJoinOut = {}>(tableName: TTableName, builderFn?: (builder: Omit<FindBuilder<TSchema["tables"][TTableName]>, "build">) => Omit<FindBuilder<TSchema["tables"][TTableName], TSelect, TJoinOut>, "build"> | void): UnitOfWork<TSchema, [...TRetrievalResults, SelectResult<TSchema["tables"][TTableName], TJoinOut, TSelect>[]], TRawInput>;
|
|
397
|
+
/**
|
|
398
|
+
* Add a find operation with cursor metadata (retrieval phase only)
|
|
399
|
+
*/
|
|
400
|
+
findWithCursor<TTableName extends keyof TSchema["tables"] & string, TSelect extends SelectClause<TSchema["tables"][TTableName]> = true, TJoinOut = {}>(tableName: TTableName, builderFn: (builder: Omit<FindBuilder<TSchema["tables"][TTableName]>, "build">) => Omit<FindBuilder<TSchema["tables"][TTableName], TSelect, TJoinOut>, "build"> | void): UnitOfWork<TSchema, [...TRetrievalResults, CursorResult<SelectResult<TSchema["tables"][TTableName], TJoinOut, TSelect>>], TRawInput>;
|
|
391
401
|
/**
|
|
392
402
|
* Add a create operation (mutation phase only)
|
|
403
|
+
* Returns a FragnoId with the external ID that can be used immediately in subsequent operations
|
|
393
404
|
*/
|
|
394
|
-
create<TableName extends keyof TSchema["tables"] & string>(table: TableName, values: TableToInsertValues<TSchema["tables"][TableName]>):
|
|
405
|
+
create<TableName extends keyof TSchema["tables"] & string>(table: TableName, values: TableToInsertValues<TSchema["tables"][TableName]>): FragnoId;
|
|
395
406
|
/**
|
|
396
407
|
* Add an update operation using a builder callback (mutation phase only)
|
|
397
408
|
*/
|
|
398
|
-
update<TableName extends keyof TSchema["tables"] & string>(table: TableName, id: FragnoId | string, builderFn: (builder: Omit<UpdateBuilder<TSchema["tables"][TableName]>, "build">) => Omit<UpdateBuilder<TSchema["tables"][TableName]>, "build">):
|
|
409
|
+
update<TableName extends keyof TSchema["tables"] & string>(table: TableName, id: FragnoId | string, builderFn: (builder: Omit<UpdateBuilder<TSchema["tables"][TableName]>, "build">) => Omit<UpdateBuilder<TSchema["tables"][TableName]>, "build"> | void): void;
|
|
399
410
|
/**
|
|
400
411
|
* Add a delete operation using a builder callback (mutation phase only)
|
|
401
412
|
*/
|
|
402
|
-
delete<TableName extends keyof TSchema["tables"] & string>(table: TableName, id: FragnoId | string, builderFn?: (builder: Omit<DeleteBuilder, "build">) => Omit<DeleteBuilder, "build">):
|
|
413
|
+
delete<TableName extends keyof TSchema["tables"] & string>(table: TableName, id: FragnoId | string, builderFn?: (builder: Omit<DeleteBuilder, "build">) => Omit<DeleteBuilder, "build"> | void): void;
|
|
403
414
|
/**
|
|
404
415
|
* Execute the mutation phase
|
|
405
416
|
* Returns success flag indicating if mutations completed without conflicts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-of-work.d.ts","names":[],"sources":["../../src/query/unit-of-work.ts"],"sourcesContent":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unit-of-work.d.ts","names":[],"sources":["../../src/query/unit-of-work.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FragnoId } from "../schema/create.js";
|
|
2
|
+
import { Cursor } from "./cursor.js";
|
|
2
3
|
import { buildCondition } from "./condition-builder.js";
|
|
3
4
|
|
|
4
5
|
//#region src/query/unit-of-work.ts
|
|
@@ -17,6 +18,7 @@ var FindBuilder = class {
|
|
|
17
18
|
#selectClause;
|
|
18
19
|
#joinClause;
|
|
19
20
|
#countMode = false;
|
|
21
|
+
#cursorMetadata;
|
|
20
22
|
constructor(tableName, table) {
|
|
21
23
|
this.#tableName = tableName;
|
|
22
24
|
this.#table = table;
|
|
@@ -61,16 +63,22 @@ var FindBuilder = class {
|
|
|
61
63
|
}
|
|
62
64
|
/**
|
|
63
65
|
* Set cursor to continue pagination after this point (forward pagination)
|
|
66
|
+
* If a Cursor object is provided, its metadata will be used to set defaults for
|
|
67
|
+
* index, orderByIndex, and pageSize (if not explicitly set)
|
|
64
68
|
*/
|
|
65
69
|
after(cursor) {
|
|
66
70
|
this.#afterCursor = cursor;
|
|
71
|
+
if (cursor instanceof Cursor) this.#cursorMetadata = cursor;
|
|
67
72
|
return this;
|
|
68
73
|
}
|
|
69
74
|
/**
|
|
70
75
|
* Set cursor to continue pagination before this point (backward pagination)
|
|
76
|
+
* If a Cursor object is provided, its metadata will be used to set defaults for
|
|
77
|
+
* index, orderByIndex, and pageSize (if not explicitly set)
|
|
71
78
|
*/
|
|
72
79
|
before(cursor) {
|
|
73
80
|
this.#beforeCursor = cursor;
|
|
81
|
+
if (cursor instanceof Cursor) this.#cursorMetadata = cursor;
|
|
74
82
|
return this;
|
|
75
83
|
}
|
|
76
84
|
/**
|
|
@@ -92,30 +100,46 @@ var FindBuilder = class {
|
|
|
92
100
|
* @internal
|
|
93
101
|
*/
|
|
94
102
|
build() {
|
|
95
|
-
|
|
103
|
+
let indexName = this.#indexName;
|
|
104
|
+
let orderByIndex = this.#orderByIndexClause;
|
|
105
|
+
let pageSize = this.#pageSizeValue;
|
|
106
|
+
if (this.#cursorMetadata) {
|
|
107
|
+
if (!indexName) indexName = this.#cursorMetadata.indexName;
|
|
108
|
+
if (!orderByIndex) orderByIndex = {
|
|
109
|
+
indexName: this.#cursorMetadata.indexName,
|
|
110
|
+
direction: this.#cursorMetadata.orderDirection
|
|
111
|
+
};
|
|
112
|
+
if (pageSize === void 0) pageSize = this.#cursorMetadata.pageSize;
|
|
113
|
+
if (indexName && indexName !== this.#cursorMetadata.indexName) throw new Error(`Index mismatch: builder specifies "${indexName}" but cursor specifies "${this.#cursorMetadata.indexName}"`);
|
|
114
|
+
if (orderByIndex && (orderByIndex.indexName !== this.#cursorMetadata.indexName || orderByIndex.direction !== this.#cursorMetadata.orderDirection)) throw new Error(`Order mismatch: builder and cursor specify different ordering`);
|
|
115
|
+
if (pageSize !== void 0 && pageSize !== this.#cursorMetadata.pageSize) throw new Error(`Page size mismatch: builder specifies ${pageSize} but cursor specifies ${this.#cursorMetadata.pageSize}`);
|
|
116
|
+
}
|
|
117
|
+
if (!indexName) throw new Error(`Must specify an index using .whereIndex() before finalizing find operation on table "${this.#tableName}"`);
|
|
96
118
|
if (this.#countMode) return {
|
|
97
119
|
type: "count",
|
|
98
|
-
indexName
|
|
120
|
+
indexName,
|
|
99
121
|
options: {
|
|
100
|
-
useIndex:
|
|
122
|
+
useIndex: indexName,
|
|
101
123
|
where: this.#whereClause
|
|
102
124
|
}
|
|
103
125
|
};
|
|
104
126
|
let compiledJoins;
|
|
105
127
|
if (this.#joinClause) compiledJoins = buildJoinIndexed(this.#table, this.#joinClause);
|
|
128
|
+
const afterCursor = this.#afterCursor instanceof Cursor ? this.#afterCursor.encode() : this.#afterCursor;
|
|
129
|
+
const beforeCursor = this.#beforeCursor instanceof Cursor ? this.#beforeCursor.encode() : this.#beforeCursor;
|
|
106
130
|
const options = {
|
|
107
|
-
useIndex:
|
|
131
|
+
useIndex: indexName,
|
|
108
132
|
select: this.#selectClause,
|
|
109
133
|
where: this.#whereClause,
|
|
110
|
-
orderByIndex
|
|
111
|
-
after:
|
|
112
|
-
before:
|
|
113
|
-
pageSize
|
|
134
|
+
orderByIndex,
|
|
135
|
+
after: afterCursor,
|
|
136
|
+
before: beforeCursor,
|
|
137
|
+
pageSize,
|
|
114
138
|
joins: compiledJoins
|
|
115
139
|
};
|
|
116
140
|
return {
|
|
117
141
|
type: "find",
|
|
118
|
-
indexName
|
|
142
|
+
indexName,
|
|
119
143
|
options
|
|
120
144
|
};
|
|
121
145
|
}
|
|
@@ -417,7 +441,27 @@ var UnitOfWork = class {
|
|
|
417
441
|
return this;
|
|
418
442
|
}
|
|
419
443
|
/**
|
|
444
|
+
* Add a find operation with cursor metadata (retrieval phase only)
|
|
445
|
+
*/
|
|
446
|
+
findWithCursor(tableName, builderFn) {
|
|
447
|
+
if (this.#state !== "building-retrieval") throw new Error(`findWithCursor() can only be called during retrieval phase. Current state: ${this.#state}`);
|
|
448
|
+
const table = this.#schema.tables[tableName];
|
|
449
|
+
if (!table) throw new Error(`Table ${tableName} not found in schema`);
|
|
450
|
+
const builder = new FindBuilder(tableName, table);
|
|
451
|
+
builderFn(builder);
|
|
452
|
+
const { indexName, options, type } = builder.build();
|
|
453
|
+
this.#retrievalOps.push({
|
|
454
|
+
type,
|
|
455
|
+
table,
|
|
456
|
+
indexName,
|
|
457
|
+
options,
|
|
458
|
+
withCursor: true
|
|
459
|
+
});
|
|
460
|
+
return this;
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
420
463
|
* Add a create operation (mutation phase only)
|
|
464
|
+
* Returns a FragnoId with the external ID that can be used immediately in subsequent operations
|
|
421
465
|
*/
|
|
422
466
|
create(table, values) {
|
|
423
467
|
if (this.#state === "executed") throw new Error(`create() can only be called during mutation phase.`);
|
|
@@ -444,7 +488,7 @@ var UnitOfWork = class {
|
|
|
444
488
|
values: updatedValues,
|
|
445
489
|
generatedExternalId: externalId
|
|
446
490
|
});
|
|
447
|
-
return
|
|
491
|
+
return FragnoId.fromExternal(externalId, 0);
|
|
448
492
|
}
|
|
449
493
|
/**
|
|
450
494
|
* Add an update operation using a builder callback (mutation phase only)
|
|
@@ -461,7 +505,6 @@ var UnitOfWork = class {
|
|
|
461
505
|
checkVersion,
|
|
462
506
|
set
|
|
463
507
|
});
|
|
464
|
-
return this;
|
|
465
508
|
}
|
|
466
509
|
/**
|
|
467
510
|
* Add a delete operation using a builder callback (mutation phase only)
|
|
@@ -477,7 +520,6 @@ var UnitOfWork = class {
|
|
|
477
520
|
id: opId,
|
|
478
521
|
checkVersion
|
|
479
522
|
});
|
|
480
|
-
return this;
|
|
481
523
|
}
|
|
482
524
|
/**
|
|
483
525
|
* Execute the mutation phase
|