@warlock.js/cascade 4.0.174 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1050) hide show
  1. package/README.md +6 -5
  2. package/bin/cascadejs +3 -0
  3. package/esm/cli/commands/migrate-export-sql.mjs +48 -0
  4. package/esm/cli/commands/migrate-export-sql.mjs.map +1 -0
  5. package/esm/cli/commands/migrate-list.mjs +26 -0
  6. package/esm/cli/commands/migrate-list.mjs.map +1 -0
  7. package/esm/cli/commands/migrate-rollback.mjs +50 -0
  8. package/esm/cli/commands/migrate-rollback.mjs.map +1 -0
  9. package/esm/cli/commands/migrate.mjs +65 -0
  10. package/esm/cli/commands/migrate.mjs.map +1 -0
  11. package/esm/cli/connection-from-env.mjs +181 -0
  12. package/esm/cli/connection-from-env.mjs.map +1 -0
  13. package/esm/cli/index.mjs +31 -0
  14. package/esm/cli/index.mjs.map +1 -0
  15. package/esm/cli/load-migrations.mjs +78 -0
  16. package/esm/cli/load-migrations.mjs.map +1 -0
  17. package/esm/cli/printers.mjs +57 -0
  18. package/esm/cli/printers.mjs.map +1 -0
  19. package/esm/cli/setup-logger.mjs +30 -0
  20. package/esm/cli/setup-logger.mjs.map +1 -0
  21. package/esm/cli/with-cli-connection.mjs +39 -0
  22. package/esm/cli/with-cli-connection.mjs.map +1 -0
  23. package/esm/cli.d.mts +1 -0
  24. package/esm/cli.mjs +26 -0
  25. package/esm/cli.mjs.map +1 -0
  26. package/esm/context/database-data-source-context.d.mts +32 -0
  27. package/esm/context/database-data-source-context.d.mts.map +1 -0
  28. package/esm/context/database-data-source-context.mjs +35 -0
  29. package/esm/context/database-data-source-context.mjs.map +1 -0
  30. package/esm/context/database-transaction-context.d.mts +38 -0
  31. package/esm/context/database-transaction-context.d.mts.map +1 -0
  32. package/esm/context/database-transaction-context.mjs +47 -0
  33. package/esm/context/database-transaction-context.mjs.map +1 -0
  34. package/esm/contracts/database-driver.contract.d.mts +443 -0
  35. package/esm/contracts/database-driver.contract.d.mts.map +1 -0
  36. package/esm/contracts/database-id-generator.contract.d.mts +109 -0
  37. package/esm/contracts/database-id-generator.contract.d.mts.map +1 -0
  38. package/esm/contracts/database-remover.contract.d.mts +108 -0
  39. package/esm/contracts/database-remover.contract.d.mts.map +1 -0
  40. package/esm/contracts/database-restorer.contract.d.mts +145 -0
  41. package/esm/contracts/database-restorer.contract.d.mts.map +1 -0
  42. package/esm/contracts/database-writer.contract.d.mts +123 -0
  43. package/esm/contracts/database-writer.contract.d.mts.map +1 -0
  44. package/esm/contracts/driver-blueprint.contract.d.mts +52 -0
  45. package/esm/contracts/driver-blueprint.contract.d.mts.map +1 -0
  46. package/esm/contracts/index.d.mts +9 -0
  47. package/esm/contracts/migration-driver.contract.d.mts +476 -0
  48. package/esm/contracts/migration-driver.contract.d.mts.map +1 -0
  49. package/esm/contracts/query-builder.contract.d.mts +1663 -0
  50. package/esm/contracts/query-builder.contract.d.mts.map +1 -0
  51. package/esm/contracts/sync-adapter.contract.d.mts +49 -0
  52. package/esm/contracts/sync-adapter.contract.d.mts.map +1 -0
  53. package/esm/data-source/data-source-registry.d.mts +111 -0
  54. package/esm/data-source/data-source-registry.d.mts.map +1 -0
  55. package/esm/data-source/data-source-registry.mjs +142 -0
  56. package/esm/data-source/data-source-registry.mjs.map +1 -0
  57. package/esm/data-source/data-source.d.mts +160 -0
  58. package/esm/data-source/data-source.d.mts.map +1 -0
  59. package/esm/data-source/data-source.mjs +87 -0
  60. package/esm/data-source/data-source.mjs.map +1 -0
  61. package/esm/database-dirty-tracker.d.mts +254 -0
  62. package/esm/database-dirty-tracker.d.mts.map +1 -0
  63. package/esm/database-dirty-tracker.mjs +356 -0
  64. package/esm/database-dirty-tracker.mjs.map +1 -0
  65. package/esm/drivers/mongodb/mongodb-blueprint.mjs +54 -0
  66. package/esm/drivers/mongodb/mongodb-blueprint.mjs.map +1 -0
  67. package/esm/drivers/mongodb/mongodb-driver.d.mts +334 -0
  68. package/esm/drivers/mongodb/mongodb-driver.d.mts.map +1 -0
  69. package/esm/drivers/mongodb/mongodb-driver.mjs +716 -0
  70. package/esm/drivers/mongodb/mongodb-driver.mjs.map +1 -0
  71. package/esm/drivers/mongodb/mongodb-id-generator.d.mts +120 -0
  72. package/esm/drivers/mongodb/mongodb-id-generator.d.mts.map +1 -0
  73. package/esm/drivers/mongodb/mongodb-id-generator.mjs +141 -0
  74. package/esm/drivers/mongodb/mongodb-id-generator.mjs.map +1 -0
  75. package/esm/drivers/mongodb/mongodb-migration-driver.d.mts +322 -0
  76. package/esm/drivers/mongodb/mongodb-migration-driver.d.mts.map +1 -0
  77. package/esm/drivers/mongodb/mongodb-migration-driver.mjs +531 -0
  78. package/esm/drivers/mongodb/mongodb-migration-driver.mjs.map +1 -0
  79. package/esm/drivers/mongodb/mongodb-query-builder.d.mts +1117 -0
  80. package/esm/drivers/mongodb/mongodb-query-builder.d.mts.map +1 -0
  81. package/esm/drivers/mongodb/mongodb-query-builder.mjs +1828 -0
  82. package/esm/drivers/mongodb/mongodb-query-builder.mjs.map +1 -0
  83. package/esm/drivers/mongodb/mongodb-query-operations.d.mts +230 -0
  84. package/esm/drivers/mongodb/mongodb-query-operations.d.mts.map +1 -0
  85. package/esm/drivers/mongodb/mongodb-query-operations.mjs +275 -0
  86. package/esm/drivers/mongodb/mongodb-query-operations.mjs.map +1 -0
  87. package/esm/drivers/mongodb/mongodb-query-parser.d.mts +263 -0
  88. package/esm/drivers/mongodb/mongodb-query-parser.d.mts.map +1 -0
  89. package/esm/drivers/mongodb/mongodb-query-parser.mjs +965 -0
  90. package/esm/drivers/mongodb/mongodb-query-parser.mjs.map +1 -0
  91. package/esm/drivers/mongodb/mongodb-sync-adapter.d.mts +78 -0
  92. package/esm/drivers/mongodb/mongodb-sync-adapter.d.mts.map +1 -0
  93. package/esm/drivers/mongodb/mongodb-sync-adapter.mjs +118 -0
  94. package/esm/drivers/mongodb/mongodb-sync-adapter.mjs.map +1 -0
  95. package/esm/drivers/mongodb/types.d.mts +43 -0
  96. package/esm/drivers/mongodb/types.d.mts.map +1 -0
  97. package/esm/drivers/postgres/index.d.mts +8 -0
  98. package/esm/drivers/postgres/index.mjs +9 -0
  99. package/esm/drivers/postgres/postgres-blueprint.d.mts +60 -0
  100. package/esm/drivers/postgres/postgres-blueprint.d.mts.map +1 -0
  101. package/esm/drivers/postgres/postgres-blueprint.mjs +105 -0
  102. package/esm/drivers/postgres/postgres-blueprint.mjs.map +1 -0
  103. package/esm/drivers/postgres/postgres-dialect.d.mts +144 -0
  104. package/esm/drivers/postgres/postgres-dialect.d.mts.map +1 -0
  105. package/esm/drivers/postgres/postgres-dialect.mjs +227 -0
  106. package/esm/drivers/postgres/postgres-dialect.mjs.map +1 -0
  107. package/esm/drivers/postgres/postgres-driver.d.mts +424 -0
  108. package/esm/drivers/postgres/postgres-driver.d.mts.map +1 -0
  109. package/esm/drivers/postgres/postgres-driver.mjs +845 -0
  110. package/esm/drivers/postgres/postgres-driver.mjs.map +1 -0
  111. package/esm/drivers/postgres/postgres-migration-driver.d.mts +393 -0
  112. package/esm/drivers/postgres/postgres-migration-driver.d.mts.map +1 -0
  113. package/esm/drivers/postgres/postgres-migration-driver.mjs +760 -0
  114. package/esm/drivers/postgres/postgres-migration-driver.mjs.map +1 -0
  115. package/esm/drivers/postgres/postgres-query-builder.d.mts +399 -0
  116. package/esm/drivers/postgres/postgres-query-builder.d.mts.map +1 -0
  117. package/esm/drivers/postgres/postgres-query-builder.mjs +1105 -0
  118. package/esm/drivers/postgres/postgres-query-builder.mjs.map +1 -0
  119. package/esm/drivers/postgres/postgres-query-parser.d.mts +351 -0
  120. package/esm/drivers/postgres/postgres-query-parser.d.mts.map +1 -0
  121. package/esm/drivers/postgres/postgres-query-parser.mjs +796 -0
  122. package/esm/drivers/postgres/postgres-query-parser.mjs.map +1 -0
  123. package/esm/drivers/postgres/postgres-sql-serializer.mjs +260 -0
  124. package/esm/drivers/postgres/postgres-sql-serializer.mjs.map +1 -0
  125. package/esm/drivers/postgres/postgres-sync-adapter.d.mts +79 -0
  126. package/esm/drivers/postgres/postgres-sync-adapter.d.mts.map +1 -0
  127. package/esm/drivers/postgres/postgres-sync-adapter.mjs +162 -0
  128. package/esm/drivers/postgres/postgres-sync-adapter.mjs.map +1 -0
  129. package/esm/drivers/postgres/types.d.mts +105 -0
  130. package/esm/drivers/postgres/types.d.mts.map +1 -0
  131. package/esm/drivers/sql/sql-dialect.contract.d.mts +221 -0
  132. package/esm/drivers/sql/sql-dialect.contract.d.mts.map +1 -0
  133. package/esm/drivers/sql/sql-types.d.mts +150 -0
  134. package/esm/drivers/sql/sql-types.d.mts.map +1 -0
  135. package/esm/errors/missing-data-source.error.d.mts +25 -0
  136. package/esm/errors/missing-data-source.error.d.mts.map +1 -0
  137. package/esm/errors/missing-data-source.error.mjs +31 -0
  138. package/esm/errors/missing-data-source.error.mjs.map +1 -0
  139. package/esm/errors/transaction-rollback.error.d.mts +23 -0
  140. package/esm/errors/transaction-rollback.error.d.mts.map +1 -0
  141. package/esm/errors/transaction-rollback.error.mjs +29 -0
  142. package/esm/errors/transaction-rollback.error.mjs.map +1 -0
  143. package/esm/events/model-events.d.mts +234 -0
  144. package/esm/events/model-events.d.mts.map +1 -0
  145. package/esm/events/model-events.mjs +254 -0
  146. package/esm/events/model-events.mjs.map +1 -0
  147. package/esm/expressions/aggregate-expressions.d.mts +224 -0
  148. package/esm/expressions/aggregate-expressions.d.mts.map +1 -0
  149. package/esm/expressions/aggregate-expressions.mjs +232 -0
  150. package/esm/expressions/aggregate-expressions.mjs.map +1 -0
  151. package/esm/index.d.mts +67 -0
  152. package/esm/index.mjs +53 -0
  153. package/esm/migration/column-builder.d.mts +420 -0
  154. package/esm/migration/column-builder.d.mts.map +1 -0
  155. package/esm/migration/column-builder.mjs +532 -0
  156. package/esm/migration/column-builder.mjs.map +1 -0
  157. package/esm/migration/column-helpers.d.mts +280 -0
  158. package/esm/migration/column-helpers.d.mts.map +1 -0
  159. package/esm/migration/column-helpers.mjs +376 -0
  160. package/esm/migration/column-helpers.mjs.map +1 -0
  161. package/esm/migration/foreign-key-builder.d.mts +106 -0
  162. package/esm/migration/foreign-key-builder.d.mts.map +1 -0
  163. package/esm/migration/foreign-key-builder.mjs +126 -0
  164. package/esm/migration/foreign-key-builder.mjs.map +1 -0
  165. package/esm/migration/index.d.mts +6 -0
  166. package/esm/migration/index.mjs +7 -0
  167. package/esm/migration/migration-runner.d.mts +279 -0
  168. package/esm/migration/migration-runner.d.mts.map +1 -0
  169. package/esm/migration/migration-runner.mjs +662 -0
  170. package/esm/migration/migration-runner.mjs.map +1 -0
  171. package/esm/migration/migration.d.mts +2035 -0
  172. package/esm/migration/migration.d.mts.map +1 -0
  173. package/esm/migration/migration.mjs +2083 -0
  174. package/esm/migration/migration.mjs.map +1 -0
  175. package/esm/migration/sql-grammar.mjs +115 -0
  176. package/esm/migration/sql-grammar.mjs.map +1 -0
  177. package/esm/migration/sql-serializer.d.mts +26 -0
  178. package/esm/migration/sql-serializer.d.mts.map +1 -0
  179. package/esm/migration/sql-serializer.mjs +26 -0
  180. package/esm/migration/sql-serializer.mjs.map +1 -0
  181. package/esm/migration/types.d.mts +136 -0
  182. package/esm/migration/types.d.mts.map +1 -0
  183. package/esm/model/methods/accessor-methods.mjs +54 -0
  184. package/esm/model/methods/accessor-methods.mjs.map +1 -0
  185. package/esm/model/methods/delete-methods.mjs +16 -0
  186. package/esm/model/methods/delete-methods.mjs.map +1 -0
  187. package/esm/model/methods/dirty-methods.mjs +20 -0
  188. package/esm/model/methods/dirty-methods.mjs.map +1 -0
  189. package/esm/model/methods/hydration-methods.mjs +51 -0
  190. package/esm/model/methods/hydration-methods.mjs.map +1 -0
  191. package/esm/model/methods/instance-event-methods.mjs +22 -0
  192. package/esm/model/methods/instance-event-methods.mjs.map +1 -0
  193. package/esm/model/methods/meta-methods.mjs +36 -0
  194. package/esm/model/methods/meta-methods.mjs.map +1 -0
  195. package/esm/model/methods/pivot-methods.mjs +48 -0
  196. package/esm/model/methods/pivot-methods.mjs.map +1 -0
  197. package/esm/model/methods/query-methods.mjs +121 -0
  198. package/esm/model/methods/query-methods.mjs.map +1 -0
  199. package/esm/model/methods/restore-methods.mjs +16 -0
  200. package/esm/model/methods/restore-methods.mjs.map +1 -0
  201. package/esm/model/methods/scope-methods.mjs +20 -0
  202. package/esm/model/methods/scope-methods.mjs.map +1 -0
  203. package/esm/model/methods/serialization-methods.mjs +20 -0
  204. package/esm/model/methods/serialization-methods.mjs.map +1 -0
  205. package/esm/model/methods/static-event-methods.mjs +37 -0
  206. package/esm/model/methods/static-event-methods.mjs.map +1 -0
  207. package/esm/model/methods/write-methods.mjs +69 -0
  208. package/esm/model/methods/write-methods.mjs.map +1 -0
  209. package/esm/model/model.d.mts +1778 -0
  210. package/esm/model/model.d.mts.map +1 -0
  211. package/esm/model/model.mjs +1762 -0
  212. package/esm/model/model.mjs.map +1 -0
  213. package/esm/model/model.types.d.mts +47 -0
  214. package/esm/model/model.types.d.mts.map +1 -0
  215. package/esm/model/register-model.d.mts +140 -0
  216. package/esm/model/register-model.d.mts.map +1 -0
  217. package/esm/model/register-model.mjs +175 -0
  218. package/esm/model/register-model.mjs.map +1 -0
  219. package/esm/model/relation-decorators.d.mts +88 -0
  220. package/esm/model/relation-decorators.d.mts.map +1 -0
  221. package/esm/model/relation-decorators.mjs +191 -0
  222. package/esm/model/relation-decorators.mjs.map +1 -0
  223. package/esm/operations/database.d.mts +46 -0
  224. package/esm/operations/database.d.mts.map +1 -0
  225. package/esm/operations/database.mjs +40 -0
  226. package/esm/operations/database.mjs.map +1 -0
  227. package/esm/operations/index.d.mts +2 -0
  228. package/esm/operations/index.mjs +4 -0
  229. package/esm/operations/migrations.d.mts +71 -0
  230. package/esm/operations/migrations.d.mts.map +1 -0
  231. package/esm/operations/migrations.mjs +70 -0
  232. package/esm/operations/migrations.mjs.map +1 -0
  233. package/esm/query-builder/query-builder.d.mts +564 -0
  234. package/esm/query-builder/query-builder.d.mts.map +1 -0
  235. package/esm/query-builder/query-builder.mjs +1097 -0
  236. package/esm/query-builder/query-builder.mjs.map +1 -0
  237. package/esm/relations/index.d.mts +4 -0
  238. package/esm/relations/index.mjs +5 -0
  239. package/esm/relations/key-conventions.mjs +119 -0
  240. package/esm/relations/key-conventions.mjs.map +1 -0
  241. package/esm/relations/pivot-operations.d.mts +155 -0
  242. package/esm/relations/pivot-operations.d.mts.map +1 -0
  243. package/esm/relations/pivot-operations.mjs +232 -0
  244. package/esm/relations/pivot-operations.mjs.map +1 -0
  245. package/esm/relations/relation-hydrator.d.mts +55 -0
  246. package/esm/relations/relation-hydrator.d.mts.map +1 -0
  247. package/esm/relations/relation-hydrator.mjs +52 -0
  248. package/esm/relations/relation-hydrator.mjs.map +1 -0
  249. package/esm/relations/relation-loader.d.mts +190 -0
  250. package/esm/relations/relation-loader.d.mts.map +1 -0
  251. package/esm/relations/relation-loader.mjs +416 -0
  252. package/esm/relations/relation-loader.mjs.map +1 -0
  253. package/esm/relations/types.d.mts +317 -0
  254. package/esm/relations/types.d.mts.map +1 -0
  255. package/esm/remover/database-remover.d.mts +104 -0
  256. package/esm/remover/database-remover.d.mts.map +1 -0
  257. package/esm/remover/database-remover.mjs +174 -0
  258. package/esm/remover/database-remover.mjs.map +1 -0
  259. package/esm/restorer/database-restorer.d.mts +135 -0
  260. package/esm/restorer/database-restorer.d.mts.map +1 -0
  261. package/esm/restorer/database-restorer.mjs +316 -0
  262. package/esm/restorer/database-restorer.mjs.map +1 -0
  263. package/esm/sql-database-dirty-tracker.d.mts +17 -0
  264. package/esm/sql-database-dirty-tracker.d.mts.map +1 -0
  265. package/esm/sql-database-dirty-tracker.mjs +20 -0
  266. package/esm/sql-database-dirty-tracker.mjs.map +1 -0
  267. package/esm/sync/model-events.mjs +46 -0
  268. package/esm/sync/model-events.mjs.map +1 -0
  269. package/esm/sync/model-sync-operation.d.mts +159 -0
  270. package/esm/sync/model-sync-operation.d.mts.map +1 -0
  271. package/esm/sync/model-sync-operation.mjs +257 -0
  272. package/esm/sync/model-sync-operation.mjs.map +1 -0
  273. package/esm/sync/model-sync.d.mts +126 -0
  274. package/esm/sync/model-sync.d.mts.map +1 -0
  275. package/esm/sync/model-sync.mjs +157 -0
  276. package/esm/sync/model-sync.mjs.map +1 -0
  277. package/esm/sync/sync-context.d.mts +69 -0
  278. package/esm/sync/sync-context.d.mts.map +1 -0
  279. package/esm/sync/sync-context.mjs +95 -0
  280. package/esm/sync/sync-context.mjs.map +1 -0
  281. package/esm/sync/sync-manager.d.mts +213 -0
  282. package/esm/sync/sync-manager.d.mts.map +1 -0
  283. package/esm/sync/sync-manager.mjs +597 -0
  284. package/esm/sync/sync-manager.mjs.map +1 -0
  285. package/esm/sync/types.d.mts +215 -0
  286. package/esm/sync/types.d.mts.map +1 -0
  287. package/esm/types.d.mts +423 -0
  288. package/esm/types.d.mts.map +1 -0
  289. package/esm/utils/connect-to-database.d.mts +328 -0
  290. package/esm/utils/connect-to-database.d.mts.map +1 -0
  291. package/esm/utils/connect-to-database.mjs +130 -0
  292. package/esm/utils/connect-to-database.mjs.map +1 -0
  293. package/esm/utils/database-writer.utils.d.mts +18 -0
  294. package/esm/utils/database-writer.utils.d.mts.map +1 -0
  295. package/esm/utils/database-writer.utils.mjs +25 -0
  296. package/esm/utils/database-writer.utils.mjs.map +1 -0
  297. package/esm/utils/define-model.d.mts +185 -0
  298. package/esm/utils/define-model.d.mts.map +1 -0
  299. package/esm/utils/define-model.mjs +105 -0
  300. package/esm/utils/define-model.mjs.map +1 -0
  301. package/esm/utils/is-valid-date-value.mjs +22 -0
  302. package/esm/utils/is-valid-date-value.mjs.map +1 -0
  303. package/esm/utils/once-connected.d.mts +150 -0
  304. package/esm/utils/once-connected.d.mts.map +1 -0
  305. package/esm/utils/once-connected.mjs +203 -0
  306. package/esm/utils/once-connected.mjs.map +1 -0
  307. package/esm/validation/database-seal-plugins.d.mts +1 -0
  308. package/esm/validation/database-seal-plugins.mjs +11 -0
  309. package/esm/validation/database-seal-plugins.mjs.map +1 -0
  310. package/esm/validation/database-writer-validation-error.d.mts +101 -0
  311. package/esm/validation/database-writer-validation-error.d.mts.map +1 -0
  312. package/esm/validation/database-writer-validation-error.mjs +153 -0
  313. package/esm/validation/database-writer-validation-error.mjs.map +1 -0
  314. package/esm/validation/index.d.mts +2 -0
  315. package/esm/validation/index.mjs +4 -0
  316. package/esm/validation/mutators/embed-mutator.mjs +26 -0
  317. package/esm/validation/mutators/embed-mutator.mjs.map +1 -0
  318. package/esm/validation/plugins/database-rules-plugin.d.mts +28 -0
  319. package/esm/validation/plugins/database-rules-plugin.d.mts.map +1 -0
  320. package/esm/validation/plugins/database-rules-plugin.mjs +43 -0
  321. package/esm/validation/plugins/database-rules-plugin.mjs.map +1 -0
  322. package/esm/validation/plugins/embed-validator-plugin.d.mts +17 -0
  323. package/esm/validation/plugins/embed-validator-plugin.d.mts.map +1 -0
  324. package/esm/validation/plugins/embed-validator-plugin.mjs +20 -0
  325. package/esm/validation/plugins/embed-validator-plugin.mjs.map +1 -0
  326. package/esm/validation/rules/database-model-rule.mjs +32 -0
  327. package/esm/validation/rules/database-model-rule.mjs.map +1 -0
  328. package/esm/validation/rules/exists-rule.mjs +29 -0
  329. package/esm/validation/rules/exists-rule.mjs.map +1 -0
  330. package/esm/validation/rules/unique-rule.mjs +43 -0
  331. package/esm/validation/rules/unique-rule.mjs.map +1 -0
  332. package/esm/validation/transformers/embed-model-transformer.mjs +17 -0
  333. package/esm/validation/transformers/embed-model-transformer.mjs.map +1 -0
  334. package/esm/validation/types.d.mts +43 -0
  335. package/esm/validation/types.d.mts.map +1 -0
  336. package/esm/validation/validators/embed-validator.d.mts +25 -0
  337. package/esm/validation/validators/embed-validator.d.mts.map +1 -0
  338. package/esm/validation/validators/embed-validator.mjs +42 -0
  339. package/esm/validation/validators/embed-validator.mjs.map +1 -0
  340. package/esm/writer/database-writer.d.mts +178 -0
  341. package/esm/writer/database-writer.d.mts.map +1 -0
  342. package/esm/writer/database-writer.mjs +317 -0
  343. package/esm/writer/database-writer.mjs.map +1 -0
  344. package/llms-full.txt +2027 -0
  345. package/llms.txt +23 -0
  346. package/package.json +60 -51
  347. package/skills/README.md +65 -0
  348. package/skills/aggregate-data/SKILL.md +102 -0
  349. package/skills/cascade-basics/SKILL.md +93 -0
  350. package/skills/configure-delete-strategy/SKILL.md +126 -0
  351. package/skills/define-model/SKILL.md +170 -0
  352. package/skills/define-relations/SKILL.md +171 -0
  353. package/skills/manage-data-sources/SKILL.md +140 -0
  354. package/skills/manage-transactions/SKILL.md +118 -0
  355. package/skills/paginate-results/SKILL.md +122 -0
  356. package/skills/perform-atomic-ops/SKILL.md +98 -0
  357. package/skills/query-data/SKILL.md +168 -0
  358. package/skills/run-cascade-cli/SKILL.md +125 -0
  359. package/skills/search-by-vector/SKILL.md +127 -0
  360. package/skills/subscribe-to-model-events/SKILL.md +148 -0
  361. package/skills/track-changes/SKILL.md +109 -0
  362. package/skills/write-migration/SKILL.md +144 -0
  363. package/cjs/context/database-data-source-context.d.ts +0 -29
  364. package/cjs/context/database-data-source-context.d.ts.map +0 -1
  365. package/cjs/context/database-data-source-context.js +0 -28
  366. package/cjs/context/database-data-source-context.js.map +0 -1
  367. package/cjs/context/database-transaction-context.d.ts +0 -35
  368. package/cjs/context/database-transaction-context.d.ts.map +0 -1
  369. package/cjs/context/database-transaction-context.js +0 -40
  370. package/cjs/context/database-transaction-context.js.map +0 -1
  371. package/cjs/contracts/database-driver.contract.d.ts +0 -450
  372. package/cjs/contracts/database-driver.contract.d.ts.map +0 -1
  373. package/cjs/contracts/database-id-generator.contract.d.ts +0 -109
  374. package/cjs/contracts/database-id-generator.contract.d.ts.map +0 -1
  375. package/cjs/contracts/database-remover.contract.d.ts +0 -104
  376. package/cjs/contracts/database-remover.contract.d.ts.map +0 -1
  377. package/cjs/contracts/database-restorer.contract.d.ts +0 -143
  378. package/cjs/contracts/database-restorer.contract.d.ts.map +0 -1
  379. package/cjs/contracts/database-writer.contract.d.ts +0 -119
  380. package/cjs/contracts/database-writer.contract.d.ts.map +0 -1
  381. package/cjs/contracts/driver-blueprint.contract.d.ts +0 -49
  382. package/cjs/contracts/driver-blueprint.contract.d.ts.map +0 -1
  383. package/cjs/contracts/index.d.ts +0 -10
  384. package/cjs/contracts/index.d.ts.map +0 -1
  385. package/cjs/contracts/migration-driver.contract.d.ts +0 -522
  386. package/cjs/contracts/migration-driver.contract.d.ts.map +0 -1
  387. package/cjs/contracts/query-builder.contract.d.ts +0 -1609
  388. package/cjs/contracts/query-builder.contract.d.ts.map +0 -1
  389. package/cjs/contracts/sync-adapter.contract.d.ts +0 -58
  390. package/cjs/contracts/sync-adapter.contract.d.ts.map +0 -1
  391. package/cjs/data-source/data-source-registry.d.ts +0 -108
  392. package/cjs/data-source/data-source-registry.d.ts.map +0 -1
  393. package/cjs/data-source/data-source-registry.js +0 -145
  394. package/cjs/data-source/data-source-registry.js.map +0 -1
  395. package/cjs/data-source/data-source.d.ts +0 -147
  396. package/cjs/data-source/data-source.d.ts.map +0 -1
  397. package/cjs/data-source/data-source.js +0 -83
  398. package/cjs/data-source/data-source.js.map +0 -1
  399. package/cjs/database-dirty-tracker.d.ts +0 -252
  400. package/cjs/database-dirty-tracker.d.ts.map +0 -1
  401. package/cjs/database-dirty-tracker.js +0 -386
  402. package/cjs/database-dirty-tracker.js.map +0 -1
  403. package/cjs/drivers/mongodb/mongodb-blueprint.d.ts +0 -30
  404. package/cjs/drivers/mongodb/mongodb-blueprint.d.ts.map +0 -1
  405. package/cjs/drivers/mongodb/mongodb-blueprint.js +0 -51
  406. package/cjs/drivers/mongodb/mongodb-blueprint.js.map +0 -1
  407. package/cjs/drivers/mongodb/mongodb-driver.d.ts +0 -325
  408. package/cjs/drivers/mongodb/mongodb-driver.d.ts.map +0 -1
  409. package/cjs/drivers/mongodb/mongodb-driver.js +0 -845
  410. package/cjs/drivers/mongodb/mongodb-driver.js.map +0 -1
  411. package/cjs/drivers/mongodb/mongodb-id-generator.d.ts +0 -116
  412. package/cjs/drivers/mongodb/mongodb-id-generator.d.ts.map +0 -1
  413. package/cjs/drivers/mongodb/mongodb-id-generator.js +0 -149
  414. package/cjs/drivers/mongodb/mongodb-id-generator.js.map +0 -1
  415. package/cjs/drivers/mongodb/mongodb-migration-driver.d.ts +0 -317
  416. package/cjs/drivers/mongodb/mongodb-migration-driver.d.ts.map +0 -1
  417. package/cjs/drivers/mongodb/mongodb-migration-driver.js +0 -666
  418. package/cjs/drivers/mongodb/mongodb-migration-driver.js.map +0 -1
  419. package/cjs/drivers/mongodb/mongodb-query-builder.d.ts +0 -1122
  420. package/cjs/drivers/mongodb/mongodb-query-builder.d.ts.map +0 -1
  421. package/cjs/drivers/mongodb/mongodb-query-builder.js +0 -1988
  422. package/cjs/drivers/mongodb/mongodb-query-builder.js.map +0 -1
  423. package/cjs/drivers/mongodb/mongodb-query-operations.d.ts +0 -226
  424. package/cjs/drivers/mongodb/mongodb-query-operations.d.ts.map +0 -1
  425. package/cjs/drivers/mongodb/mongodb-query-operations.js +0 -270
  426. package/cjs/drivers/mongodb/mongodb-query-operations.js.map +0 -1
  427. package/cjs/drivers/mongodb/mongodb-query-parser.d.ts +0 -262
  428. package/cjs/drivers/mongodb/mongodb-query-parser.d.ts.map +0 -1
  429. package/cjs/drivers/mongodb/mongodb-query-parser.js +0 -1351
  430. package/cjs/drivers/mongodb/mongodb-query-parser.js.map +0 -1
  431. package/cjs/drivers/mongodb/mongodb-sync-adapter.d.ts +0 -79
  432. package/cjs/drivers/mongodb/mongodb-sync-adapter.d.ts.map +0 -1
  433. package/cjs/drivers/mongodb/mongodb-sync-adapter.js +0 -146
  434. package/cjs/drivers/mongodb/mongodb-sync-adapter.js.map +0 -1
  435. package/cjs/drivers/mongodb/types.d.ts +0 -43
  436. package/cjs/drivers/mongodb/types.d.ts.map +0 -1
  437. package/cjs/drivers/postgres/index.d.ts +0 -16
  438. package/cjs/drivers/postgres/index.d.ts.map +0 -1
  439. package/cjs/drivers/postgres/postgres-blueprint.d.ts +0 -64
  440. package/cjs/drivers/postgres/postgres-blueprint.d.ts.map +0 -1
  441. package/cjs/drivers/postgres/postgres-blueprint.js +0 -121
  442. package/cjs/drivers/postgres/postgres-blueprint.js.map +0 -1
  443. package/cjs/drivers/postgres/postgres-dialect.d.ts +0 -136
  444. package/cjs/drivers/postgres/postgres-dialect.d.ts.map +0 -1
  445. package/cjs/drivers/postgres/postgres-dialect.js +0 -268
  446. package/cjs/drivers/postgres/postgres-dialect.js.map +0 -1
  447. package/cjs/drivers/postgres/postgres-driver.d.ts +0 -432
  448. package/cjs/drivers/postgres/postgres-driver.d.ts.map +0 -1
  449. package/cjs/drivers/postgres/postgres-driver.js +0 -1008
  450. package/cjs/drivers/postgres/postgres-driver.js.map +0 -1
  451. package/cjs/drivers/postgres/postgres-migration-driver.d.ts +0 -397
  452. package/cjs/drivers/postgres/postgres-migration-driver.d.ts.map +0 -1
  453. package/cjs/drivers/postgres/postgres-migration-driver.js +0 -900
  454. package/cjs/drivers/postgres/postgres-migration-driver.js.map +0 -1
  455. package/cjs/drivers/postgres/postgres-query-builder.d.ts +0 -254
  456. package/cjs/drivers/postgres/postgres-query-builder.d.ts.map +0 -1
  457. package/cjs/drivers/postgres/postgres-query-builder.js +0 -933
  458. package/cjs/drivers/postgres/postgres-query-builder.js.map +0 -1
  459. package/cjs/drivers/postgres/postgres-query-parser.d.ts +0 -328
  460. package/cjs/drivers/postgres/postgres-query-parser.d.ts.map +0 -1
  461. package/cjs/drivers/postgres/postgres-query-parser.js +0 -868
  462. package/cjs/drivers/postgres/postgres-query-parser.js.map +0 -1
  463. package/cjs/drivers/postgres/postgres-sql-serializer.d.ts +0 -37
  464. package/cjs/drivers/postgres/postgres-sql-serializer.d.ts.map +0 -1
  465. package/cjs/drivers/postgres/postgres-sql-serializer.js +0 -400
  466. package/cjs/drivers/postgres/postgres-sql-serializer.js.map +0 -1
  467. package/cjs/drivers/postgres/postgres-sync-adapter.d.ts +0 -83
  468. package/cjs/drivers/postgres/postgres-sync-adapter.d.ts.map +0 -1
  469. package/cjs/drivers/postgres/postgres-sync-adapter.js +0 -204
  470. package/cjs/drivers/postgres/postgres-sync-adapter.js.map +0 -1
  471. package/cjs/drivers/postgres/types.d.ts +0 -144
  472. package/cjs/drivers/postgres/types.d.ts.map +0 -1
  473. package/cjs/drivers/sql/index.d.ts +0 -10
  474. package/cjs/drivers/sql/index.d.ts.map +0 -1
  475. package/cjs/drivers/sql/sql-dialect.contract.d.ts +0 -204
  476. package/cjs/drivers/sql/sql-dialect.contract.d.ts.map +0 -1
  477. package/cjs/drivers/sql/sql-types.d.ts +0 -202
  478. package/cjs/drivers/sql/sql-types.d.ts.map +0 -1
  479. package/cjs/errors/missing-data-source.error.d.ts +0 -22
  480. package/cjs/errors/missing-data-source.error.d.ts.map +0 -1
  481. package/cjs/errors/missing-data-source.error.js +0 -29
  482. package/cjs/errors/missing-data-source.error.js.map +0 -1
  483. package/cjs/errors/transaction-rollback.error.d.ts +0 -20
  484. package/cjs/errors/transaction-rollback.error.d.ts.map +0 -1
  485. package/cjs/errors/transaction-rollback.error.js +0 -27
  486. package/cjs/errors/transaction-rollback.error.js.map +0 -1
  487. package/cjs/events/model-events.d.ts +0 -231
  488. package/cjs/events/model-events.d.ts.map +0 -1
  489. package/cjs/events/model-events.js +0 -259
  490. package/cjs/events/model-events.js.map +0 -1
  491. package/cjs/expressions/aggregate-expressions.d.ts +0 -215
  492. package/cjs/expressions/aggregate-expressions.d.ts.map +0 -1
  493. package/cjs/expressions/aggregate-expressions.js +0 -221
  494. package/cjs/expressions/aggregate-expressions.js.map +0 -1
  495. package/cjs/expressions/index.d.ts +0 -2
  496. package/cjs/expressions/index.d.ts.map +0 -1
  497. package/cjs/index.d.ts +0 -45
  498. package/cjs/index.d.ts.map +0 -1
  499. package/cjs/index.js +0 -1
  500. package/cjs/index.js.map +0 -1
  501. package/cjs/migration/column-builder.d.ts +0 -417
  502. package/cjs/migration/column-builder.d.ts.map +0 -1
  503. package/cjs/migration/column-builder.js +0 -586
  504. package/cjs/migration/column-builder.js.map +0 -1
  505. package/cjs/migration/column-helpers.d.ts +0 -275
  506. package/cjs/migration/column-helpers.d.ts.map +0 -1
  507. package/cjs/migration/column-helpers.js +0 -389
  508. package/cjs/migration/column-helpers.js.map +0 -1
  509. package/cjs/migration/foreign-key-builder.d.ts +0 -103
  510. package/cjs/migration/foreign-key-builder.d.ts.map +0 -1
  511. package/cjs/migration/foreign-key-builder.js +0 -121
  512. package/cjs/migration/foreign-key-builder.js.map +0 -1
  513. package/cjs/migration/index.d.ts +0 -7
  514. package/cjs/migration/index.d.ts.map +0 -1
  515. package/cjs/migration/migration-runner.d.ts +0 -278
  516. package/cjs/migration/migration-runner.d.ts.map +0 -1
  517. package/cjs/migration/migration-runner.js +0 -815
  518. package/cjs/migration/migration-runner.js.map +0 -1
  519. package/cjs/migration/migration.d.ts +0 -1988
  520. package/cjs/migration/migration.d.ts.map +0 -1
  521. package/cjs/migration/migration.js +0 -2162
  522. package/cjs/migration/migration.js.map +0 -1
  523. package/cjs/migration/sql-grammar.d.ts +0 -61
  524. package/cjs/migration/sql-grammar.d.ts.map +0 -1
  525. package/cjs/migration/sql-grammar.js +0 -164
  526. package/cjs/migration/sql-grammar.js.map +0 -1
  527. package/cjs/migration/sql-serializer.d.ts +0 -22
  528. package/cjs/migration/sql-serializer.d.ts.map +0 -1
  529. package/cjs/migration/sql-serializer.js +0 -26
  530. package/cjs/migration/sql-serializer.js.map +0 -1
  531. package/cjs/migration/types.d.ts +0 -155
  532. package/cjs/migration/types.d.ts.map +0 -1
  533. package/cjs/model/methods/accessor-methods.d.ts +0 -13
  534. package/cjs/model/methods/accessor-methods.d.ts.map +0 -1
  535. package/cjs/model/methods/accessor-methods.js +0 -51
  536. package/cjs/model/methods/accessor-methods.js.map +0 -1
  537. package/cjs/model/methods/delete-methods.d.ts +0 -10
  538. package/cjs/model/methods/delete-methods.d.ts.map +0 -1
  539. package/cjs/model/methods/delete-methods.js +0 -10
  540. package/cjs/model/methods/delete-methods.js.map +0 -1
  541. package/cjs/model/methods/dirty-methods.d.ts +0 -10
  542. package/cjs/model/methods/dirty-methods.d.ts.map +0 -1
  543. package/cjs/model/methods/dirty-methods.js +0 -15
  544. package/cjs/model/methods/dirty-methods.js.map +0 -1
  545. package/cjs/model/methods/hydration-methods.d.ts +0 -10
  546. package/cjs/model/methods/hydration-methods.d.ts.map +0 -1
  547. package/cjs/model/methods/hydration-methods.js +0 -57
  548. package/cjs/model/methods/hydration-methods.js.map +0 -1
  549. package/cjs/model/methods/instance-event-methods.d.ts +0 -7
  550. package/cjs/model/methods/instance-event-methods.d.ts.map +0 -1
  551. package/cjs/model/methods/instance-event-methods.js +0 -15
  552. package/cjs/model/methods/instance-event-methods.js.map +0 -1
  553. package/cjs/model/methods/meta-methods.d.ts +0 -7
  554. package/cjs/model/methods/meta-methods.d.ts.map +0 -1
  555. package/cjs/model/methods/meta-methods.js +0 -78
  556. package/cjs/model/methods/meta-methods.js.map +0 -1
  557. package/cjs/model/methods/query-methods.d.ts +0 -24
  558. package/cjs/model/methods/query-methods.d.ts.map +0 -1
  559. package/cjs/model/methods/query-methods.js +0 -164
  560. package/cjs/model/methods/query-methods.js.map +0 -1
  561. package/cjs/model/methods/restore-methods.d.ts +0 -10
  562. package/cjs/model/methods/restore-methods.d.ts.map +0 -1
  563. package/cjs/model/methods/restore-methods.js +0 -13
  564. package/cjs/model/methods/restore-methods.js.map +0 -1
  565. package/cjs/model/methods/scope-methods.d.ts +0 -7
  566. package/cjs/model/methods/scope-methods.d.ts.map +0 -1
  567. package/cjs/model/methods/scope-methods.js +0 -15
  568. package/cjs/model/methods/scope-methods.js.map +0 -1
  569. package/cjs/model/methods/serialization-methods.d.ts +0 -3
  570. package/cjs/model/methods/serialization-methods.d.ts.map +0 -1
  571. package/cjs/model/methods/serialization-methods.js +0 -27
  572. package/cjs/model/methods/serialization-methods.js.map +0 -1
  573. package/cjs/model/methods/static-event-methods.d.ts +0 -9
  574. package/cjs/model/methods/static-event-methods.d.ts.map +0 -1
  575. package/cjs/model/methods/static-event-methods.js +0 -29
  576. package/cjs/model/methods/static-event-methods.js.map +0 -1
  577. package/cjs/model/methods/write-methods.d.ts +0 -10
  578. package/cjs/model/methods/write-methods.d.ts.map +0 -1
  579. package/cjs/model/methods/write-methods.js +0 -52
  580. package/cjs/model/methods/write-methods.js.map +0 -1
  581. package/cjs/model/model.d.ts +0 -1647
  582. package/cjs/model/model.d.ts.map +0 -1
  583. package/cjs/model/model.js +0 -1657
  584. package/cjs/model/model.js.map +0 -1
  585. package/cjs/model/model.types.d.ts +0 -44
  586. package/cjs/model/model.types.d.ts.map +0 -1
  587. package/cjs/model/register-model.d.ts +0 -81
  588. package/cjs/model/register-model.d.ts.map +0 -1
  589. package/cjs/model/register-model.js +0 -94
  590. package/cjs/model/register-model.js.map +0 -1
  591. package/cjs/query-builder/query-builder.d.ts +0 -556
  592. package/cjs/query-builder/query-builder.d.ts.map +0 -1
  593. package/cjs/query-builder/query-builder.js +0 -1070
  594. package/cjs/query-builder/query-builder.js.map +0 -1
  595. package/cjs/relations/helpers.d.ts +0 -156
  596. package/cjs/relations/helpers.d.ts.map +0 -1
  597. package/cjs/relations/helpers.js +0 -202
  598. package/cjs/relations/helpers.js.map +0 -1
  599. package/cjs/relations/index.d.ts +0 -35
  600. package/cjs/relations/index.d.ts.map +0 -1
  601. package/cjs/relations/pivot-operations.d.ts +0 -160
  602. package/cjs/relations/pivot-operations.d.ts.map +0 -1
  603. package/cjs/relations/pivot-operations.js +0 -293
  604. package/cjs/relations/pivot-operations.js.map +0 -1
  605. package/cjs/relations/relation-hydrator.d.ts +0 -68
  606. package/cjs/relations/relation-hydrator.d.ts.map +0 -1
  607. package/cjs/relations/relation-hydrator.js +0 -81
  608. package/cjs/relations/relation-hydrator.js.map +0 -1
  609. package/cjs/relations/relation-loader.d.ts +0 -194
  610. package/cjs/relations/relation-loader.d.ts.map +0 -1
  611. package/cjs/relations/relation-loader.js +0 -466
  612. package/cjs/relations/relation-loader.js.map +0 -1
  613. package/cjs/relations/types.d.ts +0 -306
  614. package/cjs/relations/types.d.ts.map +0 -1
  615. package/cjs/remover/database-remover.d.ts +0 -100
  616. package/cjs/remover/database-remover.d.ts.map +0 -1
  617. package/cjs/remover/database-remover.js +0 -214
  618. package/cjs/remover/database-remover.js.map +0 -1
  619. package/cjs/restorer/database-restorer.d.ts +0 -131
  620. package/cjs/restorer/database-restorer.d.ts.map +0 -1
  621. package/cjs/restorer/database-restorer.js +0 -434
  622. package/cjs/restorer/database-restorer.js.map +0 -1
  623. package/cjs/sql-database-dirty-tracker.d.ts +0 -13
  624. package/cjs/sql-database-dirty-tracker.d.ts.map +0 -1
  625. package/cjs/sql-database-dirty-tracker.js +0 -14
  626. package/cjs/sql-database-dirty-tracker.js.map +0 -1
  627. package/cjs/sync/index.d.ts +0 -12
  628. package/cjs/sync/index.d.ts.map +0 -1
  629. package/cjs/sync/model-events.d.ts +0 -62
  630. package/cjs/sync/model-events.d.ts.map +0 -1
  631. package/cjs/sync/model-events.js +0 -49
  632. package/cjs/sync/model-events.js.map +0 -1
  633. package/cjs/sync/model-sync-operation.d.ts +0 -163
  634. package/cjs/sync/model-sync-operation.d.ts.map +0 -1
  635. package/cjs/sync/model-sync-operation.js +0 -292
  636. package/cjs/sync/model-sync-operation.js.map +0 -1
  637. package/cjs/sync/model-sync.d.ts +0 -130
  638. package/cjs/sync/model-sync.d.ts.map +0 -1
  639. package/cjs/sync/model-sync.js +0 -178
  640. package/cjs/sync/model-sync.js.map +0 -1
  641. package/cjs/sync/sync-context.d.ts +0 -70
  642. package/cjs/sync/sync-context.d.ts.map +0 -1
  643. package/cjs/sync/sync-context.js +0 -101
  644. package/cjs/sync/sync-context.js.map +0 -1
  645. package/cjs/sync/sync-manager.d.ts +0 -213
  646. package/cjs/sync/sync-manager.d.ts.map +0 -1
  647. package/cjs/sync/sync-manager.js +0 -689
  648. package/cjs/sync/sync-manager.js.map +0 -1
  649. package/cjs/sync/types.d.ts +0 -289
  650. package/cjs/sync/types.d.ts.map +0 -1
  651. package/cjs/test-migrations/test-enhanced-features.migration.d.ts +0 -15
  652. package/cjs/test-migrations/test-enhanced-features.migration.d.ts.map +0 -1
  653. package/cjs/types.d.ts +0 -371
  654. package/cjs/types.d.ts.map +0 -1
  655. package/cjs/utils/connect-to-database.d.ts +0 -307
  656. package/cjs/utils/connect-to-database.d.ts.map +0 -1
  657. package/cjs/utils/connect-to-database.js +0 -130
  658. package/cjs/utils/connect-to-database.js.map +0 -1
  659. package/cjs/utils/database-writer.utils.d.ts +0 -15
  660. package/cjs/utils/database-writer.utils.d.ts.map +0 -1
  661. package/cjs/utils/database-writer.utils.js +0 -14
  662. package/cjs/utils/database-writer.utils.js.map +0 -1
  663. package/cjs/utils/define-model.js +0 -100
  664. package/cjs/utils/define-model.js.map +0 -1
  665. package/cjs/utils/is-valid-date-value.d.ts +0 -5
  666. package/cjs/utils/is-valid-date-value.d.ts.map +0 -1
  667. package/cjs/utils/is-valid-date-value.js +0 -25
  668. package/cjs/utils/is-valid-date-value.js.map +0 -1
  669. package/cjs/utils/once-connected.d.ts +0 -146
  670. package/cjs/utils/once-connected.d.ts.map +0 -1
  671. package/cjs/utils/once-connected.js +0 -251
  672. package/cjs/utils/once-connected.js.map +0 -1
  673. package/cjs/validation/database-seal-plugins.d.ts +0 -12
  674. package/cjs/validation/database-seal-plugins.d.ts.map +0 -1
  675. package/cjs/validation/database-seal-plugins.js +0 -1
  676. package/cjs/validation/database-seal-plugins.js.map +0 -1
  677. package/cjs/validation/database-writer-validation-error.d.ts +0 -97
  678. package/cjs/validation/database-writer-validation-error.d.ts.map +0 -1
  679. package/cjs/validation/database-writer-validation-error.js +0 -160
  680. package/cjs/validation/database-writer-validation-error.js.map +0 -1
  681. package/cjs/validation/index.d.ts +0 -3
  682. package/cjs/validation/index.d.ts.map +0 -1
  683. package/cjs/validation/mutators/embed-mutator.d.ts +0 -9
  684. package/cjs/validation/mutators/embed-mutator.d.ts.map +0 -1
  685. package/cjs/validation/mutators/embed-mutator.js +0 -33
  686. package/cjs/validation/mutators/embed-mutator.js.map +0 -1
  687. package/cjs/validation/plugins/embed-validator-plugin.d.ts +0 -24
  688. package/cjs/validation/plugins/embed-validator-plugin.d.ts.map +0 -1
  689. package/cjs/validation/plugins/embed-validator-plugin.js +0 -18
  690. package/cjs/validation/plugins/embed-validator-plugin.js.map +0 -1
  691. package/cjs/validation/rules/database-model-rule.d.ts +0 -7
  692. package/cjs/validation/rules/database-model-rule.d.ts.map +0 -1
  693. package/cjs/validation/rules/database-model-rule.js +0 -27
  694. package/cjs/validation/rules/database-model-rule.js.map +0 -1
  695. package/cjs/validation/transformers/embed-model-transformer.d.ts +0 -3
  696. package/cjs/validation/transformers/embed-model-transformer.d.ts.map +0 -1
  697. package/cjs/validation/transformers/embed-model-transformer.js +0 -18
  698. package/cjs/validation/transformers/embed-model-transformer.js.map +0 -1
  699. package/cjs/validation/validators/embed-validator.d.ts +0 -21
  700. package/cjs/validation/validators/embed-validator.d.ts.map +0 -1
  701. package/cjs/validation/validators/embed-validator.js +0 -43
  702. package/cjs/validation/validators/embed-validator.js.map +0 -1
  703. package/cjs/writer/database-writer.d.ts +0 -174
  704. package/cjs/writer/database-writer.d.ts.map +0 -1
  705. package/cjs/writer/database-writer.js +0 -400
  706. package/cjs/writer/database-writer.js.map +0 -1
  707. package/esm/context/database-data-source-context.d.ts +0 -29
  708. package/esm/context/database-data-source-context.d.ts.map +0 -1
  709. package/esm/context/database-data-source-context.js +0 -28
  710. package/esm/context/database-data-source-context.js.map +0 -1
  711. package/esm/context/database-transaction-context.d.ts +0 -35
  712. package/esm/context/database-transaction-context.d.ts.map +0 -1
  713. package/esm/context/database-transaction-context.js +0 -40
  714. package/esm/context/database-transaction-context.js.map +0 -1
  715. package/esm/contracts/database-driver.contract.d.ts +0 -450
  716. package/esm/contracts/database-driver.contract.d.ts.map +0 -1
  717. package/esm/contracts/database-id-generator.contract.d.ts +0 -109
  718. package/esm/contracts/database-id-generator.contract.d.ts.map +0 -1
  719. package/esm/contracts/database-remover.contract.d.ts +0 -104
  720. package/esm/contracts/database-remover.contract.d.ts.map +0 -1
  721. package/esm/contracts/database-restorer.contract.d.ts +0 -143
  722. package/esm/contracts/database-restorer.contract.d.ts.map +0 -1
  723. package/esm/contracts/database-writer.contract.d.ts +0 -119
  724. package/esm/contracts/database-writer.contract.d.ts.map +0 -1
  725. package/esm/contracts/driver-blueprint.contract.d.ts +0 -49
  726. package/esm/contracts/driver-blueprint.contract.d.ts.map +0 -1
  727. package/esm/contracts/index.d.ts +0 -10
  728. package/esm/contracts/index.d.ts.map +0 -1
  729. package/esm/contracts/migration-driver.contract.d.ts +0 -522
  730. package/esm/contracts/migration-driver.contract.d.ts.map +0 -1
  731. package/esm/contracts/query-builder.contract.d.ts +0 -1609
  732. package/esm/contracts/query-builder.contract.d.ts.map +0 -1
  733. package/esm/contracts/sync-adapter.contract.d.ts +0 -58
  734. package/esm/contracts/sync-adapter.contract.d.ts.map +0 -1
  735. package/esm/data-source/data-source-registry.d.ts +0 -108
  736. package/esm/data-source/data-source-registry.d.ts.map +0 -1
  737. package/esm/data-source/data-source-registry.js +0 -145
  738. package/esm/data-source/data-source-registry.js.map +0 -1
  739. package/esm/data-source/data-source.d.ts +0 -147
  740. package/esm/data-source/data-source.d.ts.map +0 -1
  741. package/esm/data-source/data-source.js +0 -83
  742. package/esm/data-source/data-source.js.map +0 -1
  743. package/esm/database-dirty-tracker.d.ts +0 -252
  744. package/esm/database-dirty-tracker.d.ts.map +0 -1
  745. package/esm/database-dirty-tracker.js +0 -386
  746. package/esm/database-dirty-tracker.js.map +0 -1
  747. package/esm/drivers/mongodb/mongodb-blueprint.d.ts +0 -30
  748. package/esm/drivers/mongodb/mongodb-blueprint.d.ts.map +0 -1
  749. package/esm/drivers/mongodb/mongodb-blueprint.js +0 -51
  750. package/esm/drivers/mongodb/mongodb-blueprint.js.map +0 -1
  751. package/esm/drivers/mongodb/mongodb-driver.d.ts +0 -325
  752. package/esm/drivers/mongodb/mongodb-driver.d.ts.map +0 -1
  753. package/esm/drivers/mongodb/mongodb-driver.js +0 -845
  754. package/esm/drivers/mongodb/mongodb-driver.js.map +0 -1
  755. package/esm/drivers/mongodb/mongodb-id-generator.d.ts +0 -116
  756. package/esm/drivers/mongodb/mongodb-id-generator.d.ts.map +0 -1
  757. package/esm/drivers/mongodb/mongodb-id-generator.js +0 -149
  758. package/esm/drivers/mongodb/mongodb-id-generator.js.map +0 -1
  759. package/esm/drivers/mongodb/mongodb-migration-driver.d.ts +0 -317
  760. package/esm/drivers/mongodb/mongodb-migration-driver.d.ts.map +0 -1
  761. package/esm/drivers/mongodb/mongodb-migration-driver.js +0 -666
  762. package/esm/drivers/mongodb/mongodb-migration-driver.js.map +0 -1
  763. package/esm/drivers/mongodb/mongodb-query-builder.d.ts +0 -1122
  764. package/esm/drivers/mongodb/mongodb-query-builder.d.ts.map +0 -1
  765. package/esm/drivers/mongodb/mongodb-query-builder.js +0 -1988
  766. package/esm/drivers/mongodb/mongodb-query-builder.js.map +0 -1
  767. package/esm/drivers/mongodb/mongodb-query-operations.d.ts +0 -226
  768. package/esm/drivers/mongodb/mongodb-query-operations.d.ts.map +0 -1
  769. package/esm/drivers/mongodb/mongodb-query-operations.js +0 -270
  770. package/esm/drivers/mongodb/mongodb-query-operations.js.map +0 -1
  771. package/esm/drivers/mongodb/mongodb-query-parser.d.ts +0 -262
  772. package/esm/drivers/mongodb/mongodb-query-parser.d.ts.map +0 -1
  773. package/esm/drivers/mongodb/mongodb-query-parser.js +0 -1351
  774. package/esm/drivers/mongodb/mongodb-query-parser.js.map +0 -1
  775. package/esm/drivers/mongodb/mongodb-sync-adapter.d.ts +0 -79
  776. package/esm/drivers/mongodb/mongodb-sync-adapter.d.ts.map +0 -1
  777. package/esm/drivers/mongodb/mongodb-sync-adapter.js +0 -146
  778. package/esm/drivers/mongodb/mongodb-sync-adapter.js.map +0 -1
  779. package/esm/drivers/mongodb/types.d.ts +0 -43
  780. package/esm/drivers/mongodb/types.d.ts.map +0 -1
  781. package/esm/drivers/postgres/index.d.ts +0 -16
  782. package/esm/drivers/postgres/index.d.ts.map +0 -1
  783. package/esm/drivers/postgres/postgres-blueprint.d.ts +0 -64
  784. package/esm/drivers/postgres/postgres-blueprint.d.ts.map +0 -1
  785. package/esm/drivers/postgres/postgres-blueprint.js +0 -121
  786. package/esm/drivers/postgres/postgres-blueprint.js.map +0 -1
  787. package/esm/drivers/postgres/postgres-dialect.d.ts +0 -136
  788. package/esm/drivers/postgres/postgres-dialect.d.ts.map +0 -1
  789. package/esm/drivers/postgres/postgres-dialect.js +0 -268
  790. package/esm/drivers/postgres/postgres-dialect.js.map +0 -1
  791. package/esm/drivers/postgres/postgres-driver.d.ts +0 -432
  792. package/esm/drivers/postgres/postgres-driver.d.ts.map +0 -1
  793. package/esm/drivers/postgres/postgres-driver.js +0 -1008
  794. package/esm/drivers/postgres/postgres-driver.js.map +0 -1
  795. package/esm/drivers/postgres/postgres-migration-driver.d.ts +0 -397
  796. package/esm/drivers/postgres/postgres-migration-driver.d.ts.map +0 -1
  797. package/esm/drivers/postgres/postgres-migration-driver.js +0 -900
  798. package/esm/drivers/postgres/postgres-migration-driver.js.map +0 -1
  799. package/esm/drivers/postgres/postgres-query-builder.d.ts +0 -254
  800. package/esm/drivers/postgres/postgres-query-builder.d.ts.map +0 -1
  801. package/esm/drivers/postgres/postgres-query-builder.js +0 -933
  802. package/esm/drivers/postgres/postgres-query-builder.js.map +0 -1
  803. package/esm/drivers/postgres/postgres-query-parser.d.ts +0 -328
  804. package/esm/drivers/postgres/postgres-query-parser.d.ts.map +0 -1
  805. package/esm/drivers/postgres/postgres-query-parser.js +0 -868
  806. package/esm/drivers/postgres/postgres-query-parser.js.map +0 -1
  807. package/esm/drivers/postgres/postgres-sql-serializer.d.ts +0 -37
  808. package/esm/drivers/postgres/postgres-sql-serializer.d.ts.map +0 -1
  809. package/esm/drivers/postgres/postgres-sql-serializer.js +0 -400
  810. package/esm/drivers/postgres/postgres-sql-serializer.js.map +0 -1
  811. package/esm/drivers/postgres/postgres-sync-adapter.d.ts +0 -83
  812. package/esm/drivers/postgres/postgres-sync-adapter.d.ts.map +0 -1
  813. package/esm/drivers/postgres/postgres-sync-adapter.js +0 -204
  814. package/esm/drivers/postgres/postgres-sync-adapter.js.map +0 -1
  815. package/esm/drivers/postgres/types.d.ts +0 -144
  816. package/esm/drivers/postgres/types.d.ts.map +0 -1
  817. package/esm/drivers/sql/index.d.ts +0 -10
  818. package/esm/drivers/sql/index.d.ts.map +0 -1
  819. package/esm/drivers/sql/sql-dialect.contract.d.ts +0 -204
  820. package/esm/drivers/sql/sql-dialect.contract.d.ts.map +0 -1
  821. package/esm/drivers/sql/sql-types.d.ts +0 -202
  822. package/esm/drivers/sql/sql-types.d.ts.map +0 -1
  823. package/esm/errors/missing-data-source.error.d.ts +0 -22
  824. package/esm/errors/missing-data-source.error.d.ts.map +0 -1
  825. package/esm/errors/missing-data-source.error.js +0 -29
  826. package/esm/errors/missing-data-source.error.js.map +0 -1
  827. package/esm/errors/transaction-rollback.error.d.ts +0 -20
  828. package/esm/errors/transaction-rollback.error.d.ts.map +0 -1
  829. package/esm/errors/transaction-rollback.error.js +0 -27
  830. package/esm/errors/transaction-rollback.error.js.map +0 -1
  831. package/esm/events/model-events.d.ts +0 -231
  832. package/esm/events/model-events.d.ts.map +0 -1
  833. package/esm/events/model-events.js +0 -259
  834. package/esm/events/model-events.js.map +0 -1
  835. package/esm/expressions/aggregate-expressions.d.ts +0 -215
  836. package/esm/expressions/aggregate-expressions.d.ts.map +0 -1
  837. package/esm/expressions/aggregate-expressions.js +0 -221
  838. package/esm/expressions/aggregate-expressions.js.map +0 -1
  839. package/esm/expressions/index.d.ts +0 -2
  840. package/esm/expressions/index.d.ts.map +0 -1
  841. package/esm/index.d.ts +0 -45
  842. package/esm/index.d.ts.map +0 -1
  843. package/esm/index.js +0 -1
  844. package/esm/index.js.map +0 -1
  845. package/esm/migration/column-builder.d.ts +0 -417
  846. package/esm/migration/column-builder.d.ts.map +0 -1
  847. package/esm/migration/column-builder.js +0 -586
  848. package/esm/migration/column-builder.js.map +0 -1
  849. package/esm/migration/column-helpers.d.ts +0 -275
  850. package/esm/migration/column-helpers.d.ts.map +0 -1
  851. package/esm/migration/column-helpers.js +0 -389
  852. package/esm/migration/column-helpers.js.map +0 -1
  853. package/esm/migration/foreign-key-builder.d.ts +0 -103
  854. package/esm/migration/foreign-key-builder.d.ts.map +0 -1
  855. package/esm/migration/foreign-key-builder.js +0 -121
  856. package/esm/migration/foreign-key-builder.js.map +0 -1
  857. package/esm/migration/index.d.ts +0 -7
  858. package/esm/migration/index.d.ts.map +0 -1
  859. package/esm/migration/migration-runner.d.ts +0 -278
  860. package/esm/migration/migration-runner.d.ts.map +0 -1
  861. package/esm/migration/migration-runner.js +0 -815
  862. package/esm/migration/migration-runner.js.map +0 -1
  863. package/esm/migration/migration.d.ts +0 -1988
  864. package/esm/migration/migration.d.ts.map +0 -1
  865. package/esm/migration/migration.js +0 -2162
  866. package/esm/migration/migration.js.map +0 -1
  867. package/esm/migration/sql-grammar.d.ts +0 -61
  868. package/esm/migration/sql-grammar.d.ts.map +0 -1
  869. package/esm/migration/sql-grammar.js +0 -164
  870. package/esm/migration/sql-grammar.js.map +0 -1
  871. package/esm/migration/sql-serializer.d.ts +0 -22
  872. package/esm/migration/sql-serializer.d.ts.map +0 -1
  873. package/esm/migration/sql-serializer.js +0 -26
  874. package/esm/migration/sql-serializer.js.map +0 -1
  875. package/esm/migration/types.d.ts +0 -155
  876. package/esm/migration/types.d.ts.map +0 -1
  877. package/esm/model/methods/accessor-methods.d.ts +0 -13
  878. package/esm/model/methods/accessor-methods.d.ts.map +0 -1
  879. package/esm/model/methods/accessor-methods.js +0 -51
  880. package/esm/model/methods/accessor-methods.js.map +0 -1
  881. package/esm/model/methods/delete-methods.d.ts +0 -10
  882. package/esm/model/methods/delete-methods.d.ts.map +0 -1
  883. package/esm/model/methods/delete-methods.js +0 -10
  884. package/esm/model/methods/delete-methods.js.map +0 -1
  885. package/esm/model/methods/dirty-methods.d.ts +0 -10
  886. package/esm/model/methods/dirty-methods.d.ts.map +0 -1
  887. package/esm/model/methods/dirty-methods.js +0 -15
  888. package/esm/model/methods/dirty-methods.js.map +0 -1
  889. package/esm/model/methods/hydration-methods.d.ts +0 -10
  890. package/esm/model/methods/hydration-methods.d.ts.map +0 -1
  891. package/esm/model/methods/hydration-methods.js +0 -57
  892. package/esm/model/methods/hydration-methods.js.map +0 -1
  893. package/esm/model/methods/instance-event-methods.d.ts +0 -7
  894. package/esm/model/methods/instance-event-methods.d.ts.map +0 -1
  895. package/esm/model/methods/instance-event-methods.js +0 -15
  896. package/esm/model/methods/instance-event-methods.js.map +0 -1
  897. package/esm/model/methods/meta-methods.d.ts +0 -7
  898. package/esm/model/methods/meta-methods.d.ts.map +0 -1
  899. package/esm/model/methods/meta-methods.js +0 -78
  900. package/esm/model/methods/meta-methods.js.map +0 -1
  901. package/esm/model/methods/query-methods.d.ts +0 -24
  902. package/esm/model/methods/query-methods.d.ts.map +0 -1
  903. package/esm/model/methods/query-methods.js +0 -164
  904. package/esm/model/methods/query-methods.js.map +0 -1
  905. package/esm/model/methods/restore-methods.d.ts +0 -10
  906. package/esm/model/methods/restore-methods.d.ts.map +0 -1
  907. package/esm/model/methods/restore-methods.js +0 -13
  908. package/esm/model/methods/restore-methods.js.map +0 -1
  909. package/esm/model/methods/scope-methods.d.ts +0 -7
  910. package/esm/model/methods/scope-methods.d.ts.map +0 -1
  911. package/esm/model/methods/scope-methods.js +0 -15
  912. package/esm/model/methods/scope-methods.js.map +0 -1
  913. package/esm/model/methods/serialization-methods.d.ts +0 -3
  914. package/esm/model/methods/serialization-methods.d.ts.map +0 -1
  915. package/esm/model/methods/serialization-methods.js +0 -27
  916. package/esm/model/methods/serialization-methods.js.map +0 -1
  917. package/esm/model/methods/static-event-methods.d.ts +0 -9
  918. package/esm/model/methods/static-event-methods.d.ts.map +0 -1
  919. package/esm/model/methods/static-event-methods.js +0 -29
  920. package/esm/model/methods/static-event-methods.js.map +0 -1
  921. package/esm/model/methods/write-methods.d.ts +0 -10
  922. package/esm/model/methods/write-methods.d.ts.map +0 -1
  923. package/esm/model/methods/write-methods.js +0 -52
  924. package/esm/model/methods/write-methods.js.map +0 -1
  925. package/esm/model/model.d.ts +0 -1647
  926. package/esm/model/model.d.ts.map +0 -1
  927. package/esm/model/model.js +0 -1657
  928. package/esm/model/model.js.map +0 -1
  929. package/esm/model/model.types.d.ts +0 -44
  930. package/esm/model/model.types.d.ts.map +0 -1
  931. package/esm/model/register-model.d.ts +0 -81
  932. package/esm/model/register-model.d.ts.map +0 -1
  933. package/esm/model/register-model.js +0 -94
  934. package/esm/model/register-model.js.map +0 -1
  935. package/esm/query-builder/query-builder.d.ts +0 -556
  936. package/esm/query-builder/query-builder.d.ts.map +0 -1
  937. package/esm/query-builder/query-builder.js +0 -1070
  938. package/esm/query-builder/query-builder.js.map +0 -1
  939. package/esm/relations/helpers.d.ts +0 -156
  940. package/esm/relations/helpers.d.ts.map +0 -1
  941. package/esm/relations/helpers.js +0 -202
  942. package/esm/relations/helpers.js.map +0 -1
  943. package/esm/relations/index.d.ts +0 -35
  944. package/esm/relations/index.d.ts.map +0 -1
  945. package/esm/relations/pivot-operations.d.ts +0 -160
  946. package/esm/relations/pivot-operations.d.ts.map +0 -1
  947. package/esm/relations/pivot-operations.js +0 -293
  948. package/esm/relations/pivot-operations.js.map +0 -1
  949. package/esm/relations/relation-hydrator.d.ts +0 -68
  950. package/esm/relations/relation-hydrator.d.ts.map +0 -1
  951. package/esm/relations/relation-hydrator.js +0 -81
  952. package/esm/relations/relation-hydrator.js.map +0 -1
  953. package/esm/relations/relation-loader.d.ts +0 -194
  954. package/esm/relations/relation-loader.d.ts.map +0 -1
  955. package/esm/relations/relation-loader.js +0 -466
  956. package/esm/relations/relation-loader.js.map +0 -1
  957. package/esm/relations/types.d.ts +0 -306
  958. package/esm/relations/types.d.ts.map +0 -1
  959. package/esm/remover/database-remover.d.ts +0 -100
  960. package/esm/remover/database-remover.d.ts.map +0 -1
  961. package/esm/remover/database-remover.js +0 -214
  962. package/esm/remover/database-remover.js.map +0 -1
  963. package/esm/restorer/database-restorer.d.ts +0 -131
  964. package/esm/restorer/database-restorer.d.ts.map +0 -1
  965. package/esm/restorer/database-restorer.js +0 -434
  966. package/esm/restorer/database-restorer.js.map +0 -1
  967. package/esm/sql-database-dirty-tracker.d.ts +0 -13
  968. package/esm/sql-database-dirty-tracker.d.ts.map +0 -1
  969. package/esm/sql-database-dirty-tracker.js +0 -14
  970. package/esm/sql-database-dirty-tracker.js.map +0 -1
  971. package/esm/sync/index.d.ts +0 -12
  972. package/esm/sync/index.d.ts.map +0 -1
  973. package/esm/sync/model-events.d.ts +0 -62
  974. package/esm/sync/model-events.d.ts.map +0 -1
  975. package/esm/sync/model-events.js +0 -49
  976. package/esm/sync/model-events.js.map +0 -1
  977. package/esm/sync/model-sync-operation.d.ts +0 -163
  978. package/esm/sync/model-sync-operation.d.ts.map +0 -1
  979. package/esm/sync/model-sync-operation.js +0 -292
  980. package/esm/sync/model-sync-operation.js.map +0 -1
  981. package/esm/sync/model-sync.d.ts +0 -130
  982. package/esm/sync/model-sync.d.ts.map +0 -1
  983. package/esm/sync/model-sync.js +0 -178
  984. package/esm/sync/model-sync.js.map +0 -1
  985. package/esm/sync/sync-context.d.ts +0 -70
  986. package/esm/sync/sync-context.d.ts.map +0 -1
  987. package/esm/sync/sync-context.js +0 -101
  988. package/esm/sync/sync-context.js.map +0 -1
  989. package/esm/sync/sync-manager.d.ts +0 -213
  990. package/esm/sync/sync-manager.d.ts.map +0 -1
  991. package/esm/sync/sync-manager.js +0 -689
  992. package/esm/sync/sync-manager.js.map +0 -1
  993. package/esm/sync/types.d.ts +0 -289
  994. package/esm/sync/types.d.ts.map +0 -1
  995. package/esm/test-migrations/test-enhanced-features.migration.d.ts +0 -15
  996. package/esm/test-migrations/test-enhanced-features.migration.d.ts.map +0 -1
  997. package/esm/types.d.ts +0 -371
  998. package/esm/types.d.ts.map +0 -1
  999. package/esm/utils/connect-to-database.d.ts +0 -307
  1000. package/esm/utils/connect-to-database.d.ts.map +0 -1
  1001. package/esm/utils/connect-to-database.js +0 -130
  1002. package/esm/utils/connect-to-database.js.map +0 -1
  1003. package/esm/utils/database-writer.utils.d.ts +0 -15
  1004. package/esm/utils/database-writer.utils.d.ts.map +0 -1
  1005. package/esm/utils/database-writer.utils.js +0 -14
  1006. package/esm/utils/database-writer.utils.js.map +0 -1
  1007. package/esm/utils/define-model.js +0 -100
  1008. package/esm/utils/define-model.js.map +0 -1
  1009. package/esm/utils/is-valid-date-value.d.ts +0 -5
  1010. package/esm/utils/is-valid-date-value.d.ts.map +0 -1
  1011. package/esm/utils/is-valid-date-value.js +0 -25
  1012. package/esm/utils/is-valid-date-value.js.map +0 -1
  1013. package/esm/utils/once-connected.d.ts +0 -146
  1014. package/esm/utils/once-connected.d.ts.map +0 -1
  1015. package/esm/utils/once-connected.js +0 -251
  1016. package/esm/utils/once-connected.js.map +0 -1
  1017. package/esm/validation/database-seal-plugins.d.ts +0 -12
  1018. package/esm/validation/database-seal-plugins.d.ts.map +0 -1
  1019. package/esm/validation/database-seal-plugins.js +0 -1
  1020. package/esm/validation/database-seal-plugins.js.map +0 -1
  1021. package/esm/validation/database-writer-validation-error.d.ts +0 -97
  1022. package/esm/validation/database-writer-validation-error.d.ts.map +0 -1
  1023. package/esm/validation/database-writer-validation-error.js +0 -160
  1024. package/esm/validation/database-writer-validation-error.js.map +0 -1
  1025. package/esm/validation/index.d.ts +0 -3
  1026. package/esm/validation/index.d.ts.map +0 -1
  1027. package/esm/validation/mutators/embed-mutator.d.ts +0 -9
  1028. package/esm/validation/mutators/embed-mutator.d.ts.map +0 -1
  1029. package/esm/validation/mutators/embed-mutator.js +0 -33
  1030. package/esm/validation/mutators/embed-mutator.js.map +0 -1
  1031. package/esm/validation/plugins/embed-validator-plugin.d.ts +0 -24
  1032. package/esm/validation/plugins/embed-validator-plugin.d.ts.map +0 -1
  1033. package/esm/validation/plugins/embed-validator-plugin.js +0 -18
  1034. package/esm/validation/plugins/embed-validator-plugin.js.map +0 -1
  1035. package/esm/validation/rules/database-model-rule.d.ts +0 -7
  1036. package/esm/validation/rules/database-model-rule.d.ts.map +0 -1
  1037. package/esm/validation/rules/database-model-rule.js +0 -27
  1038. package/esm/validation/rules/database-model-rule.js.map +0 -1
  1039. package/esm/validation/transformers/embed-model-transformer.d.ts +0 -3
  1040. package/esm/validation/transformers/embed-model-transformer.d.ts.map +0 -1
  1041. package/esm/validation/transformers/embed-model-transformer.js +0 -18
  1042. package/esm/validation/transformers/embed-model-transformer.js.map +0 -1
  1043. package/esm/validation/validators/embed-validator.d.ts +0 -21
  1044. package/esm/validation/validators/embed-validator.d.ts.map +0 -1
  1045. package/esm/validation/validators/embed-validator.js +0 -43
  1046. package/esm/validation/validators/embed-validator.js.map +0 -1
  1047. package/esm/writer/database-writer.d.ts +0 -174
  1048. package/esm/writer/database-writer.d.ts.map +0 -1
  1049. package/esm/writer/database-writer.js +0 -400
  1050. package/esm/writer/database-writer.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.mjs","names":[],"sources":["../../../../../../@warlock.js/cascade/src/query-builder/query-builder.ts"],"sourcesContent":["/**\n * Pure Query Builder Base Class\n *\n * Driver-agnostic operation recorder. All fluent methods push typed entries into\n * `operations[]`. No SQL, no driver references, no table property, no execution.\n *\n * ┌─────────────────────────────────────────────────┐\n * │ Usage contexts │\n * │ (a) Subclassed — PG / Mongo / MySQL / … │\n * │ (b) Instantiated directly (new QueryBuilder()) │\n * │ inside callbacks for: │\n * │ • nested where groups │\n * │ • joinWith constraints │\n * │ • whereExists / whereHas subqueries │\n * └─────────────────────────────────────────────────┘\n *\n * Design rules:\n * - `table` / alias are NOT here — the parser gets them from the executor.\n * - `opIndex` is protected so subclasses can rebuild after direct mutation.\n * - Op type names are stable — parsers switch on them; no renaming without\n * a parser update.\n * - OR-variants keep distinct op types (orWhere, orWhereColumn, …) so existing\n * parsers that switch on type need no changes.\n * - `joinWith` eagerly resolves callbacks → subOps at record time so the\n * driver executor receives a plain data structure, not a live function.\n *\n * @module cascade/query-builder\n */\n\nimport type {\n GroupByInput,\n HavingInput,\n JoinOptions,\n OrderDirection,\n RawExpression,\n WhereCallback,\n WhereObject,\n WhereOperator,\n} from \"../contracts/query-builder.contract\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/**\n * A single recorded query operation.\n * `type` is the discriminator; `data` carries all parameters.\n */\nexport type Op = {\n readonly type: string;\n readonly data: Record<string, unknown>;\n};\n\n/**\n * Constraint value accepted by `joinWith()`.\n *\n * - `string` → comma-separated column shorthand: `\"id,name,createdAt\"`\n * - `fn` → callback receives a bare QueryBuilder to record sub-ops\n *\n * @example\n * joinWith({ actions: \"id,status\" })\n * joinWith({ actions: q => q.where(\"status\", \"pending\").limit(5) })\n */\nexport type JoinWithConstraint = string | ((q: QueryBuilder) => void);\n\n// ============================================================================\n// QUERY BUILDER — CONCRETE, DIRECTLY INSTANTIABLE\n// ============================================================================\n\n/**\n * Pure, driver-agnostic query builder.\n *\n * Records operations in `operations[]`. Subclasses own execution, parsing, and\n * driver-specific clause generation. Safe to instantiate directly inside\n * callbacks where only operation recording is needed.\n *\n * @example\n * ```ts\n * // Driver subclass usage:\n * const users = await User.query()\n * .select([\"id\", \"name\"])\n * .where(\"status\", \"active\")\n * .where(q => q.where(\"role\", \"admin\").orWhere(\"role\", \"mod\"))\n * .orderBy(\"createdAt\", \"desc\")\n * .limit(10)\n * .get();\n *\n * // Direct instantiation (callback context — no driver needed):\n * joinWith({ actions: q => q.where(\"status\", \"pending\").limit(5) });\n * // The sub-QB's operations[] are captured and stored in the joinWith op data.\n * ```\n */\nexport class QueryBuilder<T = unknown> {\n // ════════════════════════════════════════════════════════\n // OPERATION STORE\n // ════════════════════════════════════════════════════════\n\n /** Flat, ordered list of recorded operations. Public for parser access. */\n public operations: Op[] = [];\n\n /**\n * type → ordered list of indices into `operations[]`.\n *\n * Protected (not private) so:\n * - `rebuildIndex()` can reset it after direct `operations[]` mutation.\n * - Subclasses can inspect it without unsafe casts.\n *\n * External consumers should use `getOps(type)` instead.\n */\n protected opIndex: Map<string, number[]> = new Map();\n\n // ════════════════════════════════════════════════════════\n // SCOPE STATE (injected by Model.query(), consumed before execution)\n // ════════════════════════════════════════════════════════\n\n /** Global scope definitions injected by Model.query(). Keyed by scope name. */\n public pendingGlobalScopes?: Map<string, any>;\n /** Local scope callbacks injected by Model.query(). Applied on demand via scope(). */\n public availableLocalScopes?: Map<string, (...args: any[]) => void>;\n /** Names of global scopes that have been intentionally disabled. */\n public disabledGlobalScopes: Set<string> = new Set();\n /** True once the driver subclass has applied pending scopes. */\n public scopesApplied = false;\n\n // ════════════════════════════════════════════════════════\n // RELATION STATE (consumed by driver subclass at execute time)\n // ════════════════════════════════════════════════════════\n\n /** Relations to eager-load via separate queries. */\n public eagerLoadRelations: Map<string, boolean | ((query: any) => void)> = new Map();\n /** Count expressions to emit per result row, keyed by output column alias. */\n public countRelations: Map<string, { relation: string; constraintOps?: Op[] }> = new Map();\n /** Relation definition map injected from the owning Model. */\n public relationDefinitions?: Record<string, any>;\n /** The Model class reference, required for relation resolution. */\n public modelClass?: any;\n\n // ════════════════════════════════════════════════════════\n // CORE INTERNALS\n // ════════════════════════════════════════════════════════\n\n /**\n * Append an operation to `operations[]` and update `opIndex`.\n * Every fluent method calls this.\n */\n protected addOperation(type: string, data: Record<string, unknown>): void {\n const idx = this.operations.length;\n this.operations.push({ type, data });\n const list = this.opIndex.get(type);\n if (list) {\n list.push(idx);\n } else {\n this.opIndex.set(type, [idx]);\n }\n }\n\n /**\n * Return all recorded operations of the specified types in original\n * insertion order.\n *\n * @example\n * builder.getOps(\"where\", \"orWhere\", \"whereIn\")\n */\n public getOps(...types: string[]): Op[] {\n if (types.length === 1) {\n return (this.opIndex.get(types[0]) ?? []).map((i) => this.operations[i]);\n }\n const result: Array<{ idx: number; op: Op }> = [];\n for (const type of types) {\n for (const idx of this.opIndex.get(type) ?? []) {\n result.push({ idx, op: this.operations[idx] });\n }\n }\n return result.sort((a, b) => a.idx - b.idx).map((r) => r.op);\n }\n\n /**\n * Rebuild `opIndex` from scratch.\n *\n * Call this after any direct mutation of `this.operations[]` (e.g. scope\n * injection, joinWith consumption in the executor, clone post-processing).\n */\n public rebuildIndex(): void {\n this.opIndex = new Map();\n for (let i = 0; i < this.operations.length; i++) {\n const type = this.operations[i].type;\n const list = this.opIndex.get(type);\n if (list) {\n list.push(i);\n } else {\n this.opIndex.set(type, [i]);\n }\n }\n }\n\n /**\n * Factory for sub-QueryBuilders used inside callbacks.\n *\n * Override in driver subclasses to return a driver-typed instance, so that\n * driver-specific methods (e.g. `whereArrayContains`) are available inside\n * nested `where(q => ...)` / `whereHas` / `joinWith` callbacks.\n *\n * @example\n * // In PostgresQueryBuilder:\n * protected override subQuery(): QueryBuilder {\n * return new PostgresQueryBuilder(\"__sub__\", this.dataSource);\n * }\n */\n protected subQuery(): QueryBuilder {\n return new QueryBuilder();\n }\n\n /**\n * Shallow-clone this builder — copies operations, opIndex, and all shared state.\n *\n * Subclasses MUST call `super.clone()` and then copy their own fields\n * (dataSource, joinRelations, …).\n */\n public clone(): this {\n const cloned = Object.create(Object.getPrototypeOf(this)) as this;\n cloned.operations = [...this.operations];\n cloned.opIndex = new Map(Array.from(this.opIndex.entries()).map(([k, v]) => [k, [...v]]));\n cloned.pendingGlobalScopes = this.pendingGlobalScopes;\n cloned.availableLocalScopes = this.availableLocalScopes;\n cloned.disabledGlobalScopes = new Set(this.disabledGlobalScopes);\n cloned.scopesApplied = this.scopesApplied;\n cloned.eagerLoadRelations = new Map(this.eagerLoadRelations);\n cloned.countRelations = new Map(this.countRelations);\n cloned.relationDefinitions = this.relationDefinitions;\n cloned.modelClass = this.modelClass;\n return cloned;\n }\n\n // ════════════════════════════════════════════════════════\n // SCOPES\n // ════════════════════════════════════════════════════════\n\n /** Disable one or more named global scopes for this query. */\n public withoutGlobalScope(...scopeNames: string[]): this {\n scopeNames.forEach((name) => this.disabledGlobalScopes.add(name));\n return this;\n }\n\n /** Disable ALL pending global scopes for this query. */\n public withoutGlobalScopes(): this {\n this.pendingGlobalScopes?.forEach((_, name) => this.disabledGlobalScopes.add(name));\n return this;\n }\n\n /**\n * Apply a registered local scope by name.\n * @throws if no local scopes are available or the named scope is not found\n */\n public scope(scopeName: string, ...args: unknown[]): this {\n if (!this.availableLocalScopes) {\n throw new Error(\"No local scopes available on this query builder.\");\n }\n const cb = this.availableLocalScopes.get(scopeName);\n if (!cb) throw new Error(`Local scope \"${scopeName}\" not found.`);\n cb(this, ...args);\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // WHERE CLAUSES — CORE\n // ════════════════════════════════════════════════════════\n\n /**\n * Add a WHERE clause (AND).\n *\n * @example\n * q.where(\"status\", \"active\")\n * q.where(\"age\", \">\", 18)\n * q.where({ role: \"admin\", active: true })\n * q.where(q => q.where(\"a\", 1).orWhere(\"b\", 2))\n */\n public where(field: string, value: unknown): this;\n public where(field: string, operator: WhereOperator, value: unknown): this;\n public where(conditions: WhereObject): this;\n public where(callback: WhereCallback<T>): this;\n public where(...args: unknown[]): this {\n if (args.length === 1 && typeof args[0] === \"function\") {\n const sub = this.subQuery();\n (args[0] as (q: QueryBuilder) => void)(sub);\n this.addOperation(\"where\", { nested: sub.operations });\n } else if (args.length === 1 && typeof args[0] === \"object\" && args[0] !== null) {\n for (const [key, value] of Object.entries(args[0] as WhereObject)) {\n this.addOperation(\"where\", { field: key, operator: \"=\", value });\n }\n } else if (args.length === 2) {\n this.addOperation(\"where\", { field: args[0], operator: \"=\", value: args[1] });\n } else {\n this.addOperation(\"where\", { field: args[0], operator: args[1], value: args[2] });\n }\n return this;\n }\n\n /**\n * Add an OR WHERE clause.\n *\n * @example\n * q.where(\"role\", \"admin\").orWhere(\"role\", \"mod\")\n */\n public orWhere(field: string, value: unknown): this;\n public orWhere(field: string, operator: WhereOperator, value: unknown): this;\n public orWhere(conditions: WhereObject): this;\n public orWhere(callback: WhereCallback<T>): this;\n public orWhere(...args: unknown[]): this {\n if (args.length === 1 && typeof args[0] === \"function\") {\n const sub = this.subQuery();\n (args[0] as (q: QueryBuilder) => void)(sub);\n this.addOperation(\"orWhere\", { nested: sub.operations });\n } else if (args.length === 1 && typeof args[0] === \"object\" && args[0] !== null) {\n for (const [key, value] of Object.entries(args[0] as WhereObject)) {\n this.addOperation(\"orWhere\", { field: key, operator: \"=\", value });\n }\n } else if (args.length === 2) {\n this.addOperation(\"orWhere\", { field: args[0], operator: \"=\", value: args[1] });\n } else {\n this.addOperation(\"orWhere\", { field: args[0], operator: args[1], value: args[2] });\n }\n return this;\n }\n\n /**\n * Raw WHERE expression in the target dialect (AND).\n *\n * @example\n * q.whereRaw(\"age > ? AND role = ?\", [18, \"admin\"]) // SQL\n * q.whereRaw({ $expr: { $gt: [\"$stock\", \"$reserved\"] } }) // MongoDB\n */\n public whereRaw(expression: RawExpression, bindings?: unknown[]): this {\n this.addOperation(\"whereRaw\", { expression, bindings: bindings ?? [] });\n return this;\n }\n\n /** Raw OR WHERE expression. */\n public orWhereRaw(expression: RawExpression, bindings?: unknown[]): this {\n this.addOperation(\"orWhereRaw\", { expression, bindings: bindings ?? [] });\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // WHERE CLAUSES — COLUMN COMPARISONS\n // ════════════════════════════════════════════════════════\n\n /**\n * Compare two columns directly (AND).\n * @example q.whereColumn(\"stock\", \">\", \"reserved\")\n */\n public whereColumn(first: string, operator: WhereOperator, second: string): this {\n this.addOperation(\"whereColumn\", { first, operator, second });\n return this;\n }\n\n /** Compare two columns directly (OR). */\n public orWhereColumn(first: string, operator: WhereOperator, second: string): this {\n this.addOperation(\"orWhereColumn\", { first, operator, second });\n return this;\n }\n\n /** Compare multiple column pairs in one call. */\n public whereColumns(\n comparisons: Array<[left: string, operator: WhereOperator, right: string]>,\n ): this {\n for (const [left, operator, right] of comparisons) {\n this.whereColumn(left, operator, right);\n }\n return this;\n }\n\n /**\n * Field value must fall between two other column values.\n * Stored as a `whereBetween` op with `useColumns: true` so the SQL parser\n * knows to quote the values as identifiers rather than bind them.\n */\n public whereBetweenColumns(field: string, lowerColumn: string, upperColumn: string): this {\n this.addOperation(\"whereBetween\", { field, lowerColumn, upperColumn, useColumns: true });\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // WHERE CLAUSES — STANDARD COMPARISON OPERATORS\n // ════════════════════════════════════════════════════════\n\n /** WHERE field IN values. */\n public whereIn(field: string, values: unknown[]): this {\n this.addOperation(\"whereIn\", { field, values });\n return this;\n }\n\n /** WHERE field NOT IN values. */\n public whereNotIn(field: string, values: unknown[]): this {\n this.addOperation(\"whereNotIn\", { field, values });\n return this;\n }\n\n /** WHERE field IS NULL. */\n public whereNull(field: string): this {\n this.addOperation(\"whereNull\", { field });\n return this;\n }\n\n /** WHERE field IS NOT NULL. */\n public whereNotNull(field: string): this {\n this.addOperation(\"whereNotNull\", { field });\n return this;\n }\n\n /** WHERE field BETWEEN low AND high. */\n public whereBetween(field: string, range: [unknown, unknown]): this {\n this.addOperation(\"whereBetween\", { field, range });\n return this;\n }\n\n /** WHERE field NOT BETWEEN low AND high. */\n public whereNotBetween(field: string, range: [unknown, unknown]): this {\n this.addOperation(\"whereNotBetween\", { field, range });\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // WHERE CLAUSES — PATTERN MATCHING\n // ════════════════════════════════════════════════════════\n\n /**\n * LIKE pattern match (AND).\n * @example q.whereLike(\"email\", \"%@gmail.com\")\n */\n public whereLike(field: string, pattern: RegExp | string): this {\n const patternStr = pattern instanceof RegExp ? pattern.source : pattern;\n this.addOperation(\"whereLike\", { field, pattern: patternStr });\n return this;\n }\n\n /** NOT LIKE pattern match. */\n public whereNotLike(field: string, pattern: RegExp | string): this {\n const patternStr = pattern instanceof RegExp ? pattern.source : pattern;\n this.addOperation(\"whereNotLike\", { field, pattern: patternStr });\n return this;\n }\n\n /** Starts with a prefix. */\n public whereStartsWith(field: string, value: string | number): this {\n return this.whereLike(field, `${value}%`);\n }\n\n /** Does NOT start with a prefix. */\n public whereNotStartsWith(field: string, value: string | number): this {\n return this.whereNotLike(field, `${value}%`);\n }\n\n /** Ends with a suffix. */\n public whereEndsWith(field: string, value: string | number): this {\n return this.whereLike(field, `%${value}`);\n }\n\n /** Does NOT end with a suffix. */\n public whereNotEndsWith(field: string, value: string | number): this {\n return this.whereNotLike(field, `%${value}`);\n }\n\n // ════════════════════════════════════════════════════════\n // WHERE CLAUSES — DATE/TIME PARTIALS\n // ════════════════════════════════════════════════════════\n\n /**\n * Match on date portion only (time ignored).\n * @example q.whereDate(\"createdAt\", \"2024-05-01\")\n */\n public whereDate(field: string, value: Date | string): this {\n this.addOperation(\"whereDate\", { field, value });\n return this;\n }\n\n /** Alias for whereDate. */\n public whereDateEquals(field: string, value: Date | string): this {\n return this.whereDate(field, value);\n }\n\n /** Field date is before value. */\n public whereDateBefore(field: string, value: Date | string): this {\n this.addOperation(\"whereDateBefore\", { field, value });\n return this;\n }\n\n /** Field date is after value. */\n public whereDateAfter(field: string, value: Date | string): this {\n this.addOperation(\"whereDateAfter\", { field, value });\n return this;\n }\n\n /** Field date is within a range [from, to]. */\n public whereDateBetween(field: string, range: [Date | string, Date | string]): this {\n this.addOperation(\"whereDateBetween\", { field, range });\n return this;\n }\n\n /** Field date is NOT within a range. */\n public whereDateNotBetween(field: string, range: [Date | string, Date | string]): this {\n this.addOperation(\"whereNotBetween\", { field, range });\n return this;\n }\n\n /**\n * Match on the time portion of a datetime field.\n * Emits a `whereRaw` op with a driver-agnostic marker; the driver parser\n * rewrites it to the appropriate SQL (`TIME(field) = ?`) or Mongo expression.\n */\n public whereTime(field: string, value: string): this {\n this.addOperation(\"whereRaw\", {\n expression: `TIME(${field}) = ?`,\n bindings: [value],\n });\n return this;\n }\n\n /**\n * Day-of-month from a date field (1–31).\n * Uses a `whereRaw` op so SQL parsers get the `EXTRACT` expression directly.\n * MongoDB drivers override to emit `$dayOfMonth`.\n */\n public whereDay(field: string, value: number): this {\n this.addOperation(\"whereRaw\", {\n expression: `EXTRACT(DAY FROM ${field}) = ?`,\n bindings: [value],\n });\n return this;\n }\n\n /** Month extracted from a date field (1–12). */\n public whereMonth(field: string, value: number): this {\n this.addOperation(\"whereRaw\", {\n expression: `EXTRACT(MONTH FROM ${field}) = ?`,\n bindings: [value],\n });\n return this;\n }\n\n /** Year extracted from a date field. */\n public whereYear(field: string, value: number): this {\n this.addOperation(\"whereRaw\", {\n expression: `EXTRACT(YEAR FROM ${field}) = ?`,\n bindings: [value],\n });\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // WHERE CLAUSES — JSON / STRUCTURED DATA\n // ════════════════════════════════════════════════════════\n\n /**\n * JSON/array path contains the given value.\n * @example q.whereJsonContains(\"tags\", \"typescript\")\n */\n public whereJsonContains(path: string, value: unknown): this {\n this.addOperation(\"whereJsonContains\", { path, value });\n return this;\n }\n\n /** JSON/array path does NOT contain the value. */\n public whereJsonDoesntContain(path: string, value: unknown): this {\n this.addOperation(\"whereJsonDoesntContain\", { path, value });\n return this;\n }\n\n /**\n * JSON path key exists.\n * Uses a `whereRaw` so existing SQL parsers get `IS NOT NULL` immediately.\n */\n public whereJsonContainsKey(path: string): this {\n this.addOperation(\"whereRaw\", { expression: `${path} IS NOT NULL`, bindings: [] });\n return this;\n }\n\n /**\n * Constrain the length of a JSON array at a path.\n * @example q.whereJsonLength(\"tags\", \">\", 3)\n */\n public whereJsonLength(path: string, operator: WhereOperator, value: number): this {\n this.addOperation(\"whereRaw\", {\n expression: `jsonb_array_length(${path}) ${operator} ?`,\n bindings: [value],\n });\n return this;\n }\n\n /** JSON path must resolve to an array. */\n public whereJsonIsArray(path: string): this {\n this.addOperation(\"whereRaw\", {\n expression: `jsonb_typeof(${path}) = 'array'`,\n bindings: [],\n });\n return this;\n }\n\n /** JSON path must resolve to an object. */\n public whereJsonIsObject(path: string): this {\n this.addOperation(\"whereRaw\", {\n expression: `jsonb_typeof(${path}) = 'object'`,\n bindings: [],\n });\n return this;\n }\n\n /**\n * Constrain the number of elements in an array field.\n * @example q.whereArrayLength(\"roles\", \">=\", 2)\n */\n public whereArrayLength(field: string, operator: WhereOperator, value: number): this {\n this.addOperation(\"whereRaw\", {\n expression: `array_length(${field}, 1) ${operator} ?`,\n bindings: [value],\n });\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // WHERE CLAUSES — CONVENIENCE SHORTCUTS\n // ════════════════════════════════════════════════════════\n\n /** WHERE id = value. */\n public whereId(value: string | number): this {\n return this.where(\"id\", value);\n }\n\n /** WHERE id IN values. */\n public whereIds(values: Array<string | number>): this {\n return this.whereIn(\"id\", values);\n }\n\n /** WHERE uuid = value. */\n public whereUuid(value: string): this {\n return this.where(\"uuid\", value);\n }\n\n /** WHERE ulid = value. */\n public whereUlid(value: string): this {\n return this.where(\"ulid\", value);\n }\n\n /**\n * Full-text search across one or more fields.\n * @example q.whereFullText([\"title\", \"body\"], \"typescript\")\n */\n public whereFullText(fields: string | string[], query: string): this {\n this.addOperation(\"whereFullText\", {\n fields: Array.isArray(fields) ? fields : [fields],\n query,\n });\n return this;\n }\n\n /** Full-text search (OR). */\n public orWhereFullText(fields: string | string[], query: string): this {\n return this.whereFullText(fields, query);\n }\n\n /** Alias for whereFullText with a single field. */\n public whereSearch(field: string, query: string): this {\n return this.whereFullText([field], query);\n }\n\n /**\n * Text search with optional extra equality filters.\n * MongoDB-style convenience shorthand.\n */\n public textSearch(query: string, filters?: WhereObject): this {\n if (filters) {\n for (const [key, value] of Object.entries(filters)) this.where(key, value as never);\n }\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // WHERE CLAUSES — EXISTENCE / SUBQUERIES\n // ════════════════════════════════════════════════════════\n\n /**\n * WHERE EXISTS (subquery callback) or field IS NOT NULL (string).\n *\n * @example\n * q.whereExists(sub => sub.where(\"userId\", \"users.id\"))\n * q.whereExists(\"optionalField\")\n */\n public whereExists(field: string): this;\n public whereExists(callback: WhereCallback<T>): this;\n public whereExists(param: string | WhereCallback<T>): this {\n if (typeof param === \"function\") {\n const sub = this.subQuery();\n param(sub as any);\n this.addOperation(\"whereExists\", { subquery: sub.operations });\n } else {\n this.addOperation(\"whereNotNull\", { field: param });\n }\n return this;\n }\n\n /**\n * WHERE NOT EXISTS (subquery callback) or field IS NULL (string).\n */\n public whereNotExists(field: string): this;\n public whereNotExists(callback: WhereCallback<T>): this;\n public whereNotExists(param: string | WhereCallback<T>): this {\n if (typeof param === \"function\") {\n const sub = this.subQuery();\n param(sub as any);\n this.addOperation(\"whereNotExists\", { subquery: sub.operations });\n } else {\n this.addOperation(\"whereNull\", { field: param });\n }\n return this;\n }\n\n /**\n * Constrain an array/collection field by element count.\n *\n * @example\n * q.whereSize(\"tags\", 3) // exactly 3\n * q.whereSize(\"tags\", \">=\", 1) // at least 1\n */\n public whereSize(field: string, size: number): this;\n public whereSize(field: string, operator: WhereOperator, size: number): this;\n public whereSize(field: string, ...args: unknown[]): this {\n const operator = args.length === 2 ? (args[0] as WhereOperator) : \"=\";\n const size = (args.length === 2 ? args[1] : args[0]) as number;\n return this.whereArrayLength(field, operator, size);\n }\n\n /**\n * AND NOT wrapper — negate a nested group.\n * @example q.whereNot(q => q.where(\"status\", \"banned\").where(\"role\", \"user\"))\n */\n public whereNot(callback: WhereCallback<T>): this {\n const sub = this.subQuery();\n callback(sub as any);\n this.addOperation(\"whereNot\", { nested: sub.operations });\n return this;\n }\n\n /** OR NOT wrapper. */\n public orWhereNot(callback: WhereCallback<T>): this {\n const sub = this.subQuery();\n callback(sub as any);\n this.addOperation(\"orWhereNot\", { nested: sub.operations });\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // JOINS — STANDARD SQL-STYLE\n // Note: Op type names match parser switch cases exactly.\n // join / innerJoin → INNER JOIN\n // leftJoin → LEFT JOIN\n // rightJoin → RIGHT JOIN\n // fullJoin → FULL OUTER JOIN\n // crossJoin → CROSS JOIN\n // joinRaw → raw expression\n // ════════════════════════════════════════════════════════\n\n /**\n * INNER JOIN.\n * @example q.join(\"categories\", \"posts.categoryId\", \"categories.id\")\n */\n public join(table: string, localField: string, foreignField: string): this;\n public join(options: JoinOptions): this;\n public join(...args: unknown[]): this {\n if (args.length === 3) {\n this.addOperation(\"join\", { table: args[0], localField: args[1], foreignField: args[2] });\n } else {\n this.addOperation(\"join\", args[0] as Record<string, unknown>);\n }\n return this;\n }\n\n /** LEFT JOIN. */\n public leftJoin(table: string, localField: string, foreignField: string): this;\n public leftJoin(options: JoinOptions): this;\n public leftJoin(...args: unknown[]): this {\n if (args.length === 3) {\n this.addOperation(\"leftJoin\", { table: args[0], localField: args[1], foreignField: args[2] });\n } else {\n this.addOperation(\"leftJoin\", args[0] as Record<string, unknown>);\n }\n return this;\n }\n\n /** RIGHT JOIN. */\n public rightJoin(table: string, localField: string, foreignField: string): this;\n public rightJoin(options: JoinOptions): this;\n public rightJoin(...args: unknown[]): this {\n if (args.length === 3) {\n this.addOperation(\"rightJoin\", {\n table: args[0],\n localField: args[1],\n foreignField: args[2],\n });\n } else {\n this.addOperation(\"rightJoin\", args[0] as Record<string, unknown>);\n }\n return this;\n }\n\n /** INNER JOIN (alias for join). */\n public innerJoin(table: string, localField: string, foreignField: string): this;\n public innerJoin(options: JoinOptions): this;\n public innerJoin(...args: unknown[]): this {\n if (args.length === 3) {\n this.addOperation(\"innerJoin\", {\n table: args[0],\n localField: args[1],\n foreignField: args[2],\n });\n } else {\n this.addOperation(\"innerJoin\", args[0] as Record<string, unknown>);\n }\n return this;\n }\n\n /** FULL OUTER JOIN. */\n public fullJoin(table: string, localField: string, foreignField: string): this;\n public fullJoin(options: JoinOptions): this;\n public fullJoin(...args: unknown[]): this {\n if (args.length === 3) {\n this.addOperation(\"fullJoin\", { table: args[0], localField: args[1], foreignField: args[2] });\n } else {\n this.addOperation(\"fullJoin\", args[0] as Record<string, unknown>);\n }\n return this;\n }\n\n /** CROSS JOIN. */\n public crossJoin(table: string): this {\n this.addOperation(\"crossJoin\", { table });\n return this;\n }\n\n /** Raw JOIN expression. Driver responsible for handling. */\n public joinRaw(expression: RawExpression, bindings?: unknown[]): this {\n this.addOperation(\"joinRaw\", { expression, bindings: bindings ?? [] });\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // RELATION EAGER LOADING — JOIN-BASED (joinWith)\n // ════════════════════════════════════════════════════════\n\n /**\n * Eager-load named relations via a single JOIN / $lookup query.\n *\n * Constraints are eagerly resolved at call time:\n * - Callbacks are invoked immediately → `subOps` stored in op data.\n * - Column shorthands are parsed into a `columns[]` array.\n *\n * The driver executor reads the `joinWith` op and uses the resolved data\n * alongside its own relation definition map to emit the appropriate SQL JOIN\n * or MongoDB $lookup stage.\n *\n * Supported arg forms (may be mixed):\n * - `\"author\"` / `[\"author\", \"category\"]` — no constraint\n * - `{ author: \"id,name\" }` — column shorthand\n * - `{ actions: q => q.where(\"status\",\"pending\").limit(5) }` — callback\n *\n * @example\n * Post.joinWith(\"author\", \"category\")\n * ChatMessage.joinWith({ actions: q => q.where(\"status\", \"pending\").limit(5) })\n * ChatMessage.joinWith({ org: \"id,name\", actions: q => q.orderBy(\"sort_order\") })\n */\n public joinWith(...args: unknown[]): this {\n const resolved: Record<string, { columns?: string[]; subOps?: Op[] }> = {};\n\n for (const arg of args) {\n if (typeof arg === \"string\") {\n resolved[arg] = {};\n } else if (Array.isArray(arg)) {\n for (const rel of arg as string[]) resolved[rel] = {};\n } else if (typeof arg === \"object\" && arg !== null) {\n for (const [rel, constraint] of Object.entries(arg as Record<string, JoinWithConstraint>)) {\n if (typeof constraint === \"function\") {\n const sub = this.subQuery();\n constraint(sub);\n resolved[rel] = { subOps: sub.operations };\n } else if (typeof constraint === \"string\" && constraint !== \"\") {\n resolved[rel] = {\n columns: constraint\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean),\n };\n } else {\n resolved[rel] = {};\n }\n }\n }\n }\n\n this.addOperation(\"joinWith\", { resolved });\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // RELATION EAGER LOADING — SEPARATE QUERIES (with)\n // ════════════════════════════════════════════════════════\n\n /**\n * Eager-load relations via separate queries (N+1 avoided by batching).\n *\n * @example\n * q.with(\"posts\")\n * q.with(\"posts\", q => q.where(\"published\", true))\n * q.with({ posts: true, comments: q => q.limit(5) })\n */\n public with(\n ...args: (string | Record<string, boolean | ((q: any) => void)> | ((q: any) => void))[]\n ): this {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (typeof arg === \"string\") {\n const next = args[i + 1];\n if (typeof next === \"function\") {\n this.eagerLoadRelations.set(arg, next as (q: any) => void);\n i++;\n } else {\n this.eagerLoadRelations.set(arg, true);\n }\n } else if (typeof arg === \"object\" && arg !== null) {\n for (const [key, value] of Object.entries(\n arg as Record<string, boolean | ((q: any) => void)>,\n )) {\n this.eagerLoadRelations.set(key, value);\n }\n }\n }\n return this;\n }\n\n /**\n * Register one or more relation counts to emit alongside each result row.\n *\n * Accepts:\n * - Bare relation names (variadic strings or array): `withCount(\"posts\", \"comments\")`\n * - Alias shorthand: `withCount(\"posts as totalPosts\")`\n * - Object form for per-relation constraints / aliases:\n * `withCount({ posts: true, \"posts as approved\": (q) => q.where(\"approved\", true) })`\n *\n * Each entry is stored in `countRelations` keyed by its output column alias\n * (default `${relationName}Count`). The driver subclass consumes the map at\n * execute time to emit count expressions.\n *\n * @example\n * ```typescript\n * await User.query().withCount(\"posts\").get(); // postsCount\n * await User.query().withCount(\"posts as totalPosts\").get(); // totalPosts\n * await User.query()\n * .withCount({\n * posts: true,\n * \"posts as published\": (q) => q.where(\"isPublished\", true),\n * comments: \"commentTotal\",\n * })\n * .get();\n * ```\n */\n public withCount(...args: unknown[]): this {\n for (const arg of args) {\n if (typeof arg === \"string\") {\n this.recordCountEntry(arg);\n continue;\n }\n\n if (Array.isArray(arg)) {\n for (const spec of arg as string[]) {\n this.recordCountEntry(spec);\n }\n continue;\n }\n\n if (typeof arg === \"object\" && arg !== null) {\n const entries = Object.entries(\n arg as Record<string, true | string | ((query: any) => void)>,\n );\n\n for (const [key, value] of entries) {\n if (value === true) {\n this.recordCountEntry(key);\n } else if (typeof value === \"string\") {\n this.recordCountEntry(`${key} as ${value}`);\n } else if (typeof value === \"function\") {\n this.recordCountEntry(key, value);\n }\n }\n }\n }\n\n return this;\n }\n\n /**\n * Parse a count spec (\"relation\" or \"relation as alias\") into its relation\n * name and output alias, optionally capturing a constraint callback's\n * operations via a sub-builder. Stored in `countRelations` keyed by alias.\n */\n protected recordCountEntry(spec: string, constraint?: (query: any) => void): void {\n const { relation, alias } = this.parseCountSpec(spec);\n\n let constraintOps: Op[] | undefined;\n\n if (constraint) {\n const sub = this.subQuery();\n constraint(sub);\n constraintOps = sub.operations;\n }\n\n this.countRelations.set(alias, { relation, constraintOps });\n }\n\n /**\n * Split a `\"<relation>\"` or `\"<relation> as <alias>\"` spec. Returns the\n * resolved relation name and the output column alias (defaulting to\n * `${relation}Count` when no `as` is present).\n */\n protected parseCountSpec(spec: string): { relation: string; alias: string } {\n const trimmed = spec.trim();\n const match = /^(.+?)\\s+as\\s+(.+)$/i.exec(trimmed);\n\n if (!match) {\n return { relation: trimmed, alias: `${trimmed}Count` };\n }\n\n return { relation: match[1].trim(), alias: match[2].trim() };\n }\n\n /**\n * Filter to rows that have at least one related record.\n * @example q.has(\"comments\")\n * @example q.has(\"comments\", \">=\", 3)\n */\n public has(relation: string, operator?: WhereOperator, count?: number): this {\n this.addOperation(\"has\", { relation, operator: operator ?? \">=\", count: count ?? 1 });\n return this;\n }\n\n /**\n * Filter to rows with related records matching a sub-query (AND).\n * @example q.whereHas(\"comments\", q => q.where(\"approved\", true))\n */\n public whereHas(relation: string, callback: (q: any) => void): this {\n const sub = this.subQuery();\n callback(sub);\n this.addOperation(\"whereHas\", { relation, subquery: sub.operations });\n return this;\n }\n\n /** Same as whereHas but OR-joined. */\n public orWhereHas(relation: string, callback: (q: any) => void): this {\n const sub = this.subQuery();\n callback(sub);\n this.addOperation(\"orWhereHas\", { relation, subquery: sub.operations });\n return this;\n }\n\n /** Filter to rows with NO related records. */\n public doesntHave(relation: string): this {\n this.addOperation(\"doesntHave\", { relation });\n return this;\n }\n\n /** Filter to rows with NO related records matching conditions. */\n public whereDoesntHave(relation: string, callback: (q: any) => void): this {\n const sub = this.subQuery();\n callback(sub);\n this.addOperation(\"whereDoesntHave\", { relation, subquery: sub.operations });\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // SELECT / PROJECTION\n // ════════════════════════════════════════════════════════\n\n /**\n * Select specific columns.\n *\n * @example\n * q.select([\"id\", \"name\"])\n * q.select(\"id\", \"name\")\n * q.select({ name: 1, password: 0 }) // MongoDB-style projection\n */\n public select(fields: string[]): this;\n public select(fields: Record<string, 0 | 1 | boolean>): this;\n public select(...fields: Array<string | string[]>): this;\n public select(...args: unknown[]): this {\n if (args.length === 1 && Array.isArray(args[0])) {\n this.addOperation(\"select\", { fields: args[0] });\n } else if (args.length === 1 && typeof args[0] === \"object\" && !Array.isArray(args[0])) {\n this.addOperation(\"select\", { fields: args[0] as Record<string, unknown> });\n } else {\n this.addOperation(\"select\", { fields: (args as Array<string | string[]>).flat() });\n }\n return this;\n }\n\n /** Select a field under an alias. @example q.selectAs(\"fullName\", \"name\") */\n public selectAs(field: string, alias: string): this {\n this.addOperation(\"select\", { fields: { [field]: alias } });\n return this;\n }\n\n /**\n * Raw SELECT expression.\n * @example q.selectRaw(\"COUNT(*) AS total\")\n */\n public selectRaw(expression: RawExpression, bindings?: unknown[]): this {\n this.addOperation(\"selectRaw\", { expression, bindings: bindings ?? [] });\n return this;\n }\n\n /** Multiple raw SELECT expressions in one call. */\n public selectRawMany(\n definitions: Array<{ alias: string; expression: RawExpression; bindings?: unknown[] }>,\n ): this {\n for (const def of definitions) {\n this.selectRaw({ [def.alias]: def.expression }, def.bindings);\n }\n return this;\n }\n\n /** Subquery as a named projected field. */\n public selectSub(expression: RawExpression, alias: string): this {\n this.addOperation(\"selectRaw\", { expression: { [alias]: expression } });\n return this;\n }\n\n /** Alias for selectSub. */\n public addSelectSub(expression: RawExpression, alias: string): this {\n return this.selectSub(expression, alias);\n }\n\n /**\n * Aggregate function as a projected field.\n * @example q.selectAggregate(\"price\", \"sum\", \"totalRevenue\")\n */\n public selectAggregate(\n field: string,\n aggregate: \"sum\" | \"avg\" | \"min\" | \"max\" | \"count\" | \"first\" | \"last\",\n alias: string,\n ): this {\n return this.selectRaw({ [alias]: `${aggregate.toUpperCase()}(${field})` });\n }\n\n /** Existence check as a projected boolean field. */\n public selectExists(field: string, alias: string): this {\n return this.selectRaw({ [alias]: `${field} IS NOT NULL` });\n }\n\n /** COUNT as a projected field. */\n public selectCount(field: string, alias: string): this {\n return this.selectAggregate(field, \"count\", alias);\n }\n\n /**\n * CASE / switch expression.\n * @example q.selectCase([{ when: \"status = 1\", then: \"'active'\" }], \"'inactive'\", \"statusLabel\")\n */\n public selectCase(\n cases: Array<{ when: RawExpression; then: RawExpression | unknown }>,\n otherwise: RawExpression | unknown,\n alias: string,\n ): this {\n const caseExpr = cases.map((c) => `WHEN ${c.when} THEN ${c.then}`).join(\" \");\n return this.selectRaw({ [alias]: `CASE ${caseExpr} ELSE ${otherwise} END` });\n }\n\n /** IF/ELSE conditional field. */\n public selectWhen(\n condition: RawExpression,\n thenValue: RawExpression | unknown,\n elseValue: RawExpression | unknown,\n alias: string,\n ): this {\n return this.selectRaw({\n [alias]: `CASE WHEN ${condition} THEN ${thenValue} ELSE ${elseValue} END`,\n });\n }\n\n /**\n * Driver-native projection manipulation.\n * No-op in base — override in driver subclasses.\n */\n public selectDriverProjection(_callback: (projection: Record<string, unknown>) => void): this {\n return this;\n }\n\n /** JSON path extraction as a projected field. */\n public selectJson(path: string, alias?: string): this {\n const parts = path.split(\"->\");\n const column = parts[0];\n const jsonPath = parts.slice(1).join(\"->\");\n const expr = jsonPath ? `${column}->>'${jsonPath}'` : column;\n return alias ? this.selectAs(expr, alias) : this.selectRaw(expr);\n }\n\n /** JSON extraction via raw expression. */\n public selectJsonRaw(_path: string, expression: RawExpression, alias: string): this {\n return this.selectRaw({ [alias]: expression });\n }\n\n /** Exclude a JSON path from projection. */\n public deselectJson(path: string): this {\n return this.deselect([path]);\n }\n\n /** String concatenation as a projected field. */\n public selectConcat(fields: Array<string | RawExpression>, alias: string): this {\n return this.selectRaw({ [alias]: fields.join(\" || \") });\n }\n\n /** COALESCE (first non-null) as a projected field. */\n public selectCoalesce(fields: Array<string | RawExpression>, alias: string): this {\n return this.selectRaw({ [alias]: `COALESCE(${fields.join(\", \")})` });\n }\n\n /** Window function expression. */\n public selectWindow(spec: RawExpression): this {\n this.addOperation(\"selectRaw\", { expression: spec });\n return this;\n }\n\n /** Exclude specific columns from results. */\n public deselect(fields: string[]): this {\n this.addOperation(\"deselect\", { fields });\n return this;\n }\n\n /**\n * Remove all select operations (resets to wildcard).\n * Uses `rebuildIndex()` — no unsafe casts.\n */\n public clearSelect(): this {\n this.operations = this.operations.filter(\n (op) => !op.type.startsWith(\"select\") && op.type !== \"deselect\",\n );\n this.rebuildIndex();\n return this;\n }\n\n /** Alias for clearSelect. */\n public selectAll(): this {\n return this.clearSelect();\n }\n\n /** Alias for clearSelect. */\n public selectDefault(): this {\n return this.clearSelect();\n }\n\n /** Append additional fields to existing selection. */\n public addSelect(fields: string[]): this {\n this.addOperation(\"select\", { fields, add: true });\n return this;\n }\n\n /**\n * Record a DISTINCT flag (fluent — does not execute).\n * Subclasses expose a separate async `distinct(field)` execution method.\n */\n public distinctValues(fields?: string | string[]): this {\n const fieldList = fields ? (Array.isArray(fields) ? fields : [fields]) : [];\n this.addOperation(\"distinct\", { fields: fieldList });\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // ORDERING\n // ════════════════════════════════════════════════════════\n\n /**\n * ORDER BY a column.\n *\n * @example\n * q.orderBy(\"createdAt\", \"desc\")\n * q.orderBy({ name: \"asc\", age: \"desc\" })\n */\n public orderBy(field: string, direction?: OrderDirection): this;\n public orderBy(fields: Record<string, OrderDirection>): this;\n public orderBy(...args: unknown[]): this {\n if (typeof args[0] === \"string\") {\n this.addOperation(\"orderBy\", {\n field: args[0],\n direction: (args[1] as OrderDirection) ?? \"asc\",\n });\n } else {\n for (const [field, direction] of Object.entries(args[0] as Record<string, OrderDirection>)) {\n this.addOperation(\"orderBy\", { field, direction });\n }\n }\n return this;\n }\n\n /** ORDER BY descending shorthand. */\n public orderByDesc(field: string): this {\n return this.orderBy(field, \"desc\");\n }\n\n /**\n * Raw ORDER BY expression.\n * @example q.orderByRaw(\"RANDOM()\")\n * @example q.orderByRaw({ $meta: \"textScore\" })\n */\n public orderByRaw(expression: RawExpression, bindings?: unknown[]): this {\n this.addOperation(\"orderByRaw\", { expression, bindings: bindings ?? [] });\n return this;\n }\n\n /**\n * Random order. Maps to `RANDOM()` in SQL or `$sample` in MongoDB.\n * @param limit - Optional limit (required for MongoDB $sample)\n */\n public orderByRandom(limit?: number): this {\n this.addOperation(\"orderByRaw\", { expression: \"RANDOM()\" });\n if (limit !== undefined) this.limit(limit);\n return this;\n }\n\n /** Order ascending by a date column (oldest first). */\n public oldest(column = \"createdAt\"): this {\n return this.orderBy(column, \"asc\");\n }\n\n // ════════════════════════════════════════════════════════\n // LIMIT / OFFSET\n // ════════════════════════════════════════════════════════\n\n /** Limit number of results. */\n public limit(value: number): this {\n this.addOperation(\"limit\", { value });\n return this;\n }\n\n /** Skip N results (OFFSET). */\n public skip(value: number): this {\n this.addOperation(\"offset\", { value });\n return this;\n }\n\n /** Alias for skip. */\n public offset(value: number): this {\n return this.skip(value);\n }\n\n /** Alias for limit. */\n public take(value: number): this {\n return this.limit(value);\n }\n\n // ════════════════════════════════════════════════════════\n // GROUPING / AGGREGATION\n // ════════════════════════════════════════════════════════\n\n /**\n * GROUP BY clause.\n * @example q.groupBy(\"status\")\n * @example q.groupBy([\"year\", \"month\"])\n */\n public groupBy(input: GroupByInput): this {\n const fields = Array.isArray(input) ? input : [input];\n this.addOperation(\"groupBy\", { fields });\n return this;\n }\n\n /** Raw GROUP BY expression. */\n public groupByRaw(expression: RawExpression, bindings?: unknown[]): this {\n this.addOperation(\"groupBy\", { expression, bindings: bindings ?? [] });\n return this;\n }\n\n /**\n * HAVING clause (post-group filter).\n *\n * @example\n * q.having(\"total\", \">\", 100)\n * q.having([\"total\", \">\", 100])\n * q.having({ total: 100 })\n */\n public having(field: string, value: unknown): this;\n public having(field: string, operator: WhereOperator, value: unknown): this;\n public having(condition: HavingInput): this;\n public having(...args: unknown[]): this {\n if (args.length === 1) {\n const input = args[0] as HavingInput;\n if (Array.isArray(input)) {\n if (input.length === 2) {\n this.addOperation(\"having\", { field: input[0], operator: \"=\", value: input[1] });\n } else {\n this.addOperation(\"having\", { field: input[0], operator: input[1], value: input[2] });\n }\n } else {\n for (const [key, value] of Object.entries(input as Record<string, unknown>)) {\n this.addOperation(\"having\", { field: key, operator: \"=\", value });\n }\n }\n } else if (args.length === 2) {\n this.addOperation(\"having\", { field: args[0], operator: \"=\", value: args[1] });\n } else {\n this.addOperation(\"having\", { field: args[0], operator: args[1], value: args[2] });\n }\n return this;\n }\n\n /** Raw HAVING expression. */\n public havingRaw(expression: RawExpression, bindings?: unknown[]): this {\n this.addOperation(\"havingRaw\", { expression, bindings: bindings ?? [] });\n return this;\n }\n\n // ════════════════════════════════════════════════════════\n // UTILITY / CONTROL FLOW\n // ════════════════════════════════════════════════════════\n\n /**\n * Side-effect tap — executes callback synchronously and returns `this`.\n * @example q.where(...).tap(q => console.log(q.operations.length)).limit(10)\n */\n public tap(callback: (builder: this) => void): this {\n callback(this);\n return this;\n }\n\n /**\n * Conditionally apply query modifications.\n *\n * @example\n * q.when(userId, (q, id) => q.where(\"userId\", id))\n * q.when(isAdmin, q => q.withoutGlobalScopes(), q => q.scope(\"active\"))\n */\n public when<V>(\n condition: V | boolean,\n callback: (builder: this, value: V) => void,\n otherwise?: (builder: this) => void,\n ): this {\n if (condition) {\n callback(this, condition as V);\n } else if (otherwise) {\n otherwise(this);\n }\n return this;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { BelongsToManyOptions, BelongsToOptions, HasManyOptions, HasOneOptions, LoadedRelationResult, LoadedRelationsMap, PivotData, PivotIds, RelationConstraintCallback, RelationConstraints, RelationDefinition, RelationDefinitions, RelationType } from "./types.mjs";
2
+ import { PivotOperations, createPivotOperations } from "./pivot-operations.mjs";
3
+ import { ModelSnapshot, RelationHydrator, SerializedRelation } from "./relation-hydrator.mjs";
4
+ import { RelationLoader } from "./relation-loader.mjs";
@@ -0,0 +1,5 @@
1
+ import { RelationLoader } from "./relation-loader.mjs";
2
+ import { RelationHydrator } from "./relation-hydrator.mjs";
3
+ import { PivotOperations, createPivotOperations } from "./pivot-operations.mjs";
4
+
5
+ export { };
@@ -0,0 +1,119 @@
1
+ import { toSnakeCase } from "@mongez/reinforcements";
2
+
3
+ //#region ../../@warlock.js/cascade/src/relations/key-conventions.ts
4
+ /**
5
+ * @fileoverview Foreign-key naming conventions for relation defaults.
6
+ *
7
+ * Single source of truth for default FK / pivot column names when a relation
8
+ * definition omits an explicit `foreignKey`. Centralised so the three
9
+ * relation-resolution code paths (RelationLoader, applyJoinRelations,
10
+ * applyCountRelations) stay consistent — historically each path defaulted
11
+ * differently, producing silent wrong-column bugs.
12
+ *
13
+ * Convention: snake_case + `_id` suffix. Matches PostgreSQL idiom and the
14
+ * existing column convention used throughout `src/app/**` (`organization_id`,
15
+ * `chat_id`, `image_id`, …).
16
+ *
17
+ * @module @warlock.js/cascade/relations/key-conventions
18
+ */
19
+ const DEFAULT_FK_SUFFIX = "_id";
20
+ const DEFAULT_PIVOT_ORDER = "alphabetical";
21
+ /**
22
+ * Convert a model class name or relation name to snake_case.
23
+ *
24
+ * Wraps `toSnakeCase` from `@mongez/reinforcements` because the lib's regex
25
+ * loses the leading letters in runs of consecutive uppercase
26
+ * (`toSnakeCase("AIModel")` → `"imodel"`). The two pre-normalisation passes
27
+ * here insert separators at run boundaries before delegating, so acronym-
28
+ * prefixed model names (`AIModel`, `AIUsage`, `AITrip`, `HTTPSConnection`)
29
+ * snake correctly.
30
+ *
31
+ * Once an upstream fix lands in `@mongez/reinforcements`, this wrapper can
32
+ * be deleted and `toSnakeCase` called directly at the consumer sites.
33
+ *
34
+ * @example
35
+ * snake("User") // "user"
36
+ * snake("BlogPost") // "blog_post"
37
+ * snake("AIModel") // "ai_model"
38
+ * snake("HTTPSConnection") // "https_connection"
39
+ * snake("organization") // "organization" (idempotent)
40
+ * snake("organizationId") // "organization_id"
41
+ */
42
+ function snake(input) {
43
+ return toSnakeCase(input.replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2").replace(/([a-z\d])([A-Z])/g, "$1_$2")).toLowerCase();
44
+ }
45
+ /**
46
+ * Default foreign-key column name for a `belongsTo` relation.
47
+ *
48
+ * The FK lives on THIS model (the owner of the `belongsTo` def) and is
49
+ * named after the *role* the relation plays — not the target model class.
50
+ * Matches Laravel/Rails convention: `Post.author_id` (not `Post.user_id`)
51
+ * because the relation is named "author".
52
+ *
53
+ * @param relationName - The relation key as declared in `static relations`
54
+ *
55
+ * @example
56
+ * inferBelongsToForeignKey("author") // "author_id"
57
+ * inferBelongsToForeignKey("organization") // "organization_id"
58
+ * inferBelongsToForeignKey("parentItem") // "parent_item_id"
59
+ */
60
+ function inferBelongsToForeignKey(relationName, options) {
61
+ return `${snake(relationName)}${options?.foreignKeySuffix ?? DEFAULT_FK_SUFFIX}`;
62
+ }
63
+ /**
64
+ * Default foreign-key column name for a `hasMany` or `hasOne` relation.
65
+ *
66
+ * The FK lives on the RELATED model's table and points back to THIS model,
67
+ * so the column is named after the self model class.
68
+ *
69
+ * @param selfModelName - The owning model's class name (e.g. `User`)
70
+ *
71
+ * @example
72
+ * inferHasForeignKey("User") // "user_id" — used as posts.user_id
73
+ * inferHasForeignKey("AIModel") // "ai_model_id" — used as ai_trips.ai_model_id
74
+ */
75
+ function inferHasForeignKey(selfModelName, options) {
76
+ return `${snake(selfModelName)}${options?.foreignKeySuffix ?? DEFAULT_FK_SUFFIX}`;
77
+ }
78
+ /**
79
+ * Default column name in a many-to-many pivot table for either side
80
+ * (the side referenced determines the model name passed in).
81
+ *
82
+ * - For the self-side pivot column: pass the self model name.
83
+ * - For the related-side pivot column: pass the related model name.
84
+ *
85
+ * @param modelName - The model class name being referenced from the pivot
86
+ *
87
+ * @example
88
+ * // For `Post.belongsToMany("Tag", { pivot: "post_tags" })`:
89
+ * inferPivotKey("Post") // "post_id" — pivot column post_tags.post_id
90
+ * inferPivotKey("Tag") // "tag_id" — pivot column post_tags.tag_id
91
+ */
92
+ function inferPivotKey(modelName, options) {
93
+ return `${snake(modelName)}${options?.foreignKeySuffix ?? DEFAULT_FK_SUFFIX}`;
94
+ }
95
+ /**
96
+ * Default pivot-table name for a many-to-many relation when none is
97
+ * explicitly configured. Joins the two model snake-names alphabetically
98
+ * with an underscore — matches Laravel/Rails convention.
99
+ *
100
+ * Alphabetical ordering means the same pivot name resolves regardless of
101
+ * which side of the relation declares the `@BelongsToMany`, so
102
+ * `Post.belongsToMany("Tag")` and `Tag.belongsToMany("Post")` both pick
103
+ * the table `post_tag`.
104
+ *
105
+ * @example
106
+ * inferPivotTable("Post", "Tag") // "post_tag"
107
+ * inferPivotTable("User", "Group") // "group_user"
108
+ * inferPivotTable("AIModel", "Tenant") // "ai_model_tenant"
109
+ */
110
+ function inferPivotTable(selfModelName, relatedModelName, options) {
111
+ const selfSnake = snake(selfModelName);
112
+ const relatedSnake = snake(relatedModelName);
113
+ if ((options?.pivotTableNamingOrder ?? DEFAULT_PIVOT_ORDER) === "owner_first") return `${selfSnake}_${relatedSnake}`;
114
+ return [selfSnake, relatedSnake].sort().join("_");
115
+ }
116
+
117
+ //#endregion
118
+ export { inferBelongsToForeignKey, inferHasForeignKey, inferPivotKey, inferPivotTable };
119
+ //# sourceMappingURL=key-conventions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-conventions.mjs","names":[],"sources":["../../../../../../@warlock.js/cascade/src/relations/key-conventions.ts"],"sourcesContent":["/**\n * @fileoverview Foreign-key naming conventions for relation defaults.\n *\n * Single source of truth for default FK / pivot column names when a relation\n * definition omits an explicit `foreignKey`. Centralised so the three\n * relation-resolution code paths (RelationLoader, applyJoinRelations,\n * applyCountRelations) stay consistent — historically each path defaulted\n * differently, producing silent wrong-column bugs.\n *\n * Convention: snake_case + `_id` suffix. Matches PostgreSQL idiom and the\n * existing column convention used throughout `src/app/**` (`organization_id`,\n * `chat_id`, `image_id`, …).\n *\n * @module @warlock.js/cascade/relations/key-conventions\n */\n\nimport { toSnakeCase } from \"@mongez/reinforcements\";\nimport type { RelationDefaults } from \"../types\";\n\nconst DEFAULT_FK_SUFFIX = \"_id\";\nconst DEFAULT_PIVOT_ORDER: NonNullable<RelationDefaults[\"pivotTableNamingOrder\"]> = \"alphabetical\";\n\n// ============================================================================\n// PRIVATE — STRING NORMALISATION\n// ============================================================================\n\n/**\n * Convert a model class name or relation name to snake_case.\n *\n * Wraps `toSnakeCase` from `@mongez/reinforcements` because the lib's regex\n * loses the leading letters in runs of consecutive uppercase\n * (`toSnakeCase(\"AIModel\")` → `\"imodel\"`). The two pre-normalisation passes\n * here insert separators at run boundaries before delegating, so acronym-\n * prefixed model names (`AIModel`, `AIUsage`, `AITrip`, `HTTPSConnection`)\n * snake correctly.\n *\n * Once an upstream fix lands in `@mongez/reinforcements`, this wrapper can\n * be deleted and `toSnakeCase` called directly at the consumer sites.\n *\n * @example\n * snake(\"User\") // \"user\"\n * snake(\"BlogPost\") // \"blog_post\"\n * snake(\"AIModel\") // \"ai_model\"\n * snake(\"HTTPSConnection\") // \"https_connection\"\n * snake(\"organization\") // \"organization\" (idempotent)\n * snake(\"organizationId\") // \"organization_id\"\n */\nfunction snake(input: string): string {\n const normalised = input\n // Split a run of caps from a final cap+lower: \"AIModel\" → \"AI_Model\"\n .replace(/([A-Z]+)([A-Z][a-z])/g, \"$1_$2\")\n // Split a lower/digit boundary from the next cap: \"BlogPost\" → \"Blog_Post\"\n .replace(/([a-z\\d])([A-Z])/g, \"$1_$2\");\n\n return toSnakeCase(normalised).toLowerCase();\n}\n\n// ============================================================================\n// PUBLIC — DEFAULT FOREIGN-KEY INFERENCE\n// ============================================================================\n\n/**\n * Default foreign-key column name for a `belongsTo` relation.\n *\n * The FK lives on THIS model (the owner of the `belongsTo` def) and is\n * named after the *role* the relation plays — not the target model class.\n * Matches Laravel/Rails convention: `Post.author_id` (not `Post.user_id`)\n * because the relation is named \"author\".\n *\n * @param relationName - The relation key as declared in `static relations`\n *\n * @example\n * inferBelongsToForeignKey(\"author\") // \"author_id\"\n * inferBelongsToForeignKey(\"organization\") // \"organization_id\"\n * inferBelongsToForeignKey(\"parentItem\") // \"parent_item_id\"\n */\nexport function inferBelongsToForeignKey(\n relationName: string,\n options?: RelationDefaults,\n): string {\n return `${snake(relationName)}${options?.foreignKeySuffix ?? DEFAULT_FK_SUFFIX}`;\n}\n\n/**\n * Default foreign-key column name for a `hasMany` or `hasOne` relation.\n *\n * The FK lives on the RELATED model's table and points back to THIS model,\n * so the column is named after the self model class.\n *\n * @param selfModelName - The owning model's class name (e.g. `User`)\n *\n * @example\n * inferHasForeignKey(\"User\") // \"user_id\" — used as posts.user_id\n * inferHasForeignKey(\"AIModel\") // \"ai_model_id\" — used as ai_trips.ai_model_id\n */\nexport function inferHasForeignKey(\n selfModelName: string,\n options?: RelationDefaults,\n): string {\n return `${snake(selfModelName)}${options?.foreignKeySuffix ?? DEFAULT_FK_SUFFIX}`;\n}\n\n/**\n * Default column name in a many-to-many pivot table for either side\n * (the side referenced determines the model name passed in).\n *\n * - For the self-side pivot column: pass the self model name.\n * - For the related-side pivot column: pass the related model name.\n *\n * @param modelName - The model class name being referenced from the pivot\n *\n * @example\n * // For `Post.belongsToMany(\"Tag\", { pivot: \"post_tags\" })`:\n * inferPivotKey(\"Post\") // \"post_id\" — pivot column post_tags.post_id\n * inferPivotKey(\"Tag\") // \"tag_id\" — pivot column post_tags.tag_id\n */\nexport function inferPivotKey(modelName: string, options?: RelationDefaults): string {\n return `${snake(modelName)}${options?.foreignKeySuffix ?? DEFAULT_FK_SUFFIX}`;\n}\n\n/**\n * Default pivot-table name for a many-to-many relation when none is\n * explicitly configured. Joins the two model snake-names alphabetically\n * with an underscore — matches Laravel/Rails convention.\n *\n * Alphabetical ordering means the same pivot name resolves regardless of\n * which side of the relation declares the `@BelongsToMany`, so\n * `Post.belongsToMany(\"Tag\")` and `Tag.belongsToMany(\"Post\")` both pick\n * the table `post_tag`.\n *\n * @example\n * inferPivotTable(\"Post\", \"Tag\") // \"post_tag\"\n * inferPivotTable(\"User\", \"Group\") // \"group_user\"\n * inferPivotTable(\"AIModel\", \"Tenant\") // \"ai_model_tenant\"\n */\nexport function inferPivotTable(\n selfModelName: string,\n relatedModelName: string,\n options?: RelationDefaults,\n): string {\n const selfSnake = snake(selfModelName);\n const relatedSnake = snake(relatedModelName);\n const order = options?.pivotTableNamingOrder ?? DEFAULT_PIVOT_ORDER;\n\n if (order === \"owner_first\") {\n return `${selfSnake}_${relatedSnake}`;\n }\n\n return [selfSnake, relatedSnake].sort().join(\"_\");\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAmBA,MAAM,oBAAoB;AAC1B,MAAM,sBAA8E;;;;;;;;;;;;;;;;;;;;;;AA2BpF,SAAS,MAAM,OAAuB;CAOpC,OAAO,YANY,MAEhB,QAAQ,yBAAyB,OAAO,EAExC,QAAQ,qBAAqB,OAEJ,CAAC,EAAE,YAAY;AAC7C;;;;;;;;;;;;;;;;AAqBA,SAAgB,yBACd,cACA,SACQ;CACR,OAAO,GAAG,MAAM,YAAY,IAAI,SAAS,oBAAoB;AAC/D;;;;;;;;;;;;;AAcA,SAAgB,mBACd,eACA,SACQ;CACR,OAAO,GAAG,MAAM,aAAa,IAAI,SAAS,oBAAoB;AAChE;;;;;;;;;;;;;;;AAgBA,SAAgB,cAAc,WAAmB,SAAoC;CACnF,OAAO,GAAG,MAAM,SAAS,IAAI,SAAS,oBAAoB;AAC5D;;;;;;;;;;;;;;;;AAiBA,SAAgB,gBACd,eACA,kBACA,SACQ;CACR,MAAM,YAAY,MAAM,aAAa;CACrC,MAAM,eAAe,MAAM,gBAAgB;CAG3C,KAFc,SAAS,yBAAyB,yBAElC,eACZ,OAAO,GAAG,UAAU,GAAG;CAGzB,OAAO,CAAC,WAAW,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG;AAClD"}
@@ -0,0 +1,155 @@
1
+ import { ChildModel } from "../model/model.types.mjs";
2
+ import { PivotData, PivotIds, RelationDefinition } from "./types.mjs";
3
+ import { Model } from "../model/model.mjs";
4
+
5
+ //#region ../../@warlock.js/cascade/src/relations/pivot-operations.d.ts
6
+ /**
7
+ * Manages pivot table operations for many-to-many relationships.
8
+ *
9
+ * Provides attach, detach, sync, and toggle operations for managing
10
+ * the connections between two models through a pivot table.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const pivotOps = new PivotOperations(post, "tags", tagsDefinition);
15
+ *
16
+ * // Attach tags
17
+ * await pivotOps.attach([1, 2, 3]);
18
+ *
19
+ * // Attach with pivot data
20
+ * await pivotOps.attach([4], { addedBy: userId });
21
+ *
22
+ * // Detach specific tags
23
+ * await pivotOps.detach([2]);
24
+ *
25
+ * // Sync (replace all)
26
+ * await pivotOps.sync([1, 5, 6]);
27
+ *
28
+ * // Toggle (attach if missing, detach if present)
29
+ * await pivotOps.toggle([1, 7]);
30
+ * ```
31
+ */
32
+ declare class PivotOperations {
33
+ /**
34
+ * The model instance performing the pivot operation.
35
+ */
36
+ private readonly model;
37
+ /**
38
+ * The name of the relation.
39
+ */
40
+ private readonly relationName;
41
+ /**
42
+ * The relation definition with pivot table configuration.
43
+ */
44
+ private readonly definition;
45
+ /**
46
+ * The model class of the source model.
47
+ */
48
+ private readonly modelClass;
49
+ /**
50
+ * Creates a new PivotOperations instance.
51
+ *
52
+ * @param model - The model instance performing the operation
53
+ * @param relationName - The name of the belongsToMany relation
54
+ * @param definition - The relation definition
55
+ * @param modelClass - The model class constructor
56
+ */
57
+ constructor(model: Model, relationName: string, definition: RelationDefinition, modelClass: ChildModel<Model>);
58
+ /**
59
+ * Read the configured relation conventions from this pivot's owning
60
+ * data source. Returns `undefined` when no overrides are set.
61
+ */
62
+ private get relationDefaults();
63
+ /**
64
+ * Attaches one or more related models via the pivot table.
65
+ *
66
+ * Creates new records in the pivot table linking this model to the
67
+ * specified related model IDs. Existing attachments are not duplicated.
68
+ *
69
+ * @param ids - The IDs of the related models to attach
70
+ * @param pivotData - Optional additional data to store in the pivot record
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * // Attach tags to a post
75
+ * await post.attach("tags", [1, 2, 3]);
76
+ *
77
+ * // Attach with additional pivot data
78
+ * await post.attach("tags", [4], { addedBy: currentUserId });
79
+ * ```
80
+ */
81
+ attach(ids: PivotIds, pivotData?: PivotData): Promise<void>;
82
+ /**
83
+ * Detaches one or more related models from the pivot table.
84
+ *
85
+ * Removes records from the pivot table. If no IDs are specified,
86
+ * all attachments for this model are removed.
87
+ *
88
+ * @param ids - Optional IDs to detach. If omitted, detaches all.
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * // Detach specific tags
93
+ * await post.detach("tags", [2, 3]);
94
+ *
95
+ * // Detach all tags
96
+ * await post.detach("tags");
97
+ * ```
98
+ */
99
+ detach(ids?: PivotIds): Promise<void>;
100
+ /**
101
+ * Synchronizes the pivot table to match the specified IDs.
102
+ *
103
+ * Attaches any new IDs and detaches any IDs not in the list.
104
+ * After sync, the pivot table will contain exactly the specified IDs.
105
+ *
106
+ * @param ids - The IDs that should be attached after sync
107
+ * @param pivotData - Optional data for newly attached records
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * // Set tags to exactly [1, 3, 5], removing any others
112
+ * await post.sync("tags", [1, 3, 5]);
113
+ * ```
114
+ */
115
+ sync(ids: PivotIds, pivotData?: PivotData): Promise<void>;
116
+ /**
117
+ * Toggles the attachment status of the specified IDs.
118
+ *
119
+ * For each ID: if attached, detaches it; if not attached, attaches it.
120
+ *
121
+ * @param ids - The IDs to toggle
122
+ * @param pivotData - Optional data for newly attached records
123
+ *
124
+ * @example
125
+ * ```typescript
126
+ * // Toggle tags - attached become detached, detached become attached
127
+ * await post.toggle("tags", [1, 4]);
128
+ * ```
129
+ */
130
+ toggle(ids: PivotIds, pivotData?: PivotData): Promise<void>;
131
+ /**
132
+ * Gets the pivot table configuration.
133
+ *
134
+ * @returns The pivot configuration object
135
+ */
136
+ private getPivotConfig;
137
+ /**
138
+ * Gets all currently attached IDs from the pivot table.
139
+ *
140
+ * @returns A set of attached foreign key values
141
+ */
142
+ private getExistingPivotIds;
143
+ }
144
+ /**
145
+ * Creates a PivotOperations instance for a model and relation.
146
+ *
147
+ * @param model - The model instance
148
+ * @param relationName - The name of the belongsToMany relation
149
+ * @returns A PivotOperations instance
150
+ * @throws Error if the relation is not a belongsToMany or not defined
151
+ */
152
+ declare function createPivotOperations(model: Model, relationName: string): PivotOperations;
153
+ //#endregion
154
+ export { PivotOperations, createPivotOperations };
155
+ //# sourceMappingURL=pivot-operations.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pivot-operations.d.mts","names":[],"sources":["../../../../../../@warlock.js/cascade/src/relations/pivot-operations.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA4Ca,eAAA;EAyCT;;;EAAA,iBAjCe,KAAA;EAkFG;;;EAAA,iBA7EH,YAAA;EAoHJ;;;EAAA,iBA/GI,UAAA;EA8IJ;;;EAAA,iBAzII,UAAA;EAyIgB;;;;;;;;cA1H/B,KAAA,EAAO,KAAA,EACP,YAAA,UACA,UAAA,EAAY,kBAAA,EACZ,UAAA,EAAY,UAAA,CAAW,KAAA;EAmOX;;AAAmB;AAmCnC;EAnCgB,YAhNF,gBAAA,CAAA;;;;;;;;AAmP4E;;;;;;;;;;;EArN3E,MAAA,CAAO,GAAA,EAAK,QAAA,EAAU,SAAA,GAAY,SAAA,GAAY,OAAA;;;;;;;;;;;;;;;;;;EAuC9C,MAAA,CAAO,GAAA,GAAM,QAAA,GAAW,OAAA;;;;;;;;;;;;;;;;EA+BxB,IAAA,CAAK,GAAA,EAAK,QAAA,EAAU,SAAA,GAAY,SAAA,GAAY,OAAA;;;;;;;;;;;;;;;EAuC5C,MAAA,CAAO,GAAA,EAAK,QAAA,EAAU,SAAA,GAAY,SAAA,GAAY,OAAA;;;;;;UAkCnD,cAAA;;;;;;UAmCM,mBAAA;AAAA;;;;;;;;;iBAmCA,qBAAA,CAAsB,KAAA,EAAO,KAAA,EAAO,YAAA,WAAuB,eAAe"}