@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,62 @@
1
+ import { entityKind } from "./entity.js";
2
+ import { TableName } from "./table.utils.js";
3
+
4
+ //#region ../../node_modules/.bun/drizzle-orm@0.44.6+4fae081eecb963e2/node_modules/drizzle-orm/table.js
5
+ const Schema = Symbol.for("drizzle:Schema");
6
+ const Columns = Symbol.for("drizzle:Columns");
7
+ const ExtraConfigColumns = Symbol.for("drizzle:ExtraConfigColumns");
8
+ const OriginalName = Symbol.for("drizzle:OriginalName");
9
+ const BaseName = Symbol.for("drizzle:BaseName");
10
+ const IsAlias = Symbol.for("drizzle:IsAlias");
11
+ const ExtraConfigBuilder = Symbol.for("drizzle:ExtraConfigBuilder");
12
+ const IsDrizzleTable = Symbol.for("drizzle:IsDrizzleTable");
13
+ var Table = class {
14
+ static [entityKind] = "Table";
15
+ /** @internal */
16
+ static Symbol = {
17
+ Name: TableName,
18
+ Schema,
19
+ OriginalName,
20
+ Columns,
21
+ ExtraConfigColumns,
22
+ BaseName,
23
+ IsAlias,
24
+ ExtraConfigBuilder
25
+ };
26
+ /**
27
+ * @internal
28
+ * Can be changed if the table is aliased.
29
+ */
30
+ [TableName];
31
+ /**
32
+ * @internal
33
+ * Used to store the original name of the table, before any aliasing.
34
+ */
35
+ [OriginalName];
36
+ /** @internal */
37
+ [Schema];
38
+ /** @internal */
39
+ [Columns];
40
+ /** @internal */
41
+ [ExtraConfigColumns];
42
+ /**
43
+ * @internal
44
+ * Used to store the table name before the transformation via the `tableCreator` functions.
45
+ */
46
+ [BaseName];
47
+ /** @internal */
48
+ [IsAlias] = false;
49
+ /** @internal */
50
+ [IsDrizzleTable] = true;
51
+ /** @internal */
52
+ [ExtraConfigBuilder] = void 0;
53
+ constructor(name, schema, baseName) {
54
+ this[TableName] = this[OriginalName] = name;
55
+ this[Schema] = schema;
56
+ this[BaseName] = baseName;
57
+ }
58
+ };
59
+
60
+ //#endregion
61
+ export { IsAlias, Table };
62
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","names":[],"sources":["../../../../../../../../node_modules/.bun/drizzle-orm@0.44.6+4fae081eecb963e2/node_modules/drizzle-orm/table.js"],"sourcesContent":["import { entityKind } from \"./entity.js\";\nimport { TableName } from \"./table.utils.js\";\nconst Schema = Symbol.for(\"drizzle:Schema\");\nconst Columns = Symbol.for(\"drizzle:Columns\");\nconst ExtraConfigColumns = Symbol.for(\"drizzle:ExtraConfigColumns\");\nconst OriginalName = Symbol.for(\"drizzle:OriginalName\");\nconst BaseName = Symbol.for(\"drizzle:BaseName\");\nconst IsAlias = Symbol.for(\"drizzle:IsAlias\");\nconst ExtraConfigBuilder = Symbol.for(\"drizzle:ExtraConfigBuilder\");\nconst IsDrizzleTable = Symbol.for(\"drizzle:IsDrizzleTable\");\nclass Table {\n static [entityKind] = \"Table\";\n /** @internal */\n static Symbol = {\n Name: TableName,\n Schema,\n OriginalName,\n Columns,\n ExtraConfigColumns,\n BaseName,\n IsAlias,\n ExtraConfigBuilder\n };\n /**\n * @internal\n * Can be changed if the table is aliased.\n */\n [TableName];\n /**\n * @internal\n * Used to store the original name of the table, before any aliasing.\n */\n [OriginalName];\n /** @internal */\n [Schema];\n /** @internal */\n [Columns];\n /** @internal */\n [ExtraConfigColumns];\n /**\n * @internal\n * Used to store the table name before the transformation via the `tableCreator` functions.\n */\n [BaseName];\n /** @internal */\n [IsAlias] = false;\n /** @internal */\n [IsDrizzleTable] = true;\n /** @internal */\n [ExtraConfigBuilder] = void 0;\n constructor(name, schema, baseName) {\n this[TableName] = this[OriginalName] = name;\n this[Schema] = schema;\n this[BaseName] = baseName;\n }\n}\nfunction isTable(table) {\n return typeof table === \"object\" && table !== null && IsDrizzleTable in table;\n}\nfunction getTableName(table) {\n return table[TableName];\n}\nfunction getTableUniqueName(table) {\n return `${table[Schema] ?? \"public\"}.${table[TableName]}`;\n}\nexport {\n BaseName,\n Columns,\n ExtraConfigBuilder,\n ExtraConfigColumns,\n IsAlias,\n OriginalName,\n Schema,\n Table,\n getTableName,\n getTableUniqueName,\n isTable\n};\n//# sourceMappingURL=table.js.map"],"x_google_ignoreList":[0],"mappings":";;;;AAEA,MAAM,SAAS,OAAO,IAAI,iBAAiB;AAC3C,MAAM,UAAU,OAAO,IAAI,kBAAkB;AAC7C,MAAM,qBAAqB,OAAO,IAAI,6BAA6B;AACnE,MAAM,eAAe,OAAO,IAAI,uBAAuB;AACvD,MAAM,WAAW,OAAO,IAAI,mBAAmB;AAC/C,MAAM,UAAU,OAAO,IAAI,kBAAkB;AAC7C,MAAM,qBAAqB,OAAO,IAAI,6BAA6B;AACnE,MAAM,iBAAiB,OAAO,IAAI,yBAAyB;AAC3D,IAAM,QAAN,MAAY;CACV,QAAQ,cAAc;;CAEtB,OAAO,SAAS;EACd,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACD;;;;;CAKD,CAAC;;;;;CAKD,CAAC;;CAED,CAAC;;CAED,CAAC;;CAED,CAAC;;;;;CAKD,CAAC;;CAED,CAAC,WAAW;;CAEZ,CAAC,kBAAkB;;CAEnB,CAAC,sBAAsB,KAAK;CAC5B,YAAY,MAAM,QAAQ,UAAU;AAClC,OAAK,aAAa,KAAK,gBAAgB;AACvC,OAAK,UAAU;AACf,OAAK,YAAY"}
@@ -0,0 +1,6 @@
1
+ //#region ../../node_modules/.bun/drizzle-orm@0.44.6+4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js
2
+ const TableName = Symbol.for("drizzle:Name");
3
+
4
+ //#endregion
5
+ export { TableName };
6
+ //# sourceMappingURL=table.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.utils.js","names":[],"sources":["../../../../../../../../node_modules/.bun/drizzle-orm@0.44.6+4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js"],"sourcesContent":["const TableName = Symbol.for(\"drizzle:Name\");\nexport {\n TableName\n};\n//# sourceMappingURL=table.utils.js.map"],"x_google_ignoreList":[0],"mappings":";AAAA,MAAM,YAAY,OAAO,IAAI,eAAe"}
@@ -0,0 +1,8 @@
1
+ //#region ../../node_modules/.bun/drizzle-orm@0.44.6+4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js
2
+ function iife(fn, ...args) {
3
+ return fn(...args);
4
+ }
5
+
6
+ //#endregion
7
+ export { iife };
8
+ //# sourceMappingURL=tracing-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing-utils.js","names":[],"sources":["../../../../../../../../node_modules/.bun/drizzle-orm@0.44.6+4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js"],"sourcesContent":["function iife(fn, ...args) {\n return fn(...args);\n}\nexport {\n iife\n};\n//# sourceMappingURL=tracing-utils.js.map"],"x_google_ignoreList":[0],"mappings":";AAAA,SAAS,KAAK,IAAI,GAAG,MAAM;AACzB,QAAO,GAAG,GAAG,KAAK"}
@@ -0,0 +1,8 @@
1
+ //#region ../../node_modules/.bun/drizzle-orm@0.44.6+4fae081eecb963e2/node_modules/drizzle-orm/tracing.js
2
+ const tracer = { startActiveSpan(name, fn) {
3
+ return fn();
4
+ } };
5
+
6
+ //#endregion
7
+ export { tracer };
8
+ //# sourceMappingURL=tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.js","names":[],"sources":["../../../../../../../../node_modules/.bun/drizzle-orm@0.44.6+4fae081eecb963e2/node_modules/drizzle-orm/tracing.js"],"sourcesContent":["import { iife } from \"./tracing-utils.js\";\nimport { npmVersion } from \"./version.js\";\nlet otel;\nlet rawTracer;\nconst tracer = {\n startActiveSpan(name, fn) {\n if (!otel) {\n return fn();\n }\n if (!rawTracer) {\n rawTracer = otel.trace.getTracer(\"drizzle-orm\", npmVersion);\n }\n return iife(\n (otel2, rawTracer2) => rawTracer2.startActiveSpan(\n name,\n (span) => {\n try {\n return fn(span);\n } catch (e) {\n span.setStatus({\n code: otel2.SpanStatusCode.ERROR,\n message: e instanceof Error ? e.message : \"Unknown error\"\n // eslint-disable-line no-instanceof/no-instanceof\n });\n throw e;\n } finally {\n span.end();\n }\n }\n ),\n otel,\n rawTracer\n );\n }\n};\nexport {\n tracer\n};\n//# sourceMappingURL=tracing.js.map"],"x_google_ignoreList":[0],"mappings":";AAIA,MAAM,SAAS,EACb,gBAAgB,MAAM,IAAI;AAEtB,QAAO,IAAI;GA2BhB"}
@@ -0,0 +1,6 @@
1
+ //#region ../../node_modules/.bun/drizzle-orm@0.44.6+4fae081eecb963e2/node_modules/drizzle-orm/view-common.js
2
+ const ViewBaseConfig = Symbol.for("drizzle:ViewBaseConfig");
3
+
4
+ //#endregion
5
+ export { ViewBaseConfig };
6
+ //# sourceMappingURL=view-common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-common.js","names":[],"sources":["../../../../../../../../node_modules/.bun/drizzle-orm@0.44.6+4fae081eecb963e2/node_modules/drizzle-orm/view-common.js"],"sourcesContent":["const ViewBaseConfig = Symbol.for(\"drizzle:ViewBaseConfig\");\nexport {\n ViewBaseConfig\n};\n//# sourceMappingURL=view-common.js.map"],"x_google_ignoreList":[0],"mappings":";AAAA,MAAM,iBAAiB,OAAO,IAAI,yBAAyB"}
@@ -0,0 +1,41 @@
1
+ import { AnyColumn, FragnoId, IdColumn } from "../schema/create.js";
2
+
3
+ //#region src/query/condition-builder.d.ts
4
+ type Condition = {
5
+ type: "compare";
6
+ a: AnyColumn;
7
+ operator: Operator;
8
+ b: AnyColumn | unknown | null;
9
+ } | {
10
+ type: "or" | "and";
11
+ items: Condition[];
12
+ } | {
13
+ type: "not";
14
+ item: Condition;
15
+ };
16
+ /**
17
+ * Helper type that allows FragnoId for ID columns and reference columns (bigint).
18
+ * Used in ConditionBuilder to accept FragnoId values in where conditions.
19
+ */
20
+ type AcceptsFragnoId<T extends AnyColumn> = T extends IdColumn ? T["$in"] | FragnoId : T["$in"] extends bigint ? T["$in"] | FragnoId : T["$in"];
21
+ type ConditionBuilder<Columns extends Record<string, AnyColumn>> = {
22
+ <ColName extends keyof Columns>(a: ColName, operator: (typeof valueOperators)[number] | (typeof stringOperators)[number], b: AcceptsFragnoId<Columns[ColName]> | null): Condition;
23
+ <ColName extends keyof Columns>(a: ColName, operator: (typeof arrayOperators)[number], b: AcceptsFragnoId<Columns[ColName]>[]): Condition;
24
+ /**
25
+ * Boolean values
26
+ */
27
+ <ColName extends keyof Columns>(a: ColName): Condition;
28
+ and: (...v: (Condition | boolean)[]) => Condition | boolean;
29
+ or: (...v: (Condition | boolean)[]) => Condition | boolean;
30
+ not: (v: Condition | boolean) => Condition | boolean;
31
+ isNull: (a: keyof Columns) => Condition;
32
+ isNotNull: (a: keyof Columns) => Condition;
33
+ };
34
+ declare const stringOperators: readonly ["contains", "starts with", "ends with", "not contains", "not starts with", "not ends with"];
35
+ declare const arrayOperators: readonly ["in", "not in"];
36
+ declare const valueOperators: readonly ["=", "!=", ">", ">=", "<", "<=", "is", "is not"];
37
+ declare const operators: readonly ["=", "!=", ">", ">=", "<", "<=", "is", "is not", "in", "not in", "contains", "starts with", "ends with", "not contains", "not starts with", "not ends with"];
38
+ type Operator = (typeof operators)[number];
39
+ //#endregion
40
+ export { Condition, ConditionBuilder };
41
+ //# sourceMappingURL=condition-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-builder.d.ts","names":[],"sources":["../../src/query/condition-builder.ts"],"sourcesContent":[],"mappings":";;;KAIY,SAAA;EAAA,IAAA,EAAA,SAAS;EAGZ,CAAA,EAAA,SAAA;EACO,QAAA,EAAA,QAAA;EACP,CAAA,EAAA,SAAA,GAAA,OAAA,GAAA,IAAA;CAII,GAAA;EAID,IAAA,EAAA,IAAA,GAAA,KAAA;EAAS,KAAA,EAJR,SAIQ,EAAA;AACf,CAAA,GAQD;EAA0B,IAAA,EAAA,KAAA;EAAa,IAAA,EAThC,SASgC;CAAU;;;;;KAAjD,eAGY,CAAA,UAHc,SAGd,CAAA,GAH2B,CAG3B,SAHqC,QAGrC,GAFb,CAEa,CAAA,KAAA,CAAA,GAFF,QAEE,GADb,CACa,CAAA,KAAA,CAAA,SAAA,MAAA,GAAX,CAAW,CAAA,KAAA,CAAA,GAAA,QAAA,GACX,CADW,CAAA,KAAA,CAAA;AACX,KAEM,gBAFN,CAAA,gBAEuC,MAFvC,CAAA,MAAA,EAEsD,SAFtD,CAAA,CAAA,GAAA;EAAC,CAAA,gBAAA,MAGkB,OAHlB,CAAA,CAAA,CAAA,EAIA,OAJA,EAAA,QAAA,EAAA,CAAA,OAKe,cALf,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAKiD,eALjD,CAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAMA,eANA,CAMgB,OANhB,CAMwB,OANxB,CAAA,CAAA,GAAA,IAAA,CAAA,EAOF,SAPE;EAEK,CAAA,gBAAA,MAOa,OAPG,CAAA,CAAA,CAAA,EAQrB,OARqB,EAAA,QAAA,EAAA,CAAA,OASN,cATM,CAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAUrB,eAVqB,CAUL,OAVK,CAUG,OAVH,CAAA,CAAA,EAAA,CAAA,EAWvB,SAXuB;EAAgC;;;EAErD,CAAA,gBAAA,MAckB,OAdlB,CAAA,CAAA,CAAA,EAc8B,OAd9B,CAAA,EAcwC,SAdxC;EACe,GAAA,EAAA,CAAA,GAAA,CAAA,EAAA,CAeP,SAfO,GAAA,OAAA,CAAA,EAAA,EAAA,GAeoB,SAfpB,GAAA,OAAA;EAAkC,EAAA,EAAA,CAAA,GAAA,CAAA,EAAA,CAgB1C,SAhB0C,GAAA,OAAA,CAAA,EAAA,EAAA,GAgBf,SAhBe,GAAA,OAAA;EACjC,GAAA,EAAA,CAAA,CAAA,EAgBZ,SAhBY,GAAA,OAAA,EAAA,GAgBY,SAhBZ,GAAA,OAAA;EAAQ,MAAA,EAAA,CAAA,CAAA,EAAA,MAkBX,OAlBW,EAAA,GAkBC,SAlBD;EAAxB,SAAA,EAAA,CAAA,CAAA,EAAA,MAmBgB,OAnBhB,EAAA,GAmB4B,SAnB5B;CACF;cAsBC,eApBmB,EAAA,SAAA,CAAA,UAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,eAAA,CAAA;cA+BnB,cA9BC,EAAA,SAAA,CAAA,IAAA,EAAA,QAAA,CAAA;cAgCD,cA/BgB,EAAA,SAAA,CAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,CAAA;AACC,cAmCV,SAnCU,EAAA,SAAA,CAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,IAAA,EAAA,GAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,eAAA,CAAA;AAAQ,KAqCnB,QAAA,GArCmB,CAAA,OAqCA,SArCA,CAAA,CAAA,MAAA,CAAA"}
@@ -0,0 +1,93 @@
1
+ //#region src/query/condition-builder.ts
2
+ const stringOperators = [
3
+ "contains",
4
+ "starts with",
5
+ "ends with",
6
+ "not contains",
7
+ "not starts with",
8
+ "not ends with"
9
+ ];
10
+ const arrayOperators = ["in", "not in"];
11
+ const valueOperators = [
12
+ "=",
13
+ "!=",
14
+ ">",
15
+ ">=",
16
+ "<",
17
+ "<=",
18
+ "is",
19
+ "is not"
20
+ ];
21
+ const operators = [
22
+ ...valueOperators,
23
+ ...arrayOperators,
24
+ ...stringOperators
25
+ ];
26
+ function createBuilder(columns) {
27
+ function col(name) {
28
+ const out = columns[name];
29
+ if (!out) throw new Error(`Invalid column name ${String(name)}`);
30
+ return out;
31
+ }
32
+ const builder = (...args) => {
33
+ if (args.length === 3) {
34
+ const [a, operator, b] = args;
35
+ if (!operators.includes(operator)) throw new Error(`Unsupported operator: ${operator}`);
36
+ return {
37
+ type: "compare",
38
+ a: col(a),
39
+ b,
40
+ operator
41
+ };
42
+ }
43
+ return {
44
+ type: "compare",
45
+ a: col(args[0]),
46
+ operator: "=",
47
+ b: true
48
+ };
49
+ };
50
+ builder.isNull = (a) => builder(a, "is", null);
51
+ builder.isNotNull = (a) => builder(a, "is not", null);
52
+ builder.not = (condition) => {
53
+ if (typeof condition === "boolean") return !condition;
54
+ return {
55
+ type: "not",
56
+ item: condition
57
+ };
58
+ };
59
+ builder.or = (...conditions) => {
60
+ const out = {
61
+ type: "or",
62
+ items: []
63
+ };
64
+ for (const item of conditions) {
65
+ if (item === true) return true;
66
+ if (item === false) continue;
67
+ out.items.push(item);
68
+ }
69
+ if (out.items.length === 0) return false;
70
+ return out;
71
+ };
72
+ builder.and = (...conditions) => {
73
+ const out = {
74
+ type: "and",
75
+ items: []
76
+ };
77
+ for (const item of conditions) {
78
+ if (item === true) continue;
79
+ if (item === false) return false;
80
+ out.items.push(item);
81
+ }
82
+ if (out.items.length === 0) return true;
83
+ return out;
84
+ };
85
+ return builder;
86
+ }
87
+ function buildCondition(columns, input) {
88
+ return input(createBuilder(columns));
89
+ }
90
+
91
+ //#endregion
92
+ export { buildCondition };
93
+ //# sourceMappingURL=condition-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-builder.js","names":["builder: ConditionBuilder<Columns>"],"sources":["../../src/query/condition-builder.ts"],"sourcesContent":["import type { AnyColumn, FragnoId, IdColumn } from \"../schema/create\";\n\nexport type ConditionType = \"compare\" | \"and\" | \"or\" | \"not\";\n\nexport type Condition =\n | {\n type: \"compare\";\n a: AnyColumn;\n operator: Operator;\n b: AnyColumn | unknown | null;\n }\n | {\n type: \"or\" | \"and\";\n items: Condition[];\n }\n | {\n type: \"not\";\n item: Condition;\n };\n\n// TODO: we temporarily dropped support for comparing against another column, because Prisma ORM still have problems with it.\n\n/**\n * Helper type that allows FragnoId for ID columns and reference columns (bigint).\n * Used in ConditionBuilder to accept FragnoId values in where conditions.\n */\ntype AcceptsFragnoId<T extends AnyColumn> = T extends IdColumn\n ? T[\"$in\"] | FragnoId\n : T[\"$in\"] extends bigint\n ? T[\"$in\"] | FragnoId\n : T[\"$in\"];\n\nexport type ConditionBuilder<Columns extends Record<string, AnyColumn>> = {\n <ColName extends keyof Columns>(\n a: ColName,\n operator: (typeof valueOperators)[number] | (typeof stringOperators)[number],\n b: AcceptsFragnoId<Columns[ColName]> | null,\n ): Condition;\n\n <ColName extends keyof Columns>(\n a: ColName,\n operator: (typeof arrayOperators)[number],\n b: AcceptsFragnoId<Columns[ColName]>[],\n ): Condition;\n\n /**\n * Boolean values\n */\n <ColName extends keyof Columns>(a: ColName): Condition;\n\n and: (...v: (Condition | boolean)[]) => Condition | boolean;\n or: (...v: (Condition | boolean)[]) => Condition | boolean;\n not: (v: Condition | boolean) => Condition | boolean;\n\n isNull: (a: keyof Columns) => Condition;\n isNotNull: (a: keyof Columns) => Condition;\n};\n\n// replacement for `like` (Prisma doesn't support `like`)\nconst stringOperators = [\n \"contains\",\n \"starts with\",\n \"ends with\",\n\n \"not contains\",\n \"not starts with\",\n \"not ends with\",\n // excluded `regexp` since MSSQL doesn't support it, may re-consider\n] as const;\n\nconst arrayOperators = [\"in\", \"not in\"] as const;\n\nconst valueOperators = [\"=\", \"!=\", \">\", \">=\", \"<\", \"<=\", \"is\", \"is not\"] as const;\n\n// JSON specific operators are not included, some databases don't support them\n// `match` requires additional extensions & configurations on SQLite and PostgreSQL\n// MySQL & SQLite requires workarounds to support `ilike`\nexport const operators = [...valueOperators, ...arrayOperators, ...stringOperators] as const;\n\nexport type Operator = (typeof operators)[number];\n\nexport function createBuilder<Columns extends Record<string, AnyColumn>>(\n columns: Columns,\n): ConditionBuilder<Columns> {\n function col(name: keyof Columns) {\n const out = columns[name];\n if (!out) {\n throw new Error(`Invalid column name ${String(name)}`);\n }\n\n return out;\n }\n\n const builder: ConditionBuilder<Columns> = (...args: [string, Operator, unknown] | [string]) => {\n if (args.length === 3) {\n const [a, operator, b] = args;\n\n if (!operators.includes(operator)) throw new Error(`Unsupported operator: ${operator}`);\n\n return {\n type: \"compare\",\n a: col(a),\n b,\n operator,\n };\n }\n\n return {\n type: \"compare\",\n a: col(args[0]),\n operator: \"=\",\n b: true,\n };\n };\n\n builder.isNull = (a) => builder(a, \"is\", null);\n builder.isNotNull = (a) => builder(a, \"is not\", null);\n builder.not = (condition) => {\n if (typeof condition === \"boolean\") return !condition;\n\n return {\n type: \"not\",\n item: condition,\n };\n };\n\n builder.or = (...conditions) => {\n const out = {\n type: \"or\",\n items: [] as Condition[],\n } as const;\n\n for (const item of conditions) {\n if (item === true) return true;\n if (item === false) continue;\n\n out.items.push(item);\n }\n\n if (out.items.length === 0) return false;\n return out;\n };\n\n builder.and = (...conditions) => {\n const out = {\n type: \"and\",\n items: [] as Condition[],\n } as const;\n\n for (const item of conditions) {\n if (item === true) continue;\n if (item === false) return false;\n\n out.items.push(item);\n }\n\n if (out.items.length === 0) return true;\n return out;\n };\n\n return builder;\n}\n\nexport function buildCondition<T, Columns extends Record<string, AnyColumn>>(\n columns: Columns,\n input: (builder: ConditionBuilder<Columns>) => T,\n): T {\n return input(createBuilder(columns));\n}\n\n/**\n * Create a ConditionBuilder that only allows comparisons on indexed columns.\n * Used in Unit of Work to ensure queries can leverage indexes for optimal performance.\n *\n * @param columns - The full set of columns from the table\n * @param indexedColumnNames - Set of column names that are part of indexes\n * @returns A ConditionBuilder restricted to indexed columns only\n *\n * @example\n * ```ts\n * const builder = createIndexedBuilder(\n * table.columns,\n * new Set([\"id\", \"userId\", \"createdAt\"])\n * );\n * const condition = builder(\"userId\", \"=\", \"123\");\n * ```\n */\nexport function createIndexedBuilder<Columns extends Record<string, AnyColumn>>(\n columns: Columns,\n indexedColumnNames: Set<string>,\n): ConditionBuilder<Columns> {\n function col(name: keyof Columns) {\n const columnName = String(name);\n\n if (!indexedColumnNames.has(columnName)) {\n throw new Error(\n `Column \"${columnName}\" is not indexed. Only indexed columns can be used in Unit of Work queries. ` +\n `Available indexed columns: ${Array.from(indexedColumnNames).join(\", \")}`,\n );\n }\n\n const out = columns[name];\n if (!out) {\n throw new Error(`Invalid column name ${columnName}`);\n }\n\n return out;\n }\n\n const builder: ConditionBuilder<Columns> = (...args: [string, Operator, unknown] | [string]) => {\n if (args.length === 3) {\n const [a, operator, b] = args;\n\n if (!operators.includes(operator)) {\n throw new Error(`Unsupported operator: ${operator}`);\n }\n\n return {\n type: \"compare\",\n a: col(a),\n b,\n operator,\n };\n }\n\n return {\n type: \"compare\",\n a: col(args[0]),\n operator: \"=\",\n b: true,\n };\n };\n\n builder.isNull = (a) => builder(a, \"is\", null);\n builder.isNotNull = (a) => builder(a, \"is not\", null);\n builder.not = (condition) => {\n if (typeof condition === \"boolean\") {\n return !condition;\n }\n\n return {\n type: \"not\",\n item: condition,\n };\n };\n\n builder.or = (...conditions) => {\n const out = {\n type: \"or\",\n items: [] as Condition[],\n } as const;\n\n for (const item of conditions) {\n if (item === true) {\n return true;\n }\n if (item === false) {\n continue;\n }\n\n out.items.push(item);\n }\n\n if (out.items.length === 0) {\n return false;\n }\n return out;\n };\n\n builder.and = (...conditions) => {\n const out = {\n type: \"and\",\n items: [] as Condition[],\n } as const;\n\n for (const item of conditions) {\n if (item === true) {\n continue;\n }\n if (item === false) {\n return false;\n }\n\n out.items.push(item);\n }\n\n if (out.items.length === 0) {\n return true;\n }\n return out;\n };\n\n return builder;\n}\n"],"mappings":";AA2DA,MAAM,kBAAkB;CACtB;CACA;CACA;CAEA;CACA;CACA;CAED;AAED,MAAM,iBAAiB,CAAC,MAAM,SAAS;AAEvC,MAAM,iBAAiB;CAAC;CAAK;CAAM;CAAK;CAAM;CAAK;CAAM;CAAM;CAAS;AAKxE,MAAa,YAAY;CAAC,GAAG;CAAgB,GAAG;CAAgB,GAAG;CAAgB;AAInF,SAAgB,cACd,SAC2B;CAC3B,SAAS,IAAI,MAAqB;EAChC,MAAM,MAAM,QAAQ;AACpB,MAAI,CAAC,IACH,OAAM,IAAI,MAAM,uBAAuB,OAAO,KAAK,GAAG;AAGxD,SAAO;;CAGT,MAAMA,WAAsC,GAAG,SAAiD;AAC9F,MAAI,KAAK,WAAW,GAAG;GACrB,MAAM,CAAC,GAAG,UAAU,KAAK;AAEzB,OAAI,CAAC,UAAU,SAAS,SAAS,CAAE,OAAM,IAAI,MAAM,yBAAyB,WAAW;AAEvF,UAAO;IACL,MAAM;IACN,GAAG,IAAI,EAAE;IACT;IACA;IACD;;AAGH,SAAO;GACL,MAAM;GACN,GAAG,IAAI,KAAK,GAAG;GACf,UAAU;GACV,GAAG;GACJ;;AAGH,SAAQ,UAAU,MAAM,QAAQ,GAAG,MAAM,KAAK;AAC9C,SAAQ,aAAa,MAAM,QAAQ,GAAG,UAAU,KAAK;AACrD,SAAQ,OAAO,cAAc;AAC3B,MAAI,OAAO,cAAc,UAAW,QAAO,CAAC;AAE5C,SAAO;GACL,MAAM;GACN,MAAM;GACP;;AAGH,SAAQ,MAAM,GAAG,eAAe;EAC9B,MAAM,MAAM;GACV,MAAM;GACN,OAAO,EAAE;GACV;AAED,OAAK,MAAM,QAAQ,YAAY;AAC7B,OAAI,SAAS,KAAM,QAAO;AAC1B,OAAI,SAAS,MAAO;AAEpB,OAAI,MAAM,KAAK,KAAK;;AAGtB,MAAI,IAAI,MAAM,WAAW,EAAG,QAAO;AACnC,SAAO;;AAGT,SAAQ,OAAO,GAAG,eAAe;EAC/B,MAAM,MAAM;GACV,MAAM;GACN,OAAO,EAAE;GACV;AAED,OAAK,MAAM,QAAQ,YAAY;AAC7B,OAAI,SAAS,KAAM;AACnB,OAAI,SAAS,MAAO,QAAO;AAE3B,OAAI,MAAM,KAAK,KAAK;;AAGtB,MAAI,IAAI,MAAM,WAAW,EAAG,QAAO;AACnC,SAAO;;AAGT,QAAO;;AAGT,SAAgB,eACd,SACA,OACG;AACH,QAAO,MAAM,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,88 @@
1
+ import { AnyColumn } from "../schema/create.js";
2
+ import { SQLProvider } from "../shared/providers.js";
3
+
4
+ //#region src/query/cursor.d.ts
5
+
6
+ /**
7
+ * Cursor data structure containing index values and pagination direction
8
+ */
9
+ interface CursorData {
10
+ /**
11
+ * Values for each column in the index, keyed by column ORM name
12
+ */
13
+ indexValues: Record<string, unknown>;
14
+ /**
15
+ * Direction of pagination
16
+ */
17
+ direction: "forward" | "backward";
18
+ }
19
+ /**
20
+ * Encode cursor data to a base64 string
21
+ *
22
+ * @param data - The cursor data to encode
23
+ * @returns Base64-encoded cursor string
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const cursor = encodeCursor({
28
+ * indexValues: { id: "abc123", createdAt: 1234567890 },
29
+ * direction: "forward"
30
+ * });
31
+ * ```
32
+ */
33
+ declare function encodeCursor(data: CursorData): string;
34
+ /**
35
+ * Decode a base64 cursor string back to cursor data
36
+ *
37
+ * @param cursor - The base64-encoded cursor string
38
+ * @returns Decoded cursor data
39
+ * @throws Error if cursor is invalid or malformed
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * const data = decodeCursor("eyJpbmRleFZhbHVlcyI6e30sImRpcmVjdGlvbiI6ImZvcndhcmQifQ==");
44
+ * ```
45
+ */
46
+ declare function decodeCursor(cursor: string): CursorData;
47
+ /**
48
+ * Create a cursor from a record and index columns
49
+ *
50
+ * @param record - The database record
51
+ * @param indexColumns - The columns that make up the index
52
+ * @param direction - The pagination direction
53
+ * @returns Encoded cursor string
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * const cursor = createCursorFromRecord(
58
+ * { id: "abc", name: "Alice", createdAt: 123 },
59
+ * [table.columns.createdAt, table.columns.id],
60
+ * "forward"
61
+ * );
62
+ * ```
63
+ */
64
+ declare function createCursorFromRecord(record: Record<string, unknown>, indexColumns: AnyColumn[], direction: "forward" | "backward"): string;
65
+ /**
66
+ * Serialize cursor values for database queries
67
+ *
68
+ * Converts cursor values (which are in application format) to database format
69
+ * using the column serialization rules.
70
+ *
71
+ * @param cursorData - The decoded cursor data
72
+ * @param indexColumns - The columns that make up the index
73
+ * @param provider - The SQL provider
74
+ * @returns Serialized values ready for database queries
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * const serialized = serializeCursorValues(
79
+ * cursorData,
80
+ * [table.columns.createdAt],
81
+ * "postgresql"
82
+ * );
83
+ * ```
84
+ */
85
+ declare function serializeCursorValues(cursorData: CursorData, indexColumns: AnyColumn[], provider: SQLProvider): Record<string, unknown>;
86
+ //#endregion
87
+ export { CursorData, createCursorFromRecord, decodeCursor, encodeCursor, serializeCursorValues };
88
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","names":[],"sources":["../../src/query/cursor.ts"],"sourcesContent":[],"mappings":";;;;;;;AAOA;AAyBgB,UAzBC,UAAA,CAyBW;EAqBZ;AA4ChB;AAkCA;EACc,WAAA,EAzHC,MAyHD,CAAA,MAAA,EAAA,OAAA,CAAA;EACE;;;EAEP,SAAA,EAAA,SAAA,GAAA,UAAA;;;;;;;;;;;;;;;;iBAvGO,YAAA,OAAmB;;;;;;;;;;;;;iBAqBnB,YAAA,kBAA8B;;;;;;;;;;;;;;;;;;iBA4C9B,sBAAA,SACN,uCACM;;;;;;;;;;;;;;;;;;;;;iBAgCA,qBAAA,aACF,0BACE,uBACJ,cACT"}
@@ -0,0 +1,103 @@
1
+ import { serialize } from "../schema/serialize.js";
2
+
3
+ //#region src/query/cursor.ts
4
+ /**
5
+ * Encode cursor data to a base64 string
6
+ *
7
+ * @param data - The cursor data to encode
8
+ * @returns Base64-encoded cursor string
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const cursor = encodeCursor({
13
+ * indexValues: { id: "abc123", createdAt: 1234567890 },
14
+ * direction: "forward"
15
+ * });
16
+ * ```
17
+ */
18
+ function encodeCursor(data) {
19
+ const json = JSON.stringify(data);
20
+ if (typeof Buffer !== "undefined") return Buffer.from(json, "utf-8").toString("base64");
21
+ return btoa(json);
22
+ }
23
+ /**
24
+ * Decode a base64 cursor string back to cursor data
25
+ *
26
+ * @param cursor - The base64-encoded cursor string
27
+ * @returns Decoded cursor data
28
+ * @throws Error if cursor is invalid or malformed
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * const data = decodeCursor("eyJpbmRleFZhbHVlcyI6e30sImRpcmVjdGlvbiI6ImZvcndhcmQifQ==");
33
+ * ```
34
+ */
35
+ function decodeCursor(cursor) {
36
+ try {
37
+ let json;
38
+ if (typeof Buffer !== "undefined") json = Buffer.from(cursor, "base64").toString("utf-8");
39
+ else json = atob(cursor);
40
+ const data = JSON.parse(json);
41
+ if (!data || typeof data !== "object" || !data.indexValues || typeof data.indexValues !== "object" || data.direction !== "forward" && data.direction !== "backward") throw new Error("Invalid cursor structure");
42
+ return data;
43
+ } catch (error) {
44
+ throw new Error(`Invalid cursor: ${error instanceof Error ? error.message : "malformed data"}`);
45
+ }
46
+ }
47
+ /**
48
+ * Create a cursor from a record and index columns
49
+ *
50
+ * @param record - The database record
51
+ * @param indexColumns - The columns that make up the index
52
+ * @param direction - The pagination direction
53
+ * @returns Encoded cursor string
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * const cursor = createCursorFromRecord(
58
+ * { id: "abc", name: "Alice", createdAt: 123 },
59
+ * [table.columns.createdAt, table.columns.id],
60
+ * "forward"
61
+ * );
62
+ * ```
63
+ */
64
+ function createCursorFromRecord(record, indexColumns, direction) {
65
+ const indexValues = {};
66
+ for (const col of indexColumns) indexValues[col.ormName] = record[col.ormName];
67
+ return encodeCursor({
68
+ indexValues,
69
+ direction
70
+ });
71
+ }
72
+ /**
73
+ * Serialize cursor values for database queries
74
+ *
75
+ * Converts cursor values (which are in application format) to database format
76
+ * using the column serialization rules.
77
+ *
78
+ * @param cursorData - The decoded cursor data
79
+ * @param indexColumns - The columns that make up the index
80
+ * @param provider - The SQL provider
81
+ * @returns Serialized values ready for database queries
82
+ *
83
+ * @example
84
+ * ```ts
85
+ * const serialized = serializeCursorValues(
86
+ * cursorData,
87
+ * [table.columns.createdAt],
88
+ * "postgresql"
89
+ * );
90
+ * ```
91
+ */
92
+ function serializeCursorValues(cursorData, indexColumns, provider) {
93
+ const serialized = {};
94
+ for (const col of indexColumns) {
95
+ const value = cursorData.indexValues[col.ormName];
96
+ if (value !== void 0) serialized[col.ormName] = serialize(value, col, provider);
97
+ }
98
+ return serialized;
99
+ }
100
+
101
+ //#endregion
102
+ export { createCursorFromRecord, decodeCursor, encodeCursor, serializeCursorValues };
103
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +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 data structure containing index values and pagination direction\n */\nexport interface CursorData {\n /**\n * Values for each column in the index, keyed by column ORM name\n */\n indexValues: Record<string, unknown>;\n /**\n * Direction of pagination\n */\n direction: \"forward\" | \"backward\";\n}\n\n/**\n * Encode cursor data to a base64 string\n *\n * @param data - The cursor data to encode\n * @returns Base64-encoded cursor string\n *\n * @example\n * ```ts\n * const cursor = encodeCursor({\n * indexValues: { id: \"abc123\", createdAt: 1234567890 },\n * direction: \"forward\"\n * });\n * ```\n */\nexport function encodeCursor(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 cursor data\n *\n * @param cursor - The base64-encoded cursor string\n * @returns Decoded cursor data\n * @throws Error if cursor is invalid or malformed\n *\n * @example\n * ```ts\n * const data = decodeCursor(\"eyJpbmRleFZhbHVlcyI6e30sImRpcmVjdGlvbiI6ImZvcndhcmQifQ==\");\n * ```\n */\nexport function decodeCursor(cursor: string): CursorData {\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 (data.direction !== \"forward\" && data.direction !== \"backward\")\n ) {\n throw new Error(\"Invalid cursor structure\");\n }\n\n return data as CursorData;\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 index columns\n *\n * @param record - The database record\n * @param indexColumns - The columns that make up the index\n * @param direction - The pagination direction\n * @returns Encoded cursor string\n *\n * @example\n * ```ts\n * const cursor = createCursorFromRecord(\n * { id: \"abc\", name: \"Alice\", createdAt: 123 },\n * [table.columns.createdAt, table.columns.id],\n * \"forward\"\n * );\n * ```\n */\nexport function createCursorFromRecord(\n record: Record<string, unknown>,\n indexColumns: AnyColumn[],\n direction: \"forward\" | \"backward\",\n): string {\n const indexValues: Record<string, unknown> = {};\n\n for (const col of indexColumns) {\n indexValues[col.ormName] = record[col.ormName];\n }\n\n return encodeCursor({ indexValues, direction });\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 cursorData - The decoded cursor data\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 * cursorData,\n * [table.columns.createdAt],\n * \"postgresql\"\n * );\n * ```\n */\nexport function serializeCursorValues(\n cursorData: CursorData,\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 = cursorData.indexValues[col.ormName];\n if (value !== undefined) {\n serialized[col.ormName] = serialize(value, col, provider);\n }\n }\n\n return serialized;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAgCA,SAAgB,aAAa,MAA0B;CACrD,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,QAA4B;AACvD,KAAI;EACF,IAAIA;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,YAC3B,KAAK,cAAc,aAAa,KAAK,cAAc,WAEpD,OAAM,IAAI,MAAM,2BAA2B;AAG7C,SAAO;UACA,OAAO;AACd,QAAM,IAAI,MAAM,mBAAmB,iBAAiB,QAAQ,MAAM,UAAU,mBAAmB;;;;;;;;;;;;;;;;;;;;AAqBnG,SAAgB,uBACd,QACA,cACA,WACQ;CACR,MAAMC,cAAuC,EAAE;AAE/C,MAAK,MAAM,OAAO,aAChB,aAAY,IAAI,WAAW,OAAO,IAAI;AAGxC,QAAO,aAAa;EAAE;EAAa;EAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;AAuBjD,SAAgB,sBACd,YACA,cACA,UACyB;CACzB,MAAMC,aAAsC,EAAE;AAE9C,MAAK,MAAM,OAAO,cAAc;EAC9B,MAAM,QAAQ,WAAW,YAAY,IAAI;AACzC,MAAI,UAAU,OACZ,YAAW,IAAI,WAAW,UAAU,OAAO,KAAK,SAAS;;AAI7D,QAAO"}
@@ -0,0 +1,18 @@
1
+ import { AnyColumn, AnyRelation } from "../../schema/create.js";
2
+ import { Condition } from "../condition-builder.js";
3
+ import { AnySelectClause, FindManyOptions, OrderBy } from "../query.js";
4
+
5
+ //#region src/query/orm/orm.d.ts
6
+ interface CompiledJoin {
7
+ relation: AnyRelation;
8
+ options: SimplifyFindOptions<FindManyOptions> | false;
9
+ }
10
+ type SimplifyFindOptions<O> = Omit<O, "where" | "orderBy" | "select" | "join"> & {
11
+ select: AnySelectClause;
12
+ where?: Condition | undefined;
13
+ orderBy?: OrderBy<AnyColumn>[];
14
+ join?: CompiledJoin[];
15
+ };
16
+ //#endregion
17
+ export { CompiledJoin };
18
+ //# sourceMappingURL=orm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orm.d.ts","names":[],"sources":["../../../src/query/orm/orm.ts"],"sourcesContent":[],"mappings":";;;;;UAUiB,YAAA;YACL;EADK,OAAA,EAEN,mBAFkB,CAEE,eAFF,CAAA,GAAA,KAAA;;AAElB,KA0EC,mBA1ED,CAAA,CAAA,CAAA,GA0E0B,IA1E1B,CA0E+B,CA1E/B,EAAA,OAAA,GAAA,SAAA,GAAA,QAAA,GAAA,MAAA,CAAA,GAAA;EAAmB,MAAA,EA2EpB,eA3EoB;EA0ElB,KAAA,CAAA,EAEF,SAFE,GAAA,SAAmB;EAAW,OAAA,CAAA,EAG9B,OAH8B,CAGtB,SAHsB,CAAA,EAAA;EAAL,IAAA,CAAA,EAI5B,YAJ4B,EAAA;CAC3B"}
@@ -0,0 +1,48 @@
1
+ import { buildCondition } from "../condition-builder.js";
2
+
3
+ //#region src/query/orm/orm.ts
4
+ function isOrderByArray(v) {
5
+ return Array.isArray(v) && Array.isArray(v[0]);
6
+ }
7
+ function simplifyOrderBy(columns, orderBy) {
8
+ if (!orderBy || orderBy.length === 0) return;
9
+ if (!isOrderByArray(orderBy)) orderBy = [orderBy];
10
+ return orderBy.map(([name, value]) => {
11
+ const col = columns[name];
12
+ if (!col) throw new Error(`unknown column name ${name}.`);
13
+ return [col, value];
14
+ });
15
+ }
16
+ function buildFindOptions(table, { select = true, where, orderBy, join,...options }) {
17
+ let conditions = where ? buildCondition(table.columns, where) : void 0;
18
+ if (conditions === true) conditions = void 0;
19
+ if (conditions === false) return false;
20
+ return {
21
+ select,
22
+ where: conditions,
23
+ orderBy: simplifyOrderBy(table.columns, orderBy),
24
+ join: join ? buildJoin(table, join) : void 0,
25
+ ...options
26
+ };
27
+ }
28
+ function buildJoin(table, fn) {
29
+ const compiled = [];
30
+ const builder = {};
31
+ for (const name in table.relations) {
32
+ const relation = table.relations[name];
33
+ builder[name] = (options = {}) => {
34
+ compiled.push({
35
+ relation,
36
+ options: buildFindOptions(relation.table, options)
37
+ });
38
+ delete builder[name];
39
+ return builder;
40
+ };
41
+ }
42
+ fn(builder);
43
+ return compiled;
44
+ }
45
+
46
+ //#endregion
47
+ export { buildFindOptions };
48
+ //# sourceMappingURL=orm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orm.js","names":["compiled: CompiledJoin[]","builder: Record<string, unknown>"],"sources":["../../../src/query/orm/orm.ts"],"sourcesContent":["import type {\n AnySelectClause,\n FindFirstOptions,\n FindManyOptions,\n JoinBuilder,\n OrderBy,\n} from \"../query\";\nimport { buildCondition, type Condition } from \"../condition-builder\";\nimport type { AnyColumn, AnyRelation, AnyTable } from \"../../schema/create\";\n\nexport interface CompiledJoin {\n relation: AnyRelation;\n options: SimplifyFindOptions<FindManyOptions> | false;\n}\n\nfunction isOrderByArray(v: OrderBy | OrderBy[]): v is OrderBy[] {\n return Array.isArray(v) && Array.isArray(v[0]);\n}\n\nfunction simplifyOrderBy(\n columns: Record<string, AnyColumn>,\n orderBy: OrderBy | OrderBy[] | undefined,\n): OrderBy<AnyColumn>[] | undefined {\n if (!orderBy || orderBy.length === 0) {\n return;\n }\n\n if (!isOrderByArray(orderBy)) {\n orderBy = [orderBy];\n }\n return orderBy.map(([name, value]) => {\n const col = columns[name];\n if (!col) {\n throw new Error(`unknown column name ${name}.`);\n }\n\n return [col, value];\n });\n}\n\nexport function buildFindOptions(\n table: AnyTable,\n { select = true, where, orderBy, join, ...options }: FindManyOptions,\n): SimplifyFindOptions<FindManyOptions> | false {\n let conditions = where ? buildCondition(table.columns, where) : undefined;\n if (conditions === true) {\n conditions = undefined;\n }\n if (conditions === false) {\n return false;\n }\n\n return {\n select,\n where: conditions,\n orderBy: simplifyOrderBy(table.columns, orderBy),\n join: join ? buildJoin(table, join) : undefined,\n ...options,\n };\n}\n\nfunction buildJoin<TTable extends AnyTable>(\n table: AnyTable,\n fn: (builder: JoinBuilder<TTable>) => void,\n): CompiledJoin[] {\n const compiled: CompiledJoin[] = [];\n const builder: Record<string, unknown> = {};\n\n for (const name in table.relations) {\n const relation = table.relations[name]!;\n\n builder[name] = (options: FindFirstOptions | FindManyOptions = {}) => {\n compiled.push({\n relation,\n options: buildFindOptions(relation.table, options),\n });\n\n delete builder[name];\n return builder;\n };\n }\n\n fn(builder as JoinBuilder<TTable>);\n return compiled;\n}\n\nexport type SimplifyFindOptions<O> = Omit<O, \"where\" | \"orderBy\" | \"select\" | \"join\"> & {\n select: AnySelectClause;\n where?: Condition | undefined;\n orderBy?: OrderBy<AnyColumn>[];\n join?: CompiledJoin[];\n};\n"],"mappings":";;;AAeA,SAAS,eAAe,GAAwC;AAC9D,QAAO,MAAM,QAAQ,EAAE,IAAI,MAAM,QAAQ,EAAE,GAAG;;AAGhD,SAAS,gBACP,SACA,SACkC;AAClC,KAAI,CAAC,WAAW,QAAQ,WAAW,EACjC;AAGF,KAAI,CAAC,eAAe,QAAQ,CAC1B,WAAU,CAAC,QAAQ;AAErB,QAAO,QAAQ,KAAK,CAAC,MAAM,WAAW;EACpC,MAAM,MAAM,QAAQ;AACpB,MAAI,CAAC,IACH,OAAM,IAAI,MAAM,uBAAuB,KAAK,GAAG;AAGjD,SAAO,CAAC,KAAK,MAAM;GACnB;;AAGJ,SAAgB,iBACd,OACA,EAAE,SAAS,MAAM,OAAO,SAAS,KAAM,GAAG,WACI;CAC9C,IAAI,aAAa,QAAQ,eAAe,MAAM,SAAS,MAAM,GAAG;AAChE,KAAI,eAAe,KACjB,cAAa;AAEf,KAAI,eAAe,MACjB,QAAO;AAGT,QAAO;EACL;EACA,OAAO;EACP,SAAS,gBAAgB,MAAM,SAAS,QAAQ;EAChD,MAAM,OAAO,UAAU,OAAO,KAAK,GAAG;EACtC,GAAG;EACJ;;AAGH,SAAS,UACP,OACA,IACgB;CAChB,MAAMA,WAA2B,EAAE;CACnC,MAAMC,UAAmC,EAAE;AAE3C,MAAK,MAAM,QAAQ,MAAM,WAAW;EAClC,MAAM,WAAW,MAAM,UAAU;AAEjC,UAAQ,SAAS,UAA8C,EAAE,KAAK;AACpE,YAAS,KAAK;IACZ;IACA,SAAS,iBAAiB,SAAS,OAAO,QAAQ;IACnD,CAAC;AAEF,UAAO,QAAQ;AACf,UAAO;;;AAIX,IAAG,QAA+B;AAClC,QAAO"}