@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,1828 @@
1
+ import { databaseTransactionContext } from "../../context/database-transaction-context.mjs";
2
+ import { dataSourceRegistry } from "../../data-source/data-source-registry.mjs";
3
+ import { QueryBuilder } from "../../query-builder/query-builder.mjs";
4
+ import { MongoQueryOperations } from "./mongodb-query-operations.mjs";
5
+ import { MongoQueryParser } from "./mongodb-query-parser.mjs";
6
+ import { get } from "@mongez/reinforcements";
7
+
8
+ //#region ../../@warlock.js/cascade/src/drivers/mongodb/mongodb-query-builder.ts
9
+ /**
10
+ * MongoDB-specific query builder implementation using aggregation pipeline.
11
+ */
12
+ var MongoQueryBuilder = class MongoQueryBuilder extends QueryBuilder {
13
+ table;
14
+ /**
15
+ * Ordered list of operations to be converted to MongoDB aggregation pipeline.
16
+ * Public to allow parser access. Uses MongoDB's own Operation type.
17
+ *
18
+ * NOTE: This shadows the base `operations: Op[]` field intentionally — the Mongo
19
+ * Operation type carries an extra `stage` discriminator used by the pipeline assembler.
20
+ */
21
+ operations = [];
22
+ /**
23
+ * Data source instance
24
+ */
25
+ dataSource;
26
+ /**
27
+ * Lazy-loaded operations helper for constructing pipeline operations.
28
+ */
29
+ _operationsHelper;
30
+ hydrateCallback;
31
+ fetchingCallback;
32
+ hydratingCallback;
33
+ fetchedCallback;
34
+ /**
35
+ * Create a new query builder for the given collection.
36
+ * @param collection - The MongoDB collection to query
37
+ */
38
+ constructor(table, dataSource) {
39
+ super();
40
+ this.table = table;
41
+ this.dataSource = dataSource || dataSourceRegistry.get();
42
+ }
43
+ /**
44
+ * Gets the operations helper instance, creating it if needed.
45
+ * @returns The operations helper instance
46
+ */
47
+ get operationsHelper() {
48
+ if (!this._operationsHelper) this._operationsHelper = new MongoQueryOperations(this.operations);
49
+ return this._operationsHelper;
50
+ }
51
+ /**
52
+ * Get collection instance
53
+ */
54
+ get collection() {
55
+ return this.dataSource.driver.database.collection(this.table);
56
+ }
57
+ /**
58
+ * Add hydrate callback function
59
+ */
60
+ hydrate(callback) {
61
+ this.hydrateCallback = callback;
62
+ return this;
63
+ }
64
+ /**
65
+ * Register a callback to be invoked before query execution
66
+ * @returns Unsubscribe function to remove the callback
67
+ */
68
+ onFetching(callback) {
69
+ this.fetchingCallback = callback;
70
+ return () => {
71
+ this.fetchingCallback = void 0;
72
+ };
73
+ }
74
+ /**
75
+ * Register a callback to be invoked after records are fetched but before hydration
76
+ * @returns Unsubscribe function to remove the callback
77
+ */
78
+ onHydrating(callback) {
79
+ this.hydratingCallback = callback;
80
+ return () => {
81
+ this.hydratingCallback = void 0;
82
+ };
83
+ }
84
+ /**
85
+ * Register a callback to be invoked after records are fetched and hydrated
86
+ * @returns Unsubscribe function to remove the callback
87
+ */
88
+ onFetched(callback) {
89
+ this.fetchedCallback = callback;
90
+ return () => {
91
+ this.fetchedCallback = void 0;
92
+ };
93
+ }
94
+ /**
95
+ * Disable one or more global scopes for this query
96
+ */
97
+ withoutGlobalScope(...scopeNames) {
98
+ scopeNames.forEach((name) => this.disabledGlobalScopes.add(name));
99
+ return this;
100
+ }
101
+ /**
102
+ * Disable all global scopes for this query
103
+ */
104
+ withoutGlobalScopes() {
105
+ if (this.pendingGlobalScopes) this.pendingGlobalScopes.forEach((_, name) => {
106
+ this.disabledGlobalScopes.add(name);
107
+ });
108
+ return this;
109
+ }
110
+ /**
111
+ * Apply a local scope to this query
112
+ */
113
+ scope(scopeName, ...args) {
114
+ if (!this.availableLocalScopes) throw new Error(`No local scopes available`);
115
+ const scopeCallback = this.availableLocalScopes.get(scopeName);
116
+ if (!scopeCallback) throw new Error(`Local scope "${scopeName}" not found`);
117
+ scopeCallback(this, ...args);
118
+ return this;
119
+ }
120
+ /**
121
+ * Apply pending global scopes before query execution
122
+ */
123
+ applyPendingScopes() {
124
+ if (!this.pendingGlobalScopes || this.scopesApplied) return;
125
+ const beforeOps = [];
126
+ const afterOps = [];
127
+ for (const [name, { callback, timing }] of this.pendingGlobalScopes) {
128
+ if (this.disabledGlobalScopes.has(name)) continue;
129
+ const tempBuilder = new MongoQueryBuilder(this.table, this.dataSource);
130
+ callback(tempBuilder);
131
+ if (timing === "before") beforeOps.push(...tempBuilder.operations);
132
+ else afterOps.push(...tempBuilder.operations);
133
+ }
134
+ this.operations = [
135
+ ...beforeOps,
136
+ ...this.operations,
137
+ ...afterOps
138
+ ];
139
+ this.scopesApplied = true;
140
+ }
141
+ where(...args) {
142
+ this.addWhereClause("where", args);
143
+ return this;
144
+ }
145
+ orWhere(...args) {
146
+ this.addWhereClause("orWhere", args);
147
+ return this;
148
+ }
149
+ /**
150
+ * Adds a raw WHERE clause using MongoDB's native query syntax.
151
+ * @param expression - Raw MongoDB expression
152
+ * @param bindings - Optional parameter bindings for string expressions
153
+ */
154
+ whereRaw(expression, bindings) {
155
+ return this.addRawWhere("whereRaw", expression, bindings);
156
+ }
157
+ /**
158
+ * Adds a raw OR WHERE clause using MongoDB's native query syntax.
159
+ * @param expression - Raw MongoDB expression
160
+ * @param bindings - Optional parameter bindings
161
+ */
162
+ orWhereRaw(expression, bindings) {
163
+ return this.addRawWhere("orWhereRaw", expression, bindings);
164
+ }
165
+ /**
166
+ * Adds a WHERE clause comparing two columns/fields directly.
167
+ * @param first - The first field name
168
+ * @param operator - The comparison operator
169
+ * @param second - The second field name
170
+ */
171
+ whereColumn(first, operator, second) {
172
+ this.operationsHelper.addMatchOperation("whereColumn", {
173
+ first,
174
+ operator,
175
+ second
176
+ });
177
+ return this;
178
+ }
179
+ /**
180
+ * Adds an OR WHERE clause comparing two columns/fields directly.
181
+ * @param first - The first field name
182
+ * @param operator - The comparison operator
183
+ * @param second - The second field name
184
+ */
185
+ orWhereColumn(first, operator, second) {
186
+ this.operationsHelper.addMatchOperation("orWhereColumn", {
187
+ first,
188
+ operator,
189
+ second
190
+ });
191
+ return this;
192
+ }
193
+ /**
194
+ * Adds multiple column comparison clauses at once.
195
+ * @param comparisons - Array of tuples [leftField, operator, rightField]
196
+ */
197
+ whereColumns(comparisons) {
198
+ for (const [left, operator, right] of comparisons) this.whereColumn(left, operator, right);
199
+ return this;
200
+ }
201
+ /**
202
+ * Filters documents where a field's value falls between two other fields.
203
+ * @param field - The field to check
204
+ * @param lowerColumn - The field defining the lower bound
205
+ * @param upperColumn - The field defining the upper bound
206
+ */
207
+ whereBetweenColumns(field, lowerColumn, upperColumn) {
208
+ this.operationsHelper.addMatchOperation("whereBetweenColumns", {
209
+ field,
210
+ lowerColumn,
211
+ upperColumn
212
+ });
213
+ return this;
214
+ }
215
+ /**
216
+ * Filters documents where a date field matches the given date (ignoring time).
217
+ * @param field - The date field name
218
+ * @param value - The date to match
219
+ */
220
+ whereDate(field, value) {
221
+ this.operationsHelper.addMatchOperation("whereDate", {
222
+ field,
223
+ value
224
+ });
225
+ return this;
226
+ }
227
+ /**
228
+ * Alias for `whereDate()`. Filters by exact date match (ignoring time).
229
+ * @param field - The date field name
230
+ * @param value - The date to match
231
+ */
232
+ whereDateEquals(field, value) {
233
+ this.operationsHelper.addMatchOperation("whereDateEquals", {
234
+ field,
235
+ value
236
+ });
237
+ return this;
238
+ }
239
+ /**
240
+ * Filters documents where a date field is before the given date.
241
+ * @param field - The date field name
242
+ * @param value - The cutoff date
243
+ */
244
+ whereDateBefore(field, value) {
245
+ this.operationsHelper.addMatchOperation("whereDateBefore", {
246
+ field,
247
+ value
248
+ });
249
+ return this;
250
+ }
251
+ /**
252
+ * Filters documents where a date field is after the given date.
253
+ * @param field - The date field name
254
+ * @param value - The cutoff date
255
+ */
256
+ whereDateAfter(field, value) {
257
+ this.operationsHelper.addMatchOperation("whereDateAfter", {
258
+ field,
259
+ value
260
+ });
261
+ return this;
262
+ }
263
+ /**
264
+ * Filters documents where a time field matches the given time (HH:MM:SS format).
265
+ * @param field - The time/datetime field name
266
+ * @param value - The time string in HH:MM:SS format
267
+ */
268
+ whereTime(field, value) {
269
+ this.operationsHelper.addMatchOperation("whereTime", {
270
+ field,
271
+ value
272
+ });
273
+ return this;
274
+ }
275
+ /**
276
+ * Filters documents where the day of the month matches the given value (1-31).
277
+ * @param field - The date field name
278
+ * @param value - The day of the month
279
+ */
280
+ whereDay(field, value) {
281
+ this.operationsHelper.addMatchOperation("whereDay", {
282
+ field,
283
+ value
284
+ });
285
+ return this;
286
+ }
287
+ /**
288
+ * Filters documents where the month matches the given value (1-12).
289
+ * @param field - The date field name
290
+ * @param value - The month number
291
+ */
292
+ whereMonth(field, value) {
293
+ this.operationsHelper.addMatchOperation("whereMonth", {
294
+ field,
295
+ value
296
+ });
297
+ return this;
298
+ }
299
+ /**
300
+ * Filters documents where the year matches the given value.
301
+ * @param field - The date field name
302
+ * @param value - The year
303
+ */
304
+ whereYear(field, value) {
305
+ this.operationsHelper.addMatchOperation("whereYear", {
306
+ field,
307
+ value
308
+ });
309
+ return this;
310
+ }
311
+ /**
312
+ * Filters documents where a JSON field contains the specified value.
313
+ * @param path - The JSON path to check
314
+ * @param value - The value to search for
315
+ */
316
+ whereJsonContains(path, value) {
317
+ this.operationsHelper.addMatchOperation("whereJsonContains", {
318
+ path,
319
+ value
320
+ });
321
+ return this;
322
+ }
323
+ /**
324
+ * Filters documents where a JSON field does NOT contain the specified value.
325
+ * @param path - The JSON path to check
326
+ * @param value - The value to exclude
327
+ */
328
+ whereJsonDoesntContain(path, value) {
329
+ this.operationsHelper.addMatchOperation("whereJsonDoesntContain", {
330
+ path,
331
+ value
332
+ });
333
+ return this;
334
+ }
335
+ /**
336
+ * Filters documents where a JSON field contains a specific key.
337
+ * @param path - The JSON path to check for key existence
338
+ */
339
+ whereJsonContainsKey(path) {
340
+ this.operationsHelper.addMatchOperation("whereJsonContainsKey", { path });
341
+ return this;
342
+ }
343
+ /**
344
+ * Filters documents where a JSON array or string has a specific length.
345
+ * @param path - The JSON path to check
346
+ * @param operator - The comparison operator
347
+ * @param value - The length value to compare against
348
+ */
349
+ whereJsonLength(path, operator, value) {
350
+ this.operationsHelper.addMatchOperation("whereJsonLength", {
351
+ path,
352
+ operator,
353
+ value
354
+ });
355
+ return this;
356
+ }
357
+ /**
358
+ * Filters documents where a JSON field is an array.
359
+ * @param path - The JSON path to check
360
+ */
361
+ whereJsonIsArray(path) {
362
+ this.operationsHelper.addMatchOperation("whereJsonIsArray", { path });
363
+ return this;
364
+ }
365
+ /**
366
+ * Filters documents where a JSON field is an object.
367
+ * @param path - The JSON path to check
368
+ */
369
+ whereJsonIsObject(path) {
370
+ this.operationsHelper.addMatchOperation("whereJsonIsObject", { path });
371
+ return this;
372
+ }
373
+ /**
374
+ * Filters documents where an array field has a specific length.
375
+ * @param field - The array field name
376
+ * @param operator - The comparison operator
377
+ * @param value - The length value to compare against
378
+ */
379
+ whereArrayLength(field, operator, value) {
380
+ this.operationsHelper.addMatchOperation("whereArrayLength", {
381
+ field,
382
+ operator,
383
+ value
384
+ });
385
+ return this;
386
+ }
387
+ /**
388
+ * Filters documents by ID (convenience method for `where("id", value)`).
389
+ * @param value - The ID value to match
390
+ */
391
+ whereId(value) {
392
+ return this.where("id", value);
393
+ }
394
+ /**
395
+ * Filters documents by multiple IDs (convenience method for `whereIn("id", values)`).
396
+ * @param values - Array of ID values to match
397
+ */
398
+ whereIds(values) {
399
+ return this.whereIn("id", values);
400
+ }
401
+ /**
402
+ * Filters documents by UUID (convenience method for `where("uuid", value)`).
403
+ * @param value - The UUID string to match
404
+ */
405
+ whereUuid(value) {
406
+ return this.where("uuid", value);
407
+ }
408
+ /**
409
+ * Filters documents by ULID (convenience method for `where("ulid", value)`).
410
+ * @param value - The ULID string to match
411
+ */
412
+ whereUlid(value) {
413
+ return this.where("ulid", value);
414
+ }
415
+ /**
416
+ * Performs full-text search on one or more fields.
417
+ * @param fields - Field name or array of field names to search
418
+ * @param query - The search query string
419
+ */
420
+ whereFullText(fields, query) {
421
+ const filters = typeof fields === "string" ? { fields: [fields] } : { fields: fields ?? [] };
422
+ this.operationsHelper.addMatchOperation("whereFullText", {
423
+ fields: filters.fields,
424
+ query
425
+ });
426
+ return this;
427
+ }
428
+ /**
429
+ * Performs full-text search with OR logic.
430
+ * @param fields - Field name or array of field names to search
431
+ * @param query - The search query string
432
+ */
433
+ orWhereFullText(fields, query) {
434
+ const filters = typeof fields === "string" ? { fields: [fields] } : { fields: fields ?? [] };
435
+ this.operationsHelper.addMatchOperation("orWhereFullText", {
436
+ fields: filters.fields,
437
+ query
438
+ });
439
+ return this;
440
+ }
441
+ /**
442
+ * Alias for `whereFullText()` with a single field.
443
+ * @param field - The field name to search
444
+ * @param query - The search query string
445
+ */
446
+ whereSearch(field, query) {
447
+ return this.whereFullText(field, query);
448
+ }
449
+ /**
450
+ * Negates a set of conditions using a callback.
451
+ * @param callback - Callback function defining conditions to negate
452
+ */
453
+ whereNot(callback) {
454
+ this.operationsHelper.addMatchOperation("where:not", { callback });
455
+ return this;
456
+ }
457
+ /**
458
+ * Negates a set of conditions with OR logic.
459
+ * @param callback - Callback function defining conditions to negate
460
+ */
461
+ orWhereNot(callback) {
462
+ this.operationsHelper.addMatchOperation("orWhere:not", { callback });
463
+ return this;
464
+ }
465
+ /**
466
+ * Filters documents where a field's value matches any value in the given array.
467
+ * @param field - The field name to check
468
+ * @param values - Array of values to match against
469
+ */
470
+ whereIn(field, values) {
471
+ this.operationsHelper.addMatchOperation("whereIn", {
472
+ field,
473
+ values
474
+ });
475
+ return this;
476
+ }
477
+ /**
478
+ * Filters documents where a field's value does NOT match any value in the array.
479
+ * @param field - The field name to check
480
+ * @param values - Array of values to exclude
481
+ */
482
+ whereNotIn(field, values) {
483
+ this.operationsHelper.addMatchOperation("whereNotIn", {
484
+ field,
485
+ values
486
+ });
487
+ return this;
488
+ }
489
+ /**
490
+ * Filters documents where a field's value is null or undefined.
491
+ * @param field - The field name to check
492
+ */
493
+ whereNull(field) {
494
+ this.operationsHelper.addMatchOperation("whereNull", { field });
495
+ return this;
496
+ }
497
+ /**
498
+ * Filters documents where a field's value is NOT null or undefined.
499
+ * @param field - The field name to check
500
+ */
501
+ whereNotNull(field) {
502
+ this.operationsHelper.addMatchOperation("whereNotNull", { field });
503
+ return this;
504
+ }
505
+ /**
506
+ * Filters documents where a field's value falls within the given range (inclusive).
507
+ * @param field - The field name to check
508
+ * @param range - Tuple of [min, max] values
509
+ */
510
+ whereBetween(field, range) {
511
+ this.operationsHelper.addMatchOperation("whereBetween", {
512
+ field,
513
+ range
514
+ });
515
+ return this;
516
+ }
517
+ /**
518
+ * Filters documents where a field's value is NOT within the given range.
519
+ * @param field - The field name to check
520
+ * @param range - Tuple of [min, max] values to exclude
521
+ */
522
+ whereNotBetween(field, range) {
523
+ this.operationsHelper.addMatchOperation("whereNotBetween", {
524
+ field,
525
+ range
526
+ });
527
+ return this;
528
+ }
529
+ /**
530
+ * Filters documents where a field matches the given pattern (case-insensitive).
531
+ * @param field - The field name to search
532
+ * @param pattern - The pattern to match
533
+ */
534
+ whereLike(field, pattern) {
535
+ this.operationsHelper.addMatchOperation("whereLike", {
536
+ field,
537
+ pattern
538
+ });
539
+ return this;
540
+ }
541
+ /**
542
+ * Filters documents where a field does NOT match the given pattern.
543
+ * @param field - The field name to search
544
+ * @param pattern - The pattern to exclude
545
+ */
546
+ whereNotLike(field, pattern) {
547
+ this.operationsHelper.addMatchOperation("whereNotLike", {
548
+ field,
549
+ pattern
550
+ });
551
+ return this;
552
+ }
553
+ /**
554
+ * Filters documents where a field's value starts with the given prefix.
555
+ * @param field - The field name to check
556
+ * @param value - The prefix to match
557
+ */
558
+ whereStartsWith(field, value) {
559
+ this.operationsHelper.addMatchOperation("whereStartsWith", {
560
+ field,
561
+ value
562
+ });
563
+ return this;
564
+ }
565
+ /**
566
+ * Filters documents where a field's value does NOT start with the given prefix.
567
+ * @param field - The field name to check
568
+ * @param value - The prefix to exclude
569
+ */
570
+ whereNotStartsWith(field, value) {
571
+ this.operationsHelper.addMatchOperation("whereNotStartsWith", {
572
+ field,
573
+ value
574
+ });
575
+ return this;
576
+ }
577
+ /**
578
+ * Filters documents where a field's value ends with the given suffix.
579
+ * @param field - The field name to check
580
+ * @param value - The suffix to match
581
+ */
582
+ whereEndsWith(field, value) {
583
+ this.operationsHelper.addMatchOperation("whereEndsWith", {
584
+ field,
585
+ value
586
+ });
587
+ return this;
588
+ }
589
+ /**
590
+ * Filters documents where a field's value does NOT end with the given suffix.
591
+ * @param field - The field name to check
592
+ * @param value - The suffix to exclude
593
+ */
594
+ whereNotEndsWith(field, value) {
595
+ this.operationsHelper.addMatchOperation("whereNotEndsWith", {
596
+ field,
597
+ value
598
+ });
599
+ return this;
600
+ }
601
+ /**
602
+ * Filters documents where a date field falls within the given date range.
603
+ * @param field - The date field name
604
+ * @param range - Tuple of [startDate, endDate]
605
+ */
606
+ whereDateBetween(field, range) {
607
+ this.operationsHelper.addMatchOperation("whereDateBetween", {
608
+ field,
609
+ range
610
+ });
611
+ return this;
612
+ }
613
+ /**
614
+ * Filters documents where a date field is NOT within the given date range.
615
+ * @param field - The date field name
616
+ * @param range - Tuple of [startDate, endDate] to exclude
617
+ */
618
+ whereDateNotBetween(field, range) {
619
+ this.operationsHelper.addMatchOperation("whereDateNotBetween", {
620
+ field,
621
+ range
622
+ });
623
+ return this;
624
+ }
625
+ whereExists(param) {
626
+ if (typeof param === "function") {
627
+ this.operationsHelper.addMatchOperation("where:exists", { callback: param });
628
+ return this;
629
+ }
630
+ this.operationsHelper.addMatchOperation("whereExists", { field: param });
631
+ return this;
632
+ }
633
+ whereNotExists(param) {
634
+ if (typeof param === "function") {
635
+ this.operationsHelper.addMatchOperation("where:notExists", { callback: param });
636
+ return this;
637
+ }
638
+ this.operationsHelper.addMatchOperation("whereNotExists", { field: param });
639
+ return this;
640
+ }
641
+ whereSize(field, ...args) {
642
+ if (args.length === 1) this.operationsHelper.addMatchOperation("whereSize", {
643
+ field,
644
+ operator: "=",
645
+ size: args[0]
646
+ });
647
+ else this.operationsHelper.addMatchOperation("whereSize", {
648
+ field,
649
+ operator: args[0],
650
+ size: args[1]
651
+ });
652
+ return this;
653
+ }
654
+ /**
655
+ * Performs a full-text search on the specified fields.
656
+ * @param query - The search query string
657
+ * @param filters - Optional additional filter conditions
658
+ */
659
+ textSearch(query, filters) {
660
+ this.operationsHelper.addMatchOperation("textSearch", {
661
+ query,
662
+ filters
663
+ });
664
+ return this;
665
+ }
666
+ /**
667
+ * Filters documents where an array field contains the given value.
668
+ * @param field - The array field name
669
+ * @param value - The value to search for in the array
670
+ * @param key - Optional key to check within array objects
671
+ */
672
+ whereArrayContains(field, value, key) {
673
+ this.operationsHelper.addMatchOperation("whereArrayContains", {
674
+ field,
675
+ value,
676
+ key
677
+ });
678
+ return this;
679
+ }
680
+ /**
681
+ * Filters documents where an array field does NOT contain the given value.
682
+ * @param field - The array field name
683
+ * @param value - The value to exclude from the array
684
+ * @param key - Optional key to check within array objects
685
+ */
686
+ whereArrayNotContains(field, value, key) {
687
+ this.operationsHelper.addMatchOperation("whereArrayNotContains", {
688
+ field,
689
+ value,
690
+ key
691
+ });
692
+ return this;
693
+ }
694
+ /**
695
+ * Filters documents where an array field contains the value OR is empty.
696
+ * @param field - The array field name
697
+ * @param value - The value to search for
698
+ * @param key - Optional key to check within array objects
699
+ */
700
+ whereArrayHasOrEmpty(field, value, key) {
701
+ this.operationsHelper.addMatchOperation("whereArrayHasOrEmpty", {
702
+ field,
703
+ value,
704
+ key
705
+ });
706
+ return this;
707
+ }
708
+ /**
709
+ * Filters documents where an array field does NOT contain the value AND is not empty.
710
+ * @param field - The array field name
711
+ * @param value - The value to exclude
712
+ * @param key - Optional key to check within array objects
713
+ */
714
+ whereArrayNotHaveOrEmpty(field, value, key) {
715
+ this.operationsHelper.addMatchOperation("whereArrayNotHaveOrEmpty", {
716
+ field,
717
+ value,
718
+ key
719
+ });
720
+ return this;
721
+ }
722
+ /**
723
+ * Internal helper for processing where clause arguments.
724
+ * @param prefix - The operation prefix
725
+ * @param args - The arguments passed to where/orWhere
726
+ */
727
+ addWhereClause(prefix, args) {
728
+ if (args.length === 1) if (typeof args[0] === "function") this.operationsHelper.addMatchOperation(`${prefix}:callback`, args[0]);
729
+ else this.operationsHelper.addMatchOperation(`${prefix}:object`, args[0]);
730
+ else if (args.length === 2) this.operationsHelper.addMatchOperation(prefix, {
731
+ field: args[0],
732
+ operator: "=",
733
+ value: args[1]
734
+ });
735
+ else if (args.length === 3) this.operationsHelper.addMatchOperation(prefix, {
736
+ field: args[0],
737
+ operator: args[1],
738
+ value: args[2]
739
+ });
740
+ }
741
+ /**
742
+ * Internal helper for adding raw where clauses.
743
+ * @param type - The operation type
744
+ * @param expression - The raw expression in MongoDB query language
745
+ * @param bindings - Optional bindings for the expression
746
+ */
747
+ addRawWhere(type, expression, bindings) {
748
+ this.operationsHelper.addMatchOperation(type, {
749
+ expression,
750
+ bindings
751
+ });
752
+ return this;
753
+ }
754
+ /**
755
+ * Normalizes select field arguments into a structured format.
756
+ * @param args - The arguments to normalize
757
+ * @returns Normalized selection object with fields and aliases
758
+ */
759
+ normalizeSelectFields(args) {
760
+ if (args.length === 1) {
761
+ const arg = args[0];
762
+ if (typeof arg === "object" && !Array.isArray(arg)) return { projection: arg };
763
+ if (Array.isArray(arg)) return { fields: arg };
764
+ if (typeof arg === "string") return { fields: [arg] };
765
+ }
766
+ return { fields: args.filter((arg) => typeof arg === "string") };
767
+ }
768
+ select(...args) {
769
+ const normalized = this.normalizeSelectFields(args);
770
+ this.operationsHelper.addProjectOperation("select", normalized);
771
+ return this;
772
+ }
773
+ /**
774
+ * Selects a field with an alias.
775
+ * @param field - The field to select
776
+ * @param alias - The alias name for the field
777
+ * @returns The query builder instance
778
+ */
779
+ selectAs(field, alias) {
780
+ return this.select({ [field]: alias });
781
+ }
782
+ /**
783
+ * Adds a computed field using a raw MongoDB expression.
784
+ * @param expression - The raw MongoDB expression
785
+ * @param bindings - Optional parameter bindings for string expressions
786
+ */
787
+ selectRaw(expression, bindings) {
788
+ this.operationsHelper.addProjectOperation("selectRaw", {
789
+ expression,
790
+ bindings
791
+ });
792
+ return this;
793
+ }
794
+ /**
795
+ * Adds multiple computed fields using raw MongoDB expressions.
796
+ * @param definitions - Array of field definitions with alias, expression, and optional bindings
797
+ */
798
+ selectRawMany(definitions) {
799
+ for (const definition of definitions) this.selectRaw({ [definition.alias]: definition.expression }, definition.bindings);
800
+ return this;
801
+ }
802
+ /**
803
+ * Adds a subquery as a computed field.
804
+ * @param expression - The subquery expression
805
+ * @param alias - The alias for the computed field
806
+ */
807
+ selectSub(expression, alias) {
808
+ this.operationsHelper.addProjectOperation("selectSub", {
809
+ expression,
810
+ alias
811
+ });
812
+ return this;
813
+ }
814
+ /**
815
+ * Adds an additional subquery field to existing selections.
816
+ * @param expression - The subquery expression
817
+ * @param alias - The alias for the computed field
818
+ */
819
+ addSelectSub(expression, alias) {
820
+ this.operationsHelper.addProjectOperation("addSelectSub", {
821
+ expression,
822
+ alias
823
+ });
824
+ return this;
825
+ }
826
+ /**
827
+ * Adds an aggregate value as a computed field.
828
+ * @param field - The field to aggregate
829
+ * @param aggregate - The aggregate function to apply
830
+ * @param alias - The alias for the computed field
831
+ */
832
+ selectAggregate(field, aggregate, alias) {
833
+ this.operationsHelper.addProjectOperation("selectAggregate", {
834
+ field,
835
+ aggregate,
836
+ alias
837
+ });
838
+ return this;
839
+ }
840
+ /**
841
+ * Adds a boolean field indicating whether a related document exists.
842
+ * @param field - The field to check for existence
843
+ * @param alias - The alias for the boolean field
844
+ */
845
+ selectExists(field, alias) {
846
+ this.operationsHelper.addProjectOperation("selectExists", {
847
+ field,
848
+ alias
849
+ });
850
+ return this;
851
+ }
852
+ /**
853
+ * Adds a count field for a related collection.
854
+ * @param field - The field to count
855
+ * @param alias - The alias for the count field
856
+ */
857
+ selectCount(field, alias) {
858
+ this.operationsHelper.addProjectOperation("selectCount", {
859
+ field,
860
+ alias
861
+ });
862
+ return this;
863
+ }
864
+ /**
865
+ * Adds a CASE-like conditional field using multiple conditions.
866
+ * @param cases - Array of when/then pairs
867
+ * @param otherwise - Default value if no conditions match
868
+ * @param alias - The alias for the computed field
869
+ */
870
+ selectCase(cases, otherwise, alias) {
871
+ this.operationsHelper.addProjectOperation("selectCase", {
872
+ cases,
873
+ otherwise,
874
+ alias
875
+ });
876
+ return this;
877
+ }
878
+ /**
879
+ * Adds a simple conditional field (if/else).
880
+ * @param condition - The condition to evaluate
881
+ * @param thenValue - Value if condition is true
882
+ * @param elseValue - Value if condition is false
883
+ * @param alias - The alias for the computed field
884
+ */
885
+ selectWhen(condition, thenValue, elseValue, alias) {
886
+ this.operationsHelper.addProjectOperation("selectWhen", {
887
+ condition,
888
+ thenValue,
889
+ elseValue,
890
+ alias
891
+ });
892
+ return this;
893
+ }
894
+ /**
895
+ * Allows direct manipulation of the MongoDB projection object.
896
+ * @param callback - Function that receives and modifies the projection object
897
+ */
898
+ selectDriverProjection(callback) {
899
+ this.operationsHelper.addProjectOperation("selectDriverProjection", { callback });
900
+ return this;
901
+ }
902
+ /**
903
+ * Extracts a JSON field from a document.
904
+ * @param path - The JSON path to extract
905
+ * @param alias - Optional alias for the extracted field
906
+ */
907
+ selectJson(path, alias) {
908
+ this.operationsHelper.addProjectOperation("selectJson", {
909
+ path,
910
+ alias
911
+ });
912
+ return this;
913
+ }
914
+ /**
915
+ * Extracts a JSON field using a raw MongoDB expression.
916
+ * @param path - The JSON path
917
+ * @param expression - The raw expression for extraction
918
+ * @param alias - The alias for the extracted field
919
+ */
920
+ selectJsonRaw(path, expression, alias) {
921
+ this.operationsHelper.addProjectOperation("selectJsonRaw", {
922
+ path,
923
+ expression,
924
+ alias
925
+ });
926
+ return this;
927
+ }
928
+ /**
929
+ * Excludes a JSON path from the results.
930
+ * @param path - The JSON path to exclude
931
+ */
932
+ deselectJson(path) {
933
+ this.operationsHelper.addProjectOperation("deselectJson", { path });
934
+ return this;
935
+ }
936
+ /**
937
+ * Concatenates multiple fields into a single string field.
938
+ * @param fields - Array of fields or expressions to concatenate
939
+ * @param alias - The alias for the concatenated field
940
+ */
941
+ selectConcat(fields, alias) {
942
+ this.operationsHelper.addProjectOperation("selectConcat", {
943
+ fields,
944
+ alias
945
+ });
946
+ return this;
947
+ }
948
+ /**
949
+ * Returns the first non-null value from a list of fields.
950
+ * @param fields - Array of fields to check
951
+ * @param alias - The alias for the coalesced field
952
+ */
953
+ selectCoalesce(fields, alias) {
954
+ this.operationsHelper.addProjectOperation("selectCoalesce", {
955
+ fields,
956
+ alias
957
+ });
958
+ return this;
959
+ }
960
+ /**
961
+ * Adds window function operations to the query.
962
+ * @param spec - The window function specification
963
+ */
964
+ selectWindow(spec) {
965
+ this.operationsHelper.addOperation("$setWindowFields", "selectWindow", { spec }, false);
966
+ return this;
967
+ }
968
+ deselect(...args) {
969
+ const fields = this.normalizeSelectFields(args);
970
+ this.operationsHelper.addProjectOperation("deselect", { fields });
971
+ return this;
972
+ }
973
+ /**
974
+ * Returns only distinct values for the specified fields.
975
+ * @param fields - Optional field names to use for distinctness
976
+ */
977
+ distinctValues(fields) {
978
+ this.operationsHelper.addGroupOperation("distinct", { fields }, false);
979
+ return this;
980
+ }
981
+ addSelect(...args) {
982
+ const fields = this.normalizeSelectFields(args);
983
+ this.operationsHelper.addProjectOperation("addSelect", { fields });
984
+ return this;
985
+ }
986
+ /**
987
+ * Removes all field selection restrictions.
988
+ */
989
+ clearSelect() {
990
+ this.operations = this.operations.filter((op) => op.stage !== "$project");
991
+ return this;
992
+ }
993
+ /**
994
+ * Alias for `clearSelect()`. Removes all field restrictions.
995
+ */
996
+ selectAll() {
997
+ return this.clearSelect();
998
+ }
999
+ /**
1000
+ * Alias for `clearSelect()`. Resets to default field selection.
1001
+ */
1002
+ selectDefault() {
1003
+ return this.clearSelect();
1004
+ }
1005
+ orderBy(fieldOrFields, direction = "asc") {
1006
+ if (typeof fieldOrFields === "string") this.operationsHelper.addSortOperation("orderBy", {
1007
+ field: fieldOrFields,
1008
+ direction
1009
+ });
1010
+ else for (const [field, dir] of Object.entries(fieldOrFields)) this.operationsHelper.addSortOperation("orderBy", {
1011
+ field,
1012
+ direction: dir
1013
+ });
1014
+ return this;
1015
+ }
1016
+ /**
1017
+ * Orders the query results by a field in descending order.
1018
+ * @param field - The field name to sort by
1019
+ */
1020
+ orderByDesc(field) {
1021
+ return this.orderBy(field, "desc");
1022
+ }
1023
+ /**
1024
+ * Orders the query results using a raw MongoDB sort expression.
1025
+ * @param expression - The raw MongoDB sort expression
1026
+ * @param bindings - Optional parameter bindings
1027
+ */
1028
+ orderByRaw(expression, bindings) {
1029
+ this.operationsHelper.addSortOperation("orderByRaw", {
1030
+ expression,
1031
+ bindings
1032
+ });
1033
+ return this;
1034
+ }
1035
+ /**
1036
+ * Orders the query results randomly.
1037
+ */
1038
+ orderByRandom(limit = 1e3) {
1039
+ this.operationsHelper.addSortOperation("orderByRandom", { limit }, false);
1040
+ return this;
1041
+ }
1042
+ /**
1043
+ * Orders results by a date field in descending order (newest first).
1044
+ * @param column - The date column to sort by
1045
+ */
1046
+ latest(column = "createdAt") {
1047
+ return this.orderBy(column, "desc").get();
1048
+ }
1049
+ /**
1050
+ * Orders results by a date field in ascending order (oldest first).
1051
+ * @param column - The date column to sort by
1052
+ */
1053
+ oldest(column = "createdAt") {
1054
+ return this.orderBy(column, "asc");
1055
+ }
1056
+ /**
1057
+ * Limits the number of documents returned by the query.
1058
+ * @param value - The maximum number of documents to return
1059
+ */
1060
+ limit(value) {
1061
+ this.operationsHelper.addOperation("$limit", "limit", { value }, false);
1062
+ return this;
1063
+ }
1064
+ /**
1065
+ * Skips a specified number of documents in the query results.
1066
+ * @param value - The number of documents to skip
1067
+ */
1068
+ skip(value) {
1069
+ this.operationsHelper.addOperation("$skip", "skip", { value }, false);
1070
+ return this;
1071
+ }
1072
+ /**
1073
+ * Alias for `skip()`. Skips a specified number of documents.
1074
+ * @param value - The number of documents to skip
1075
+ */
1076
+ offset(value) {
1077
+ return this.skip(value);
1078
+ }
1079
+ /**
1080
+ * Alias for `limit()`. Limits the number of documents returned.
1081
+ * @param value - The maximum number of documents to return
1082
+ */
1083
+ take(value) {
1084
+ return this.limit(value);
1085
+ }
1086
+ /**
1087
+ * Applies cursor-based filtering for pagination.
1088
+ * @param after - Cursor value for forward pagination
1089
+ * @param before - Cursor value for backward pagination
1090
+ */
1091
+ cursor(after, before) {
1092
+ this.operationsHelper.addMatchOperation("cursor", {
1093
+ after,
1094
+ before
1095
+ });
1096
+ return this;
1097
+ }
1098
+ groupBy(fields, aggregates) {
1099
+ if (aggregates) this.operationsHelper.addGroupOperation("groupByWithAggregates", {
1100
+ fields,
1101
+ aggregates
1102
+ }, false);
1103
+ else this.operationsHelper.addGroupOperation("groupBy", { fields }, false);
1104
+ return this;
1105
+ }
1106
+ /**
1107
+ * Groups documents using a raw MongoDB expression.
1108
+ * @param expression - The raw grouping expression
1109
+ * @param bindings - Optional parameter bindings
1110
+ */
1111
+ groupByRaw(expression, bindings) {
1112
+ this.operationsHelper.addGroupOperation("groupByRaw", {
1113
+ expression,
1114
+ bindings
1115
+ }, false);
1116
+ return this;
1117
+ }
1118
+ having(...args) {
1119
+ if (args.length === 1) this.operationsHelper.addMatchOperation("having:condition", args[0], false);
1120
+ else if (args.length === 2) this.operationsHelper.addMatchOperation("having", {
1121
+ field: args[0],
1122
+ operator: "=",
1123
+ value: args[1]
1124
+ }, false);
1125
+ else this.operationsHelper.addMatchOperation("having", {
1126
+ field: args[0],
1127
+ operator: args[1],
1128
+ value: args[2]
1129
+ }, false);
1130
+ return this;
1131
+ }
1132
+ /**
1133
+ * Filters grouped results using a raw MongoDB expression.
1134
+ * @param expression - The raw having expression
1135
+ * @param bindings - Optional parameter bindings
1136
+ */
1137
+ havingRaw(expression, bindings) {
1138
+ this.operationsHelper.addMatchOperation("havingRaw", {
1139
+ expression,
1140
+ bindings
1141
+ }, false);
1142
+ return this;
1143
+ }
1144
+ join(tableOrOptions, localField, foreignField) {
1145
+ const options = typeof tableOrOptions === "string" ? {
1146
+ table: tableOrOptions,
1147
+ localField,
1148
+ foreignField,
1149
+ type: "left"
1150
+ } : tableOrOptions;
1151
+ this.operationsHelper.addLookupOperation("join", options);
1152
+ return this;
1153
+ }
1154
+ leftJoin(tableOrOptions, localField, foreignField) {
1155
+ const options = typeof tableOrOptions === "string" ? {
1156
+ table: tableOrOptions,
1157
+ localField,
1158
+ foreignField,
1159
+ type: "left"
1160
+ } : {
1161
+ ...tableOrOptions,
1162
+ type: "left"
1163
+ };
1164
+ this.operationsHelper.addLookupOperation("join", options);
1165
+ return this;
1166
+ }
1167
+ rightJoin(tableOrOptions, localField, foreignField) {
1168
+ const options = typeof tableOrOptions === "string" ? {
1169
+ table: tableOrOptions,
1170
+ localField,
1171
+ foreignField,
1172
+ type: "right"
1173
+ } : {
1174
+ ...tableOrOptions,
1175
+ type: "right"
1176
+ };
1177
+ this.operationsHelper.addLookupOperation("join", options);
1178
+ return this;
1179
+ }
1180
+ innerJoin(tableOrOptions, localField, foreignField) {
1181
+ const options = typeof tableOrOptions === "string" ? {
1182
+ table: tableOrOptions,
1183
+ localField,
1184
+ foreignField,
1185
+ type: "inner"
1186
+ } : {
1187
+ ...tableOrOptions,
1188
+ type: "inner"
1189
+ };
1190
+ this.operationsHelper.addLookupOperation("join", options);
1191
+ return this;
1192
+ }
1193
+ fullJoin(tableOrOptions, localField, foreignField) {
1194
+ const options = typeof tableOrOptions === "string" ? {
1195
+ table: tableOrOptions,
1196
+ localField,
1197
+ foreignField,
1198
+ type: "full"
1199
+ } : {
1200
+ ...tableOrOptions,
1201
+ type: "full"
1202
+ };
1203
+ this.operationsHelper.addLookupOperation("join", options);
1204
+ return this;
1205
+ }
1206
+ /**
1207
+ * Performs a cross join with another collection.
1208
+ *
1209
+ * This creates a cartesian product by using $lookup with empty matching criteria.
1210
+ *
1211
+ * @param table - Target collection name
1212
+ */
1213
+ crossJoin(table) {
1214
+ this.operationsHelper.addLookupOperation("join", {
1215
+ table,
1216
+ localField: "_crossJoinDummy",
1217
+ foreignField: "_crossJoinDummy",
1218
+ type: "cross",
1219
+ pipeline: [{ $match: {} }]
1220
+ });
1221
+ return this;
1222
+ }
1223
+ /**
1224
+ * Performs a raw join using a custom aggregation pipeline.
1225
+ *
1226
+ * This allows full control over the $lookup stage for complex join scenarios.
1227
+ *
1228
+ * @param expression - Raw expression (typically a $lookup stage or pipeline)
1229
+ * @param _bindings - Optional bindings (not used in MongoDB but kept for API consistency)
1230
+ */
1231
+ joinRaw(expression, _bindings) {
1232
+ this.operationsHelper.addMatchOperation("raw", { builder: () => expression }, false);
1233
+ return this;
1234
+ }
1235
+ /**
1236
+ * Allows direct manipulation of the native MongoDB query.
1237
+ * @param builder - Function that receives and modifies the native query
1238
+ */
1239
+ raw(builder) {
1240
+ this.operationsHelper.addMatchOperation("raw", { builder }, false);
1241
+ return this;
1242
+ }
1243
+ /**
1244
+ * Extends the query builder with driver-specific functionality.
1245
+ * @param extension - The extension name
1246
+ * @param _args - Extension-specific arguments
1247
+ * @returns The extension's return value
1248
+ */
1249
+ extend(extension, ..._args) {
1250
+ throw new Error(`Extension '${extension}' is not supported by MongoQueryBuilder`);
1251
+ }
1252
+ /**
1253
+ * Creates a deep copy of the query builder.
1254
+ * @returns A new query builder instance with copied operations
1255
+ */
1256
+ clone() {
1257
+ const cloned = new MongoQueryBuilder(this.table, this.dataSource);
1258
+ cloned.operations = [...this.operations];
1259
+ cloned.hydrateCallback = this.hydrateCallback?.bind(cloned);
1260
+ cloned.fetchingCallback = this.fetchingCallback?.bind(cloned);
1261
+ cloned.hydratingCallback = this.hydratingCallback?.bind(cloned);
1262
+ cloned.fetchedCallback = this.fetchedCallback?.bind(cloned);
1263
+ cloned.pendingGlobalScopes = this.pendingGlobalScopes;
1264
+ cloned.availableLocalScopes = this.availableLocalScopes;
1265
+ cloned.disabledGlobalScopes = new Set(this.disabledGlobalScopes);
1266
+ cloned.scopesApplied = this.scopesApplied;
1267
+ cloned.__operationsHelper = this.__operationsHelper;
1268
+ return cloned;
1269
+ }
1270
+ /**
1271
+ * Executes a callback with the query builder without breaking the chain.
1272
+ * @param callback - Function to execute with the builder
1273
+ */
1274
+ tap(callback) {
1275
+ callback(this);
1276
+ return this;
1277
+ }
1278
+ /**
1279
+ * Conditionally applies query modifications based on a condition.
1280
+ * @param condition - The condition to evaluate
1281
+ * @param callback - Function to execute if condition is true
1282
+ * @param otherwise - Optional function to execute if condition is false
1283
+ *
1284
+ * @example
1285
+ * query.when(searchTerm, (q, term) => q.whereLike('name', term))
1286
+ */
1287
+ when(condition, callback, otherwise) {
1288
+ if (condition) callback(this, condition);
1289
+ else if (otherwise) otherwise(this);
1290
+ return this;
1291
+ }
1292
+ /**
1293
+ * Executes the query and returns all matching documents.
1294
+ * @returns an array of matching documents
1295
+ */
1296
+ async get() {
1297
+ const startTime = Date.now();
1298
+ if (this.fetchingCallback) await this.fetchingCallback(this);
1299
+ const rawRecords = await this.execute();
1300
+ if (this.hydratingCallback) await this.hydratingCallback(rawRecords, {
1301
+ query: this,
1302
+ hydrateCallback: this.hydrateCallback
1303
+ });
1304
+ const hydratedRecords = this.hydrateCallback ? rawRecords.map(this.hydrateCallback) : rawRecords;
1305
+ if (this.fetchedCallback) await this.fetchedCallback(hydratedRecords, {
1306
+ query: this,
1307
+ rawRecords,
1308
+ duration: Date.now() - startTime
1309
+ });
1310
+ return hydratedRecords;
1311
+ }
1312
+ /**
1313
+ * Execute the query and get first result
1314
+ * This is different than `first` as first adds a `limit = 1` to the pipeline
1315
+ */
1316
+ async getFirst() {
1317
+ return (await this.get())?.[0] ?? null;
1318
+ }
1319
+ /**
1320
+ * Executes the query and returns the first matching document.
1321
+ * @returns the first document or null
1322
+ */
1323
+ async first() {
1324
+ const results = await this.limit(1).get();
1325
+ return results.length > 0 ? results[0] : null;
1326
+ }
1327
+ /**
1328
+ * Executes the query and returns the first matching document, throwing if none found.
1329
+ * @returns the first document
1330
+ */
1331
+ async firstOrFail() {
1332
+ const result = await this.first();
1333
+ if (!result) throw new Error("No records found matching the query");
1334
+ return result;
1335
+ }
1336
+ /**
1337
+ * Find a document by its primary key (id field).
1338
+ */
1339
+ async find(id) {
1340
+ return this.where("id", id).first();
1341
+ }
1342
+ /**
1343
+ * Configures the query to retrieve the last matching document.
1344
+ */
1345
+ last(field = "createdAt") {
1346
+ this.orderBy(field, "desc");
1347
+ return this.first();
1348
+ }
1349
+ /**
1350
+ * Counts the number of documents matching the query.
1351
+ * @returns the count of matching documents
1352
+ */
1353
+ async count() {
1354
+ const pipeline = this.buildPipeline();
1355
+ pipeline.push({ $count: "total" });
1356
+ const results = await this.execute(pipeline);
1357
+ return results.length > 0 ? results[0].total : 0;
1358
+ }
1359
+ /**
1360
+ * Calculates the sum of a numeric field across matching documents.
1361
+ * @param field - The numeric field to sum
1362
+ * @returns the sum value
1363
+ */
1364
+ async sum(field) {
1365
+ this.groupByRaw({
1366
+ _id: null,
1367
+ total: { $sum: `$${field}` }
1368
+ });
1369
+ this.hydrateCallback = void 0;
1370
+ return (await this.getFirst())?.total ?? 0;
1371
+ }
1372
+ /**
1373
+ * Calculates the average value of a numeric field across matching documents.
1374
+ * @param field - The numeric field to average
1375
+ * @returns the average value
1376
+ */
1377
+ async avg(field) {
1378
+ this.groupByRaw({
1379
+ _id: null,
1380
+ average: { $avg: `$${field}` }
1381
+ });
1382
+ this.hydrateCallback = void 0;
1383
+ return (await this.getFirst())?.average ?? 0;
1384
+ }
1385
+ /**
1386
+ * Finds the minimum value of a field across matching documents.
1387
+ * @param field - The field to find the minimum of
1388
+ * @returns the minimum value
1389
+ */
1390
+ async min(field) {
1391
+ this.groupByRaw({
1392
+ _id: null,
1393
+ minimum: { $min: `$${field}` }
1394
+ });
1395
+ this.hydrateCallback = void 0;
1396
+ return (await this.getFirst())?.minimum ?? 0;
1397
+ }
1398
+ /**
1399
+ * Finds the maximum value of a field across matching documents.
1400
+ * @param field - The field to find the maximum of
1401
+ * @returns the maximum value
1402
+ */
1403
+ async max(field) {
1404
+ this.groupByRaw({
1405
+ _id: null,
1406
+ maximum: { $max: `$${field}` }
1407
+ });
1408
+ this.hydrateCallback = void 0;
1409
+ return (await this.getFirst())?.maximum ?? 0;
1410
+ }
1411
+ /**
1412
+ * Returns an array of distinct values for a field, respecting query filters.
1413
+ * @param field - The field to get distinct values from
1414
+ * @returns an array of distinct values
1415
+ */
1416
+ async distinct(field, ignoreNull = true) {
1417
+ if (ignoreNull) this.whereNotNull(field);
1418
+ this.groupBy(field);
1419
+ this.hydrateCallback = void 0;
1420
+ return (await this.get()).map((doc) => doc._id);
1421
+ }
1422
+ /**
1423
+ * Count distinct values for a field, respecting query filters.
1424
+ * @param field - The field to count distinct values for
1425
+ * @returns the count of distinct values
1426
+ */
1427
+ async countDistinct(field, ignoreNull = true) {
1428
+ if (ignoreNull) this.whereNotNull(field);
1429
+ return await this.groupBy(field).count();
1430
+ }
1431
+ /**
1432
+ * Extracts a single field value from each matching document.
1433
+ * @param field - The field to extract
1434
+ * @returns an array of field values
1435
+ */
1436
+ async pluck(field) {
1437
+ this.hydrateCallback = void 0;
1438
+ return (await this.selectAs(field, "value").get()).map((doc) => doc.value).filter((value) => value !== void 0);
1439
+ }
1440
+ /**
1441
+ * Gets the value of a single field from the first matching document.
1442
+ * @param field - The field to extract
1443
+ * @returns the field value or null
1444
+ */
1445
+ async value(field) {
1446
+ this.hydrateCallback = void 0;
1447
+ return (await this.selectAs(field, "value").first())?.value ?? null;
1448
+ }
1449
+ /**
1450
+ * Checks if any documents match the query.
1451
+ * @param filter - Optional filter to apply to the query
1452
+ * @returns true if documents exist, false otherwise
1453
+ */
1454
+ async exists(filter) {
1455
+ if (filter) this.where(filter);
1456
+ return await this.limit(1).count() > 0;
1457
+ }
1458
+ /**
1459
+ * Checks if no documents match the query.
1460
+ * @param filter - Optional filter to apply to the query
1461
+ * @returns true if no documents exist, false otherwise
1462
+ */
1463
+ async notExists(filter) {
1464
+ return !await this.exists(filter);
1465
+ }
1466
+ /**
1467
+ * Increments a numeric field by the specified amount for first matching document.
1468
+ * @param field - The field to increment
1469
+ * @param amount - The amount to increment by (default: 1)
1470
+ * @returns the new value
1471
+ */
1472
+ async increment(field, amount = 1) {
1473
+ const filter = this.buildFilter();
1474
+ return get(await this.collection.findOneAndUpdate(filter, { $inc: { [field]: amount } }, { returnDocument: "after" }), field, 0);
1475
+ }
1476
+ /**
1477
+ * Decrements a numeric field by the specified amount.
1478
+ * @param field - The field to decrement
1479
+ * @param amount - The amount to decrement by
1480
+ * @returns the new value
1481
+ */
1482
+ async decrement(field, amount = 1) {
1483
+ return this.increment(field, -amount);
1484
+ }
1485
+ /**
1486
+ * Increments a numeric field by the specified amount for all matching documents.
1487
+ * @param field - The field to increment
1488
+ * @param amount - The amount to increment by (default: 1)
1489
+ * @returns the number of documents modified
1490
+ */
1491
+ async incrementMany(field, amount = 1) {
1492
+ const filter = this.buildFilter();
1493
+ return (await this.dataSource.driver.updateMany(this.table, filter, { $inc: { [field]: amount } })).modifiedCount;
1494
+ }
1495
+ /**
1496
+ * Decrements a numeric field by the specified amount for all matching documents.
1497
+ * @param field - The field to decrement
1498
+ * @param amount - The amount to decrement by (default: 1)
1499
+ * @returns the number of documents modified
1500
+ */
1501
+ async decrementMany(field, amount = 1) {
1502
+ return this.incrementMany(field, -amount);
1503
+ }
1504
+ /**
1505
+ * Delete all documents matching the query.
1506
+ */
1507
+ async delete() {
1508
+ const filter = this.buildFilter();
1509
+ return await this.dataSource.driver.deleteMany(this.table, filter);
1510
+ }
1511
+ /**
1512
+ * Delete a single document matching the query.
1513
+ */
1514
+ async deleteOne() {
1515
+ const filter = this.buildFilter();
1516
+ return await this.dataSource.driver.delete(this.table, filter);
1517
+ }
1518
+ /**
1519
+ * Update the given fields for all documents matching the query.
1520
+ */
1521
+ async update(fields) {
1522
+ const filter = this.buildFilter();
1523
+ return (await this.dataSource.driver.updateMany(this.table, filter, { $set: fields })).modifiedCount;
1524
+ }
1525
+ /**
1526
+ * Unset the given fields from all documents matching the query.
1527
+ */
1528
+ async unset(...fields) {
1529
+ const filter = this.buildFilter();
1530
+ return (await this.dataSource.driver.updateMany(this.table, filter, { $unset: fields.reduce((acc, field) => {
1531
+ acc[field] = 1;
1532
+ return acc;
1533
+ }, {}) })).modifiedCount;
1534
+ }
1535
+ /**
1536
+ * Processes query results in chunks, executing a callback for each chunk.
1537
+ * @param size - The number of documents per chunk
1538
+ * @param callback - Function to execute for each chunk
1539
+ * @returns void
1540
+ */
1541
+ async chunk(size, callback) {
1542
+ let chunkIndex = 0;
1543
+ let hasMore = true;
1544
+ while (hasMore) {
1545
+ const chunk = await this.clone().skip(chunkIndex * size).limit(size).get();
1546
+ if (chunk.length === 0) break;
1547
+ if (await callback(chunk, chunkIndex) === false) break;
1548
+ hasMore = chunk.length === size;
1549
+ chunkIndex++;
1550
+ }
1551
+ }
1552
+ /**
1553
+ * Executes the query with traditional page-based pagination.
1554
+ * @param options - Pagination options
1555
+ * @returns pagination result with data and metadata
1556
+ */
1557
+ async paginate(options) {
1558
+ const page = options?.page ?? 1;
1559
+ const limit = options?.limit ?? 10;
1560
+ const skip = (page - 1) * limit;
1561
+ const [data, total] = await Promise.all([this.clone().skip(skip).limit(limit).get(), this.count()]);
1562
+ return {
1563
+ data,
1564
+ pagination: {
1565
+ total,
1566
+ page,
1567
+ limit,
1568
+ pages: Math.ceil(total / limit)
1569
+ }
1570
+ };
1571
+ }
1572
+ /**
1573
+ * Executes the query with cursor-based pagination supporting both directions.
1574
+ * @param options - Cursor pagination options
1575
+ * @returns cursor pagination result with data and cursor info
1576
+ */
1577
+ async cursorPaginate(options) {
1578
+ const limit = options?.limit ?? 10;
1579
+ const cursor = options?.cursor;
1580
+ const column = options?.column ?? "id";
1581
+ const direction = options?.direction ?? "next";
1582
+ if (cursor) {
1583
+ const operator = direction === "next" ? ">" : "<";
1584
+ this.where(column, operator, cursor);
1585
+ }
1586
+ const sortOrder = direction === "next" ? "asc" : "desc";
1587
+ this.orderBy(column, sortOrder);
1588
+ this.orderBy("_id", sortOrder);
1589
+ const results = await this.limit(limit + 1).get();
1590
+ const hasMore = results.length > limit;
1591
+ let data = hasMore ? results.slice(0, limit) : results;
1592
+ if (direction === "prev") data = data.reverse();
1593
+ let nextCursor;
1594
+ let prevCursor;
1595
+ let hasPrev = false;
1596
+ if (data.length > 0) {
1597
+ const firstItem = data[0][column];
1598
+ const lastItem = data[data.length - 1][column];
1599
+ if (direction === "next") {
1600
+ nextCursor = hasMore ? lastItem : void 0;
1601
+ if (cursor) {
1602
+ hasPrev = true;
1603
+ prevCursor = firstItem;
1604
+ }
1605
+ } else {
1606
+ prevCursor = hasMore ? firstItem : void 0;
1607
+ hasPrev = hasMore;
1608
+ if (cursor) nextCursor = lastItem;
1609
+ }
1610
+ }
1611
+ return {
1612
+ data,
1613
+ pagination: {
1614
+ hasMore,
1615
+ hasPrev,
1616
+ nextCursor,
1617
+ prevCursor
1618
+ }
1619
+ };
1620
+ }
1621
+ /**
1622
+ * Returns the MongoDB aggregation pipeline that will be executed.
1623
+ */
1624
+ parse() {
1625
+ return { pipeline: this.buildPipeline() };
1626
+ }
1627
+ /**
1628
+ * Returns a formatted string representation of the query pipeline.
1629
+ * @returns A formatted string representation of the pipeline
1630
+ */
1631
+ pretty() {
1632
+ return this.getParser().toPrettyString();
1633
+ }
1634
+ /**
1635
+ * Returns the MongoDB query execution plan.
1636
+ * @returns MongoDB's explain output
1637
+ */
1638
+ async explain() {
1639
+ const pipeline = this.buildPipeline();
1640
+ const session = databaseTransactionContext.getSession();
1641
+ const options = session ? {
1642
+ session,
1643
+ explain: true
1644
+ } : { explain: true };
1645
+ return this.collection.aggregate(pipeline, options).toArray();
1646
+ }
1647
+ /**
1648
+ * Get query parser instance
1649
+ */
1650
+ getParser() {
1651
+ this.applyPendingScopes();
1652
+ return new MongoQueryParser({
1653
+ collection: this.collection,
1654
+ operations: this.operations,
1655
+ createSubBuilder: () => new MongoQueryBuilder(this.table, this.dataSource)
1656
+ });
1657
+ }
1658
+ /**
1659
+ * Build the MongoDB aggregation pipeline from the operations list.
1660
+ * @returns The MongoDB aggregation pipeline
1661
+ */
1662
+ buildPipeline() {
1663
+ return this.getParser().parse();
1664
+ }
1665
+ /**
1666
+ * Build a MongoDB filter object from the query's where clauses.
1667
+ * Used for update operations like increment/decrement.
1668
+ * @returns The MongoDB filter object
1669
+ */
1670
+ buildFilter() {
1671
+ if (this.operations.filter((op) => op.stage === "$match").length === 0) return {};
1672
+ const matchStage = this.buildPipeline().find((stage) => stage.$match);
1673
+ if (matchStage && matchStage.$match) return matchStage.$match;
1674
+ return {};
1675
+ }
1676
+ /**
1677
+ * Execute the aggregate command
1678
+ */
1679
+ async execute(pipeline) {
1680
+ const aggregationPipeline = pipeline || this.buildPipeline();
1681
+ const options = { session: databaseTransactionContext.getSession() };
1682
+ const results = await this.collection.aggregate(aggregationPipeline, options).toArray();
1683
+ this.operations = [];
1684
+ this.operationsHelper.setOperations(this.operations);
1685
+ return results;
1686
+ }
1687
+ /**
1688
+ * Relations to eagerly load.
1689
+ */
1690
+ eagerLoadRelations = /* @__PURE__ */ new Map();
1691
+ /**
1692
+ * Relations to load via $lookup (single query).
1693
+ */
1694
+ joinRelations = /* @__PURE__ */ new Map();
1695
+ /**
1696
+ * Load relations using MongoDB $lookup in a single aggregation query.
1697
+ *
1698
+ * Unlike `with()` which uses separate queries, `joinWith()` uses
1699
+ * $lookup to fetch related data in a single aggregation pipeline.
1700
+ *
1701
+ * @param relations - Relation names to load via $lookup
1702
+ * @returns This builder for chaining
1703
+ */
1704
+ joinWith(...relations) {
1705
+ for (const relation of relations) {
1706
+ const def = this.relationDefinitions?.[relation];
1707
+ if (def) this.joinRelations.set(relation, {
1708
+ alias: `_rel_${relation}`,
1709
+ type: def.type
1710
+ });
1711
+ }
1712
+ return this;
1713
+ }
1714
+ /**
1715
+ * Eagerly load one or more relations.
1716
+ *
1717
+ * Supported patterns:
1718
+ * - `with("posts")` - Load relation
1719
+ * - `with("posts", "comments")` - Load multiple relations
1720
+ * - `with("posts", callback)` - Load relation with constraint
1721
+ * - `with({ posts: true, comments: callback })` - Object configuration
1722
+ *
1723
+ * @param args - Relation name(s), callbacks, or configuration object
1724
+ */
1725
+ with(...args) {
1726
+ for (let i = 0; i < args.length; i++) {
1727
+ const arg = args[i];
1728
+ if (typeof arg === "string") {
1729
+ const nextArg = args[i + 1];
1730
+ if (typeof nextArg === "function") {
1731
+ this.eagerLoadRelations.set(arg, nextArg);
1732
+ i++;
1733
+ } else this.eagerLoadRelations.set(arg, true);
1734
+ } else if (typeof arg === "object" && arg !== null) for (const [key, value] of Object.entries(arg)) this.eagerLoadRelations.set(key, value);
1735
+ }
1736
+ return this;
1737
+ }
1738
+ /**
1739
+ * Filter results to only those that have related models.
1740
+ * @param relation - Relation name
1741
+ * @param operator - Optional comparison operator
1742
+ * @param count - Optional count to compare against
1743
+ */
1744
+ has(relation, operator, count) {
1745
+ this.operationsHelper.addMatchOperation("has", {
1746
+ relation,
1747
+ operator,
1748
+ count
1749
+ });
1750
+ return this;
1751
+ }
1752
+ /**
1753
+ * Filter results that have related models matching specific conditions.
1754
+ * @param relation - Relation name
1755
+ * @param callback - Callback to define conditions
1756
+ */
1757
+ whereHas(relation, callback) {
1758
+ this.operationsHelper.addMatchOperation("whereHas", {
1759
+ relation,
1760
+ callback
1761
+ });
1762
+ return this;
1763
+ }
1764
+ /**
1765
+ * Filter results that don't have any related models.
1766
+ * @param relation - Relation name
1767
+ */
1768
+ doesntHave(relation) {
1769
+ this.operationsHelper.addMatchOperation("doesntHave", { relation });
1770
+ return this;
1771
+ }
1772
+ /**
1773
+ * Filter results that don't have related models matching specific conditions.
1774
+ * @param relation - Relation name
1775
+ * @param callback - Callback to define conditions
1776
+ */
1777
+ whereDoesntHave(relation, callback) {
1778
+ this.operationsHelper.addMatchOperation("whereDoesntHave", {
1779
+ relation,
1780
+ callback
1781
+ });
1782
+ return this;
1783
+ }
1784
+ /**
1785
+ * Nearest-neighbour vector similarity search via MongoDB Atlas $vectorSearch.
1786
+ *
1787
+ * Adds two pipeline stages:
1788
+ * 1. `$vectorSearch` — runs the ANN search using the Atlas vector index.
1789
+ * Must be the first stage in the pipeline. Limit is embedded here.
1790
+ * 2. `$addFields` — exposes `{ $meta: "vectorSearchScore" }` under `alias`
1791
+ * so callers can filter by minimum score after `.get()`.
1792
+ *
1793
+ * **Prerequisites:**
1794
+ * - MongoDB Atlas cluster (local/Community MongoDB does NOT support $vectorSearch)
1795
+ * - A vector search index on the collection, e.g.:
1796
+ * `{ "fields": [{ "type": "vector", "path": "embedding", "numDimensions": 1536, "similarity": "cosine" }] }`
1797
+ * - The index name convention used here is `"${column}_index"` (override via `alias` if needed).
1798
+ *
1799
+ * @param column - Vector column name (e.g. `"embedding"`)
1800
+ * @param embedding - Query embedding as a plain number array
1801
+ * @param alias - Score alias added to each result row (default: `"score"`)
1802
+ *
1803
+ * @example
1804
+ * ```typescript
1805
+ * const results = await Vector.query()
1806
+ * .where({ organization_id: "org-123" })
1807
+ * .similarTo("embedding", queryEmbedding)
1808
+ * .limit(5)
1809
+ * .get<VectorRow & { score: number }>();
1810
+ * ```
1811
+ */
1812
+ similarTo(column, embedding, alias = "score") {
1813
+ const limit = this.operations.find((op) => op.type === "limit")?.data?.value ?? 10;
1814
+ this.operationsHelper.addOperation("$vectorSearch", "vectorSearch", {
1815
+ index: `${column}_index`,
1816
+ path: column,
1817
+ queryVector: embedding,
1818
+ numCandidates: limit * 10,
1819
+ limit
1820
+ }, false);
1821
+ this.operationsHelper.addOperation("$addFields", "vectorSearchScore", { [alias]: { $meta: "vectorSearchScore" } }, false);
1822
+ return this;
1823
+ }
1824
+ };
1825
+
1826
+ //#endregion
1827
+ export { MongoQueryBuilder };
1828
+ //# sourceMappingURL=mongodb-query-builder.mjs.map