@warlock.js/cascade 4.0.174 → 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":"mongodb-driver.mjs","names":[],"sources":["../../../../../../../@warlock.js/cascade/src/drivers/mongodb/mongodb-driver.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\r\nimport { log } from \"@warlock.js/logger\";\r\nimport type {\r\n BulkWriteOptions,\r\n ClientSession,\r\n Db,\r\n DeleteOptions,\r\n FindOneAndDeleteOptions,\r\n FindOneAndUpdateOptions,\r\n InsertManyResult,\r\n InsertOneOptions,\r\n MongoClient,\r\n MongoClientOptions,\r\n TransactionOptions,\r\n UpdateFilter,\r\n UpdateOptions,\r\n} from \"mongodb\";\r\nimport { EventEmitter } from \"node:events\";\r\nimport { databaseTransactionContext } from \"../../context/database-transaction-context\";\r\nimport type {\r\n DriverBlueprintContract,\r\n DriverContract,\r\n DriverEvent,\r\n DriverEventListener,\r\n DriverTransactionContract,\r\n IdGeneratorContract,\r\n InsertResult,\r\n MigrationDriverContract,\r\n QueryBuilderContract,\r\n SyncAdapterContract,\r\n TransactionContext,\r\n UpdateOperations,\r\n UpdateResult,\r\n} from \"../../contracts\";\r\nimport { dataSourceRegistry } from \"../../data-source/data-source-registry\";\r\nimport { DatabaseDirtyTracker } from \"../../database-dirty-tracker\";\r\nimport { TransactionRollbackError } from \"../../errors/transaction-rollback.error\";\r\nimport { type SQLSerializer } from \"../../migration/sql-serializer\";\r\nimport type { ModelDefaults } from \"../../types\";\r\nimport { isValidDateValue } from \"../../utils/is-valid-date-value\";\r\nimport { MongoDBBlueprint } from \"./mongodb-blueprint\";\r\nimport { MongoIdGenerator } from \"./mongodb-id-generator\";\r\nimport { MongoMigrationDriver } from \"./mongodb-migration-driver\";\r\nimport { MongoQueryBuilder } from \"./mongodb-query-builder\";\r\nimport { MongoSyncAdapter } from \"./mongodb-sync-adapter\";\r\nimport type { MongoDriverOptions } from \"./types\";\r\n\r\nconst DEFAULT_TRANSACTION_OPTIONS: TransactionOptions = {\r\n readPreference: \"primary\",\r\n readConcern: { level: \"local\" },\r\n writeConcern: { w: \"majority\" },\r\n};\r\n\r\n// ============================================================\r\n// Lazy-loaded MongoDB SDK Types\r\n// ============================================================\r\n\r\n/**\r\n * Cached MongoDB module (loaded once, reused)\r\n */\r\nlet MongoDBClient: typeof import(\"mongodb\");\r\n\r\nlet ObjectId: typeof import(\"mongodb\").ObjectId;\r\n\r\nlet isModuleExists: boolean | null = null;\r\n\r\nlet loadingPromise: Promise<any>;\r\n\r\n/**\r\n * Installation instructions for MongoDB package\r\n */\r\nconst MONGODB_INSTALL_INSTRUCTIONS = `\r\nMongoDB driver requires the mongodb package.\r\nInstall it with:\r\n\r\n npm install mongodb\r\n\r\nOr with your preferred package manager:\r\n\r\n pnpm add mongodb\r\n yarn add mongodb\r\n`.trim();\r\n\r\n/**\r\n * Load MongoDB module\r\n */\r\nasync function loadMongoDB() {\r\n try {\r\n loadingPromise = import(\"mongodb\");\r\n MongoDBClient = await loadingPromise;\r\n ObjectId = MongoDBClient.ObjectId;\r\n isModuleExists = true;\r\n } catch {\r\n isModuleExists = false;\r\n }\r\n}\r\n\r\nloadMongoDB();\r\n\r\nexport function isMongoDBDriverLoaded() {\r\n return isModuleExists;\r\n}\r\n\r\nasync function assertModuleIsLoaded() {\r\n if (isModuleExists === false) {\r\n throw new Error(MONGODB_INSTALL_INSTRUCTIONS);\r\n }\r\n\r\n if (isModuleExists === null) {\r\n await loadingPromise;\r\n\r\n return await assertModuleIsLoaded();\r\n }\r\n}\r\n\r\n/**\r\n * MongoDB driver implementation that fulfils the Cascade driver contract.\r\n *\r\n * It encapsulates the native Mongo client, exposes lifecycle events, and\r\n * provides helpers for CRUD, transactions, atomic updates, and sync adapters.\r\n */\r\nexport class MongoDbDriver implements DriverContract {\r\n private readonly events = new EventEmitter();\r\n public client?: MongoClient;\r\n public database?: Db;\r\n private connected = false;\r\n private syncAdapterInstance?: MongoSyncAdapter;\r\n private migrationDriverInstance?: MigrationDriverContract;\r\n private readonly transactionOptions: TransactionOptions;\r\n private idGeneratorInstance?: IdGeneratorContract;\r\n private _blueprint?: DriverBlueprintContract;\r\n\r\n public get blueprint(): DriverBlueprintContract {\r\n if (!this._blueprint) {\r\n this._blueprint = new MongoDBBlueprint(this.database!);\r\n }\r\n\r\n return this._blueprint!;\r\n }\r\n\r\n /**\r\n * The name of this driver.\r\n */\r\n public readonly name = \"mongodb\";\r\n\r\n /**\r\n * Current database name\r\n */\r\n protected _databaseName?: string;\r\n\r\n /**\r\n * MongoDB driver model defaults.\r\n *\r\n * MongoDB follows NoSQL conventions:\r\n * - camelCase naming for fields (createdAt, updatedAt, deletedAt)\r\n * - Manual ID generation (auto-increment id field separate from _id)\r\n * - Timestamps enabled by default\r\n * - Trash delete strategy with per-collection trash tables\r\n */\r\n public readonly modelDefaults: Partial<ModelDefaults> = {\r\n namingConvention: \"camelCase\",\r\n createdAtColumn: \"createdAt\",\r\n updatedAtColumn: \"updatedAt\",\r\n deletedAtColumn: \"deletedAt\",\r\n timestamps: true,\r\n autoGenerateId: true, // MongoDB needs manual ID generation\r\n strictMode: \"strip\",\r\n deleteStrategy: \"trash\",\r\n trashTable: (table) => `${table}Trash`, // Per-collection trash (usersTrash, productsTrash)\r\n };\r\n\r\n /**\r\n * Create a new MongoDB driver using the supplied connection options.\r\n *\r\n * @param config - Connection configuration\r\n * @param driverOptions - Driver-specific options\r\n */\r\n public constructor(\r\n private readonly config: {\r\n database: string;\r\n uri?: string;\r\n host?: string;\r\n port?: number;\r\n username?: string;\r\n password?: string;\r\n authSource?: string;\r\n logging?: boolean;\r\n clientOptions?: MongoClientOptions;\r\n },\r\n private readonly driverOptions?: MongoDriverOptions,\r\n ) {\r\n this.transactionOptions = {\r\n ...DEFAULT_TRANSACTION_OPTIONS,\r\n ...driverOptions?.transactionOptions,\r\n };\r\n }\r\n\r\n /**\r\n * Get data base name\r\n */\r\n public get databaseName(): string | undefined {\r\n if (!this._databaseName) {\r\n this.resolveDatabaseName();\r\n }\r\n\r\n return this._databaseName;\r\n }\r\n\r\n /**\r\n * Resolve database name either from config or uri\r\n */\r\n private resolveDatabaseName() {\r\n if (this.config.database) {\r\n this._databaseName = this.config.database;\r\n } else if (this.config.uri) {\r\n this._databaseName = this.config.uri.split(\"/\").pop()?.split(\"?\")?.[0];\r\n }\r\n }\r\n\r\n /**\r\n * Indicates whether the driver currently maintains an active connection.\r\n */\r\n public get isConnected(): boolean {\r\n return this.connected;\r\n }\r\n\r\n /**\r\n * Get the MongoDB database instance.\r\n *\r\n * @returns The MongoDB Db instance\r\n * @throws {Error} If not connected\r\n *\r\n * @example\r\n * ```typescript\r\n * const db = driver.getDatabase();\r\n * const collection = db.collection(\"users\");\r\n * ```\r\n */\r\n public getDatabase(): Db {\r\n if (!this.database) {\r\n throw new Error(\r\n \"Database not available. Ensure the driver is connected before accessing the database.\",\r\n );\r\n }\r\n return this.database;\r\n }\r\n\r\n /**\r\n * Get the ID generator instance for this driver.\r\n *\r\n * Creates a MongoIdGenerator on first access if autoGenerateId is enabled.\r\n *\r\n * @returns The ID generator instance, or undefined if disabled\r\n *\r\n * @example\r\n * ```typescript\r\n * const idGenerator = driver.getIdGenerator();\r\n * if (idGenerator) {\r\n * const id = await idGenerator.generateNextId({ table: \"users\" });\r\n * }\r\n * ```\r\n */\r\n public getIdGenerator(): IdGeneratorContract | undefined {\r\n // Return undefined if ID generation is disabled\r\n if (this.driverOptions?.autoGenerateId === false) {\r\n return undefined;\r\n }\r\n\r\n // Create ID generator lazily on first access\r\n if (!this.idGeneratorInstance) {\r\n this.idGeneratorInstance = new MongoIdGenerator(this, this.driverOptions?.counterCollection);\r\n }\r\n\r\n return this.idGeneratorInstance;\r\n }\r\n\r\n /**\r\n * Establish a MongoDB connection using the configured options.\r\n * Throws if the connection attempt fails.\r\n */\r\n public async connect(): Promise<void> {\r\n if (this.connected) {\r\n return;\r\n }\r\n\r\n await assertModuleIsLoaded();\r\n\r\n const uri = this.resolveUri();\r\n\r\n const { MongoClient, ObjectId: ObjectIdMongoDB } = MongoDBClient;\r\n\r\n ObjectId = ObjectIdMongoDB;\r\n\r\n const client = new MongoClient(uri, this.buildClientOptions());\r\n\r\n try {\r\n log.info(\r\n \"database.mongodb\",\r\n \"connection\",\r\n `Connecting to database ${colors.bold(colors.yellowBright(this.databaseName))}`,\r\n );\r\n await client.connect();\r\n this.client = client;\r\n this.database = client.db(this.databaseName);\r\n\r\n this.connected = true;\r\n log.success(\"database.mongodb\", \"connection\", \"Connected to database\");\r\n\r\n client.on(\"close\", () => {\r\n if (this.connected) {\r\n this.connected = false;\r\n this.emit(\"disconnected\");\r\n log.warn(\"database.mongodb\", \"connection\", \"Disconnected from database\");\r\n }\r\n });\r\n\r\n if (this.config.logging) {\r\n const ignoredCommands = [\"isMaster\", \"hello\", \"ping\", \"saslStart\", \"saslContinue\"];\r\n\r\n client.on(\"commandStarted\", (event: any) => {\r\n if (ignoredCommands.includes(event.commandName)) return;\r\n\r\n let cmdStr = JSON.stringify(event.command);\r\n if (cmdStr.length > 300) {\r\n cmdStr = cmdStr.substring(0, 300) + \"...\";\r\n }\r\n\r\n log.info({\r\n module: \"database.mongodb\",\r\n action: \"query.executing\",\r\n message: `[${event.commandName}] ${cmdStr}`,\r\n context: { command: event.command },\r\n });\r\n });\r\n\r\n client.on(\"commandSucceeded\", (event: any) => {\r\n if (ignoredCommands.includes(event.commandName)) return;\r\n\r\n log.success({\r\n module: \"database.mongodb\",\r\n action: \"query.executed\",\r\n message: `[${event.duration.toFixed(2)}ms] [${event.commandName}]`,\r\n });\r\n });\r\n\r\n client.on(\"commandFailed\", (event: any) => {\r\n if (ignoredCommands.includes(event.commandName)) return;\r\n\r\n log.error({\r\n module: \"database.mongodb\",\r\n action: \"query.error\",\r\n message: `[${event.duration.toFixed(2)}ms] [${event.commandName}]`,\r\n context: { failure: event.failure },\r\n });\r\n });\r\n }\r\n\r\n this.emit(\"connected\");\r\n } catch (error: any) {\r\n await client.close().catch(() => undefined);\r\n this.emit(\"disconnected\");\r\n log.error(\r\n \"database.mongodb\",\r\n \"connection\",\r\n `Failed to connect to database: ${error.message}`,\r\n );\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Close the underlying MongoDB connection.\r\n */\r\n public async disconnect(): Promise<void> {\r\n if (!this.client) {\r\n return;\r\n }\r\n\r\n try {\r\n await this.client.close();\r\n } finally {\r\n this.connected = false;\r\n this.emit(\"disconnected\");\r\n }\r\n }\r\n\r\n /**\r\n * Subscribe to driver lifecycle events.\r\n */\r\n public on(event: DriverEvent, listener: DriverEventListener): void {\r\n this.events.on(event, listener);\r\n }\r\n\r\n /**\r\n * Insert a single document into the given collection.\r\n */\r\n public async insert(\r\n table: string,\r\n document: Record<string, unknown>,\r\n options?: Record<string, unknown>,\r\n ): Promise<InsertResult> {\r\n const collection = this.getDatabaseInstance().collection(table);\r\n const mongoOptions = this.withSession<InsertOneOptions>(options);\r\n const result = await collection.insertOne(document, mongoOptions);\r\n\r\n return {\r\n document: {\r\n ...document,\r\n _id: result.insertedId,\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Insert multiple documents into the given collection.\r\n */\r\n public async insertMany(\r\n table: string,\r\n documents: Record<string, unknown>[],\r\n options?: Record<string, unknown>,\r\n ): Promise<InsertResult[]> {\r\n const collection = this.getDatabaseInstance().collection(table);\r\n const mongoOptions = this.withSession<BulkWriteOptions>(options);\r\n const result: InsertManyResult<Record<string, unknown>> = await collection.insertMany(\r\n documents,\r\n mongoOptions,\r\n );\r\n\r\n return documents.map((document, index) => {\r\n const insertedId = result.insertedIds[index as unknown as keyof typeof result.insertedIds];\r\n\r\n return {\r\n document: {\r\n ...document,\r\n _id: insertedId,\r\n },\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Update a single document that matches the provided filter.\r\n */\r\n public async update(\r\n table: string,\r\n filter: Record<string, unknown>,\r\n update: Record<string, unknown>,\r\n options?: Record<string, unknown>,\r\n ): Promise<UpdateResult> {\r\n const collection = this.getDatabaseInstance().collection(table);\r\n const mongoOptions = this.withSession<UpdateOptions>(options);\r\n const result = await collection.updateOne(\r\n filter,\r\n update as UpdateFilter<Record<string, unknown>>,\r\n mongoOptions,\r\n );\r\n\r\n return { modifiedCount: result.modifiedCount };\r\n }\r\n\r\n /**\r\n * Replace a single document that matches the provided filter.\r\n */\r\n public async replace<T = unknown>(\r\n table: string,\r\n filter: Record<string, unknown>,\r\n document: Record<string, unknown>,\r\n options?: Record<string, unknown>,\r\n ): Promise<T | null> {\r\n const collection = this.getDatabaseInstance().collection(table);\r\n const result = await collection.findOneAndReplace(filter, document as Record<string, unknown>);\r\n\r\n return result?.value as T | null;\r\n }\r\n\r\n /**\r\n * Find one and update a single document that matches the provided filter and return the updated document\r\n */\r\n public async findOneAndUpdate<T = unknown>(\r\n table: string,\r\n filter: Record<string, unknown>,\r\n update: UpdateOperations,\r\n options?: Record<string, unknown>,\r\n ): Promise<T | null> {\r\n const collection = this.getDatabaseInstance().collection(table);\r\n const mongoOptions = this.withSession<FindOneAndUpdateOptions>(options);\r\n const result = await collection.findOneAndUpdate(filter, update as Record<string, unknown>, {\r\n returnDocument: \"after\",\r\n ...mongoOptions,\r\n });\r\n\r\n return result as T | null;\r\n }\r\n\r\n /**\r\n * Upsert (insert or update) a single document.\r\n *\r\n * Uses MongoDB's findOneAndUpdate with upsert option.\r\n *\r\n * @param table - Target collection name\r\n * @param filter - Filter conditions to find existing document\r\n * @param document - Document data to insert or update\r\n * @param options - Optional upsert options\r\n * @returns The upserted document\r\n */\r\n public async upsert<T = unknown>(\r\n table: string,\r\n filter: Record<string, unknown>,\r\n document: Record<string, unknown>,\r\n options?: Record<string, unknown>,\r\n ): Promise<T> {\r\n const collection = this.getDatabaseInstance().collection(table);\r\n const mongoOptions = this.withSession<FindOneAndUpdateOptions>(options);\r\n\r\n // Use $set to update all fields from document\r\n const update = { $set: document };\r\n\r\n const result = await collection.findOneAndUpdate(filter, update, {\r\n upsert: true,\r\n returnDocument: \"after\",\r\n ...mongoOptions,\r\n });\r\n\r\n return result as T;\r\n }\r\n\r\n /**\r\n * Find one and delete a single document that matches the provided filter and return the deleted document.\r\n *\r\n * @param table - Target collection name\r\n * @param filter - Filter conditions\r\n * @param options - Optional delete options\r\n * @returns The deleted document or null if not found\r\n */\r\n public async findOneAndDelete<T = unknown>(\r\n table: string,\r\n filter: Record<string, unknown>,\r\n options?: Record<string, unknown>,\r\n ): Promise<T | null> {\r\n const collection = this.getDatabaseInstance().collection(table);\r\n const mongoOptions = this.withSession<FindOneAndDeleteOptions>(options);\r\n\r\n const result = await collection.findOneAndDelete(filter, mongoOptions || {});\r\n\r\n return result as T | null;\r\n }\r\n\r\n /**\r\n * Update multiple documents that match the provided filter.\r\n */\r\n public async updateMany(\r\n table: string,\r\n filter: Record<string, unknown>,\r\n update: UpdateOperations,\r\n options?: Record<string, unknown>,\r\n ): Promise<UpdateResult> {\r\n const collection = this.getDatabaseInstance().collection(table);\r\n const mongoOptions = this.withSession<UpdateOptions>(options);\r\n const result = await collection.updateMany(\r\n filter,\r\n update as UpdateFilter<Record<string, unknown>>,\r\n mongoOptions,\r\n );\r\n\r\n return { modifiedCount: result.modifiedCount };\r\n }\r\n\r\n /**\r\n * Delete a single document that matches the provided filter.\r\n */\r\n public async delete(\r\n table: string,\r\n filter: Record<string, unknown> = {},\r\n options?: Record<string, unknown>,\r\n ): Promise<number> {\r\n const collection = this.getDatabaseInstance().collection(table);\r\n const mongoOptions = this.withSession<DeleteOptions>(options);\r\n const result = await collection.deleteOne(filter, mongoOptions);\r\n\r\n return result.deletedCount > 0 ? 1 : 0;\r\n }\r\n\r\n /**\r\n * Delete documents that match the provided filter.\r\n */\r\n public async deleteMany(\r\n table: string,\r\n filter: Record<string, unknown> = {},\r\n options?: Record<string, unknown>,\r\n ): Promise<number> {\r\n const collection = this.getDatabaseInstance().collection(table);\r\n const mongoOptions = this.withSession<DeleteOptions>(options);\r\n\r\n const result = await collection.deleteMany(filter, mongoOptions);\r\n\r\n return result.deletedCount ?? 0;\r\n }\r\n\r\n /**\r\n * Remove all records from a collection.\r\n *\r\n * This uses deleteMany with an empty filter to remove all documents.\r\n * For very large collections, consider using the migration driver's\r\n * dropTable + createTable approach for better performance.\r\n */\r\n public async truncateTable(table: string, options?: Record<string, unknown>): Promise<number> {\r\n const collection = this.getDatabaseInstance().collection(table);\r\n const mongoOptions = this.withSession<DeleteOptions>(options);\r\n const result = await collection.deleteMany({}, mongoOptions);\r\n\r\n return result.deletedCount ?? 0;\r\n }\r\n\r\n /**\r\n * Serialize the given data\r\n */\r\n public serialize(data: Record<string, unknown>): Record<string, unknown> {\r\n const serialized: Record<string, unknown> = {};\r\n\r\n for (const [key, value] of Object.entries(data)) {\r\n if (value === undefined) {\r\n continue; // Skip undefined values\r\n }\r\n\r\n if (value instanceof ObjectId) {\r\n serialized[key] = value.toString();\r\n } else if (value instanceof Date) {\r\n serialized[key] = value.toISOString();\r\n } else if (typeof value === \"bigint\") {\r\n serialized[key] = value.toString();\r\n } else if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\r\n // Nested objects will be stored as JSONB\r\n serialized[key] = value;\r\n } else {\r\n serialized[key] = value;\r\n }\r\n }\r\n\r\n return serialized;\r\n }\r\n\r\n /**\r\n * Get the dirty tracker for this driver.\r\n */\r\n public getDirtyTracker(data: Record<string, unknown>): DatabaseDirtyTracker {\r\n return new DatabaseDirtyTracker(data);\r\n }\r\n\r\n /**\r\n * Deserialize the given data\r\n */\r\n public deserialize(data: Record<string, unknown>): Record<string, unknown> {\r\n if (data._id && typeof data._id === \"string\") {\r\n data._id = new ObjectId(data._id);\r\n }\r\n\r\n for (const [key, value] of Object.entries(data)) {\r\n // Only re-inflate strings — Mongo driver already returns Date objects from DB reads\r\n if (typeof value === \"string\" && isValidDateValue(value)) {\r\n data[key] = new Date(value);\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /**\r\n * Provide a Mongo-backed query builder instance for the given collection.\r\n */\r\n public queryBuilder<T = unknown>(table: string): QueryBuilderContract<T> {\r\n return new MongoQueryBuilder(table, dataSourceRegistry.get());\r\n }\r\n\r\n /**\r\n * Begin a MongoDB transaction, returning commit/rollback helpers.\r\n */\r\n public async beginTransaction(): Promise<DriverTransactionContract<ClientSession>> {\r\n const client = this.getClientInstance();\r\n const session = client.startSession();\r\n\r\n await session.startTransaction(this.transactionOptions);\r\n databaseTransactionContext.enter({ session });\r\n let finished = false;\r\n\r\n const finalize = async (operation: () => Promise<void>): Promise<void> => {\r\n if (finished) return;\r\n\r\n try {\r\n await operation();\r\n } finally {\r\n finished = true;\r\n databaseTransactionContext.exit();\r\n await session.endSession().catch(() => undefined);\r\n }\r\n };\r\n\r\n return {\r\n context: session,\r\n commit: async () => {\r\n await finalize(async () => {\r\n try {\r\n await session.commitTransaction();\r\n } catch (error) {\r\n await session.abortTransaction().catch(() => undefined);\r\n throw error;\r\n }\r\n });\r\n },\r\n rollback: async () => {\r\n await finalize(async () => {\r\n await session.abortTransaction();\r\n });\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Execute a function within a transaction scope (recommended pattern).\r\n *\r\n * Automatically commits on success, rolls back on any error, and guarantees\r\n * resource cleanup. This is the recommended way to use transactions.\r\n *\r\n * **MongoDB Requirements:**\r\n * - Requires MongoDB 4.0+ with replica set or sharded cluster\r\n * - Standalone MongoDB instances do not support transactions\r\n *\r\n * @param fn - Async function to execute within transaction\r\n * @param options - Transaction options (read preference, write concern, etc.)\r\n * @returns The return value of the callback function\r\n * @throws {Error} If transaction fails, is explicitly rolled back, or replica set not configured\r\n */\r\n public async transaction<T>(\r\n fn: (ctx: TransactionContext) => Promise<T>,\r\n options?: Record<string, unknown>,\r\n ): Promise<T> {\r\n // Prevent nested transaction() calls\r\n if (databaseTransactionContext.hasActiveTransaction()) {\r\n throw new Error(\r\n \"Nested transaction() calls are not supported. \" +\r\n \"Use beginTransaction() with savepoints for advanced transaction patterns.\",\r\n );\r\n }\r\n\r\n // Check if MongoDB is running as a replica set (required for transactions)\r\n await this.ensureReplicaSetAvailable();\r\n\r\n const client = this.getClientInstance();\r\n const session = client.startSession();\r\n\r\n try {\r\n await session.startTransaction({\r\n ...this.transactionOptions,\r\n ...(options as TransactionOptions),\r\n });\r\n\r\n // Set transaction context for queries within callback\r\n databaseTransactionContext.enter({ session });\r\n\r\n try {\r\n // Create transaction context with rollback method\r\n const ctx: TransactionContext = {\r\n rollback(reason?: string): never {\r\n throw new TransactionRollbackError(reason);\r\n },\r\n };\r\n\r\n // Execute callback\r\n const result = await fn(ctx);\r\n\r\n // Auto-commit on success\r\n await session.commitTransaction();\r\n\r\n return result;\r\n } catch (error) {\r\n // Auto-rollback on any error (including explicit rollback)\r\n await session.abortTransaction().catch(() => undefined);\r\n throw error;\r\n } finally {\r\n // Guaranteed context cleanup\r\n databaseTransactionContext.exit();\r\n }\r\n } finally {\r\n // Guaranteed session cleanup\r\n await session.endSession().catch(() => undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Execute atomic operations (typically $inc/$set style updates) against documents.\r\n *\r\n * Uses `updateMany` so callers can atomically modify any set of documents.\r\n */\r\n public async atomic(\r\n table: string,\r\n filter: Record<string, unknown>,\r\n operations: Record<string, unknown>,\r\n options?: Record<string, unknown>,\r\n ): Promise<UpdateResult> {\r\n const collection = this.getDatabaseInstance().collection(table);\r\n const mongoOptions = this.withSession<UpdateOptions>(options);\r\n const result = await collection.updateMany(\r\n filter,\r\n operations as UpdateFilter<Record<string, unknown>>,\r\n mongoOptions,\r\n );\r\n\r\n return { modifiedCount: result.modifiedCount };\r\n }\r\n\r\n /**\r\n * Lazily create (and cache) the Mongo sync adapter.\r\n * The adapter uses this driver instance to ensure all operations\r\n * participate in active transactions via the session context.\r\n */\r\n public syncAdapter(): SyncAdapterContract {\r\n if (!this.syncAdapterInstance) {\r\n this.syncAdapterInstance = new MongoSyncAdapter(this);\r\n }\r\n\r\n return this.syncAdapterInstance;\r\n }\r\n\r\n /**\r\n * Lazily create (and cache) the Mongo migration driver.\r\n * The migration driver handles schema operations like indexes, collections, etc.\r\n */\r\n public migrationDriver(): MigrationDriverContract {\r\n if (!this.migrationDriverInstance) {\r\n this.migrationDriverInstance = new MongoMigrationDriver(this);\r\n }\r\n\r\n return this.migrationDriverInstance!;\r\n }\r\n\r\n /**\r\n * Expose the underlying Mongo client for advanced consumers.\r\n */\r\n public getClient<Client = MongoClient>(): Client {\r\n return this.getClientInstance() as Client;\r\n }\r\n\r\n /**\r\n * Retrieve the active Mongo client, throwing if the driver is disconnected.\r\n */\r\n private getClientInstance(): MongoClient {\r\n if (!this.client) {\r\n throw new Error(\"Mongo driver is not connected.\");\r\n }\r\n\r\n return this.client;\r\n }\r\n\r\n /**\r\n * Retrieve the active Mongo database, throwing if the driver is disconnected.\r\n * @private\r\n */\r\n private getDatabaseInstance(): Db {\r\n if (!this.database) {\r\n throw new Error(\"Mongo driver is not connected to a database.\");\r\n }\r\n\r\n return this.database;\r\n }\r\n\r\n /**\r\n * Resolve the Mongo connection string based on provided options.\r\n */\r\n private resolveUri(): string {\r\n if (this.config.uri) {\r\n return this.config.uri;\r\n }\r\n\r\n const host = this.config.host ?? \"localhost\";\r\n const port = this.config.port ?? 27017;\r\n\r\n return `mongodb://${host}:${port}`;\r\n }\r\n\r\n /**\r\n * Build the Mongo client options derived from the driver configuration.\r\n */\r\n private buildClientOptions(): MongoClientOptions {\r\n const baseOptions: MongoClientOptions = {\r\n ...(this.config.clientOptions ?? {}),\r\n };\r\n\r\n if (this.config.logging) {\r\n baseOptions.monitorCommands = true;\r\n }\r\n\r\n if (this.config.username && !baseOptions.auth) {\r\n baseOptions.auth = {\r\n username: this.config.username,\r\n password: this.config.password,\r\n };\r\n }\r\n\r\n if (this.config.authSource && !baseOptions.authSource) {\r\n baseOptions.authSource = this.config.authSource;\r\n }\r\n\r\n return baseOptions;\r\n }\r\n\r\n /**\r\n * Emit a driver lifecycle event.\r\n */\r\n private emit(event: DriverEvent, ...args: unknown[]): void {\r\n this.events.emit(event, ...args);\r\n }\r\n\r\n /**\r\n * Ensure MongoDB is running as a replica set (required for transactions).\r\n *\r\n * @throws {Error} If MongoDB is running as a standalone instance\r\n */\r\n private async ensureReplicaSetAvailable(): Promise<void> {\r\n try {\r\n const admin = this.database!.admin();\r\n const status = await admin.serverStatus();\r\n\r\n if (!status.repl) {\r\n throw new Error(\r\n \"MongoDB transactions require a replica set or sharded cluster. \" +\r\n \"Standalone MongoDB instances do not support transactions.\\n\\n\" +\r\n \"For local development:\\n\" +\r\n \" - Run MongoDB with --replSet flag: mongod --replSet rs0\\n\" +\r\n \" - Or use Docker with replica set configuration\\n\" +\r\n \" - Or use MongoDB Atlas (cloud) which provides replica sets by default\",\r\n );\r\n }\r\n } catch (error: any) {\r\n if (error.message?.includes(\"replica set\")) {\r\n throw error;\r\n }\r\n throw new Error(`Failed to check MongoDB replica set status: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Attach the active transaction session (when available) to Mongo options.\r\n */\r\n private withSession<TOptions extends { session?: ClientSession }>(\r\n options?: Record<string, unknown>,\r\n ): TOptions | undefined {\r\n const session = databaseTransactionContext.getSession<ClientSession>();\r\n\r\n if (!session) {\r\n return options as TOptions | undefined;\r\n }\r\n\r\n const baseOptions = options ? ({ ...options } as TOptions) : ({} as TOptions);\r\n\r\n baseOptions.session = session;\r\n\r\n return baseOptions;\r\n }\r\n\r\n // ============================================================\r\n // SQL Compatibility Operations (Not supported in MongoDB)\r\n // ============================================================\r\n\r\n /**\r\n * Return a SQL serializer for this driver's dialect.\r\n * Not supported for MongoDB.\r\n */\r\n public getSQLSerializer(): SQLSerializer {\r\n throw new Error(\"MongoDB driver does not support SQL serialization.\");\r\n }\r\n\r\n /**\r\n * Execute a raw SQL query.\r\n * Not supported for MongoDB.\r\n */\r\n public async query<T = unknown>(_sql: string, _params?: unknown[]): Promise<any> {\r\n throw new Error(\"MongoDB driver does not support raw SQL queries.\");\r\n }\r\n\r\n // ============================================================\r\n // Database Lifecycle Operations\r\n // ============================================================\r\n\r\n /**\r\n * Create a new database.\r\n *\r\n * In MongoDB, databases are created automatically when data is first written.\r\n * This method creates an empty collection to ensure the database exists.\r\n *\r\n * @param name - Database name to create\r\n * @returns true if created, false if already exists\r\n */\r\n public async createDatabase(name: string): Promise<boolean> {\r\n const client = this.getClientInstance();\r\n\r\n // Check if database already exists\r\n if (await this.databaseExists(name)) {\r\n return false;\r\n }\r\n\r\n try {\r\n // MongoDB creates databases on first write, so create a system collection\r\n const db = client.db(name);\r\n await db.createCollection(\"__init__\");\r\n // Drop the temp collection\r\n await db.collection(\"__init__\").drop();\r\n\r\n log.success(\"database\", \"lifecycle\", `Created database ${name}`);\r\n return true;\r\n } catch (error) {\r\n log.error(\"database\", \"lifecycle\", `Failed to create database ${name}: ${error}`);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Drop a database.\r\n *\r\n * @param name - Database name to drop\r\n * @returns true if dropped, false if didn't exist\r\n */\r\n public async dropDatabase(name: string): Promise<boolean> {\r\n const client = this.getClientInstance();\r\n\r\n // Check if database exists\r\n if (!(await this.databaseExists(name))) {\r\n return false;\r\n }\r\n\r\n try {\r\n await client.db(name).dropDatabase();\r\n log.success(\"database\", \"lifecycle\", `Dropped database ${name}`);\r\n return true;\r\n } catch (error) {\r\n log.error(\"database\", \"lifecycle\", `Failed to drop database ${name}: ${error}`);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Check if a database exists.\r\n *\r\n * @param name - Database name to check\r\n * @returns true if database exists\r\n */\r\n public async databaseExists(name: string): Promise<boolean> {\r\n const client = this.getClientInstance();\r\n\r\n const result = await client.db(\"admin\").admin().listDatabases();\r\n return result.databases.some((db) => db.name === name);\r\n }\r\n\r\n /**\r\n * List all databases.\r\n *\r\n * @returns Array of database names\r\n */\r\n public async listDatabases(): Promise<string[]> {\r\n const client = this.getClientInstance();\r\n\r\n const result = await client.db(\"admin\").admin().listDatabases();\r\n return result.databases\r\n .map((db) => db.name)\r\n .filter((name) => ![\"admin\", \"local\", \"config\"].includes(name));\r\n }\r\n\r\n // ============================================================\r\n // Table/Collection Management Operations\r\n // ============================================================\r\n\r\n /**\r\n * Drop a collection.\r\n *\r\n * @param name - Collection name to drop\r\n * @throws Error if collection doesn't exist\r\n */\r\n public async dropTable(name: string): Promise<void> {\r\n const db = this.getDatabaseInstance();\r\n await db.collection(name).drop();\r\n log.success(\"database\", \"collection\", `Dropped collection ${name}`);\r\n }\r\n\r\n /**\r\n * Drop a collection if it exists.\r\n *\r\n * @param name - Collection name to drop\r\n */\r\n public async dropTableIfExists(name: string): Promise<void> {\r\n if (await this.blueprint.tableExists(name)) {\r\n await this.dropTable(name);\r\n }\r\n }\r\n\r\n /**\r\n * Drop all collections in the current database.\r\n *\r\n * Useful for `migrate:fresh` command.\r\n */\r\n public async dropAllTables(): Promise<void> {\r\n const collections = await this.blueprint.listTables();\r\n\r\n if (collections.length === 0) {\r\n return;\r\n }\r\n\r\n const db = this.getDatabaseInstance();\r\n\r\n for (const collection of collections) {\r\n await db.collection(collection).drop();\r\n }\r\n\r\n log.success(\"database\", \"collection\", `Dropped ${collections.length} collections`);\r\n }\r\n}\r\n"],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import { GenerateIdOptions, IdGeneratorContract } from "../../contracts/database-id-generator.contract.mjs";
2
+ import { MongoDbDriver } from "./mongodb-driver.mjs";
3
+
4
+ //#region ../../@warlock.js/cascade/src/drivers/mongodb/mongodb-id-generator.d.ts
5
+ /**
6
+ * MongoDB-specific ID generator for auto-incrementing integer IDs.
7
+ *
8
+ * Maintains a separate collection that tracks the last generated ID for each table.
9
+ * Generates auto-incrementing IDs similar to SQL's AUTO_INCREMENT feature.
10
+ *
11
+ * **Collection Structure:**
12
+ * ```json
13
+ * {
14
+ * "collection": "users",
15
+ * "id": 12345
16
+ * }
17
+ * ```
18
+ *
19
+ * **Features:**
20
+ * - Atomic ID generation using findOneAndUpdate with aggregation pipeline
21
+ * - Automatic transaction support (driver handles session context)
22
+ * - Configurable initial ID and increment values
23
+ * - Thread-safe and concurrent-safe
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const mongoDriver = new MongoDbDriver(config);
28
+ * const idGenerator = new MongoIdGenerator(mongoDriver);
29
+ *
30
+ * const dataSource = new DataSource({
31
+ * name: "primary",
32
+ * driver: mongoDriver,
33
+ * idGenerator,
34
+ * });
35
+ *
36
+ * // Generate IDs with custom configuration
37
+ * const id = await idGenerator.generateNextId({
38
+ * table: "users",
39
+ * initialId: 1000,
40
+ * incrementIdBy: 1
41
+ * });
42
+ * ```
43
+ */
44
+ declare class MongoIdGenerator implements IdGeneratorContract {
45
+ private readonly driver;
46
+ /**
47
+ * The collection name that stores ID counters.
48
+ * Each document tracks the last ID for a specific table.
49
+ *
50
+ * Named "MasterMind" for backward compatibility with legacy Cascade.
51
+ */
52
+ readonly counterCollection: string;
53
+ /**
54
+ * Create a new MongoDB ID generator instance.
55
+ *
56
+ * @param driver - The MongoDB driver instance
57
+ * @param counterCollection - Name of the collection storing ID counters (default: "MasterMind")
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const idGenerator = new MongoIdGenerator(mongoDriver, "id_counters");
62
+ * ```
63
+ */
64
+ constructor(driver: MongoDbDriver, counterCollection?: string);
65
+ /**
66
+ * Generate the next ID for a table.
67
+ *
68
+ * Uses atomic findOneAndUpdate with aggregation pipeline to ensure uniqueness
69
+ * even in concurrent scenarios. Automatically participates in active transactions.
70
+ *
71
+ * @param options - Configuration for ID generation
72
+ * @returns The generated ID
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * // Simple usage
77
+ * const id = await idGenerator.generateNextId({ table: "users" });
78
+ *
79
+ * // With custom initial ID
80
+ * const id = await idGenerator.generateNextId({
81
+ * table: "products",
82
+ * initialId: 1000,
83
+ * incrementIdBy: 1
84
+ * });
85
+ * ```
86
+ */
87
+ generateNextId(options: GenerateIdOptions): Promise<number>;
88
+ /**
89
+ * Get the last generated ID for a table.
90
+ *
91
+ * @param table - The table/collection name
92
+ * @returns The last generated ID, or 0 if none exists
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * const lastId = await idGenerator.getLastId("users");
97
+ * console.log(`Last user ID: ${lastId}`);
98
+ * ```
99
+ */
100
+ getLastId(table: string): Promise<number>;
101
+ /**
102
+ * Set the last ID for a table.
103
+ *
104
+ * Creates or updates the counter document for the specified table.
105
+ * Useful for seeding or resetting ID sequences.
106
+ *
107
+ * @param table - The table/collection name
108
+ * @param id - The ID to set as the last generated ID
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * // Reset user IDs to start from 1000
113
+ * await idGenerator.setLastId("users", 1000);
114
+ * ```
115
+ */
116
+ setLastId(table: string, id: number): Promise<void>;
117
+ }
118
+ //#endregion
119
+ export { MongoIdGenerator };
120
+ //# sourceMappingURL=mongodb-id-generator.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb-id-generator.d.mts","names":[],"sources":["../../../../../../../@warlock.js/cascade/src/drivers/mongodb/mongodb-id-generator.ts"],"mappings":";;;;;;;AA0CA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsH4D;;;;;;cAtH/C,gBAAA,YAA4B,mBAAA;EAAA,iBAqBpB,MAAA;;;;;;;WAdH,iBAAA;;;;;;;;;;;;cAcG,MAAA,EAAQ,aAAA,EACzB,iBAAA;;;;;;;;;;;;;;;;;;;;;;;EA6BW,cAAA,CAAe,OAAA,EAAS,iBAAA,GAAoB,OAAA;;;;;;;;;;;;;EA8C5C,SAAA,CAAU,KAAA,WAAgB,OAAA;;;;;;;;;;;;;;;;EAqB1B,SAAA,CAAU,KAAA,UAAe,EAAA,WAAa,OAAA;AAAA"}
@@ -0,0 +1,141 @@
1
+ //#region ../../@warlock.js/cascade/src/drivers/mongodb/mongodb-id-generator.ts
2
+ /**
3
+ * MongoDB-specific ID generator for auto-incrementing integer IDs.
4
+ *
5
+ * Maintains a separate collection that tracks the last generated ID for each table.
6
+ * Generates auto-incrementing IDs similar to SQL's AUTO_INCREMENT feature.
7
+ *
8
+ * **Collection Structure:**
9
+ * ```json
10
+ * {
11
+ * "collection": "users",
12
+ * "id": 12345
13
+ * }
14
+ * ```
15
+ *
16
+ * **Features:**
17
+ * - Atomic ID generation using findOneAndUpdate with aggregation pipeline
18
+ * - Automatic transaction support (driver handles session context)
19
+ * - Configurable initial ID and increment values
20
+ * - Thread-safe and concurrent-safe
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const mongoDriver = new MongoDbDriver(config);
25
+ * const idGenerator = new MongoIdGenerator(mongoDriver);
26
+ *
27
+ * const dataSource = new DataSource({
28
+ * name: "primary",
29
+ * driver: mongoDriver,
30
+ * idGenerator,
31
+ * });
32
+ *
33
+ * // Generate IDs with custom configuration
34
+ * const id = await idGenerator.generateNextId({
35
+ * table: "users",
36
+ * initialId: 1000,
37
+ * incrementIdBy: 1
38
+ * });
39
+ * ```
40
+ */
41
+ var MongoIdGenerator = class {
42
+ driver;
43
+ /**
44
+ * The collection name that stores ID counters.
45
+ * Each document tracks the last ID for a specific table.
46
+ *
47
+ * Named "MasterMind" for backward compatibility with legacy Cascade.
48
+ */
49
+ counterCollection = "MasterMind";
50
+ /**
51
+ * Create a new MongoDB ID generator instance.
52
+ *
53
+ * @param driver - The MongoDB driver instance
54
+ * @param counterCollection - Name of the collection storing ID counters (default: "MasterMind")
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * const idGenerator = new MongoIdGenerator(mongoDriver, "id_counters");
59
+ * ```
60
+ */
61
+ constructor(driver, counterCollection) {
62
+ this.driver = driver;
63
+ if (counterCollection) this.counterCollection = counterCollection;
64
+ }
65
+ /**
66
+ * Generate the next ID for a table.
67
+ *
68
+ * Uses atomic findOneAndUpdate with aggregation pipeline to ensure uniqueness
69
+ * even in concurrent scenarios. Automatically participates in active transactions.
70
+ *
71
+ * @param options - Configuration for ID generation
72
+ * @returns The generated ID
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * // Simple usage
77
+ * const id = await idGenerator.generateNextId({ table: "users" });
78
+ *
79
+ * // With custom initial ID
80
+ * const id = await idGenerator.generateNextId({
81
+ * table: "products",
82
+ * initialId: 1000,
83
+ * incrementIdBy: 1
84
+ * });
85
+ * ```
86
+ */
87
+ async generateNextId(options) {
88
+ const { table, initialId = 1, incrementIdBy = 1 } = options;
89
+ return (await this.driver.getDatabase().collection(this.counterCollection).findOneAndUpdate({ collection: table }, [{ $set: {
90
+ id: { $cond: {
91
+ if: { $or: [{ $eq: ["$id", null] }, { $not: "$id" }] },
92
+ then: initialId,
93
+ else: { $add: ["$id", incrementIdBy] }
94
+ } },
95
+ collection: table
96
+ } }], {
97
+ upsert: true,
98
+ returnDocument: "after"
99
+ }))?.id ?? initialId;
100
+ }
101
+ /**
102
+ * Get the last generated ID for a table.
103
+ *
104
+ * @param table - The table/collection name
105
+ * @returns The last generated ID, or 0 if none exists
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * const lastId = await idGenerator.getLastId("users");
110
+ * console.log(`Last user ID: ${lastId}`);
111
+ * ```
112
+ */
113
+ async getLastId(table) {
114
+ return (await this.driver.queryBuilder(this.counterCollection).where("collection", table).first())?.id ?? 0;
115
+ }
116
+ /**
117
+ * Set the last ID for a table.
118
+ *
119
+ * Creates or updates the counter document for the specified table.
120
+ * Useful for seeding or resetting ID sequences.
121
+ *
122
+ * @param table - The table/collection name
123
+ * @param id - The ID to set as the last generated ID
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * // Reset user IDs to start from 1000
128
+ * await idGenerator.setLastId("users", 1000);
129
+ * ```
130
+ */
131
+ async setLastId(table, id) {
132
+ await this.driver.update(this.counterCollection, { collection: table }, { $set: {
133
+ id,
134
+ collection: table
135
+ } }, { upsert: true });
136
+ }
137
+ };
138
+
139
+ //#endregion
140
+ export { MongoIdGenerator };
141
+ //# sourceMappingURL=mongodb-id-generator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb-id-generator.mjs","names":[],"sources":["../../../../../../../@warlock.js/cascade/src/drivers/mongodb/mongodb-id-generator.ts"],"sourcesContent":["import type { GenerateIdOptions, IdGeneratorContract } from \"../../contracts\";\nimport type { MongoDbDriver } from \"./mongodb-driver\";\n\n/**\n * MongoDB-specific ID generator for auto-incrementing integer IDs.\n *\n * Maintains a separate collection that tracks the last generated ID for each table.\n * Generates auto-incrementing IDs similar to SQL's AUTO_INCREMENT feature.\n *\n * **Collection Structure:**\n * ```json\n * {\n * \"collection\": \"users\",\n * \"id\": 12345\n * }\n * ```\n *\n * **Features:**\n * - Atomic ID generation using findOneAndUpdate with aggregation pipeline\n * - Automatic transaction support (driver handles session context)\n * - Configurable initial ID and increment values\n * - Thread-safe and concurrent-safe\n *\n * @example\n * ```typescript\n * const mongoDriver = new MongoDbDriver(config);\n * const idGenerator = new MongoIdGenerator(mongoDriver);\n *\n * const dataSource = new DataSource({\n * name: \"primary\",\n * driver: mongoDriver,\n * idGenerator,\n * });\n *\n * // Generate IDs with custom configuration\n * const id = await idGenerator.generateNextId({\n * table: \"users\",\n * initialId: 1000,\n * incrementIdBy: 1\n * });\n * ```\n */\nexport class MongoIdGenerator implements IdGeneratorContract {\n /**\n * The collection name that stores ID counters.\n * Each document tracks the last ID for a specific table.\n *\n * Named \"MasterMind\" for backward compatibility with legacy Cascade.\n */\n public readonly counterCollection: string = \"MasterMind\";\n\n /**\n * Create a new MongoDB ID generator instance.\n *\n * @param driver - The MongoDB driver instance\n * @param counterCollection - Name of the collection storing ID counters (default: \"MasterMind\")\n *\n * @example\n * ```typescript\n * const idGenerator = new MongoIdGenerator(mongoDriver, \"id_counters\");\n * ```\n */\n public constructor(\n private readonly driver: MongoDbDriver,\n counterCollection?: string,\n ) {\n if (counterCollection) {\n this.counterCollection = counterCollection;\n }\n }\n\n /**\n * Generate the next ID for a table.\n *\n * Uses atomic findOneAndUpdate with aggregation pipeline to ensure uniqueness\n * even in concurrent scenarios. Automatically participates in active transactions.\n *\n * @param options - Configuration for ID generation\n * @returns The generated ID\n *\n * @example\n * ```typescript\n * // Simple usage\n * const id = await idGenerator.generateNextId({ table: \"users\" });\n *\n * // With custom initial ID\n * const id = await idGenerator.generateNextId({\n * table: \"products\",\n * initialId: 1000,\n * incrementIdBy: 1\n * });\n * ```\n */\n public async generateNextId(options: GenerateIdOptions): Promise<number> {\n const { table, initialId = 1, incrementIdBy = 1 } = options;\n\n // Get the MongoDB database instance\n const database = this.driver.getDatabase();\n const collection = database.collection(this.counterCollection);\n\n // Use atomic findOneAndUpdate with aggregation pipeline\n // The driver's withSession method will automatically attach the session if in a transaction\n const result = await collection.findOneAndUpdate(\n { collection: table },\n [\n {\n $set: {\n id: {\n $cond: {\n if: { $or: [{ $eq: [\"$id\", null] }, { $not: \"$id\" }] },\n then: initialId,\n else: { $add: [\"$id\", incrementIdBy] },\n },\n },\n collection: table,\n },\n },\n ],\n {\n upsert: true,\n returnDocument: \"after\",\n },\n );\n\n return result?.id ?? initialId;\n }\n\n /**\n * Get the last generated ID for a table.\n *\n * @param table - The table/collection name\n * @returns The last generated ID, or 0 if none exists\n *\n * @example\n * ```typescript\n * const lastId = await idGenerator.getLastId(\"users\");\n * console.log(`Last user ID: ${lastId}`);\n * ```\n */\n public async getLastId(table: string): Promise<number> {\n const query = this.driver.queryBuilder(this.counterCollection);\n const doc = (await query.where(\"collection\", table).first()) as Record<string, unknown> | null;\n return (doc?.id as number) ?? 0;\n }\n\n /**\n * Set the last ID for a table.\n *\n * Creates or updates the counter document for the specified table.\n * Useful for seeding or resetting ID sequences.\n *\n * @param table - The table/collection name\n * @param id - The ID to set as the last generated ID\n *\n * @example\n * ```typescript\n * // Reset user IDs to start from 1000\n * await idGenerator.setLastId(\"users\", 1000);\n * ```\n */\n public async setLastId(table: string, id: number): Promise<void> {\n await this.driver.update(\n this.counterCollection,\n { collection: table },\n { $set: { id, collection: table } },\n { upsert: true },\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,IAAa,mBAAb,MAA6D;CAqBxC;;;;;;;CAdnB,AAAgB,oBAA4B;;;;;;;;;;;;CAa5C,AAAO,YACL,AAAiB,QACjB,mBACA;EAFiB;EAGjB,IAAI,mBACF,KAAK,oBAAoB;CAE7B;;;;;;;;;;;;;;;;;;;;;;;CAwBA,MAAa,eAAe,SAA6C;EACvE,MAAM,EAAE,OAAO,YAAY,GAAG,gBAAgB,MAAM;EA8BpD,QAAO,MA3BU,KAAK,OAAO,YACH,EAAE,WAAW,KAAK,iBAId,EAAE,iBAC9B,EAAE,YAAY,MAAM,GACpB,CACE,EACE,MAAM;GACJ,IAAI,EACF,OAAO;IACL,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC,EAAE;IACrD,MAAM;IACN,MAAM,EAAE,MAAM,CAAC,OAAO,aAAa,EAAE;GACvC,EACF;GACA,YAAY;EACd,EACF,CACF,GACA;GACE,QAAQ;GACR,gBAAgB;EAClB,CACF,IAEe,MAAM;CACvB;;;;;;;;;;;;;CAcA,MAAa,UAAU,OAAgC;EAGrD,QAAQ,MAFM,KAAK,OAAO,aAAa,KAAK,iBACrB,EAAE,MAAM,cAAc,KAAK,EAAE,MAAM,IAC7C,MAAiB;CAChC;;;;;;;;;;;;;;;;CAiBA,MAAa,UAAU,OAAe,IAA2B;EAC/D,MAAM,KAAK,OAAO,OAChB,KAAK,mBACL,EAAE,YAAY,MAAM,GACpB,EAAE,MAAM;GAAE;GAAI,YAAY;EAAM,EAAE,GAClC,EAAE,QAAQ,KAAK,CACjB;CACF;AACF"}