@warlock.js/cascade 4.0.92 → 4.0.93

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 (269) hide show
  1. package/cjs/contracts/database-driver.contract.d.ts +118 -0
  2. package/cjs/contracts/database-driver.contract.d.ts.map +1 -1
  3. package/cjs/contracts/migration-driver.contract.d.ts +14 -0
  4. package/cjs/contracts/migration-driver.contract.d.ts.map +1 -1
  5. package/cjs/contracts/query-builder.contract.d.ts +410 -1
  6. package/cjs/contracts/query-builder.contract.d.ts.map +1 -1
  7. package/cjs/data-source/data-source-registry.d.ts +4 -0
  8. package/cjs/data-source/data-source-registry.d.ts.map +1 -1
  9. package/cjs/data-source/data-source-registry.js +7 -0
  10. package/cjs/data-source/data-source-registry.js.map +1 -1
  11. package/cjs/drivers/mongodb/mongodb-blueprint.d.ts.map +1 -0
  12. package/cjs/drivers/mongodb/mongodb-blueprint.js.map +1 -0
  13. package/{esm/drivers/mongo → cjs/drivers/mongodb}/mongodb-driver.d.ts +49 -0
  14. package/cjs/drivers/mongodb/mongodb-driver.d.ts.map +1 -0
  15. package/cjs/drivers/{mongo → mongodb}/mongodb-driver.js +125 -8
  16. package/cjs/drivers/mongodb/mongodb-driver.js.map +1 -0
  17. package/cjs/drivers/{mongo/mongo-id-generator.d.ts → mongodb/mongodb-id-generator.d.ts} +1 -1
  18. package/cjs/drivers/mongodb/mongodb-id-generator.d.ts.map +1 -0
  19. package/cjs/drivers/{mongo/mongo-id-generator.js → mongodb/mongodb-id-generator.js} +1 -1
  20. package/cjs/drivers/mongodb/mongodb-id-generator.js.map +1 -0
  21. package/cjs/drivers/{mongo/mongo-migration-driver.d.ts → mongodb/mongodb-migration-driver.d.ts} +10 -1
  22. package/cjs/drivers/mongodb/mongodb-migration-driver.d.ts.map +1 -0
  23. package/cjs/drivers/{mongo/mongo-migration-driver.js → mongodb/mongodb-migration-driver.js} +18 -1
  24. package/cjs/drivers/mongodb/mongodb-migration-driver.js.map +1 -0
  25. package/cjs/drivers/{mongo/mongo-query-builder.d.ts → mongodb/mongodb-query-builder.d.ts} +172 -4
  26. package/cjs/drivers/mongodb/mongodb-query-builder.d.ts.map +1 -0
  27. package/cjs/drivers/{mongo/mongo-query-builder.js → mongodb/mongodb-query-builder.js} +220 -14
  28. package/cjs/drivers/mongodb/mongodb-query-builder.js.map +1 -0
  29. package/{esm/drivers/mongo/mongo-query-operations.d.ts → cjs/drivers/mongodb/mongodb-query-operations.d.ts} +16 -16
  30. package/cjs/drivers/mongodb/mongodb-query-operations.d.ts.map +1 -0
  31. package/cjs/drivers/{mongo/mongo-query-operations.js → mongodb/mongodb-query-operations.js} +22 -22
  32. package/cjs/drivers/mongodb/mongodb-query-operations.js.map +1 -0
  33. package/cjs/drivers/{mongo/mongo-query-parser.d.ts → mongodb/mongodb-query-parser.d.ts} +2 -2
  34. package/cjs/drivers/mongodb/mongodb-query-parser.d.ts.map +1 -0
  35. package/cjs/drivers/{mongo/mongo-query-parser.js → mongodb/mongodb-query-parser.js} +87 -87
  36. package/cjs/drivers/mongodb/mongodb-query-parser.js.map +1 -0
  37. package/cjs/drivers/{mongo/mongo-sync-adapter.d.ts → mongodb/mongodb-sync-adapter.d.ts} +2 -2
  38. package/cjs/drivers/mongodb/mongodb-sync-adapter.d.ts.map +1 -0
  39. package/cjs/drivers/{mongo/mongo-sync-adapter.js → mongodb/mongodb-sync-adapter.js} +2 -2
  40. package/cjs/drivers/mongodb/mongodb-sync-adapter.js.map +1 -0
  41. package/{esm/drivers/mongo → cjs/drivers/mongodb}/types.d.ts +2 -2
  42. package/cjs/drivers/mongodb/types.d.ts.map +1 -0
  43. package/cjs/drivers/postgres/index.d.ts +16 -0
  44. package/cjs/drivers/postgres/index.d.ts.map +1 -0
  45. package/cjs/drivers/postgres/postgres-blueprint.d.ts +64 -0
  46. package/cjs/drivers/postgres/postgres-blueprint.d.ts.map +1 -0
  47. package/cjs/drivers/postgres/postgres-blueprint.js +121 -0
  48. package/cjs/drivers/postgres/postgres-blueprint.js.map +1 -0
  49. package/cjs/drivers/postgres/postgres-dialect.d.ts +135 -0
  50. package/cjs/drivers/postgres/postgres-dialect.d.ts.map +1 -0
  51. package/cjs/drivers/postgres/postgres-dialect.js +245 -0
  52. package/cjs/drivers/postgres/postgres-dialect.js.map +1 -0
  53. package/cjs/drivers/postgres/postgres-driver.d.ts +360 -0
  54. package/cjs/drivers/postgres/postgres-driver.d.ts.map +1 -0
  55. package/cjs/drivers/postgres/postgres-driver.js +763 -0
  56. package/cjs/drivers/postgres/postgres-driver.js.map +1 -0
  57. package/cjs/drivers/postgres/postgres-migration-driver.d.ts +297 -0
  58. package/cjs/drivers/postgres/postgres-migration-driver.d.ts.map +1 -0
  59. package/cjs/drivers/postgres/postgres-migration-driver.js +578 -0
  60. package/cjs/drivers/postgres/postgres-migration-driver.js.map +1 -0
  61. package/cjs/drivers/postgres/postgres-query-builder.d.ts +824 -0
  62. package/cjs/drivers/postgres/postgres-query-builder.d.ts.map +1 -0
  63. package/cjs/drivers/postgres/postgres-query-builder.js +1800 -0
  64. package/cjs/drivers/postgres/postgres-query-builder.js.map +1 -0
  65. package/cjs/drivers/postgres/postgres-query-parser.d.ts +308 -0
  66. package/cjs/drivers/postgres/postgres-query-parser.d.ts.map +1 -0
  67. package/cjs/drivers/postgres/postgres-query-parser.js +706 -0
  68. package/cjs/drivers/postgres/postgres-query-parser.js.map +1 -0
  69. package/cjs/drivers/postgres/postgres-sync-adapter.d.ts +83 -0
  70. package/cjs/drivers/postgres/postgres-sync-adapter.d.ts.map +1 -0
  71. package/cjs/drivers/postgres/postgres-sync-adapter.js +197 -0
  72. package/cjs/drivers/postgres/postgres-sync-adapter.js.map +1 -0
  73. package/cjs/drivers/postgres/types.d.ts +142 -0
  74. package/cjs/drivers/postgres/types.d.ts.map +1 -0
  75. package/cjs/drivers/sql/index.d.ts +10 -0
  76. package/cjs/drivers/sql/index.d.ts.map +1 -0
  77. package/cjs/drivers/sql/sql-dialect.contract.d.ts +203 -0
  78. package/cjs/drivers/sql/sql-dialect.contract.d.ts.map +1 -0
  79. package/cjs/drivers/sql/sql-types.d.ts +202 -0
  80. package/cjs/drivers/sql/sql-types.d.ts.map +1 -0
  81. package/cjs/index.d.ts +9 -6
  82. package/cjs/index.d.ts.map +1 -1
  83. package/cjs/index.js +1 -1
  84. package/cjs/migration/migration-runner.d.ts.map +1 -1
  85. package/cjs/migration/migration-runner.js +3 -0
  86. package/cjs/migration/migration-runner.js.map +1 -1
  87. package/cjs/model/model.d.ts +236 -1
  88. package/cjs/model/model.d.ts.map +1 -1
  89. package/cjs/model/model.js +203 -4
  90. package/cjs/model/model.js.map +1 -1
  91. package/cjs/relations/helpers.d.ts +156 -0
  92. package/cjs/relations/helpers.d.ts.map +1 -0
  93. package/cjs/relations/helpers.js +197 -0
  94. package/cjs/relations/helpers.js.map +1 -0
  95. package/cjs/relations/index.d.ts +33 -0
  96. package/cjs/relations/index.d.ts.map +1 -0
  97. package/cjs/relations/pivot-operations.d.ts +160 -0
  98. package/cjs/relations/pivot-operations.d.ts.map +1 -0
  99. package/cjs/relations/pivot-operations.js +293 -0
  100. package/cjs/relations/pivot-operations.js.map +1 -0
  101. package/cjs/relations/relation-loader.d.ts +194 -0
  102. package/cjs/relations/relation-loader.d.ts.map +1 -0
  103. package/cjs/relations/relation-loader.js +466 -0
  104. package/cjs/relations/relation-loader.js.map +1 -0
  105. package/cjs/relations/types.d.ts +280 -0
  106. package/cjs/relations/types.d.ts.map +1 -0
  107. package/cjs/sync/model-sync-operation.js +1 -1
  108. package/cjs/sync/model-sync-operation.js.map +1 -1
  109. package/cjs/utils/connect-to-database.d.ts.map +1 -1
  110. package/cjs/utils/connect-to-database.js +15 -3
  111. package/cjs/utils/connect-to-database.js.map +1 -1
  112. package/cjs/utils/define-model.d.ts +51 -29
  113. package/cjs/utils/define-model.d.ts.map +1 -1
  114. package/cjs/validation/rules/database-model-rule.js +1 -1
  115. package/cjs/validation/rules/database-model-rule.js.map +1 -1
  116. package/esm/contracts/database-driver.contract.d.ts +118 -0
  117. package/esm/contracts/database-driver.contract.d.ts.map +1 -1
  118. package/esm/contracts/migration-driver.contract.d.ts +14 -0
  119. package/esm/contracts/migration-driver.contract.d.ts.map +1 -1
  120. package/esm/contracts/query-builder.contract.d.ts +410 -1
  121. package/esm/contracts/query-builder.contract.d.ts.map +1 -1
  122. package/esm/data-source/data-source-registry.d.ts +4 -0
  123. package/esm/data-source/data-source-registry.d.ts.map +1 -1
  124. package/esm/data-source/data-source-registry.js +7 -0
  125. package/esm/data-source/data-source-registry.js.map +1 -1
  126. package/esm/drivers/mongodb/mongodb-blueprint.d.ts.map +1 -0
  127. package/esm/drivers/mongodb/mongodb-blueprint.js.map +1 -0
  128. package/{cjs/drivers/mongo → esm/drivers/mongodb}/mongodb-driver.d.ts +49 -0
  129. package/esm/drivers/mongodb/mongodb-driver.d.ts.map +1 -0
  130. package/esm/drivers/{mongo → mongodb}/mongodb-driver.js +121 -4
  131. package/esm/drivers/mongodb/mongodb-driver.js.map +1 -0
  132. package/esm/drivers/{mongo/mongo-id-generator.d.ts → mongodb/mongodb-id-generator.d.ts} +1 -1
  133. package/esm/drivers/mongodb/mongodb-id-generator.d.ts.map +1 -0
  134. package/esm/drivers/{mongo/mongo-id-generator.js → mongodb/mongodb-id-generator.js} +1 -1
  135. package/esm/drivers/mongodb/mongodb-id-generator.js.map +1 -0
  136. package/esm/drivers/{mongo/mongo-migration-driver.d.ts → mongodb/mongodb-migration-driver.d.ts} +10 -1
  137. package/esm/drivers/mongodb/mongodb-migration-driver.d.ts.map +1 -0
  138. package/esm/drivers/{mongo/mongo-migration-driver.js → mongodb/mongodb-migration-driver.js} +18 -1
  139. package/esm/drivers/mongodb/mongodb-migration-driver.js.map +1 -0
  140. package/esm/drivers/{mongo/mongo-query-builder.d.ts → mongodb/mongodb-query-builder.d.ts} +172 -4
  141. package/esm/drivers/mongodb/mongodb-query-builder.d.ts.map +1 -0
  142. package/esm/drivers/{mongo/mongo-query-builder.js → mongodb/mongodb-query-builder.js} +218 -12
  143. package/esm/drivers/mongodb/mongodb-query-builder.js.map +1 -0
  144. package/{cjs/drivers/mongo/mongo-query-operations.d.ts → esm/drivers/mongodb/mongodb-query-operations.d.ts} +16 -16
  145. package/esm/drivers/mongodb/mongodb-query-operations.d.ts.map +1 -0
  146. package/esm/drivers/{mongo/mongo-query-operations.js → mongodb/mongodb-query-operations.js} +22 -22
  147. package/esm/drivers/mongodb/mongodb-query-operations.js.map +1 -0
  148. package/esm/drivers/{mongo/mongo-query-parser.d.ts → mongodb/mongodb-query-parser.d.ts} +2 -2
  149. package/esm/drivers/mongodb/mongodb-query-parser.d.ts.map +1 -0
  150. package/esm/drivers/{mongo/mongo-query-parser.js → mongodb/mongodb-query-parser.js} +87 -87
  151. package/esm/drivers/mongodb/mongodb-query-parser.js.map +1 -0
  152. package/esm/drivers/{mongo/mongo-sync-adapter.d.ts → mongodb/mongodb-sync-adapter.d.ts} +2 -2
  153. package/esm/drivers/mongodb/mongodb-sync-adapter.d.ts.map +1 -0
  154. package/esm/drivers/{mongo/mongo-sync-adapter.js → mongodb/mongodb-sync-adapter.js} +2 -2
  155. package/esm/drivers/mongodb/mongodb-sync-adapter.js.map +1 -0
  156. package/{cjs/drivers/mongo → esm/drivers/mongodb}/types.d.ts +2 -2
  157. package/esm/drivers/mongodb/types.d.ts.map +1 -0
  158. package/esm/drivers/postgres/index.d.ts +16 -0
  159. package/esm/drivers/postgres/index.d.ts.map +1 -0
  160. package/esm/drivers/postgres/postgres-blueprint.d.ts +64 -0
  161. package/esm/drivers/postgres/postgres-blueprint.d.ts.map +1 -0
  162. package/esm/drivers/postgres/postgres-blueprint.js +121 -0
  163. package/esm/drivers/postgres/postgres-blueprint.js.map +1 -0
  164. package/esm/drivers/postgres/postgres-dialect.d.ts +135 -0
  165. package/esm/drivers/postgres/postgres-dialect.d.ts.map +1 -0
  166. package/esm/drivers/postgres/postgres-dialect.js +245 -0
  167. package/esm/drivers/postgres/postgres-dialect.js.map +1 -0
  168. package/esm/drivers/postgres/postgres-driver.d.ts +360 -0
  169. package/esm/drivers/postgres/postgres-driver.d.ts.map +1 -0
  170. package/esm/drivers/postgres/postgres-driver.js +763 -0
  171. package/esm/drivers/postgres/postgres-driver.js.map +1 -0
  172. package/esm/drivers/postgres/postgres-migration-driver.d.ts +297 -0
  173. package/esm/drivers/postgres/postgres-migration-driver.d.ts.map +1 -0
  174. package/esm/drivers/postgres/postgres-migration-driver.js +578 -0
  175. package/esm/drivers/postgres/postgres-migration-driver.js.map +1 -0
  176. package/esm/drivers/postgres/postgres-query-builder.d.ts +824 -0
  177. package/esm/drivers/postgres/postgres-query-builder.d.ts.map +1 -0
  178. package/esm/drivers/postgres/postgres-query-builder.js +1800 -0
  179. package/esm/drivers/postgres/postgres-query-builder.js.map +1 -0
  180. package/esm/drivers/postgres/postgres-query-parser.d.ts +308 -0
  181. package/esm/drivers/postgres/postgres-query-parser.d.ts.map +1 -0
  182. package/esm/drivers/postgres/postgres-query-parser.js +706 -0
  183. package/esm/drivers/postgres/postgres-query-parser.js.map +1 -0
  184. package/esm/drivers/postgres/postgres-sync-adapter.d.ts +83 -0
  185. package/esm/drivers/postgres/postgres-sync-adapter.d.ts.map +1 -0
  186. package/esm/drivers/postgres/postgres-sync-adapter.js +197 -0
  187. package/esm/drivers/postgres/postgres-sync-adapter.js.map +1 -0
  188. package/esm/drivers/postgres/types.d.ts +142 -0
  189. package/esm/drivers/postgres/types.d.ts.map +1 -0
  190. package/esm/drivers/sql/index.d.ts +10 -0
  191. package/esm/drivers/sql/index.d.ts.map +1 -0
  192. package/esm/drivers/sql/sql-dialect.contract.d.ts +203 -0
  193. package/esm/drivers/sql/sql-dialect.contract.d.ts.map +1 -0
  194. package/esm/drivers/sql/sql-types.d.ts +202 -0
  195. package/esm/drivers/sql/sql-types.d.ts.map +1 -0
  196. package/esm/index.d.ts +9 -6
  197. package/esm/index.d.ts.map +1 -1
  198. package/esm/index.js +1 -1
  199. package/esm/migration/migration-runner.d.ts.map +1 -1
  200. package/esm/migration/migration-runner.js +3 -0
  201. package/esm/migration/migration-runner.js.map +1 -1
  202. package/esm/model/model.d.ts +236 -1
  203. package/esm/model/model.d.ts.map +1 -1
  204. package/esm/model/model.js +203 -4
  205. package/esm/model/model.js.map +1 -1
  206. package/esm/relations/helpers.d.ts +156 -0
  207. package/esm/relations/helpers.d.ts.map +1 -0
  208. package/esm/relations/helpers.js +197 -0
  209. package/esm/relations/helpers.js.map +1 -0
  210. package/esm/relations/index.d.ts +33 -0
  211. package/esm/relations/index.d.ts.map +1 -0
  212. package/esm/relations/pivot-operations.d.ts +160 -0
  213. package/esm/relations/pivot-operations.d.ts.map +1 -0
  214. package/esm/relations/pivot-operations.js +293 -0
  215. package/esm/relations/pivot-operations.js.map +1 -0
  216. package/esm/relations/relation-loader.d.ts +194 -0
  217. package/esm/relations/relation-loader.d.ts.map +1 -0
  218. package/esm/relations/relation-loader.js +466 -0
  219. package/esm/relations/relation-loader.js.map +1 -0
  220. package/esm/relations/types.d.ts +280 -0
  221. package/esm/relations/types.d.ts.map +1 -0
  222. package/esm/sync/model-sync-operation.js +1 -1
  223. package/esm/sync/model-sync-operation.js.map +1 -1
  224. package/esm/utils/connect-to-database.d.ts.map +1 -1
  225. package/esm/utils/connect-to-database.js +15 -3
  226. package/esm/utils/connect-to-database.js.map +1 -1
  227. package/esm/utils/define-model.d.ts +51 -29
  228. package/esm/utils/define-model.d.ts.map +1 -1
  229. package/esm/validation/rules/database-model-rule.js +1 -1
  230. package/esm/validation/rules/database-model-rule.js.map +1 -1
  231. package/package.json +4 -4
  232. package/cjs/drivers/mongo/mongo-id-generator.d.ts.map +0 -1
  233. package/cjs/drivers/mongo/mongo-id-generator.js.map +0 -1
  234. package/cjs/drivers/mongo/mongo-migration-driver.d.ts.map +0 -1
  235. package/cjs/drivers/mongo/mongo-migration-driver.js.map +0 -1
  236. package/cjs/drivers/mongo/mongo-query-builder.d.ts.map +0 -1
  237. package/cjs/drivers/mongo/mongo-query-builder.js.map +0 -1
  238. package/cjs/drivers/mongo/mongo-query-operations.d.ts.map +0 -1
  239. package/cjs/drivers/mongo/mongo-query-operations.js.map +0 -1
  240. package/cjs/drivers/mongo/mongo-query-parser.d.ts.map +0 -1
  241. package/cjs/drivers/mongo/mongo-query-parser.js.map +0 -1
  242. package/cjs/drivers/mongo/mongo-sync-adapter.d.ts.map +0 -1
  243. package/cjs/drivers/mongo/mongo-sync-adapter.js.map +0 -1
  244. package/cjs/drivers/mongo/mongodb-blueprint.d.ts.map +0 -1
  245. package/cjs/drivers/mongo/mongodb-blueprint.js.map +0 -1
  246. package/cjs/drivers/mongo/mongodb-driver.d.ts.map +0 -1
  247. package/cjs/drivers/mongo/mongodb-driver.js.map +0 -1
  248. package/cjs/drivers/mongo/types.d.ts.map +0 -1
  249. package/esm/drivers/mongo/mongo-id-generator.d.ts.map +0 -1
  250. package/esm/drivers/mongo/mongo-id-generator.js.map +0 -1
  251. package/esm/drivers/mongo/mongo-migration-driver.d.ts.map +0 -1
  252. package/esm/drivers/mongo/mongo-migration-driver.js.map +0 -1
  253. package/esm/drivers/mongo/mongo-query-builder.d.ts.map +0 -1
  254. package/esm/drivers/mongo/mongo-query-builder.js.map +0 -1
  255. package/esm/drivers/mongo/mongo-query-operations.d.ts.map +0 -1
  256. package/esm/drivers/mongo/mongo-query-operations.js.map +0 -1
  257. package/esm/drivers/mongo/mongo-query-parser.d.ts.map +0 -1
  258. package/esm/drivers/mongo/mongo-query-parser.js.map +0 -1
  259. package/esm/drivers/mongo/mongo-sync-adapter.d.ts.map +0 -1
  260. package/esm/drivers/mongo/mongo-sync-adapter.js.map +0 -1
  261. package/esm/drivers/mongo/mongodb-blueprint.d.ts.map +0 -1
  262. package/esm/drivers/mongo/mongodb-blueprint.js.map +0 -1
  263. package/esm/drivers/mongo/mongodb-driver.d.ts.map +0 -1
  264. package/esm/drivers/mongo/mongodb-driver.js.map +0 -1
  265. package/esm/drivers/mongo/types.d.ts.map +0 -1
  266. /package/cjs/drivers/{mongo → mongodb}/mongodb-blueprint.d.ts +0 -0
  267. /package/cjs/drivers/{mongo → mongodb}/mongodb-blueprint.js +0 -0
  268. /package/esm/drivers/{mongo → mongodb}/mongodb-blueprint.d.ts +0 -0
  269. /package/esm/drivers/{mongo → mongodb}/mongodb-blueprint.js +0 -0
@@ -0,0 +1,578 @@
1
+ 'use strict';var databaseTransactionContext=require('../../context/database-transaction-context.js');/**
2
+ * PostgreSQL Migration Driver
3
+ *
4
+ * Implements the MigrationDriverContract for PostgreSQL DDL operations.
5
+ * Provides methods for creating/dropping tables, columns, indexes,
6
+ * and constraints.
7
+ *
8
+ * @module cascade/drivers/postgres
9
+ */
10
+ /**
11
+ * PostgreSQL Migration Driver.
12
+ *
13
+ * Handles database schema operations for PostgreSQL including:
14
+ * - Table creation and deletion
15
+ * - Column management
16
+ * - Index creation (B-tree, GIN, GiST, etc.)
17
+ * - Constraint management (foreign keys, unique, etc.)
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const migrationDriver = driver.migrationDriver();
22
+ *
23
+ * // Create a table
24
+ * await migrationDriver.createTable('users');
25
+ *
26
+ * // Add columns
27
+ * await migrationDriver.addColumn('users', {
28
+ * name: 'email',
29
+ * type: 'string',
30
+ * length: 255,
31
+ * nullable: false
32
+ * });
33
+ *
34
+ * // Create unique index
35
+ * await migrationDriver.createUniqueIndex('users', ['email']);
36
+ * ```
37
+ */
38
+ class PostgresMigrationDriver {
39
+ driver;
40
+ /**
41
+ * Active transaction client (if any).
42
+ */
43
+ get transactionClient() {
44
+ return databaseTransactionContext.databaseTransactionContext.getSession();
45
+ }
46
+ /**
47
+ * Create a new migration driver.
48
+ *
49
+ * @param driver - The PostgreSQL driver instance
50
+ */
51
+ constructor(driver) {
52
+ this.driver = driver;
53
+ }
54
+ // ============================================================================
55
+ // TABLE OPERATIONS
56
+ // ============================================================================
57
+ /**
58
+ * Create a new table with a default id column.
59
+ *
60
+ * @param table - Table name
61
+ */
62
+ async createTable(table) {
63
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
64
+ // Create empty table - columns are added via addColumn operations
65
+ await this.execute(`CREATE TABLE ${quotedTable} ()`);
66
+ }
67
+ /**
68
+ * Create table if it doesn't exist.
69
+ *
70
+ * @param table - Table name
71
+ */
72
+ async createTableIfNotExists(table) {
73
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
74
+ // Create empty table if not exists - columns are added via addColumn operations
75
+ await this.execute(`CREATE TABLE IF NOT EXISTS ${quotedTable} ()`);
76
+ }
77
+ /**
78
+ * Drop an existing table.
79
+ *
80
+ * @param table - Table name
81
+ */
82
+ async dropTable(table) {
83
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
84
+ await this.execute(`DROP TABLE ${quotedTable}`);
85
+ }
86
+ /**
87
+ * Drop table if it exists.
88
+ *
89
+ * @param table - Table name
90
+ */
91
+ async dropTableIfExists(table) {
92
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
93
+ await this.execute(`DROP TABLE IF EXISTS ${quotedTable}`);
94
+ }
95
+ /**
96
+ * Rename a table.
97
+ *
98
+ * @param from - Current table name
99
+ * @param to - New table name
100
+ */
101
+ async renameTable(from, to) {
102
+ const quotedFrom = this.driver.dialect.quoteIdentifier(from);
103
+ const quotedTo = this.driver.dialect.quoteIdentifier(to);
104
+ await this.execute(`ALTER TABLE ${quotedFrom} RENAME TO ${quotedTo}`);
105
+ }
106
+ /**
107
+ * Check if a table exists.
108
+ *
109
+ * @param table - Table name
110
+ * @returns Whether the table exists
111
+ */
112
+ async tableExists(table) {
113
+ const result = await this.driver.query(`SELECT EXISTS (
114
+ SELECT FROM information_schema.tables
115
+ WHERE table_schema = 'public'
116
+ AND table_name = $1
117
+ )`, [table]);
118
+ return result.rows[0]?.exists ?? false;
119
+ }
120
+ /**
121
+ * Ensure the migrations tracking table exists.
122
+ *
123
+ * Creates the table with proper schema if it doesn't exist.
124
+ *
125
+ * @param tableName - Name of the migrations table
126
+ */
127
+ async ensureMigrationsTable(tableName) {
128
+ const quotedTable = this.driver.dialect.quoteIdentifier(tableName);
129
+ await this.execute(`
130
+ CREATE TABLE IF NOT EXISTS ${quotedTable} (
131
+ "id" SERIAL PRIMARY KEY,
132
+ "name" VARCHAR(255) NOT NULL UNIQUE,
133
+ "batch" INTEGER NOT NULL,
134
+ "executedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
135
+ "createdAt" TIMESTAMP WITH TIME ZONE
136
+ )
137
+ `);
138
+ }
139
+ // ============================================================================
140
+ // COLUMN OPERATIONS
141
+ // ============================================================================
142
+ /**
143
+ * Add a column to an existing table.
144
+ *
145
+ * @param table - Table name
146
+ * @param column - Column definition
147
+ */
148
+ async addColumn(table, column) {
149
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
150
+ const quotedColumn = this.driver.dialect.quoteIdentifier(column.name);
151
+ // For auto-increment integers, use SERIAL/BIGSERIAL instead of INTEGER/BIGINT
152
+ let sqlType;
153
+ if (column.autoIncrement) {
154
+ if (column.type === "bigInteger") {
155
+ sqlType = "BIGSERIAL";
156
+ }
157
+ else {
158
+ sqlType = "SERIAL";
159
+ }
160
+ }
161
+ else {
162
+ sqlType = this.driver.dialect.getSqlType(column.type, {
163
+ length: column.length,
164
+ precision: column.precision,
165
+ scale: column.scale,
166
+ });
167
+ }
168
+ let sql = `ALTER TABLE ${quotedTable} ADD COLUMN ${quotedColumn} ${sqlType}`;
169
+ // SERIAL/BIGSERIAL are always NOT NULL, so skip for those
170
+ if (!column.autoIncrement && column.nullable === false) {
171
+ sql += " NOT NULL";
172
+ }
173
+ if (column.defaultValue !== undefined) {
174
+ if (typeof column.defaultValue === "string") {
175
+ sql += ` DEFAULT '${column.defaultValue}'`;
176
+ }
177
+ else if (typeof column.defaultValue === "boolean") {
178
+ sql += ` DEFAULT ${column.defaultValue ? "TRUE" : "FALSE"}`;
179
+ }
180
+ else {
181
+ sql += ` DEFAULT ${column.defaultValue}`;
182
+ }
183
+ }
184
+ // Handle primary key
185
+ if (column.primary) {
186
+ sql += " PRIMARY KEY";
187
+ }
188
+ // Handle unique constraint
189
+ if (column.unique) {
190
+ sql += " UNIQUE";
191
+ }
192
+ await this.execute(sql);
193
+ }
194
+ /**
195
+ * Drop a column from a table.
196
+ *
197
+ * @param table - Table name
198
+ * @param column - Column name
199
+ */
200
+ async dropColumn(table, column) {
201
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
202
+ const quotedColumn = this.driver.dialect.quoteIdentifier(column);
203
+ await this.execute(`ALTER TABLE ${quotedTable} DROP COLUMN ${quotedColumn}`);
204
+ }
205
+ /**
206
+ * Drop multiple columns from a table.
207
+ *
208
+ * @param table - Table name
209
+ * @param columns - Column names
210
+ */
211
+ async dropColumns(table, columns) {
212
+ for (const column of columns) {
213
+ await this.dropColumn(table, column);
214
+ }
215
+ }
216
+ /**
217
+ * Rename a column.
218
+ *
219
+ * @param table - Table name
220
+ * @param from - Current column name
221
+ * @param to - New column name
222
+ */
223
+ async renameColumn(table, from, to) {
224
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
225
+ const quotedFrom = this.driver.dialect.quoteIdentifier(from);
226
+ const quotedTo = this.driver.dialect.quoteIdentifier(to);
227
+ await this.execute(`ALTER TABLE ${quotedTable} RENAME COLUMN ${quotedFrom} TO ${quotedTo}`);
228
+ }
229
+ /**
230
+ * Modify an existing column.
231
+ *
232
+ * @param table - Table name
233
+ * @param column - New column definition
234
+ */
235
+ async modifyColumn(table, column) {
236
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
237
+ const quotedColumn = this.driver.dialect.quoteIdentifier(column.name);
238
+ const sqlType = this.driver.dialect.getSqlType(column.type, {
239
+ length: column.length,
240
+ precision: column.precision,
241
+ scale: column.scale,
242
+ });
243
+ // PostgreSQL requires separate ALTER statements for type and nullability
244
+ await this.execute(`ALTER TABLE ${quotedTable} ALTER COLUMN ${quotedColumn} TYPE ${sqlType}`);
245
+ if (column.nullable === false) {
246
+ await this.execute(`ALTER TABLE ${quotedTable} ALTER COLUMN ${quotedColumn} SET NOT NULL`);
247
+ }
248
+ else if (column.nullable === true) {
249
+ await this.execute(`ALTER TABLE ${quotedTable} ALTER COLUMN ${quotedColumn} DROP NOT NULL`);
250
+ }
251
+ if (column.defaultValue !== undefined) {
252
+ const defaultVal = typeof column.defaultValue === "string" ? `'${column.defaultValue}'` : column.defaultValue;
253
+ await this.execute(`ALTER TABLE ${quotedTable} ALTER COLUMN ${quotedColumn} SET DEFAULT ${defaultVal}`);
254
+ }
255
+ }
256
+ // ============================================================================
257
+ // INDEX OPERATIONS
258
+ // ============================================================================
259
+ /**
260
+ * Create an index on one or more columns.
261
+ *
262
+ * @param table - Table name
263
+ * @param index - Index definition
264
+ */
265
+ async createIndex(table, index) {
266
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
267
+ const indexName = index.name ?? `idx_${table}_${index.columns.join("_")}`;
268
+ const quotedIndexName = this.driver.dialect.quoteIdentifier(indexName);
269
+ const uniqueKeyword = index.unique ? "UNIQUE " : "";
270
+ const columns = index.columns.map((col, i) => {
271
+ const quotedCol = this.driver.dialect.quoteIdentifier(col);
272
+ const direction = index.directions?.[i]?.toUpperCase() ?? "";
273
+ return direction ? `${quotedCol} ${direction}` : quotedCol;
274
+ });
275
+ let sql = `CREATE ${uniqueKeyword}INDEX ${quotedIndexName} ON ${quotedTable} (${columns.join(", ")})`;
276
+ // Add partial index condition
277
+ if (index.where && Object.keys(index.where).length > 0) {
278
+ const conditions = Object.entries(index.where)
279
+ .map(([key, value]) => {
280
+ const quotedKey = this.driver.dialect.quoteIdentifier(key);
281
+ return typeof value === "string"
282
+ ? `${quotedKey} = '${value}'`
283
+ : `${quotedKey} = ${value}`;
284
+ })
285
+ .join(" AND ");
286
+ sql += ` WHERE ${conditions}`;
287
+ }
288
+ await this.execute(sql);
289
+ }
290
+ /**
291
+ * Drop an index.
292
+ *
293
+ * @param table - Table name
294
+ * @param indexNameOrColumns - Index name or columns
295
+ */
296
+ async dropIndex(table, indexNameOrColumns) {
297
+ let indexName;
298
+ if (typeof indexNameOrColumns === "string") {
299
+ indexName = indexNameOrColumns;
300
+ }
301
+ else {
302
+ indexName = `idx_${table}_${indexNameOrColumns.join("_")}`;
303
+ }
304
+ const quotedIndexName = this.driver.dialect.quoteIdentifier(indexName);
305
+ await this.execute(`DROP INDEX IF EXISTS ${quotedIndexName}`);
306
+ }
307
+ /**
308
+ * Create a unique index.
309
+ *
310
+ * @param table - Table name
311
+ * @param columns - Columns to include
312
+ * @param name - Optional index name
313
+ */
314
+ async createUniqueIndex(table, columns, name) {
315
+ await this.createIndex(table, { columns, unique: true, name });
316
+ }
317
+ /**
318
+ * Drop a unique index.
319
+ *
320
+ * @param table - Table name
321
+ * @param columns - Columns in the index
322
+ */
323
+ async dropUniqueIndex(table, columns) {
324
+ await this.dropIndex(table, columns);
325
+ }
326
+ // ============================================================================
327
+ // SPECIALIZED INDEXES
328
+ // ============================================================================
329
+ /**
330
+ * Create a full-text search index using GIN.
331
+ *
332
+ * @param table - Table name
333
+ * @param columns - Columns to index
334
+ * @param options - Full-text options
335
+ */
336
+ async createFullTextIndex(table, columns, options) {
337
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
338
+ const indexName = options?.name ?? `idx_${table}_fulltext_${columns.join("_")}`;
339
+ const quotedIndexName = this.driver.dialect.quoteIdentifier(indexName);
340
+ const language = options?.language ?? "english";
341
+ const tsvectors = columns.map((col) => {
342
+ const weight = options?.weights?.[col] ?? "A";
343
+ return `setweight(to_tsvector('${language}', COALESCE(${this.driver.dialect.quoteIdentifier(col)}, '')), '${weight}')`;
344
+ });
345
+ await this.execute(`CREATE INDEX ${quotedIndexName} ON ${quotedTable} USING GIN ((${tsvectors.join(" || ")}))`);
346
+ }
347
+ /**
348
+ * Drop a full-text search index.
349
+ *
350
+ * @param table - Table name
351
+ * @param name - Index name
352
+ */
353
+ async dropFullTextIndex(table, name) {
354
+ await this.dropIndex(table, name);
355
+ }
356
+ /**
357
+ * Create a geo-spatial index using GiST.
358
+ *
359
+ * @param table - Table name
360
+ * @param column - Geo column
361
+ * @param options - Geo index options
362
+ */
363
+ async createGeoIndex(table, column, options) {
364
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
365
+ const quotedColumn = this.driver.dialect.quoteIdentifier(column);
366
+ const indexName = options?.name ?? `idx_${table}_geo_${column}`;
367
+ const quotedIndexName = this.driver.dialect.quoteIdentifier(indexName);
368
+ await this.execute(`CREATE INDEX ${quotedIndexName} ON ${quotedTable} USING GIST (${quotedColumn})`);
369
+ }
370
+ /**
371
+ * Drop a geo-spatial index.
372
+ *
373
+ * @param table - Table name
374
+ * @param column - Geo column
375
+ */
376
+ async dropGeoIndex(table, column) {
377
+ await this.dropIndex(table, `idx_${table}_geo_${column}`);
378
+ }
379
+ /**
380
+ * Create a vector search index (requires pgvector extension).
381
+ *
382
+ * @param table - Table name
383
+ * @param column - Vector column
384
+ * @param options - Vector index options
385
+ */
386
+ async createVectorIndex(table, column, options) {
387
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
388
+ const quotedColumn = this.driver.dialect.quoteIdentifier(column);
389
+ const indexName = options.name ?? `idx_${table}_vector_${column}`;
390
+ const quotedIndexName = this.driver.dialect.quoteIdentifier(indexName);
391
+ // Map similarity to pgvector operator class
392
+ const opClass = options.similarity === "euclidean"
393
+ ? "vector_l2_ops"
394
+ : options.similarity === "dotProduct"
395
+ ? "vector_ip_ops"
396
+ : "vector_cosine_ops";
397
+ const lists = options.lists ?? 100;
398
+ await this.execute(`CREATE INDEX ${quotedIndexName} ON ${quotedTable} USING ivfflat (${quotedColumn} ${opClass}) WITH (lists = ${lists})`);
399
+ }
400
+ /**
401
+ * Drop a vector search index.
402
+ *
403
+ * @param table - Table name
404
+ * @param column - Vector column
405
+ */
406
+ async dropVectorIndex(table, column) {
407
+ await this.dropIndex(table, `idx_${table}_vector_${column}`);
408
+ }
409
+ /**
410
+ * Create a TTL index (not natively supported in PostgreSQL).
411
+ *
412
+ * Note: PostgreSQL doesn't have native TTL indexes like MongoDB.
413
+ * This creates a partial index and requires a scheduled job for cleanup.
414
+ *
415
+ * @param table - Table name
416
+ * @param column - Date column
417
+ * @param expireAfterSeconds - Expiration time in seconds
418
+ */
419
+ async createTTLIndex(table, column, expireAfterSeconds) {
420
+ // Create a partial index for expired rows (for efficient cleanup queries)
421
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
422
+ const quotedColumn = this.driver.dialect.quoteIdentifier(column);
423
+ const indexName = `idx_${table}_ttl_${column}`;
424
+ const quotedIndexName = this.driver.dialect.quoteIdentifier(indexName);
425
+ await this.execute(`CREATE INDEX ${quotedIndexName} ON ${quotedTable} (${quotedColumn}) WHERE ${quotedColumn} < NOW() - INTERVAL '${expireAfterSeconds} seconds'`);
426
+ // Note: User must set up a scheduled job (pg_cron, etc.) to:
427
+ // DELETE FROM table WHERE column < NOW() - INTERVAL 'X seconds'
428
+ }
429
+ /**
430
+ * Drop a TTL index.
431
+ *
432
+ * @param table - Table name
433
+ * @param column - Column with TTL index
434
+ */
435
+ async dropTTLIndex(table, column) {
436
+ await this.dropIndex(table, `idx_${table}_ttl_${column}`);
437
+ }
438
+ // ============================================================================
439
+ // CONSTRAINTS
440
+ // ============================================================================
441
+ /**
442
+ * Add a foreign key constraint.
443
+ *
444
+ * @param table - Table name
445
+ * @param foreignKey - Foreign key definition
446
+ */
447
+ async addForeignKey(table, foreignKey) {
448
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
449
+ const quotedColumn = this.driver.dialect.quoteIdentifier(foreignKey.column);
450
+ const quotedRefTable = this.driver.dialect.quoteIdentifier(foreignKey.referencesTable);
451
+ const quotedRefColumn = this.driver.dialect.quoteIdentifier(foreignKey.referencesColumn);
452
+ const constraintName = foreignKey.name ?? `fk_${table}_${foreignKey.column}_${foreignKey.referencesTable}`;
453
+ const quotedConstraint = this.driver.dialect.quoteIdentifier(constraintName);
454
+ let sql = `ALTER TABLE ${quotedTable} ADD CONSTRAINT ${quotedConstraint} FOREIGN KEY (${quotedColumn}) REFERENCES ${quotedRefTable} (${quotedRefColumn})`;
455
+ if (foreignKey.onDelete) {
456
+ sql += ` ON DELETE ${this.mapForeignKeyAction(foreignKey.onDelete)}`;
457
+ }
458
+ if (foreignKey.onUpdate) {
459
+ sql += ` ON UPDATE ${this.mapForeignKeyAction(foreignKey.onUpdate)}`;
460
+ }
461
+ await this.execute(sql);
462
+ }
463
+ /**
464
+ * Drop a foreign key constraint.
465
+ *
466
+ * @param table - Table name
467
+ * @param name - Constraint name
468
+ */
469
+ async dropForeignKey(table, name) {
470
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
471
+ const quotedConstraint = this.driver.dialect.quoteIdentifier(name);
472
+ await this.execute(`ALTER TABLE ${quotedTable} DROP CONSTRAINT ${quotedConstraint}`);
473
+ }
474
+ /**
475
+ * Add a primary key constraint.
476
+ *
477
+ * @param table - Table name
478
+ * @param columns - Primary key columns
479
+ */
480
+ async addPrimaryKey(table, columns) {
481
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
482
+ const quotedColumns = columns.map((c) => this.driver.dialect.quoteIdentifier(c)).join(", ");
483
+ const constraintName = `pk_${table}`;
484
+ const quotedConstraint = this.driver.dialect.quoteIdentifier(constraintName);
485
+ await this.execute(`ALTER TABLE ${quotedTable} ADD CONSTRAINT ${quotedConstraint} PRIMARY KEY (${quotedColumns})`);
486
+ }
487
+ /**
488
+ * Drop the primary key constraint.
489
+ *
490
+ * @param table - Table name
491
+ */
492
+ async dropPrimaryKey(table) {
493
+ const quotedTable = this.driver.dialect.quoteIdentifier(table);
494
+ const constraintName = `pk_${table}`;
495
+ const quotedConstraint = this.driver.dialect.quoteIdentifier(constraintName);
496
+ await this.execute(`ALTER TABLE ${quotedTable} DROP CONSTRAINT ${quotedConstraint}`);
497
+ }
498
+ // ============================================================================
499
+ // SCHEMA VALIDATION (NOT APPLICABLE FOR PostgreSQL)
500
+ // ============================================================================
501
+ /**
502
+ * Set schema validation (no-op for PostgreSQL).
503
+ *
504
+ * PostgreSQL uses column constraints instead.
505
+ */
506
+ async setSchemaValidation(_table, _schema) {
507
+ // No-op: PostgreSQL doesn't have MongoDB-style schema validation
508
+ // Use CHECK constraints instead
509
+ }
510
+ /**
511
+ * Remove schema validation (no-op for PostgreSQL).
512
+ */
513
+ async removeSchemaValidation(_table) {
514
+ // No-op
515
+ }
516
+ // ============================================================================
517
+ // TRANSACTIONS
518
+ // ============================================================================
519
+ /**
520
+ * Begin a transaction.
521
+ */
522
+ async beginTransaction() {
523
+ await this.execute("BEGIN");
524
+ }
525
+ /**
526
+ * Commit the current transaction.
527
+ */
528
+ async commit() {
529
+ await this.execute("COMMIT");
530
+ }
531
+ /**
532
+ * Rollback the current transaction.
533
+ */
534
+ async rollback() {
535
+ await this.execute("ROLLBACK");
536
+ }
537
+ /**
538
+ * Whether transactions are supported.
539
+ */
540
+ supportsTransactions() {
541
+ return true;
542
+ }
543
+ // ============================================================================
544
+ // RAW ACCESS
545
+ // ============================================================================
546
+ /**
547
+ * Execute raw operations with direct driver access.
548
+ *
549
+ * @param callback - Callback receiving the driver
550
+ */
551
+ async raw(callback) {
552
+ return callback(this.driver);
553
+ }
554
+ // ============================================================================
555
+ // HELPERS
556
+ // ============================================================================
557
+ /**
558
+ * Execute a SQL statement.
559
+ *
560
+ * @param sql - SQL to execute
561
+ * @param params - Query parameters
562
+ */
563
+ async execute(sql, params = []) {
564
+ await this.driver.query(sql, params);
565
+ }
566
+ /**
567
+ * Map foreign key action to PostgreSQL syntax.
568
+ */
569
+ mapForeignKeyAction(action) {
570
+ const mapping = {
571
+ cascade: "CASCADE",
572
+ restrict: "RESTRICT",
573
+ setNull: "SET NULL",
574
+ noAction: "NO ACTION",
575
+ };
576
+ return mapping[action] ?? "NO ACTION";
577
+ }
578
+ }exports.PostgresMigrationDriver=PostgresMigrationDriver;//# sourceMappingURL=postgres-migration-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-migration-driver.js","sources":["../../../src/drivers/postgres/postgres-migration-driver.ts"],"sourcesContent":[null],"names":["databaseTransactionContext"],"mappings":"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"}