@warlock.js/cascade 4.0.171 → 4.1.1

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 (1050) hide show
  1. package/README.md +6 -5
  2. package/bin/cascadejs +3 -0
  3. package/esm/cli/commands/migrate-export-sql.mjs +48 -0
  4. package/esm/cli/commands/migrate-export-sql.mjs.map +1 -0
  5. package/esm/cli/commands/migrate-list.mjs +26 -0
  6. package/esm/cli/commands/migrate-list.mjs.map +1 -0
  7. package/esm/cli/commands/migrate-rollback.mjs +50 -0
  8. package/esm/cli/commands/migrate-rollback.mjs.map +1 -0
  9. package/esm/cli/commands/migrate.mjs +65 -0
  10. package/esm/cli/commands/migrate.mjs.map +1 -0
  11. package/esm/cli/connection-from-env.mjs +181 -0
  12. package/esm/cli/connection-from-env.mjs.map +1 -0
  13. package/esm/cli/index.mjs +31 -0
  14. package/esm/cli/index.mjs.map +1 -0
  15. package/esm/cli/load-migrations.mjs +78 -0
  16. package/esm/cli/load-migrations.mjs.map +1 -0
  17. package/esm/cli/printers.mjs +57 -0
  18. package/esm/cli/printers.mjs.map +1 -0
  19. package/esm/cli/setup-logger.mjs +30 -0
  20. package/esm/cli/setup-logger.mjs.map +1 -0
  21. package/esm/cli/with-cli-connection.mjs +39 -0
  22. package/esm/cli/with-cli-connection.mjs.map +1 -0
  23. package/esm/cli.d.mts +1 -0
  24. package/esm/cli.mjs +26 -0
  25. package/esm/cli.mjs.map +1 -0
  26. package/esm/context/database-data-source-context.d.mts +32 -0
  27. package/esm/context/database-data-source-context.d.mts.map +1 -0
  28. package/esm/context/database-data-source-context.mjs +35 -0
  29. package/esm/context/database-data-source-context.mjs.map +1 -0
  30. package/esm/context/database-transaction-context.d.mts +38 -0
  31. package/esm/context/database-transaction-context.d.mts.map +1 -0
  32. package/esm/context/database-transaction-context.mjs +47 -0
  33. package/esm/context/database-transaction-context.mjs.map +1 -0
  34. package/esm/contracts/database-driver.contract.d.mts +443 -0
  35. package/esm/contracts/database-driver.contract.d.mts.map +1 -0
  36. package/esm/contracts/database-id-generator.contract.d.mts +109 -0
  37. package/esm/contracts/database-id-generator.contract.d.mts.map +1 -0
  38. package/esm/contracts/database-remover.contract.d.mts +108 -0
  39. package/esm/contracts/database-remover.contract.d.mts.map +1 -0
  40. package/esm/contracts/database-restorer.contract.d.mts +145 -0
  41. package/esm/contracts/database-restorer.contract.d.mts.map +1 -0
  42. package/esm/contracts/database-writer.contract.d.mts +123 -0
  43. package/esm/contracts/database-writer.contract.d.mts.map +1 -0
  44. package/esm/contracts/driver-blueprint.contract.d.mts +52 -0
  45. package/esm/contracts/driver-blueprint.contract.d.mts.map +1 -0
  46. package/esm/contracts/index.d.mts +9 -0
  47. package/esm/contracts/migration-driver.contract.d.mts +476 -0
  48. package/esm/contracts/migration-driver.contract.d.mts.map +1 -0
  49. package/esm/contracts/query-builder.contract.d.mts +1663 -0
  50. package/esm/contracts/query-builder.contract.d.mts.map +1 -0
  51. package/esm/contracts/sync-adapter.contract.d.mts +49 -0
  52. package/esm/contracts/sync-adapter.contract.d.mts.map +1 -0
  53. package/esm/data-source/data-source-registry.d.mts +111 -0
  54. package/esm/data-source/data-source-registry.d.mts.map +1 -0
  55. package/esm/data-source/data-source-registry.mjs +142 -0
  56. package/esm/data-source/data-source-registry.mjs.map +1 -0
  57. package/esm/data-source/data-source.d.mts +160 -0
  58. package/esm/data-source/data-source.d.mts.map +1 -0
  59. package/esm/data-source/data-source.mjs +87 -0
  60. package/esm/data-source/data-source.mjs.map +1 -0
  61. package/esm/database-dirty-tracker.d.mts +254 -0
  62. package/esm/database-dirty-tracker.d.mts.map +1 -0
  63. package/esm/database-dirty-tracker.mjs +356 -0
  64. package/esm/database-dirty-tracker.mjs.map +1 -0
  65. package/esm/drivers/mongodb/mongodb-blueprint.mjs +54 -0
  66. package/esm/drivers/mongodb/mongodb-blueprint.mjs.map +1 -0
  67. package/esm/drivers/mongodb/mongodb-driver.d.mts +334 -0
  68. package/esm/drivers/mongodb/mongodb-driver.d.mts.map +1 -0
  69. package/esm/drivers/mongodb/mongodb-driver.mjs +716 -0
  70. package/esm/drivers/mongodb/mongodb-driver.mjs.map +1 -0
  71. package/esm/drivers/mongodb/mongodb-id-generator.d.mts +120 -0
  72. package/esm/drivers/mongodb/mongodb-id-generator.d.mts.map +1 -0
  73. package/esm/drivers/mongodb/mongodb-id-generator.mjs +141 -0
  74. package/esm/drivers/mongodb/mongodb-id-generator.mjs.map +1 -0
  75. package/esm/drivers/mongodb/mongodb-migration-driver.d.mts +322 -0
  76. package/esm/drivers/mongodb/mongodb-migration-driver.d.mts.map +1 -0
  77. package/esm/drivers/mongodb/mongodb-migration-driver.mjs +531 -0
  78. package/esm/drivers/mongodb/mongodb-migration-driver.mjs.map +1 -0
  79. package/esm/drivers/mongodb/mongodb-query-builder.d.mts +1117 -0
  80. package/esm/drivers/mongodb/mongodb-query-builder.d.mts.map +1 -0
  81. package/esm/drivers/mongodb/mongodb-query-builder.mjs +1828 -0
  82. package/esm/drivers/mongodb/mongodb-query-builder.mjs.map +1 -0
  83. package/esm/drivers/mongodb/mongodb-query-operations.d.mts +230 -0
  84. package/esm/drivers/mongodb/mongodb-query-operations.d.mts.map +1 -0
  85. package/esm/drivers/mongodb/mongodb-query-operations.mjs +275 -0
  86. package/esm/drivers/mongodb/mongodb-query-operations.mjs.map +1 -0
  87. package/esm/drivers/mongodb/mongodb-query-parser.d.mts +263 -0
  88. package/esm/drivers/mongodb/mongodb-query-parser.d.mts.map +1 -0
  89. package/esm/drivers/mongodb/mongodb-query-parser.mjs +965 -0
  90. package/esm/drivers/mongodb/mongodb-query-parser.mjs.map +1 -0
  91. package/esm/drivers/mongodb/mongodb-sync-adapter.d.mts +78 -0
  92. package/esm/drivers/mongodb/mongodb-sync-adapter.d.mts.map +1 -0
  93. package/esm/drivers/mongodb/mongodb-sync-adapter.mjs +118 -0
  94. package/esm/drivers/mongodb/mongodb-sync-adapter.mjs.map +1 -0
  95. package/esm/drivers/mongodb/types.d.mts +43 -0
  96. package/esm/drivers/mongodb/types.d.mts.map +1 -0
  97. package/esm/drivers/postgres/index.d.mts +8 -0
  98. package/esm/drivers/postgres/index.mjs +9 -0
  99. package/esm/drivers/postgres/postgres-blueprint.d.mts +60 -0
  100. package/esm/drivers/postgres/postgres-blueprint.d.mts.map +1 -0
  101. package/esm/drivers/postgres/postgres-blueprint.mjs +105 -0
  102. package/esm/drivers/postgres/postgres-blueprint.mjs.map +1 -0
  103. package/esm/drivers/postgres/postgres-dialect.d.mts +144 -0
  104. package/esm/drivers/postgres/postgres-dialect.d.mts.map +1 -0
  105. package/esm/drivers/postgres/postgres-dialect.mjs +227 -0
  106. package/esm/drivers/postgres/postgres-dialect.mjs.map +1 -0
  107. package/esm/drivers/postgres/postgres-driver.d.mts +424 -0
  108. package/esm/drivers/postgres/postgres-driver.d.mts.map +1 -0
  109. package/esm/drivers/postgres/postgres-driver.mjs +845 -0
  110. package/esm/drivers/postgres/postgres-driver.mjs.map +1 -0
  111. package/esm/drivers/postgres/postgres-migration-driver.d.mts +393 -0
  112. package/esm/drivers/postgres/postgres-migration-driver.d.mts.map +1 -0
  113. package/esm/drivers/postgres/postgres-migration-driver.mjs +760 -0
  114. package/esm/drivers/postgres/postgres-migration-driver.mjs.map +1 -0
  115. package/esm/drivers/postgres/postgres-query-builder.d.mts +399 -0
  116. package/esm/drivers/postgres/postgres-query-builder.d.mts.map +1 -0
  117. package/esm/drivers/postgres/postgres-query-builder.mjs +1105 -0
  118. package/esm/drivers/postgres/postgres-query-builder.mjs.map +1 -0
  119. package/esm/drivers/postgres/postgres-query-parser.d.mts +351 -0
  120. package/esm/drivers/postgres/postgres-query-parser.d.mts.map +1 -0
  121. package/esm/drivers/postgres/postgres-query-parser.mjs +796 -0
  122. package/esm/drivers/postgres/postgres-query-parser.mjs.map +1 -0
  123. package/esm/drivers/postgres/postgres-sql-serializer.mjs +260 -0
  124. package/esm/drivers/postgres/postgres-sql-serializer.mjs.map +1 -0
  125. package/esm/drivers/postgres/postgres-sync-adapter.d.mts +79 -0
  126. package/esm/drivers/postgres/postgres-sync-adapter.d.mts.map +1 -0
  127. package/esm/drivers/postgres/postgres-sync-adapter.mjs +162 -0
  128. package/esm/drivers/postgres/postgres-sync-adapter.mjs.map +1 -0
  129. package/esm/drivers/postgres/types.d.mts +105 -0
  130. package/esm/drivers/postgres/types.d.mts.map +1 -0
  131. package/esm/drivers/sql/sql-dialect.contract.d.mts +221 -0
  132. package/esm/drivers/sql/sql-dialect.contract.d.mts.map +1 -0
  133. package/esm/drivers/sql/sql-types.d.mts +150 -0
  134. package/esm/drivers/sql/sql-types.d.mts.map +1 -0
  135. package/esm/errors/missing-data-source.error.d.mts +25 -0
  136. package/esm/errors/missing-data-source.error.d.mts.map +1 -0
  137. package/esm/errors/missing-data-source.error.mjs +31 -0
  138. package/esm/errors/missing-data-source.error.mjs.map +1 -0
  139. package/esm/errors/transaction-rollback.error.d.mts +23 -0
  140. package/esm/errors/transaction-rollback.error.d.mts.map +1 -0
  141. package/esm/errors/transaction-rollback.error.mjs +29 -0
  142. package/esm/errors/transaction-rollback.error.mjs.map +1 -0
  143. package/esm/events/model-events.d.mts +234 -0
  144. package/esm/events/model-events.d.mts.map +1 -0
  145. package/esm/events/model-events.mjs +254 -0
  146. package/esm/events/model-events.mjs.map +1 -0
  147. package/esm/expressions/aggregate-expressions.d.mts +224 -0
  148. package/esm/expressions/aggregate-expressions.d.mts.map +1 -0
  149. package/esm/expressions/aggregate-expressions.mjs +232 -0
  150. package/esm/expressions/aggregate-expressions.mjs.map +1 -0
  151. package/esm/index.d.mts +67 -0
  152. package/esm/index.mjs +53 -0
  153. package/esm/migration/column-builder.d.mts +420 -0
  154. package/esm/migration/column-builder.d.mts.map +1 -0
  155. package/esm/migration/column-builder.mjs +532 -0
  156. package/esm/migration/column-builder.mjs.map +1 -0
  157. package/esm/migration/column-helpers.d.mts +280 -0
  158. package/esm/migration/column-helpers.d.mts.map +1 -0
  159. package/esm/migration/column-helpers.mjs +376 -0
  160. package/esm/migration/column-helpers.mjs.map +1 -0
  161. package/esm/migration/foreign-key-builder.d.mts +106 -0
  162. package/esm/migration/foreign-key-builder.d.mts.map +1 -0
  163. package/esm/migration/foreign-key-builder.mjs +126 -0
  164. package/esm/migration/foreign-key-builder.mjs.map +1 -0
  165. package/esm/migration/index.d.mts +6 -0
  166. package/esm/migration/index.mjs +7 -0
  167. package/esm/migration/migration-runner.d.mts +279 -0
  168. package/esm/migration/migration-runner.d.mts.map +1 -0
  169. package/esm/migration/migration-runner.mjs +662 -0
  170. package/esm/migration/migration-runner.mjs.map +1 -0
  171. package/esm/migration/migration.d.mts +2035 -0
  172. package/esm/migration/migration.d.mts.map +1 -0
  173. package/esm/migration/migration.mjs +2083 -0
  174. package/esm/migration/migration.mjs.map +1 -0
  175. package/esm/migration/sql-grammar.mjs +115 -0
  176. package/esm/migration/sql-grammar.mjs.map +1 -0
  177. package/esm/migration/sql-serializer.d.mts +26 -0
  178. package/esm/migration/sql-serializer.d.mts.map +1 -0
  179. package/esm/migration/sql-serializer.mjs +26 -0
  180. package/esm/migration/sql-serializer.mjs.map +1 -0
  181. package/esm/migration/types.d.mts +136 -0
  182. package/esm/migration/types.d.mts.map +1 -0
  183. package/esm/model/methods/accessor-methods.mjs +54 -0
  184. package/esm/model/methods/accessor-methods.mjs.map +1 -0
  185. package/esm/model/methods/delete-methods.mjs +16 -0
  186. package/esm/model/methods/delete-methods.mjs.map +1 -0
  187. package/esm/model/methods/dirty-methods.mjs +20 -0
  188. package/esm/model/methods/dirty-methods.mjs.map +1 -0
  189. package/esm/model/methods/hydration-methods.mjs +51 -0
  190. package/esm/model/methods/hydration-methods.mjs.map +1 -0
  191. package/esm/model/methods/instance-event-methods.mjs +22 -0
  192. package/esm/model/methods/instance-event-methods.mjs.map +1 -0
  193. package/esm/model/methods/meta-methods.mjs +36 -0
  194. package/esm/model/methods/meta-methods.mjs.map +1 -0
  195. package/esm/model/methods/pivot-methods.mjs +48 -0
  196. package/esm/model/methods/pivot-methods.mjs.map +1 -0
  197. package/esm/model/methods/query-methods.mjs +121 -0
  198. package/esm/model/methods/query-methods.mjs.map +1 -0
  199. package/esm/model/methods/restore-methods.mjs +16 -0
  200. package/esm/model/methods/restore-methods.mjs.map +1 -0
  201. package/esm/model/methods/scope-methods.mjs +20 -0
  202. package/esm/model/methods/scope-methods.mjs.map +1 -0
  203. package/esm/model/methods/serialization-methods.mjs +20 -0
  204. package/esm/model/methods/serialization-methods.mjs.map +1 -0
  205. package/esm/model/methods/static-event-methods.mjs +37 -0
  206. package/esm/model/methods/static-event-methods.mjs.map +1 -0
  207. package/esm/model/methods/write-methods.mjs +69 -0
  208. package/esm/model/methods/write-methods.mjs.map +1 -0
  209. package/esm/model/model.d.mts +1778 -0
  210. package/esm/model/model.d.mts.map +1 -0
  211. package/esm/model/model.mjs +1762 -0
  212. package/esm/model/model.mjs.map +1 -0
  213. package/esm/model/model.types.d.mts +47 -0
  214. package/esm/model/model.types.d.mts.map +1 -0
  215. package/esm/model/register-model.d.mts +140 -0
  216. package/esm/model/register-model.d.mts.map +1 -0
  217. package/esm/model/register-model.mjs +175 -0
  218. package/esm/model/register-model.mjs.map +1 -0
  219. package/esm/model/relation-decorators.d.mts +88 -0
  220. package/esm/model/relation-decorators.d.mts.map +1 -0
  221. package/esm/model/relation-decorators.mjs +191 -0
  222. package/esm/model/relation-decorators.mjs.map +1 -0
  223. package/esm/operations/database.d.mts +46 -0
  224. package/esm/operations/database.d.mts.map +1 -0
  225. package/esm/operations/database.mjs +40 -0
  226. package/esm/operations/database.mjs.map +1 -0
  227. package/esm/operations/index.d.mts +2 -0
  228. package/esm/operations/index.mjs +4 -0
  229. package/esm/operations/migrations.d.mts +71 -0
  230. package/esm/operations/migrations.d.mts.map +1 -0
  231. package/esm/operations/migrations.mjs +70 -0
  232. package/esm/operations/migrations.mjs.map +1 -0
  233. package/esm/query-builder/query-builder.d.mts +564 -0
  234. package/esm/query-builder/query-builder.d.mts.map +1 -0
  235. package/esm/query-builder/query-builder.mjs +1097 -0
  236. package/esm/query-builder/query-builder.mjs.map +1 -0
  237. package/esm/relations/index.d.mts +4 -0
  238. package/esm/relations/index.mjs +5 -0
  239. package/esm/relations/key-conventions.mjs +119 -0
  240. package/esm/relations/key-conventions.mjs.map +1 -0
  241. package/esm/relations/pivot-operations.d.mts +155 -0
  242. package/esm/relations/pivot-operations.d.mts.map +1 -0
  243. package/esm/relations/pivot-operations.mjs +232 -0
  244. package/esm/relations/pivot-operations.mjs.map +1 -0
  245. package/esm/relations/relation-hydrator.d.mts +55 -0
  246. package/esm/relations/relation-hydrator.d.mts.map +1 -0
  247. package/esm/relations/relation-hydrator.mjs +52 -0
  248. package/esm/relations/relation-hydrator.mjs.map +1 -0
  249. package/esm/relations/relation-loader.d.mts +190 -0
  250. package/esm/relations/relation-loader.d.mts.map +1 -0
  251. package/esm/relations/relation-loader.mjs +416 -0
  252. package/esm/relations/relation-loader.mjs.map +1 -0
  253. package/esm/relations/types.d.mts +317 -0
  254. package/esm/relations/types.d.mts.map +1 -0
  255. package/esm/remover/database-remover.d.mts +104 -0
  256. package/esm/remover/database-remover.d.mts.map +1 -0
  257. package/esm/remover/database-remover.mjs +174 -0
  258. package/esm/remover/database-remover.mjs.map +1 -0
  259. package/esm/restorer/database-restorer.d.mts +135 -0
  260. package/esm/restorer/database-restorer.d.mts.map +1 -0
  261. package/esm/restorer/database-restorer.mjs +316 -0
  262. package/esm/restorer/database-restorer.mjs.map +1 -0
  263. package/esm/sql-database-dirty-tracker.d.mts +17 -0
  264. package/esm/sql-database-dirty-tracker.d.mts.map +1 -0
  265. package/esm/sql-database-dirty-tracker.mjs +20 -0
  266. package/esm/sql-database-dirty-tracker.mjs.map +1 -0
  267. package/esm/sync/model-events.mjs +46 -0
  268. package/esm/sync/model-events.mjs.map +1 -0
  269. package/esm/sync/model-sync-operation.d.mts +159 -0
  270. package/esm/sync/model-sync-operation.d.mts.map +1 -0
  271. package/esm/sync/model-sync-operation.mjs +257 -0
  272. package/esm/sync/model-sync-operation.mjs.map +1 -0
  273. package/esm/sync/model-sync.d.mts +126 -0
  274. package/esm/sync/model-sync.d.mts.map +1 -0
  275. package/esm/sync/model-sync.mjs +157 -0
  276. package/esm/sync/model-sync.mjs.map +1 -0
  277. package/esm/sync/sync-context.d.mts +69 -0
  278. package/esm/sync/sync-context.d.mts.map +1 -0
  279. package/esm/sync/sync-context.mjs +95 -0
  280. package/esm/sync/sync-context.mjs.map +1 -0
  281. package/esm/sync/sync-manager.d.mts +213 -0
  282. package/esm/sync/sync-manager.d.mts.map +1 -0
  283. package/esm/sync/sync-manager.mjs +597 -0
  284. package/esm/sync/sync-manager.mjs.map +1 -0
  285. package/esm/sync/types.d.mts +215 -0
  286. package/esm/sync/types.d.mts.map +1 -0
  287. package/esm/types.d.mts +423 -0
  288. package/esm/types.d.mts.map +1 -0
  289. package/esm/utils/connect-to-database.d.mts +328 -0
  290. package/esm/utils/connect-to-database.d.mts.map +1 -0
  291. package/esm/utils/connect-to-database.mjs +130 -0
  292. package/esm/utils/connect-to-database.mjs.map +1 -0
  293. package/esm/utils/database-writer.utils.d.mts +18 -0
  294. package/esm/utils/database-writer.utils.d.mts.map +1 -0
  295. package/esm/utils/database-writer.utils.mjs +25 -0
  296. package/esm/utils/database-writer.utils.mjs.map +1 -0
  297. package/esm/utils/define-model.d.mts +185 -0
  298. package/esm/utils/define-model.d.mts.map +1 -0
  299. package/esm/utils/define-model.mjs +105 -0
  300. package/esm/utils/define-model.mjs.map +1 -0
  301. package/esm/utils/is-valid-date-value.mjs +22 -0
  302. package/esm/utils/is-valid-date-value.mjs.map +1 -0
  303. package/esm/utils/once-connected.d.mts +150 -0
  304. package/esm/utils/once-connected.d.mts.map +1 -0
  305. package/esm/utils/once-connected.mjs +203 -0
  306. package/esm/utils/once-connected.mjs.map +1 -0
  307. package/esm/validation/database-seal-plugins.d.mts +1 -0
  308. package/esm/validation/database-seal-plugins.mjs +11 -0
  309. package/esm/validation/database-seal-plugins.mjs.map +1 -0
  310. package/esm/validation/database-writer-validation-error.d.mts +101 -0
  311. package/esm/validation/database-writer-validation-error.d.mts.map +1 -0
  312. package/esm/validation/database-writer-validation-error.mjs +153 -0
  313. package/esm/validation/database-writer-validation-error.mjs.map +1 -0
  314. package/esm/validation/index.d.mts +2 -0
  315. package/esm/validation/index.mjs +4 -0
  316. package/esm/validation/mutators/embed-mutator.mjs +26 -0
  317. package/esm/validation/mutators/embed-mutator.mjs.map +1 -0
  318. package/esm/validation/plugins/database-rules-plugin.d.mts +28 -0
  319. package/esm/validation/plugins/database-rules-plugin.d.mts.map +1 -0
  320. package/esm/validation/plugins/database-rules-plugin.mjs +43 -0
  321. package/esm/validation/plugins/database-rules-plugin.mjs.map +1 -0
  322. package/esm/validation/plugins/embed-validator-plugin.d.mts +17 -0
  323. package/esm/validation/plugins/embed-validator-plugin.d.mts.map +1 -0
  324. package/esm/validation/plugins/embed-validator-plugin.mjs +20 -0
  325. package/esm/validation/plugins/embed-validator-plugin.mjs.map +1 -0
  326. package/esm/validation/rules/database-model-rule.mjs +32 -0
  327. package/esm/validation/rules/database-model-rule.mjs.map +1 -0
  328. package/esm/validation/rules/exists-rule.mjs +29 -0
  329. package/esm/validation/rules/exists-rule.mjs.map +1 -0
  330. package/esm/validation/rules/unique-rule.mjs +43 -0
  331. package/esm/validation/rules/unique-rule.mjs.map +1 -0
  332. package/esm/validation/transformers/embed-model-transformer.mjs +17 -0
  333. package/esm/validation/transformers/embed-model-transformer.mjs.map +1 -0
  334. package/esm/validation/types.d.mts +43 -0
  335. package/esm/validation/types.d.mts.map +1 -0
  336. package/esm/validation/validators/embed-validator.d.mts +25 -0
  337. package/esm/validation/validators/embed-validator.d.mts.map +1 -0
  338. package/esm/validation/validators/embed-validator.mjs +42 -0
  339. package/esm/validation/validators/embed-validator.mjs.map +1 -0
  340. package/esm/writer/database-writer.d.mts +178 -0
  341. package/esm/writer/database-writer.d.mts.map +1 -0
  342. package/esm/writer/database-writer.mjs +317 -0
  343. package/esm/writer/database-writer.mjs.map +1 -0
  344. package/llms-full.txt +2027 -0
  345. package/llms.txt +23 -0
  346. package/package.json +60 -51
  347. package/skills/README.md +65 -0
  348. package/skills/aggregate-data/SKILL.md +102 -0
  349. package/skills/cascade-basics/SKILL.md +93 -0
  350. package/skills/configure-delete-strategy/SKILL.md +126 -0
  351. package/skills/define-model/SKILL.md +170 -0
  352. package/skills/define-relations/SKILL.md +171 -0
  353. package/skills/manage-data-sources/SKILL.md +140 -0
  354. package/skills/manage-transactions/SKILL.md +118 -0
  355. package/skills/paginate-results/SKILL.md +122 -0
  356. package/skills/perform-atomic-ops/SKILL.md +98 -0
  357. package/skills/query-data/SKILL.md +168 -0
  358. package/skills/run-cascade-cli/SKILL.md +125 -0
  359. package/skills/search-by-vector/SKILL.md +127 -0
  360. package/skills/subscribe-to-model-events/SKILL.md +148 -0
  361. package/skills/track-changes/SKILL.md +109 -0
  362. package/skills/write-migration/SKILL.md +144 -0
  363. package/cjs/context/database-data-source-context.d.ts +0 -29
  364. package/cjs/context/database-data-source-context.d.ts.map +0 -1
  365. package/cjs/context/database-data-source-context.js +0 -28
  366. package/cjs/context/database-data-source-context.js.map +0 -1
  367. package/cjs/context/database-transaction-context.d.ts +0 -35
  368. package/cjs/context/database-transaction-context.d.ts.map +0 -1
  369. package/cjs/context/database-transaction-context.js +0 -40
  370. package/cjs/context/database-transaction-context.js.map +0 -1
  371. package/cjs/contracts/database-driver.contract.d.ts +0 -450
  372. package/cjs/contracts/database-driver.contract.d.ts.map +0 -1
  373. package/cjs/contracts/database-id-generator.contract.d.ts +0 -109
  374. package/cjs/contracts/database-id-generator.contract.d.ts.map +0 -1
  375. package/cjs/contracts/database-remover.contract.d.ts +0 -104
  376. package/cjs/contracts/database-remover.contract.d.ts.map +0 -1
  377. package/cjs/contracts/database-restorer.contract.d.ts +0 -143
  378. package/cjs/contracts/database-restorer.contract.d.ts.map +0 -1
  379. package/cjs/contracts/database-writer.contract.d.ts +0 -119
  380. package/cjs/contracts/database-writer.contract.d.ts.map +0 -1
  381. package/cjs/contracts/driver-blueprint.contract.d.ts +0 -49
  382. package/cjs/contracts/driver-blueprint.contract.d.ts.map +0 -1
  383. package/cjs/contracts/index.d.ts +0 -10
  384. package/cjs/contracts/index.d.ts.map +0 -1
  385. package/cjs/contracts/migration-driver.contract.d.ts +0 -522
  386. package/cjs/contracts/migration-driver.contract.d.ts.map +0 -1
  387. package/cjs/contracts/query-builder.contract.d.ts +0 -1609
  388. package/cjs/contracts/query-builder.contract.d.ts.map +0 -1
  389. package/cjs/contracts/sync-adapter.contract.d.ts +0 -58
  390. package/cjs/contracts/sync-adapter.contract.d.ts.map +0 -1
  391. package/cjs/data-source/data-source-registry.d.ts +0 -108
  392. package/cjs/data-source/data-source-registry.d.ts.map +0 -1
  393. package/cjs/data-source/data-source-registry.js +0 -145
  394. package/cjs/data-source/data-source-registry.js.map +0 -1
  395. package/cjs/data-source/data-source.d.ts +0 -147
  396. package/cjs/data-source/data-source.d.ts.map +0 -1
  397. package/cjs/data-source/data-source.js +0 -83
  398. package/cjs/data-source/data-source.js.map +0 -1
  399. package/cjs/database-dirty-tracker.d.ts +0 -252
  400. package/cjs/database-dirty-tracker.d.ts.map +0 -1
  401. package/cjs/database-dirty-tracker.js +0 -386
  402. package/cjs/database-dirty-tracker.js.map +0 -1
  403. package/cjs/drivers/mongodb/mongodb-blueprint.d.ts +0 -30
  404. package/cjs/drivers/mongodb/mongodb-blueprint.d.ts.map +0 -1
  405. package/cjs/drivers/mongodb/mongodb-blueprint.js +0 -51
  406. package/cjs/drivers/mongodb/mongodb-blueprint.js.map +0 -1
  407. package/cjs/drivers/mongodb/mongodb-driver.d.ts +0 -325
  408. package/cjs/drivers/mongodb/mongodb-driver.d.ts.map +0 -1
  409. package/cjs/drivers/mongodb/mongodb-driver.js +0 -845
  410. package/cjs/drivers/mongodb/mongodb-driver.js.map +0 -1
  411. package/cjs/drivers/mongodb/mongodb-id-generator.d.ts +0 -116
  412. package/cjs/drivers/mongodb/mongodb-id-generator.d.ts.map +0 -1
  413. package/cjs/drivers/mongodb/mongodb-id-generator.js +0 -149
  414. package/cjs/drivers/mongodb/mongodb-id-generator.js.map +0 -1
  415. package/cjs/drivers/mongodb/mongodb-migration-driver.d.ts +0 -317
  416. package/cjs/drivers/mongodb/mongodb-migration-driver.d.ts.map +0 -1
  417. package/cjs/drivers/mongodb/mongodb-migration-driver.js +0 -666
  418. package/cjs/drivers/mongodb/mongodb-migration-driver.js.map +0 -1
  419. package/cjs/drivers/mongodb/mongodb-query-builder.d.ts +0 -1122
  420. package/cjs/drivers/mongodb/mongodb-query-builder.d.ts.map +0 -1
  421. package/cjs/drivers/mongodb/mongodb-query-builder.js +0 -1988
  422. package/cjs/drivers/mongodb/mongodb-query-builder.js.map +0 -1
  423. package/cjs/drivers/mongodb/mongodb-query-operations.d.ts +0 -226
  424. package/cjs/drivers/mongodb/mongodb-query-operations.d.ts.map +0 -1
  425. package/cjs/drivers/mongodb/mongodb-query-operations.js +0 -270
  426. package/cjs/drivers/mongodb/mongodb-query-operations.js.map +0 -1
  427. package/cjs/drivers/mongodb/mongodb-query-parser.d.ts +0 -262
  428. package/cjs/drivers/mongodb/mongodb-query-parser.d.ts.map +0 -1
  429. package/cjs/drivers/mongodb/mongodb-query-parser.js +0 -1351
  430. package/cjs/drivers/mongodb/mongodb-query-parser.js.map +0 -1
  431. package/cjs/drivers/mongodb/mongodb-sync-adapter.d.ts +0 -79
  432. package/cjs/drivers/mongodb/mongodb-sync-adapter.d.ts.map +0 -1
  433. package/cjs/drivers/mongodb/mongodb-sync-adapter.js +0 -146
  434. package/cjs/drivers/mongodb/mongodb-sync-adapter.js.map +0 -1
  435. package/cjs/drivers/mongodb/types.d.ts +0 -43
  436. package/cjs/drivers/mongodb/types.d.ts.map +0 -1
  437. package/cjs/drivers/postgres/index.d.ts +0 -16
  438. package/cjs/drivers/postgres/index.d.ts.map +0 -1
  439. package/cjs/drivers/postgres/postgres-blueprint.d.ts +0 -64
  440. package/cjs/drivers/postgres/postgres-blueprint.d.ts.map +0 -1
  441. package/cjs/drivers/postgres/postgres-blueprint.js +0 -121
  442. package/cjs/drivers/postgres/postgres-blueprint.js.map +0 -1
  443. package/cjs/drivers/postgres/postgres-dialect.d.ts +0 -136
  444. package/cjs/drivers/postgres/postgres-dialect.d.ts.map +0 -1
  445. package/cjs/drivers/postgres/postgres-dialect.js +0 -268
  446. package/cjs/drivers/postgres/postgres-dialect.js.map +0 -1
  447. package/cjs/drivers/postgres/postgres-driver.d.ts +0 -432
  448. package/cjs/drivers/postgres/postgres-driver.d.ts.map +0 -1
  449. package/cjs/drivers/postgres/postgres-driver.js +0 -1008
  450. package/cjs/drivers/postgres/postgres-driver.js.map +0 -1
  451. package/cjs/drivers/postgres/postgres-migration-driver.d.ts +0 -397
  452. package/cjs/drivers/postgres/postgres-migration-driver.d.ts.map +0 -1
  453. package/cjs/drivers/postgres/postgres-migration-driver.js +0 -900
  454. package/cjs/drivers/postgres/postgres-migration-driver.js.map +0 -1
  455. package/cjs/drivers/postgres/postgres-query-builder.d.ts +0 -254
  456. package/cjs/drivers/postgres/postgres-query-builder.d.ts.map +0 -1
  457. package/cjs/drivers/postgres/postgres-query-builder.js +0 -933
  458. package/cjs/drivers/postgres/postgres-query-builder.js.map +0 -1
  459. package/cjs/drivers/postgres/postgres-query-parser.d.ts +0 -328
  460. package/cjs/drivers/postgres/postgres-query-parser.d.ts.map +0 -1
  461. package/cjs/drivers/postgres/postgres-query-parser.js +0 -868
  462. package/cjs/drivers/postgres/postgres-query-parser.js.map +0 -1
  463. package/cjs/drivers/postgres/postgres-sql-serializer.d.ts +0 -37
  464. package/cjs/drivers/postgres/postgres-sql-serializer.d.ts.map +0 -1
  465. package/cjs/drivers/postgres/postgres-sql-serializer.js +0 -400
  466. package/cjs/drivers/postgres/postgres-sql-serializer.js.map +0 -1
  467. package/cjs/drivers/postgres/postgres-sync-adapter.d.ts +0 -83
  468. package/cjs/drivers/postgres/postgres-sync-adapter.d.ts.map +0 -1
  469. package/cjs/drivers/postgres/postgres-sync-adapter.js +0 -204
  470. package/cjs/drivers/postgres/postgres-sync-adapter.js.map +0 -1
  471. package/cjs/drivers/postgres/types.d.ts +0 -144
  472. package/cjs/drivers/postgres/types.d.ts.map +0 -1
  473. package/cjs/drivers/sql/index.d.ts +0 -10
  474. package/cjs/drivers/sql/index.d.ts.map +0 -1
  475. package/cjs/drivers/sql/sql-dialect.contract.d.ts +0 -204
  476. package/cjs/drivers/sql/sql-dialect.contract.d.ts.map +0 -1
  477. package/cjs/drivers/sql/sql-types.d.ts +0 -202
  478. package/cjs/drivers/sql/sql-types.d.ts.map +0 -1
  479. package/cjs/errors/missing-data-source.error.d.ts +0 -22
  480. package/cjs/errors/missing-data-source.error.d.ts.map +0 -1
  481. package/cjs/errors/missing-data-source.error.js +0 -29
  482. package/cjs/errors/missing-data-source.error.js.map +0 -1
  483. package/cjs/errors/transaction-rollback.error.d.ts +0 -20
  484. package/cjs/errors/transaction-rollback.error.d.ts.map +0 -1
  485. package/cjs/errors/transaction-rollback.error.js +0 -27
  486. package/cjs/errors/transaction-rollback.error.js.map +0 -1
  487. package/cjs/events/model-events.d.ts +0 -231
  488. package/cjs/events/model-events.d.ts.map +0 -1
  489. package/cjs/events/model-events.js +0 -259
  490. package/cjs/events/model-events.js.map +0 -1
  491. package/cjs/expressions/aggregate-expressions.d.ts +0 -215
  492. package/cjs/expressions/aggregate-expressions.d.ts.map +0 -1
  493. package/cjs/expressions/aggregate-expressions.js +0 -221
  494. package/cjs/expressions/aggregate-expressions.js.map +0 -1
  495. package/cjs/expressions/index.d.ts +0 -2
  496. package/cjs/expressions/index.d.ts.map +0 -1
  497. package/cjs/index.d.ts +0 -45
  498. package/cjs/index.d.ts.map +0 -1
  499. package/cjs/index.js +0 -1
  500. package/cjs/index.js.map +0 -1
  501. package/cjs/migration/column-builder.d.ts +0 -417
  502. package/cjs/migration/column-builder.d.ts.map +0 -1
  503. package/cjs/migration/column-builder.js +0 -586
  504. package/cjs/migration/column-builder.js.map +0 -1
  505. package/cjs/migration/column-helpers.d.ts +0 -275
  506. package/cjs/migration/column-helpers.d.ts.map +0 -1
  507. package/cjs/migration/column-helpers.js +0 -389
  508. package/cjs/migration/column-helpers.js.map +0 -1
  509. package/cjs/migration/foreign-key-builder.d.ts +0 -103
  510. package/cjs/migration/foreign-key-builder.d.ts.map +0 -1
  511. package/cjs/migration/foreign-key-builder.js +0 -121
  512. package/cjs/migration/foreign-key-builder.js.map +0 -1
  513. package/cjs/migration/index.d.ts +0 -7
  514. package/cjs/migration/index.d.ts.map +0 -1
  515. package/cjs/migration/migration-runner.d.ts +0 -278
  516. package/cjs/migration/migration-runner.d.ts.map +0 -1
  517. package/cjs/migration/migration-runner.js +0 -815
  518. package/cjs/migration/migration-runner.js.map +0 -1
  519. package/cjs/migration/migration.d.ts +0 -1988
  520. package/cjs/migration/migration.d.ts.map +0 -1
  521. package/cjs/migration/migration.js +0 -2162
  522. package/cjs/migration/migration.js.map +0 -1
  523. package/cjs/migration/sql-grammar.d.ts +0 -61
  524. package/cjs/migration/sql-grammar.d.ts.map +0 -1
  525. package/cjs/migration/sql-grammar.js +0 -164
  526. package/cjs/migration/sql-grammar.js.map +0 -1
  527. package/cjs/migration/sql-serializer.d.ts +0 -22
  528. package/cjs/migration/sql-serializer.d.ts.map +0 -1
  529. package/cjs/migration/sql-serializer.js +0 -26
  530. package/cjs/migration/sql-serializer.js.map +0 -1
  531. package/cjs/migration/types.d.ts +0 -155
  532. package/cjs/migration/types.d.ts.map +0 -1
  533. package/cjs/model/methods/accessor-methods.d.ts +0 -13
  534. package/cjs/model/methods/accessor-methods.d.ts.map +0 -1
  535. package/cjs/model/methods/accessor-methods.js +0 -51
  536. package/cjs/model/methods/accessor-methods.js.map +0 -1
  537. package/cjs/model/methods/delete-methods.d.ts +0 -10
  538. package/cjs/model/methods/delete-methods.d.ts.map +0 -1
  539. package/cjs/model/methods/delete-methods.js +0 -10
  540. package/cjs/model/methods/delete-methods.js.map +0 -1
  541. package/cjs/model/methods/dirty-methods.d.ts +0 -10
  542. package/cjs/model/methods/dirty-methods.d.ts.map +0 -1
  543. package/cjs/model/methods/dirty-methods.js +0 -15
  544. package/cjs/model/methods/dirty-methods.js.map +0 -1
  545. package/cjs/model/methods/hydration-methods.d.ts +0 -10
  546. package/cjs/model/methods/hydration-methods.d.ts.map +0 -1
  547. package/cjs/model/methods/hydration-methods.js +0 -57
  548. package/cjs/model/methods/hydration-methods.js.map +0 -1
  549. package/cjs/model/methods/instance-event-methods.d.ts +0 -7
  550. package/cjs/model/methods/instance-event-methods.d.ts.map +0 -1
  551. package/cjs/model/methods/instance-event-methods.js +0 -15
  552. package/cjs/model/methods/instance-event-methods.js.map +0 -1
  553. package/cjs/model/methods/meta-methods.d.ts +0 -7
  554. package/cjs/model/methods/meta-methods.d.ts.map +0 -1
  555. package/cjs/model/methods/meta-methods.js +0 -78
  556. package/cjs/model/methods/meta-methods.js.map +0 -1
  557. package/cjs/model/methods/query-methods.d.ts +0 -24
  558. package/cjs/model/methods/query-methods.d.ts.map +0 -1
  559. package/cjs/model/methods/query-methods.js +0 -164
  560. package/cjs/model/methods/query-methods.js.map +0 -1
  561. package/cjs/model/methods/restore-methods.d.ts +0 -10
  562. package/cjs/model/methods/restore-methods.d.ts.map +0 -1
  563. package/cjs/model/methods/restore-methods.js +0 -13
  564. package/cjs/model/methods/restore-methods.js.map +0 -1
  565. package/cjs/model/methods/scope-methods.d.ts +0 -7
  566. package/cjs/model/methods/scope-methods.d.ts.map +0 -1
  567. package/cjs/model/methods/scope-methods.js +0 -15
  568. package/cjs/model/methods/scope-methods.js.map +0 -1
  569. package/cjs/model/methods/serialization-methods.d.ts +0 -3
  570. package/cjs/model/methods/serialization-methods.d.ts.map +0 -1
  571. package/cjs/model/methods/serialization-methods.js +0 -27
  572. package/cjs/model/methods/serialization-methods.js.map +0 -1
  573. package/cjs/model/methods/static-event-methods.d.ts +0 -9
  574. package/cjs/model/methods/static-event-methods.d.ts.map +0 -1
  575. package/cjs/model/methods/static-event-methods.js +0 -29
  576. package/cjs/model/methods/static-event-methods.js.map +0 -1
  577. package/cjs/model/methods/write-methods.d.ts +0 -10
  578. package/cjs/model/methods/write-methods.d.ts.map +0 -1
  579. package/cjs/model/methods/write-methods.js +0 -52
  580. package/cjs/model/methods/write-methods.js.map +0 -1
  581. package/cjs/model/model.d.ts +0 -1647
  582. package/cjs/model/model.d.ts.map +0 -1
  583. package/cjs/model/model.js +0 -1657
  584. package/cjs/model/model.js.map +0 -1
  585. package/cjs/model/model.types.d.ts +0 -44
  586. package/cjs/model/model.types.d.ts.map +0 -1
  587. package/cjs/model/register-model.d.ts +0 -81
  588. package/cjs/model/register-model.d.ts.map +0 -1
  589. package/cjs/model/register-model.js +0 -94
  590. package/cjs/model/register-model.js.map +0 -1
  591. package/cjs/query-builder/query-builder.d.ts +0 -556
  592. package/cjs/query-builder/query-builder.d.ts.map +0 -1
  593. package/cjs/query-builder/query-builder.js +0 -1070
  594. package/cjs/query-builder/query-builder.js.map +0 -1
  595. package/cjs/relations/helpers.d.ts +0 -156
  596. package/cjs/relations/helpers.d.ts.map +0 -1
  597. package/cjs/relations/helpers.js +0 -202
  598. package/cjs/relations/helpers.js.map +0 -1
  599. package/cjs/relations/index.d.ts +0 -35
  600. package/cjs/relations/index.d.ts.map +0 -1
  601. package/cjs/relations/pivot-operations.d.ts +0 -160
  602. package/cjs/relations/pivot-operations.d.ts.map +0 -1
  603. package/cjs/relations/pivot-operations.js +0 -293
  604. package/cjs/relations/pivot-operations.js.map +0 -1
  605. package/cjs/relations/relation-hydrator.d.ts +0 -68
  606. package/cjs/relations/relation-hydrator.d.ts.map +0 -1
  607. package/cjs/relations/relation-hydrator.js +0 -81
  608. package/cjs/relations/relation-hydrator.js.map +0 -1
  609. package/cjs/relations/relation-loader.d.ts +0 -194
  610. package/cjs/relations/relation-loader.d.ts.map +0 -1
  611. package/cjs/relations/relation-loader.js +0 -466
  612. package/cjs/relations/relation-loader.js.map +0 -1
  613. package/cjs/relations/types.d.ts +0 -306
  614. package/cjs/relations/types.d.ts.map +0 -1
  615. package/cjs/remover/database-remover.d.ts +0 -100
  616. package/cjs/remover/database-remover.d.ts.map +0 -1
  617. package/cjs/remover/database-remover.js +0 -214
  618. package/cjs/remover/database-remover.js.map +0 -1
  619. package/cjs/restorer/database-restorer.d.ts +0 -131
  620. package/cjs/restorer/database-restorer.d.ts.map +0 -1
  621. package/cjs/restorer/database-restorer.js +0 -434
  622. package/cjs/restorer/database-restorer.js.map +0 -1
  623. package/cjs/sql-database-dirty-tracker.d.ts +0 -13
  624. package/cjs/sql-database-dirty-tracker.d.ts.map +0 -1
  625. package/cjs/sql-database-dirty-tracker.js +0 -14
  626. package/cjs/sql-database-dirty-tracker.js.map +0 -1
  627. package/cjs/sync/index.d.ts +0 -12
  628. package/cjs/sync/index.d.ts.map +0 -1
  629. package/cjs/sync/model-events.d.ts +0 -62
  630. package/cjs/sync/model-events.d.ts.map +0 -1
  631. package/cjs/sync/model-events.js +0 -49
  632. package/cjs/sync/model-events.js.map +0 -1
  633. package/cjs/sync/model-sync-operation.d.ts +0 -163
  634. package/cjs/sync/model-sync-operation.d.ts.map +0 -1
  635. package/cjs/sync/model-sync-operation.js +0 -292
  636. package/cjs/sync/model-sync-operation.js.map +0 -1
  637. package/cjs/sync/model-sync.d.ts +0 -130
  638. package/cjs/sync/model-sync.d.ts.map +0 -1
  639. package/cjs/sync/model-sync.js +0 -178
  640. package/cjs/sync/model-sync.js.map +0 -1
  641. package/cjs/sync/sync-context.d.ts +0 -70
  642. package/cjs/sync/sync-context.d.ts.map +0 -1
  643. package/cjs/sync/sync-context.js +0 -101
  644. package/cjs/sync/sync-context.js.map +0 -1
  645. package/cjs/sync/sync-manager.d.ts +0 -213
  646. package/cjs/sync/sync-manager.d.ts.map +0 -1
  647. package/cjs/sync/sync-manager.js +0 -689
  648. package/cjs/sync/sync-manager.js.map +0 -1
  649. package/cjs/sync/types.d.ts +0 -289
  650. package/cjs/sync/types.d.ts.map +0 -1
  651. package/cjs/test-migrations/test-enhanced-features.migration.d.ts +0 -15
  652. package/cjs/test-migrations/test-enhanced-features.migration.d.ts.map +0 -1
  653. package/cjs/types.d.ts +0 -371
  654. package/cjs/types.d.ts.map +0 -1
  655. package/cjs/utils/connect-to-database.d.ts +0 -307
  656. package/cjs/utils/connect-to-database.d.ts.map +0 -1
  657. package/cjs/utils/connect-to-database.js +0 -130
  658. package/cjs/utils/connect-to-database.js.map +0 -1
  659. package/cjs/utils/database-writer.utils.d.ts +0 -15
  660. package/cjs/utils/database-writer.utils.d.ts.map +0 -1
  661. package/cjs/utils/database-writer.utils.js +0 -14
  662. package/cjs/utils/database-writer.utils.js.map +0 -1
  663. package/cjs/utils/define-model.js +0 -100
  664. package/cjs/utils/define-model.js.map +0 -1
  665. package/cjs/utils/is-valid-date-value.d.ts +0 -5
  666. package/cjs/utils/is-valid-date-value.d.ts.map +0 -1
  667. package/cjs/utils/is-valid-date-value.js +0 -25
  668. package/cjs/utils/is-valid-date-value.js.map +0 -1
  669. package/cjs/utils/once-connected.d.ts +0 -146
  670. package/cjs/utils/once-connected.d.ts.map +0 -1
  671. package/cjs/utils/once-connected.js +0 -251
  672. package/cjs/utils/once-connected.js.map +0 -1
  673. package/cjs/validation/database-seal-plugins.d.ts +0 -12
  674. package/cjs/validation/database-seal-plugins.d.ts.map +0 -1
  675. package/cjs/validation/database-seal-plugins.js +0 -1
  676. package/cjs/validation/database-seal-plugins.js.map +0 -1
  677. package/cjs/validation/database-writer-validation-error.d.ts +0 -97
  678. package/cjs/validation/database-writer-validation-error.d.ts.map +0 -1
  679. package/cjs/validation/database-writer-validation-error.js +0 -160
  680. package/cjs/validation/database-writer-validation-error.js.map +0 -1
  681. package/cjs/validation/index.d.ts +0 -3
  682. package/cjs/validation/index.d.ts.map +0 -1
  683. package/cjs/validation/mutators/embed-mutator.d.ts +0 -9
  684. package/cjs/validation/mutators/embed-mutator.d.ts.map +0 -1
  685. package/cjs/validation/mutators/embed-mutator.js +0 -33
  686. package/cjs/validation/mutators/embed-mutator.js.map +0 -1
  687. package/cjs/validation/plugins/embed-validator-plugin.d.ts +0 -24
  688. package/cjs/validation/plugins/embed-validator-plugin.d.ts.map +0 -1
  689. package/cjs/validation/plugins/embed-validator-plugin.js +0 -18
  690. package/cjs/validation/plugins/embed-validator-plugin.js.map +0 -1
  691. package/cjs/validation/rules/database-model-rule.d.ts +0 -7
  692. package/cjs/validation/rules/database-model-rule.d.ts.map +0 -1
  693. package/cjs/validation/rules/database-model-rule.js +0 -27
  694. package/cjs/validation/rules/database-model-rule.js.map +0 -1
  695. package/cjs/validation/transformers/embed-model-transformer.d.ts +0 -3
  696. package/cjs/validation/transformers/embed-model-transformer.d.ts.map +0 -1
  697. package/cjs/validation/transformers/embed-model-transformer.js +0 -18
  698. package/cjs/validation/transformers/embed-model-transformer.js.map +0 -1
  699. package/cjs/validation/validators/embed-validator.d.ts +0 -21
  700. package/cjs/validation/validators/embed-validator.d.ts.map +0 -1
  701. package/cjs/validation/validators/embed-validator.js +0 -43
  702. package/cjs/validation/validators/embed-validator.js.map +0 -1
  703. package/cjs/writer/database-writer.d.ts +0 -174
  704. package/cjs/writer/database-writer.d.ts.map +0 -1
  705. package/cjs/writer/database-writer.js +0 -400
  706. package/cjs/writer/database-writer.js.map +0 -1
  707. package/esm/context/database-data-source-context.d.ts +0 -29
  708. package/esm/context/database-data-source-context.d.ts.map +0 -1
  709. package/esm/context/database-data-source-context.js +0 -28
  710. package/esm/context/database-data-source-context.js.map +0 -1
  711. package/esm/context/database-transaction-context.d.ts +0 -35
  712. package/esm/context/database-transaction-context.d.ts.map +0 -1
  713. package/esm/context/database-transaction-context.js +0 -40
  714. package/esm/context/database-transaction-context.js.map +0 -1
  715. package/esm/contracts/database-driver.contract.d.ts +0 -450
  716. package/esm/contracts/database-driver.contract.d.ts.map +0 -1
  717. package/esm/contracts/database-id-generator.contract.d.ts +0 -109
  718. package/esm/contracts/database-id-generator.contract.d.ts.map +0 -1
  719. package/esm/contracts/database-remover.contract.d.ts +0 -104
  720. package/esm/contracts/database-remover.contract.d.ts.map +0 -1
  721. package/esm/contracts/database-restorer.contract.d.ts +0 -143
  722. package/esm/contracts/database-restorer.contract.d.ts.map +0 -1
  723. package/esm/contracts/database-writer.contract.d.ts +0 -119
  724. package/esm/contracts/database-writer.contract.d.ts.map +0 -1
  725. package/esm/contracts/driver-blueprint.contract.d.ts +0 -49
  726. package/esm/contracts/driver-blueprint.contract.d.ts.map +0 -1
  727. package/esm/contracts/index.d.ts +0 -10
  728. package/esm/contracts/index.d.ts.map +0 -1
  729. package/esm/contracts/migration-driver.contract.d.ts +0 -522
  730. package/esm/contracts/migration-driver.contract.d.ts.map +0 -1
  731. package/esm/contracts/query-builder.contract.d.ts +0 -1609
  732. package/esm/contracts/query-builder.contract.d.ts.map +0 -1
  733. package/esm/contracts/sync-adapter.contract.d.ts +0 -58
  734. package/esm/contracts/sync-adapter.contract.d.ts.map +0 -1
  735. package/esm/data-source/data-source-registry.d.ts +0 -108
  736. package/esm/data-source/data-source-registry.d.ts.map +0 -1
  737. package/esm/data-source/data-source-registry.js +0 -145
  738. package/esm/data-source/data-source-registry.js.map +0 -1
  739. package/esm/data-source/data-source.d.ts +0 -147
  740. package/esm/data-source/data-source.d.ts.map +0 -1
  741. package/esm/data-source/data-source.js +0 -83
  742. package/esm/data-source/data-source.js.map +0 -1
  743. package/esm/database-dirty-tracker.d.ts +0 -252
  744. package/esm/database-dirty-tracker.d.ts.map +0 -1
  745. package/esm/database-dirty-tracker.js +0 -386
  746. package/esm/database-dirty-tracker.js.map +0 -1
  747. package/esm/drivers/mongodb/mongodb-blueprint.d.ts +0 -30
  748. package/esm/drivers/mongodb/mongodb-blueprint.d.ts.map +0 -1
  749. package/esm/drivers/mongodb/mongodb-blueprint.js +0 -51
  750. package/esm/drivers/mongodb/mongodb-blueprint.js.map +0 -1
  751. package/esm/drivers/mongodb/mongodb-driver.d.ts +0 -325
  752. package/esm/drivers/mongodb/mongodb-driver.d.ts.map +0 -1
  753. package/esm/drivers/mongodb/mongodb-driver.js +0 -845
  754. package/esm/drivers/mongodb/mongodb-driver.js.map +0 -1
  755. package/esm/drivers/mongodb/mongodb-id-generator.d.ts +0 -116
  756. package/esm/drivers/mongodb/mongodb-id-generator.d.ts.map +0 -1
  757. package/esm/drivers/mongodb/mongodb-id-generator.js +0 -149
  758. package/esm/drivers/mongodb/mongodb-id-generator.js.map +0 -1
  759. package/esm/drivers/mongodb/mongodb-migration-driver.d.ts +0 -317
  760. package/esm/drivers/mongodb/mongodb-migration-driver.d.ts.map +0 -1
  761. package/esm/drivers/mongodb/mongodb-migration-driver.js +0 -666
  762. package/esm/drivers/mongodb/mongodb-migration-driver.js.map +0 -1
  763. package/esm/drivers/mongodb/mongodb-query-builder.d.ts +0 -1122
  764. package/esm/drivers/mongodb/mongodb-query-builder.d.ts.map +0 -1
  765. package/esm/drivers/mongodb/mongodb-query-builder.js +0 -1988
  766. package/esm/drivers/mongodb/mongodb-query-builder.js.map +0 -1
  767. package/esm/drivers/mongodb/mongodb-query-operations.d.ts +0 -226
  768. package/esm/drivers/mongodb/mongodb-query-operations.d.ts.map +0 -1
  769. package/esm/drivers/mongodb/mongodb-query-operations.js +0 -270
  770. package/esm/drivers/mongodb/mongodb-query-operations.js.map +0 -1
  771. package/esm/drivers/mongodb/mongodb-query-parser.d.ts +0 -262
  772. package/esm/drivers/mongodb/mongodb-query-parser.d.ts.map +0 -1
  773. package/esm/drivers/mongodb/mongodb-query-parser.js +0 -1351
  774. package/esm/drivers/mongodb/mongodb-query-parser.js.map +0 -1
  775. package/esm/drivers/mongodb/mongodb-sync-adapter.d.ts +0 -79
  776. package/esm/drivers/mongodb/mongodb-sync-adapter.d.ts.map +0 -1
  777. package/esm/drivers/mongodb/mongodb-sync-adapter.js +0 -146
  778. package/esm/drivers/mongodb/mongodb-sync-adapter.js.map +0 -1
  779. package/esm/drivers/mongodb/types.d.ts +0 -43
  780. package/esm/drivers/mongodb/types.d.ts.map +0 -1
  781. package/esm/drivers/postgres/index.d.ts +0 -16
  782. package/esm/drivers/postgres/index.d.ts.map +0 -1
  783. package/esm/drivers/postgres/postgres-blueprint.d.ts +0 -64
  784. package/esm/drivers/postgres/postgres-blueprint.d.ts.map +0 -1
  785. package/esm/drivers/postgres/postgres-blueprint.js +0 -121
  786. package/esm/drivers/postgres/postgres-blueprint.js.map +0 -1
  787. package/esm/drivers/postgres/postgres-dialect.d.ts +0 -136
  788. package/esm/drivers/postgres/postgres-dialect.d.ts.map +0 -1
  789. package/esm/drivers/postgres/postgres-dialect.js +0 -268
  790. package/esm/drivers/postgres/postgres-dialect.js.map +0 -1
  791. package/esm/drivers/postgres/postgres-driver.d.ts +0 -432
  792. package/esm/drivers/postgres/postgres-driver.d.ts.map +0 -1
  793. package/esm/drivers/postgres/postgres-driver.js +0 -1008
  794. package/esm/drivers/postgres/postgres-driver.js.map +0 -1
  795. package/esm/drivers/postgres/postgres-migration-driver.d.ts +0 -397
  796. package/esm/drivers/postgres/postgres-migration-driver.d.ts.map +0 -1
  797. package/esm/drivers/postgres/postgres-migration-driver.js +0 -900
  798. package/esm/drivers/postgres/postgres-migration-driver.js.map +0 -1
  799. package/esm/drivers/postgres/postgres-query-builder.d.ts +0 -254
  800. package/esm/drivers/postgres/postgres-query-builder.d.ts.map +0 -1
  801. package/esm/drivers/postgres/postgres-query-builder.js +0 -933
  802. package/esm/drivers/postgres/postgres-query-builder.js.map +0 -1
  803. package/esm/drivers/postgres/postgres-query-parser.d.ts +0 -328
  804. package/esm/drivers/postgres/postgres-query-parser.d.ts.map +0 -1
  805. package/esm/drivers/postgres/postgres-query-parser.js +0 -868
  806. package/esm/drivers/postgres/postgres-query-parser.js.map +0 -1
  807. package/esm/drivers/postgres/postgres-sql-serializer.d.ts +0 -37
  808. package/esm/drivers/postgres/postgres-sql-serializer.d.ts.map +0 -1
  809. package/esm/drivers/postgres/postgres-sql-serializer.js +0 -400
  810. package/esm/drivers/postgres/postgres-sql-serializer.js.map +0 -1
  811. package/esm/drivers/postgres/postgres-sync-adapter.d.ts +0 -83
  812. package/esm/drivers/postgres/postgres-sync-adapter.d.ts.map +0 -1
  813. package/esm/drivers/postgres/postgres-sync-adapter.js +0 -204
  814. package/esm/drivers/postgres/postgres-sync-adapter.js.map +0 -1
  815. package/esm/drivers/postgres/types.d.ts +0 -144
  816. package/esm/drivers/postgres/types.d.ts.map +0 -1
  817. package/esm/drivers/sql/index.d.ts +0 -10
  818. package/esm/drivers/sql/index.d.ts.map +0 -1
  819. package/esm/drivers/sql/sql-dialect.contract.d.ts +0 -204
  820. package/esm/drivers/sql/sql-dialect.contract.d.ts.map +0 -1
  821. package/esm/drivers/sql/sql-types.d.ts +0 -202
  822. package/esm/drivers/sql/sql-types.d.ts.map +0 -1
  823. package/esm/errors/missing-data-source.error.d.ts +0 -22
  824. package/esm/errors/missing-data-source.error.d.ts.map +0 -1
  825. package/esm/errors/missing-data-source.error.js +0 -29
  826. package/esm/errors/missing-data-source.error.js.map +0 -1
  827. package/esm/errors/transaction-rollback.error.d.ts +0 -20
  828. package/esm/errors/transaction-rollback.error.d.ts.map +0 -1
  829. package/esm/errors/transaction-rollback.error.js +0 -27
  830. package/esm/errors/transaction-rollback.error.js.map +0 -1
  831. package/esm/events/model-events.d.ts +0 -231
  832. package/esm/events/model-events.d.ts.map +0 -1
  833. package/esm/events/model-events.js +0 -259
  834. package/esm/events/model-events.js.map +0 -1
  835. package/esm/expressions/aggregate-expressions.d.ts +0 -215
  836. package/esm/expressions/aggregate-expressions.d.ts.map +0 -1
  837. package/esm/expressions/aggregate-expressions.js +0 -221
  838. package/esm/expressions/aggregate-expressions.js.map +0 -1
  839. package/esm/expressions/index.d.ts +0 -2
  840. package/esm/expressions/index.d.ts.map +0 -1
  841. package/esm/index.d.ts +0 -45
  842. package/esm/index.d.ts.map +0 -1
  843. package/esm/index.js +0 -1
  844. package/esm/index.js.map +0 -1
  845. package/esm/migration/column-builder.d.ts +0 -417
  846. package/esm/migration/column-builder.d.ts.map +0 -1
  847. package/esm/migration/column-builder.js +0 -586
  848. package/esm/migration/column-builder.js.map +0 -1
  849. package/esm/migration/column-helpers.d.ts +0 -275
  850. package/esm/migration/column-helpers.d.ts.map +0 -1
  851. package/esm/migration/column-helpers.js +0 -389
  852. package/esm/migration/column-helpers.js.map +0 -1
  853. package/esm/migration/foreign-key-builder.d.ts +0 -103
  854. package/esm/migration/foreign-key-builder.d.ts.map +0 -1
  855. package/esm/migration/foreign-key-builder.js +0 -121
  856. package/esm/migration/foreign-key-builder.js.map +0 -1
  857. package/esm/migration/index.d.ts +0 -7
  858. package/esm/migration/index.d.ts.map +0 -1
  859. package/esm/migration/migration-runner.d.ts +0 -278
  860. package/esm/migration/migration-runner.d.ts.map +0 -1
  861. package/esm/migration/migration-runner.js +0 -815
  862. package/esm/migration/migration-runner.js.map +0 -1
  863. package/esm/migration/migration.d.ts +0 -1988
  864. package/esm/migration/migration.d.ts.map +0 -1
  865. package/esm/migration/migration.js +0 -2162
  866. package/esm/migration/migration.js.map +0 -1
  867. package/esm/migration/sql-grammar.d.ts +0 -61
  868. package/esm/migration/sql-grammar.d.ts.map +0 -1
  869. package/esm/migration/sql-grammar.js +0 -164
  870. package/esm/migration/sql-grammar.js.map +0 -1
  871. package/esm/migration/sql-serializer.d.ts +0 -22
  872. package/esm/migration/sql-serializer.d.ts.map +0 -1
  873. package/esm/migration/sql-serializer.js +0 -26
  874. package/esm/migration/sql-serializer.js.map +0 -1
  875. package/esm/migration/types.d.ts +0 -155
  876. package/esm/migration/types.d.ts.map +0 -1
  877. package/esm/model/methods/accessor-methods.d.ts +0 -13
  878. package/esm/model/methods/accessor-methods.d.ts.map +0 -1
  879. package/esm/model/methods/accessor-methods.js +0 -51
  880. package/esm/model/methods/accessor-methods.js.map +0 -1
  881. package/esm/model/methods/delete-methods.d.ts +0 -10
  882. package/esm/model/methods/delete-methods.d.ts.map +0 -1
  883. package/esm/model/methods/delete-methods.js +0 -10
  884. package/esm/model/methods/delete-methods.js.map +0 -1
  885. package/esm/model/methods/dirty-methods.d.ts +0 -10
  886. package/esm/model/methods/dirty-methods.d.ts.map +0 -1
  887. package/esm/model/methods/dirty-methods.js +0 -15
  888. package/esm/model/methods/dirty-methods.js.map +0 -1
  889. package/esm/model/methods/hydration-methods.d.ts +0 -10
  890. package/esm/model/methods/hydration-methods.d.ts.map +0 -1
  891. package/esm/model/methods/hydration-methods.js +0 -57
  892. package/esm/model/methods/hydration-methods.js.map +0 -1
  893. package/esm/model/methods/instance-event-methods.d.ts +0 -7
  894. package/esm/model/methods/instance-event-methods.d.ts.map +0 -1
  895. package/esm/model/methods/instance-event-methods.js +0 -15
  896. package/esm/model/methods/instance-event-methods.js.map +0 -1
  897. package/esm/model/methods/meta-methods.d.ts +0 -7
  898. package/esm/model/methods/meta-methods.d.ts.map +0 -1
  899. package/esm/model/methods/meta-methods.js +0 -78
  900. package/esm/model/methods/meta-methods.js.map +0 -1
  901. package/esm/model/methods/query-methods.d.ts +0 -24
  902. package/esm/model/methods/query-methods.d.ts.map +0 -1
  903. package/esm/model/methods/query-methods.js +0 -164
  904. package/esm/model/methods/query-methods.js.map +0 -1
  905. package/esm/model/methods/restore-methods.d.ts +0 -10
  906. package/esm/model/methods/restore-methods.d.ts.map +0 -1
  907. package/esm/model/methods/restore-methods.js +0 -13
  908. package/esm/model/methods/restore-methods.js.map +0 -1
  909. package/esm/model/methods/scope-methods.d.ts +0 -7
  910. package/esm/model/methods/scope-methods.d.ts.map +0 -1
  911. package/esm/model/methods/scope-methods.js +0 -15
  912. package/esm/model/methods/scope-methods.js.map +0 -1
  913. package/esm/model/methods/serialization-methods.d.ts +0 -3
  914. package/esm/model/methods/serialization-methods.d.ts.map +0 -1
  915. package/esm/model/methods/serialization-methods.js +0 -27
  916. package/esm/model/methods/serialization-methods.js.map +0 -1
  917. package/esm/model/methods/static-event-methods.d.ts +0 -9
  918. package/esm/model/methods/static-event-methods.d.ts.map +0 -1
  919. package/esm/model/methods/static-event-methods.js +0 -29
  920. package/esm/model/methods/static-event-methods.js.map +0 -1
  921. package/esm/model/methods/write-methods.d.ts +0 -10
  922. package/esm/model/methods/write-methods.d.ts.map +0 -1
  923. package/esm/model/methods/write-methods.js +0 -52
  924. package/esm/model/methods/write-methods.js.map +0 -1
  925. package/esm/model/model.d.ts +0 -1647
  926. package/esm/model/model.d.ts.map +0 -1
  927. package/esm/model/model.js +0 -1657
  928. package/esm/model/model.js.map +0 -1
  929. package/esm/model/model.types.d.ts +0 -44
  930. package/esm/model/model.types.d.ts.map +0 -1
  931. package/esm/model/register-model.d.ts +0 -81
  932. package/esm/model/register-model.d.ts.map +0 -1
  933. package/esm/model/register-model.js +0 -94
  934. package/esm/model/register-model.js.map +0 -1
  935. package/esm/query-builder/query-builder.d.ts +0 -556
  936. package/esm/query-builder/query-builder.d.ts.map +0 -1
  937. package/esm/query-builder/query-builder.js +0 -1070
  938. package/esm/query-builder/query-builder.js.map +0 -1
  939. package/esm/relations/helpers.d.ts +0 -156
  940. package/esm/relations/helpers.d.ts.map +0 -1
  941. package/esm/relations/helpers.js +0 -202
  942. package/esm/relations/helpers.js.map +0 -1
  943. package/esm/relations/index.d.ts +0 -35
  944. package/esm/relations/index.d.ts.map +0 -1
  945. package/esm/relations/pivot-operations.d.ts +0 -160
  946. package/esm/relations/pivot-operations.d.ts.map +0 -1
  947. package/esm/relations/pivot-operations.js +0 -293
  948. package/esm/relations/pivot-operations.js.map +0 -1
  949. package/esm/relations/relation-hydrator.d.ts +0 -68
  950. package/esm/relations/relation-hydrator.d.ts.map +0 -1
  951. package/esm/relations/relation-hydrator.js +0 -81
  952. package/esm/relations/relation-hydrator.js.map +0 -1
  953. package/esm/relations/relation-loader.d.ts +0 -194
  954. package/esm/relations/relation-loader.d.ts.map +0 -1
  955. package/esm/relations/relation-loader.js +0 -466
  956. package/esm/relations/relation-loader.js.map +0 -1
  957. package/esm/relations/types.d.ts +0 -306
  958. package/esm/relations/types.d.ts.map +0 -1
  959. package/esm/remover/database-remover.d.ts +0 -100
  960. package/esm/remover/database-remover.d.ts.map +0 -1
  961. package/esm/remover/database-remover.js +0 -214
  962. package/esm/remover/database-remover.js.map +0 -1
  963. package/esm/restorer/database-restorer.d.ts +0 -131
  964. package/esm/restorer/database-restorer.d.ts.map +0 -1
  965. package/esm/restorer/database-restorer.js +0 -434
  966. package/esm/restorer/database-restorer.js.map +0 -1
  967. package/esm/sql-database-dirty-tracker.d.ts +0 -13
  968. package/esm/sql-database-dirty-tracker.d.ts.map +0 -1
  969. package/esm/sql-database-dirty-tracker.js +0 -14
  970. package/esm/sql-database-dirty-tracker.js.map +0 -1
  971. package/esm/sync/index.d.ts +0 -12
  972. package/esm/sync/index.d.ts.map +0 -1
  973. package/esm/sync/model-events.d.ts +0 -62
  974. package/esm/sync/model-events.d.ts.map +0 -1
  975. package/esm/sync/model-events.js +0 -49
  976. package/esm/sync/model-events.js.map +0 -1
  977. package/esm/sync/model-sync-operation.d.ts +0 -163
  978. package/esm/sync/model-sync-operation.d.ts.map +0 -1
  979. package/esm/sync/model-sync-operation.js +0 -292
  980. package/esm/sync/model-sync-operation.js.map +0 -1
  981. package/esm/sync/model-sync.d.ts +0 -130
  982. package/esm/sync/model-sync.d.ts.map +0 -1
  983. package/esm/sync/model-sync.js +0 -178
  984. package/esm/sync/model-sync.js.map +0 -1
  985. package/esm/sync/sync-context.d.ts +0 -70
  986. package/esm/sync/sync-context.d.ts.map +0 -1
  987. package/esm/sync/sync-context.js +0 -101
  988. package/esm/sync/sync-context.js.map +0 -1
  989. package/esm/sync/sync-manager.d.ts +0 -213
  990. package/esm/sync/sync-manager.d.ts.map +0 -1
  991. package/esm/sync/sync-manager.js +0 -689
  992. package/esm/sync/sync-manager.js.map +0 -1
  993. package/esm/sync/types.d.ts +0 -289
  994. package/esm/sync/types.d.ts.map +0 -1
  995. package/esm/test-migrations/test-enhanced-features.migration.d.ts +0 -15
  996. package/esm/test-migrations/test-enhanced-features.migration.d.ts.map +0 -1
  997. package/esm/types.d.ts +0 -371
  998. package/esm/types.d.ts.map +0 -1
  999. package/esm/utils/connect-to-database.d.ts +0 -307
  1000. package/esm/utils/connect-to-database.d.ts.map +0 -1
  1001. package/esm/utils/connect-to-database.js +0 -130
  1002. package/esm/utils/connect-to-database.js.map +0 -1
  1003. package/esm/utils/database-writer.utils.d.ts +0 -15
  1004. package/esm/utils/database-writer.utils.d.ts.map +0 -1
  1005. package/esm/utils/database-writer.utils.js +0 -14
  1006. package/esm/utils/database-writer.utils.js.map +0 -1
  1007. package/esm/utils/define-model.js +0 -100
  1008. package/esm/utils/define-model.js.map +0 -1
  1009. package/esm/utils/is-valid-date-value.d.ts +0 -5
  1010. package/esm/utils/is-valid-date-value.d.ts.map +0 -1
  1011. package/esm/utils/is-valid-date-value.js +0 -25
  1012. package/esm/utils/is-valid-date-value.js.map +0 -1
  1013. package/esm/utils/once-connected.d.ts +0 -146
  1014. package/esm/utils/once-connected.d.ts.map +0 -1
  1015. package/esm/utils/once-connected.js +0 -251
  1016. package/esm/utils/once-connected.js.map +0 -1
  1017. package/esm/validation/database-seal-plugins.d.ts +0 -12
  1018. package/esm/validation/database-seal-plugins.d.ts.map +0 -1
  1019. package/esm/validation/database-seal-plugins.js +0 -1
  1020. package/esm/validation/database-seal-plugins.js.map +0 -1
  1021. package/esm/validation/database-writer-validation-error.d.ts +0 -97
  1022. package/esm/validation/database-writer-validation-error.d.ts.map +0 -1
  1023. package/esm/validation/database-writer-validation-error.js +0 -160
  1024. package/esm/validation/database-writer-validation-error.js.map +0 -1
  1025. package/esm/validation/index.d.ts +0 -3
  1026. package/esm/validation/index.d.ts.map +0 -1
  1027. package/esm/validation/mutators/embed-mutator.d.ts +0 -9
  1028. package/esm/validation/mutators/embed-mutator.d.ts.map +0 -1
  1029. package/esm/validation/mutators/embed-mutator.js +0 -33
  1030. package/esm/validation/mutators/embed-mutator.js.map +0 -1
  1031. package/esm/validation/plugins/embed-validator-plugin.d.ts +0 -24
  1032. package/esm/validation/plugins/embed-validator-plugin.d.ts.map +0 -1
  1033. package/esm/validation/plugins/embed-validator-plugin.js +0 -18
  1034. package/esm/validation/plugins/embed-validator-plugin.js.map +0 -1
  1035. package/esm/validation/rules/database-model-rule.d.ts +0 -7
  1036. package/esm/validation/rules/database-model-rule.d.ts.map +0 -1
  1037. package/esm/validation/rules/database-model-rule.js +0 -27
  1038. package/esm/validation/rules/database-model-rule.js.map +0 -1
  1039. package/esm/validation/transformers/embed-model-transformer.d.ts +0 -3
  1040. package/esm/validation/transformers/embed-model-transformer.d.ts.map +0 -1
  1041. package/esm/validation/transformers/embed-model-transformer.js +0 -18
  1042. package/esm/validation/transformers/embed-model-transformer.js.map +0 -1
  1043. package/esm/validation/validators/embed-validator.d.ts +0 -21
  1044. package/esm/validation/validators/embed-validator.d.ts.map +0 -1
  1045. package/esm/validation/validators/embed-validator.js +0 -43
  1046. package/esm/validation/validators/embed-validator.js.map +0 -1
  1047. package/esm/writer/database-writer.d.ts +0 -174
  1048. package/esm/writer/database-writer.d.ts.map +0 -1
  1049. package/esm/writer/database-writer.js +0 -400
  1050. package/esm/writer/database-writer.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.mjs","names":[],"sources":["../../../../../../@warlock.js/cascade/src/migration/migration.ts"],"sourcesContent":["import type {\r\n ColumnDefinition,\r\n ForeignKeyDefinition,\r\n FullTextIndexOptions,\r\n GeoIndexOptions,\r\n IndexDefinition,\r\n MigrationDriverContract,\r\n TableIndexInformation,\r\n VectorIndexOptions,\r\n} from \"../contracts/migration-driver.contract\";\r\nimport type { DataSource } from \"../data-source/data-source\";\r\nimport type { ChildModel, Model } from \"../model/model\";\r\nimport type { MigrationDefaults } from \"../types\";\r\nimport { DatabaseDriver } from \"../utils/connect-to-database\";\r\nimport { ColumnBuilder } from \"./column-builder\";\r\nimport { ForeignKeyBuilder } from \"./foreign-key-builder\";\r\n\r\n/**\r\n * Pending operation types supported by migrations.\r\n */\r\nexport type OperationType =\r\n | \"addColumn\"\r\n | \"dropColumn\"\r\n | \"dropColumns\"\r\n | \"renameColumn\"\r\n | \"modifyColumn\"\r\n | \"createIndex\"\r\n | \"dropIndex\"\r\n | \"createUniqueIndex\"\r\n | \"dropUniqueIndex\"\r\n | \"createFullTextIndex\"\r\n | \"dropFullTextIndex\"\r\n | \"createGeoIndex\"\r\n | \"dropGeoIndex\"\r\n | \"createVectorIndex\"\r\n | \"dropVectorIndex\"\r\n | \"createTTLIndex\"\r\n | \"dropTTLIndex\"\r\n | \"addForeignKey\"\r\n | \"dropForeignKey\"\r\n | \"addPrimaryKey\"\r\n | \"dropPrimaryKey\"\r\n | \"addCheck\"\r\n | \"dropCheck\"\r\n | \"createTable\"\r\n | \"createTableIfNotExists\"\r\n | \"dropTable\"\r\n | \"dropTableIfExists\"\r\n | \"renameTable\"\r\n | \"truncateTable\"\r\n | \"createTimestamps\"\r\n | \"rawStatement\"\r\n | \"setSchemaValidation\"\r\n | \"removeSchemaValidation\";\r\n\r\n/**\r\n * Pending operation to be executed when migration runs.\r\n */\r\nexport type PendingOperation = {\r\n readonly type: OperationType;\r\n readonly payload: unknown;\r\n};\r\n\r\n/**\r\n * Contract for a migration class.\r\n */\r\nexport interface MigrationContract {\r\n /**\r\n * Table/collection name for this migration.\r\n */\r\n readonly table: string;\r\n\r\n /**\r\n * Optional data source override.\r\n */\r\n readonly dataSource?: string | DataSource;\r\n\r\n /**\r\n * Whether to wrap migration in a transaction.\r\n */\r\n readonly transactional?: boolean;\r\n\r\n /**\r\n * Define schema changes for the up migration.\r\n */\r\n up(): void | Promise<void>;\r\n\r\n /**\r\n * Define rollback operations for the down migration.\r\n */\r\n down(): void | Promise<void>;\r\n\r\n /**\r\n * Set the migration driver.\r\n *\r\n * @param driver - Migration driver instance\r\n * @internal\r\n */\r\n setDriver(driver: MigrationDriverContract): void;\r\n\r\n /**\r\n * Set migration defaults from the resolved DataSource.\r\n *\r\n * @param defaults - Migration defaults (UUID strategy, etc.)\r\n * @internal\r\n */\r\n setMigrationDefaults(defaults?: MigrationDefaults): void;\r\n\r\n /**\r\n * Get the migration driver.\r\n *\r\n * @returns The migration driver instance\r\n */\r\n getDriver(): MigrationDriverContract;\r\n\r\n /**\r\n * Execute all pending operations.\r\n *\r\n * @internal\r\n */\r\n execute(): Promise<void>;\r\n\r\n /**\r\n * Add a pending index definition.\r\n *\r\n * @param index - Index definition\r\n * @internal\r\n */\r\n addPendingIndex(index: IndexDefinition): void;\r\n\r\n /**\r\n * Add a foreign key operation.\r\n *\r\n * @param fk - Foreign key definition\r\n * @internal\r\n */\r\n addForeignKeyOperation(fk: ForeignKeyDefinition): void;\r\n\r\n /**\r\n * Create the table/collection.\r\n */\r\n createTable(): MigrationContract;\r\n\r\n /**\r\n * Create table if not exists\r\n */\r\n createTableIfNotExists(): MigrationContract;\r\n\r\n /**\r\n * Drop the table/collection.\r\n */\r\n dropTable(): MigrationContract;\r\n\r\n /**\r\n * Drop the table/collection if it exists.\r\n */\r\n dropTableIfExists(): MigrationContract;\r\n\r\n /**\r\n * Rename the table/collection.\r\n *\r\n * @param newName - New table name\r\n */\r\n renameTableTo(newName: string): MigrationContract;\r\n\r\n /**\r\n * Truncate the table — remove all rows without logging or firing triggers.\r\n */\r\n truncateTable(): MigrationContract;\r\n\r\n /**\r\n * Add a string/varchar column.\r\n */\r\n string(column: string, length?: number): ColumnBuilder;\r\n\r\n /**\r\n * Add a fixed-length char column.\r\n */\r\n char(column: string, length: number): ColumnBuilder;\r\n\r\n /**\r\n * Add a text column (unlimited length).\r\n */\r\n text(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a medium text column.\r\n */\r\n mediumText(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a long text column.\r\n */\r\n longText(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add an integer column.\r\n */\r\n integer(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Alias for integer().\r\n */\r\n int(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a small integer column.\r\n */\r\n smallInteger(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Alias for smallInteger().\r\n */\r\n smallInt(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a tiny integer column.\r\n */\r\n tinyInteger(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Alias for tinyInteger().\r\n */\r\n tinyInt(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a big integer column.\r\n */\r\n bigInteger(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Alias for bigInteger().\r\n */\r\n bigInt(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a float column.\r\n */\r\n float(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a double precision column.\r\n */\r\n double(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a decimal column with precision and scale.\r\n */\r\n decimal(column: string, precision?: number, scale?: number): ColumnBuilder;\r\n\r\n /**\r\n * Add a boolean column.\r\n */\r\n boolean(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Alias for boolean().\r\n */\r\n bool(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a date column (date only, no time).\r\n */\r\n date(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a datetime column (date and time).\r\n */\r\n dateTime(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a timestamp column.\r\n */\r\n timestamp(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a time column (time only, no date).\r\n */\r\n time(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a year column.\r\n */\r\n year(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a JSON column.\r\n */\r\n json(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Alias for json().\r\n */\r\n object(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a binary/blob column.\r\n */\r\n binary(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Alias for binary().\r\n */\r\n blob(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a UUID column.\r\n */\r\n uuid(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a ULID column.\r\n */\r\n ulid(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add an IP address column.\r\n */\r\n ipAddress(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a MAC address column.\r\n */\r\n macAddress(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a geo point column.\r\n */\r\n point(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a polygon column.\r\n */\r\n polygon(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a line string column.\r\n */\r\n lineString(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a generic geometry column.\r\n */\r\n geometry(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add an enum column with allowed values.\r\n */\r\n enum(column: string, values: string[]): ColumnBuilder;\r\n\r\n /**\r\n * Add a set column (multiple values from a set).\r\n */\r\n set(column: string, values: string[]): ColumnBuilder;\r\n\r\n // ── PostgreSQL array types ──────────────────────────────────────────────────\r\n\r\n /** INTEGER[] — array of integers. */\r\n arrayInt(column: string): ColumnBuilder;\r\n\r\n /** BIGINT[] — array of big integers. */\r\n arrayBigInt(column: string): ColumnBuilder;\r\n\r\n /** REAL[] — array of floats. */\r\n arrayFloat(column: string): ColumnBuilder;\r\n\r\n /** DECIMAL[] — array of decimals (optional precision/scale). */\r\n arrayDecimal(column: string, precision?: number, scale?: number): ColumnBuilder;\r\n\r\n /** BOOLEAN[] — array of booleans. */\r\n arrayBoolean(column: string): ColumnBuilder;\r\n\r\n /** TEXT[] — array of text values. */\r\n arrayText(column: string): ColumnBuilder;\r\n\r\n /** DATE[] — array of dates. */\r\n arrayDate(column: string): ColumnBuilder;\r\n\r\n /** TIMESTAMPTZ[] — array of timestamps with time zone. */\r\n arrayTimestamp(column: string): ColumnBuilder;\r\n\r\n /** UUID[] — array of UUIDs. */\r\n arrayUuid(column: string): ColumnBuilder;\r\n\r\n /** JSONB[] — array of JSON objects. */\r\n arrayJson(column: string): ColumnBuilder;\r\n\r\n /**\r\n * Add an auto-increment primary key column.\r\n */\r\n id(name?: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a big integer auto-increment primary key column.\r\n */\r\n bigId(name?: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a UUID primary key column.\r\n */\r\n uuidId(name?: string): ColumnBuilder;\r\n\r\n /**\r\n * Add a UUID primary key column with automatic generation.\r\n *\r\n * PostgreSQL: Uses gen_random_uuid() (built-in since PG 13)\r\n * MongoDB: Application-level UUID generation\r\n *\r\n * @param name - Column name (default: \"id\")\r\n * @returns Column builder for chaining modifiers\r\n *\r\n * @example\r\n * ```typescript\r\n * this.primaryUuid(); // id UUID PRIMARY KEY DEFAULT gen_random_uuid()\r\n * this.primaryUuid(\"organization_id\"); // Custom column name\r\n * ```\r\n */\r\n primaryUuid(name?: string): ColumnBuilder;\r\n\r\n /**\r\n * Add createdAt and updatedAt timestamp columns.\r\n */\r\n timestamps(): MigrationContract;\r\n\r\n /**\r\n * Add a deletedAt column for soft deletes.\r\n */\r\n softDeletes(column?: string): ColumnBuilder;\r\n\r\n /**\r\n * Drop a column.\r\n */\r\n dropColumn(column: string): MigrationContract;\r\n\r\n /**\r\n * Drop multiple columns.\r\n */\r\n dropColumns(...columns: string[]): MigrationContract;\r\n\r\n /**\r\n * Rename a column.\r\n */\r\n renameColumn(from: string, to: string): MigrationContract;\r\n\r\n /**\r\n * Create an index on one or more columns.\r\n *\r\n * @param columns - Column(s) to index\r\n * @param name - Optional index name\r\n * @param options - Optional index options (include, concurrently)\r\n */\r\n index(\r\n columns: string | string[],\r\n name?: string,\r\n options?: { include?: string[]; concurrently?: boolean },\r\n ): MigrationContract;\r\n\r\n /**\r\n * Drop an index by name or columns.\r\n */\r\n dropIndex(nameOrColumns: string | string[]): MigrationContract;\r\n\r\n /**\r\n * Create a unique constraint/index.\r\n *\r\n * @param columns - Column(s) to make unique\r\n * @param name - Optional constraint name\r\n * @param options - Optional index options (include, concurrently)\r\n */\r\n unique(\r\n columns: string | string[],\r\n name?: string,\r\n options?: { include?: string[]; concurrently?: boolean },\r\n ): MigrationContract;\r\n\r\n /**\r\n * Drop a unique constraint/index.\r\n */\r\n dropUnique(columns: string | string[]): MigrationContract;\r\n\r\n /**\r\n * Create an expression-based index.\r\n *\r\n * @param expressions - SQL expression(s) to index, e.g., ['lower(email)', 'upper(name)']\r\n * @param name - Optional index name\r\n * @param options - Optional index options (concurrently)\r\n */\r\n expressionIndex(\r\n expressions: string | string[],\r\n name?: string,\r\n options?: { concurrently?: boolean },\r\n ): MigrationContract;\r\n\r\n /**\r\n * Create a full-text search index.\r\n */\r\n fullText(columns: string | string[], options?: FullTextIndexOptions): MigrationContract;\r\n\r\n /**\r\n * Drop a full-text search index.\r\n */\r\n dropFullText(name: string): MigrationContract;\r\n\r\n /**\r\n * Create a geo-spatial index.\r\n */\r\n geoIndex(column: string, options?: GeoIndexOptions): MigrationContract;\r\n\r\n /**\r\n * Drop a geo-spatial index.\r\n */\r\n dropGeoIndex(column: string): MigrationContract;\r\n\r\n /**\r\n * Create a vector search index for AI embeddings.\r\n */\r\n vectorIndex(column: string, options: VectorIndexOptions): MigrationContract;\r\n\r\n /**\r\n * Drop a vector search index.\r\n */\r\n dropVectorIndex(column: string): MigrationContract;\r\n\r\n /**\r\n * Create a TTL (time-to-live) index for automatic document expiration.\r\n */\r\n ttlIndex(column: string, expireAfterSeconds: number): MigrationContract;\r\n\r\n /**\r\n * Drop a TTL index.\r\n */\r\n dropTTLIndex(column: string): MigrationContract;\r\n\r\n /**\r\n * Add a composite primary key.\r\n */\r\n primaryKey(columns: string[]): MigrationContract;\r\n\r\n /**\r\n * Drop the primary key constraint.\r\n */\r\n dropPrimaryKey(): MigrationContract;\r\n\r\n /**\r\n * Start building a foreign key constraint.\r\n */\r\n foreign(column: string): ForeignKeyBuilder;\r\n\r\n /**\r\n * Drop a foreign key constraint.\r\n *\r\n * When `referencesTable` is provided, the constraint name is auto-computed\r\n * using the same convention as `addForeignKey`:\r\n * `fk_{table}_{column}_{referencesTable}`\r\n *\r\n * When omitted, `columnOrConstraint` is used as the raw constraint name.\r\n */\r\n dropForeign(columnOrConstraint: string, referencesTable?: string): MigrationContract;\r\n\r\n /**\r\n * Set JSON schema validation rules on the collection.\r\n */\r\n schemaValidation(schema: object): MigrationContract;\r\n\r\n /**\r\n * Remove schema validation rules from the collection.\r\n */\r\n dropSchemaValidation(): MigrationContract;\r\n\r\n /**\r\n * Check if a table exists.\r\n */\r\n hasTable(tableName: string): Promise<boolean>;\r\n\r\n /**\r\n * Check if a column exists in the current table.\r\n */\r\n hasColumn(columnName: string): Promise<boolean>;\r\n\r\n /**\r\n * Get all columns in the current table.\r\n */\r\n getColumns(): Promise<ColumnDefinition[]>;\r\n\r\n /**\r\n * List all tables in the current database/connection.\r\n */\r\n listTables(): Promise<string[]>;\r\n\r\n /**\r\n * Get all indexes on the current table.\r\n */\r\n getIndexes(): Promise<TableIndexInformation[]>;\r\n\r\n /**\r\n * Check if a named index exists on the current table.\r\n */\r\n hasIndex(indexName: string): Promise<boolean>;\r\n\r\n /**\r\n * Queue a raw SQL string for execution within the migration.\r\n *\r\n * @param sql - SQL statement to execute\r\n */\r\n raw(sql: string): this;\r\n\r\n /**\r\n * Execute raw operations with direct driver/connection access.\r\n *\r\n * @param callback - Callback receiving the native connection\r\n */\r\n withConnection<T>(callback: (connection: unknown) => Promise<T>): Promise<T>;\r\n\r\n /**\r\n * Add a vector column for storing AI embeddings.\r\n *\r\n * @param column - Column name\r\n * @param dimensions - Embedding size (e.g. 1536 for text-embedding-3-small)\r\n */\r\n vector(column: string, dimensions: number): ColumnBuilder;\r\n}\r\n\r\n/**\r\n * Constructor for the migration class.\r\n */\r\nexport interface MigrationConstructor {\r\n new (): MigrationContract;\r\n migrationName?: string;\r\n createdAt?: string;\r\n transactional?: boolean;\r\n order?: number;\r\n}\r\n\r\n/**\r\n * Base class for all database migrations.\r\n *\r\n * Provides a fluent API for defining schema changes that work across\r\n * both SQL and NoSQL databases. The migration driver handles translating\r\n * operations to native database commands.\r\n *\r\n * Migrations are executed in order based on their `createdAt` timestamp,\r\n * which is typically extracted from the filename (e.g., `2024-01-15_create-users`).\r\n *\r\n * @example\r\n * ```typescript\r\n * // Using Migration.for() to bind to a model\r\n * export default class extends Migration.for(User) {\r\n * public up(): void {\r\n * this.string(\"email\").unique();\r\n * this.integer(\"age\").nullable();\r\n * this.geoIndex(\"location\");\r\n * }\r\n *\r\n * public down(): void {\r\n * this.dropColumn(\"email\");\r\n * this.dropColumn(\"age\");\r\n * this.dropGeoIndex(\"location\");\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```typescript\r\n * // Manual table migration (without model binding)\r\n * export default class CreateUsersTable extends Migration {\r\n * public readonly table = \"users\";\r\n *\r\n * public up(): void {\r\n * this.createTable();\r\n * this.id();\r\n * this.string(\"name\");\r\n * this.string(\"email\").unique();\r\n * this.timestamps();\r\n * }\r\n *\r\n * public down(): void {\r\n * this.dropTable();\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport abstract class Migration implements MigrationContract {\r\n /**\r\n * Migration name that will be labeled with\r\n * If record is enabled in migration, it will be stored as migration name\r\n * in database\r\n *\r\n * @example\r\n * ```typescript\r\n * \"2024-01-15_create-users\";\r\n * ```\r\n */\r\n public static migrationName?: string;\r\n\r\n /**\r\n * Table/collection name for this migration.\r\n *\r\n * Must be defined by each migration class (either directly or via `Migration.for()`).\r\n */\r\n public readonly table!: string;\r\n\r\n /**\r\n * Sort order\r\n * If not provided, it will be ordered alphabetically\r\n */\r\n public static readonly order?: number;\r\n\r\n /**\r\n * Optional data source override.\r\n *\r\n * If specified, this migration will use a specific data source\r\n * instead of the default one. Can be a string name or DataSource instance.\r\n */\r\n public readonly dataSource?: string | DataSource;\r\n\r\n /**\r\n * Optional timestamp override.\r\n *\r\n * By default, the migration runner extracts this from the filename.\r\n * Set explicitly to override the execution order.\r\n *\r\n * Format: ISO 8601 or any parseable date string.\r\n */\r\n public static readonly createdAt?: string;\r\n\r\n /**\r\n * Whether to wrap migration in a transaction.\r\n *\r\n * Defaults to `true` for SQL databases that support DDL transactions.\r\n * Set to `false` for operations that cannot be transactional.\r\n *\r\n * Note: MongoDB does not support transactions for most DDL operations.\r\n */\r\n public readonly transactional?: boolean;\r\n\r\n /**\r\n * Migration driver instance (injected by the runner).\r\n */\r\n protected driver!: MigrationDriverContract;\r\n\r\n /**\r\n * Migration defaults from the resolved DataSource.\r\n * @internal\r\n */\r\n /** @internal — readable by factory-generated subclasses */\r\n protected _migrationDefaults?: MigrationDefaults;\r\n\r\n /**\r\n * Queued operations to execute.\r\n */\r\n private readonly pendingOperations: PendingOperation[] = [];\r\n\r\n // ============================================================================\r\n // ABSTRACT METHODS\r\n // ============================================================================\r\n\r\n /**\r\n * Define schema changes for the up migration.\r\n *\r\n * Called when running migrations forward. Add columns, indexes,\r\n * constraints, etc. in this method.\r\n */\r\n public abstract up(): void | Promise<void>;\r\n\r\n /**\r\n * Define rollback operations for the down migration.\r\n *\r\n * Called when rolling back migrations. Drop columns, indexes,\r\n * and undo any changes made in `up()`.\r\n */\r\n public abstract down(): void | Promise<void>;\r\n\r\n // ============================================================================\r\n // STATIC FACTORY\r\n // ============================================================================\r\n\r\n /**\r\n * Create a migration class bound to a specific model.\r\n *\r\n * Automatically inherits the model's table name and data source,\r\n * reducing boilerplate and ensuring consistency.\r\n *\r\n * @param model - Model class to bind\r\n * @returns Abstract migration class bound to the model\r\n *\r\n * @example\r\n * ```typescript\r\n * export default class extends Migration.for(User) {\r\n * public up(): void {\r\n * this.string(\"avatar\").nullable();\r\n * }\r\n *\r\n * public down(): void {\r\n * this.dropColumn(\"avatar\");\r\n * }\r\n * }\r\n * ```\r\n */\r\n public static for<T extends ChildModel<Model>>(model: T): MigrationConstructor {\r\n abstract class BoundMigration extends Migration {\r\n public readonly table = model.table;\r\n public readonly dataSource = model.dataSource;\r\n }\r\n\r\n return BoundMigration as unknown as MigrationConstructor;\r\n }\r\n\r\n /**\r\n * Create a migration that executes raw SQL statements.\r\n *\r\n * Intended for external packages that ship engine-specific DDL — typically a\r\n * one-shot `CREATE TABLE` bundle whose `up` is the only direction that matters.\r\n * The `down` direction is optional; when omitted, rollback is a recorded no-op.\r\n *\r\n * Raw SQL is engine-locked by definition. This factory is rejected on MongoDB\r\n * data sources at execute time — use the fluent builder for cross-engine work.\r\n *\r\n * @param options - Migration name, SQL statements, and optional overrides\r\n * @returns Migration constructor ready to register with the runner\r\n *\r\n * @example\r\n * ```typescript\r\n * export const createAuthTables = Migration.rawSql({\r\n * name: \"create_auth_tables\",\r\n * up: [\r\n * `CREATE TABLE users (id UUID PRIMARY KEY, email TEXT UNIQUE NOT NULL)`,\r\n * `CREATE TABLE sessions (id UUID PRIMARY KEY, user_id UUID REFERENCES users(id))`,\r\n * ],\r\n * });\r\n * ```\r\n */\r\n public static rawSql(options: {\r\n /**\r\n * Migration name. Used as the tracking key in the migrations table — must\r\n * be unique across the application.\r\n */\r\n name: string;\r\n /**\r\n * SQL statement(s) to execute on the up direction.\r\n */\r\n up: string | string[];\r\n /**\r\n * Optional SQL statement(s) for rollback. If omitted, `down()` is a no-op\r\n * and rollback simply removes the tracking record.\r\n */\r\n down?: string | string[];\r\n /**\r\n * Optional data source override (string name or DataSource instance).\r\n */\r\n dataSource?: string | DataSource;\r\n /**\r\n * Whether to wrap execution in a transaction. Defaults to the runner's\r\n * resolved default.\r\n */\r\n transactional?: boolean;\r\n }): MigrationConstructor {\r\n const { name, up, down, dataSource, transactional } = options;\r\n\r\n const toStatements = (input: string | string[]): string[] =>\r\n Array.isArray(input) ? input : [input];\r\n\r\n class RawSqlMigration extends Migration {\r\n public readonly table = \"\";\r\n public readonly dataSource = dataSource;\r\n public readonly transactional = transactional;\r\n\r\n public up(): void {\r\n this.guardEngine();\r\n for (const sql of toStatements(up)) {\r\n this.raw(sql);\r\n }\r\n }\r\n\r\n public down(): void {\r\n if (down === undefined) return;\r\n this.guardEngine();\r\n for (const sql of toStatements(down)) {\r\n this.raw(sql);\r\n }\r\n }\r\n\r\n private guardEngine(): void {\r\n if (this.databaseEngine === \"mongodb\") {\r\n throw new Error(\r\n `Migration.rawSql (\"${name}\") is not supported on mongodb data sources — use the fluent builder instead.`,\r\n );\r\n }\r\n }\r\n }\r\n\r\n RawSqlMigration.migrationName = name;\r\n return RawSqlMigration as unknown as MigrationConstructor;\r\n }\r\n\r\n // ============================================================================\r\n // DRIVER INJECTION\r\n // ============================================================================\r\n\r\n /**\r\n * Set the migration driver.\r\n *\r\n * Called by the migration runner before executing up/down.\r\n *\r\n * @param driver - Migration driver instance\r\n * @internal\r\n */\r\n public setDriver(driver: MigrationDriverContract): void {\r\n this.driver = driver;\r\n }\r\n\r\n /**\r\n * Set migration defaults from the resolved DataSource.\r\n *\r\n * @param defaults - Migration defaults (UUID strategy, etc.)\r\n * @internal\r\n */\r\n public setMigrationDefaults(defaults?: MigrationDefaults): void {\r\n this._migrationDefaults = defaults;\r\n }\r\n\r\n /**\r\n * Get the migration driver.\r\n *\r\n * @returns The migration driver instance\r\n */\r\n public getDriver(): MigrationDriverContract {\r\n return this.driver;\r\n }\r\n\r\n /**\r\n * Get database engine (MongoDB, Postgress...etc)\r\n */\r\n public get databaseEngine(): DatabaseDriver {\r\n return this.driver.driver.name;\r\n }\r\n\r\n // ============================================================================\r\n // EXECUTE OPERATIONS\r\n // ============================================================================\r\n\r\n /**\r\n * Execute all pending operations.\r\n *\r\n * @deprecated Use toSQL() instead — migrations now generate SQL rather than\r\n * executing DDL directly through the driver.\r\n * @internal\r\n */\r\n public async execute(): Promise<void> {\r\n for (const op of this.pendingOperations) {\r\n await this.executeOperation(op);\r\n }\r\n\r\n this.pendingOperations.length = 0;\r\n }\r\n\r\n /**\r\n * Serialize all queued pending operations into a flat list of SQL strings.\r\n *\r\n * Call this AFTER invoking `up()` or `down()` to extract the SQL for the\r\n * operations that were queued during that call. The pending queue is cleared\r\n * after serializing so the instance is safe to reuse.\r\n *\r\n * @example\r\n * ```typescript\r\n * const migration = new CreateUsersTable();\r\n * migration.setDriver(driver);\r\n *\r\n * // Up SQL\r\n * await migration.up();\r\n * const upSQL = migration.toSQL();\r\n *\r\n * // Down SQL — reuse the same instance\r\n * await migration.down();\r\n * const downSQL = migration.toSQL();\r\n * ```\r\n */\r\n public toSQL(): string[] {\r\n const serializer = this.driver.driver.getSQLSerializer();\r\n const statements = serializer.serializeAll(this.pendingOperations, this.table);\r\n this.pendingOperations.length = 0;\r\n return statements;\r\n }\r\n\r\n /**\r\n * Execute a single pending operation.\r\n */\r\n private async executeOperation(op: PendingOperation): Promise<void> {\r\n switch (op.type) {\r\n case \"addColumn\": {\r\n const column = op.payload as ColumnDefinition;\r\n await this.driver.addColumn(this.table, column);\r\n\r\n if (column.checkConstraint) {\r\n await this.driver.addCheck(\r\n this.table,\r\n column.checkConstraint.name,\r\n column.checkConstraint.expression,\r\n );\r\n }\r\n break;\r\n }\r\n\r\n case \"dropColumn\":\r\n await this.driver.dropColumn(this.table, op.payload as string);\r\n break;\r\n\r\n case \"dropColumns\":\r\n await this.driver.dropColumns(this.table, op.payload as string[]);\r\n break;\r\n\r\n case \"renameColumn\": {\r\n const { from, to } = op.payload as { from: string; to: string };\r\n await this.driver.renameColumn(this.table, from, to);\r\n break;\r\n }\r\n\r\n case \"modifyColumn\":\r\n await this.driver.modifyColumn(this.table, op.payload as ColumnDefinition);\r\n break;\r\n\r\n case \"createIndex\":\r\n await this.driver.createIndex(this.table, op.payload as IndexDefinition);\r\n break;\r\n\r\n case \"dropIndex\":\r\n await this.driver.dropIndex(this.table, op.payload as string);\r\n break;\r\n\r\n case \"createUniqueIndex\": {\r\n const { columns, name } = op.payload as {\r\n columns: string[];\r\n name?: string;\r\n };\r\n await this.driver.createUniqueIndex(this.table, columns, name);\r\n break;\r\n }\r\n\r\n case \"dropUniqueIndex\":\r\n await this.driver.dropUniqueIndex(this.table, op.payload as string[]);\r\n break;\r\n\r\n case \"createFullTextIndex\": {\r\n const { columns, options } = op.payload as {\r\n columns: string[];\r\n options?: FullTextIndexOptions;\r\n };\r\n await this.driver.createFullTextIndex(this.table, columns, options);\r\n break;\r\n }\r\n\r\n case \"dropFullTextIndex\":\r\n await this.driver.dropFullTextIndex(this.table, op.payload as string);\r\n break;\r\n\r\n case \"createGeoIndex\": {\r\n const { column, options } = op.payload as {\r\n column: string;\r\n options?: GeoIndexOptions;\r\n };\r\n await this.driver.createGeoIndex(this.table, column, options);\r\n break;\r\n }\r\n\r\n case \"dropGeoIndex\":\r\n await this.driver.dropGeoIndex(this.table, op.payload as string);\r\n break;\r\n\r\n case \"createVectorIndex\": {\r\n const { column, options } = op.payload as {\r\n column: string;\r\n options: VectorIndexOptions;\r\n };\r\n await this.driver.createVectorIndex(this.table, column, options);\r\n break;\r\n }\r\n\r\n case \"dropVectorIndex\":\r\n await this.driver.dropVectorIndex(this.table, op.payload as string);\r\n break;\r\n\r\n case \"createTTLIndex\": {\r\n const { column, seconds } = op.payload as {\r\n column: string;\r\n seconds: number;\r\n };\r\n await this.driver.createTTLIndex(this.table, column, seconds);\r\n break;\r\n }\r\n\r\n case \"dropTTLIndex\":\r\n await this.driver.dropTTLIndex(this.table, op.payload as string);\r\n break;\r\n\r\n case \"addForeignKey\":\r\n await this.driver.addForeignKey(this.table, op.payload as ForeignKeyDefinition);\r\n break;\r\n\r\n case \"dropForeignKey\":\r\n await this.driver.dropForeignKey(this.table, op.payload as string);\r\n break;\r\n\r\n case \"addPrimaryKey\":\r\n await this.driver.addPrimaryKey(this.table, op.payload as string[]);\r\n break;\r\n\r\n case \"dropPrimaryKey\":\r\n await this.driver.dropPrimaryKey(this.table);\r\n break;\r\n\r\n case \"addCheck\": {\r\n const { name, expression } = op.payload as { name: string; expression: string };\r\n await this.driver.addCheck(this.table, name, expression);\r\n break;\r\n }\r\n\r\n case \"dropCheck\":\r\n await this.driver.dropCheck(this.table, op.payload as string);\r\n break;\r\n\r\n case \"createTable\":\r\n await this.driver.createTable(this.table);\r\n break;\r\n\r\n case \"createTableIfNotExists\":\r\n await this.driver.createTableIfNotExists(this.table);\r\n break;\r\n\r\n case \"dropTable\":\r\n await this.driver.dropTable(this.table);\r\n break;\r\n\r\n case \"dropTableIfExists\":\r\n await this.driver.dropTableIfExists(this.table);\r\n break;\r\n\r\n case \"renameTable\":\r\n await this.driver.renameTable(this.table, op.payload as string);\r\n break;\r\n\r\n case \"truncateTable\":\r\n await this.driver.truncateTable(this.table);\r\n break;\r\n\r\n case \"createTimestamps\":\r\n await this.driver.createTimestampColumns(this.table);\r\n break;\r\n\r\n case \"rawStatement\":\r\n await this.driver.raw(async (client: any) => {\r\n const sql = op.payload as string;\r\n // Handle different driver APIs\r\n if (typeof client.query === \"function\") {\r\n // PostgreSQL, MySQL - client is the driver instance\r\n await client.query(sql);\r\n } else if (typeof client.command === \"function\") {\r\n // MongoDB - client is the Db instance\r\n await client.command({ $eval: sql });\r\n } else {\r\n throw new Error(\"Unsupported database driver for statement execution\");\r\n }\r\n });\r\n break;\r\n\r\n case \"setSchemaValidation\":\r\n await this.driver.setSchemaValidation(this.table, op.payload as object);\r\n break;\r\n\r\n case \"removeSchemaValidation\":\r\n await this.driver.removeSchemaValidation(this.table);\r\n break;\r\n }\r\n }\r\n\r\n // ============================================================================\r\n // SCHEMA INSPECTION\r\n // ============================================================================\r\n\r\n /**\r\n * Check if a table exists.\r\n *\r\n * Useful for conditional migrations and idempotent operations.\r\n *\r\n * @param tableName - Table name to check\r\n * @returns Promise resolving to true if table exists\r\n *\r\n * @example\r\n * ```typescript\r\n * public async up() {\r\n * if (await this.hasTable(\"users_backup\")) {\r\n * this.dropTable(\"users_backup\");\r\n * }\r\n * // ... rest of migration\r\n * }\r\n * ```\r\n */\r\n public async hasTable(tableName: string): Promise<boolean> {\r\n return this.driver.tableExists(tableName);\r\n }\r\n\r\n /**\r\n * Check if a column exists in the current table.\r\n *\r\n * @param columnName - Column name to check\r\n * @returns Promise resolving to true if column exists\r\n *\r\n * @example\r\n * ```typescript\r\n * public async up() {\r\n * if (!(await this.hasColumn(\"email\"))) {\r\n * this.string(\"email\").unique();\r\n * }\r\n * }\r\n * ```\r\n */\r\n public async hasColumn(columnName: string): Promise<boolean> {\r\n const columns = await this.getColumns();\r\n return columns.some((col) => col.name === columnName);\r\n }\r\n\r\n /**\r\n * Get all columns in the current table.\r\n *\r\n * @returns Promise resolving to array of column definitions\r\n *\r\n * @example\r\n * ```typescript\r\n * const columns = await this.getColumns();\r\n * if (columns.find(col => col.type === \"string\" && !col.length)) {\r\n * // migrate all unbounded strings\r\n * }\r\n * ```\r\n */\r\n public async getColumns(): Promise<ColumnDefinition[]> {\r\n return this.driver.listColumns(this.table);\r\n }\r\n\r\n /**\r\n * List all tables in the current database/connection.\r\n *\r\n * @returns Promise resolving to array of table names\r\n *\r\n * @example\r\n * ```typescript\r\n * const tables = await this.listTables();\r\n * for (const table of tables) {\r\n * // process each table\r\n * }\r\n * ```\r\n */\r\n public async listTables(): Promise<string[]> {\r\n return this.driver.listTables();\r\n }\r\n\r\n /**\r\n * Get all indexes on the current table.\r\n */\r\n public async getIndexes(): Promise<TableIndexInformation[]> {\r\n return this.driver.listIndexes(this.table);\r\n }\r\n\r\n /**\r\n * Check if a named index exists on the current table.\r\n */\r\n public async hasIndex(indexName: string): Promise<boolean> {\r\n const indexes = await this.getIndexes();\r\n return indexes.some((idx) => idx.name === indexName);\r\n }\r\n\r\n // ============================================================================\r\n // INTERNAL HELPERS\r\n // ============================================================================\r\n\r\n /**\r\n * Add a pending index definition.\r\n *\r\n * Called by ColumnBuilder when .unique() or .index() is chained.\r\n * Routes into pendingOperations so indexes execute in definition order\r\n * alongside columns and constraints.\r\n *\r\n * @param index - Index definition\r\n * @internal\r\n */\r\n public addPendingIndex(index: IndexDefinition): void {\r\n if (index.unique) {\r\n this.pendingOperations.push({\r\n type: \"createUniqueIndex\",\r\n payload: { columns: index.columns, name: index.name },\r\n });\r\n } else {\r\n this.pendingOperations.push({\r\n type: \"createIndex\",\r\n payload: index,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Add a foreign key operation.\r\n *\r\n * Called by ForeignKeyBuilder or ColumnBuilder when .references() is called.\r\n *\r\n * @param fk - Foreign key definition\r\n * @internal\r\n */\r\n public addForeignKeyOperation(fk: ForeignKeyDefinition): void {\r\n this.pendingOperations.push({\r\n type: \"addForeignKey\",\r\n payload: fk,\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // TABLE OPERATIONS\r\n // ============================================================================\r\n\r\n /**\r\n * Create the table/collection.\r\n *\r\n * For SQL, this creates an empty table.\r\n * For MongoDB, this creates the collection.\r\n *\r\n * @returns This migration for chaining\r\n */\r\n public createTable(): this {\r\n this.pendingOperations.push({ type: \"createTable\", payload: null });\r\n return this;\r\n }\r\n\r\n /**\r\n * Create table if not exists\r\n */\r\n public createTableIfNotExists(): this {\r\n this.pendingOperations.push({ type: \"createTableIfNotExists\", payload: null });\r\n return this;\r\n }\r\n\r\n /**\r\n * Drop the table/collection.\r\n *\r\n * @returns This migration for chaining\r\n */\r\n public dropTable(): this {\r\n this.pendingOperations.push({ type: \"dropTable\", payload: null });\r\n return this;\r\n }\r\n\r\n /**\r\n * Drop the table/collection if it exists.\r\n *\r\n * No error is thrown if the table doesn't exist.\r\n *\r\n * @returns This migration for chaining\r\n */\r\n public dropTableIfExists(): this {\r\n this.pendingOperations.push({ type: \"dropTableIfExists\", payload: null });\r\n return this;\r\n }\r\n\r\n /**\r\n * Rename the table/collection.\r\n *\r\n * @param newName - New table name\r\n * @returns This migration for chaining\r\n */\r\n public renameTableTo(newName: string): this {\r\n this.pendingOperations.push({ type: \"renameTable\", payload: newName });\r\n return this;\r\n }\r\n\r\n /**\r\n * Truncate the table — remove all rows without logging or firing triggers.\r\n *\r\n * Faster than DELETE with no WHERE clause. Resets auto-increment counters\r\n * on most databases.\r\n *\r\n * @returns This migration for chaining\r\n */\r\n public truncateTable(): this {\r\n this.pendingOperations.push({ type: \"truncateTable\", payload: null });\r\n return this;\r\n }\r\n\r\n // ============================================================================\r\n // COLUMN TYPES - STRING\r\n // ============================================================================\r\n\r\n /**\r\n * Add a string/varchar column.\r\n *\r\n * @param column - Column name\r\n * @param length - Max length (default: 255)\r\n * @returns Column builder for chaining modifiers\r\n *\r\n * @example\r\n * ```typescript\r\n * this.string(\"name\"); // VARCHAR(255)\r\n * this.string(\"code\", 10); // VARCHAR(10)\r\n * ```\r\n */\r\n public string(column: string, length = 255): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"string\", { length });\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a fixed-length char column.\r\n *\r\n * @param column - Column name\r\n * @param length - Exact length\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public char(column: string, length: number): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"char\", { length });\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a text column (unlimited length).\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public text(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"text\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a medium text column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public mediumText(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"mediumText\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a long text column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public longText(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"longText\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n // ============================================================================\r\n // COLUMN TYPES - NUMERIC\r\n // ============================================================================\r\n\r\n /**\r\n * Add an integer column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public integer(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"integer\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Alias for integer().\r\n */\r\n public int(column: string): ColumnBuilder {\r\n return this.integer(column);\r\n }\r\n\r\n /**\r\n * Add a small integer column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public smallInteger(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"smallInteger\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Alias for smallInteger().\r\n */\r\n public smallInt(column: string): ColumnBuilder {\r\n return this.smallInteger(column);\r\n }\r\n\r\n /**\r\n * Add a tiny integer column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public tinyInteger(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"tinyInteger\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Alias for tinyInteger().\r\n */\r\n public tinyInt(column: string): ColumnBuilder {\r\n return this.tinyInteger(column);\r\n }\r\n\r\n /**\r\n * Add a big integer column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public bigInteger(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"bigInteger\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Alias for bigInteger().\r\n */\r\n public bigInt(column: string): ColumnBuilder {\r\n return this.bigInteger(column);\r\n }\r\n\r\n /**\r\n * Add a float column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public float(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"float\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a double precision column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public double(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"double\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a decimal column with precision and scale.\r\n *\r\n * @param column - Column name\r\n * @param precision - Total digits (default: 8)\r\n * @param scale - Decimal places (default: 2)\r\n * @returns Column builder for chaining modifiers\r\n *\r\n * @example\r\n * ```typescript\r\n * this.decimal(\"price\", 10, 2); // DECIMAL(10,2) - up to 99999999.99\r\n * ```\r\n */\r\n public decimal(column: string, precision = 8, scale = 2): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"decimal\", {\r\n precision,\r\n scale,\r\n });\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n // ============================================================================\r\n // COLUMN TYPES - BOOLEAN\r\n // ============================================================================\r\n\r\n /**\r\n * Add a boolean column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public boolean(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"boolean\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Alias for boolean().\r\n */\r\n public bool(column: string): ColumnBuilder {\r\n return this.boolean(column);\r\n }\r\n\r\n // ============================================================================\r\n // COLUMN TYPES - DATE/TIME\r\n // ============================================================================\r\n\r\n /**\r\n * Add a date column (date only, no time).\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public date(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"date\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a datetime column (date and time).\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public dateTime(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"dateTime\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a timestamp column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public timestamp(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"timestamp\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a time column (time only, no date).\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public time(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"time\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a year column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public year(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"year\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n // ============================================================================\r\n // COLUMN TYPES - JSON & BINARY\r\n // ============================================================================\r\n\r\n /**\r\n * Add a JSON column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public json(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"json\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Alias for json().\r\n */\r\n public object(column: string): ColumnBuilder {\r\n return this.json(column);\r\n }\r\n\r\n /**\r\n * Add a binary/blob column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public binary(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"binary\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Alias for binary().\r\n */\r\n public blob(column: string): ColumnBuilder {\r\n return this.binary(column);\r\n }\r\n\r\n // ============================================================================\r\n // COLUMN TYPES - IDENTIFIERS\r\n // ============================================================================\r\n\r\n /**\r\n * Add a UUID column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public uuid(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"uuid\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a ULID column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public ulid(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"ulid\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n // ============================================================================\r\n // COLUMN TYPES - NETWORK\r\n // ============================================================================\r\n\r\n /**\r\n * Add an IP address column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public ipAddress(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"ipAddress\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a MAC address column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public macAddress(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"macAddress\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n // ============================================================================\r\n // COLUMN TYPES - GEO & SPATIAL\r\n // ============================================================================\r\n\r\n /**\r\n * Add a geo point column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public point(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"point\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a polygon column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public polygon(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"polygon\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a line string column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public lineString(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"lineString\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a generic geometry column.\r\n *\r\n * @param column - Column name\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public geometry(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"geometry\");\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n // ============================================================================\r\n // COLUMN TYPES - AI/ML\r\n // ============================================================================\r\n\r\n /**\r\n * Add a vector column for AI embeddings.\r\n *\r\n * Used for storing and searching ML embeddings (e.g., OpenAI, Cohere).\r\n *\r\n * @param column - Column name\r\n * @param dimensions - Vector dimensions (e.g., 1536 for OpenAI ada-002)\r\n * @returns Column builder for chaining modifiers\r\n *\r\n * @example\r\n * ```typescript\r\n * this.vector(\"embedding\", 1536); // OpenAI ada-002\r\n * this.vector(\"embedding\", 384); // Sentence Transformers\r\n * ```\r\n */\r\n public vector(column: string, dimensions: number): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"vector\", { dimensions });\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n // ============================================================================\r\n // COLUMN TYPES - ENUM & SET\r\n // ============================================================================\r\n\r\n /**\r\n * Add an enum column with allowed values.\r\n *\r\n * @param column - Column name\r\n * @param values - Allowed enum values\r\n * @returns Column builder for chaining modifiers\r\n *\r\n * @example\r\n * ```typescript\r\n * this.enum(\"status\", [\"pending\", \"active\", \"archived\"]);\r\n * ```\r\n */\r\n public enum(column: string, values: string[]): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"enum\", { values });\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a set column (multiple values from a set).\r\n *\r\n * @param column - Column name\r\n * @param values - Allowed set values\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public set(column: string, values: string[]): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"set\", { values });\r\n this.pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: builder.getDefinition(),\r\n });\r\n return builder;\r\n }\r\n\r\n // ============================================================================\r\n // COLUMN TYPES - POSTGRESQL ARRAYS\r\n // ============================================================================\r\n\r\n /**\r\n * Add an INTEGER[] column (array of integers).\r\n *\r\n * @example\r\n * ```typescript\r\n * this.arrayInt(\"scores\"); // INTEGER[]\r\n * ```\r\n */\r\n public arrayInt(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"arrayInt\");\r\n this.pendingOperations.push({ type: \"addColumn\", payload: builder.getDefinition() });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a BIGINT[] column (array of big integers).\r\n *\r\n * @example\r\n * ```typescript\r\n * this.arrayBigInt(\"ids\"); // BIGINT[]\r\n * ```\r\n */\r\n public arrayBigInt(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"arrayBigInt\");\r\n this.pendingOperations.push({ type: \"addColumn\", payload: builder.getDefinition() });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a REAL[] column (array of floats).\r\n *\r\n * @example\r\n * ```typescript\r\n * this.arrayFloat(\"weights\"); // REAL[]\r\n * ```\r\n */\r\n public arrayFloat(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"arrayFloat\");\r\n this.pendingOperations.push({ type: \"addColumn\", payload: builder.getDefinition() });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a DECIMAL[] column (array of decimals).\r\n *\r\n * @param precision - Total digits\r\n * @param scale - Digits after decimal point\r\n *\r\n * @example\r\n * ```typescript\r\n * this.arrayDecimal(\"prices\", 10, 2); // DECIMAL(10,2)[]\r\n * this.arrayDecimal(\"amounts\"); // DECIMAL[]\r\n * ```\r\n */\r\n public arrayDecimal(column: string, precision?: number, scale?: number): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"arrayDecimal\", { precision, scale });\r\n this.pendingOperations.push({ type: \"addColumn\", payload: builder.getDefinition() });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a BOOLEAN[] column (array of booleans).\r\n *\r\n * @example\r\n * ```typescript\r\n * this.arrayBoolean(\"flags\"); // BOOLEAN[]\r\n * ```\r\n */\r\n public arrayBoolean(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"arrayBoolean\");\r\n this.pendingOperations.push({ type: \"addColumn\", payload: builder.getDefinition() });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a TEXT[] column (array of text values).\r\n *\r\n * @example\r\n * ```typescript\r\n * this.arrayText(\"tags\"); // TEXT[]\r\n * ```\r\n */\r\n public arrayText(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"arrayText\");\r\n this.pendingOperations.push({ type: \"addColumn\", payload: builder.getDefinition() });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a DATE[] column (array of dates).\r\n *\r\n * @example\r\n * ```typescript\r\n * this.arrayDate(\"holidays\"); // DATE[]\r\n * ```\r\n */\r\n public arrayDate(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"arrayDate\");\r\n this.pendingOperations.push({ type: \"addColumn\", payload: builder.getDefinition() });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a TIMESTAMPTZ[] column (array of timestamps with time zone).\r\n *\r\n * @example\r\n * ```typescript\r\n * this.arrayTimestamp(\"events\"); // TIMESTAMPTZ[]\r\n * ```\r\n */\r\n public arrayTimestamp(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"arrayTimestamp\");\r\n this.pendingOperations.push({ type: \"addColumn\", payload: builder.getDefinition() });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a UUID[] column (array of UUIDs).\r\n *\r\n * @example\r\n * ```typescript\r\n * this.arrayUuid(\"relatedIds\"); // UUID[]\r\n * ```\r\n */\r\n public arrayUuid(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"arrayUuid\");\r\n this.pendingOperations.push({ type: \"addColumn\", payload: builder.getDefinition() });\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add a JSONB[] column — array of JSON objects.\r\n *\r\n * @example\r\n * ```typescript\r\n * this.arrayJson(\"metadata\"); // JSONB[]\r\n * ```\r\n */\r\n public arrayJson(column: string): ColumnBuilder {\r\n const builder = new ColumnBuilder(this, column, \"arrayJson\");\r\n this.pendingOperations.push({ type: \"addColumn\", payload: builder.getDefinition() });\r\n return builder;\r\n }\r\n\r\n // ============================================================================\r\n // SHORTCUTS\r\n // ============================================================================\r\n\r\n /**\r\n * Add an auto-increment primary key column.\r\n *\r\n * Creates an unsigned integer with primary key and auto-increment.\r\n *\r\n * @param name - Column name (default: \"id\")\r\n * @returns Column builder for chaining modifiers\r\n *\r\n * @example\r\n * ```typescript\r\n * this.id(); // Creates \"id\" column\r\n * this.id(\"userId\"); // Creates \"userId\" column\r\n * ```\r\n */\r\n public id(name = \"id\"): ColumnBuilder {\r\n return this.integer(name).primary().autoIncrement().unsigned();\r\n }\r\n\r\n /**\r\n * Add a big integer auto-increment primary key column.\r\n *\r\n * @param name - Column name (default: \"id\")\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public bigId(name = \"id\"): ColumnBuilder {\r\n return this.bigInteger(name).primary().autoIncrement().unsigned();\r\n }\r\n\r\n /**\r\n * Add a UUID primary key column.\r\n *\r\n * @param name - Column name (default: \"id\")\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public uuidId(name = \"id\"): ColumnBuilder {\r\n return this.uuid(name).primary();\r\n }\r\n\r\n /**\r\n * Add a UUID primary key column with automatic generation.\r\n *\r\n * Delegates UUID expression to the migration driver, which resolves\r\n * the default based on `migrationDefaults` from the DataSource config.\r\n *\r\n * Resolution order:\r\n * 1. `migrationDefaults.uuidExpression` (raw escape hatch)\r\n * 2. `migrationDefaults.uuidStrategy` (mapped per driver)\r\n * 3. Driver default (PostgreSQL: `gen_random_uuid()`, MongoDB: undefined)\r\n *\r\n * @param name - Column name (default: \"id\")\r\n * @returns Column builder for chaining modifiers\r\n *\r\n * @example\r\n * ```typescript\r\n * this.primaryUuid(); // id UUID PRIMARY KEY DEFAULT gen_random_uuid()\r\n * this.primaryUuid(\"organization_id\"); // Custom column name\r\n * ```\r\n */\r\n public primaryUuid(name = \"id\"): ColumnBuilder {\r\n const uuidDefault = this.driver.getUuidDefault(this._migrationDefaults);\r\n const builder = this.uuid(name).primary();\r\n\r\n if (uuidDefault) {\r\n builder.default(uuidDefault);\r\n }\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Add createdAt and updatedAt timestamp columns.\r\n *\r\n * Behavior varies by database driver:\r\n * - PostgreSQL: Creates TIMESTAMPTZ columns with NOW() defaults\r\n * - MongoDB: No-op (timestamps handled at application level)\r\n *\r\n * @returns This migration for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * this.timestamps(); // Driver-specific implementation\r\n * ```\r\n */\r\n public timestamps(): this {\r\n this.pendingOperations.push({ type: \"createTimestamps\", payload: null });\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a deletedAt column for soft deletes.\r\n *\r\n * @param column - Column name (default: \"deletedAt\")\r\n * @returns Column builder for chaining modifiers\r\n */\r\n public softDeletes(column = \"deletedAt\"): ColumnBuilder {\r\n return this.dateTime(column).nullable();\r\n }\r\n\r\n // ============================================================================\r\n // DROP COLUMN OPERATIONS\r\n // ============================================================================\r\n\r\n /**\r\n * Drop a column.\r\n *\r\n * @param column - Column name to drop\r\n * @returns This migration for chaining\r\n */\r\n public dropColumn(column: string): this {\r\n this.pendingOperations.push({ type: \"dropColumn\", payload: column });\r\n return this;\r\n }\r\n\r\n /**\r\n * Drop multiple columns.\r\n *\r\n * @param columns - Column names to drop\r\n * @returns This migration for chaining\r\n */\r\n public dropColumns(...columns: string[]): this {\r\n this.pendingOperations.push({ type: \"dropColumns\", payload: columns });\r\n return this;\r\n }\r\n\r\n /**\r\n * Rename a column.\r\n *\r\n * @param from - Current column name\r\n * @param to - New column name\r\n * @returns This migration for chaining\r\n */\r\n public renameColumn(from: string, to: string): this {\r\n this.pendingOperations.push({\r\n type: \"renameColumn\",\r\n payload: { from, to },\r\n });\r\n return this;\r\n }\r\n\r\n // ============================================================================\r\n // INDEX OPERATIONS\r\n // ============================================================================\r\n\r\n /**\r\n * Create an index on one or more columns.\r\n *\r\n * @param columns - Column(s) to index\r\n * @param name - Optional index name\r\n * @param options - Optional index options (include, concurrently)\r\n * @returns This migration for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * this.index(\"email\");\r\n * this.index([\"firstName\", \"lastName\"], \"name_idx\");\r\n * this.index(\"userId\", \"idx_user\", { include: [\"name\", \"email\"] });\r\n * this.index(\"email\", \"idx_email\", { concurrently: true });\r\n * ```\r\n */\r\n public index(\r\n columns: string | string[],\r\n name?: string,\r\n options?: { include?: string[]; concurrently?: boolean },\r\n ): this {\r\n const cols = Array.isArray(columns) ? columns : [columns];\r\n this.pendingOperations.push({\r\n type: \"createIndex\",\r\n payload: {\r\n columns: cols,\r\n name,\r\n include: options?.include,\r\n concurrently: options?.concurrently,\r\n } as IndexDefinition,\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Drop an index by name or columns.\r\n *\r\n * @param nameOrColumns - Index name (string) or columns array\r\n * @returns This migration for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * this.dropIndex(\"email_idx\"); // Drop by name\r\n * this.dropIndex([\"firstName\", \"lastName\"]); // Drop by columns\r\n * ```\r\n */\r\n public dropIndex(nameOrColumns: string | string[]): this {\r\n this.pendingOperations.push({\r\n type: \"dropIndex\",\r\n payload: nameOrColumns,\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Create a unique constraint/index.\r\n *\r\n * @param columns - Column(s) to make unique\r\n * @param name - Optional constraint name\r\n * @param options - Optional index options (include, concurrently)\r\n * @returns This migration for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * this.unique(\"email\");\r\n * this.unique([\"userId\", \"roleId\"], \"unique_user_role\");\r\n * this.unique(\"email\", \"unique_email\", { include: [\"name\"] });\r\n * ```\r\n */\r\n public unique(\r\n columns: string | string[],\r\n name?: string,\r\n options?: { include?: string[]; concurrently?: boolean },\r\n ): this {\r\n const cols = Array.isArray(columns) ? columns : [columns];\r\n this.pendingOperations.push({\r\n type: \"createUniqueIndex\",\r\n payload: {\r\n columns: cols,\r\n name,\r\n include: options?.include,\r\n concurrently: options?.concurrently,\r\n },\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Drop a unique constraint/index.\r\n *\r\n * @param columns - Columns in the unique constraint\r\n * @returns This migration for chaining\r\n */\r\n public dropUnique(columns: string | string[]): this {\r\n const cols = Array.isArray(columns) ? columns : [columns];\r\n this.pendingOperations.push({ type: \"dropUniqueIndex\", payload: cols });\r\n return this;\r\n }\r\n\r\n /**\r\n * Create an expression-based index.\r\n *\r\n * Allows indexing on SQL expressions rather than plain columns.\r\n * Useful for case-insensitive searches, computed values, etc.\r\n *\r\n * **Note**: PostgreSQL-specific feature. MongoDB will silently ignore this.\r\n *\r\n * @param expressions - SQL expression(s) to index\r\n * @param name - Optional index name\r\n * @param options - Optional index options (concurrently)\r\n * @returns This migration for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * // Case-insensitive email index\r\n * this.expressionIndex(['lower(email)'], 'idx_email_lower');\r\n *\r\n * // Multiple expressions\r\n * this.expressionIndex(['lower(firstName)', 'lower(lastName)'], 'idx_name_lower');\r\n *\r\n * // With concurrent creation (requires transactional = false)\r\n * this.expressionIndex(['lower(email)'], 'idx_email_lower', { concurrently: true });\r\n * ```\r\n */\r\n public expressionIndex(\r\n expressions: string | string[],\r\n name?: string,\r\n options?: { concurrently?: boolean },\r\n ): this {\r\n const exprs = Array.isArray(expressions) ? expressions : [expressions];\r\n this.pendingOperations.push({\r\n type: \"createIndex\",\r\n payload: {\r\n columns: [], // Empty columns for expression indexes\r\n expressions: exprs,\r\n name,\r\n concurrently: options?.concurrently,\r\n } as IndexDefinition,\r\n });\r\n return this;\r\n }\r\n\r\n // ============================================================================\r\n // FULL-TEXT INDEX\r\n // ============================================================================\r\n\r\n /**\r\n * Create a full-text search index.\r\n *\r\n * @param columns - Column(s) to index\r\n * @param options - Full-text options\r\n * @returns This migration for chaining\r\n */\r\n public fullText(columns: string | string[], options?: FullTextIndexOptions): this {\r\n const cols = Array.isArray(columns) ? columns : [columns];\r\n this.pendingOperations.push({\r\n type: \"createFullTextIndex\",\r\n payload: { columns: cols, options },\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Drop a full-text search index.\r\n *\r\n * @param name - Index name\r\n * @returns This migration for chaining\r\n */\r\n public dropFullText(name: string): this {\r\n this.pendingOperations.push({ type: \"dropFullTextIndex\", payload: name });\r\n return this;\r\n }\r\n\r\n // ============================================================================\r\n // GEO INDEX\r\n // ============================================================================\r\n\r\n /**\r\n * Create a geo-spatial index.\r\n *\r\n * @param column - Geo column\r\n * @param options - Geo index options\r\n * @returns This migration for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * this.geoIndex(\"location\"); // 2dsphere index\r\n * this.geoIndex(\"coordinates\", { type: \"2d\" }); // 2d index\r\n * ```\r\n */\r\n public geoIndex(column: string, options?: GeoIndexOptions): this {\r\n this.pendingOperations.push({\r\n type: \"createGeoIndex\",\r\n payload: { column, options },\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Drop a geo-spatial index.\r\n *\r\n * @param column - Geo column\r\n * @returns This migration for chaining\r\n */\r\n public dropGeoIndex(column: string): this {\r\n this.pendingOperations.push({ type: \"dropGeoIndex\", payload: column });\r\n return this;\r\n }\r\n\r\n // ============================================================================\r\n // VECTOR INDEX\r\n // ============================================================================\r\n\r\n /**\r\n * Create a vector search index for AI embeddings.\r\n *\r\n * @param column - Vector column\r\n * @param options - Vector index options\r\n * @returns This migration for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * this.vectorIndex(\"embedding\", {\r\n * dimensions: 1536,\r\n * similarity: \"cosine\",\r\n * });\r\n * ```\r\n */\r\n public vectorIndex(column: string, options: VectorIndexOptions): this {\r\n this.pendingOperations.push({\r\n type: \"createVectorIndex\",\r\n payload: { column, options },\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Drop a vector search index.\r\n *\r\n * @param column - Vector column\r\n * @returns This migration for chaining\r\n */\r\n public dropVectorIndex(column: string): this {\r\n this.pendingOperations.push({ type: \"dropVectorIndex\", payload: column });\r\n return this;\r\n }\r\n\r\n // ============================================================================\r\n // TTL INDEX\r\n // ============================================================================\r\n\r\n /**\r\n * Create a TTL (time-to-live) index for automatic document expiration.\r\n *\r\n * Primarily for MongoDB. Documents are automatically deleted after the\r\n * specified time has passed since the date in the column.\r\n *\r\n * @param column - Date column to check for expiration\r\n * @param expireAfterSeconds - Seconds after which documents expire\r\n * @returns This migration for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * // Delete sessions 24 hours after createdAt\r\n * this.ttlIndex(\"createdAt\", 86400);\r\n * ```\r\n */\r\n public ttlIndex(column: string, expireAfterSeconds: number): this {\r\n this.pendingOperations.push({\r\n type: \"createTTLIndex\",\r\n payload: { column, seconds: expireAfterSeconds },\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Drop a TTL index.\r\n *\r\n * @param column - Column with TTL\r\n * @returns This migration for chaining\r\n */\r\n public dropTTLIndex(column: string): this {\r\n this.pendingOperations.push({ type: \"dropTTLIndex\", payload: column });\r\n return this;\r\n }\r\n\r\n // ============================================================================\r\n // PRIMARY KEY\r\n // ============================================================================\r\n\r\n /**\r\n * Add a composite primary key.\r\n *\r\n * @param columns - Columns to include in the primary key\r\n * @returns This migration for chaining\r\n */\r\n public primaryKey(columns: string[]): this {\r\n this.pendingOperations.push({ type: \"addPrimaryKey\", payload: columns });\r\n return this;\r\n }\r\n\r\n /**\r\n * Drop the primary key constraint.\r\n *\r\n * @returns This migration for chaining\r\n */\r\n public dropPrimaryKey(): this {\r\n this.pendingOperations.push({ type: \"dropPrimaryKey\", payload: null });\r\n return this;\r\n }\r\n\r\n // ============================================================================\r\n // CHECK CONSTRAINTS\r\n // ============================================================================\r\n\r\n /**\r\n * Add a CHECK constraint to the table.\r\n *\r\n * SQL-only feature. PostgreSQL, MySQL 8.0+, SQLite support this.\r\n * Validates that rows satisfy the given SQL expression.\r\n *\r\n * @param name - Constraint name\r\n * @param expression - SQL CHECK expression\r\n * @returns This migration for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * this.check(\"age_positive\", \"age >= 0\");\r\n * this.check(\"valid_email\", \"email LIKE '%@%'\");\r\n * this.check(\"price_range\", \"price BETWEEN 0 AND 1000000\");\r\n * ```\r\n */\r\n public check(name: string, expression: string): this {\r\n this.pendingOperations.push({\r\n type: \"addCheck\",\r\n payload: { name, expression },\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Drop a CHECK constraint by name.\r\n *\r\n * @param name - Constraint name\r\n * @returns This migration for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * this.dropCheck(\"age_positive\");\r\n * ```\r\n */\r\n public dropCheck(name: string): this {\r\n this.pendingOperations.push({\r\n type: \"dropCheck\",\r\n payload: name,\r\n });\r\n return this;\r\n }\r\n\r\n // ============================================================================\r\n // FOREIGN KEYS (SQL)\r\n // ============================================================================\r\n\r\n /**\r\n * Start building a foreign key constraint on an existing column.\r\n *\r\n * Use this when adding a foreign key to a column that was defined in a\r\n * previous migration. For new columns, prefer the inline form:\r\n * `this.integer(\"user_id\").references(\"users\").onDelete(\"cascade\")`\r\n *\r\n * SQL-only feature; NoSQL drivers ignore foreign keys.\r\n *\r\n * @param column - Local column that references another table\r\n * @returns Foreign key builder for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * this.foreign(\"user_id\")\r\n * .references(\"users\", \"id\")\r\n * .onDelete(\"cascade\");\r\n * ```\r\n */\r\n public foreign(column: string): ForeignKeyBuilder {\r\n return new ForeignKeyBuilder(this, column);\r\n }\r\n\r\n /**\r\n * Drop a foreign key constraint.\r\n *\r\n * Two calling forms:\r\n *\r\n * 1. Auto-compute the name (matches what `addForeignKey` generates):\r\n * ```typescript\r\n * this.dropForeign(\"unit_id\", Unit.table);\r\n * // → drops: fk_{table}_unit_id_units\r\n * ```\r\n *\r\n * 2. Raw constraint name (use when the name was set explicitly):\r\n * ```typescript\r\n * this.dropForeign(\"my_custom_fk_name\");\r\n * ```\r\n *\r\n * @param columnOrConstraint - Column name (auto mode) or raw constraint name (raw mode)\r\n * @param referencesTable - Referenced table name; triggers auto-name computation when provided\r\n * @returns This migration for chaining\r\n */\r\n public dropForeign(columnOrConstraint: string, referencesTable?: string): this {\r\n const constraintName = referencesTable\r\n ? `fk_${this.table}_${columnOrConstraint}_${referencesTable}`\r\n : columnOrConstraint;\r\n this.pendingOperations.push({ type: \"dropForeignKey\", payload: constraintName });\r\n return this;\r\n }\r\n\r\n // ============================================================================\r\n // SCHEMA VALIDATION (NoSQL)\r\n // ============================================================================\r\n\r\n /**\r\n * Set JSON schema validation rules on the collection.\r\n *\r\n * MongoDB-only feature. SQL databases ignore this.\r\n *\r\n * @param schema - JSON Schema object\r\n * @returns This migration for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * this.schemaValidation({\r\n * bsonType: \"object\",\r\n * required: [\"name\", \"email\"],\r\n * properties: {\r\n * name: { bsonType: \"string\" },\r\n * email: { bsonType: \"string\" },\r\n * },\r\n * });\r\n * ```\r\n */\r\n public schemaValidation(schema: object): this {\r\n this.pendingOperations.push({\r\n type: \"setSchemaValidation\",\r\n payload: schema,\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove schema validation rules from the collection.\r\n *\r\n * @returns This migration for chaining\r\n */\r\n public dropSchemaValidation(): this {\r\n this.pendingOperations.push({\r\n type: \"removeSchemaValidation\",\r\n payload: null,\r\n });\r\n return this;\r\n }\r\n\r\n // ============================================================================\r\n // RAW ACCESS\r\n // ============================================================================\r\n\r\n /**\r\n * Execute raw operations with direct driver/connection access.\r\n *\r\n * Use this when you need to bypass the migration API entirely and\r\n * interact with the native database driver directly.\r\n *\r\n * @param callback - Callback receiving the native connection\r\n * @returns Result from callback\r\n *\r\n * @example\r\n * ```typescript\r\n * await this.withConnection(async (db) => {\r\n * await db.collection(\"users\").updateMany({}, { $set: { active: true } });\r\n * });\r\n * ```\r\n */\r\n public async withConnection<T>(callback: (connection: unknown) => Promise<T>): Promise<T> {\r\n return this.driver.raw(callback);\r\n }\r\n\r\n /**\r\n * Queue a raw SQL string for execution within the migration.\r\n *\r\n * The statement is queued and executed in order with other migration\r\n * operations, within the transaction context if the migration is transactional.\r\n *\r\n * Use `withConnection()` instead if you need direct driver access.\r\n *\r\n * Works with PostgreSQL, MySQL, etc. For MongoDB, uses $eval command.\r\n *\r\n * @param sql - SQL statement to execute\r\n * @returns This migration for chaining\r\n *\r\n * @example\r\n * ```typescript\r\n * // Enable PostgreSQL extension\r\n * this.raw('CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\"');\r\n *\r\n * // Create custom type\r\n * this.raw('CREATE TYPE mood AS ENUM (\\'happy\\', \\'sad\\', \\'neutral\\')');\r\n * ```\r\n */\r\n public raw(sql: string): this {\r\n this.pendingOperations.push({\r\n type: \"rawStatement\",\r\n payload: sql,\r\n });\r\n return this;\r\n }\r\n\r\n // ============================================================================\r\n // DECLARATIVE FACTORY STUBS\r\n // These are assigned after the class body — declared here so TS knows the\r\n // shape of the static members without triggering abstract-class restrictions.\r\n // ============================================================================\r\n\r\n /**\r\n * Create a declarative initial-table migration.\r\n * Implemented and assigned below the class body.\r\n */\r\n public static create: (\r\n model: ChildModel<Model<any>>,\r\n columns: ColumnMap,\r\n options?: MigrationCreateOptions,\r\n ) => MigrationConstructor;\r\n\r\n /**\r\n * Create a declarative alteration migration.\r\n * Implemented and assigned below the class body.\r\n */\r\n public static alter: (\r\n model: ChildModel<Model<any>>,\r\n schema: AlterSchema,\r\n options?: MigrationAlterOptions,\r\n ) => MigrationConstructor;\r\n}\r\n\r\nexport function migrate(\r\n model: ChildModel<Model<any>>,\r\n options?: {\r\n createdAt?: string;\r\n name?: string;\r\n up?: (this: MigrationContract) => void | Promise<void>;\r\n down?: (this: MigrationContract) => void | Promise<void>;\r\n transactional?: boolean;\r\n },\r\n): MigrationConstructor {\r\n return class AnonymousMigration extends Migration {\r\n public static migrationName?: string = options?.name;\r\n public static createdAt?: string = options?.createdAt;\r\n public readonly table: string = model.table;\r\n public static transactional?: boolean = options?.transactional;\r\n\r\n public async up() {\r\n await options?.up?.call(this);\r\n }\r\n\r\n public async down() {\r\n await options?.down?.call(this);\r\n }\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// DECLARATIVE FACTORIES\r\n// ============================================================================\r\n\r\n/**\r\n * A single composite index entry for `Migration.create()` options.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Simple — columns only, name and type auto-resolved\r\n * { columns: [\"organization_id\", \"content_type\"] }\r\n *\r\n * // Named\r\n * { columns: [\"organization_id\", \"content_type\"], name: \"idx_org_content\" }\r\n *\r\n * // Typed (PostgreSQL)\r\n * { columns: [\"embedding\"], using: \"ivfflat\" }\r\n * ```\r\n */\r\nexport type IndexEntry = {\r\n /** Column(s) to include in the index. */\r\n columns: string | string[];\r\n /** Optional explicit index name. Auto-generated when omitted. */\r\n name?: string;\r\n /**\r\n * Index access method (PostgreSQL).\r\n * Defaults to `\"btree\"` when omitted.\r\n */\r\n using?: \"btree\" | \"hash\" | \"gin\" | \"gist\" | \"brin\" | \"ivfflat\" | \"hnsw\" | (string & {});\r\n /** Extra columns to include in a covering index (PostgreSQL `INCLUDE`). */\r\n include?: string[];\r\n /** Build the index without locking the table (PostgreSQL). */\r\n concurrently?: boolean;\r\n};\r\n\r\n/**\r\n * A single composite unique constraint entry for `Migration.create()` options.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Simple\r\n * { columns: [\"organization_id\", \"email\"] }\r\n *\r\n * // Named — useful when you need to reference it in a future ALTER\r\n * { columns: [\"org_id\", \"content_id\", \"lang\"], name: \"uq_summary_idempotency\" }\r\n * ```\r\n */\r\nexport type UniqueEntry = {\r\n /** Column(s) that must be unique together. */\r\n columns: string | string[];\r\n /** Optional explicit constraint name. Auto-generated when omitted. */\r\n name?: string;\r\n /** Extra columns to include (PostgreSQL covering unique index). */\r\n include?: string[];\r\n /** Build the constraint without locking the table (PostgreSQL). */\r\n concurrently?: boolean;\r\n};\r\n\r\n/**\r\n * Options accepted by `Migration.create()`.\r\n */\r\nexport type MigrationCreateOptions = {\r\n /**\r\n * Sort order override.\r\n * @default 0\r\n */\r\n order?: number;\r\n\r\n /**\r\n * ISO timestamp override for migration ordering.\r\n * Normally extracted from the filename by the runner.\r\n */\r\n createdAt?: string;\r\n\r\n /**\r\n * Override the primary key type for this migration only.\r\n *\r\n * - `\"uuid\"` — UUID primary key (uses `primaryUuid()`)\r\n * - `\"int\"` — Auto-increment integer (uses `id()`)\r\n * - `\"bigInt\"` — Big auto-increment integer (uses `bigId()`)\r\n * - `false` — Skip primary key generation entirely\r\n *\r\n * When omitted, falls back to `migrationDefaults.primaryKey` from the\r\n * DataSource config, then to `\"int\"` as the framework default.\r\n */\r\n primaryKey?: \"uuid\" | \"int\" | \"bigInt\" | false;\r\n\r\n /**\r\n * Whether to add `timestamps()` (created_at / updated_at).\r\n * @default true\r\n */\r\n timestamps?: boolean;\r\n\r\n /**\r\n * Whether to wrap this migration in a transaction.\r\n * Falls back to DataSource / driver defaults when omitted.\r\n */\r\n transactional?: boolean;\r\n\r\n /**\r\n * Composite indexes to create on the table.\r\n *\r\n * Use this for multi-column indexes. Single-column indexes should be\r\n * defined at the column level via `.index()`.\r\n *\r\n * @example\r\n * ```typescript\r\n * index: [\r\n * { columns: [\"organization_id\", \"content_type\", \"content_id\"] },\r\n * { columns: [\"organization_id\", \"status\"], name: \"idx_org_status\" },\r\n * ]\r\n * ```\r\n */\r\n index?: IndexEntry[];\r\n\r\n /**\r\n * Composite unique constraints to create on the table.\r\n *\r\n * Use this for multi-column uniqueness. Single-column unique constraints\r\n * should be defined at the column level via `.unique()`.\r\n *\r\n * @example\r\n * ```typescript\r\n * unique: [\r\n * {\r\n * columns: [\"organization_id\", \"content_id\", \"content_language\"],\r\n * name: \"uq_summary_idempotency\",\r\n * },\r\n * ]\r\n * ```\r\n */\r\n unique?: UniqueEntry[];\r\n\r\n /**\r\n * Custom logic to execute after the declarative definitions.\r\n * Useful for data seeding or raw SQL following table creation.\r\n */\r\n up?: (this: Migration) => void | Promise<void>;\r\n\r\n /**\r\n * Raw SQL queries to run before the custom `up` logic.\r\n * Useful for triggering statements or custom constraints.\r\n */\r\n raw?: string | string[];\r\n\r\n /**\r\n * Custom rollback logic to execute before the default `dropTableIfExists`.\r\n */\r\n down?: (this: Migration) => void | Promise<void>;\r\n};\r\n\r\n/**\r\n * Column map accepted by `Migration.create()` and `Migration.alter()`.\r\n *\r\n * Keys become the column names; values are `DetachedColumnBuilder` instances\r\n * produced by the standalone column helpers (`uuid()`, `text()`, etc.).\r\n */\r\nexport type ColumnMap = Record<string, import(\"./column-helpers\").DetachedColumnBuilder>;\r\n\r\n/**\r\n * Options accepted by `Migration.alter()`.\r\n */\r\nexport type MigrationAlterOptions = {\r\n /** Sort order override. */\r\n order?: number;\r\n /** ISO timestamp override. */\r\n createdAt?: string;\r\n /** Whether to wrap in a transaction. */\r\n transactional?: boolean;\r\n\r\n /**\r\n * Custom logic to execute after the declarative definitions.\r\n */\r\n up?: (this: Migration) => void | Promise<void>;\r\n\r\n /**\r\n * Custom rollback logic to execute on rollback.\r\n * Unlike `create()`, `alter()` does not auto-infer rollbacks.\r\n */\r\n down?: (this: Migration) => void | Promise<void>;\r\n};\r\n\r\n/**\r\n * Schema map passed to `Migration.alter()`.\r\n *\r\n * Groups all table-level DDL operations by intent.\r\n * Any key can be omitted when not needed.\r\n *\r\n * @example\r\n * ```typescript\r\n * export default Migration.alter(User, {\r\n * // Column operations\r\n * add: { phone: text().nullable() },\r\n * drop: [\"legacy_column\"],\r\n * rename: { old_name: \"new_name\" },\r\n * modify: { email: string(320).notNullable() },\r\n *\r\n * // Index / constraint operations\r\n * addIndex: [{ columns: [\"first_name\", \"last_name\"] }],\r\n * addUnique: [{ columns: [\"email\"] }],\r\n * addForeign: [{ column: \"team_id\", references: Team }],\r\n * dropIndexes: [\"old_idx_name\"],\r\n * dropUnique: [[\"email\"]],\r\n * });\r\n * ```\r\n */\r\nexport type AlterSchema = {\r\n // ============================================================================\r\n // Column Operations\r\n // ============================================================================\r\n\r\n /** Columns to add. Keys become column names. */\r\n add?: ColumnMap;\r\n\r\n /** Column names to drop. */\r\n drop?: string[];\r\n\r\n /** Rename map: `{ oldName: newName }`. */\r\n rename?: Record<string, string>;\r\n\r\n /** Columns to modify. Keys become column names. */\r\n modify?: ColumnMap;\r\n\r\n // ============================================================================\r\n // Index Operations\r\n // ============================================================================\r\n\r\n /**\r\n * Regular indexes to add.\r\n *\r\n * @example\r\n * ```typescript\r\n * addIndex: [\r\n * { columns: \"email\" },\r\n * { columns: [\"first_name\", \"last_name\"], name: \"idx_full_name\" },\r\n * { columns: \"email\", options: { concurrently: true } },\r\n * ]\r\n * ```\r\n */\r\n addIndex?: Array<{\r\n columns: string | string[];\r\n name?: string;\r\n options?: { include?: string[]; concurrently?: boolean };\r\n }>;\r\n\r\n /**\r\n * Indexes to drop (by name or columns array).\r\n *\r\n * @example\r\n * ```typescript\r\n * dropIndex: [\"idx_old_name\", [\"first_name\", \"last_name\"]]\r\n * ```\r\n */\r\n dropIndex?: Array<string | string[]>;\r\n\r\n /**\r\n * Unique constraints / indexes to add.\r\n *\r\n * @example\r\n * ```typescript\r\n * addUnique: [{ columns: \"email\" }]\r\n * ```\r\n */\r\n addUnique?: Array<{\r\n columns: string | string[];\r\n name?: string;\r\n options?: { include?: string[]; concurrently?: boolean };\r\n }>;\r\n\r\n /**\r\n * Unique constraints to drop (by columns array).\r\n *\r\n * @example\r\n * ```typescript\r\n * dropUnique: [[\"email\"], [\"phone\"]]\r\n * ```\r\n */\r\n dropUnique?: Array<string | string[]>;\r\n\r\n /**\r\n * Expression-based indexes to add (PostgreSQL-specific).\r\n *\r\n * @example\r\n * ```typescript\r\n * addExpressionIndex: [\r\n * { expressions: \"lower(email)\", name: \"idx_email_lower\" },\r\n * ]\r\n * ```\r\n */\r\n addExpressionIndex?: Array<{\r\n expressions: string | string[];\r\n name?: string;\r\n options?: { concurrently?: boolean };\r\n }>;\r\n\r\n // ============================================================================\r\n // Specialized Indexes\r\n // ============================================================================\r\n\r\n /**\r\n * Full-text search indexes to add.\r\n *\r\n * @example\r\n * ```typescript\r\n * addFullText: [{ columns: [\"title\", \"body\"] }]\r\n * ```\r\n */\r\n addFullText?: Array<{\r\n columns: string | string[];\r\n options?: FullTextIndexOptions;\r\n }>;\r\n\r\n /** Full-text indexes to drop (by name). */\r\n dropFullText?: string[];\r\n\r\n /**\r\n * Geo-spatial indexes to add.\r\n *\r\n * @example\r\n * ```typescript\r\n * addGeoIndex: [{ column: \"location\" }]\r\n * ```\r\n */\r\n addGeoIndex?: Array<{\r\n column: string;\r\n options?: GeoIndexOptions;\r\n }>;\r\n\r\n /** Geo indexes to drop (by column name). */\r\n dropGeoIndex?: string[];\r\n\r\n /**\r\n * Vector search indexes to add.\r\n *\r\n * @example\r\n * ```typescript\r\n * addVectorIndex: [{ column: \"embedding\", options: { dimensions: 1536, similarity: \"cosine\" } }]\r\n * ```\r\n */\r\n addVectorIndex?: Array<{\r\n column: string;\r\n options: VectorIndexOptions;\r\n }>;\r\n\r\n /** Vector indexes to drop (by column name). */\r\n dropVectorIndex?: string[];\r\n\r\n /**\r\n * TTL indexes to add (MongoDB-primary).\r\n *\r\n * @example\r\n * ```typescript\r\n * addTTLIndex: [{ column: \"created_at\", expireAfterSeconds: 86400 }]\r\n * ```\r\n */\r\n addTTLIndex?: Array<{ column: string; expireAfterSeconds: number }>;\r\n\r\n /** TTL indexes to drop (by column name). */\r\n dropTTLIndex?: string[];\r\n\r\n // ============================================================================\r\n // Constraints (SQL)\r\n // ============================================================================\r\n\r\n /**\r\n * Foreign keys to add to existing columns.\r\n *\r\n * Accepts a Model class or a raw table-name string for `references`.\r\n *\r\n * @example\r\n * ```typescript\r\n * addForeign: [\r\n * { column: \"team_id\", references: Team, onDelete: \"cascade\" },\r\n * { column: \"owner_id\", references: \"users\", on: \"id\", onDelete: \"setNull\" },\r\n * ]\r\n * ```\r\n */\r\n addForeign?: Array<{\r\n column: string;\r\n references: string | { table: string };\r\n on?: string;\r\n onDelete?: \"cascade\" | \"restrict\" | \"setNull\" | \"noAction\";\r\n onUpdate?: \"cascade\" | \"restrict\" | \"setNull\" | \"noAction\";\r\n }>;\r\n\r\n /**\r\n * Foreign keys to drop.\r\n *\r\n * Two forms:\r\n * - `{ columnOrConstraint: \"team_id\", referencesTable: \"teams\" }` → auto-name resolution\r\n * - `{ columnOrConstraint: \"fk_my_custom_name\" }` → raw constraint name\r\n */\r\n dropForeign?: Array<{ columnOrConstraint: string; referencesTable?: string }>;\r\n\r\n /**\r\n * CHECK constraints to add.\r\n *\r\n * @example\r\n * ```typescript\r\n * addCheck: [{ name: \"age_positive\", expression: \"age >= 0\" }]\r\n * ```\r\n */\r\n addCheck?: Array<{ name: string; expression: string }>;\r\n\r\n /** CHECK constraints to drop (by name). */\r\n dropCheck?: string[];\r\n\r\n // ============================================================================\r\n // Raw SQL\r\n // ============================================================================\r\n\r\n /**\r\n * Raw SQL queries to execute as part of this alter operation.\r\n */\r\n raw?: string | string[];\r\n};\r\n\r\n/**\r\n * Wire a `ColumnMap` onto an active migration instance.\r\n *\r\n * Fixes up the placeholder column name in each `DetachedColumnBuilder`,\r\n * pushes the `addColumn` operation, and transfers any pending FK / index\r\n * side effects from the detached sink to the real migration.\r\n *\r\n * @internal\r\n */\r\nfunction wireColumns(migration: Migration, columns: ColumnMap): void {\r\n for (const [columnName, detached] of Object.entries(columns)) {\r\n // Overwrite the placeholder name with the real key\r\n const definition = detached.getDefinition();\r\n (definition as any).name = columnName;\r\n\r\n // Push the addColumn operation\r\n (migration as any).pendingOperations.push({\r\n type: \"addColumn\",\r\n payload: definition,\r\n });\r\n\r\n // Transfer any index operations registered via .unique() / .index()\r\n // Replace the placeholder column name with the real column name before transfer.\r\n for (const idx of detached.sink.pendingIndexes) {\r\n idx.columns = idx.columns.map((col) => (col === \"__placeholder__\" ? columnName : col));\r\n migration.addPendingIndex(idx);\r\n }\r\n\r\n // Transfer any FK operations registered via .references()\r\n for (const fk of detached.sink.pendingForeignKeys as any[]) {\r\n // Fix the column name on the FK definition too\r\n fk.column = columnName;\r\n migration.addForeignKeyOperation(fk);\r\n }\r\n\r\n // Transfer any Vector indexes registered via .vectorIndex()\r\n if (detached.sink.pendingVectorIndexes) {\r\n for (const vIdx of detached.sink.pendingVectorIndexes) {\r\n vIdx.column = columnName;\r\n migration.vectorIndex(vIdx.column, vIdx.options);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Create a declarative initial-table migration.\r\n *\r\n * Automatically handles:\r\n * - `createTableIfNotExists()`\r\n * - Primary key (type resolved from `migrationDefaults.primaryKey` → options → `\"int\"`)\r\n * - `timestamps()`\r\n * - `down()` → `dropTableIfExists()`\r\n *\r\n * The class-based API remains available for complex migrations (raw SQL,\r\n * data backfills, conditional logic).\r\n *\r\n * @param model - Model class to bind (provides table name + data source)\r\n * @param columns - Column definitions keyed by column name\r\n * @param options - Optional overrides\r\n *\r\n * @example\r\n * ```typescript\r\n * import { Migration, uuid, text, timestamp } from \"@warlock.js/cascade\";\r\n * import { Organization } from \"app/organizations/models/organization\";\r\n * import { Chat } from \"../chat.model\";\r\n *\r\n * export default Migration.create(Chat, {\r\n * organization_id: uuid().references(Organization).onDelete(\"cascade\"),\r\n * title: text(),\r\n * status: text(),\r\n * started_at: timestamp().default(\"NOW()\"),\r\n * closed_at: timestamp().nullable(),\r\n * }, { order: 5 });\r\n * ```\r\n */\r\nMigration.create = function createMigration(\r\n model: ChildModel<Model<any>>,\r\n columns: ColumnMap,\r\n options: MigrationCreateOptions = {},\r\n): MigrationConstructor {\r\n const {\r\n order = 0,\r\n createdAt,\r\n primaryKey: primaryKeyOverride,\r\n timestamps: withTimestamps = true,\r\n transactional,\r\n } = options;\r\n\r\n return class DeclarativeMigration extends Migration {\r\n public static readonly order = order;\r\n public static readonly createdAt = createdAt;\r\n public static readonly transactional = transactional;\r\n public readonly table = model.table;\r\n public readonly dataSource = model.dataSource;\r\n\r\n public async up(): Promise<void> {\r\n this.createTableIfNotExists();\r\n\r\n // Resolve primary key type: option → migrationDefaults → \"int\"\r\n const pkType =\r\n primaryKeyOverride !== undefined\r\n ? primaryKeyOverride\r\n : (this._migrationDefaults?.primaryKey ?? \"int\");\r\n\r\n if (pkType === \"uuid\") {\r\n this.primaryUuid();\r\n } else if (pkType === \"bigInt\") {\r\n this.bigId();\r\n } else if (pkType === \"int\") {\r\n this.id();\r\n }\r\n // pkType === false → skip primary key\r\n\r\n wireColumns(this, columns);\r\n\r\n if (withTimestamps) {\r\n this.timestamps();\r\n }\r\n\r\n // ── Composite indexes ───────────────────────────────────────────────\r\n if (options.index) {\r\n for (const entry of options.index) {\r\n this.index(entry.columns, entry.name, {\r\n include: entry.include,\r\n concurrently: entry.concurrently,\r\n });\r\n }\r\n }\r\n\r\n // ── Composite unique constraints ────────────────────────────────────\r\n if (options.unique) {\r\n for (const entry of options.unique) {\r\n this.unique(entry.columns, entry.name, {\r\n include: entry.include,\r\n concurrently: entry.concurrently,\r\n });\r\n }\r\n }\r\n\r\n if (options.raw) {\r\n const rawQueries = Array.isArray(options.raw) ? options.raw : [options.raw];\r\n for (const query of rawQueries) {\r\n this.raw(query);\r\n }\r\n }\r\n\r\n if (options.up) {\r\n await options.up.call(this as unknown as Migration);\r\n }\r\n }\r\n\r\n public async down(): Promise<void> {\r\n if (options.down) {\r\n await options.down.call(this as unknown as Migration);\r\n }\r\n this.dropTableIfExists();\r\n }\r\n } as unknown as MigrationConstructor;\r\n};\r\n\r\n/**\r\n * Create a declarative alteration migration.\r\n *\r\n * @param model - Model class to bind\r\n * @param schema - What to add / drop / rename / modify\r\n * @param options - Optional overrides\r\n *\r\n * @example\r\n * ```typescript\r\n * import { Migration, text } from \"@warlock.js/cascade\";\r\n * import { User } from \"../user.model\";\r\n *\r\n * export default Migration.alter(User, {\r\n * add: {\r\n * phone: text().nullable(),\r\n * avatar: text().nullable(),\r\n * },\r\n * drop: [\"legacy_field\"],\r\n * rename: { old_name: \"new_name\" },\r\n * });\r\n * ```\r\n */\r\nMigration.alter = function alterMigration(\r\n model: ChildModel<Model<any>>,\r\n schema: AlterSchema,\r\n options: MigrationAlterOptions = {},\r\n): MigrationConstructor {\r\n const { order = 0, createdAt, transactional } = options;\r\n\r\n return class AlterMigration extends Migration {\r\n public static readonly order = order;\r\n public static readonly createdAt = createdAt;\r\n public static readonly transactional = transactional;\r\n public readonly table = model.table;\r\n public readonly dataSource = model.dataSource;\r\n\r\n public async up(): Promise<void> {\r\n // ── Column Operations ─────────────────────────────────────────────────\r\n if (schema.add) {\r\n wireColumns(this, schema.add);\r\n }\r\n\r\n if (schema.drop) {\r\n for (const col of schema.drop) {\r\n this.dropColumn(col);\r\n }\r\n }\r\n\r\n if (schema.rename) {\r\n for (const [from, to] of Object.entries(schema.rename)) {\r\n this.renameColumn(from, to);\r\n }\r\n }\r\n\r\n if (schema.modify) {\r\n for (const [columnName, detached] of Object.entries(schema.modify)) {\r\n const definition = detached.getDefinition();\r\n (definition as any).name = columnName;\r\n\r\n (this as any).pendingOperations.push({\r\n type: \"modifyColumn\",\r\n payload: definition,\r\n });\r\n\r\n // Transfer FK side effects\r\n for (const fk of detached.sink.pendingForeignKeys as any[]) {\r\n fk.column = columnName;\r\n this.addForeignKeyOperation(fk);\r\n }\r\n }\r\n }\r\n\r\n // ── Regular Indexes ───────────────────────────────────────────────────\r\n if (schema.addIndex) {\r\n for (const { columns, name, options: opts } of schema.addIndex) {\r\n this.index(columns, name, opts);\r\n }\r\n }\r\n\r\n if (schema.dropIndex) {\r\n for (const target of schema.dropIndex) {\r\n this.dropIndex(target);\r\n }\r\n }\r\n\r\n // ── Unique Indexes ────────────────────────────────────────────────────\r\n if (schema.addUnique) {\r\n for (const { columns, name, options: opts } of schema.addUnique) {\r\n this.unique(columns, name, opts);\r\n }\r\n }\r\n\r\n if (schema.dropUnique) {\r\n for (const cols of schema.dropUnique) {\r\n this.dropUnique(cols);\r\n }\r\n }\r\n\r\n // ── Expression Indexes ───────────────────────────────────────────────\r\n if (schema.addExpressionIndex) {\r\n for (const { expressions, name, options: opts } of schema.addExpressionIndex) {\r\n this.expressionIndex(expressions, name, opts);\r\n }\r\n }\r\n\r\n // ── Specialized Indexes ───────────────────────────────────────────────\r\n if (schema.addFullText) {\r\n for (const { columns, options: opts } of schema.addFullText) {\r\n this.fullText(columns, opts);\r\n }\r\n }\r\n\r\n if (schema.dropFullText) {\r\n for (const name of schema.dropFullText) {\r\n this.dropFullText(name);\r\n }\r\n }\r\n\r\n if (schema.addGeoIndex) {\r\n for (const { column, options: opts } of schema.addGeoIndex) {\r\n this.geoIndex(column, opts);\r\n }\r\n }\r\n\r\n if (schema.dropGeoIndex) {\r\n for (const column of schema.dropGeoIndex) {\r\n this.dropGeoIndex(column);\r\n }\r\n }\r\n\r\n if (schema.addVectorIndex) {\r\n for (const { column, options: opts } of schema.addVectorIndex) {\r\n this.vectorIndex(column, opts);\r\n }\r\n }\r\n\r\n if (schema.dropVectorIndex) {\r\n for (const column of schema.dropVectorIndex) {\r\n this.dropVectorIndex(column);\r\n }\r\n }\r\n\r\n if (schema.addTTLIndex) {\r\n for (const { column, expireAfterSeconds } of schema.addTTLIndex) {\r\n this.ttlIndex(column, expireAfterSeconds);\r\n }\r\n }\r\n\r\n if (schema.dropTTLIndex) {\r\n for (const column of schema.dropTTLIndex) {\r\n this.dropTTLIndex(column);\r\n }\r\n }\r\n\r\n // ── Foreign Keys ──────────────────────────────────────────────────────\r\n if (schema.addForeign) {\r\n for (const fk of schema.addForeign) {\r\n const tableName = typeof fk.references === \"string\" ? fk.references : fk.references.table;\r\n\r\n this.foreign(fk.column)\r\n .references(tableName, fk.on ?? \"id\")\r\n .onDelete(fk.onDelete ?? \"restrict\")\r\n .onUpdate(fk.onUpdate ?? \"restrict\");\r\n }\r\n }\r\n\r\n if (schema.dropForeign) {\r\n for (const { columnOrConstraint, referencesTable } of schema.dropForeign) {\r\n this.dropForeign(columnOrConstraint, referencesTable);\r\n }\r\n }\r\n\r\n // ── Check Constraints ─────────────────────────────────────────────────\r\n if (schema.addCheck) {\r\n for (const { name, expression } of schema.addCheck) {\r\n this.check(name, expression);\r\n }\r\n }\r\n\r\n if (schema.dropCheck) {\r\n for (const name of schema.dropCheck) {\r\n this.dropCheck(name);\r\n }\r\n }\r\n\r\n // ── Raw SQL ───────────────────────────────────────────────────────────\r\n if (schema.raw) {\r\n const rawQueries = Array.isArray(schema.raw) ? schema.raw : [schema.raw];\r\n for (const query of rawQueries) {\r\n this.raw(query);\r\n }\r\n }\r\n\r\n if (options.up) {\r\n await options.up.call(this as unknown as Migration);\r\n }\r\n }\r\n\r\n public async down(): Promise<void> {\r\n if (options.down) {\r\n await options.down.call(this as unknown as Migration);\r\n }\r\n }\r\n } as unknown as MigrationConstructor;\r\n};\r\n\r\n// The no-op re-assignments below silence the TS \"used before assigned\" check;\r\n// the real implementations are set by the Migration.create = ... and\r\n// Migration.alter = ... blocks immediately above.\r\n(Migration as any).__declarativeFactoriesAttached = true;\r\n"],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ //#region ../../@warlock.js/cascade/src/migration/sql-grammar.ts
2
+ /**
3
+ * Parses and sorts SQL statements globally based on their execution phase,
4
+ * and classifies statements by their semantic type.
5
+ */
6
+ var SQLGrammar = class {
7
+ /**
8
+ * Determine the execution phase of a SQL statement (1–6).
9
+ *
10
+ * Phase ordering ensures DDL operations run in dependency-safe order
11
+ * regardless of which migration file they originate from.
12
+ *
13
+ * | Phase | Statements |
14
+ * |-------|-----------------------------------------------|
15
+ * | 1 | CREATE EXTENSION, TYPE, DOMAIN, SCHEMA |
16
+ * | 2 | CREATE TABLE |
17
+ * | 3 | ADD COLUMN, ADD PRIMARY KEY |
18
+ * | 4 | CREATE INDEX, ADD FOREIGN KEY |
19
+ * | 5 | DROP COLUMN, ALTER COLUMN, DROP TABLE |
20
+ * | 6 | Raw / unclassified |
21
+ *
22
+ * @example
23
+ * SQLGrammar.phase("CREATE EXTENSION IF NOT EXISTS vector"); // => 1
24
+ * SQLGrammar.phase("ALTER TABLE users ADD COLUMN email TEXT"); // => 3
25
+ */
26
+ static phase(sql) {
27
+ const s = sql.trim().toUpperCase();
28
+ if (s.startsWith("CREATE EXTENSION") || s.startsWith("CREATE TYPE") || s.startsWith("CREATE DOMAIN") || s.startsWith("CREATE SCHEMA")) return 1;
29
+ if (s.startsWith("CREATE TABLE")) return 2;
30
+ if (s.startsWith("ALTER TABLE")) {
31
+ if (s.includes("ADD CONSTRAINT") && s.includes("FOREIGN KEY")) return 4;
32
+ if (s.includes("DROP COLUMN") || s.includes("DROP CONSTRAINT") || s.includes("ALTER COLUMN")) return 5;
33
+ if (s.includes("ADD COLUMN")) return 3;
34
+ if (s.includes("ADD CONSTRAINT") && s.includes("PRIMARY KEY")) return 3;
35
+ }
36
+ if (s.startsWith("CREATE INDEX") || s.startsWith("CREATE UNIQUE INDEX")) return 4;
37
+ if (s.startsWith("DROP TABLE") || s.startsWith("TRUNCATE TABLE") || s.startsWith("DROP INDEX")) return 5;
38
+ return 6;
39
+ }
40
+ /**
41
+ * Classify a SQL statement into its semantic statement type.
42
+ *
43
+ * This is independent of execution phase — it identifies *what* a statement
44
+ * does, not *when* it should run. Use this for pre-flight checks, dry-run
45
+ * display, selective filtering, and extension detection.
46
+ *
47
+ * @example
48
+ * SQLGrammar.classify("CREATE EXTENSION IF NOT EXISTS vector");
49
+ * // => "CREATE_EXTENSION"
50
+ *
51
+ * SQLGrammar.classify("ALTER TABLE users ADD COLUMN email TEXT");
52
+ * // => "ADD_COLUMN"
53
+ */
54
+ static classify(sql) {
55
+ const s = sql.trim().toUpperCase();
56
+ if (s.startsWith("CREATE EXTENSION")) return "CREATE_EXTENSION";
57
+ if (s.startsWith("CREATE SCHEMA")) return "CREATE_SCHEMA";
58
+ if (s.startsWith("CREATE TYPE")) return "CREATE_TYPE";
59
+ if (s.startsWith("CREATE DOMAIN")) return "CREATE_DOMAIN";
60
+ if (s.startsWith("CREATE TABLE")) return "CREATE_TABLE";
61
+ if (s.startsWith("DROP TABLE")) return "DROP_TABLE";
62
+ if (s.startsWith("TRUNCATE TABLE")) return "TRUNCATE_TABLE";
63
+ if (s.startsWith("DROP INDEX")) return "DROP_INDEX";
64
+ if (s.startsWith("CREATE UNIQUE INDEX")) return "CREATE_UNIQUE_INDEX";
65
+ if (s.startsWith("CREATE INDEX")) return "CREATE_INDEX";
66
+ if (s.startsWith("ALTER TABLE")) {
67
+ if (s.includes("ADD CONSTRAINT") && s.includes("FOREIGN KEY")) return "ADD_FOREIGN_KEY";
68
+ if (s.includes("DROP CONSTRAINT") && s.includes("FOREIGN KEY")) return "DROP_FOREIGN_KEY";
69
+ if (s.includes("ADD CONSTRAINT") && s.includes("PRIMARY KEY")) return "ADD_PRIMARY_KEY";
70
+ if (s.includes("DROP CONSTRAINT")) return "DROP_PRIMARY_KEY";
71
+ if (s.includes("ADD COLUMN")) return "ADD_COLUMN";
72
+ if (s.includes("DROP COLUMN")) return "DROP_COLUMN";
73
+ if (s.includes("RENAME COLUMN")) return "RENAME_COLUMN";
74
+ if (s.includes("RENAME TO")) return "RENAME_TABLE";
75
+ if (s.includes("ALTER COLUMN")) return "MODIFY_COLUMN";
76
+ }
77
+ return "RAW";
78
+ }
79
+ /**
80
+ * Extract the extension name from a CREATE EXTENSION statement.
81
+ *
82
+ * Returns undefined if the statement is not a CREATE EXTENSION statement
83
+ * or the name cannot be parsed.
84
+ *
85
+ * @example
86
+ * SQLGrammar.extractExtensionName("CREATE EXTENSION IF NOT EXISTS vector");
87
+ * // => "vector"
88
+ *
89
+ * SQLGrammar.extractExtensionName("CREATE EXTENSION postgis");
90
+ * // => "postgis"
91
+ */
92
+ static extractExtensionName(sql) {
93
+ return sql.trim().match(/^CREATE\s+EXTENSION\s+(?:IF\s+NOT\s+EXISTS\s+)?(\w+)/i)?.[1]?.toLowerCase();
94
+ }
95
+ /**
96
+ * Sort an array of tagged SQL statements by phase, then creation date, then migration name.
97
+ */
98
+ static sort(statements) {
99
+ return statements.slice().sort((a, b) => {
100
+ if (a.phase !== b.phase) return a.phase - b.phase;
101
+ let dateA = a.createdAt ? new Date(a.createdAt).getTime() : 0;
102
+ let dateB = b.createdAt ? new Date(b.createdAt).getTime() : 0;
103
+ if (isNaN(dateA)) dateA = 0;
104
+ if (isNaN(dateB)) dateB = 0;
105
+ if (dateA !== dateB) return dateA - dateB;
106
+ const nameA = a.migrationName || "";
107
+ const nameB = b.migrationName || "";
108
+ return nameA.localeCompare(nameB);
109
+ });
110
+ }
111
+ };
112
+
113
+ //#endregion
114
+ export { SQLGrammar };
115
+ //# sourceMappingURL=sql-grammar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-grammar.mjs","names":[],"sources":["../../../../../../@warlock.js/cascade/src/migration/sql-grammar.ts"],"sourcesContent":["import type { SQLStatementType, TaggedSQL } from \"./types\";\n\n/**\n * Parses and sorts SQL statements globally based on their execution phase,\n * and classifies statements by their semantic type.\n */\nexport class SQLGrammar {\n /**\n * Determine the execution phase of a SQL statement (1–6).\n *\n * Phase ordering ensures DDL operations run in dependency-safe order\n * regardless of which migration file they originate from.\n *\n * | Phase | Statements |\n * |-------|-----------------------------------------------|\n * | 1 | CREATE EXTENSION, TYPE, DOMAIN, SCHEMA |\n * | 2 | CREATE TABLE |\n * | 3 | ADD COLUMN, ADD PRIMARY KEY |\n * | 4 | CREATE INDEX, ADD FOREIGN KEY |\n * | 5 | DROP COLUMN, ALTER COLUMN, DROP TABLE |\n * | 6 | Raw / unclassified |\n *\n * @example\n * SQLGrammar.phase(\"CREATE EXTENSION IF NOT EXISTS vector\"); // => 1\n * SQLGrammar.phase(\"ALTER TABLE users ADD COLUMN email TEXT\"); // => 3\n */\n public static phase(sql: string): 1 | 2 | 3 | 4 | 5 | 6 {\n const s = sql.trim().toUpperCase();\n\n // Phase 1: Preparation (Extensions, Enums, Domains, Types)\n if (\n s.startsWith(\"CREATE EXTENSION\") ||\n s.startsWith(\"CREATE TYPE\") ||\n s.startsWith(\"CREATE DOMAIN\") ||\n s.startsWith(\"CREATE SCHEMA\")\n ) {\n return 1;\n }\n\n // Phase 2: Table Creation\n if (s.startsWith(\"CREATE TABLE\")) {\n return 2;\n }\n\n // Phase 3 / 4 / 5: ALTER TABLE — broken down by clause\n if (s.startsWith(\"ALTER TABLE\")) {\n if (s.includes(\"ADD CONSTRAINT\") && s.includes(\"FOREIGN KEY\")) return 4;\n if (s.includes(\"DROP COLUMN\") || s.includes(\"DROP CONSTRAINT\") || s.includes(\"ALTER COLUMN\")) return 5;\n if (s.includes(\"ADD COLUMN\")) return 3;\n if (s.includes(\"ADD CONSTRAINT\") && s.includes(\"PRIMARY KEY\")) return 3;\n }\n\n // Phase 4: Index Creation\n if (s.startsWith(\"CREATE INDEX\") || s.startsWith(\"CREATE UNIQUE INDEX\")) {\n return 4;\n }\n\n // Phase 5: Destructive table/index operations\n if (s.startsWith(\"DROP TABLE\") || s.startsWith(\"TRUNCATE TABLE\") || s.startsWith(\"DROP INDEX\")) {\n return 5;\n }\n\n // Phase 6: Raw / unclassified (DML, triggers, procedures, views)\n return 6;\n }\n\n /**\n * Classify a SQL statement into its semantic statement type.\n *\n * This is independent of execution phase — it identifies *what* a statement\n * does, not *when* it should run. Use this for pre-flight checks, dry-run\n * display, selective filtering, and extension detection.\n *\n * @example\n * SQLGrammar.classify(\"CREATE EXTENSION IF NOT EXISTS vector\");\n * // => \"CREATE_EXTENSION\"\n *\n * SQLGrammar.classify(\"ALTER TABLE users ADD COLUMN email TEXT\");\n * // => \"ADD_COLUMN\"\n */\n public static classify(sql: string): SQLStatementType {\n const s = sql.trim().toUpperCase();\n\n if (s.startsWith(\"CREATE EXTENSION\")) return \"CREATE_EXTENSION\";\n if (s.startsWith(\"CREATE SCHEMA\")) return \"CREATE_SCHEMA\";\n if (s.startsWith(\"CREATE TYPE\")) return \"CREATE_TYPE\";\n if (s.startsWith(\"CREATE DOMAIN\")) return \"CREATE_DOMAIN\";\n if (s.startsWith(\"CREATE TABLE\")) return \"CREATE_TABLE\";\n if (s.startsWith(\"DROP TABLE\")) return \"DROP_TABLE\";\n if (s.startsWith(\"TRUNCATE TABLE\")) return \"TRUNCATE_TABLE\";\n if (s.startsWith(\"DROP INDEX\")) return \"DROP_INDEX\";\n\n // Must check UNIQUE before plain INDEX to avoid misclassification\n if (s.startsWith(\"CREATE UNIQUE INDEX\")) return \"CREATE_UNIQUE_INDEX\";\n if (s.startsWith(\"CREATE INDEX\")) return \"CREATE_INDEX\";\n\n if (s.startsWith(\"ALTER TABLE\")) {\n if (s.includes(\"ADD CONSTRAINT\") && s.includes(\"FOREIGN KEY\")) return \"ADD_FOREIGN_KEY\";\n if (s.includes(\"DROP CONSTRAINT\") && s.includes(\"FOREIGN KEY\")) return \"DROP_FOREIGN_KEY\";\n if (s.includes(\"ADD CONSTRAINT\") && s.includes(\"PRIMARY KEY\")) return \"ADD_PRIMARY_KEY\";\n if (s.includes(\"DROP CONSTRAINT\")) return \"DROP_PRIMARY_KEY\";\n if (s.includes(\"ADD COLUMN\")) return \"ADD_COLUMN\";\n if (s.includes(\"DROP COLUMN\")) return \"DROP_COLUMN\";\n if (s.includes(\"RENAME COLUMN\")) return \"RENAME_COLUMN\";\n if (s.includes(\"RENAME TO\")) return \"RENAME_TABLE\";\n if (s.includes(\"ALTER COLUMN\")) return \"MODIFY_COLUMN\";\n }\n\n return \"RAW\";\n }\n\n /**\n * Extract the extension name from a CREATE EXTENSION statement.\n *\n * Returns undefined if the statement is not a CREATE EXTENSION statement\n * or the name cannot be parsed.\n *\n * @example\n * SQLGrammar.extractExtensionName(\"CREATE EXTENSION IF NOT EXISTS vector\");\n * // => \"vector\"\n *\n * SQLGrammar.extractExtensionName(\"CREATE EXTENSION postgis\");\n * // => \"postgis\"\n */\n public static extractExtensionName(sql: string): string | undefined {\n // Matches: CREATE EXTENSION [IF NOT EXISTS] <name>\n const match = sql\n .trim()\n .match(/^CREATE\\s+EXTENSION\\s+(?:IF\\s+NOT\\s+EXISTS\\s+)?(\\w+)/i);\n\n return match?.[1]?.toLowerCase();\n }\n\n /**\n * Sort an array of tagged SQL statements by phase, then creation date, then migration name.\n */\n public static sort(statements: TaggedSQL[]): TaggedSQL[] {\n return statements.slice().sort((a, b) => {\n // 1. Sort by Phase (ascending)\n if (a.phase !== b.phase) {\n return a.phase - b.phase;\n }\n\n // 2. Sort by CreatedAt (within same phase)\n let dateA = a.createdAt ? new Date(a.createdAt).getTime() : 0;\n let dateB = b.createdAt ? new Date(b.createdAt).getTime() : 0;\n if (isNaN(dateA)) dateA = 0;\n if (isNaN(dateB)) dateB = 0;\n\n if (dateA !== dateB) {\n return dateA - dateB;\n }\n\n // 3. Sort by Migration Name (tie-breaker)\n const nameA = a.migrationName || \"\";\n const nameB = b.migrationName || \"\";\n return nameA.localeCompare(nameB);\n });\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { PendingOperation } from "./migration.mjs";
2
+
3
+ //#region ../../@warlock.js/cascade/src/migration/sql-serializer.d.ts
4
+ /**
5
+ * Converts PendingOperation objects to SQL strings for a specific dialect.
6
+ */
7
+ declare abstract class SQLSerializer {
8
+ /**
9
+ * Serialize a single pending operation into one or more SQL strings.
10
+ *
11
+ * Return `string` for single-statement operations, `string[]` for
12
+ * multi-statement ones (e.g. `createTimestamps` emits two ALTER TABLE
13
+ * statements), and `null` for no-ops.
14
+ */
15
+ abstract serialize(operation: PendingOperation, table: string): string | string[] | null;
16
+ /**
17
+ * Serialize an array of operations to a flat list of SQL strings.
18
+ *
19
+ * Array results from serialize() are automatically flattened, and nulls
20
+ * (no-ops) are filtered out.
21
+ */
22
+ serializeAll(operations: PendingOperation[], table: string): string[];
23
+ }
24
+ //#endregion
25
+ export { SQLSerializer };
26
+ //# sourceMappingURL=sql-serializer.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-serializer.d.mts","names":[],"sources":["../../../../../../@warlock.js/cascade/src/migration/sql-serializer.ts"],"mappings":";;;;;AAKA;uBAAsB,aAAA;;;;;;;;WAQX,SAAA,CAAU,SAAA,EAAW,gBAAA,EAAkB,KAAA;EAQnC;;;AAA6C;;;EAA1D,YAAA,CAAa,UAAA,EAAY,gBAAgB,IAAI,KAAA;AAAA"}
@@ -0,0 +1,26 @@
1
+ //#region ../../@warlock.js/cascade/src/migration/sql-serializer.ts
2
+ /**
3
+ * Converts PendingOperation objects to SQL strings for a specific dialect.
4
+ */
5
+ var SQLSerializer = class {
6
+ /**
7
+ * Serialize an array of operations to a flat list of SQL strings.
8
+ *
9
+ * Array results from serialize() are automatically flattened, and nulls
10
+ * (no-ops) are filtered out.
11
+ */
12
+ serializeAll(operations, table) {
13
+ const result = [];
14
+ for (const op of operations) {
15
+ const sql = this.serialize(op, table);
16
+ if (sql === null) continue;
17
+ if (Array.isArray(sql)) result.push(...sql);
18
+ else result.push(sql);
19
+ }
20
+ return result;
21
+ }
22
+ };
23
+
24
+ //#endregion
25
+ export { SQLSerializer };
26
+ //# sourceMappingURL=sql-serializer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-serializer.mjs","names":[],"sources":["../../../../../../@warlock.js/cascade/src/migration/sql-serializer.ts"],"sourcesContent":["import type { PendingOperation } from \"./migration\";\n\n/**\n * Converts PendingOperation objects to SQL strings for a specific dialect.\n */\nexport abstract class SQLSerializer {\n /**\n * Serialize a single pending operation into one or more SQL strings.\n *\n * Return `string` for single-statement operations, `string[]` for\n * multi-statement ones (e.g. `createTimestamps` emits two ALTER TABLE\n * statements), and `null` for no-ops.\n */\n abstract serialize(operation: PendingOperation, table: string): string | string[] | null;\n\n /**\n * Serialize an array of operations to a flat list of SQL strings.\n *\n * Array results from serialize() are automatically flattened, and nulls\n * (no-ops) are filtered out.\n */\n serializeAll(operations: PendingOperation[], table: string): string[] {\n const result: string[] = [];\n\n for (const op of operations) {\n const sql = this.serialize(op, table);\n if (sql === null) continue;\n if (Array.isArray(sql)) {\n result.push(...sql);\n } else {\n result.push(sql);\n }\n }\n\n return result;\n }\n}\n"],"mappings":";;;;AAKA,IAAsB,gBAAtB,MAAoC;;;;;;;CAgBlC,aAAa,YAAgC,OAAyB;EACpE,MAAM,SAAmB,CAAC;EAE1B,KAAK,MAAM,MAAM,YAAY;GAC3B,MAAM,MAAM,KAAK,UAAU,IAAI,KAAK;GACpC,IAAI,QAAQ,MAAM;GAClB,IAAI,MAAM,QAAQ,GAAG,GACnB,OAAO,KAAK,GAAG,GAAG;QAElB,OAAO,KAAK,GAAG;EAEnB;EAEA,OAAO;CACT;AACF"}