@fragno-dev/db 0.0.1 → 0.1.0
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 +137 -13
- package/.turbo/turbo-test.log +36 -0
- package/CHANGELOG.md +7 -0
- package/dist/adapters/adapters.d.ts +18 -0
- package/dist/adapters/adapters.d.ts.map +1 -0
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +21 -0
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -0
- package/dist/adapters/drizzle/drizzle-adapter.js +62 -0
- package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -0
- package/dist/adapters/drizzle/drizzle-query.d.ts +17 -0
- package/dist/adapters/drizzle/drizzle-query.d.ts.map +1 -0
- package/dist/adapters/drizzle/drizzle-query.js +139 -0
- package/dist/adapters/drizzle/drizzle-query.js.map +1 -0
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts +9 -0
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts.map +1 -0
- package/dist/adapters/drizzle/drizzle-uow-compiler.js +300 -0
- package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +1 -0
- package/dist/adapters/drizzle/drizzle-uow-decoder.js +82 -0
- package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +1 -0
- package/dist/adapters/drizzle/drizzle-uow-executor.js +125 -0
- package/dist/adapters/drizzle/drizzle-uow-executor.js.map +1 -0
- package/dist/adapters/drizzle/generate.js +273 -0
- package/dist/adapters/drizzle/generate.js.map +1 -0
- package/dist/adapters/drizzle/join-column-utils.js +28 -0
- package/dist/adapters/drizzle/join-column-utils.js.map +1 -0
- package/dist/adapters/drizzle/shared.js +11 -0
- package/dist/adapters/drizzle/shared.js.map +1 -0
- package/dist/adapters/kysely/kysely-adapter.d.ts +23 -0
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -0
- package/dist/adapters/kysely/kysely-adapter.js +119 -0
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -0
- package/dist/adapters/kysely/kysely-query-builder.js +306 -0
- package/dist/adapters/kysely/kysely-query-builder.js.map +1 -0
- package/dist/adapters/kysely/kysely-query-compiler.js +67 -0
- package/dist/adapters/kysely/kysely-query-compiler.js.map +1 -0
- package/dist/adapters/kysely/kysely-query.js +158 -0
- package/dist/adapters/kysely/kysely-query.js.map +1 -0
- package/dist/adapters/kysely/kysely-uow-compiler.js +139 -0
- package/dist/adapters/kysely/kysely-uow-compiler.js.map +1 -0
- package/dist/adapters/kysely/kysely-uow-executor.js +89 -0
- package/dist/adapters/kysely/kysely-uow-executor.js.map +1 -0
- package/dist/adapters/kysely/migration/execute.js +176 -0
- package/dist/adapters/kysely/migration/execute.js.map +1 -0
- package/dist/fragment.d.ts +54 -0
- package/dist/fragment.d.ts.map +1 -0
- package/dist/fragment.js +92 -0
- package/dist/fragment.js.map +1 -0
- package/dist/id.d.ts +2 -0
- package/dist/migration-engine/auto-from-schema.js +116 -0
- package/dist/migration-engine/auto-from-schema.js.map +1 -0
- package/dist/migration-engine/create.d.ts +41 -0
- package/dist/migration-engine/create.d.ts.map +1 -0
- package/dist/migration-engine/create.js +58 -0
- package/dist/migration-engine/create.js.map +1 -0
- package/dist/migration-engine/shared.d.ts +90 -0
- package/dist/migration-engine/shared.d.ts.map +1 -0
- package/dist/migration-engine/shared.js +8 -0
- package/dist/migration-engine/shared.js.map +1 -0
- package/dist/mod.d.ts +55 -2
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +111 -2
- package/dist/mod.js.map +1 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column-builder.js +108 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column-builder.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column.js +55 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/entity.js +18 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/entity.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/common.js +183 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/common.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/enum.js +58 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/enum.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/foreign-keys.js +68 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/foreign-keys.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/unique-constraint.js +56 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/unique-constraint.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/utils/array.js +65 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/utils/array.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/conditions.js +81 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/conditions.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js +13 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js +10 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/sql.js +372 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/sql.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/subquery.js +23 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/subquery.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.js +62 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js +6 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js +8 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js +8 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js +6 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js.map +1 -0
- package/dist/query/condition-builder.d.ts +41 -0
- package/dist/query/condition-builder.d.ts.map +1 -0
- package/dist/query/condition-builder.js +93 -0
- package/dist/query/condition-builder.js.map +1 -0
- package/dist/query/cursor.d.ts +88 -0
- package/dist/query/cursor.d.ts.map +1 -0
- package/dist/query/cursor.js +103 -0
- package/dist/query/cursor.js.map +1 -0
- package/dist/query/orm/orm.d.ts +18 -0
- package/dist/query/orm/orm.d.ts.map +1 -0
- package/dist/query/orm/orm.js +48 -0
- package/dist/query/orm/orm.js.map +1 -0
- package/dist/query/query.d.ts +79 -0
- package/dist/query/query.d.ts.map +1 -0
- package/dist/query/query.js +1 -0
- package/dist/query/result-transform.js +155 -0
- package/dist/query/result-transform.js.map +1 -0
- package/dist/query/unit-of-work.d.ts +435 -0
- package/dist/query/unit-of-work.d.ts.map +1 -0
- package/dist/query/unit-of-work.js +549 -0
- package/dist/query/unit-of-work.js.map +1 -0
- package/dist/schema/create.d.ts +273 -116
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +410 -222
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/serialize.js +101 -0
- package/dist/schema/serialize.js.map +1 -0
- package/dist/schema-generator/schema-generator.d.ts +15 -0
- package/dist/schema-generator/schema-generator.d.ts.map +1 -0
- package/dist/shared/providers.d.ts +6 -0
- package/dist/shared/providers.d.ts.map +1 -0
- package/dist/util/import-generator.js +26 -0
- package/dist/util/import-generator.js.map +1 -0
- package/dist/util/parse.js +15 -0
- package/dist/util/parse.js.map +1 -0
- package/dist/util/types.d.ts +8 -0
- package/dist/util/types.d.ts.map +1 -0
- package/package.json +63 -2
- package/src/adapters/adapters.ts +22 -0
- package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +433 -0
- package/src/adapters/drizzle/drizzle-adapter.test.ts +122 -0
- package/src/adapters/drizzle/drizzle-adapter.ts +118 -0
- package/src/adapters/drizzle/drizzle-query.ts +234 -0
- package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +1084 -0
- package/src/adapters/drizzle/drizzle-uow-compiler.ts +546 -0
- package/src/adapters/drizzle/drizzle-uow-decoder.ts +165 -0
- package/src/adapters/drizzle/drizzle-uow-executor.ts +213 -0
- package/src/adapters/drizzle/generate.test.ts +643 -0
- package/src/adapters/drizzle/generate.ts +481 -0
- package/src/adapters/drizzle/join-column-utils.test.ts +79 -0
- package/src/adapters/drizzle/join-column-utils.ts +39 -0
- package/src/adapters/drizzle/migrate-drizzle.test.ts +226 -0
- package/src/adapters/drizzle/shared.ts +22 -0
- package/src/adapters/drizzle/test-utils.ts +56 -0
- package/src/adapters/kysely/kysely-adapter-pglite.test.ts +789 -0
- package/src/adapters/kysely/kysely-adapter.ts +196 -0
- package/src/adapters/kysely/kysely-query-builder.test.ts +1344 -0
- package/src/adapters/kysely/kysely-query-builder.ts +611 -0
- package/src/adapters/kysely/kysely-query-compiler.ts +124 -0
- package/src/adapters/kysely/kysely-query.ts +254 -0
- package/src/adapters/kysely/kysely-uow-compiler.test.ts +916 -0
- package/src/adapters/kysely/kysely-uow-compiler.ts +271 -0
- package/src/adapters/kysely/kysely-uow-executor.ts +149 -0
- package/src/adapters/kysely/kysely-uow-joins.test.ts +811 -0
- package/src/adapters/kysely/migration/execute-mysql.test.ts +1173 -0
- package/src/adapters/kysely/migration/execute-postgres.test.ts +2657 -0
- package/src/adapters/kysely/migration/execute.ts +382 -0
- package/src/adapters/kysely/migration/kysely-migrator.test.ts +197 -0
- package/src/fragment.test.ts +287 -0
- package/src/fragment.ts +198 -0
- package/src/migration-engine/auto-from-schema.test.ts +118 -58
- package/src/migration-engine/auto-from-schema.ts +103 -32
- package/src/migration-engine/create.test.ts +34 -46
- package/src/migration-engine/create.ts +41 -26
- package/src/migration-engine/shared.ts +26 -6
- package/src/mod.ts +197 -1
- package/src/query/condition-builder.test.ts +379 -0
- package/src/query/condition-builder.ts +294 -0
- package/src/query/cursor.test.ts +296 -0
- package/src/query/cursor.ts +147 -0
- package/src/query/orm/orm.ts +92 -0
- package/src/query/query-type.test.ts +429 -0
- package/src/query/query.ts +200 -0
- package/src/query/result-transform.test.ts +795 -0
- package/src/query/result-transform.ts +247 -0
- package/src/query/unit-of-work-types.test.ts +192 -0
- package/src/query/unit-of-work.test.ts +947 -0
- package/src/query/unit-of-work.ts +1199 -0
- package/src/schema/create.test.ts +653 -110
- package/src/schema/create.ts +708 -337
- package/src/schema/serialize.test.ts +559 -0
- package/src/schema/serialize.ts +359 -0
- package/src/schema-generator/schema-generator.ts +12 -0
- package/src/shared/config.ts +0 -8
- package/src/util/import-generator.ts +28 -0
- package/src/util/parse.ts +16 -0
- package/src/util/types.ts +4 -0
- package/tsconfig.json +1 -1
- package/tsdown.config.ts +11 -1
- package/vitest.config.ts +3 -0
- /package/dist/{cuid.js → id.js} +0 -0
- /package/src/{cuid.ts → id.ts} +0 -0
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
import { AnySchema, AnyTable, FragnoId, IdColumn, Index, Relation } from "../schema/create.js";
|
|
2
|
+
import { Condition, ConditionBuilder } from "./condition-builder.js";
|
|
3
|
+
import { CompiledJoin } from "./orm/orm.js";
|
|
4
|
+
import { SelectClause, SelectResult, TableToInsertValues, TableToUpdateValues } from "./query.js";
|
|
5
|
+
|
|
6
|
+
//#region src/query/unit-of-work.d.ts
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Builder for updateMany operations that supports both whereIndex and set chaining
|
|
10
|
+
*/
|
|
11
|
+
interface UpdateManyBuilder<TTable extends AnyTable> {
|
|
12
|
+
whereIndex<TIndexName extends ValidIndexName<TTable>>(indexName: TIndexName, condition?: (eb: IndexSpecificConditionBuilder<TTable, TIndexName>) => Condition | boolean): this;
|
|
13
|
+
set(values: TableToUpdateValues<TTable>): this;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Extract column names from a single index
|
|
17
|
+
*/
|
|
18
|
+
type IndexColumns<TIndex extends Index> = TIndex["columnNames"][number];
|
|
19
|
+
type RemoveEmptyObject<T> = T extends object ? (keyof T extends never ? never : T) : never;
|
|
20
|
+
/**
|
|
21
|
+
* Extract all indexed column names from a table's indexes
|
|
22
|
+
*/
|
|
23
|
+
type IndexedColumns<TIndexes extends Record<string, Index>> = TIndexes[keyof TIndexes] extends Index ? IndexColumns<TIndexes[keyof TIndexes]> : never;
|
|
24
|
+
type OmitNever<T> = { [K in keyof T as T[K] extends never ? never : K]: T[K] };
|
|
25
|
+
/**
|
|
26
|
+
* Extract the name of the ID column from a table
|
|
27
|
+
* Checks if column has 'id' property set to true (which IdColumn class has)
|
|
28
|
+
*/
|
|
29
|
+
type InferIdColumnName<TTable extends AnyTable> = keyof OmitNever<{ [K in keyof TTable["columns"]]: TTable["columns"][K] extends IdColumn<infer _, infer __, infer ___> ? K : never }>;
|
|
30
|
+
/**
|
|
31
|
+
* Get the columns for a specific index name.
|
|
32
|
+
* For "primary", returns only the ID column.
|
|
33
|
+
* For named indexes, returns the columns defined in that index.
|
|
34
|
+
*/
|
|
35
|
+
type ColumnsForIndex<TTable extends AnyTable, TIndexName$1 extends ValidIndexName<TTable>> = TIndexName$1 extends "primary" ? Pick<TTable["columns"], InferIdColumnName<TTable>> : TIndexName$1 extends keyof TTable["indexes"] ? Pick<TTable["columns"], IndexColumns<TTable["indexes"][TIndexName$1]>> : never;
|
|
36
|
+
/**
|
|
37
|
+
* ConditionBuilder restricted to indexed columns only.
|
|
38
|
+
* Used throughout Unit of Work to ensure all queries can leverage indexes for optimal performance.
|
|
39
|
+
*/
|
|
40
|
+
type IndexedConditionBuilder<TTable extends AnyTable> = ConditionBuilder<Pick<TTable["columns"], IndexedColumns<TTable["indexes"]>>>;
|
|
41
|
+
/**
|
|
42
|
+
* ConditionBuilder restricted to columns in a specific index.
|
|
43
|
+
*/
|
|
44
|
+
type IndexSpecificConditionBuilder<TTable extends AnyTable, TIndexName$1 extends ValidIndexName<TTable>> = ConditionBuilder<ColumnsForIndex<TTable, TIndexName$1>>;
|
|
45
|
+
/**
|
|
46
|
+
* Valid index names for a table, including the static "primary" index
|
|
47
|
+
*/
|
|
48
|
+
type ValidIndexName<TTable extends AnyTable> = "primary" | (string & keyof TTable["indexes"]);
|
|
49
|
+
/**
|
|
50
|
+
* Find options for Unit of Work (internal, used after builder finalization)
|
|
51
|
+
*/
|
|
52
|
+
type FindOptions<TTable extends AnyTable = AnyTable, TSelect$1 extends SelectClause<TTable> = SelectClause<TTable>> = {
|
|
53
|
+
/**
|
|
54
|
+
* Which index to use for this query (required)
|
|
55
|
+
*/
|
|
56
|
+
useIndex: string;
|
|
57
|
+
/**
|
|
58
|
+
* Select clause - which columns to return
|
|
59
|
+
*/
|
|
60
|
+
select?: TSelect$1;
|
|
61
|
+
/**
|
|
62
|
+
* Where clause - filtering restricted to indexed columns only
|
|
63
|
+
*/
|
|
64
|
+
where?: (eb: IndexedConditionBuilder<TTable>) => Condition | boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Order by index - specify which index to order by and direction
|
|
67
|
+
*/
|
|
68
|
+
orderByIndex?: {
|
|
69
|
+
indexName: string;
|
|
70
|
+
direction: "asc" | "desc";
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Cursor for pagination - continue after this cursor
|
|
74
|
+
*/
|
|
75
|
+
after?: string;
|
|
76
|
+
/**
|
|
77
|
+
* Cursor for pagination - continue before this cursor
|
|
78
|
+
*/
|
|
79
|
+
before?: string;
|
|
80
|
+
/**
|
|
81
|
+
* Number of results per page
|
|
82
|
+
*/
|
|
83
|
+
pageSize?: number;
|
|
84
|
+
/**
|
|
85
|
+
* Join operations to include related data
|
|
86
|
+
*/
|
|
87
|
+
joins?: CompiledJoin[];
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Unit of Work state machine
|
|
91
|
+
*/
|
|
92
|
+
type UOWState = "building-retrieval" | "building-mutation" | "executed";
|
|
93
|
+
/**
|
|
94
|
+
* Retrieval operation - read operations in the first phase
|
|
95
|
+
*/
|
|
96
|
+
type RetrievalOperation<TSchema extends AnySchema, TTable extends AnyTable = TSchema["tables"][keyof TSchema["tables"]]> = {
|
|
97
|
+
type: "find";
|
|
98
|
+
table: TTable;
|
|
99
|
+
indexName: string;
|
|
100
|
+
options: FindOptions<TTable, SelectClause<TTable>>;
|
|
101
|
+
} | {
|
|
102
|
+
type: "count";
|
|
103
|
+
table: TTable;
|
|
104
|
+
indexName: string;
|
|
105
|
+
options: Pick<FindOptions<TTable>, "where" | "useIndex">;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Mutation operations - write operations in the second phase
|
|
109
|
+
*/
|
|
110
|
+
type MutationOperation<TSchema extends AnySchema, TTable extends AnyTable = TSchema["tables"][keyof TSchema["tables"]]> = {
|
|
111
|
+
type: "update";
|
|
112
|
+
table: TTable["name"];
|
|
113
|
+
id: FragnoId | string;
|
|
114
|
+
checkVersion: boolean;
|
|
115
|
+
set: TableToUpdateValues<TTable>;
|
|
116
|
+
} | {
|
|
117
|
+
type: "create";
|
|
118
|
+
table: TTable["name"];
|
|
119
|
+
values: TableToInsertValues<TTable>;
|
|
120
|
+
generatedExternalId: string;
|
|
121
|
+
} | {
|
|
122
|
+
type: "delete";
|
|
123
|
+
table: TTable["name"];
|
|
124
|
+
id: FragnoId | string;
|
|
125
|
+
checkVersion: boolean;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Compiled mutation with metadata for execution
|
|
129
|
+
*/
|
|
130
|
+
interface CompiledMutation<TOutput$1> {
|
|
131
|
+
query: TOutput$1;
|
|
132
|
+
/**
|
|
133
|
+
* Number of rows this operation must affect for the transaction to succeed.
|
|
134
|
+
* If actual affected rows doesn't match, it indicates a version conflict.
|
|
135
|
+
* null means don't check affected rows (e.g., for create operations).
|
|
136
|
+
*/
|
|
137
|
+
expectedAffectedRows: number | null;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Compiler interface for Unit of Work operations
|
|
141
|
+
*/
|
|
142
|
+
interface UOWCompiler<TSchema extends AnySchema, TOutput$1> {
|
|
143
|
+
/**
|
|
144
|
+
* Compile a retrieval operation to the adapter's query format
|
|
145
|
+
*/
|
|
146
|
+
compileRetrievalOperation(op: RetrievalOperation<TSchema>): TOutput$1 | null;
|
|
147
|
+
/**
|
|
148
|
+
* Compile a mutation operation to the adapter's query format
|
|
149
|
+
*/
|
|
150
|
+
compileMutationOperation(op: MutationOperation<TSchema>): CompiledMutation<TOutput$1> | null;
|
|
151
|
+
}
|
|
152
|
+
type MutationResult = {
|
|
153
|
+
success: true;
|
|
154
|
+
createdInternalIds: (bigint | null)[];
|
|
155
|
+
} | {
|
|
156
|
+
success: false;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Executor interface for Unit of Work operations
|
|
160
|
+
*/
|
|
161
|
+
interface UOWExecutor<TOutput$1, TRawResult = unknown> {
|
|
162
|
+
/**
|
|
163
|
+
* Execute the retrieval phase - all queries run in a single transaction for snapshot isolation
|
|
164
|
+
*/
|
|
165
|
+
executeRetrievalPhase(retrievalBatch: TOutput$1[]): Promise<TRawResult[]>;
|
|
166
|
+
/**
|
|
167
|
+
* Execute the mutation phase - all queries run in a transaction with version checks
|
|
168
|
+
* Returns success status indicating if mutations completed without conflicts,
|
|
169
|
+
* and internal IDs for create operations (null if database doesn't support RETURNING)
|
|
170
|
+
*/
|
|
171
|
+
executeMutationPhase(mutationBatch: CompiledMutation<TOutput$1>[]): Promise<MutationResult>;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Decoder interface for Unit of Work retrieval results
|
|
175
|
+
*
|
|
176
|
+
* Transforms raw database results into application format (e.g., converting raw columns
|
|
177
|
+
* into FragnoId objects with external ID, internal ID, and version).
|
|
178
|
+
*/
|
|
179
|
+
interface UOWDecoder<TSchema extends AnySchema, TRawInput = unknown> {
|
|
180
|
+
/**
|
|
181
|
+
* Decode raw database results from the retrieval phase
|
|
182
|
+
*
|
|
183
|
+
* @param rawResults - Array of raw result sets from database queries
|
|
184
|
+
* @param operations - Array of retrieval operations that produced these results
|
|
185
|
+
* @returns Decoded results in application format
|
|
186
|
+
*/
|
|
187
|
+
(rawResults: TRawInput[], operations: RetrievalOperation<TSchema>[]): unknown[];
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Builder for find operations in Unit of Work
|
|
191
|
+
*/
|
|
192
|
+
declare class FindBuilder<TTable extends AnyTable, TSelect$1 extends SelectClause<TTable> = true, TJoinOut$1 = {}> {
|
|
193
|
+
#private;
|
|
194
|
+
constructor(tableName: string, table: TTable);
|
|
195
|
+
/**
|
|
196
|
+
* Specify which index to use and optionally filter the results
|
|
197
|
+
*/
|
|
198
|
+
whereIndex<TIndexName extends ValidIndexName<TTable>>(indexName: TIndexName, condition?: (eb: IndexSpecificConditionBuilder<TTable, TIndexName>) => Condition | boolean): this;
|
|
199
|
+
/**
|
|
200
|
+
* Specify columns to select
|
|
201
|
+
* @throws Error if selectCount() has already been called
|
|
202
|
+
*/
|
|
203
|
+
select<const TNewSelect extends SelectClause<TTable>>(columns: TNewSelect): FindBuilder<TTable, TNewSelect, TJoinOut$1>;
|
|
204
|
+
/**
|
|
205
|
+
* Select count instead of records
|
|
206
|
+
* @throws Error if select() has already been called
|
|
207
|
+
*/
|
|
208
|
+
selectCount(): this;
|
|
209
|
+
/**
|
|
210
|
+
* Order results by index in ascending or descending order
|
|
211
|
+
*/
|
|
212
|
+
orderByIndex<TIndexName extends ValidIndexName<TTable>>(indexName: TIndexName, direction: "asc" | "desc"): this;
|
|
213
|
+
/**
|
|
214
|
+
* Set cursor to continue pagination after this point (forward pagination)
|
|
215
|
+
*/
|
|
216
|
+
after(cursor: string): this;
|
|
217
|
+
/**
|
|
218
|
+
* Set cursor to continue pagination before this point (backward pagination)
|
|
219
|
+
*/
|
|
220
|
+
before(cursor: string): this;
|
|
221
|
+
/**
|
|
222
|
+
* Set the number of results per page
|
|
223
|
+
*/
|
|
224
|
+
pageSize(size: number): this;
|
|
225
|
+
/**
|
|
226
|
+
* Add joins to include related data
|
|
227
|
+
* Join where clauses are restricted to indexed columns only
|
|
228
|
+
*/
|
|
229
|
+
join<TNewJoinOut>(joinFn: (jb: IndexedJoinBuilder<TTable, {}>) => IndexedJoinBuilder<TTable, TNewJoinOut>): FindBuilder<TTable, TSelect$1, TNewJoinOut>;
|
|
230
|
+
/**
|
|
231
|
+
* @internal
|
|
232
|
+
*/
|
|
233
|
+
build(): {
|
|
234
|
+
type: "find";
|
|
235
|
+
indexName: string;
|
|
236
|
+
options: FindOptions<TTable, TSelect$1>;
|
|
237
|
+
} | {
|
|
238
|
+
type: "count";
|
|
239
|
+
indexName: string;
|
|
240
|
+
options: Pick<FindOptions<TTable>, "where" | "useIndex">;
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Builder for update operations in Unit of Work
|
|
245
|
+
*/
|
|
246
|
+
declare class UpdateBuilder<TTable extends AnyTable> {
|
|
247
|
+
#private;
|
|
248
|
+
constructor(tableName: string, id: FragnoId | string);
|
|
249
|
+
/**
|
|
250
|
+
* Specify values to update
|
|
251
|
+
*/
|
|
252
|
+
set(values: TableToUpdateValues<TTable>): this;
|
|
253
|
+
/**
|
|
254
|
+
* Enable version checking for optimistic concurrency control
|
|
255
|
+
* @throws Error if the ID is just a string (no version available)
|
|
256
|
+
*/
|
|
257
|
+
check(): this;
|
|
258
|
+
/**
|
|
259
|
+
* @internal
|
|
260
|
+
*/
|
|
261
|
+
build(): {
|
|
262
|
+
id: FragnoId | string;
|
|
263
|
+
checkVersion: boolean;
|
|
264
|
+
set: TableToUpdateValues<TTable>;
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Builder for delete operations in Unit of Work
|
|
269
|
+
*/
|
|
270
|
+
declare class DeleteBuilder {
|
|
271
|
+
#private;
|
|
272
|
+
constructor(tableName: string, id: FragnoId | string);
|
|
273
|
+
/**
|
|
274
|
+
* Enable version checking for optimistic concurrency control
|
|
275
|
+
* @throws Error if the ID is just a string (no version available)
|
|
276
|
+
*/
|
|
277
|
+
check(): this;
|
|
278
|
+
/**
|
|
279
|
+
* @internal
|
|
280
|
+
*/
|
|
281
|
+
build(): {
|
|
282
|
+
id: FragnoId | string;
|
|
283
|
+
checkVersion: boolean;
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Builder for join operations in Unit of Work
|
|
288
|
+
* Similar to FindBuilder but tailored for joins (no cursor pagination, no count mode)
|
|
289
|
+
*/
|
|
290
|
+
declare class JoinFindBuilder<TTable extends AnyTable, TSelect$1 extends SelectClause<TTable> = true, TJoinOut$1 = {}> {
|
|
291
|
+
#private;
|
|
292
|
+
constructor(tableName: string, table: TTable);
|
|
293
|
+
/**
|
|
294
|
+
* Specify which index to use and optionally filter the results
|
|
295
|
+
*/
|
|
296
|
+
whereIndex<TIndexName extends ValidIndexName<TTable>>(indexName: TIndexName, condition?: (eb: IndexSpecificConditionBuilder<TTable, TIndexName>) => Condition | boolean): this;
|
|
297
|
+
/**
|
|
298
|
+
* Specify columns to select
|
|
299
|
+
*/
|
|
300
|
+
select<const TNewSelect extends SelectClause<TTable>>(columns: TNewSelect): JoinFindBuilder<TTable, TNewSelect, TJoinOut$1>;
|
|
301
|
+
/**
|
|
302
|
+
* Order results by index in ascending or descending order
|
|
303
|
+
*/
|
|
304
|
+
orderByIndex<TIndexName extends ValidIndexName<TTable>>(indexName: TIndexName, direction: "asc" | "desc"): this;
|
|
305
|
+
/**
|
|
306
|
+
* Set the number of results to return
|
|
307
|
+
*/
|
|
308
|
+
pageSize(size: number): this;
|
|
309
|
+
/**
|
|
310
|
+
* Add joins to include related data
|
|
311
|
+
* Join where clauses are restricted to indexed columns only
|
|
312
|
+
*/
|
|
313
|
+
join<TNewJoinOut>(joinFn: (jb: IndexedJoinBuilder<TTable, {}>) => IndexedJoinBuilder<TTable, TNewJoinOut>): JoinFindBuilder<TTable, TSelect$1, TJoinOut$1 & TNewJoinOut>;
|
|
314
|
+
/**
|
|
315
|
+
* @internal
|
|
316
|
+
*/
|
|
317
|
+
build(): {
|
|
318
|
+
indexName: string | undefined;
|
|
319
|
+
select: TSelect$1 | undefined;
|
|
320
|
+
where: ((eb: IndexedConditionBuilder<TTable>) => Condition | boolean) | undefined;
|
|
321
|
+
orderByIndex: {
|
|
322
|
+
indexName: string;
|
|
323
|
+
direction: "asc" | "desc";
|
|
324
|
+
} | undefined;
|
|
325
|
+
pageSize: number | undefined;
|
|
326
|
+
joins: CompiledJoin[] | undefined;
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
interface MapRelationType<T> {
|
|
330
|
+
one: RemoveEmptyObject<T> | null;
|
|
331
|
+
many: RemoveEmptyObject<T>[];
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Join builder with indexed-only where clauses for Unit of Work
|
|
335
|
+
* TJoinOut accumulates the types of all joined relations
|
|
336
|
+
*/
|
|
337
|
+
type IndexedJoinBuilder<TTable extends AnyTable, TJoinOut$1> = { [K in keyof TTable["relations"]]: TTable["relations"][K] extends Relation<infer TRelationType, infer TTargetTable> ? <TSelect extends SelectClause<TTable["relations"][K]["table"]> = true, TNestedJoinOut = {}>(builderFn?: (builder: JoinFindBuilder<TTable["relations"][K]["table"]>) => JoinFindBuilder<TTable["relations"][K]["table"], TSelect, TNestedJoinOut>) => IndexedJoinBuilder<TTable, TJoinOut$1 & { [P in K]: MapRelationType<SelectResult<TTargetTable, TNestedJoinOut, TSelect>>[TRelationType] }> : never };
|
|
338
|
+
/**
|
|
339
|
+
* Build join operations with indexed-only where clauses for Unit of Work
|
|
340
|
+
* This ensures all join conditions can leverage indexes for optimal performance
|
|
341
|
+
*/
|
|
342
|
+
declare function buildJoinIndexed<TTable extends AnyTable, TJoinOut$1>(table: TTable, fn: (builder: IndexedJoinBuilder<TTable, {}>) => IndexedJoinBuilder<TTable, TJoinOut$1>): CompiledJoin[];
|
|
343
|
+
declare function createUnitOfWork<const TSchema extends AnySchema, const TRetrievalResults extends unknown[] = [], const TRawInput = unknown>(schema: TSchema, compiler: UOWCompiler<TSchema, unknown>, executor: UOWExecutor<unknown, TRawInput>, decoder: UOWDecoder<TSchema, TRawInput>, name?: string): UnitOfWork<TSchema, TRetrievalResults, TRawInput>;
|
|
344
|
+
/**
|
|
345
|
+
* Unit of Work implementation with optimistic concurrency control
|
|
346
|
+
*
|
|
347
|
+
* UOW has two phases:
|
|
348
|
+
* 1. Retrieval phase: Read operations to fetch entities with their versions
|
|
349
|
+
* 2. Mutation phase: Write operations that check versions before committing
|
|
350
|
+
*
|
|
351
|
+
* @example
|
|
352
|
+
* ```ts
|
|
353
|
+
* const uow = queryEngine.createUnitOfWork("update-user-balance");
|
|
354
|
+
*
|
|
355
|
+
* // Retrieval phase
|
|
356
|
+
* uow.find("users", (b) => b.where("primary", (eb) => eb("id", "=", userId)));
|
|
357
|
+
*
|
|
358
|
+
* // Execute retrieval and transition to mutation phase
|
|
359
|
+
* const [users] = await uow.executeRetrieve();
|
|
360
|
+
*
|
|
361
|
+
* // Mutation phase with version check
|
|
362
|
+
* const user = users[0];
|
|
363
|
+
* uow.update("users", user.id, (b) => b.set({ balance: newBalance }).check());
|
|
364
|
+
*
|
|
365
|
+
* // Execute mutations
|
|
366
|
+
* const { success } = await uow.executeMutations();
|
|
367
|
+
* if (!success) {
|
|
368
|
+
* // Handle version conflict
|
|
369
|
+
* }
|
|
370
|
+
* ```
|
|
371
|
+
*/
|
|
372
|
+
declare class UnitOfWork<const TSchema extends AnySchema, const TRetrievalResults extends unknown[] = [], const TRawInput = unknown> {
|
|
373
|
+
#private;
|
|
374
|
+
constructor(schema: TSchema, compiler: UOWCompiler<TSchema, unknown>, executor: UOWExecutor<unknown, TRawInput>, decoder: UOWDecoder<TSchema, TRawInput>, name?: string);
|
|
375
|
+
get schema(): TSchema;
|
|
376
|
+
get state(): UOWState;
|
|
377
|
+
get name(): string | undefined;
|
|
378
|
+
/**
|
|
379
|
+
* Execute the retrieval phase and transition to mutation phase
|
|
380
|
+
* Returns all results from find operations
|
|
381
|
+
*/
|
|
382
|
+
executeRetrieve(): Promise<TRetrievalResults>;
|
|
383
|
+
/**
|
|
384
|
+
* Add a find operation using a builder callback (retrieval phase only)
|
|
385
|
+
*/
|
|
386
|
+
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>;
|
|
387
|
+
/**
|
|
388
|
+
* Add a create operation (mutation phase only)
|
|
389
|
+
*/
|
|
390
|
+
create<TableName extends keyof TSchema["tables"] & string>(table: TableName, values: TableToInsertValues<TSchema["tables"][TableName]>): this;
|
|
391
|
+
/**
|
|
392
|
+
* Add an update operation using a builder callback (mutation phase only)
|
|
393
|
+
*/
|
|
394
|
+
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">): this;
|
|
395
|
+
/**
|
|
396
|
+
* Add a delete operation using a builder callback (mutation phase only)
|
|
397
|
+
*/
|
|
398
|
+
delete<TableName extends keyof TSchema["tables"] & string>(table: TableName, id: FragnoId | string, builderFn?: (builder: Omit<DeleteBuilder, "build">) => Omit<DeleteBuilder, "build">): this;
|
|
399
|
+
/**
|
|
400
|
+
* Execute the mutation phase
|
|
401
|
+
* Returns success flag indicating if mutations completed without conflicts
|
|
402
|
+
*/
|
|
403
|
+
executeMutations(): Promise<{
|
|
404
|
+
success: boolean;
|
|
405
|
+
}>;
|
|
406
|
+
/**
|
|
407
|
+
* Get the retrieval operations (for inspection/debugging)
|
|
408
|
+
*/
|
|
409
|
+
getRetrievalOperations(): ReadonlyArray<RetrievalOperation<TSchema>>;
|
|
410
|
+
/**
|
|
411
|
+
* Get the mutation operations (for inspection/debugging)
|
|
412
|
+
*/
|
|
413
|
+
getMutationOperations(): ReadonlyArray<MutationOperation<TSchema>>;
|
|
414
|
+
/**
|
|
415
|
+
* Get the IDs of created entities after executeMutations() has been called.
|
|
416
|
+
* Returns FragnoId objects with external IDs (always available) and internal IDs
|
|
417
|
+
* (available when database supports RETURNING).
|
|
418
|
+
*
|
|
419
|
+
* @throws Error if called before executeMutations()
|
|
420
|
+
* @returns Array of FragnoIds in the same order as create() calls
|
|
421
|
+
*/
|
|
422
|
+
getCreatedIds(): FragnoId[];
|
|
423
|
+
/**
|
|
424
|
+
* @internal
|
|
425
|
+
* Compile the unit of work to executable queries for testing
|
|
426
|
+
*/
|
|
427
|
+
compile<TOutput>(compiler: UOWCompiler<TSchema, TOutput>): {
|
|
428
|
+
name?: string;
|
|
429
|
+
retrievalBatch: TOutput[];
|
|
430
|
+
mutationBatch: CompiledMutation<TOutput>[];
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
//#endregion
|
|
434
|
+
export { CompiledMutation, DeleteBuilder, FindBuilder, IndexColumns, IndexedConditionBuilder, IndexedJoinBuilder, InferIdColumnName, JoinFindBuilder, MutationOperation, MutationResult, RetrievalOperation, UOWCompiler, UOWDecoder, UOWExecutor, UOWState, UnitOfWork, UpdateBuilder, UpdateManyBuilder, ValidIndexName, buildJoinIndexed, createUnitOfWork };
|
|
435
|
+
//# sourceMappingURL=unit-of-work.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unit-of-work.d.ts","names":[],"sources":["../../src/query/unit-of-work.ts"],"sourcesContent":[],"mappings":"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"}
|