@warlock.js/cascade 4.0.162 → 4.0.164

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 (661) hide show
  1. package/cjs/context/database-data-source-context.d.ts +29 -0
  2. package/cjs/context/database-data-source-context.d.ts.map +1 -0
  3. package/cjs/context/database-data-source-context.js +28 -0
  4. package/cjs/context/database-data-source-context.js.map +1 -0
  5. package/cjs/context/database-transaction-context.d.ts +35 -0
  6. package/cjs/context/database-transaction-context.d.ts.map +1 -0
  7. package/cjs/context/database-transaction-context.js +40 -0
  8. package/cjs/context/database-transaction-context.js.map +1 -0
  9. package/cjs/contracts/database-driver.contract.d.ts +450 -0
  10. package/cjs/contracts/database-driver.contract.d.ts.map +1 -0
  11. package/cjs/contracts/database-id-generator.contract.d.ts +109 -0
  12. package/cjs/contracts/database-id-generator.contract.d.ts.map +1 -0
  13. package/cjs/contracts/database-remover.contract.d.ts +104 -0
  14. package/cjs/contracts/database-remover.contract.d.ts.map +1 -0
  15. package/cjs/contracts/database-restorer.contract.d.ts +143 -0
  16. package/cjs/contracts/database-restorer.contract.d.ts.map +1 -0
  17. package/cjs/contracts/database-writer.contract.d.ts +119 -0
  18. package/cjs/contracts/database-writer.contract.d.ts.map +1 -0
  19. package/cjs/contracts/driver-blueprint.contract.d.ts +49 -0
  20. package/cjs/contracts/driver-blueprint.contract.d.ts.map +1 -0
  21. package/cjs/contracts/index.d.ts +10 -0
  22. package/cjs/contracts/index.d.ts.map +1 -0
  23. package/cjs/contracts/migration-driver.contract.d.ts +522 -0
  24. package/cjs/contracts/migration-driver.contract.d.ts.map +1 -0
  25. package/cjs/contracts/query-builder.contract.d.ts +1609 -0
  26. package/cjs/contracts/query-builder.contract.d.ts.map +1 -0
  27. package/cjs/contracts/sync-adapter.contract.d.ts +58 -0
  28. package/cjs/contracts/sync-adapter.contract.d.ts.map +1 -0
  29. package/cjs/data-source/data-source-registry.d.ts +108 -0
  30. package/cjs/data-source/data-source-registry.d.ts.map +1 -0
  31. package/cjs/data-source/data-source-registry.js +145 -0
  32. package/cjs/data-source/data-source-registry.js.map +1 -0
  33. package/cjs/data-source/data-source.d.ts +147 -0
  34. package/cjs/data-source/data-source.d.ts.map +1 -0
  35. package/cjs/data-source/data-source.js +83 -0
  36. package/cjs/data-source/data-source.js.map +1 -0
  37. package/cjs/database-dirty-tracker.d.ts +252 -0
  38. package/cjs/database-dirty-tracker.d.ts.map +1 -0
  39. package/cjs/database-dirty-tracker.js +386 -0
  40. package/cjs/database-dirty-tracker.js.map +1 -0
  41. package/cjs/drivers/mongodb/mongodb-blueprint.d.ts +30 -0
  42. package/cjs/drivers/mongodb/mongodb-blueprint.d.ts.map +1 -0
  43. package/cjs/drivers/mongodb/mongodb-blueprint.js +51 -0
  44. package/cjs/drivers/mongodb/mongodb-blueprint.js.map +1 -0
  45. package/cjs/drivers/mongodb/mongodb-driver.d.ts +325 -0
  46. package/cjs/drivers/mongodb/mongodb-driver.d.ts.map +1 -0
  47. package/cjs/drivers/mongodb/mongodb-driver.js +838 -0
  48. package/cjs/drivers/mongodb/mongodb-driver.js.map +1 -0
  49. package/cjs/drivers/mongodb/mongodb-id-generator.d.ts +116 -0
  50. package/cjs/drivers/mongodb/mongodb-id-generator.d.ts.map +1 -0
  51. package/cjs/drivers/mongodb/mongodb-id-generator.js +149 -0
  52. package/cjs/drivers/mongodb/mongodb-id-generator.js.map +1 -0
  53. package/cjs/drivers/mongodb/mongodb-migration-driver.d.ts +317 -0
  54. package/cjs/drivers/mongodb/mongodb-migration-driver.d.ts.map +1 -0
  55. package/cjs/drivers/mongodb/mongodb-migration-driver.js +666 -0
  56. package/cjs/drivers/mongodb/mongodb-migration-driver.js.map +1 -0
  57. package/cjs/drivers/mongodb/mongodb-query-builder.d.ts +1122 -0
  58. package/cjs/drivers/mongodb/mongodb-query-builder.d.ts.map +1 -0
  59. package/cjs/drivers/mongodb/mongodb-query-builder.js +1988 -0
  60. package/cjs/drivers/mongodb/mongodb-query-builder.js.map +1 -0
  61. package/cjs/drivers/mongodb/mongodb-query-operations.d.ts +226 -0
  62. package/cjs/drivers/mongodb/mongodb-query-operations.d.ts.map +1 -0
  63. package/cjs/drivers/mongodb/mongodb-query-operations.js +270 -0
  64. package/cjs/drivers/mongodb/mongodb-query-operations.js.map +1 -0
  65. package/cjs/drivers/mongodb/mongodb-query-parser.d.ts +262 -0
  66. package/cjs/drivers/mongodb/mongodb-query-parser.d.ts.map +1 -0
  67. package/cjs/drivers/mongodb/mongodb-query-parser.js +1351 -0
  68. package/cjs/drivers/mongodb/mongodb-query-parser.js.map +1 -0
  69. package/cjs/drivers/mongodb/mongodb-sync-adapter.d.ts +79 -0
  70. package/cjs/drivers/mongodb/mongodb-sync-adapter.d.ts.map +1 -0
  71. package/cjs/drivers/mongodb/mongodb-sync-adapter.js +146 -0
  72. package/cjs/drivers/mongodb/mongodb-sync-adapter.js.map +1 -0
  73. package/cjs/drivers/mongodb/types.d.ts +43 -0
  74. package/cjs/drivers/mongodb/types.d.ts.map +1 -0
  75. package/cjs/drivers/postgres/index.d.ts +16 -0
  76. package/cjs/drivers/postgres/index.d.ts.map +1 -0
  77. package/cjs/drivers/postgres/postgres-blueprint.d.ts +64 -0
  78. package/cjs/drivers/postgres/postgres-blueprint.d.ts.map +1 -0
  79. package/cjs/drivers/postgres/postgres-blueprint.js +121 -0
  80. package/cjs/drivers/postgres/postgres-blueprint.js.map +1 -0
  81. package/cjs/drivers/postgres/postgres-dialect.d.ts +136 -0
  82. package/cjs/drivers/postgres/postgres-dialect.d.ts.map +1 -0
  83. package/cjs/drivers/postgres/postgres-dialect.js +268 -0
  84. package/cjs/drivers/postgres/postgres-dialect.js.map +1 -0
  85. package/cjs/drivers/postgres/postgres-driver.d.ts +432 -0
  86. package/cjs/drivers/postgres/postgres-driver.d.ts.map +1 -0
  87. package/cjs/drivers/postgres/postgres-driver.js +1010 -0
  88. package/cjs/drivers/postgres/postgres-driver.js.map +1 -0
  89. package/cjs/drivers/postgres/postgres-migration-driver.d.ts +397 -0
  90. package/cjs/drivers/postgres/postgres-migration-driver.d.ts.map +1 -0
  91. package/cjs/drivers/postgres/postgres-migration-driver.js +900 -0
  92. package/cjs/drivers/postgres/postgres-migration-driver.js.map +1 -0
  93. package/cjs/drivers/postgres/postgres-query-builder.d.ts +254 -0
  94. package/cjs/drivers/postgres/postgres-query-builder.d.ts.map +1 -0
  95. package/cjs/drivers/postgres/postgres-query-builder.js +933 -0
  96. package/cjs/drivers/postgres/postgres-query-builder.js.map +1 -0
  97. package/cjs/drivers/postgres/postgres-query-parser.d.ts +328 -0
  98. package/cjs/drivers/postgres/postgres-query-parser.d.ts.map +1 -0
  99. package/cjs/drivers/postgres/postgres-query-parser.js +868 -0
  100. package/cjs/drivers/postgres/postgres-query-parser.js.map +1 -0
  101. package/cjs/drivers/postgres/postgres-sql-serializer.d.ts +37 -0
  102. package/cjs/drivers/postgres/postgres-sql-serializer.d.ts.map +1 -0
  103. package/cjs/drivers/postgres/postgres-sql-serializer.js +400 -0
  104. package/cjs/drivers/postgres/postgres-sql-serializer.js.map +1 -0
  105. package/cjs/drivers/postgres/postgres-sync-adapter.d.ts +83 -0
  106. package/cjs/drivers/postgres/postgres-sync-adapter.d.ts.map +1 -0
  107. package/cjs/drivers/postgres/postgres-sync-adapter.js +197 -0
  108. package/cjs/drivers/postgres/postgres-sync-adapter.js.map +1 -0
  109. package/cjs/drivers/postgres/types.d.ts +144 -0
  110. package/cjs/drivers/postgres/types.d.ts.map +1 -0
  111. package/cjs/drivers/sql/index.d.ts +10 -0
  112. package/cjs/drivers/sql/index.d.ts.map +1 -0
  113. package/cjs/drivers/sql/sql-dialect.contract.d.ts +204 -0
  114. package/cjs/drivers/sql/sql-dialect.contract.d.ts.map +1 -0
  115. package/cjs/drivers/sql/sql-types.d.ts +202 -0
  116. package/cjs/drivers/sql/sql-types.d.ts.map +1 -0
  117. package/cjs/errors/missing-data-source.error.d.ts +22 -0
  118. package/cjs/errors/missing-data-source.error.d.ts.map +1 -0
  119. package/cjs/errors/missing-data-source.error.js +29 -0
  120. package/cjs/errors/missing-data-source.error.js.map +1 -0
  121. package/cjs/errors/transaction-rollback.error.d.ts +20 -0
  122. package/cjs/errors/transaction-rollback.error.d.ts.map +1 -0
  123. package/cjs/errors/transaction-rollback.error.js +27 -0
  124. package/cjs/errors/transaction-rollback.error.js.map +1 -0
  125. package/cjs/events/model-events.d.ts +231 -0
  126. package/cjs/events/model-events.d.ts.map +1 -0
  127. package/cjs/events/model-events.js +259 -0
  128. package/cjs/events/model-events.js.map +1 -0
  129. package/cjs/expressions/aggregate-expressions.d.ts +215 -0
  130. package/cjs/expressions/aggregate-expressions.d.ts.map +1 -0
  131. package/cjs/expressions/aggregate-expressions.js +221 -0
  132. package/cjs/expressions/aggregate-expressions.js.map +1 -0
  133. package/cjs/expressions/index.d.ts +2 -0
  134. package/cjs/expressions/index.d.ts.map +1 -0
  135. package/cjs/index.d.ts +45 -0
  136. package/cjs/index.d.ts.map +1 -0
  137. package/cjs/index.js +1 -0
  138. package/cjs/index.js.map +1 -0
  139. package/cjs/migration/column-builder.d.ts +417 -0
  140. package/cjs/migration/column-builder.d.ts.map +1 -0
  141. package/cjs/migration/column-builder.js +586 -0
  142. package/cjs/migration/column-builder.js.map +1 -0
  143. package/cjs/migration/column-helpers.d.ts +275 -0
  144. package/cjs/migration/column-helpers.d.ts.map +1 -0
  145. package/cjs/migration/column-helpers.js +389 -0
  146. package/cjs/migration/column-helpers.js.map +1 -0
  147. package/cjs/migration/foreign-key-builder.d.ts +103 -0
  148. package/cjs/migration/foreign-key-builder.d.ts.map +1 -0
  149. package/cjs/migration/foreign-key-builder.js +121 -0
  150. package/cjs/migration/foreign-key-builder.js.map +1 -0
  151. package/cjs/migration/index.d.ts +7 -0
  152. package/cjs/migration/index.d.ts.map +1 -0
  153. package/cjs/migration/migration-runner.d.ts +278 -0
  154. package/cjs/migration/migration-runner.d.ts.map +1 -0
  155. package/cjs/migration/migration-runner.js +815 -0
  156. package/cjs/migration/migration-runner.js.map +1 -0
  157. package/cjs/migration/migration.d.ts +1992 -0
  158. package/cjs/migration/migration.d.ts.map +1 -0
  159. package/cjs/migration/migration.js +2162 -0
  160. package/cjs/migration/migration.js.map +1 -0
  161. package/cjs/migration/sql-grammar.d.ts +61 -0
  162. package/cjs/migration/sql-grammar.d.ts.map +1 -0
  163. package/cjs/migration/sql-grammar.js +164 -0
  164. package/cjs/migration/sql-grammar.js.map +1 -0
  165. package/cjs/migration/sql-serializer.d.ts +22 -0
  166. package/cjs/migration/sql-serializer.d.ts.map +1 -0
  167. package/cjs/migration/sql-serializer.js +26 -0
  168. package/cjs/migration/sql-serializer.js.map +1 -0
  169. package/cjs/migration/types.d.ts +155 -0
  170. package/cjs/migration/types.d.ts.map +1 -0
  171. package/cjs/model/methods/accessor-methods.d.ts +13 -0
  172. package/cjs/model/methods/accessor-methods.d.ts.map +1 -0
  173. package/cjs/model/methods/accessor-methods.js +51 -0
  174. package/cjs/model/methods/accessor-methods.js.map +1 -0
  175. package/cjs/model/methods/delete-methods.d.ts +10 -0
  176. package/cjs/model/methods/delete-methods.d.ts.map +1 -0
  177. package/cjs/model/methods/delete-methods.js +10 -0
  178. package/cjs/model/methods/delete-methods.js.map +1 -0
  179. package/cjs/model/methods/dirty-methods.d.ts +10 -0
  180. package/cjs/model/methods/dirty-methods.d.ts.map +1 -0
  181. package/cjs/model/methods/dirty-methods.js +15 -0
  182. package/cjs/model/methods/dirty-methods.js.map +1 -0
  183. package/cjs/model/methods/hydration-methods.d.ts +10 -0
  184. package/cjs/model/methods/hydration-methods.d.ts.map +1 -0
  185. package/cjs/model/methods/hydration-methods.js +57 -0
  186. package/cjs/model/methods/hydration-methods.js.map +1 -0
  187. package/cjs/model/methods/instance-event-methods.d.ts +7 -0
  188. package/cjs/model/methods/instance-event-methods.d.ts.map +1 -0
  189. package/cjs/model/methods/instance-event-methods.js +15 -0
  190. package/cjs/model/methods/instance-event-methods.js.map +1 -0
  191. package/cjs/model/methods/meta-methods.d.ts +7 -0
  192. package/cjs/model/methods/meta-methods.d.ts.map +1 -0
  193. package/cjs/model/methods/meta-methods.js +78 -0
  194. package/cjs/model/methods/meta-methods.js.map +1 -0
  195. package/cjs/model/methods/query-methods.d.ts +24 -0
  196. package/cjs/model/methods/query-methods.d.ts.map +1 -0
  197. package/cjs/model/methods/query-methods.js +164 -0
  198. package/cjs/model/methods/query-methods.js.map +1 -0
  199. package/cjs/model/methods/restore-methods.d.ts +10 -0
  200. package/cjs/model/methods/restore-methods.d.ts.map +1 -0
  201. package/cjs/model/methods/restore-methods.js +13 -0
  202. package/cjs/model/methods/restore-methods.js.map +1 -0
  203. package/cjs/model/methods/scope-methods.d.ts +7 -0
  204. package/cjs/model/methods/scope-methods.d.ts.map +1 -0
  205. package/cjs/model/methods/scope-methods.js +15 -0
  206. package/cjs/model/methods/scope-methods.js.map +1 -0
  207. package/cjs/model/methods/serialization-methods.d.ts +3 -0
  208. package/cjs/model/methods/serialization-methods.d.ts.map +1 -0
  209. package/cjs/model/methods/serialization-methods.js +27 -0
  210. package/cjs/model/methods/serialization-methods.js.map +1 -0
  211. package/cjs/model/methods/static-event-methods.d.ts +9 -0
  212. package/cjs/model/methods/static-event-methods.d.ts.map +1 -0
  213. package/cjs/model/methods/static-event-methods.js +29 -0
  214. package/cjs/model/methods/static-event-methods.js.map +1 -0
  215. package/cjs/model/methods/write-methods.d.ts +10 -0
  216. package/cjs/model/methods/write-methods.d.ts.map +1 -0
  217. package/cjs/model/methods/write-methods.js +52 -0
  218. package/cjs/model/methods/write-methods.js.map +1 -0
  219. package/cjs/model/model.d.ts +1647 -0
  220. package/cjs/model/model.d.ts.map +1 -0
  221. package/cjs/model/model.js +1657 -0
  222. package/cjs/model/model.js.map +1 -0
  223. package/cjs/model/model.types.d.ts +44 -0
  224. package/cjs/model/model.types.d.ts.map +1 -0
  225. package/cjs/model/register-model.d.ts +81 -0
  226. package/cjs/model/register-model.d.ts.map +1 -0
  227. package/cjs/model/register-model.js +94 -0
  228. package/cjs/model/register-model.js.map +1 -0
  229. package/cjs/query-builder/query-builder.d.ts +556 -0
  230. package/cjs/query-builder/query-builder.d.ts.map +1 -0
  231. package/cjs/query-builder/query-builder.js +1070 -0
  232. package/cjs/query-builder/query-builder.js.map +1 -0
  233. package/cjs/relations/helpers.d.ts +156 -0
  234. package/cjs/relations/helpers.d.ts.map +1 -0
  235. package/cjs/relations/helpers.js +202 -0
  236. package/cjs/relations/helpers.js.map +1 -0
  237. package/cjs/relations/index.d.ts +35 -0
  238. package/cjs/relations/index.d.ts.map +1 -0
  239. package/cjs/relations/pivot-operations.d.ts +160 -0
  240. package/cjs/relations/pivot-operations.d.ts.map +1 -0
  241. package/cjs/relations/pivot-operations.js +293 -0
  242. package/cjs/relations/pivot-operations.js.map +1 -0
  243. package/cjs/relations/relation-hydrator.d.ts +68 -0
  244. package/cjs/relations/relation-hydrator.d.ts.map +1 -0
  245. package/cjs/relations/relation-hydrator.js +81 -0
  246. package/cjs/relations/relation-hydrator.js.map +1 -0
  247. package/cjs/relations/relation-loader.d.ts +194 -0
  248. package/cjs/relations/relation-loader.d.ts.map +1 -0
  249. package/cjs/relations/relation-loader.js +466 -0
  250. package/cjs/relations/relation-loader.js.map +1 -0
  251. package/cjs/relations/types.d.ts +306 -0
  252. package/cjs/relations/types.d.ts.map +1 -0
  253. package/cjs/remover/database-remover.d.ts +100 -0
  254. package/cjs/remover/database-remover.d.ts.map +1 -0
  255. package/cjs/remover/database-remover.js +214 -0
  256. package/cjs/remover/database-remover.js.map +1 -0
  257. package/cjs/restorer/database-restorer.d.ts +131 -0
  258. package/cjs/restorer/database-restorer.d.ts.map +1 -0
  259. package/cjs/restorer/database-restorer.js +434 -0
  260. package/cjs/restorer/database-restorer.js.map +1 -0
  261. package/cjs/sql-database-dirty-tracker.d.ts +13 -0
  262. package/cjs/sql-database-dirty-tracker.d.ts.map +1 -0
  263. package/cjs/sql-database-dirty-tracker.js +14 -0
  264. package/cjs/sql-database-dirty-tracker.js.map +1 -0
  265. package/cjs/sync/index.d.ts +12 -0
  266. package/cjs/sync/index.d.ts.map +1 -0
  267. package/cjs/sync/model-events.d.ts +62 -0
  268. package/cjs/sync/model-events.d.ts.map +1 -0
  269. package/cjs/sync/model-events.js +49 -0
  270. package/cjs/sync/model-events.js.map +1 -0
  271. package/cjs/sync/model-sync-operation.d.ts +163 -0
  272. package/cjs/sync/model-sync-operation.d.ts.map +1 -0
  273. package/cjs/sync/model-sync-operation.js +292 -0
  274. package/cjs/sync/model-sync-operation.js.map +1 -0
  275. package/cjs/sync/model-sync.d.ts +130 -0
  276. package/cjs/sync/model-sync.d.ts.map +1 -0
  277. package/cjs/sync/model-sync.js +178 -0
  278. package/cjs/sync/model-sync.js.map +1 -0
  279. package/cjs/sync/sync-context.d.ts +70 -0
  280. package/cjs/sync/sync-context.d.ts.map +1 -0
  281. package/cjs/sync/sync-context.js +101 -0
  282. package/cjs/sync/sync-context.js.map +1 -0
  283. package/cjs/sync/sync-manager.d.ts +213 -0
  284. package/cjs/sync/sync-manager.d.ts.map +1 -0
  285. package/cjs/sync/sync-manager.js +689 -0
  286. package/cjs/sync/sync-manager.js.map +1 -0
  287. package/cjs/sync/types.d.ts +289 -0
  288. package/cjs/sync/types.d.ts.map +1 -0
  289. package/cjs/test-migrations/test-enhanced-features.migration.d.ts +15 -0
  290. package/cjs/test-migrations/test-enhanced-features.migration.d.ts.map +1 -0
  291. package/cjs/types.d.ts +371 -0
  292. package/cjs/types.d.ts.map +1 -0
  293. package/cjs/utils/connect-to-database.d.ts +307 -0
  294. package/cjs/utils/connect-to-database.d.ts.map +1 -0
  295. package/cjs/utils/connect-to-database.js +130 -0
  296. package/cjs/utils/connect-to-database.js.map +1 -0
  297. package/cjs/utils/database-writer.utils.d.ts +15 -0
  298. package/cjs/utils/database-writer.utils.d.ts.map +1 -0
  299. package/cjs/utils/database-writer.utils.js +14 -0
  300. package/cjs/utils/database-writer.utils.js.map +1 -0
  301. package/cjs/utils/define-model.js +100 -0
  302. package/cjs/utils/define-model.js.map +1 -0
  303. package/cjs/utils/is-valid-date-value.d.ts +5 -0
  304. package/cjs/utils/is-valid-date-value.d.ts.map +1 -0
  305. package/cjs/utils/is-valid-date-value.js +25 -0
  306. package/cjs/utils/is-valid-date-value.js.map +1 -0
  307. package/cjs/utils/once-connected.d.ts +146 -0
  308. package/cjs/utils/once-connected.d.ts.map +1 -0
  309. package/cjs/utils/once-connected.js +251 -0
  310. package/cjs/utils/once-connected.js.map +1 -0
  311. package/cjs/validation/database-seal-plugins.d.ts +12 -0
  312. package/cjs/validation/database-seal-plugins.d.ts.map +1 -0
  313. package/cjs/validation/database-seal-plugins.js +1 -0
  314. package/cjs/validation/database-seal-plugins.js.map +1 -0
  315. package/cjs/validation/database-writer-validation-error.d.ts +97 -0
  316. package/cjs/validation/database-writer-validation-error.d.ts.map +1 -0
  317. package/cjs/validation/database-writer-validation-error.js +160 -0
  318. package/cjs/validation/database-writer-validation-error.js.map +1 -0
  319. package/cjs/validation/index.d.ts +3 -0
  320. package/cjs/validation/index.d.ts.map +1 -0
  321. package/cjs/validation/mutators/embed-mutator.d.ts +9 -0
  322. package/cjs/validation/mutators/embed-mutator.d.ts.map +1 -0
  323. package/cjs/validation/mutators/embed-mutator.js +33 -0
  324. package/cjs/validation/mutators/embed-mutator.js.map +1 -0
  325. package/cjs/validation/plugins/embed-validator-plugin.d.ts +24 -0
  326. package/cjs/validation/plugins/embed-validator-plugin.d.ts.map +1 -0
  327. package/cjs/validation/plugins/embed-validator-plugin.js +18 -0
  328. package/cjs/validation/plugins/embed-validator-plugin.js.map +1 -0
  329. package/cjs/validation/rules/database-model-rule.d.ts +7 -0
  330. package/cjs/validation/rules/database-model-rule.d.ts.map +1 -0
  331. package/cjs/validation/rules/database-model-rule.js +27 -0
  332. package/cjs/validation/rules/database-model-rule.js.map +1 -0
  333. package/cjs/validation/transformers/embed-model-transformer.d.ts +3 -0
  334. package/cjs/validation/transformers/embed-model-transformer.d.ts.map +1 -0
  335. package/cjs/validation/transformers/embed-model-transformer.js +18 -0
  336. package/cjs/validation/transformers/embed-model-transformer.js.map +1 -0
  337. package/cjs/validation/validators/embed-validator.d.ts +21 -0
  338. package/cjs/validation/validators/embed-validator.d.ts.map +1 -0
  339. package/cjs/validation/validators/embed-validator.js +43 -0
  340. package/cjs/validation/validators/embed-validator.js.map +1 -0
  341. package/cjs/writer/database-writer.d.ts +181 -0
  342. package/cjs/writer/database-writer.d.ts.map +1 -0
  343. package/cjs/writer/database-writer.js +407 -0
  344. package/cjs/writer/database-writer.js.map +1 -0
  345. package/esm/data-source/data-source-registry.d.ts +108 -0
  346. package/esm/data-source/data-source-registry.d.ts.map +1 -0
  347. package/esm/data-source/data-source-registry.js +145 -0
  348. package/esm/data-source/data-source-registry.js.map +1 -0
  349. package/esm/data-source/data-source.d.ts +147 -0
  350. package/esm/data-source/data-source.d.ts.map +1 -0
  351. package/esm/data-source/data-source.js +83 -0
  352. package/esm/data-source/data-source.js.map +1 -0
  353. package/esm/database-dirty-tracker.d.ts +252 -0
  354. package/esm/database-dirty-tracker.d.ts.map +1 -0
  355. package/esm/database-dirty-tracker.js +386 -0
  356. package/esm/database-dirty-tracker.js.map +1 -0
  357. package/esm/drivers/mongodb/mongodb-blueprint.d.ts +30 -0
  358. package/esm/drivers/mongodb/mongodb-blueprint.d.ts.map +1 -0
  359. package/esm/drivers/mongodb/mongodb-blueprint.js +51 -0
  360. package/esm/drivers/mongodb/mongodb-blueprint.js.map +1 -0
  361. package/esm/drivers/mongodb/mongodb-driver.d.ts +325 -0
  362. package/esm/drivers/mongodb/mongodb-driver.d.ts.map +1 -0
  363. package/esm/drivers/mongodb/mongodb-driver.js +838 -0
  364. package/esm/drivers/mongodb/mongodb-driver.js.map +1 -0
  365. package/esm/drivers/mongodb/mongodb-id-generator.d.ts +116 -0
  366. package/esm/drivers/mongodb/mongodb-id-generator.d.ts.map +1 -0
  367. package/esm/drivers/mongodb/mongodb-id-generator.js +149 -0
  368. package/esm/drivers/mongodb/mongodb-id-generator.js.map +1 -0
  369. package/esm/drivers/mongodb/mongodb-migration-driver.d.ts +317 -0
  370. package/esm/drivers/mongodb/mongodb-migration-driver.d.ts.map +1 -0
  371. package/esm/drivers/mongodb/mongodb-migration-driver.js +666 -0
  372. package/esm/drivers/mongodb/mongodb-migration-driver.js.map +1 -0
  373. package/esm/drivers/mongodb/mongodb-query-builder.d.ts +1122 -0
  374. package/esm/drivers/mongodb/mongodb-query-builder.d.ts.map +1 -0
  375. package/esm/drivers/mongodb/mongodb-query-builder.js +1988 -0
  376. package/esm/drivers/mongodb/mongodb-query-builder.js.map +1 -0
  377. package/esm/drivers/mongodb/mongodb-query-operations.d.ts +226 -0
  378. package/esm/drivers/mongodb/mongodb-query-operations.d.ts.map +1 -0
  379. package/esm/drivers/mongodb/mongodb-query-operations.js +270 -0
  380. package/esm/drivers/mongodb/mongodb-query-operations.js.map +1 -0
  381. package/esm/drivers/mongodb/mongodb-query-parser.d.ts +262 -0
  382. package/esm/drivers/mongodb/mongodb-query-parser.d.ts.map +1 -0
  383. package/esm/drivers/mongodb/mongodb-query-parser.js +1351 -0
  384. package/esm/drivers/mongodb/mongodb-query-parser.js.map +1 -0
  385. package/esm/drivers/mongodb/mongodb-sync-adapter.d.ts +79 -0
  386. package/esm/drivers/mongodb/mongodb-sync-adapter.d.ts.map +1 -0
  387. package/esm/drivers/mongodb/mongodb-sync-adapter.js +146 -0
  388. package/esm/drivers/mongodb/mongodb-sync-adapter.js.map +1 -0
  389. package/esm/drivers/mongodb/types.d.ts +43 -0
  390. package/esm/drivers/mongodb/types.d.ts.map +1 -0
  391. package/esm/drivers/postgres/index.d.ts +16 -0
  392. package/esm/drivers/postgres/index.d.ts.map +1 -0
  393. package/esm/drivers/postgres/postgres-blueprint.d.ts +64 -0
  394. package/esm/drivers/postgres/postgres-blueprint.d.ts.map +1 -0
  395. package/esm/drivers/postgres/postgres-blueprint.js +121 -0
  396. package/esm/drivers/postgres/postgres-blueprint.js.map +1 -0
  397. package/esm/drivers/postgres/postgres-dialect.d.ts +136 -0
  398. package/esm/drivers/postgres/postgres-dialect.d.ts.map +1 -0
  399. package/esm/drivers/postgres/postgres-dialect.js +268 -0
  400. package/esm/drivers/postgres/postgres-dialect.js.map +1 -0
  401. package/esm/drivers/postgres/postgres-driver.d.ts +432 -0
  402. package/esm/drivers/postgres/postgres-driver.d.ts.map +1 -0
  403. package/esm/drivers/postgres/postgres-driver.js +1010 -0
  404. package/esm/drivers/postgres/postgres-driver.js.map +1 -0
  405. package/esm/drivers/postgres/postgres-migration-driver.d.ts +397 -0
  406. package/esm/drivers/postgres/postgres-migration-driver.d.ts.map +1 -0
  407. package/esm/drivers/postgres/postgres-migration-driver.js +900 -0
  408. package/esm/drivers/postgres/postgres-migration-driver.js.map +1 -0
  409. package/esm/drivers/postgres/postgres-query-builder.d.ts +254 -0
  410. package/esm/drivers/postgres/postgres-query-builder.d.ts.map +1 -0
  411. package/esm/drivers/postgres/postgres-query-builder.js +933 -0
  412. package/esm/drivers/postgres/postgres-query-builder.js.map +1 -0
  413. package/esm/drivers/postgres/postgres-query-parser.d.ts +328 -0
  414. package/esm/drivers/postgres/postgres-query-parser.d.ts.map +1 -0
  415. package/esm/drivers/postgres/postgres-query-parser.js +868 -0
  416. package/esm/drivers/postgres/postgres-query-parser.js.map +1 -0
  417. package/esm/drivers/postgres/postgres-sql-serializer.d.ts +37 -0
  418. package/esm/drivers/postgres/postgres-sql-serializer.d.ts.map +1 -0
  419. package/esm/drivers/postgres/postgres-sql-serializer.js +400 -0
  420. package/esm/drivers/postgres/postgres-sql-serializer.js.map +1 -0
  421. package/esm/drivers/postgres/postgres-sync-adapter.d.ts +83 -0
  422. package/esm/drivers/postgres/postgres-sync-adapter.d.ts.map +1 -0
  423. package/esm/drivers/postgres/postgres-sync-adapter.js +197 -0
  424. package/esm/drivers/postgres/postgres-sync-adapter.js.map +1 -0
  425. package/esm/drivers/postgres/types.d.ts +144 -0
  426. package/esm/drivers/postgres/types.d.ts.map +1 -0
  427. package/esm/drivers/sql/index.d.ts +10 -0
  428. package/esm/drivers/sql/index.d.ts.map +1 -0
  429. package/esm/drivers/sql/sql-dialect.contract.d.ts +204 -0
  430. package/esm/drivers/sql/sql-dialect.contract.d.ts.map +1 -0
  431. package/esm/drivers/sql/sql-types.d.ts +202 -0
  432. package/esm/drivers/sql/sql-types.d.ts.map +1 -0
  433. package/esm/errors/missing-data-source.error.d.ts +22 -0
  434. package/esm/errors/missing-data-source.error.d.ts.map +1 -0
  435. package/esm/errors/missing-data-source.error.js +29 -0
  436. package/esm/errors/missing-data-source.error.js.map +1 -0
  437. package/esm/errors/transaction-rollback.error.d.ts +20 -0
  438. package/esm/errors/transaction-rollback.error.d.ts.map +1 -0
  439. package/esm/errors/transaction-rollback.error.js +27 -0
  440. package/esm/errors/transaction-rollback.error.js.map +1 -0
  441. package/esm/events/model-events.d.ts +231 -0
  442. package/esm/events/model-events.d.ts.map +1 -0
  443. package/esm/events/model-events.js +259 -0
  444. package/esm/events/model-events.js.map +1 -0
  445. package/esm/expressions/aggregate-expressions.d.ts +215 -0
  446. package/esm/expressions/aggregate-expressions.d.ts.map +1 -0
  447. package/esm/expressions/aggregate-expressions.js +221 -0
  448. package/esm/expressions/aggregate-expressions.js.map +1 -0
  449. package/esm/expressions/index.d.ts +2 -0
  450. package/esm/expressions/index.d.ts.map +1 -0
  451. package/esm/index.d.ts +45 -0
  452. package/esm/index.d.ts.map +1 -0
  453. package/esm/index.js +1 -0
  454. package/esm/index.js.map +1 -0
  455. package/esm/migration/column-builder.d.ts +417 -0
  456. package/esm/migration/column-builder.d.ts.map +1 -0
  457. package/esm/migration/column-builder.js +586 -0
  458. package/esm/migration/column-builder.js.map +1 -0
  459. package/esm/migration/column-helpers.d.ts +275 -0
  460. package/esm/migration/column-helpers.d.ts.map +1 -0
  461. package/esm/migration/column-helpers.js +389 -0
  462. package/esm/migration/column-helpers.js.map +1 -0
  463. package/esm/migration/foreign-key-builder.d.ts +103 -0
  464. package/esm/migration/foreign-key-builder.d.ts.map +1 -0
  465. package/esm/migration/foreign-key-builder.js +121 -0
  466. package/esm/migration/foreign-key-builder.js.map +1 -0
  467. package/esm/migration/index.d.ts +7 -0
  468. package/esm/migration/index.d.ts.map +1 -0
  469. package/esm/migration/migration-runner.d.ts +278 -0
  470. package/esm/migration/migration-runner.d.ts.map +1 -0
  471. package/esm/migration/migration-runner.js +815 -0
  472. package/esm/migration/migration-runner.js.map +1 -0
  473. package/esm/migration/migration.d.ts +1992 -0
  474. package/esm/migration/migration.d.ts.map +1 -0
  475. package/esm/migration/migration.js +2162 -0
  476. package/esm/migration/migration.js.map +1 -0
  477. package/esm/migration/sql-grammar.d.ts +61 -0
  478. package/esm/migration/sql-grammar.d.ts.map +1 -0
  479. package/esm/migration/sql-grammar.js +164 -0
  480. package/esm/migration/sql-grammar.js.map +1 -0
  481. package/esm/migration/sql-serializer.d.ts +22 -0
  482. package/esm/migration/sql-serializer.d.ts.map +1 -0
  483. package/esm/migration/sql-serializer.js +26 -0
  484. package/esm/migration/sql-serializer.js.map +1 -0
  485. package/esm/migration/types.d.ts +155 -0
  486. package/esm/migration/types.d.ts.map +1 -0
  487. package/esm/model/methods/accessor-methods.d.ts +13 -0
  488. package/esm/model/methods/accessor-methods.d.ts.map +1 -0
  489. package/esm/model/methods/accessor-methods.js +51 -0
  490. package/esm/model/methods/accessor-methods.js.map +1 -0
  491. package/esm/model/methods/delete-methods.d.ts +10 -0
  492. package/esm/model/methods/delete-methods.d.ts.map +1 -0
  493. package/esm/model/methods/delete-methods.js +10 -0
  494. package/esm/model/methods/delete-methods.js.map +1 -0
  495. package/esm/model/methods/dirty-methods.d.ts +10 -0
  496. package/esm/model/methods/dirty-methods.d.ts.map +1 -0
  497. package/esm/model/methods/dirty-methods.js +15 -0
  498. package/esm/model/methods/dirty-methods.js.map +1 -0
  499. package/esm/model/methods/hydration-methods.d.ts +10 -0
  500. package/esm/model/methods/hydration-methods.d.ts.map +1 -0
  501. package/esm/model/methods/hydration-methods.js +57 -0
  502. package/esm/model/methods/hydration-methods.js.map +1 -0
  503. package/esm/model/methods/instance-event-methods.d.ts +7 -0
  504. package/esm/model/methods/instance-event-methods.d.ts.map +1 -0
  505. package/esm/model/methods/instance-event-methods.js +15 -0
  506. package/esm/model/methods/instance-event-methods.js.map +1 -0
  507. package/esm/model/methods/meta-methods.d.ts +7 -0
  508. package/esm/model/methods/meta-methods.d.ts.map +1 -0
  509. package/esm/model/methods/meta-methods.js +78 -0
  510. package/esm/model/methods/meta-methods.js.map +1 -0
  511. package/esm/model/methods/query-methods.d.ts +24 -0
  512. package/esm/model/methods/query-methods.d.ts.map +1 -0
  513. package/esm/model/methods/query-methods.js +164 -0
  514. package/esm/model/methods/query-methods.js.map +1 -0
  515. package/esm/model/methods/restore-methods.d.ts +10 -0
  516. package/esm/model/methods/restore-methods.d.ts.map +1 -0
  517. package/esm/model/methods/restore-methods.js +13 -0
  518. package/esm/model/methods/restore-methods.js.map +1 -0
  519. package/esm/model/methods/scope-methods.d.ts +7 -0
  520. package/esm/model/methods/scope-methods.d.ts.map +1 -0
  521. package/esm/model/methods/scope-methods.js +15 -0
  522. package/esm/model/methods/scope-methods.js.map +1 -0
  523. package/esm/model/methods/serialization-methods.d.ts +3 -0
  524. package/esm/model/methods/serialization-methods.d.ts.map +1 -0
  525. package/esm/model/methods/serialization-methods.js +27 -0
  526. package/esm/model/methods/serialization-methods.js.map +1 -0
  527. package/esm/model/methods/static-event-methods.d.ts +9 -0
  528. package/esm/model/methods/static-event-methods.d.ts.map +1 -0
  529. package/esm/model/methods/static-event-methods.js +29 -0
  530. package/esm/model/methods/static-event-methods.js.map +1 -0
  531. package/esm/model/methods/write-methods.d.ts +10 -0
  532. package/esm/model/methods/write-methods.d.ts.map +1 -0
  533. package/esm/model/methods/write-methods.js +52 -0
  534. package/esm/model/methods/write-methods.js.map +1 -0
  535. package/esm/model/model.d.ts +1647 -0
  536. package/esm/model/model.d.ts.map +1 -0
  537. package/esm/model/model.js +1657 -0
  538. package/esm/model/model.js.map +1 -0
  539. package/esm/model/model.types.d.ts +44 -0
  540. package/esm/model/model.types.d.ts.map +1 -0
  541. package/esm/model/register-model.d.ts +81 -0
  542. package/esm/model/register-model.d.ts.map +1 -0
  543. package/esm/model/register-model.js +94 -0
  544. package/esm/model/register-model.js.map +1 -0
  545. package/esm/query-builder/query-builder.d.ts +556 -0
  546. package/esm/query-builder/query-builder.d.ts.map +1 -0
  547. package/esm/query-builder/query-builder.js +1070 -0
  548. package/esm/query-builder/query-builder.js.map +1 -0
  549. package/esm/relations/helpers.d.ts +156 -0
  550. package/esm/relations/helpers.d.ts.map +1 -0
  551. package/esm/relations/helpers.js +202 -0
  552. package/esm/relations/helpers.js.map +1 -0
  553. package/esm/relations/index.d.ts +35 -0
  554. package/esm/relations/index.d.ts.map +1 -0
  555. package/esm/relations/pivot-operations.d.ts +160 -0
  556. package/esm/relations/pivot-operations.d.ts.map +1 -0
  557. package/esm/relations/pivot-operations.js +293 -0
  558. package/esm/relations/pivot-operations.js.map +1 -0
  559. package/esm/relations/relation-hydrator.d.ts +68 -0
  560. package/esm/relations/relation-hydrator.d.ts.map +1 -0
  561. package/esm/relations/relation-hydrator.js +81 -0
  562. package/esm/relations/relation-hydrator.js.map +1 -0
  563. package/esm/relations/relation-loader.d.ts +194 -0
  564. package/esm/relations/relation-loader.d.ts.map +1 -0
  565. package/esm/relations/relation-loader.js +466 -0
  566. package/esm/relations/relation-loader.js.map +1 -0
  567. package/esm/relations/types.d.ts +306 -0
  568. package/esm/relations/types.d.ts.map +1 -0
  569. package/esm/remover/database-remover.d.ts +100 -0
  570. package/esm/remover/database-remover.d.ts.map +1 -0
  571. package/esm/remover/database-remover.js +214 -0
  572. package/esm/remover/database-remover.js.map +1 -0
  573. package/esm/restorer/database-restorer.d.ts +131 -0
  574. package/esm/restorer/database-restorer.d.ts.map +1 -0
  575. package/esm/restorer/database-restorer.js +434 -0
  576. package/esm/restorer/database-restorer.js.map +1 -0
  577. package/esm/sql-database-dirty-tracker.d.ts +13 -0
  578. package/esm/sql-database-dirty-tracker.d.ts.map +1 -0
  579. package/esm/sql-database-dirty-tracker.js +14 -0
  580. package/esm/sql-database-dirty-tracker.js.map +1 -0
  581. package/esm/sync/index.d.ts +12 -0
  582. package/esm/sync/index.d.ts.map +1 -0
  583. package/esm/sync/model-events.d.ts +62 -0
  584. package/esm/sync/model-events.d.ts.map +1 -0
  585. package/esm/sync/model-events.js +49 -0
  586. package/esm/sync/model-events.js.map +1 -0
  587. package/esm/sync/model-sync-operation.d.ts +163 -0
  588. package/esm/sync/model-sync-operation.d.ts.map +1 -0
  589. package/esm/sync/model-sync-operation.js +292 -0
  590. package/esm/sync/model-sync-operation.js.map +1 -0
  591. package/esm/sync/model-sync.d.ts +130 -0
  592. package/esm/sync/model-sync.d.ts.map +1 -0
  593. package/esm/sync/model-sync.js +178 -0
  594. package/esm/sync/model-sync.js.map +1 -0
  595. package/esm/sync/sync-context.d.ts +70 -0
  596. package/esm/sync/sync-context.d.ts.map +1 -0
  597. package/esm/sync/sync-context.js +101 -0
  598. package/esm/sync/sync-context.js.map +1 -0
  599. package/esm/sync/sync-manager.d.ts +213 -0
  600. package/esm/sync/sync-manager.d.ts.map +1 -0
  601. package/esm/sync/sync-manager.js +689 -0
  602. package/esm/sync/sync-manager.js.map +1 -0
  603. package/esm/sync/types.d.ts +289 -0
  604. package/esm/sync/types.d.ts.map +1 -0
  605. package/esm/test-migrations/test-enhanced-features.migration.d.ts +15 -0
  606. package/esm/test-migrations/test-enhanced-features.migration.d.ts.map +1 -0
  607. package/esm/types.d.ts +371 -0
  608. package/esm/types.d.ts.map +1 -0
  609. package/esm/utils/connect-to-database.d.ts +307 -0
  610. package/esm/utils/connect-to-database.d.ts.map +1 -0
  611. package/esm/utils/connect-to-database.js +130 -0
  612. package/esm/utils/connect-to-database.js.map +1 -0
  613. package/esm/utils/database-writer.utils.d.ts +15 -0
  614. package/esm/utils/database-writer.utils.d.ts.map +1 -0
  615. package/esm/utils/database-writer.utils.js +14 -0
  616. package/esm/utils/database-writer.utils.js.map +1 -0
  617. package/esm/utils/define-model.js +100 -0
  618. package/esm/utils/define-model.js.map +1 -0
  619. package/esm/utils/is-valid-date-value.d.ts +5 -0
  620. package/esm/utils/is-valid-date-value.d.ts.map +1 -0
  621. package/esm/utils/is-valid-date-value.js +25 -0
  622. package/esm/utils/is-valid-date-value.js.map +1 -0
  623. package/esm/utils/once-connected.d.ts +146 -0
  624. package/esm/utils/once-connected.d.ts.map +1 -0
  625. package/esm/utils/once-connected.js +251 -0
  626. package/esm/utils/once-connected.js.map +1 -0
  627. package/esm/validation/database-seal-plugins.d.ts +12 -0
  628. package/esm/validation/database-seal-plugins.d.ts.map +1 -0
  629. package/esm/validation/database-seal-plugins.js +1 -0
  630. package/esm/validation/database-seal-plugins.js.map +1 -0
  631. package/esm/validation/database-writer-validation-error.d.ts +97 -0
  632. package/esm/validation/database-writer-validation-error.d.ts.map +1 -0
  633. package/esm/validation/database-writer-validation-error.js +160 -0
  634. package/esm/validation/database-writer-validation-error.js.map +1 -0
  635. package/esm/validation/index.d.ts +3 -0
  636. package/esm/validation/index.d.ts.map +1 -0
  637. package/esm/validation/mutators/embed-mutator.d.ts +9 -0
  638. package/esm/validation/mutators/embed-mutator.d.ts.map +1 -0
  639. package/esm/validation/mutators/embed-mutator.js +33 -0
  640. package/esm/validation/mutators/embed-mutator.js.map +1 -0
  641. package/esm/validation/plugins/embed-validator-plugin.d.ts +24 -0
  642. package/esm/validation/plugins/embed-validator-plugin.d.ts.map +1 -0
  643. package/esm/validation/plugins/embed-validator-plugin.js +18 -0
  644. package/esm/validation/plugins/embed-validator-plugin.js.map +1 -0
  645. package/esm/validation/rules/database-model-rule.d.ts +7 -0
  646. package/esm/validation/rules/database-model-rule.d.ts.map +1 -0
  647. package/esm/validation/rules/database-model-rule.js +27 -0
  648. package/esm/validation/rules/database-model-rule.js.map +1 -0
  649. package/esm/validation/transformers/embed-model-transformer.d.ts +3 -0
  650. package/esm/validation/transformers/embed-model-transformer.d.ts.map +1 -0
  651. package/esm/validation/transformers/embed-model-transformer.js +18 -0
  652. package/esm/validation/transformers/embed-model-transformer.js.map +1 -0
  653. package/esm/validation/validators/embed-validator.d.ts +21 -0
  654. package/esm/validation/validators/embed-validator.d.ts.map +1 -0
  655. package/esm/validation/validators/embed-validator.js +43 -0
  656. package/esm/validation/validators/embed-validator.js.map +1 -0
  657. package/esm/writer/database-writer.d.ts +181 -0
  658. package/esm/writer/database-writer.d.ts.map +1 -0
  659. package/esm/writer/database-writer.js +407 -0
  660. package/esm/writer/database-writer.js.map +1 -0
  661. package/package.json +4 -4
@@ -0,0 +1,407 @@
1
+ 'use strict';var events=require('@mongez/events'),seal=require('@warlock.js/seal'),modelEvents=require('../sync/model-events.js'),databaseWriterValidationError=require('../validation/database-writer-validation-error.js');require('../validation/database-seal-plugins.js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var events__default=/*#__PURE__*/_interopDefault(events);/**
2
+ * Database writer service that orchestrates model persistence.
3
+ *
4
+ * Handles the complete save pipeline:
5
+ * 1. Check for changes (skip if no changes and not new)
6
+ * 2. Emit `saving` event (for data enrichment)
7
+ * 3. Emit `validating` event
8
+ * 4. Validate and cast data via @warlock.js/seal schema
9
+ * 5. Emit `validated` event
10
+ * 6. Generate ID (for new NoSQL records)
11
+ * 7. Emit `creating`/`updating` events
12
+ * 8. Execute insert or update via driver
13
+ * 9. Merge returned data into model
14
+ * 10. Reset dirty tracker and update `isNew` flag
15
+ * 11. Emit `saved` and `created`/`updated` events
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const user = new User({ name: "Alice", email: "alice@example.com" });
20
+ * const writer = new DatabaseWriter(user);
21
+ * await writer.save();
22
+ *
23
+ * console.log(user.get("id")); // 1 (auto-generated)
24
+ * console.log(user.get("_id")); // ObjectId("...")
25
+ *
26
+ * // Update existing record
27
+ * user.set("name", "Alice Smith");
28
+ * await writer.save();
29
+ * // Only updates the "name" field (partial update)
30
+ *
31
+ * // Silent save (no events)
32
+ * await writer.save({ skipEvents: true });
33
+ * ```
34
+ */
35
+ class DatabaseWriter {
36
+ /** The model instance being persisted */
37
+ model;
38
+ /** Model constructor reference */
39
+ ctor;
40
+ /** Data source containing driver and ID generator */
41
+ dataSource;
42
+ /** Database driver for executing queries */
43
+ driver;
44
+ /** Table/collection name */
45
+ table;
46
+ /** Primary key field name */
47
+ primaryKey;
48
+ /** Validation schema (if defined) */
49
+ schema;
50
+ /** Strict mode configuration */
51
+ strictMode;
52
+ /**
53
+ * Create a new writer instance for a model.
54
+ *
55
+ * @param model - The model instance to persist
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const user = new User({ name: "Alice" });
60
+ * const writer = new DatabaseWriter(user);
61
+ * await writer.save();
62
+ * ```
63
+ */
64
+ constructor(model) {
65
+ this.model = model;
66
+ this.ctor = model.constructor;
67
+ this.dataSource = this.ctor.getDataSource();
68
+ this.driver = this.dataSource.driver;
69
+ this.table = this.ctor.table;
70
+ this.primaryKey = this.ctor.primaryKey;
71
+ this.schema = this.ctor.schema;
72
+ this.strictMode = this.ctor.strictMode;
73
+ }
74
+ /**
75
+ * Save the model instance to the database.
76
+ *
77
+ * @param options - Save options
78
+ * @returns Result with success status, document, and metadata
79
+ * @throws {ValidationError} If validation fails
80
+ */
81
+ async save(options = {}) {
82
+ const isInsert = this.model.isNew;
83
+ // 1. Check if model has changes (skip if no changes and not new)
84
+ if (!isInsert && !this.model.hasChanges()) {
85
+ return {
86
+ success: true,
87
+ document: this.model.data,
88
+ isNew: false,
89
+ modifiedCount: 0,
90
+ };
91
+ }
92
+ // 2. Emit saving event (before validation for data enrichment)
93
+ if (!options.skipEvents) {
94
+ await this.model.emitEvent("saving", {
95
+ isInsert,
96
+ options,
97
+ mode: isInsert ? "insert" : "update",
98
+ });
99
+ }
100
+ // 3. Validate and cast data
101
+ await this.validateAndCast(isInsert, options);
102
+ // 4. Execute insert or update
103
+ let result;
104
+ if (isInsert) {
105
+ result = await this.performInsert(options);
106
+ }
107
+ else {
108
+ result = await this.performUpdate(options);
109
+ }
110
+ // 5. Reset dirty tracker and update isNew flag
111
+ const changedFields = isInsert ? [] : this.model.getDirtyColumns();
112
+ this.model.dirtyTracker.reset();
113
+ this.model.isNew = false;
114
+ // 6. Emit post-save events
115
+ if (!options.skipEvents) {
116
+ await this.model.emitEvent("saved");
117
+ await this.model.emitEvent(isInsert ? "created" : "updated");
118
+ }
119
+ // 7. Trigger sync operations (fire-and-forget, non-blocking)
120
+ if (!options.skipSync && !isInsert) {
121
+ void this.triggerSync(changedFields);
122
+ }
123
+ return {
124
+ success: true,
125
+ document: this.model.data,
126
+ isNew: isInsert,
127
+ modifiedCount: isInsert ? undefined : result.modifiedCount,
128
+ };
129
+ }
130
+ /**
131
+ * Validate and cast model data using the schema.
132
+ *
133
+ * Updates the model's data in-place with validated/casted values.
134
+ *
135
+ * @param isInsert - Whether this is an insert operation
136
+ * @param options - Save options
137
+ * @throws {ValidationError} If validation fails
138
+ * @private
139
+ */
140
+ async validateAndCast(isInsert, options) {
141
+ // Emit validating event
142
+ if (!options.skipEvents) {
143
+ await this.model.emitEvent("validating", {
144
+ isInsert,
145
+ options,
146
+ mode: isInsert ? "insert" : "update",
147
+ });
148
+ }
149
+ // Skip validation if requested or no schema defined
150
+ if (options.skipValidation || !this.schema) {
151
+ return;
152
+ }
153
+ // Clone schema for partial data (updates only)
154
+ const validationSchema = isInsert
155
+ ? this.schema.clone()
156
+ : this.schema.clone(Object.keys(this.model.data)).extend({
157
+ id: seal.v.scalar().optional(),
158
+ _id: seal.v.any().optional(),
159
+ [this.ctor.createdAtColumn]: seal.v.date().optional(),
160
+ [this.ctor.updatedAtColumn]: seal.v.date().optional(),
161
+ });
162
+ // Apply strict mode
163
+ if (this.strictMode === "strip") {
164
+ validationSchema.stripUnknown();
165
+ }
166
+ else if (this.strictMode === "fail") {
167
+ validationSchema.allowUnknown(false);
168
+ }
169
+ else if (this.strictMode === "allow") {
170
+ validationSchema.allowUnknown(true);
171
+ }
172
+ // Run validation
173
+ const result = await seal.v.validate(validationSchema, this.model.data, {
174
+ context: {
175
+ model: this.model,
176
+ },
177
+ ...seal.getSealConfig(),
178
+ });
179
+ if (!result.isValid) {
180
+ console.trace(result.errors);
181
+ const error = new databaseWriterValidationError.DatabaseWriterValidationError(`[${this.model.constructor.name} Model] ${isInsert ? "Insert" : "Update"} Validation failed`, result.errors);
182
+ if (!options.skipEvents) {
183
+ await this.model.emitEvent("validated", { result, error });
184
+ }
185
+ throw error;
186
+ }
187
+ // Update model data with validated/casted data
188
+ this.model.replaceData(result.data);
189
+ // Emit validated event
190
+ if (!options.skipEvents) {
191
+ await this.model.emitEvent("validated", { result });
192
+ }
193
+ }
194
+ /**
195
+ * Perform an insert operation.
196
+ *
197
+ * @param options - Save options
198
+ * @returns Insert result
199
+ * @private
200
+ */
201
+ async performInsert(options) {
202
+ // Generate ID if needed (NoSQL only)
203
+ await this.generateNextId();
204
+ // Get data to insert (already validated and casted)
205
+ const dataToInsert = this.model.data;
206
+ // Add createdAt and updatedAt to the data (using resolved column names)
207
+ // The column names are already resolved through the hierarchy:
208
+ // Model static property > Database config > Driver defaults > undefined
209
+ const createdAtColumn = this.ctor.createdAtColumn;
210
+ if (createdAtColumn) {
211
+ dataToInsert[createdAtColumn] = new Date();
212
+ }
213
+ const updatedAtColumn = this.ctor.updatedAtColumn;
214
+ if (updatedAtColumn) {
215
+ dataToInsert[updatedAtColumn] = new Date();
216
+ }
217
+ // Emit creating event
218
+ if (!options.skipEvents) {
219
+ await this.model.emitEvent("creating");
220
+ }
221
+ // INSERT: use full validated data
222
+ const result = await this.driver.insert(this.table, dataToInsert);
223
+ // Merge returned data (e.g., generated _id, timestamps)
224
+ // Note: We use merge here because the result might not include all fields
225
+ // (e.g., our generated 'id' field), and we don't want to lose them
226
+ this.model.merge(result.document);
227
+ // Reset dirty tracker immediately after merge to prevent
228
+ // database-generated fields (like _id) from being marked as dirty
229
+ this.model.dirtyTracker.reset();
230
+ return result;
231
+ }
232
+ /**
233
+ * Perform an update operation.
234
+ *
235
+ * @param options - Save options
236
+ * @returns Update result
237
+ * @private
238
+ */
239
+ async performUpdate(options) {
240
+ // Emit updating event
241
+ if (!options.skipEvents) {
242
+ await this.model.emitEvent("updating");
243
+ }
244
+ // Update the updatedAt timestamp (using resolved column name)
245
+ const updatedAtColumn = this.ctor.updatedAtColumn;
246
+ if (updatedAtColumn) {
247
+ this.model.set(updatedAtColumn, new Date());
248
+ }
249
+ if (options.replace) {
250
+ const document = await this.driver.replace(this.table, {
251
+ [this.primaryKey]: this.model.get(this.primaryKey),
252
+ }, this.model.data);
253
+ if (document) {
254
+ this.model.replaceData(document);
255
+ }
256
+ return { modifiedCount: document ? 1 : 0 };
257
+ }
258
+ // Build operations from dirty tracker
259
+ const operations = this.buildUpdateOperations();
260
+ // Build filter using primary key
261
+ const filter = { [this.primaryKey]: this.model.get(this.primaryKey) };
262
+ // Execute update with operations
263
+ return await this.driver.update(this.table, filter, operations);
264
+ }
265
+ /**
266
+ * Generate ID for the model if auto-generation is enabled.
267
+ *
268
+ * @private
269
+ */
270
+ async generateNextId() {
271
+ if (!this.ctor.autoGenerateId || this.model.get("id")) {
272
+ return;
273
+ }
274
+ const idGenerator = this.dataSource.idGenerator;
275
+ if (!idGenerator) {
276
+ return;
277
+ }
278
+ // Resolve ID generation options from model configuration
279
+ const initialId = this.resolveInitialId();
280
+ const incrementIdBy = this.resolveIncrementBy();
281
+ const id = await idGenerator.generateNextId({
282
+ table: this.table,
283
+ initialId,
284
+ incrementIdBy,
285
+ });
286
+ this.model.set("id", id);
287
+ }
288
+ /**
289
+ * Build update operations from the model's dirty tracker.
290
+ *
291
+ * Handles both modified fields ($set) and removed fields ($unset).
292
+ *
293
+ * @returns Update operations for the driver
294
+ * @private
295
+ *
296
+ * @example
297
+ * ```typescript
298
+ * // Model with changes
299
+ * user.set("name", "Alice");
300
+ * user.unset("tempField");
301
+ *
302
+ * const operations = this.buildUpdateOperations();
303
+ * // {
304
+ * // $set: { name: "Alice" },
305
+ * // $unset: { tempField: 1 }
306
+ * // }
307
+ * ```
308
+ */
309
+ buildUpdateOperations() {
310
+ const operations = {};
311
+ // Get dirty columns (modified fields)
312
+ const dirtyColumns = this.model.getDirtyColumns();
313
+ if (dirtyColumns.length > 0) {
314
+ operations.$set = {};
315
+ for (const column of dirtyColumns) {
316
+ const value = this.model.get(column);
317
+ if (value === undefined)
318
+ continue;
319
+ operations.$set[column] = this.model.get(column);
320
+ }
321
+ }
322
+ // Get removed columns
323
+ const removedColumns = this.model.getRemovedColumns();
324
+ if (removedColumns.length > 0) {
325
+ operations.$unset = {};
326
+ for (const column of removedColumns) {
327
+ operations.$unset[column] = 1;
328
+ }
329
+ }
330
+ return operations;
331
+ }
332
+ /**
333
+ * Resolve the initial ID from model configuration.
334
+ *
335
+ * Priority:
336
+ * 1. Model.initialId (explicit value)
337
+ * 2. Model.randomInitialId (random or function)
338
+ * 3. Default: 1
339
+ *
340
+ * @returns The initial ID value
341
+ * @private
342
+ */
343
+ resolveInitialId() {
344
+ if (this.ctor.initialId) {
345
+ return this.ctor.initialId;
346
+ }
347
+ if (this.ctor.randomInitialId) {
348
+ return typeof this.ctor.randomInitialId === "function"
349
+ ? this.ctor.randomInitialId()
350
+ : this.randomInt(10000, 499999);
351
+ }
352
+ return 1; // Default initial ID
353
+ }
354
+ /**
355
+ * Resolve the increment value from model configuration.
356
+ *
357
+ * Priority:
358
+ * 1. Model.incrementIdBy (explicit value)
359
+ * 2. Model.randomIncrement (random or function)
360
+ * 3. Default: 1
361
+ *
362
+ * @returns The increment value
363
+ * @private
364
+ */
365
+ resolveIncrementBy() {
366
+ if (this.ctor.incrementIdBy) {
367
+ return this.ctor.incrementIdBy;
368
+ }
369
+ if (this.ctor.randomIncrement) {
370
+ return typeof this.ctor.randomIncrement === "function"
371
+ ? this.ctor.randomIncrement()
372
+ : this.randomInt(1, 10);
373
+ }
374
+ return 1; // Default increment
375
+ }
376
+ /**
377
+ * Generate a random integer between min and max (inclusive).
378
+ *
379
+ * @param min - Minimum value
380
+ * @param max - Maximum value
381
+ * @returns Random integer
382
+ * @private
383
+ */
384
+ randomInt(min, max) {
385
+ return Math.floor(Math.random() * (max - min + 1)) + min;
386
+ }
387
+ /**
388
+ * Trigger sync operations after successful save.
389
+ * Only syncs on updates (not creates) unless sync config specifies embedOnCreate.
390
+ *
391
+ * @param changedFields - Fields that were changed (for filtering)
392
+ * @private
393
+ */
394
+ /**
395
+ * Trigger sync operations after successful save.
396
+ *
397
+ * Emits a model.updated event that ModelSyncOperation listens to.
398
+ * The sync is handled by registered sync operations, not directly here.
399
+ *
400
+ * @param changedFields - Fields that were changed (for filtering)
401
+ * @private
402
+ */
403
+ async triggerSync(changedFields) {
404
+ // Emit model.updated event - ModelSyncOperation listens to these
405
+ await events__default.default.triggerAll(modelEvents.getModelUpdatedEvent(this.ctor), this.model, changedFields);
406
+ }
407
+ }exports.DatabaseWriter=DatabaseWriter;//# sourceMappingURL=database-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-writer.js","sources":["../../src/writer/database-writer.ts"],"sourcesContent":[null],"names":["v","getSealConfig","DatabaseWriterValidationError","events","getModelUpdatedEvent"],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { DataSource, type DataSourceOptions } from "./data-source";
2
+ /**
3
+ * Event types emitted by the DataSourceRegistry.
4
+ *
5
+ * - `registered`: Emitted when any data source is registered
6
+ * - `default-registered`: Emitted when a default data source is registered
7
+ * - `connected`: Emitted when a data source's driver connects
8
+ * - `disconnected`: Emitted when a data source's driver disconnects
9
+ */
10
+ export type DataSourceRegistryEvent = "registered" | "default-registered" | "connected" | "disconnected";
11
+ /**
12
+ * Callback signature for registry events.
13
+ */
14
+ export type DataSourceRegistryListener = (dataSource: DataSource) => void;
15
+ /** Maintains registry of named data sources. */
16
+ declare class DataSourceRegistry {
17
+ private readonly sources;
18
+ private defaultSource?;
19
+ private readonly events;
20
+ /**
21
+ * Register a new data source definition.
22
+ *
23
+ * Sets up event forwarding from the driver to the registry, allowing
24
+ * centralized listening for connection state changes.
25
+ *
26
+ * **Emits:**
27
+ * - `registered` - When the data source is registered
28
+ * - `default-registered` - If this becomes the default data source
29
+ * - `connected` - When the driver connects (forwarded from driver)
30
+ * - `disconnected` - When the driver disconnects (forwarded from driver)
31
+ *
32
+ * @param options - Data source configuration
33
+ * @returns The registered data source instance
34
+ */
35
+ register(options: DataSourceOptions): DataSource;
36
+ /**
37
+ * Clean up all data sources and default one
38
+ */
39
+ clear(): void;
40
+ /**
41
+ * Listen for data source registry events.
42
+ *
43
+ * @param event - The event to listen for
44
+ * @param listener - Callback to execute when event fires
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * // Listen for registration
49
+ * dataSourceRegistry.on("registered", (ds) => {
50
+ * console.log(`Data source "${ds.name}" registered`);
51
+ * console.log(`Driver: ${ds.driver.name}`); // e.g., "mongodb"
52
+ * });
53
+ *
54
+ * // Listen for default data source
55
+ * dataSourceRegistry.on("default-registered", (ds) => {
56
+ * console.log(`Default data source set to "${ds.name}"`);
57
+ * });
58
+ *
59
+ * // Listen for connection events (forwarded from drivers)
60
+ * dataSourceRegistry.on("connected", (ds) => {
61
+ * console.log(`${ds.driver.name} data source "${ds.name}" connected`);
62
+ * });
63
+ *
64
+ * dataSourceRegistry.on("disconnected", (ds) => {
65
+ * console.log(`${ds.driver.name} data source "${ds.name}" disconnected`);
66
+ * });
67
+ * ```
68
+ */
69
+ on(event: DataSourceRegistryEvent, listener: DataSourceRegistryListener): void;
70
+ /**
71
+ * Listen for a data source registration event once.
72
+ *
73
+ * The listener is automatically removed after being called once.
74
+ *
75
+ * @param event - The event to listen for
76
+ * @param listener - Callback to execute when event fires
77
+ */
78
+ once(event: DataSourceRegistryEvent, listener: DataSourceRegistryListener): void;
79
+ /**
80
+ * Remove a listener for a data source registration event.
81
+ *
82
+ * @param event - The event to stop listening for
83
+ * @param listener - The listener to remove
84
+ */
85
+ off(event: DataSourceRegistryEvent, listener: DataSourceRegistryListener): void;
86
+ /** Retrieve a data source either by name or the default one. */
87
+ get(name?: string): DataSource;
88
+ /**
89
+ * Get all registered data sources.
90
+ *
91
+ * Useful for operations that need to iterate over all sources,
92
+ * such as shutting down all connections.
93
+ *
94
+ * @returns Array of all registered data sources
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * // Shutdown all data sources
99
+ * for (const dataSource of dataSourceRegistry.getAllDataSources()) {
100
+ * await dataSource.driver.disconnect();
101
+ * }
102
+ * ```
103
+ */
104
+ getAllDataSources(): DataSource[];
105
+ }
106
+ export declare const dataSourceRegistry: DataSourceRegistry;
107
+ export {};
108
+ //# sourceMappingURL=data-source-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-source-registry.d.ts","sourceRoot":"","sources":["../../src/data-source/data-source-registry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEnE;;;;;;;GAOG;AACH,MAAM,MAAM,uBAAuB,GAC/B,YAAY,GACZ,oBAAoB,GACpB,WAAW,GACX,cAAc,CAAC;AAEnB;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;AAE1E,gDAAgD;AAChD,cAAM,kBAAkB;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAE7C;;;;;;;;;;;;;;OAcG;IACI,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU;IA4BvD;;OAEG;IACI,KAAK;IAKZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACI,EAAE,CAAC,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,0BAA0B,GAAG,IAAI;IAIrF;;;;;;;OAOG;IACI,IAAI,CAAC,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,0BAA0B,GAAG,IAAI;IAIvF;;;;;OAKG;IACI,GAAG,CAAC,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,0BAA0B,GAAG,IAAI;IAItF,gEAAgE;IACzD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU;IAmCrC;;;;;;;;;;;;;;;OAeG;IACI,iBAAiB,IAAI,UAAU,EAAE;CAGzC;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -0,0 +1,145 @@
1
+ import {EventEmitter}from'node:events';import {databaseDataSourceContext}from'../context/database-data-source-context.js';import {MissingDataSourceError}from'../errors/missing-data-source.error.js';import {DataSource}from'./data-source.js';/** Maintains registry of named data sources. */
2
+ class DataSourceRegistry {
3
+ sources = new Map();
4
+ defaultSource;
5
+ events = new EventEmitter();
6
+ /**
7
+ * Register a new data source definition.
8
+ *
9
+ * Sets up event forwarding from the driver to the registry, allowing
10
+ * centralized listening for connection state changes.
11
+ *
12
+ * **Emits:**
13
+ * - `registered` - When the data source is registered
14
+ * - `default-registered` - If this becomes the default data source
15
+ * - `connected` - When the driver connects (forwarded from driver)
16
+ * - `disconnected` - When the driver disconnects (forwarded from driver)
17
+ *
18
+ * @param options - Data source configuration
19
+ * @returns The registered data source instance
20
+ */
21
+ register(options) {
22
+ const source = new DataSource(options);
23
+ this.sources.set(source.name, source);
24
+ const isNewDefault = source.isDefault || !this.defaultSource;
25
+ if (isNewDefault) {
26
+ this.defaultSource = source;
27
+ }
28
+ // Emit registration events
29
+ this.events.emit("registered", source);
30
+ if (isNewDefault) {
31
+ this.events.emit("default-registered", source);
32
+ }
33
+ source.driver.on("connected", () => {
34
+ this.events.emit("connected", source);
35
+ });
36
+ source.driver.on("disconnected", () => {
37
+ this.events.emit("disconnected", source);
38
+ });
39
+ return source;
40
+ }
41
+ /**
42
+ * Clean up all data sources and default one
43
+ */
44
+ clear() {
45
+ this.defaultSource = undefined;
46
+ this.sources.clear();
47
+ }
48
+ /**
49
+ * Listen for data source registry events.
50
+ *
51
+ * @param event - The event to listen for
52
+ * @param listener - Callback to execute when event fires
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * // Listen for registration
57
+ * dataSourceRegistry.on("registered", (ds) => {
58
+ * console.log(`Data source "${ds.name}" registered`);
59
+ * console.log(`Driver: ${ds.driver.name}`); // e.g., "mongodb"
60
+ * });
61
+ *
62
+ * // Listen for default data source
63
+ * dataSourceRegistry.on("default-registered", (ds) => {
64
+ * console.log(`Default data source set to "${ds.name}"`);
65
+ * });
66
+ *
67
+ * // Listen for connection events (forwarded from drivers)
68
+ * dataSourceRegistry.on("connected", (ds) => {
69
+ * console.log(`${ds.driver.name} data source "${ds.name}" connected`);
70
+ * });
71
+ *
72
+ * dataSourceRegistry.on("disconnected", (ds) => {
73
+ * console.log(`${ds.driver.name} data source "${ds.name}" disconnected`);
74
+ * });
75
+ * ```
76
+ */
77
+ on(event, listener) {
78
+ this.events.on(event, listener);
79
+ }
80
+ /**
81
+ * Listen for a data source registration event once.
82
+ *
83
+ * The listener is automatically removed after being called once.
84
+ *
85
+ * @param event - The event to listen for
86
+ * @param listener - Callback to execute when event fires
87
+ */
88
+ once(event, listener) {
89
+ this.events.once(event, listener);
90
+ }
91
+ /**
92
+ * Remove a listener for a data source registration event.
93
+ *
94
+ * @param event - The event to stop listening for
95
+ * @param listener - The listener to remove
96
+ */
97
+ off(event, listener) {
98
+ this.events.off(event, listener);
99
+ }
100
+ /** Retrieve a data source either by name or the default one. */
101
+ get(name) {
102
+ const contextSource = name == null ? databaseDataSourceContext.getDataSource() : null;
103
+ if (contextSource) {
104
+ if (contextSource instanceof DataSource) {
105
+ return contextSource;
106
+ }
107
+ const override = this.sources.get(contextSource);
108
+ if (!override) {
109
+ throw new MissingDataSourceError(`Data source "${contextSource}" is not registered (context override).`, contextSource);
110
+ }
111
+ return override;
112
+ }
113
+ if (name != null) {
114
+ const source = this.sources.get(name);
115
+ if (!source) {
116
+ throw new MissingDataSourceError(`Data source "${name}" is not registered.`, name);
117
+ }
118
+ return source;
119
+ }
120
+ if (!this.defaultSource) {
121
+ throw new MissingDataSourceError("No default data source registered.");
122
+ }
123
+ return this.defaultSource;
124
+ }
125
+ /**
126
+ * Get all registered data sources.
127
+ *
128
+ * Useful for operations that need to iterate over all sources,
129
+ * such as shutting down all connections.
130
+ *
131
+ * @returns Array of all registered data sources
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * // Shutdown all data sources
136
+ * for (const dataSource of dataSourceRegistry.getAllDataSources()) {
137
+ * await dataSource.driver.disconnect();
138
+ * }
139
+ * ```
140
+ */
141
+ getAllDataSources() {
142
+ return Array.from(this.sources.values());
143
+ }
144
+ }
145
+ const dataSourceRegistry = new DataSourceRegistry();export{dataSourceRegistry};//# sourceMappingURL=data-source-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-source-registry.js","sources":["../../src/data-source/data-source-registry.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}