@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.
Files changed (200) hide show
  1. package/.turbo/turbo-build.log +137 -13
  2. package/.turbo/turbo-test.log +36 -0
  3. package/CHANGELOG.md +7 -0
  4. package/dist/adapters/adapters.d.ts +18 -0
  5. package/dist/adapters/adapters.d.ts.map +1 -0
  6. package/dist/adapters/drizzle/drizzle-adapter.d.ts +21 -0
  7. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -0
  8. package/dist/adapters/drizzle/drizzle-adapter.js +62 -0
  9. package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -0
  10. package/dist/adapters/drizzle/drizzle-query.d.ts +17 -0
  11. package/dist/adapters/drizzle/drizzle-query.d.ts.map +1 -0
  12. package/dist/adapters/drizzle/drizzle-query.js +139 -0
  13. package/dist/adapters/drizzle/drizzle-query.js.map +1 -0
  14. package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts +9 -0
  15. package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts.map +1 -0
  16. package/dist/adapters/drizzle/drizzle-uow-compiler.js +300 -0
  17. package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +1 -0
  18. package/dist/adapters/drizzle/drizzle-uow-decoder.js +82 -0
  19. package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +1 -0
  20. package/dist/adapters/drizzle/drizzle-uow-executor.js +125 -0
  21. package/dist/adapters/drizzle/drizzle-uow-executor.js.map +1 -0
  22. package/dist/adapters/drizzle/generate.js +273 -0
  23. package/dist/adapters/drizzle/generate.js.map +1 -0
  24. package/dist/adapters/drizzle/join-column-utils.js +28 -0
  25. package/dist/adapters/drizzle/join-column-utils.js.map +1 -0
  26. package/dist/adapters/drizzle/shared.js +11 -0
  27. package/dist/adapters/drizzle/shared.js.map +1 -0
  28. package/dist/adapters/kysely/kysely-adapter.d.ts +23 -0
  29. package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -0
  30. package/dist/adapters/kysely/kysely-adapter.js +119 -0
  31. package/dist/adapters/kysely/kysely-adapter.js.map +1 -0
  32. package/dist/adapters/kysely/kysely-query-builder.js +306 -0
  33. package/dist/adapters/kysely/kysely-query-builder.js.map +1 -0
  34. package/dist/adapters/kysely/kysely-query-compiler.js +67 -0
  35. package/dist/adapters/kysely/kysely-query-compiler.js.map +1 -0
  36. package/dist/adapters/kysely/kysely-query.js +158 -0
  37. package/dist/adapters/kysely/kysely-query.js.map +1 -0
  38. package/dist/adapters/kysely/kysely-uow-compiler.js +139 -0
  39. package/dist/adapters/kysely/kysely-uow-compiler.js.map +1 -0
  40. package/dist/adapters/kysely/kysely-uow-executor.js +89 -0
  41. package/dist/adapters/kysely/kysely-uow-executor.js.map +1 -0
  42. package/dist/adapters/kysely/migration/execute.js +176 -0
  43. package/dist/adapters/kysely/migration/execute.js.map +1 -0
  44. package/dist/fragment.d.ts +54 -0
  45. package/dist/fragment.d.ts.map +1 -0
  46. package/dist/fragment.js +92 -0
  47. package/dist/fragment.js.map +1 -0
  48. package/dist/id.d.ts +2 -0
  49. package/dist/migration-engine/auto-from-schema.js +116 -0
  50. package/dist/migration-engine/auto-from-schema.js.map +1 -0
  51. package/dist/migration-engine/create.d.ts +41 -0
  52. package/dist/migration-engine/create.d.ts.map +1 -0
  53. package/dist/migration-engine/create.js +58 -0
  54. package/dist/migration-engine/create.js.map +1 -0
  55. package/dist/migration-engine/shared.d.ts +90 -0
  56. package/dist/migration-engine/shared.d.ts.map +1 -0
  57. package/dist/migration-engine/shared.js +8 -0
  58. package/dist/migration-engine/shared.js.map +1 -0
  59. package/dist/mod.d.ts +55 -2
  60. package/dist/mod.d.ts.map +1 -1
  61. package/dist/mod.js +111 -2
  62. package/dist/mod.js.map +1 -1
  63. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column-builder.js +108 -0
  64. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column-builder.js.map +1 -0
  65. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column.js +55 -0
  66. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column.js.map +1 -0
  67. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/entity.js +18 -0
  68. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/entity.js.map +1 -0
  69. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/common.js +183 -0
  70. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/common.js.map +1 -0
  71. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/enum.js +58 -0
  72. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/enum.js.map +1 -0
  73. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/foreign-keys.js +68 -0
  74. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/foreign-keys.js.map +1 -0
  75. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/unique-constraint.js +56 -0
  76. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/unique-constraint.js.map +1 -0
  77. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/utils/array.js +65 -0
  78. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/utils/array.js.map +1 -0
  79. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/conditions.js +81 -0
  80. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/conditions.js.map +1 -0
  81. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js +13 -0
  82. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js.map +1 -0
  83. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js +10 -0
  84. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js.map +1 -0
  85. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/sql.js +372 -0
  86. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/sql.js.map +1 -0
  87. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/subquery.js +23 -0
  88. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/subquery.js.map +1 -0
  89. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.js +62 -0
  90. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.js.map +1 -0
  91. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js +6 -0
  92. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js.map +1 -0
  93. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js +8 -0
  94. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js.map +1 -0
  95. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js +8 -0
  96. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js.map +1 -0
  97. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js +6 -0
  98. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js.map +1 -0
  99. package/dist/query/condition-builder.d.ts +41 -0
  100. package/dist/query/condition-builder.d.ts.map +1 -0
  101. package/dist/query/condition-builder.js +93 -0
  102. package/dist/query/condition-builder.js.map +1 -0
  103. package/dist/query/cursor.d.ts +88 -0
  104. package/dist/query/cursor.d.ts.map +1 -0
  105. package/dist/query/cursor.js +103 -0
  106. package/dist/query/cursor.js.map +1 -0
  107. package/dist/query/orm/orm.d.ts +18 -0
  108. package/dist/query/orm/orm.d.ts.map +1 -0
  109. package/dist/query/orm/orm.js +48 -0
  110. package/dist/query/orm/orm.js.map +1 -0
  111. package/dist/query/query.d.ts +79 -0
  112. package/dist/query/query.d.ts.map +1 -0
  113. package/dist/query/query.js +1 -0
  114. package/dist/query/result-transform.js +155 -0
  115. package/dist/query/result-transform.js.map +1 -0
  116. package/dist/query/unit-of-work.d.ts +435 -0
  117. package/dist/query/unit-of-work.d.ts.map +1 -0
  118. package/dist/query/unit-of-work.js +549 -0
  119. package/dist/query/unit-of-work.js.map +1 -0
  120. package/dist/schema/create.d.ts +273 -116
  121. package/dist/schema/create.d.ts.map +1 -1
  122. package/dist/schema/create.js +410 -222
  123. package/dist/schema/create.js.map +1 -1
  124. package/dist/schema/serialize.js +101 -0
  125. package/dist/schema/serialize.js.map +1 -0
  126. package/dist/schema-generator/schema-generator.d.ts +15 -0
  127. package/dist/schema-generator/schema-generator.d.ts.map +1 -0
  128. package/dist/shared/providers.d.ts +6 -0
  129. package/dist/shared/providers.d.ts.map +1 -0
  130. package/dist/util/import-generator.js +26 -0
  131. package/dist/util/import-generator.js.map +1 -0
  132. package/dist/util/parse.js +15 -0
  133. package/dist/util/parse.js.map +1 -0
  134. package/dist/util/types.d.ts +8 -0
  135. package/dist/util/types.d.ts.map +1 -0
  136. package/package.json +63 -2
  137. package/src/adapters/adapters.ts +22 -0
  138. package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +433 -0
  139. package/src/adapters/drizzle/drizzle-adapter.test.ts +122 -0
  140. package/src/adapters/drizzle/drizzle-adapter.ts +118 -0
  141. package/src/adapters/drizzle/drizzle-query.ts +234 -0
  142. package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +1084 -0
  143. package/src/adapters/drizzle/drizzle-uow-compiler.ts +546 -0
  144. package/src/adapters/drizzle/drizzle-uow-decoder.ts +165 -0
  145. package/src/adapters/drizzle/drizzle-uow-executor.ts +213 -0
  146. package/src/adapters/drizzle/generate.test.ts +643 -0
  147. package/src/adapters/drizzle/generate.ts +481 -0
  148. package/src/adapters/drizzle/join-column-utils.test.ts +79 -0
  149. package/src/adapters/drizzle/join-column-utils.ts +39 -0
  150. package/src/adapters/drizzle/migrate-drizzle.test.ts +226 -0
  151. package/src/adapters/drizzle/shared.ts +22 -0
  152. package/src/adapters/drizzle/test-utils.ts +56 -0
  153. package/src/adapters/kysely/kysely-adapter-pglite.test.ts +789 -0
  154. package/src/adapters/kysely/kysely-adapter.ts +196 -0
  155. package/src/adapters/kysely/kysely-query-builder.test.ts +1344 -0
  156. package/src/adapters/kysely/kysely-query-builder.ts +611 -0
  157. package/src/adapters/kysely/kysely-query-compiler.ts +124 -0
  158. package/src/adapters/kysely/kysely-query.ts +254 -0
  159. package/src/adapters/kysely/kysely-uow-compiler.test.ts +916 -0
  160. package/src/adapters/kysely/kysely-uow-compiler.ts +271 -0
  161. package/src/adapters/kysely/kysely-uow-executor.ts +149 -0
  162. package/src/adapters/kysely/kysely-uow-joins.test.ts +811 -0
  163. package/src/adapters/kysely/migration/execute-mysql.test.ts +1173 -0
  164. package/src/adapters/kysely/migration/execute-postgres.test.ts +2657 -0
  165. package/src/adapters/kysely/migration/execute.ts +382 -0
  166. package/src/adapters/kysely/migration/kysely-migrator.test.ts +197 -0
  167. package/src/fragment.test.ts +287 -0
  168. package/src/fragment.ts +198 -0
  169. package/src/migration-engine/auto-from-schema.test.ts +118 -58
  170. package/src/migration-engine/auto-from-schema.ts +103 -32
  171. package/src/migration-engine/create.test.ts +34 -46
  172. package/src/migration-engine/create.ts +41 -26
  173. package/src/migration-engine/shared.ts +26 -6
  174. package/src/mod.ts +197 -1
  175. package/src/query/condition-builder.test.ts +379 -0
  176. package/src/query/condition-builder.ts +294 -0
  177. package/src/query/cursor.test.ts +296 -0
  178. package/src/query/cursor.ts +147 -0
  179. package/src/query/orm/orm.ts +92 -0
  180. package/src/query/query-type.test.ts +429 -0
  181. package/src/query/query.ts +200 -0
  182. package/src/query/result-transform.test.ts +795 -0
  183. package/src/query/result-transform.ts +247 -0
  184. package/src/query/unit-of-work-types.test.ts +192 -0
  185. package/src/query/unit-of-work.test.ts +947 -0
  186. package/src/query/unit-of-work.ts +1199 -0
  187. package/src/schema/create.test.ts +653 -110
  188. package/src/schema/create.ts +708 -337
  189. package/src/schema/serialize.test.ts +559 -0
  190. package/src/schema/serialize.ts +359 -0
  191. package/src/schema-generator/schema-generator.ts +12 -0
  192. package/src/shared/config.ts +0 -8
  193. package/src/util/import-generator.ts +28 -0
  194. package/src/util/parse.ts +16 -0
  195. package/src/util/types.ts +4 -0
  196. package/tsconfig.json +1 -1
  197. package/tsdown.config.ts +11 -1
  198. package/vitest.config.ts +3 -0
  199. /package/dist/{cuid.js → id.js} +0 -0
  200. /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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"}