@warlock.js/cascade 4.0.171 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1050) hide show
  1. package/README.md +6 -5
  2. package/bin/cascadejs +3 -0
  3. package/esm/cli/commands/migrate-export-sql.mjs +48 -0
  4. package/esm/cli/commands/migrate-export-sql.mjs.map +1 -0
  5. package/esm/cli/commands/migrate-list.mjs +26 -0
  6. package/esm/cli/commands/migrate-list.mjs.map +1 -0
  7. package/esm/cli/commands/migrate-rollback.mjs +50 -0
  8. package/esm/cli/commands/migrate-rollback.mjs.map +1 -0
  9. package/esm/cli/commands/migrate.mjs +65 -0
  10. package/esm/cli/commands/migrate.mjs.map +1 -0
  11. package/esm/cli/connection-from-env.mjs +181 -0
  12. package/esm/cli/connection-from-env.mjs.map +1 -0
  13. package/esm/cli/index.mjs +31 -0
  14. package/esm/cli/index.mjs.map +1 -0
  15. package/esm/cli/load-migrations.mjs +78 -0
  16. package/esm/cli/load-migrations.mjs.map +1 -0
  17. package/esm/cli/printers.mjs +57 -0
  18. package/esm/cli/printers.mjs.map +1 -0
  19. package/esm/cli/setup-logger.mjs +30 -0
  20. package/esm/cli/setup-logger.mjs.map +1 -0
  21. package/esm/cli/with-cli-connection.mjs +39 -0
  22. package/esm/cli/with-cli-connection.mjs.map +1 -0
  23. package/esm/cli.d.mts +1 -0
  24. package/esm/cli.mjs +26 -0
  25. package/esm/cli.mjs.map +1 -0
  26. package/esm/context/database-data-source-context.d.mts +32 -0
  27. package/esm/context/database-data-source-context.d.mts.map +1 -0
  28. package/esm/context/database-data-source-context.mjs +35 -0
  29. package/esm/context/database-data-source-context.mjs.map +1 -0
  30. package/esm/context/database-transaction-context.d.mts +38 -0
  31. package/esm/context/database-transaction-context.d.mts.map +1 -0
  32. package/esm/context/database-transaction-context.mjs +47 -0
  33. package/esm/context/database-transaction-context.mjs.map +1 -0
  34. package/esm/contracts/database-driver.contract.d.mts +443 -0
  35. package/esm/contracts/database-driver.contract.d.mts.map +1 -0
  36. package/esm/contracts/database-id-generator.contract.d.mts +109 -0
  37. package/esm/contracts/database-id-generator.contract.d.mts.map +1 -0
  38. package/esm/contracts/database-remover.contract.d.mts +108 -0
  39. package/esm/contracts/database-remover.contract.d.mts.map +1 -0
  40. package/esm/contracts/database-restorer.contract.d.mts +145 -0
  41. package/esm/contracts/database-restorer.contract.d.mts.map +1 -0
  42. package/esm/contracts/database-writer.contract.d.mts +123 -0
  43. package/esm/contracts/database-writer.contract.d.mts.map +1 -0
  44. package/esm/contracts/driver-blueprint.contract.d.mts +52 -0
  45. package/esm/contracts/driver-blueprint.contract.d.mts.map +1 -0
  46. package/esm/contracts/index.d.mts +9 -0
  47. package/esm/contracts/migration-driver.contract.d.mts +476 -0
  48. package/esm/contracts/migration-driver.contract.d.mts.map +1 -0
  49. package/esm/contracts/query-builder.contract.d.mts +1663 -0
  50. package/esm/contracts/query-builder.contract.d.mts.map +1 -0
  51. package/esm/contracts/sync-adapter.contract.d.mts +49 -0
  52. package/esm/contracts/sync-adapter.contract.d.mts.map +1 -0
  53. package/esm/data-source/data-source-registry.d.mts +111 -0
  54. package/esm/data-source/data-source-registry.d.mts.map +1 -0
  55. package/esm/data-source/data-source-registry.mjs +142 -0
  56. package/esm/data-source/data-source-registry.mjs.map +1 -0
  57. package/esm/data-source/data-source.d.mts +160 -0
  58. package/esm/data-source/data-source.d.mts.map +1 -0
  59. package/esm/data-source/data-source.mjs +87 -0
  60. package/esm/data-source/data-source.mjs.map +1 -0
  61. package/esm/database-dirty-tracker.d.mts +254 -0
  62. package/esm/database-dirty-tracker.d.mts.map +1 -0
  63. package/esm/database-dirty-tracker.mjs +356 -0
  64. package/esm/database-dirty-tracker.mjs.map +1 -0
  65. package/esm/drivers/mongodb/mongodb-blueprint.mjs +54 -0
  66. package/esm/drivers/mongodb/mongodb-blueprint.mjs.map +1 -0
  67. package/esm/drivers/mongodb/mongodb-driver.d.mts +334 -0
  68. package/esm/drivers/mongodb/mongodb-driver.d.mts.map +1 -0
  69. package/esm/drivers/mongodb/mongodb-driver.mjs +716 -0
  70. package/esm/drivers/mongodb/mongodb-driver.mjs.map +1 -0
  71. package/esm/drivers/mongodb/mongodb-id-generator.d.mts +120 -0
  72. package/esm/drivers/mongodb/mongodb-id-generator.d.mts.map +1 -0
  73. package/esm/drivers/mongodb/mongodb-id-generator.mjs +141 -0
  74. package/esm/drivers/mongodb/mongodb-id-generator.mjs.map +1 -0
  75. package/esm/drivers/mongodb/mongodb-migration-driver.d.mts +322 -0
  76. package/esm/drivers/mongodb/mongodb-migration-driver.d.mts.map +1 -0
  77. package/esm/drivers/mongodb/mongodb-migration-driver.mjs +531 -0
  78. package/esm/drivers/mongodb/mongodb-migration-driver.mjs.map +1 -0
  79. package/esm/drivers/mongodb/mongodb-query-builder.d.mts +1117 -0
  80. package/esm/drivers/mongodb/mongodb-query-builder.d.mts.map +1 -0
  81. package/esm/drivers/mongodb/mongodb-query-builder.mjs +1828 -0
  82. package/esm/drivers/mongodb/mongodb-query-builder.mjs.map +1 -0
  83. package/esm/drivers/mongodb/mongodb-query-operations.d.mts +230 -0
  84. package/esm/drivers/mongodb/mongodb-query-operations.d.mts.map +1 -0
  85. package/esm/drivers/mongodb/mongodb-query-operations.mjs +275 -0
  86. package/esm/drivers/mongodb/mongodb-query-operations.mjs.map +1 -0
  87. package/esm/drivers/mongodb/mongodb-query-parser.d.mts +263 -0
  88. package/esm/drivers/mongodb/mongodb-query-parser.d.mts.map +1 -0
  89. package/esm/drivers/mongodb/mongodb-query-parser.mjs +965 -0
  90. package/esm/drivers/mongodb/mongodb-query-parser.mjs.map +1 -0
  91. package/esm/drivers/mongodb/mongodb-sync-adapter.d.mts +78 -0
  92. package/esm/drivers/mongodb/mongodb-sync-adapter.d.mts.map +1 -0
  93. package/esm/drivers/mongodb/mongodb-sync-adapter.mjs +118 -0
  94. package/esm/drivers/mongodb/mongodb-sync-adapter.mjs.map +1 -0
  95. package/esm/drivers/mongodb/types.d.mts +43 -0
  96. package/esm/drivers/mongodb/types.d.mts.map +1 -0
  97. package/esm/drivers/postgres/index.d.mts +8 -0
  98. package/esm/drivers/postgres/index.mjs +9 -0
  99. package/esm/drivers/postgres/postgres-blueprint.d.mts +60 -0
  100. package/esm/drivers/postgres/postgres-blueprint.d.mts.map +1 -0
  101. package/esm/drivers/postgres/postgres-blueprint.mjs +105 -0
  102. package/esm/drivers/postgres/postgres-blueprint.mjs.map +1 -0
  103. package/esm/drivers/postgres/postgres-dialect.d.mts +144 -0
  104. package/esm/drivers/postgres/postgres-dialect.d.mts.map +1 -0
  105. package/esm/drivers/postgres/postgres-dialect.mjs +227 -0
  106. package/esm/drivers/postgres/postgres-dialect.mjs.map +1 -0
  107. package/esm/drivers/postgres/postgres-driver.d.mts +424 -0
  108. package/esm/drivers/postgres/postgres-driver.d.mts.map +1 -0
  109. package/esm/drivers/postgres/postgres-driver.mjs +845 -0
  110. package/esm/drivers/postgres/postgres-driver.mjs.map +1 -0
  111. package/esm/drivers/postgres/postgres-migration-driver.d.mts +393 -0
  112. package/esm/drivers/postgres/postgres-migration-driver.d.mts.map +1 -0
  113. package/esm/drivers/postgres/postgres-migration-driver.mjs +760 -0
  114. package/esm/drivers/postgres/postgres-migration-driver.mjs.map +1 -0
  115. package/esm/drivers/postgres/postgres-query-builder.d.mts +399 -0
  116. package/esm/drivers/postgres/postgres-query-builder.d.mts.map +1 -0
  117. package/esm/drivers/postgres/postgres-query-builder.mjs +1105 -0
  118. package/esm/drivers/postgres/postgres-query-builder.mjs.map +1 -0
  119. package/esm/drivers/postgres/postgres-query-parser.d.mts +351 -0
  120. package/esm/drivers/postgres/postgres-query-parser.d.mts.map +1 -0
  121. package/esm/drivers/postgres/postgres-query-parser.mjs +796 -0
  122. package/esm/drivers/postgres/postgres-query-parser.mjs.map +1 -0
  123. package/esm/drivers/postgres/postgres-sql-serializer.mjs +260 -0
  124. package/esm/drivers/postgres/postgres-sql-serializer.mjs.map +1 -0
  125. package/esm/drivers/postgres/postgres-sync-adapter.d.mts +79 -0
  126. package/esm/drivers/postgres/postgres-sync-adapter.d.mts.map +1 -0
  127. package/esm/drivers/postgres/postgres-sync-adapter.mjs +162 -0
  128. package/esm/drivers/postgres/postgres-sync-adapter.mjs.map +1 -0
  129. package/esm/drivers/postgres/types.d.mts +105 -0
  130. package/esm/drivers/postgres/types.d.mts.map +1 -0
  131. package/esm/drivers/sql/sql-dialect.contract.d.mts +221 -0
  132. package/esm/drivers/sql/sql-dialect.contract.d.mts.map +1 -0
  133. package/esm/drivers/sql/sql-types.d.mts +150 -0
  134. package/esm/drivers/sql/sql-types.d.mts.map +1 -0
  135. package/esm/errors/missing-data-source.error.d.mts +25 -0
  136. package/esm/errors/missing-data-source.error.d.mts.map +1 -0
  137. package/esm/errors/missing-data-source.error.mjs +31 -0
  138. package/esm/errors/missing-data-source.error.mjs.map +1 -0
  139. package/esm/errors/transaction-rollback.error.d.mts +23 -0
  140. package/esm/errors/transaction-rollback.error.d.mts.map +1 -0
  141. package/esm/errors/transaction-rollback.error.mjs +29 -0
  142. package/esm/errors/transaction-rollback.error.mjs.map +1 -0
  143. package/esm/events/model-events.d.mts +234 -0
  144. package/esm/events/model-events.d.mts.map +1 -0
  145. package/esm/events/model-events.mjs +254 -0
  146. package/esm/events/model-events.mjs.map +1 -0
  147. package/esm/expressions/aggregate-expressions.d.mts +224 -0
  148. package/esm/expressions/aggregate-expressions.d.mts.map +1 -0
  149. package/esm/expressions/aggregate-expressions.mjs +232 -0
  150. package/esm/expressions/aggregate-expressions.mjs.map +1 -0
  151. package/esm/index.d.mts +67 -0
  152. package/esm/index.mjs +53 -0
  153. package/esm/migration/column-builder.d.mts +420 -0
  154. package/esm/migration/column-builder.d.mts.map +1 -0
  155. package/esm/migration/column-builder.mjs +532 -0
  156. package/esm/migration/column-builder.mjs.map +1 -0
  157. package/esm/migration/column-helpers.d.mts +280 -0
  158. package/esm/migration/column-helpers.d.mts.map +1 -0
  159. package/esm/migration/column-helpers.mjs +376 -0
  160. package/esm/migration/column-helpers.mjs.map +1 -0
  161. package/esm/migration/foreign-key-builder.d.mts +106 -0
  162. package/esm/migration/foreign-key-builder.d.mts.map +1 -0
  163. package/esm/migration/foreign-key-builder.mjs +126 -0
  164. package/esm/migration/foreign-key-builder.mjs.map +1 -0
  165. package/esm/migration/index.d.mts +6 -0
  166. package/esm/migration/index.mjs +7 -0
  167. package/esm/migration/migration-runner.d.mts +279 -0
  168. package/esm/migration/migration-runner.d.mts.map +1 -0
  169. package/esm/migration/migration-runner.mjs +662 -0
  170. package/esm/migration/migration-runner.mjs.map +1 -0
  171. package/esm/migration/migration.d.mts +2035 -0
  172. package/esm/migration/migration.d.mts.map +1 -0
  173. package/esm/migration/migration.mjs +2083 -0
  174. package/esm/migration/migration.mjs.map +1 -0
  175. package/esm/migration/sql-grammar.mjs +115 -0
  176. package/esm/migration/sql-grammar.mjs.map +1 -0
  177. package/esm/migration/sql-serializer.d.mts +26 -0
  178. package/esm/migration/sql-serializer.d.mts.map +1 -0
  179. package/esm/migration/sql-serializer.mjs +26 -0
  180. package/esm/migration/sql-serializer.mjs.map +1 -0
  181. package/esm/migration/types.d.mts +136 -0
  182. package/esm/migration/types.d.mts.map +1 -0
  183. package/esm/model/methods/accessor-methods.mjs +54 -0
  184. package/esm/model/methods/accessor-methods.mjs.map +1 -0
  185. package/esm/model/methods/delete-methods.mjs +16 -0
  186. package/esm/model/methods/delete-methods.mjs.map +1 -0
  187. package/esm/model/methods/dirty-methods.mjs +20 -0
  188. package/esm/model/methods/dirty-methods.mjs.map +1 -0
  189. package/esm/model/methods/hydration-methods.mjs +51 -0
  190. package/esm/model/methods/hydration-methods.mjs.map +1 -0
  191. package/esm/model/methods/instance-event-methods.mjs +22 -0
  192. package/esm/model/methods/instance-event-methods.mjs.map +1 -0
  193. package/esm/model/methods/meta-methods.mjs +36 -0
  194. package/esm/model/methods/meta-methods.mjs.map +1 -0
  195. package/esm/model/methods/pivot-methods.mjs +48 -0
  196. package/esm/model/methods/pivot-methods.mjs.map +1 -0
  197. package/esm/model/methods/query-methods.mjs +121 -0
  198. package/esm/model/methods/query-methods.mjs.map +1 -0
  199. package/esm/model/methods/restore-methods.mjs +16 -0
  200. package/esm/model/methods/restore-methods.mjs.map +1 -0
  201. package/esm/model/methods/scope-methods.mjs +20 -0
  202. package/esm/model/methods/scope-methods.mjs.map +1 -0
  203. package/esm/model/methods/serialization-methods.mjs +20 -0
  204. package/esm/model/methods/serialization-methods.mjs.map +1 -0
  205. package/esm/model/methods/static-event-methods.mjs +37 -0
  206. package/esm/model/methods/static-event-methods.mjs.map +1 -0
  207. package/esm/model/methods/write-methods.mjs +69 -0
  208. package/esm/model/methods/write-methods.mjs.map +1 -0
  209. package/esm/model/model.d.mts +1778 -0
  210. package/esm/model/model.d.mts.map +1 -0
  211. package/esm/model/model.mjs +1762 -0
  212. package/esm/model/model.mjs.map +1 -0
  213. package/esm/model/model.types.d.mts +47 -0
  214. package/esm/model/model.types.d.mts.map +1 -0
  215. package/esm/model/register-model.d.mts +140 -0
  216. package/esm/model/register-model.d.mts.map +1 -0
  217. package/esm/model/register-model.mjs +175 -0
  218. package/esm/model/register-model.mjs.map +1 -0
  219. package/esm/model/relation-decorators.d.mts +88 -0
  220. package/esm/model/relation-decorators.d.mts.map +1 -0
  221. package/esm/model/relation-decorators.mjs +191 -0
  222. package/esm/model/relation-decorators.mjs.map +1 -0
  223. package/esm/operations/database.d.mts +46 -0
  224. package/esm/operations/database.d.mts.map +1 -0
  225. package/esm/operations/database.mjs +40 -0
  226. package/esm/operations/database.mjs.map +1 -0
  227. package/esm/operations/index.d.mts +2 -0
  228. package/esm/operations/index.mjs +4 -0
  229. package/esm/operations/migrations.d.mts +71 -0
  230. package/esm/operations/migrations.d.mts.map +1 -0
  231. package/esm/operations/migrations.mjs +70 -0
  232. package/esm/operations/migrations.mjs.map +1 -0
  233. package/esm/query-builder/query-builder.d.mts +564 -0
  234. package/esm/query-builder/query-builder.d.mts.map +1 -0
  235. package/esm/query-builder/query-builder.mjs +1097 -0
  236. package/esm/query-builder/query-builder.mjs.map +1 -0
  237. package/esm/relations/index.d.mts +4 -0
  238. package/esm/relations/index.mjs +5 -0
  239. package/esm/relations/key-conventions.mjs +119 -0
  240. package/esm/relations/key-conventions.mjs.map +1 -0
  241. package/esm/relations/pivot-operations.d.mts +155 -0
  242. package/esm/relations/pivot-operations.d.mts.map +1 -0
  243. package/esm/relations/pivot-operations.mjs +232 -0
  244. package/esm/relations/pivot-operations.mjs.map +1 -0
  245. package/esm/relations/relation-hydrator.d.mts +55 -0
  246. package/esm/relations/relation-hydrator.d.mts.map +1 -0
  247. package/esm/relations/relation-hydrator.mjs +52 -0
  248. package/esm/relations/relation-hydrator.mjs.map +1 -0
  249. package/esm/relations/relation-loader.d.mts +190 -0
  250. package/esm/relations/relation-loader.d.mts.map +1 -0
  251. package/esm/relations/relation-loader.mjs +416 -0
  252. package/esm/relations/relation-loader.mjs.map +1 -0
  253. package/esm/relations/types.d.mts +317 -0
  254. package/esm/relations/types.d.mts.map +1 -0
  255. package/esm/remover/database-remover.d.mts +104 -0
  256. package/esm/remover/database-remover.d.mts.map +1 -0
  257. package/esm/remover/database-remover.mjs +174 -0
  258. package/esm/remover/database-remover.mjs.map +1 -0
  259. package/esm/restorer/database-restorer.d.mts +135 -0
  260. package/esm/restorer/database-restorer.d.mts.map +1 -0
  261. package/esm/restorer/database-restorer.mjs +316 -0
  262. package/esm/restorer/database-restorer.mjs.map +1 -0
  263. package/esm/sql-database-dirty-tracker.d.mts +17 -0
  264. package/esm/sql-database-dirty-tracker.d.mts.map +1 -0
  265. package/esm/sql-database-dirty-tracker.mjs +20 -0
  266. package/esm/sql-database-dirty-tracker.mjs.map +1 -0
  267. package/esm/sync/model-events.mjs +46 -0
  268. package/esm/sync/model-events.mjs.map +1 -0
  269. package/esm/sync/model-sync-operation.d.mts +159 -0
  270. package/esm/sync/model-sync-operation.d.mts.map +1 -0
  271. package/esm/sync/model-sync-operation.mjs +257 -0
  272. package/esm/sync/model-sync-operation.mjs.map +1 -0
  273. package/esm/sync/model-sync.d.mts +126 -0
  274. package/esm/sync/model-sync.d.mts.map +1 -0
  275. package/esm/sync/model-sync.mjs +157 -0
  276. package/esm/sync/model-sync.mjs.map +1 -0
  277. package/esm/sync/sync-context.d.mts +69 -0
  278. package/esm/sync/sync-context.d.mts.map +1 -0
  279. package/esm/sync/sync-context.mjs +95 -0
  280. package/esm/sync/sync-context.mjs.map +1 -0
  281. package/esm/sync/sync-manager.d.mts +213 -0
  282. package/esm/sync/sync-manager.d.mts.map +1 -0
  283. package/esm/sync/sync-manager.mjs +597 -0
  284. package/esm/sync/sync-manager.mjs.map +1 -0
  285. package/esm/sync/types.d.mts +215 -0
  286. package/esm/sync/types.d.mts.map +1 -0
  287. package/esm/types.d.mts +423 -0
  288. package/esm/types.d.mts.map +1 -0
  289. package/esm/utils/connect-to-database.d.mts +328 -0
  290. package/esm/utils/connect-to-database.d.mts.map +1 -0
  291. package/esm/utils/connect-to-database.mjs +130 -0
  292. package/esm/utils/connect-to-database.mjs.map +1 -0
  293. package/esm/utils/database-writer.utils.d.mts +18 -0
  294. package/esm/utils/database-writer.utils.d.mts.map +1 -0
  295. package/esm/utils/database-writer.utils.mjs +25 -0
  296. package/esm/utils/database-writer.utils.mjs.map +1 -0
  297. package/esm/utils/define-model.d.mts +185 -0
  298. package/esm/utils/define-model.d.mts.map +1 -0
  299. package/esm/utils/define-model.mjs +105 -0
  300. package/esm/utils/define-model.mjs.map +1 -0
  301. package/esm/utils/is-valid-date-value.mjs +22 -0
  302. package/esm/utils/is-valid-date-value.mjs.map +1 -0
  303. package/esm/utils/once-connected.d.mts +150 -0
  304. package/esm/utils/once-connected.d.mts.map +1 -0
  305. package/esm/utils/once-connected.mjs +203 -0
  306. package/esm/utils/once-connected.mjs.map +1 -0
  307. package/esm/validation/database-seal-plugins.d.mts +1 -0
  308. package/esm/validation/database-seal-plugins.mjs +11 -0
  309. package/esm/validation/database-seal-plugins.mjs.map +1 -0
  310. package/esm/validation/database-writer-validation-error.d.mts +101 -0
  311. package/esm/validation/database-writer-validation-error.d.mts.map +1 -0
  312. package/esm/validation/database-writer-validation-error.mjs +153 -0
  313. package/esm/validation/database-writer-validation-error.mjs.map +1 -0
  314. package/esm/validation/index.d.mts +2 -0
  315. package/esm/validation/index.mjs +4 -0
  316. package/esm/validation/mutators/embed-mutator.mjs +26 -0
  317. package/esm/validation/mutators/embed-mutator.mjs.map +1 -0
  318. package/esm/validation/plugins/database-rules-plugin.d.mts +28 -0
  319. package/esm/validation/plugins/database-rules-plugin.d.mts.map +1 -0
  320. package/esm/validation/plugins/database-rules-plugin.mjs +43 -0
  321. package/esm/validation/plugins/database-rules-plugin.mjs.map +1 -0
  322. package/esm/validation/plugins/embed-validator-plugin.d.mts +17 -0
  323. package/esm/validation/plugins/embed-validator-plugin.d.mts.map +1 -0
  324. package/esm/validation/plugins/embed-validator-plugin.mjs +20 -0
  325. package/esm/validation/plugins/embed-validator-plugin.mjs.map +1 -0
  326. package/esm/validation/rules/database-model-rule.mjs +32 -0
  327. package/esm/validation/rules/database-model-rule.mjs.map +1 -0
  328. package/esm/validation/rules/exists-rule.mjs +29 -0
  329. package/esm/validation/rules/exists-rule.mjs.map +1 -0
  330. package/esm/validation/rules/unique-rule.mjs +43 -0
  331. package/esm/validation/rules/unique-rule.mjs.map +1 -0
  332. package/esm/validation/transformers/embed-model-transformer.mjs +17 -0
  333. package/esm/validation/transformers/embed-model-transformer.mjs.map +1 -0
  334. package/esm/validation/types.d.mts +43 -0
  335. package/esm/validation/types.d.mts.map +1 -0
  336. package/esm/validation/validators/embed-validator.d.mts +25 -0
  337. package/esm/validation/validators/embed-validator.d.mts.map +1 -0
  338. package/esm/validation/validators/embed-validator.mjs +42 -0
  339. package/esm/validation/validators/embed-validator.mjs.map +1 -0
  340. package/esm/writer/database-writer.d.mts +178 -0
  341. package/esm/writer/database-writer.d.mts.map +1 -0
  342. package/esm/writer/database-writer.mjs +317 -0
  343. package/esm/writer/database-writer.mjs.map +1 -0
  344. package/llms-full.txt +2027 -0
  345. package/llms.txt +23 -0
  346. package/package.json +60 -51
  347. package/skills/README.md +65 -0
  348. package/skills/aggregate-data/SKILL.md +102 -0
  349. package/skills/cascade-basics/SKILL.md +93 -0
  350. package/skills/configure-delete-strategy/SKILL.md +126 -0
  351. package/skills/define-model/SKILL.md +170 -0
  352. package/skills/define-relations/SKILL.md +171 -0
  353. package/skills/manage-data-sources/SKILL.md +140 -0
  354. package/skills/manage-transactions/SKILL.md +118 -0
  355. package/skills/paginate-results/SKILL.md +122 -0
  356. package/skills/perform-atomic-ops/SKILL.md +98 -0
  357. package/skills/query-data/SKILL.md +168 -0
  358. package/skills/run-cascade-cli/SKILL.md +125 -0
  359. package/skills/search-by-vector/SKILL.md +127 -0
  360. package/skills/subscribe-to-model-events/SKILL.md +148 -0
  361. package/skills/track-changes/SKILL.md +109 -0
  362. package/skills/write-migration/SKILL.md +144 -0
  363. package/cjs/context/database-data-source-context.d.ts +0 -29
  364. package/cjs/context/database-data-source-context.d.ts.map +0 -1
  365. package/cjs/context/database-data-source-context.js +0 -28
  366. package/cjs/context/database-data-source-context.js.map +0 -1
  367. package/cjs/context/database-transaction-context.d.ts +0 -35
  368. package/cjs/context/database-transaction-context.d.ts.map +0 -1
  369. package/cjs/context/database-transaction-context.js +0 -40
  370. package/cjs/context/database-transaction-context.js.map +0 -1
  371. package/cjs/contracts/database-driver.contract.d.ts +0 -450
  372. package/cjs/contracts/database-driver.contract.d.ts.map +0 -1
  373. package/cjs/contracts/database-id-generator.contract.d.ts +0 -109
  374. package/cjs/contracts/database-id-generator.contract.d.ts.map +0 -1
  375. package/cjs/contracts/database-remover.contract.d.ts +0 -104
  376. package/cjs/contracts/database-remover.contract.d.ts.map +0 -1
  377. package/cjs/contracts/database-restorer.contract.d.ts +0 -143
  378. package/cjs/contracts/database-restorer.contract.d.ts.map +0 -1
  379. package/cjs/contracts/database-writer.contract.d.ts +0 -119
  380. package/cjs/contracts/database-writer.contract.d.ts.map +0 -1
  381. package/cjs/contracts/driver-blueprint.contract.d.ts +0 -49
  382. package/cjs/contracts/driver-blueprint.contract.d.ts.map +0 -1
  383. package/cjs/contracts/index.d.ts +0 -10
  384. package/cjs/contracts/index.d.ts.map +0 -1
  385. package/cjs/contracts/migration-driver.contract.d.ts +0 -522
  386. package/cjs/contracts/migration-driver.contract.d.ts.map +0 -1
  387. package/cjs/contracts/query-builder.contract.d.ts +0 -1609
  388. package/cjs/contracts/query-builder.contract.d.ts.map +0 -1
  389. package/cjs/contracts/sync-adapter.contract.d.ts +0 -58
  390. package/cjs/contracts/sync-adapter.contract.d.ts.map +0 -1
  391. package/cjs/data-source/data-source-registry.d.ts +0 -108
  392. package/cjs/data-source/data-source-registry.d.ts.map +0 -1
  393. package/cjs/data-source/data-source-registry.js +0 -145
  394. package/cjs/data-source/data-source-registry.js.map +0 -1
  395. package/cjs/data-source/data-source.d.ts +0 -147
  396. package/cjs/data-source/data-source.d.ts.map +0 -1
  397. package/cjs/data-source/data-source.js +0 -83
  398. package/cjs/data-source/data-source.js.map +0 -1
  399. package/cjs/database-dirty-tracker.d.ts +0 -252
  400. package/cjs/database-dirty-tracker.d.ts.map +0 -1
  401. package/cjs/database-dirty-tracker.js +0 -386
  402. package/cjs/database-dirty-tracker.js.map +0 -1
  403. package/cjs/drivers/mongodb/mongodb-blueprint.d.ts +0 -30
  404. package/cjs/drivers/mongodb/mongodb-blueprint.d.ts.map +0 -1
  405. package/cjs/drivers/mongodb/mongodb-blueprint.js +0 -51
  406. package/cjs/drivers/mongodb/mongodb-blueprint.js.map +0 -1
  407. package/cjs/drivers/mongodb/mongodb-driver.d.ts +0 -325
  408. package/cjs/drivers/mongodb/mongodb-driver.d.ts.map +0 -1
  409. package/cjs/drivers/mongodb/mongodb-driver.js +0 -845
  410. package/cjs/drivers/mongodb/mongodb-driver.js.map +0 -1
  411. package/cjs/drivers/mongodb/mongodb-id-generator.d.ts +0 -116
  412. package/cjs/drivers/mongodb/mongodb-id-generator.d.ts.map +0 -1
  413. package/cjs/drivers/mongodb/mongodb-id-generator.js +0 -149
  414. package/cjs/drivers/mongodb/mongodb-id-generator.js.map +0 -1
  415. package/cjs/drivers/mongodb/mongodb-migration-driver.d.ts +0 -317
  416. package/cjs/drivers/mongodb/mongodb-migration-driver.d.ts.map +0 -1
  417. package/cjs/drivers/mongodb/mongodb-migration-driver.js +0 -666
  418. package/cjs/drivers/mongodb/mongodb-migration-driver.js.map +0 -1
  419. package/cjs/drivers/mongodb/mongodb-query-builder.d.ts +0 -1122
  420. package/cjs/drivers/mongodb/mongodb-query-builder.d.ts.map +0 -1
  421. package/cjs/drivers/mongodb/mongodb-query-builder.js +0 -1988
  422. package/cjs/drivers/mongodb/mongodb-query-builder.js.map +0 -1
  423. package/cjs/drivers/mongodb/mongodb-query-operations.d.ts +0 -226
  424. package/cjs/drivers/mongodb/mongodb-query-operations.d.ts.map +0 -1
  425. package/cjs/drivers/mongodb/mongodb-query-operations.js +0 -270
  426. package/cjs/drivers/mongodb/mongodb-query-operations.js.map +0 -1
  427. package/cjs/drivers/mongodb/mongodb-query-parser.d.ts +0 -262
  428. package/cjs/drivers/mongodb/mongodb-query-parser.d.ts.map +0 -1
  429. package/cjs/drivers/mongodb/mongodb-query-parser.js +0 -1351
  430. package/cjs/drivers/mongodb/mongodb-query-parser.js.map +0 -1
  431. package/cjs/drivers/mongodb/mongodb-sync-adapter.d.ts +0 -79
  432. package/cjs/drivers/mongodb/mongodb-sync-adapter.d.ts.map +0 -1
  433. package/cjs/drivers/mongodb/mongodb-sync-adapter.js +0 -146
  434. package/cjs/drivers/mongodb/mongodb-sync-adapter.js.map +0 -1
  435. package/cjs/drivers/mongodb/types.d.ts +0 -43
  436. package/cjs/drivers/mongodb/types.d.ts.map +0 -1
  437. package/cjs/drivers/postgres/index.d.ts +0 -16
  438. package/cjs/drivers/postgres/index.d.ts.map +0 -1
  439. package/cjs/drivers/postgres/postgres-blueprint.d.ts +0 -64
  440. package/cjs/drivers/postgres/postgres-blueprint.d.ts.map +0 -1
  441. package/cjs/drivers/postgres/postgres-blueprint.js +0 -121
  442. package/cjs/drivers/postgres/postgres-blueprint.js.map +0 -1
  443. package/cjs/drivers/postgres/postgres-dialect.d.ts +0 -136
  444. package/cjs/drivers/postgres/postgres-dialect.d.ts.map +0 -1
  445. package/cjs/drivers/postgres/postgres-dialect.js +0 -268
  446. package/cjs/drivers/postgres/postgres-dialect.js.map +0 -1
  447. package/cjs/drivers/postgres/postgres-driver.d.ts +0 -432
  448. package/cjs/drivers/postgres/postgres-driver.d.ts.map +0 -1
  449. package/cjs/drivers/postgres/postgres-driver.js +0 -1008
  450. package/cjs/drivers/postgres/postgres-driver.js.map +0 -1
  451. package/cjs/drivers/postgres/postgres-migration-driver.d.ts +0 -397
  452. package/cjs/drivers/postgres/postgres-migration-driver.d.ts.map +0 -1
  453. package/cjs/drivers/postgres/postgres-migration-driver.js +0 -900
  454. package/cjs/drivers/postgres/postgres-migration-driver.js.map +0 -1
  455. package/cjs/drivers/postgres/postgres-query-builder.d.ts +0 -254
  456. package/cjs/drivers/postgres/postgres-query-builder.d.ts.map +0 -1
  457. package/cjs/drivers/postgres/postgres-query-builder.js +0 -933
  458. package/cjs/drivers/postgres/postgres-query-builder.js.map +0 -1
  459. package/cjs/drivers/postgres/postgres-query-parser.d.ts +0 -328
  460. package/cjs/drivers/postgres/postgres-query-parser.d.ts.map +0 -1
  461. package/cjs/drivers/postgres/postgres-query-parser.js +0 -868
  462. package/cjs/drivers/postgres/postgres-query-parser.js.map +0 -1
  463. package/cjs/drivers/postgres/postgres-sql-serializer.d.ts +0 -37
  464. package/cjs/drivers/postgres/postgres-sql-serializer.d.ts.map +0 -1
  465. package/cjs/drivers/postgres/postgres-sql-serializer.js +0 -400
  466. package/cjs/drivers/postgres/postgres-sql-serializer.js.map +0 -1
  467. package/cjs/drivers/postgres/postgres-sync-adapter.d.ts +0 -83
  468. package/cjs/drivers/postgres/postgres-sync-adapter.d.ts.map +0 -1
  469. package/cjs/drivers/postgres/postgres-sync-adapter.js +0 -204
  470. package/cjs/drivers/postgres/postgres-sync-adapter.js.map +0 -1
  471. package/cjs/drivers/postgres/types.d.ts +0 -144
  472. package/cjs/drivers/postgres/types.d.ts.map +0 -1
  473. package/cjs/drivers/sql/index.d.ts +0 -10
  474. package/cjs/drivers/sql/index.d.ts.map +0 -1
  475. package/cjs/drivers/sql/sql-dialect.contract.d.ts +0 -204
  476. package/cjs/drivers/sql/sql-dialect.contract.d.ts.map +0 -1
  477. package/cjs/drivers/sql/sql-types.d.ts +0 -202
  478. package/cjs/drivers/sql/sql-types.d.ts.map +0 -1
  479. package/cjs/errors/missing-data-source.error.d.ts +0 -22
  480. package/cjs/errors/missing-data-source.error.d.ts.map +0 -1
  481. package/cjs/errors/missing-data-source.error.js +0 -29
  482. package/cjs/errors/missing-data-source.error.js.map +0 -1
  483. package/cjs/errors/transaction-rollback.error.d.ts +0 -20
  484. package/cjs/errors/transaction-rollback.error.d.ts.map +0 -1
  485. package/cjs/errors/transaction-rollback.error.js +0 -27
  486. package/cjs/errors/transaction-rollback.error.js.map +0 -1
  487. package/cjs/events/model-events.d.ts +0 -231
  488. package/cjs/events/model-events.d.ts.map +0 -1
  489. package/cjs/events/model-events.js +0 -259
  490. package/cjs/events/model-events.js.map +0 -1
  491. package/cjs/expressions/aggregate-expressions.d.ts +0 -215
  492. package/cjs/expressions/aggregate-expressions.d.ts.map +0 -1
  493. package/cjs/expressions/aggregate-expressions.js +0 -221
  494. package/cjs/expressions/aggregate-expressions.js.map +0 -1
  495. package/cjs/expressions/index.d.ts +0 -2
  496. package/cjs/expressions/index.d.ts.map +0 -1
  497. package/cjs/index.d.ts +0 -45
  498. package/cjs/index.d.ts.map +0 -1
  499. package/cjs/index.js +0 -1
  500. package/cjs/index.js.map +0 -1
  501. package/cjs/migration/column-builder.d.ts +0 -417
  502. package/cjs/migration/column-builder.d.ts.map +0 -1
  503. package/cjs/migration/column-builder.js +0 -586
  504. package/cjs/migration/column-builder.js.map +0 -1
  505. package/cjs/migration/column-helpers.d.ts +0 -275
  506. package/cjs/migration/column-helpers.d.ts.map +0 -1
  507. package/cjs/migration/column-helpers.js +0 -389
  508. package/cjs/migration/column-helpers.js.map +0 -1
  509. package/cjs/migration/foreign-key-builder.d.ts +0 -103
  510. package/cjs/migration/foreign-key-builder.d.ts.map +0 -1
  511. package/cjs/migration/foreign-key-builder.js +0 -121
  512. package/cjs/migration/foreign-key-builder.js.map +0 -1
  513. package/cjs/migration/index.d.ts +0 -7
  514. package/cjs/migration/index.d.ts.map +0 -1
  515. package/cjs/migration/migration-runner.d.ts +0 -278
  516. package/cjs/migration/migration-runner.d.ts.map +0 -1
  517. package/cjs/migration/migration-runner.js +0 -815
  518. package/cjs/migration/migration-runner.js.map +0 -1
  519. package/cjs/migration/migration.d.ts +0 -1988
  520. package/cjs/migration/migration.d.ts.map +0 -1
  521. package/cjs/migration/migration.js +0 -2162
  522. package/cjs/migration/migration.js.map +0 -1
  523. package/cjs/migration/sql-grammar.d.ts +0 -61
  524. package/cjs/migration/sql-grammar.d.ts.map +0 -1
  525. package/cjs/migration/sql-grammar.js +0 -164
  526. package/cjs/migration/sql-grammar.js.map +0 -1
  527. package/cjs/migration/sql-serializer.d.ts +0 -22
  528. package/cjs/migration/sql-serializer.d.ts.map +0 -1
  529. package/cjs/migration/sql-serializer.js +0 -26
  530. package/cjs/migration/sql-serializer.js.map +0 -1
  531. package/cjs/migration/types.d.ts +0 -155
  532. package/cjs/migration/types.d.ts.map +0 -1
  533. package/cjs/model/methods/accessor-methods.d.ts +0 -13
  534. package/cjs/model/methods/accessor-methods.d.ts.map +0 -1
  535. package/cjs/model/methods/accessor-methods.js +0 -51
  536. package/cjs/model/methods/accessor-methods.js.map +0 -1
  537. package/cjs/model/methods/delete-methods.d.ts +0 -10
  538. package/cjs/model/methods/delete-methods.d.ts.map +0 -1
  539. package/cjs/model/methods/delete-methods.js +0 -10
  540. package/cjs/model/methods/delete-methods.js.map +0 -1
  541. package/cjs/model/methods/dirty-methods.d.ts +0 -10
  542. package/cjs/model/methods/dirty-methods.d.ts.map +0 -1
  543. package/cjs/model/methods/dirty-methods.js +0 -15
  544. package/cjs/model/methods/dirty-methods.js.map +0 -1
  545. package/cjs/model/methods/hydration-methods.d.ts +0 -10
  546. package/cjs/model/methods/hydration-methods.d.ts.map +0 -1
  547. package/cjs/model/methods/hydration-methods.js +0 -57
  548. package/cjs/model/methods/hydration-methods.js.map +0 -1
  549. package/cjs/model/methods/instance-event-methods.d.ts +0 -7
  550. package/cjs/model/methods/instance-event-methods.d.ts.map +0 -1
  551. package/cjs/model/methods/instance-event-methods.js +0 -15
  552. package/cjs/model/methods/instance-event-methods.js.map +0 -1
  553. package/cjs/model/methods/meta-methods.d.ts +0 -7
  554. package/cjs/model/methods/meta-methods.d.ts.map +0 -1
  555. package/cjs/model/methods/meta-methods.js +0 -78
  556. package/cjs/model/methods/meta-methods.js.map +0 -1
  557. package/cjs/model/methods/query-methods.d.ts +0 -24
  558. package/cjs/model/methods/query-methods.d.ts.map +0 -1
  559. package/cjs/model/methods/query-methods.js +0 -164
  560. package/cjs/model/methods/query-methods.js.map +0 -1
  561. package/cjs/model/methods/restore-methods.d.ts +0 -10
  562. package/cjs/model/methods/restore-methods.d.ts.map +0 -1
  563. package/cjs/model/methods/restore-methods.js +0 -13
  564. package/cjs/model/methods/restore-methods.js.map +0 -1
  565. package/cjs/model/methods/scope-methods.d.ts +0 -7
  566. package/cjs/model/methods/scope-methods.d.ts.map +0 -1
  567. package/cjs/model/methods/scope-methods.js +0 -15
  568. package/cjs/model/methods/scope-methods.js.map +0 -1
  569. package/cjs/model/methods/serialization-methods.d.ts +0 -3
  570. package/cjs/model/methods/serialization-methods.d.ts.map +0 -1
  571. package/cjs/model/methods/serialization-methods.js +0 -27
  572. package/cjs/model/methods/serialization-methods.js.map +0 -1
  573. package/cjs/model/methods/static-event-methods.d.ts +0 -9
  574. package/cjs/model/methods/static-event-methods.d.ts.map +0 -1
  575. package/cjs/model/methods/static-event-methods.js +0 -29
  576. package/cjs/model/methods/static-event-methods.js.map +0 -1
  577. package/cjs/model/methods/write-methods.d.ts +0 -10
  578. package/cjs/model/methods/write-methods.d.ts.map +0 -1
  579. package/cjs/model/methods/write-methods.js +0 -52
  580. package/cjs/model/methods/write-methods.js.map +0 -1
  581. package/cjs/model/model.d.ts +0 -1647
  582. package/cjs/model/model.d.ts.map +0 -1
  583. package/cjs/model/model.js +0 -1657
  584. package/cjs/model/model.js.map +0 -1
  585. package/cjs/model/model.types.d.ts +0 -44
  586. package/cjs/model/model.types.d.ts.map +0 -1
  587. package/cjs/model/register-model.d.ts +0 -81
  588. package/cjs/model/register-model.d.ts.map +0 -1
  589. package/cjs/model/register-model.js +0 -94
  590. package/cjs/model/register-model.js.map +0 -1
  591. package/cjs/query-builder/query-builder.d.ts +0 -556
  592. package/cjs/query-builder/query-builder.d.ts.map +0 -1
  593. package/cjs/query-builder/query-builder.js +0 -1070
  594. package/cjs/query-builder/query-builder.js.map +0 -1
  595. package/cjs/relations/helpers.d.ts +0 -156
  596. package/cjs/relations/helpers.d.ts.map +0 -1
  597. package/cjs/relations/helpers.js +0 -202
  598. package/cjs/relations/helpers.js.map +0 -1
  599. package/cjs/relations/index.d.ts +0 -35
  600. package/cjs/relations/index.d.ts.map +0 -1
  601. package/cjs/relations/pivot-operations.d.ts +0 -160
  602. package/cjs/relations/pivot-operations.d.ts.map +0 -1
  603. package/cjs/relations/pivot-operations.js +0 -293
  604. package/cjs/relations/pivot-operations.js.map +0 -1
  605. package/cjs/relations/relation-hydrator.d.ts +0 -68
  606. package/cjs/relations/relation-hydrator.d.ts.map +0 -1
  607. package/cjs/relations/relation-hydrator.js +0 -81
  608. package/cjs/relations/relation-hydrator.js.map +0 -1
  609. package/cjs/relations/relation-loader.d.ts +0 -194
  610. package/cjs/relations/relation-loader.d.ts.map +0 -1
  611. package/cjs/relations/relation-loader.js +0 -466
  612. package/cjs/relations/relation-loader.js.map +0 -1
  613. package/cjs/relations/types.d.ts +0 -306
  614. package/cjs/relations/types.d.ts.map +0 -1
  615. package/cjs/remover/database-remover.d.ts +0 -100
  616. package/cjs/remover/database-remover.d.ts.map +0 -1
  617. package/cjs/remover/database-remover.js +0 -214
  618. package/cjs/remover/database-remover.js.map +0 -1
  619. package/cjs/restorer/database-restorer.d.ts +0 -131
  620. package/cjs/restorer/database-restorer.d.ts.map +0 -1
  621. package/cjs/restorer/database-restorer.js +0 -434
  622. package/cjs/restorer/database-restorer.js.map +0 -1
  623. package/cjs/sql-database-dirty-tracker.d.ts +0 -13
  624. package/cjs/sql-database-dirty-tracker.d.ts.map +0 -1
  625. package/cjs/sql-database-dirty-tracker.js +0 -14
  626. package/cjs/sql-database-dirty-tracker.js.map +0 -1
  627. package/cjs/sync/index.d.ts +0 -12
  628. package/cjs/sync/index.d.ts.map +0 -1
  629. package/cjs/sync/model-events.d.ts +0 -62
  630. package/cjs/sync/model-events.d.ts.map +0 -1
  631. package/cjs/sync/model-events.js +0 -49
  632. package/cjs/sync/model-events.js.map +0 -1
  633. package/cjs/sync/model-sync-operation.d.ts +0 -163
  634. package/cjs/sync/model-sync-operation.d.ts.map +0 -1
  635. package/cjs/sync/model-sync-operation.js +0 -292
  636. package/cjs/sync/model-sync-operation.js.map +0 -1
  637. package/cjs/sync/model-sync.d.ts +0 -130
  638. package/cjs/sync/model-sync.d.ts.map +0 -1
  639. package/cjs/sync/model-sync.js +0 -178
  640. package/cjs/sync/model-sync.js.map +0 -1
  641. package/cjs/sync/sync-context.d.ts +0 -70
  642. package/cjs/sync/sync-context.d.ts.map +0 -1
  643. package/cjs/sync/sync-context.js +0 -101
  644. package/cjs/sync/sync-context.js.map +0 -1
  645. package/cjs/sync/sync-manager.d.ts +0 -213
  646. package/cjs/sync/sync-manager.d.ts.map +0 -1
  647. package/cjs/sync/sync-manager.js +0 -689
  648. package/cjs/sync/sync-manager.js.map +0 -1
  649. package/cjs/sync/types.d.ts +0 -289
  650. package/cjs/sync/types.d.ts.map +0 -1
  651. package/cjs/test-migrations/test-enhanced-features.migration.d.ts +0 -15
  652. package/cjs/test-migrations/test-enhanced-features.migration.d.ts.map +0 -1
  653. package/cjs/types.d.ts +0 -371
  654. package/cjs/types.d.ts.map +0 -1
  655. package/cjs/utils/connect-to-database.d.ts +0 -307
  656. package/cjs/utils/connect-to-database.d.ts.map +0 -1
  657. package/cjs/utils/connect-to-database.js +0 -130
  658. package/cjs/utils/connect-to-database.js.map +0 -1
  659. package/cjs/utils/database-writer.utils.d.ts +0 -15
  660. package/cjs/utils/database-writer.utils.d.ts.map +0 -1
  661. package/cjs/utils/database-writer.utils.js +0 -14
  662. package/cjs/utils/database-writer.utils.js.map +0 -1
  663. package/cjs/utils/define-model.js +0 -100
  664. package/cjs/utils/define-model.js.map +0 -1
  665. package/cjs/utils/is-valid-date-value.d.ts +0 -5
  666. package/cjs/utils/is-valid-date-value.d.ts.map +0 -1
  667. package/cjs/utils/is-valid-date-value.js +0 -25
  668. package/cjs/utils/is-valid-date-value.js.map +0 -1
  669. package/cjs/utils/once-connected.d.ts +0 -146
  670. package/cjs/utils/once-connected.d.ts.map +0 -1
  671. package/cjs/utils/once-connected.js +0 -251
  672. package/cjs/utils/once-connected.js.map +0 -1
  673. package/cjs/validation/database-seal-plugins.d.ts +0 -12
  674. package/cjs/validation/database-seal-plugins.d.ts.map +0 -1
  675. package/cjs/validation/database-seal-plugins.js +0 -1
  676. package/cjs/validation/database-seal-plugins.js.map +0 -1
  677. package/cjs/validation/database-writer-validation-error.d.ts +0 -97
  678. package/cjs/validation/database-writer-validation-error.d.ts.map +0 -1
  679. package/cjs/validation/database-writer-validation-error.js +0 -160
  680. package/cjs/validation/database-writer-validation-error.js.map +0 -1
  681. package/cjs/validation/index.d.ts +0 -3
  682. package/cjs/validation/index.d.ts.map +0 -1
  683. package/cjs/validation/mutators/embed-mutator.d.ts +0 -9
  684. package/cjs/validation/mutators/embed-mutator.d.ts.map +0 -1
  685. package/cjs/validation/mutators/embed-mutator.js +0 -33
  686. package/cjs/validation/mutators/embed-mutator.js.map +0 -1
  687. package/cjs/validation/plugins/embed-validator-plugin.d.ts +0 -24
  688. package/cjs/validation/plugins/embed-validator-plugin.d.ts.map +0 -1
  689. package/cjs/validation/plugins/embed-validator-plugin.js +0 -18
  690. package/cjs/validation/plugins/embed-validator-plugin.js.map +0 -1
  691. package/cjs/validation/rules/database-model-rule.d.ts +0 -7
  692. package/cjs/validation/rules/database-model-rule.d.ts.map +0 -1
  693. package/cjs/validation/rules/database-model-rule.js +0 -27
  694. package/cjs/validation/rules/database-model-rule.js.map +0 -1
  695. package/cjs/validation/transformers/embed-model-transformer.d.ts +0 -3
  696. package/cjs/validation/transformers/embed-model-transformer.d.ts.map +0 -1
  697. package/cjs/validation/transformers/embed-model-transformer.js +0 -18
  698. package/cjs/validation/transformers/embed-model-transformer.js.map +0 -1
  699. package/cjs/validation/validators/embed-validator.d.ts +0 -21
  700. package/cjs/validation/validators/embed-validator.d.ts.map +0 -1
  701. package/cjs/validation/validators/embed-validator.js +0 -43
  702. package/cjs/validation/validators/embed-validator.js.map +0 -1
  703. package/cjs/writer/database-writer.d.ts +0 -174
  704. package/cjs/writer/database-writer.d.ts.map +0 -1
  705. package/cjs/writer/database-writer.js +0 -400
  706. package/cjs/writer/database-writer.js.map +0 -1
  707. package/esm/context/database-data-source-context.d.ts +0 -29
  708. package/esm/context/database-data-source-context.d.ts.map +0 -1
  709. package/esm/context/database-data-source-context.js +0 -28
  710. package/esm/context/database-data-source-context.js.map +0 -1
  711. package/esm/context/database-transaction-context.d.ts +0 -35
  712. package/esm/context/database-transaction-context.d.ts.map +0 -1
  713. package/esm/context/database-transaction-context.js +0 -40
  714. package/esm/context/database-transaction-context.js.map +0 -1
  715. package/esm/contracts/database-driver.contract.d.ts +0 -450
  716. package/esm/contracts/database-driver.contract.d.ts.map +0 -1
  717. package/esm/contracts/database-id-generator.contract.d.ts +0 -109
  718. package/esm/contracts/database-id-generator.contract.d.ts.map +0 -1
  719. package/esm/contracts/database-remover.contract.d.ts +0 -104
  720. package/esm/contracts/database-remover.contract.d.ts.map +0 -1
  721. package/esm/contracts/database-restorer.contract.d.ts +0 -143
  722. package/esm/contracts/database-restorer.contract.d.ts.map +0 -1
  723. package/esm/contracts/database-writer.contract.d.ts +0 -119
  724. package/esm/contracts/database-writer.contract.d.ts.map +0 -1
  725. package/esm/contracts/driver-blueprint.contract.d.ts +0 -49
  726. package/esm/contracts/driver-blueprint.contract.d.ts.map +0 -1
  727. package/esm/contracts/index.d.ts +0 -10
  728. package/esm/contracts/index.d.ts.map +0 -1
  729. package/esm/contracts/migration-driver.contract.d.ts +0 -522
  730. package/esm/contracts/migration-driver.contract.d.ts.map +0 -1
  731. package/esm/contracts/query-builder.contract.d.ts +0 -1609
  732. package/esm/contracts/query-builder.contract.d.ts.map +0 -1
  733. package/esm/contracts/sync-adapter.contract.d.ts +0 -58
  734. package/esm/contracts/sync-adapter.contract.d.ts.map +0 -1
  735. package/esm/data-source/data-source-registry.d.ts +0 -108
  736. package/esm/data-source/data-source-registry.d.ts.map +0 -1
  737. package/esm/data-source/data-source-registry.js +0 -145
  738. package/esm/data-source/data-source-registry.js.map +0 -1
  739. package/esm/data-source/data-source.d.ts +0 -147
  740. package/esm/data-source/data-source.d.ts.map +0 -1
  741. package/esm/data-source/data-source.js +0 -83
  742. package/esm/data-source/data-source.js.map +0 -1
  743. package/esm/database-dirty-tracker.d.ts +0 -252
  744. package/esm/database-dirty-tracker.d.ts.map +0 -1
  745. package/esm/database-dirty-tracker.js +0 -386
  746. package/esm/database-dirty-tracker.js.map +0 -1
  747. package/esm/drivers/mongodb/mongodb-blueprint.d.ts +0 -30
  748. package/esm/drivers/mongodb/mongodb-blueprint.d.ts.map +0 -1
  749. package/esm/drivers/mongodb/mongodb-blueprint.js +0 -51
  750. package/esm/drivers/mongodb/mongodb-blueprint.js.map +0 -1
  751. package/esm/drivers/mongodb/mongodb-driver.d.ts +0 -325
  752. package/esm/drivers/mongodb/mongodb-driver.d.ts.map +0 -1
  753. package/esm/drivers/mongodb/mongodb-driver.js +0 -845
  754. package/esm/drivers/mongodb/mongodb-driver.js.map +0 -1
  755. package/esm/drivers/mongodb/mongodb-id-generator.d.ts +0 -116
  756. package/esm/drivers/mongodb/mongodb-id-generator.d.ts.map +0 -1
  757. package/esm/drivers/mongodb/mongodb-id-generator.js +0 -149
  758. package/esm/drivers/mongodb/mongodb-id-generator.js.map +0 -1
  759. package/esm/drivers/mongodb/mongodb-migration-driver.d.ts +0 -317
  760. package/esm/drivers/mongodb/mongodb-migration-driver.d.ts.map +0 -1
  761. package/esm/drivers/mongodb/mongodb-migration-driver.js +0 -666
  762. package/esm/drivers/mongodb/mongodb-migration-driver.js.map +0 -1
  763. package/esm/drivers/mongodb/mongodb-query-builder.d.ts +0 -1122
  764. package/esm/drivers/mongodb/mongodb-query-builder.d.ts.map +0 -1
  765. package/esm/drivers/mongodb/mongodb-query-builder.js +0 -1988
  766. package/esm/drivers/mongodb/mongodb-query-builder.js.map +0 -1
  767. package/esm/drivers/mongodb/mongodb-query-operations.d.ts +0 -226
  768. package/esm/drivers/mongodb/mongodb-query-operations.d.ts.map +0 -1
  769. package/esm/drivers/mongodb/mongodb-query-operations.js +0 -270
  770. package/esm/drivers/mongodb/mongodb-query-operations.js.map +0 -1
  771. package/esm/drivers/mongodb/mongodb-query-parser.d.ts +0 -262
  772. package/esm/drivers/mongodb/mongodb-query-parser.d.ts.map +0 -1
  773. package/esm/drivers/mongodb/mongodb-query-parser.js +0 -1351
  774. package/esm/drivers/mongodb/mongodb-query-parser.js.map +0 -1
  775. package/esm/drivers/mongodb/mongodb-sync-adapter.d.ts +0 -79
  776. package/esm/drivers/mongodb/mongodb-sync-adapter.d.ts.map +0 -1
  777. package/esm/drivers/mongodb/mongodb-sync-adapter.js +0 -146
  778. package/esm/drivers/mongodb/mongodb-sync-adapter.js.map +0 -1
  779. package/esm/drivers/mongodb/types.d.ts +0 -43
  780. package/esm/drivers/mongodb/types.d.ts.map +0 -1
  781. package/esm/drivers/postgres/index.d.ts +0 -16
  782. package/esm/drivers/postgres/index.d.ts.map +0 -1
  783. package/esm/drivers/postgres/postgres-blueprint.d.ts +0 -64
  784. package/esm/drivers/postgres/postgres-blueprint.d.ts.map +0 -1
  785. package/esm/drivers/postgres/postgres-blueprint.js +0 -121
  786. package/esm/drivers/postgres/postgres-blueprint.js.map +0 -1
  787. package/esm/drivers/postgres/postgres-dialect.d.ts +0 -136
  788. package/esm/drivers/postgres/postgres-dialect.d.ts.map +0 -1
  789. package/esm/drivers/postgres/postgres-dialect.js +0 -268
  790. package/esm/drivers/postgres/postgres-dialect.js.map +0 -1
  791. package/esm/drivers/postgres/postgres-driver.d.ts +0 -432
  792. package/esm/drivers/postgres/postgres-driver.d.ts.map +0 -1
  793. package/esm/drivers/postgres/postgres-driver.js +0 -1008
  794. package/esm/drivers/postgres/postgres-driver.js.map +0 -1
  795. package/esm/drivers/postgres/postgres-migration-driver.d.ts +0 -397
  796. package/esm/drivers/postgres/postgres-migration-driver.d.ts.map +0 -1
  797. package/esm/drivers/postgres/postgres-migration-driver.js +0 -900
  798. package/esm/drivers/postgres/postgres-migration-driver.js.map +0 -1
  799. package/esm/drivers/postgres/postgres-query-builder.d.ts +0 -254
  800. package/esm/drivers/postgres/postgres-query-builder.d.ts.map +0 -1
  801. package/esm/drivers/postgres/postgres-query-builder.js +0 -933
  802. package/esm/drivers/postgres/postgres-query-builder.js.map +0 -1
  803. package/esm/drivers/postgres/postgres-query-parser.d.ts +0 -328
  804. package/esm/drivers/postgres/postgres-query-parser.d.ts.map +0 -1
  805. package/esm/drivers/postgres/postgres-query-parser.js +0 -868
  806. package/esm/drivers/postgres/postgres-query-parser.js.map +0 -1
  807. package/esm/drivers/postgres/postgres-sql-serializer.d.ts +0 -37
  808. package/esm/drivers/postgres/postgres-sql-serializer.d.ts.map +0 -1
  809. package/esm/drivers/postgres/postgres-sql-serializer.js +0 -400
  810. package/esm/drivers/postgres/postgres-sql-serializer.js.map +0 -1
  811. package/esm/drivers/postgres/postgres-sync-adapter.d.ts +0 -83
  812. package/esm/drivers/postgres/postgres-sync-adapter.d.ts.map +0 -1
  813. package/esm/drivers/postgres/postgres-sync-adapter.js +0 -204
  814. package/esm/drivers/postgres/postgres-sync-adapter.js.map +0 -1
  815. package/esm/drivers/postgres/types.d.ts +0 -144
  816. package/esm/drivers/postgres/types.d.ts.map +0 -1
  817. package/esm/drivers/sql/index.d.ts +0 -10
  818. package/esm/drivers/sql/index.d.ts.map +0 -1
  819. package/esm/drivers/sql/sql-dialect.contract.d.ts +0 -204
  820. package/esm/drivers/sql/sql-dialect.contract.d.ts.map +0 -1
  821. package/esm/drivers/sql/sql-types.d.ts +0 -202
  822. package/esm/drivers/sql/sql-types.d.ts.map +0 -1
  823. package/esm/errors/missing-data-source.error.d.ts +0 -22
  824. package/esm/errors/missing-data-source.error.d.ts.map +0 -1
  825. package/esm/errors/missing-data-source.error.js +0 -29
  826. package/esm/errors/missing-data-source.error.js.map +0 -1
  827. package/esm/errors/transaction-rollback.error.d.ts +0 -20
  828. package/esm/errors/transaction-rollback.error.d.ts.map +0 -1
  829. package/esm/errors/transaction-rollback.error.js +0 -27
  830. package/esm/errors/transaction-rollback.error.js.map +0 -1
  831. package/esm/events/model-events.d.ts +0 -231
  832. package/esm/events/model-events.d.ts.map +0 -1
  833. package/esm/events/model-events.js +0 -259
  834. package/esm/events/model-events.js.map +0 -1
  835. package/esm/expressions/aggregate-expressions.d.ts +0 -215
  836. package/esm/expressions/aggregate-expressions.d.ts.map +0 -1
  837. package/esm/expressions/aggregate-expressions.js +0 -221
  838. package/esm/expressions/aggregate-expressions.js.map +0 -1
  839. package/esm/expressions/index.d.ts +0 -2
  840. package/esm/expressions/index.d.ts.map +0 -1
  841. package/esm/index.d.ts +0 -45
  842. package/esm/index.d.ts.map +0 -1
  843. package/esm/index.js +0 -1
  844. package/esm/index.js.map +0 -1
  845. package/esm/migration/column-builder.d.ts +0 -417
  846. package/esm/migration/column-builder.d.ts.map +0 -1
  847. package/esm/migration/column-builder.js +0 -586
  848. package/esm/migration/column-builder.js.map +0 -1
  849. package/esm/migration/column-helpers.d.ts +0 -275
  850. package/esm/migration/column-helpers.d.ts.map +0 -1
  851. package/esm/migration/column-helpers.js +0 -389
  852. package/esm/migration/column-helpers.js.map +0 -1
  853. package/esm/migration/foreign-key-builder.d.ts +0 -103
  854. package/esm/migration/foreign-key-builder.d.ts.map +0 -1
  855. package/esm/migration/foreign-key-builder.js +0 -121
  856. package/esm/migration/foreign-key-builder.js.map +0 -1
  857. package/esm/migration/index.d.ts +0 -7
  858. package/esm/migration/index.d.ts.map +0 -1
  859. package/esm/migration/migration-runner.d.ts +0 -278
  860. package/esm/migration/migration-runner.d.ts.map +0 -1
  861. package/esm/migration/migration-runner.js +0 -815
  862. package/esm/migration/migration-runner.js.map +0 -1
  863. package/esm/migration/migration.d.ts +0 -1988
  864. package/esm/migration/migration.d.ts.map +0 -1
  865. package/esm/migration/migration.js +0 -2162
  866. package/esm/migration/migration.js.map +0 -1
  867. package/esm/migration/sql-grammar.d.ts +0 -61
  868. package/esm/migration/sql-grammar.d.ts.map +0 -1
  869. package/esm/migration/sql-grammar.js +0 -164
  870. package/esm/migration/sql-grammar.js.map +0 -1
  871. package/esm/migration/sql-serializer.d.ts +0 -22
  872. package/esm/migration/sql-serializer.d.ts.map +0 -1
  873. package/esm/migration/sql-serializer.js +0 -26
  874. package/esm/migration/sql-serializer.js.map +0 -1
  875. package/esm/migration/types.d.ts +0 -155
  876. package/esm/migration/types.d.ts.map +0 -1
  877. package/esm/model/methods/accessor-methods.d.ts +0 -13
  878. package/esm/model/methods/accessor-methods.d.ts.map +0 -1
  879. package/esm/model/methods/accessor-methods.js +0 -51
  880. package/esm/model/methods/accessor-methods.js.map +0 -1
  881. package/esm/model/methods/delete-methods.d.ts +0 -10
  882. package/esm/model/methods/delete-methods.d.ts.map +0 -1
  883. package/esm/model/methods/delete-methods.js +0 -10
  884. package/esm/model/methods/delete-methods.js.map +0 -1
  885. package/esm/model/methods/dirty-methods.d.ts +0 -10
  886. package/esm/model/methods/dirty-methods.d.ts.map +0 -1
  887. package/esm/model/methods/dirty-methods.js +0 -15
  888. package/esm/model/methods/dirty-methods.js.map +0 -1
  889. package/esm/model/methods/hydration-methods.d.ts +0 -10
  890. package/esm/model/methods/hydration-methods.d.ts.map +0 -1
  891. package/esm/model/methods/hydration-methods.js +0 -57
  892. package/esm/model/methods/hydration-methods.js.map +0 -1
  893. package/esm/model/methods/instance-event-methods.d.ts +0 -7
  894. package/esm/model/methods/instance-event-methods.d.ts.map +0 -1
  895. package/esm/model/methods/instance-event-methods.js +0 -15
  896. package/esm/model/methods/instance-event-methods.js.map +0 -1
  897. package/esm/model/methods/meta-methods.d.ts +0 -7
  898. package/esm/model/methods/meta-methods.d.ts.map +0 -1
  899. package/esm/model/methods/meta-methods.js +0 -78
  900. package/esm/model/methods/meta-methods.js.map +0 -1
  901. package/esm/model/methods/query-methods.d.ts +0 -24
  902. package/esm/model/methods/query-methods.d.ts.map +0 -1
  903. package/esm/model/methods/query-methods.js +0 -164
  904. package/esm/model/methods/query-methods.js.map +0 -1
  905. package/esm/model/methods/restore-methods.d.ts +0 -10
  906. package/esm/model/methods/restore-methods.d.ts.map +0 -1
  907. package/esm/model/methods/restore-methods.js +0 -13
  908. package/esm/model/methods/restore-methods.js.map +0 -1
  909. package/esm/model/methods/scope-methods.d.ts +0 -7
  910. package/esm/model/methods/scope-methods.d.ts.map +0 -1
  911. package/esm/model/methods/scope-methods.js +0 -15
  912. package/esm/model/methods/scope-methods.js.map +0 -1
  913. package/esm/model/methods/serialization-methods.d.ts +0 -3
  914. package/esm/model/methods/serialization-methods.d.ts.map +0 -1
  915. package/esm/model/methods/serialization-methods.js +0 -27
  916. package/esm/model/methods/serialization-methods.js.map +0 -1
  917. package/esm/model/methods/static-event-methods.d.ts +0 -9
  918. package/esm/model/methods/static-event-methods.d.ts.map +0 -1
  919. package/esm/model/methods/static-event-methods.js +0 -29
  920. package/esm/model/methods/static-event-methods.js.map +0 -1
  921. package/esm/model/methods/write-methods.d.ts +0 -10
  922. package/esm/model/methods/write-methods.d.ts.map +0 -1
  923. package/esm/model/methods/write-methods.js +0 -52
  924. package/esm/model/methods/write-methods.js.map +0 -1
  925. package/esm/model/model.d.ts +0 -1647
  926. package/esm/model/model.d.ts.map +0 -1
  927. package/esm/model/model.js +0 -1657
  928. package/esm/model/model.js.map +0 -1
  929. package/esm/model/model.types.d.ts +0 -44
  930. package/esm/model/model.types.d.ts.map +0 -1
  931. package/esm/model/register-model.d.ts +0 -81
  932. package/esm/model/register-model.d.ts.map +0 -1
  933. package/esm/model/register-model.js +0 -94
  934. package/esm/model/register-model.js.map +0 -1
  935. package/esm/query-builder/query-builder.d.ts +0 -556
  936. package/esm/query-builder/query-builder.d.ts.map +0 -1
  937. package/esm/query-builder/query-builder.js +0 -1070
  938. package/esm/query-builder/query-builder.js.map +0 -1
  939. package/esm/relations/helpers.d.ts +0 -156
  940. package/esm/relations/helpers.d.ts.map +0 -1
  941. package/esm/relations/helpers.js +0 -202
  942. package/esm/relations/helpers.js.map +0 -1
  943. package/esm/relations/index.d.ts +0 -35
  944. package/esm/relations/index.d.ts.map +0 -1
  945. package/esm/relations/pivot-operations.d.ts +0 -160
  946. package/esm/relations/pivot-operations.d.ts.map +0 -1
  947. package/esm/relations/pivot-operations.js +0 -293
  948. package/esm/relations/pivot-operations.js.map +0 -1
  949. package/esm/relations/relation-hydrator.d.ts +0 -68
  950. package/esm/relations/relation-hydrator.d.ts.map +0 -1
  951. package/esm/relations/relation-hydrator.js +0 -81
  952. package/esm/relations/relation-hydrator.js.map +0 -1
  953. package/esm/relations/relation-loader.d.ts +0 -194
  954. package/esm/relations/relation-loader.d.ts.map +0 -1
  955. package/esm/relations/relation-loader.js +0 -466
  956. package/esm/relations/relation-loader.js.map +0 -1
  957. package/esm/relations/types.d.ts +0 -306
  958. package/esm/relations/types.d.ts.map +0 -1
  959. package/esm/remover/database-remover.d.ts +0 -100
  960. package/esm/remover/database-remover.d.ts.map +0 -1
  961. package/esm/remover/database-remover.js +0 -214
  962. package/esm/remover/database-remover.js.map +0 -1
  963. package/esm/restorer/database-restorer.d.ts +0 -131
  964. package/esm/restorer/database-restorer.d.ts.map +0 -1
  965. package/esm/restorer/database-restorer.js +0 -434
  966. package/esm/restorer/database-restorer.js.map +0 -1
  967. package/esm/sql-database-dirty-tracker.d.ts +0 -13
  968. package/esm/sql-database-dirty-tracker.d.ts.map +0 -1
  969. package/esm/sql-database-dirty-tracker.js +0 -14
  970. package/esm/sql-database-dirty-tracker.js.map +0 -1
  971. package/esm/sync/index.d.ts +0 -12
  972. package/esm/sync/index.d.ts.map +0 -1
  973. package/esm/sync/model-events.d.ts +0 -62
  974. package/esm/sync/model-events.d.ts.map +0 -1
  975. package/esm/sync/model-events.js +0 -49
  976. package/esm/sync/model-events.js.map +0 -1
  977. package/esm/sync/model-sync-operation.d.ts +0 -163
  978. package/esm/sync/model-sync-operation.d.ts.map +0 -1
  979. package/esm/sync/model-sync-operation.js +0 -292
  980. package/esm/sync/model-sync-operation.js.map +0 -1
  981. package/esm/sync/model-sync.d.ts +0 -130
  982. package/esm/sync/model-sync.d.ts.map +0 -1
  983. package/esm/sync/model-sync.js +0 -178
  984. package/esm/sync/model-sync.js.map +0 -1
  985. package/esm/sync/sync-context.d.ts +0 -70
  986. package/esm/sync/sync-context.d.ts.map +0 -1
  987. package/esm/sync/sync-context.js +0 -101
  988. package/esm/sync/sync-context.js.map +0 -1
  989. package/esm/sync/sync-manager.d.ts +0 -213
  990. package/esm/sync/sync-manager.d.ts.map +0 -1
  991. package/esm/sync/sync-manager.js +0 -689
  992. package/esm/sync/sync-manager.js.map +0 -1
  993. package/esm/sync/types.d.ts +0 -289
  994. package/esm/sync/types.d.ts.map +0 -1
  995. package/esm/test-migrations/test-enhanced-features.migration.d.ts +0 -15
  996. package/esm/test-migrations/test-enhanced-features.migration.d.ts.map +0 -1
  997. package/esm/types.d.ts +0 -371
  998. package/esm/types.d.ts.map +0 -1
  999. package/esm/utils/connect-to-database.d.ts +0 -307
  1000. package/esm/utils/connect-to-database.d.ts.map +0 -1
  1001. package/esm/utils/connect-to-database.js +0 -130
  1002. package/esm/utils/connect-to-database.js.map +0 -1
  1003. package/esm/utils/database-writer.utils.d.ts +0 -15
  1004. package/esm/utils/database-writer.utils.d.ts.map +0 -1
  1005. package/esm/utils/database-writer.utils.js +0 -14
  1006. package/esm/utils/database-writer.utils.js.map +0 -1
  1007. package/esm/utils/define-model.js +0 -100
  1008. package/esm/utils/define-model.js.map +0 -1
  1009. package/esm/utils/is-valid-date-value.d.ts +0 -5
  1010. package/esm/utils/is-valid-date-value.d.ts.map +0 -1
  1011. package/esm/utils/is-valid-date-value.js +0 -25
  1012. package/esm/utils/is-valid-date-value.js.map +0 -1
  1013. package/esm/utils/once-connected.d.ts +0 -146
  1014. package/esm/utils/once-connected.d.ts.map +0 -1
  1015. package/esm/utils/once-connected.js +0 -251
  1016. package/esm/utils/once-connected.js.map +0 -1
  1017. package/esm/validation/database-seal-plugins.d.ts +0 -12
  1018. package/esm/validation/database-seal-plugins.d.ts.map +0 -1
  1019. package/esm/validation/database-seal-plugins.js +0 -1
  1020. package/esm/validation/database-seal-plugins.js.map +0 -1
  1021. package/esm/validation/database-writer-validation-error.d.ts +0 -97
  1022. package/esm/validation/database-writer-validation-error.d.ts.map +0 -1
  1023. package/esm/validation/database-writer-validation-error.js +0 -160
  1024. package/esm/validation/database-writer-validation-error.js.map +0 -1
  1025. package/esm/validation/index.d.ts +0 -3
  1026. package/esm/validation/index.d.ts.map +0 -1
  1027. package/esm/validation/mutators/embed-mutator.d.ts +0 -9
  1028. package/esm/validation/mutators/embed-mutator.d.ts.map +0 -1
  1029. package/esm/validation/mutators/embed-mutator.js +0 -33
  1030. package/esm/validation/mutators/embed-mutator.js.map +0 -1
  1031. package/esm/validation/plugins/embed-validator-plugin.d.ts +0 -24
  1032. package/esm/validation/plugins/embed-validator-plugin.d.ts.map +0 -1
  1033. package/esm/validation/plugins/embed-validator-plugin.js +0 -18
  1034. package/esm/validation/plugins/embed-validator-plugin.js.map +0 -1
  1035. package/esm/validation/rules/database-model-rule.d.ts +0 -7
  1036. package/esm/validation/rules/database-model-rule.d.ts.map +0 -1
  1037. package/esm/validation/rules/database-model-rule.js +0 -27
  1038. package/esm/validation/rules/database-model-rule.js.map +0 -1
  1039. package/esm/validation/transformers/embed-model-transformer.d.ts +0 -3
  1040. package/esm/validation/transformers/embed-model-transformer.d.ts.map +0 -1
  1041. package/esm/validation/transformers/embed-model-transformer.js +0 -18
  1042. package/esm/validation/transformers/embed-model-transformer.js.map +0 -1
  1043. package/esm/validation/validators/embed-validator.d.ts +0 -21
  1044. package/esm/validation/validators/embed-validator.d.ts.map +0 -1
  1045. package/esm/validation/validators/embed-validator.js +0 -43
  1046. package/esm/validation/validators/embed-validator.js.map +0 -1
  1047. package/esm/writer/database-writer.d.ts +0 -174
  1048. package/esm/writer/database-writer.d.ts.map +0 -1
  1049. package/esm/writer/database-writer.js +0 -400
  1050. package/esm/writer/database-writer.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb-query-parser.mjs","names":[],"sources":["../../../../../../../@warlock.js/cascade/src/drivers/mongodb/mongodb-query-parser.ts"],"sourcesContent":["import { colors } from \"@mongez/copper\";\nimport type { Collection } from \"mongodb\";\nimport type { GroupByInput, RawExpression, WhereOperator } from \"../../contracts\";\nimport {\n isAggregateExpression,\n type AggregateExpression,\n} from \"../../expressions/aggregate-expressions\";\nimport type { MongoQueryBuilder } from \"./mongodb-query-builder\";\nimport type { Operation, PipelineStage } from \"./types\";\n\n/**\n * Options for configuring the MongoDB query parser.\n */\nexport type MongoQueryParserOptions = {\n /** The MongoDB collection being queried */\n collection: Collection;\n /** The ordered list of operations to parse */\n operations: Operation[];\n /** Factory method for creating sub-builders (used for callbacks) */\n createSubBuilder: () => MongoQueryBuilder;\n};\n\n/**\n * Parses query builder operations into MongoDB aggregation pipeline.\n *\n * This parser is responsible for converting the abstract operations collected\n * by the query builder into a concrete MongoDB aggregation pipeline. It handles\n * intelligent grouping of mergeable operations (like multiple where clauses)\n * into single pipeline stages for optimal performance.\n */\nexport class MongoQueryParser {\n /**\n * The MongoDB collection being queried.\n */\n private readonly collection: Collection;\n\n /**\n * The ordered list of operations to parse.\n */\n private readonly operations: Operation[];\n\n /**\n * Factory for creating sub-builders (used when resolving callbacks).\n */\n private readonly createSubBuilder: () => MongoQueryBuilder;\n\n /**\n * Track group field names for automatic _id renaming.\n * Maps pipeline index to field names.\n */\n private readonly groupFieldNames = new Map<number, string | string[]>();\n\n /**\n * Create a new MongoDB query parser.\n *\n * @param options - Configuration options for the parser\n */\n public constructor(options: MongoQueryParserOptions) {\n this.collection = options.collection;\n this.operations = options.operations;\n this.createSubBuilder = options.createSubBuilder;\n }\n\n /**\n * Parse the operations into a MongoDB aggregation pipeline.\n *\n * This method intelligently groups mergeable operations (e.g., multiple where\n * clauses) into single pipeline stages while maintaining the correct execution\n * order for non-mergeable operations.\n *\n * @returns The MongoDB aggregation pipeline\n *\n * @example\n * ```typescript\n * const parser = new MongoQueryParser({ collection, operations });\n * const pipeline = parser.parse();\n * // [\n * // { $match: { status: 'active', age: { $gt: 18 } } },\n * // { $sort: { createdAt: -1 } },\n * // { $limit: 10 }\n * // ]\n * ```\n */\n public parse(): any[] {\n const pipeline: any[] = [];\n let currentStage: PipelineStage | null = null;\n let currentBuffer: Operation[] = [];\n\n for (const op of this.operations) {\n if (op.mergeable && op.stage === currentStage) {\n // Same mergeable stage, add to buffer\n currentBuffer.push(op);\n } else {\n // Different stage or non-mergeable, flush buffer\n if (currentBuffer.length > 0) {\n const builtStage = this.buildStage(currentStage!, currentBuffer);\n if (builtStage) {\n const stageIndex = pipeline.length;\n pipeline.push(builtStage);\n // Track field names for group stages with aggregates\n this.trackGroupFieldNames(currentStage!, currentBuffer, stageIndex);\n }\n currentBuffer = [];\n }\n\n if (op.mergeable) {\n // Start new buffer\n currentStage = op.stage;\n currentBuffer.push(op);\n } else {\n // Non-mergeable, add directly\n const builtStage = this.buildStage(op.stage, [op]);\n if (builtStage) {\n const stageIndex = pipeline.length;\n pipeline.push(builtStage);\n // Track field names for group stages with aggregates\n this.trackGroupFieldNames(op.stage, [op], stageIndex);\n }\n currentStage = null;\n }\n }\n }\n\n // Flush remaining buffer\n if (currentBuffer.length > 0) {\n const builtStage = this.buildStage(currentStage!, currentBuffer);\n if (builtStage) {\n const stageIndex = pipeline.length;\n pipeline.push(builtStage);\n // Track field names for group stages with aggregates\n this.trackGroupFieldNames(currentStage!, currentBuffer, stageIndex);\n }\n }\n\n // Post-process: Rename _id to actual field names after $group stages with aggregates\n return this.postProcessGroupStages(pipeline);\n }\n\n /**\n * Track field names for group stages that need _id renaming.\n */\n private trackGroupFieldNames(\n stage: PipelineStage,\n operations: Operation[],\n stageIndex: number,\n ): void {\n if (stage === \"$group\") {\n const op = operations[0];\n if (op.type === \"groupByWithAggregates\" && op.data.fields) {\n const fieldNames = this.extractGroupFieldNames(op.data.fields);\n if (fieldNames) {\n this.groupFieldNames.set(stageIndex, fieldNames);\n }\n }\n }\n }\n\n /**\n * Post-process pipeline to rename _id fields after $group stages.\n *\n * This automatically renames MongoDB's `_id` field to the actual field name(s)\n * used for grouping, making the results more intuitive.\n *\n * @param pipeline - The aggregation pipeline\n * @returns The processed pipeline\n */\n private postProcessGroupStages(pipeline: any[]): any[] {\n const processed: any[] = [];\n\n for (let i = 0; i < pipeline.length; i++) {\n const stage = pipeline[i];\n\n // Check if this is a $group stage that needs _id renaming\n if (stage.$group && this.groupFieldNames.has(i)) {\n const fieldNames = this.groupFieldNames.get(i)!;\n\n // Add the $group stage\n processed.push(stage);\n\n // Add a $project stage to rename _id\n const projection: Record<string, unknown> = {};\n\n if (typeof fieldNames === \"string\") {\n // Single field: rename _id to field name\n projection[fieldNames] = \"$_id\";\n } else if (Array.isArray(fieldNames) && fieldNames.length > 0) {\n // Multiple fields: _id is an object, spread it\n for (const fieldName of fieldNames) {\n projection[fieldName] = `$_id.${fieldName}`;\n }\n }\n\n // Include all aggregate fields\n const aggregateFields = Object.keys(stage.$group).filter((key) => key !== \"_id\");\n for (const field of aggregateFields) {\n projection[field] = 1;\n }\n\n if (Object.keys(projection).length > 0) {\n // now unselect the _id field\n projection._id = 0;\n processed.push({ $project: projection });\n }\n } else {\n // Regular stage, add as-is\n processed.push(stage);\n }\n }\n\n return processed;\n }\n\n /**\n * Convert the parsed pipeline to a pretty-printed string for debugging.\n *\n * This method formats the MongoDB aggregation pipeline in a human-readable\n * way, making it easier to understand and debug complex queries.\n *\n * @returns A formatted string representation of the pipeline\n *\n * @example\n * ```typescript\n * const parser = new MongoQueryParser({ collection, operations });\n * console.log(parser.toPrettyString());\n * // Output:\n * // MongoDB Aggregation Pipeline:\n * // ════════════════════════════\n * // Stage 1: $match\n * // status: \"active\"\n * // age: { $gt: 18 }\n * //\n * // Stage 2: $sort\n * // createdAt: -1\n * ```\n */\n public toPrettyString(): string {\n const pipeline = this.parse();\n\n if (pipeline.length === 0) {\n return \"MongoDB Aggregation Pipeline: (empty)\";\n }\n\n let output = \"MongoDB Aggregation Pipeline:\\n\";\n output += \"═\".repeat(50) + \"\\n\";\n\n pipeline.forEach((stage, index) => {\n const stageName = Object.keys(stage)[0];\n const stageData = stage[stageName];\n\n if (index > 0) {\n output += \"\\n\";\n }\n\n output += `Stage ${index + 1}: ${colors.redBright(stageName)}\\n`;\n output += this.formatStageData(stageData, 2);\n });\n\n return output;\n }\n\n /**\n * Format stage data with proper indentation.\n *\n * @param data - The stage data to format\n * @param indent - The indentation level\n * @returns Formatted string\n */\n private formatStageData(data: any, indent: number = 0): string {\n const spaces = \" \".repeat(indent);\n\n if (typeof data !== \"object\" || data === null) {\n return `${spaces}${JSON.stringify(data)}\\n`;\n }\n\n if (Array.isArray(data)) {\n if (data.length === 0) return `${spaces}[]`;\n\n let result = \"\";\n data.forEach((item, index) => {\n result += `${spaces}[${colors.magenta(index)}]:\\n`;\n result += this.formatStageData(item, indent + 2);\n });\n return result;\n }\n\n let result = \"\";\n Object.entries(data).forEach(([key, value]) => {\n const isOperator = key.startsWith(\"$\");\n const coloredKey = isOperator ? colors.magentaBright(key) : colors.blue(key);\n\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n result += `${spaces}${coloredKey}:\\n`;\n result += this.formatStageData(value, indent + 2);\n } else if (Array.isArray(value)) {\n result += `${spaces}${coloredKey}:\\n`;\n result += this.formatStageData(value, indent + 2);\n } else {\n const formattedValue =\n typeof value === \"number\"\n ? colors.yellowBright(value)\n : typeof value === \"boolean\"\n ? colors.cyanBright(value.toString())\n : typeof value === \"string\"\n ? colors.greenBright(JSON.stringify(value))\n : colors.greenBright(String(value));\n result += `${spaces}${coloredKey}: ${formattedValue}\\n`;\n }\n });\n\n return result.endsWith(\"\\n\") ? result : `${result}\\n`;\n }\n\n /**\n * Build a single pipeline stage from a group of operations.\n *\n * @param stage - The pipeline stage type\n * @param operations - The operations to build the stage from\n * @returns The built pipeline stage or null if no stage should be added\n */\n private buildStage(stage: PipelineStage, operations: Operation[]): any {\n switch (stage) {\n case \"$match\":\n return this.buildMatchStage(operations);\n case \"$project\":\n return this.buildProjectStage(operations);\n case \"$sort\":\n return this.buildSortStage(operations);\n case \"$group\":\n return this.buildGroupStage(operations);\n case \"$lookup\":\n return this.buildLookupStage(operations);\n case \"$limit\":\n return { $limit: operations[0].data.value };\n case \"$skip\":\n return { $skip: operations[0].data.value };\n case \"$setWindowFields\":\n return {\n $setWindowFields: operations[0].data.spec,\n };\n default:\n return null;\n }\n }\n\n /**\n * Build a $match stage from where operations.\n *\n * Query building strategy:\n * - Top-level where() + orWhere() = Pure OR\n * - Use callbacks for AND + OR grouping\n *\n * @param operations - The where operations\n * @returns The $match stage or null\n */\n private buildMatchStage(operations: Operation[]): any {\n const andFilter: Record<string, any> = {};\n const orClauses: any[] = [];\n const pendingSimpleWhere: any[] = [];\n let topLevelOrMode = false;\n\n const pushOr = (clause: any): void => {\n if (!clause) {\n return;\n }\n\n if (this.isPureOrCondition(clause)) {\n orClauses.push(...clause.$or);\n return;\n }\n\n if (Array.isArray(clause)) {\n orClauses.push(...clause);\n return;\n }\n\n orClauses.push(clause);\n };\n\n const mergeAnd = (condition: any): void => {\n if (!condition) {\n return;\n }\n\n Object.entries(condition).forEach(([key, value]) => {\n if (key === \"$or\") {\n pushOr(value);\n return;\n }\n\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n andFilter[key] &&\n typeof andFilter[key] === \"object\" &&\n !Array.isArray(andFilter[key])\n ) {\n andFilter[key] = { ...andFilter[key], ...value };\n } else {\n andFilter[key] = value;\n }\n });\n };\n\n const queueSimpleWhere = (condition: any): void => {\n if (!condition) {\n return;\n }\n if (topLevelOrMode) {\n pushOr(condition);\n } else {\n pendingSimpleWhere.push(condition);\n }\n };\n\n const enterTopLevelOrMode = (): void => {\n if (topLevelOrMode) {\n return;\n }\n topLevelOrMode = true;\n while (pendingSimpleWhere.length > 0) {\n const condition = pendingSimpleWhere.shift();\n if (condition) {\n pushOr(condition);\n }\n }\n };\n\n const flushPendingSimpleWhere = (): void => {\n if (pendingSimpleWhere.length === 0) {\n return;\n }\n if (topLevelOrMode) {\n pendingSimpleWhere.forEach(pushOr);\n } else {\n pendingSimpleWhere.forEach(mergeAnd);\n }\n pendingSimpleWhere.length = 0;\n };\n\n for (const op of operations) {\n if (op.type === \"where:callback\" || op.type === \"orWhere:callback\") {\n flushPendingSimpleWhere();\n const callbackCondition = this.buildCallbackCondition(op.data);\n if (!callbackCondition) {\n continue;\n }\n\n const treatAsOr =\n op.type === \"orWhere:callback\" ||\n (topLevelOrMode && !this.isPureOrCondition(callbackCondition)) ||\n this.isPureOrCondition(callbackCondition);\n\n if (treatAsOr) {\n if (op.type === \"orWhere:callback\") {\n enterTopLevelOrMode();\n }\n pushOr(callbackCondition);\n } else {\n mergeAnd(callbackCondition);\n }\n continue;\n }\n\n if (op.type === \"where:object\") {\n queueSimpleWhere(op.data);\n continue;\n }\n\n if (\n op.type === \"where:not\" ||\n op.type === \"orWhere:not\" ||\n op.type === \"where:exists\" ||\n op.type === \"where:notExists\"\n ) {\n const negated = op.type === \"where:not\" || op.type === \"where:notExists\";\n const nested = this.buildCallbackCondition(op.data.callback);\n if (nested) {\n const condition = negated ? { $nor: [nested] } : nested;\n if (op.type.startsWith(\"orWhere\")) {\n enterTopLevelOrMode();\n pushOr(condition);\n } else {\n queueSimpleWhere(condition);\n }\n }\n continue;\n }\n\n if (op.type === \"orWhere:object\") {\n enterTopLevelOrMode();\n pushOr(op.data);\n continue;\n }\n\n const condition = this.buildWhereCondition(op);\n if (!condition) {\n continue;\n }\n\n if (op.type.startsWith(\"orWhere\")) {\n enterTopLevelOrMode();\n pushOr(condition);\n } else {\n queueSimpleWhere(condition);\n }\n }\n\n flushPendingSimpleWhere();\n\n const hasAnd = Object.keys(andFilter).length > 0;\n const hasOr = orClauses.length > 0;\n\n if (!hasAnd && !hasOr) {\n return null;\n }\n\n const match: any = {};\n if (hasAnd) {\n Object.assign(match, andFilter);\n }\n if (hasOr) {\n match.$or = orClauses;\n }\n\n return { $match: match };\n }\n\n private isPureOrCondition(condition: any): condition is { $or: any[] } {\n return (\n condition &&\n typeof condition === \"object\" &&\n !Array.isArray(condition) &&\n Object.keys(condition).length === 1 &&\n Array.isArray((condition as any).$or)\n );\n }\n\n /**\n * Build a condition from a callback-based where clause.\n * Creates a sub-builder, executes the callback, and extracts the conditions.\n * If callback has orWhere, all conditions become OR.\n *\n * @param callback - The callback function\n * @returns The built condition or null\n */\n private buildCallbackCondition(callback: any): any {\n // Create a temporary sub-builder\n const subBuilder = this.createSubBuilder();\n\n // Execute the callback with the sub-builder\n callback(subBuilder);\n\n // Extract only match operations from the sub-builder\n const matchOps = subBuilder.operations.filter((op: Operation) => op.stage === \"$match\");\n\n if (matchOps.length === 0) {\n return null;\n }\n\n const andFilter: Record<string, any> = {};\n const orClauses: any[] = [];\n const hasInternalOr = matchOps.some((op) => op.type.startsWith(\"orWhere\"));\n\n const pushOr = (clause: any): void => {\n if (!clause) {\n return;\n }\n if (this.isPureOrCondition(clause)) {\n orClauses.push(...clause.$or);\n return;\n }\n orClauses.push(clause);\n };\n\n if (hasInternalOr) {\n for (const op of matchOps) {\n if (op.type === \"where:callback\" || op.type === \"orWhere:callback\") {\n const nestedCondition = this.buildCallbackCondition(op.data);\n if (nestedCondition) {\n pushOr(nestedCondition);\n }\n continue;\n }\n\n if (op.type === \"where:object\" || op.type === \"orWhere:object\") {\n pushOr(op.data);\n continue;\n }\n\n const condition = this.buildWhereCondition(op);\n if (condition) {\n pushOr(condition);\n }\n }\n\n return orClauses.length > 0 ? { $or: orClauses } : null;\n }\n\n for (const op of matchOps) {\n if (op.type === \"where:callback\") {\n const nestedCondition = this.buildCallbackCondition(op.data);\n if (nestedCondition) {\n Object.assign(andFilter, nestedCondition);\n }\n } else if (op.type === \"where:object\") {\n Object.assign(andFilter, op.data);\n } else {\n const condition = this.buildWhereCondition(op);\n if (condition) {\n Object.assign(andFilter, condition);\n }\n }\n }\n\n return Object.keys(andFilter).length > 0 ? andFilter : null;\n }\n\n /**\n * Build a MongoDB filter condition from a where operation.\n *\n * @param op - The operation to build\n * @returns The MongoDB filter condition\n */\n private buildWhereCondition(op: Operation): any {\n const { field, operator, value } = op.data;\n\n switch (op.type) {\n case \"where\":\n case \"orWhere\":\n return this.buildOperatorCondition(field, operator, value);\n\n case \"whereIn\":\n return { [field]: { $in: value || op.data.values } };\n\n case \"whereNotIn\":\n return { [field]: { $nin: value || op.data.values } };\n\n case \"whereNull\":\n return { [field]: null };\n\n case \"whereNotNull\":\n return { [field]: { $ne: null } };\n\n case \"whereBetween\":\n return {\n [field]: {\n $gte: op.data.range[0],\n $lte: op.data.range[1],\n },\n };\n\n case \"whereNotBetween\":\n return {\n [field]: {\n $not: {\n $gte: op.data.range[0],\n $lte: op.data.range[1],\n },\n },\n };\n\n case \"whereLike\": {\n const pattern =\n typeof op.data.pattern === \"string\" ? op.data.pattern : op.data.pattern.source;\n return { [field]: { $regex: pattern, $options: \"i\" } };\n }\n\n case \"whereNotLike\": {\n const notPattern =\n typeof op.data.pattern === \"string\" ? op.data.pattern : op.data.pattern.source;\n return { [field]: { $not: { $regex: notPattern, $options: \"i\" } } };\n }\n\n case \"whereStartsWith\":\n return { [field]: { $regex: `^${op.data.value}`, $options: \"i\" } };\n\n case \"whereNotStartsWith\":\n return {\n [field]: { $not: { $regex: `^${op.data.value}`, $options: \"i\" } },\n };\n\n case \"whereEndsWith\":\n return { [field]: { $regex: `${op.data.value}$`, $options: \"i\" } };\n\n case \"whereNotEndsWith\":\n return {\n [field]: { $not: { $regex: `${op.data.value}$`, $options: \"i\" } },\n };\n\n case \"whereExists\":\n return { [field]: { $exists: true } };\n\n case \"whereNotExists\":\n return { [field]: { $exists: false } };\n\n case \"whereSize\":\n if (op.data.operator === \"=\") {\n return { [field]: { $size: op.data.size } };\n } else {\n const mongoOp = this.getMongoOperator(op.data.operator);\n return {\n $expr: {\n [mongoOp]: [{ $size: `$${field}` }, op.data.size],\n },\n };\n }\n\n case \"textSearch\":\n return {\n $text: { $search: op.data.query },\n ...(op.data.filters || {}),\n };\n\n case \"whereRaw\":\n case \"orWhereRaw\":\n return this.resolveRawExpression(\n op.data.expression as RawExpression,\n op.data.bindings,\n );\n\n case \"whereColumn\":\n case \"orWhereColumn\":\n return this.buildColumnComparison(op.data.first, op.data.operator, op.data.second);\n\n case \"whereBetweenColumns\":\n return this.buildBetweenColumnsCondition(\n op.data.field,\n op.data.lowerColumn,\n op.data.upperColumn,\n );\n\n case \"whereDate\":\n case \"whereDateEquals\":\n return this.buildDateEqualityCondition(op.data.field, op.data.value);\n\n case \"whereDateBefore\":\n return this.buildDateBeforeCondition(op.data.field, op.data.value);\n\n case \"whereDateAfter\":\n return this.buildDateAfterCondition(op.data.field, op.data.value);\n\n case \"whereTime\":\n return this.buildTimeCondition(op.data.field, op.data.value);\n\n case \"whereDay\":\n return this.buildDatePartCondition(op.data.field, \"$dayOfMonth\", op.data.value);\n\n case \"whereMonth\":\n return this.buildDatePartCondition(op.data.field, \"$month\", op.data.value);\n\n case \"whereYear\":\n return this.buildDatePartCondition(op.data.field, \"$year\", op.data.value);\n\n case \"whereJsonContains\":\n return this.buildJsonContainsCondition(op.data.path, op.data.value);\n\n case \"whereJsonDoesntContain\":\n return this.buildJsonDoesntContainCondition(op.data.path, op.data.value);\n\n case \"whereJsonContainsKey\":\n return this.buildJsonContainsKeyCondition(op.data.path);\n\n case \"whereJsonLength\":\n return this.buildJsonLengthCondition(\n op.data.path,\n op.data.operator,\n op.data.value,\n );\n\n case \"whereJsonIsArray\":\n return this.buildJsonTypeCondition(op.data.path, \"array\");\n\n case \"whereJsonIsObject\":\n return this.buildJsonTypeCondition(op.data.path, \"object\");\n\n case \"whereArrayLength\":\n return this.buildArrayLengthCondition(\n op.data.field,\n op.data.operator,\n op.data.value,\n );\n\n case \"whereFullText\":\n case \"orWhereFullText\":\n return { $text: { $search: op.data.query } };\n\n case \"whereSearch\":\n return {\n [op.data.field]: {\n $regex: op.data.query,\n $options: \"i\",\n },\n };\n\n case \"where:not\":\n case \"orWhere:not\": {\n const nestedNot = this.buildCallbackCondition(op.data.callback);\n return nestedNot ? { $nor: [nestedNot] } : null;\n }\n\n case \"where:exists\":\n return this.buildCallbackCondition(op.data.callback);\n\n case \"where:notExists\": {\n const nestedExists = this.buildCallbackCondition(op.data.callback);\n return nestedExists ? { $nor: [nestedExists] } : null;\n }\n\n case \"whereArrayContains\":\n if (op.data.key) {\n return {\n [field]: {\n $elemMatch: { [op.data.key]: op.data.value },\n },\n };\n } else {\n return { [field]: op.data.value };\n }\n\n default:\n return null;\n }\n }\n\n /**\n * Build a condition based on the operator.\n *\n * @param field - The field name\n * @param operator - The comparison operator\n * @param value - The value to compare\n * @returns The MongoDB filter condition\n */\n private buildOperatorCondition(field: string, operator: string, value: unknown): any {\n switch (operator) {\n case \"=\":\n return { [field]: value };\n case \"!=\":\n return { [field]: { $ne: value } };\n case \">\":\n return { [field]: { $gt: value } };\n case \">=\":\n return { [field]: { $gte: value } };\n case \"<\":\n return { [field]: { $lt: value } };\n case \"<=\":\n return { [field]: { $lte: value } };\n default:\n return { [field]: value };\n }\n }\n\n /**\n * Get MongoDB operator from comparison operator.\n *\n * @param operator - The comparison operator\n * @returns The MongoDB operator\n */\n private getMongoOperator(operator: string): string {\n const map: Record<string, string> = {\n \"=\": \"$eq\",\n \"!=\": \"$ne\",\n \">\": \"$gt\",\n \">=\": \"$gte\",\n \"<\": \"$lt\",\n \"<=\": \"$lte\",\n };\n return map[operator] || \"$eq\";\n }\n\n private resolveRawExpression(expression: RawExpression, bindings?: unknown[]): any {\n if (typeof expression === \"string\") {\n const bound = this.bindRawString(expression, bindings);\n return { $where: bound };\n }\n\n if (typeof expression === \"object\" && expression !== null) {\n return expression;\n }\n\n return null;\n }\n\n private bindRawString(expression: string, bindings?: unknown[]): string {\n if (!bindings || bindings.length === 0) {\n return expression;\n }\n\n let index = 0;\n return expression.replace(/\\?/g, () => {\n const value = bindings[index++];\n return value === undefined ? \"?\" : JSON.stringify(value);\n });\n }\n\n private buildColumnComparison(first: string, operator: WhereOperator, second: string): any {\n const mongoOperator = this.getMongoOperator(operator);\n return {\n $expr: {\n [mongoOperator]: [this.wrapColumn(first), this.wrapColumn(second)],\n },\n };\n }\n\n private buildBetweenColumnsCondition(field: string, lower: string, upper: string): any {\n return {\n $expr: {\n $and: [\n { $gte: [this.wrapColumn(field), this.wrapColumn(lower)] },\n { $lte: [this.wrapColumn(field), this.wrapColumn(upper)] },\n ],\n },\n };\n }\n\n private wrapColumn(column: string): string {\n return column.startsWith(\"$\") ? column : `$${column}`;\n }\n\n private buildDateEqualityCondition(field: string, value: Date | string): any {\n const target = this.normalizeDateInput(value);\n const start = this.startOfDay(target);\n const end = this.endOfDay(target);\n return { [field]: { $gte: start, $lte: end } };\n }\n\n private buildDateBeforeCondition(field: string, value: Date | string): any {\n const target = this.startOfDay(this.normalizeDateInput(value));\n return { [field]: { $lt: target } };\n }\n\n private buildDateAfterCondition(field: string, value: Date | string): any {\n const target = this.endOfDay(this.normalizeDateInput(value));\n return { [field]: { $gt: target } };\n }\n\n private buildTimeCondition(field: string, value: string): any {\n return {\n $expr: {\n $eq: [\n {\n $dateToString: {\n format: \"%H:%M\",\n date: `$${field}`,\n },\n },\n value,\n ],\n },\n };\n }\n\n private buildDatePartCondition(\n field: string,\n operator: \"$dayOfMonth\" | \"$month\" | \"$year\",\n value: number,\n ): any {\n return {\n $expr: {\n $eq: [\n {\n [operator]: `$${field}`,\n },\n value,\n ],\n },\n };\n }\n\n private buildJsonContainsCondition(path: string, value: unknown): any {\n const fieldPath = this.normalizePath(path);\n if (Array.isArray(value)) {\n return { [fieldPath]: { $all: value } };\n }\n return { [fieldPath]: value };\n }\n\n private buildJsonDoesntContainCondition(path: string, value: unknown): any {\n const fieldPath = this.normalizePath(path);\n const values = Array.isArray(value) ? value : [value];\n return { [fieldPath]: { $nin: values } };\n }\n\n private buildJsonContainsKeyCondition(path: string): any {\n return {\n [this.normalizePath(path)]: { $exists: true },\n };\n }\n\n private buildJsonLengthCondition(path: string, operator: WhereOperator, value: number): any {\n const mongoOperator = this.getMongoOperator(operator);\n return {\n $expr: {\n [mongoOperator]: [{ $size: { $ifNull: [`$${this.normalizePath(path)}`, []] } }, value],\n },\n };\n }\n\n private buildJsonTypeCondition(path: string, type: string): any {\n return {\n $expr: {\n $eq: [{ $type: `$${this.normalizePath(path)}` }, type],\n },\n };\n }\n\n private buildArrayLengthCondition(field: string, operator: WhereOperator, value: number): any {\n const mongoOperator = this.getMongoOperator(operator);\n return {\n $expr: {\n [mongoOperator]: [{ $size: { $ifNull: [`$${field}`, []] } }, value],\n },\n };\n }\n\n private normalizeDateInput(value: Date | string): Date {\n if (value instanceof Date) {\n return value;\n }\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n throw new Error(`Invalid date value: ${value}`);\n }\n return parsed;\n }\n\n private startOfDay(date: Date): Date {\n const copy = new Date(date);\n copy.setHours(0, 0, 0, 0);\n return copy;\n }\n\n private endOfDay(date: Date): Date {\n const copy = new Date(date);\n copy.setHours(23, 59, 59, 999);\n return copy;\n }\n\n private normalizePath(path: string): string {\n return path.replace(/->/g, \".\");\n }\n\n private applyProjectionFields(\n projection: Record<string, unknown>,\n fields: string[],\n value: 0 | 1,\n ): void {\n for (const field of fields) {\n projection[field] = value;\n }\n }\n\n /**\n * Apply projection object with aliases and inclusion/exclusion.\n * @param projection - The projection object to modify\n * @param projectionObj - The projection specification\n */\n private applyProjectionObject(\n projection: Record<string, unknown>,\n projectionObj: Record<string, unknown>,\n ): void {\n for (const [field, value] of Object.entries(projectionObj)) {\n // Handle boolean values (true = 1, false = 0)\n if (typeof value === \"boolean\") {\n projection[field] = value ? 1 : 0;\n continue;\n }\n\n // Handle numeric values (0 or 1)\n if (typeof value === \"number\") {\n projection[field] = value;\n continue;\n }\n\n // Handle string values (aliases)\n if (typeof value === \"string\") {\n // Alias: project the field with a new name\n projection[value] = `$${field}`;\n continue;\n }\n\n // Handle complex expressions (objects)\n if (typeof value === \"object\" && value !== null) {\n projection[field] = value;\n continue;\n }\n\n // Default: include the field\n projection[field] = 1;\n }\n }\n\n private applyRawProjection(\n projection: Record<string, unknown>,\n expression: RawExpression,\n bindings?: unknown[],\n ): void {\n const resolved = this.resolveProjectionExpression(expression, bindings);\n if (!resolved) {\n return;\n }\n\n if (typeof resolved === \"object\" && resolved !== null && !Array.isArray(resolved)) {\n Object.assign(projection, resolved as Record<string, unknown>);\n }\n }\n\n private resolveProjectionExpression(\n expression: RawExpression | unknown,\n bindings?: unknown[],\n ): any {\n if (typeof expression === \"string\") {\n const source =\n bindings && expression.includes(\"?\")\n ? this.bindRawString(expression, bindings)\n : expression;\n if (source.startsWith(\":\")) {\n return source.slice(1);\n }\n return this.normalizeFieldReference(source);\n }\n\n if (typeof expression === \"object\" && expression !== null && !(expression instanceof Date)) {\n return expression;\n }\n\n if (typeof expression === \"number\" || typeof expression === \"boolean\") {\n return expression;\n }\n\n return expression;\n }\n\n private normalizeFieldReference(value: string | RawExpression): any {\n if (typeof value === \"string\") {\n if (value.startsWith(\":\")) {\n return value.slice(1);\n }\n // If already a field reference, return as-is\n if (value.startsWith(\"$\")) {\n return value;\n }\n // Check if it's a string literal (contains spaces or special chars)\n // Field paths are typically: alphanumeric, underscore, dot only\n if (!/^[a-zA-Z0-9_.]+$/.test(value)) {\n return value; // Return as literal\n }\n // Otherwise, treat as field reference\n return `$${value}`;\n }\n return value;\n }\n\n private buildAggregateProjection(field: string, aggregate: string): any {\n if (aggregate === \"count\") {\n return this.buildArraySizeExpression(field);\n }\n\n const map: Record<string, string> = {\n sum: \"$sum\",\n avg: \"$avg\",\n min: \"$min\",\n max: \"$max\",\n first: \"$first\",\n last: \"$last\",\n };\n\n const operator = map[aggregate];\n if (!operator) {\n return null;\n }\n\n return {\n [operator]: this.normalizeFieldReference(field),\n };\n }\n\n private buildExistsProjection(field: string): any {\n return {\n $ne: [{ $type: `$${field}` }, \"missing\"],\n };\n }\n\n private buildArraySizeExpression(field: string): any {\n return {\n $size: { $ifNull: [`$${field}`, []] },\n };\n }\n\n private buildCaseExpression(\n cases: Array<{ when: RawExpression; then: RawExpression | unknown }>,\n otherwise: RawExpression | unknown,\n ): any {\n return {\n $switch: {\n branches: cases.map((item) => ({\n case: this.resolveProjectionExpression(item.when),\n then: this.resolveLiteralOrExpression(item.then),\n })),\n default: this.resolveLiteralOrExpression(otherwise),\n },\n };\n }\n\n private buildCondExpression(\n condition: RawExpression,\n thenValue: RawExpression | unknown,\n elseValue: RawExpression | unknown,\n ): any {\n return {\n $cond: [\n this.resolveProjectionExpression(condition),\n this.resolveLiteralOrExpression(thenValue),\n this.resolveLiteralOrExpression(elseValue),\n ],\n };\n }\n\n /**\n * Resolve a value as a literal (if it's a plain string) or as an expression.\n * Used for `then`/`default` values in CASE/WHEN expressions.\n */\n private resolveLiteralOrExpression(value: RawExpression | unknown): any {\n // If it's a string that starts with $, treat as field reference\n if (typeof value === \"string\" && value.startsWith(\"$\")) {\n return value;\n }\n // If it's a plain string (not starting with $), treat as literal\n if (typeof value === \"string\") {\n return value;\n }\n // For objects (expressions), numbers, booleans, etc., use normal resolution\n return this.resolveProjectionExpression(value);\n }\n\n private inferJsonAlias(path: string): string {\n const normalized = this.normalizePath(path);\n const segments = normalized.split(\".\");\n return segments[segments.length - 1];\n }\n\n private buildConcatExpression(values: Array<string | RawExpression>): any {\n return {\n $concat: values.map((value) => this.normalizeFieldReference(value)),\n };\n }\n\n private buildCoalesceExpression(values: Array<string | RawExpression>): any {\n if (values.length === 0) {\n return null;\n }\n\n let expression = this.normalizeFieldReference(values[values.length - 1]);\n\n for (let index = values.length - 2; index >= 0; index--) {\n expression = {\n $ifNull: [this.normalizeFieldReference(values[index]), expression],\n };\n }\n\n return expression;\n }\n\n /**\n * Build a $project stage from select operations.\n *\n * @param operations - The select operations\n * @returns The $project stage or null\n */\n private buildProjectStage(operations: Operation[]): any {\n if (operations.length === 0) {\n return null;\n }\n\n const projection: Record<string, unknown> = {};\n const driverCallbacks: Array<(projection: Record<string, unknown>) => void> = [];\n\n for (const op of operations) {\n switch (op.type) {\n case \"select\":\n // Handle new projection format with aliases\n if (op.data.projection) {\n this.applyProjectionObject(projection, op.data.projection);\n } else if (op.data.fields) {\n this.applyProjectionFields(projection, op.data.fields, 1);\n }\n break;\n\n case \"deselect\":\n this.applyProjectionFields(projection, op.data.fields, 0);\n break;\n\n case \"addSelect\":\n this.applyProjectionFields(projection, op.data.fields, 1);\n break;\n\n case \"selectRaw\":\n this.applyRawProjection(projection, op.data.expression, op.data.bindings);\n break;\n\n case \"selectSub\":\n case \"addSelectSub\": {\n const expr = this.resolveProjectionExpression(op.data.expression, op.data.bindings);\n if (expr !== undefined) {\n projection[op.data.alias] = expr;\n }\n break;\n }\n\n case \"selectAggregate\":\n projection[op.data.alias] = this.buildAggregateProjection(\n op.data.field,\n op.data.aggregate,\n );\n break;\n\n case \"selectExists\":\n projection[op.data.alias] = this.buildExistsProjection(op.data.field);\n break;\n\n case \"selectCount\":\n projection[op.data.alias] = this.buildArraySizeExpression(op.data.field);\n break;\n\n case \"selectCase\":\n projection[op.data.alias] = this.buildCaseExpression(\n op.data.cases,\n op.data.otherwise,\n );\n break;\n\n case \"selectWhen\":\n projection[op.data.alias] = this.buildCondExpression(\n op.data.condition,\n op.data.thenValue,\n op.data.elseValue,\n );\n break;\n\n case \"selectDriverProjection\":\n driverCallbacks.push(op.data.callback);\n break;\n\n case \"selectJson\": {\n const alias = op.data.alias ?? this.inferJsonAlias(op.data.path);\n projection[alias] = this.normalizeFieldReference(\n `$${this.normalizePath(op.data.path)}`,\n );\n break;\n }\n\n case \"selectJsonRaw\": {\n projection[op.data.alias] = this.resolveProjectionExpression(op.data.expression);\n break;\n }\n\n case \"deselectJson\":\n projection[this.normalizePath(op.data.path)] = 0;\n break;\n\n case \"selectConcat\":\n projection[op.data.alias] = this.buildConcatExpression(op.data.fields);\n break;\n\n case \"selectCoalesce\":\n projection[op.data.alias] = this.buildCoalesceExpression(op.data.fields);\n break;\n\n default:\n break;\n }\n }\n\n for (const callback of driverCallbacks) {\n callback(projection);\n }\n\n return Object.keys(projection).length > 0 ? { $project: projection } : null;\n }\n\n /**\n * Build a $sort stage from order operations.\n *\n * @param operations - The order operations\n * @returns The $sort stage or null\n */\n private buildSortStage(operations: Operation[]): any {\n const sort: any = {};\n\n for (const op of operations) {\n switch (op.type) {\n case \"orderBy\":\n sort[op.data.field] = op.data.direction === \"asc\" ? 1 : -1;\n break;\n\n case \"orderByRandom\":\n return { $sample: { size: op.data.limit } };\n\n case \"orderByRaw\":\n // TODO: Handle raw expressions\n break;\n }\n }\n\n return Object.keys(sort).length > 0 ? { $sort: sort } : null;\n }\n\n /**\n * Build a $group stage from group operations.\n *\n * @param operations - The group operations\n * @returns The $group stage or null\n */\n private buildGroupStage(operations: Operation[]): any {\n const op = operations[0];\n\n switch (op.type) {\n case \"groupBy\": {\n const stage = this.buildGroupByStage(op.data.fields);\n if (stage) {\n return stage;\n }\n break;\n }\n case \"groupByWithAggregates\": {\n const stage = this.buildGroupByWithAggregatesStage(\n op.data.fields,\n op.data.aggregates,\n );\n if (stage) {\n return stage;\n }\n break;\n }\n case \"groupByRaw\": {\n const expression = op.data.expression;\n if (expression && typeof expression === \"object\") {\n return { $group: expression };\n }\n // If expression is not an object, it might be a string or other type\n // In that case, we should still return it as a $group stage\n if (expression) {\n return { $group: { _id: expression } };\n }\n break;\n }\n case \"distinct\": {\n const stage = this.buildGroupByStage(op.data.fields);\n if (stage) {\n return stage;\n }\n break;\n }\n default:\n break;\n }\n\n return null;\n }\n\n private buildGroupByStage(fields: GroupByInput): any {\n const groupId = this.buildGroupId(fields);\n if (!groupId) {\n return null;\n }\n\n return { $group: { _id: groupId } };\n }\n\n /**\n * Build a $group stage with aggregates from group operations.\n *\n * @param fields - Fields to group by\n * @param aggregates - Aggregate operations (abstract or raw)\n * @returns The $group stage or null\n */\n private buildGroupByWithAggregatesStage(\n fields: GroupByInput,\n aggregates: Record<string, RawExpression>,\n ): any {\n const groupId = this.buildGroupId(fields);\n if (!groupId) {\n return null;\n }\n\n const groupStage: Record<string, unknown> = {\n _id: groupId,\n };\n\n // Translate each aggregate expression\n for (const [alias, expression] of Object.entries(aggregates)) {\n if (isAggregateExpression(expression)) {\n // Translate abstract expression to MongoDB format\n groupStage[alias] = this.translateAggregateExpression(expression);\n } else {\n // Use raw expression as-is (already in MongoDB format)\n groupStage[alias] = expression;\n }\n }\n\n return { $group: groupStage };\n }\n\n /**\n * Extract field names from GroupByInput for renaming _id.\n *\n * @param fields - The grouping fields\n * @returns Field name(s) to use for renaming _id\n */\n private extractGroupFieldNames(fields: GroupByInput): string | string[] | null {\n if (typeof fields === \"string\") {\n return fields;\n }\n\n if (Array.isArray(fields)) {\n const allStrings = fields.every((field) => typeof field === \"string\");\n if (allStrings) {\n return fields as string[];\n }\n // For complex arrays, return null (don't rename)\n return null;\n }\n\n if (typeof fields === \"object\" && fields !== null) {\n // For object syntax, use the keys as field names\n return Object.keys(fields);\n }\n\n return null;\n }\n\n /**\n * Translate an abstract aggregate expression to MongoDB format.\n *\n * @param expr - Abstract aggregate expression\n * @returns MongoDB aggregation expression\n */\n private translateAggregateExpression(expr: AggregateExpression): Record<string, unknown> {\n switch (expr.__agg) {\n case \"count\":\n return { $sum: 1 };\n\n case \"sum\":\n if (!expr.__field) {\n throw new Error(\"Sum aggregate requires a field name\");\n }\n return { $sum: `$${expr.__field}` };\n\n case \"avg\":\n if (!expr.__field) {\n throw new Error(\"Average aggregate requires a field name\");\n }\n return { $avg: `$${expr.__field}` };\n\n case \"min\":\n if (!expr.__field) {\n throw new Error(\"Min aggregate requires a field name\");\n }\n return { $min: `$${expr.__field}` };\n\n case \"max\":\n if (!expr.__field) {\n throw new Error(\"Max aggregate requires a field name\");\n }\n return { $max: `$${expr.__field}` };\n\n case \"first\":\n if (!expr.__field) {\n throw new Error(\"First aggregate requires a field name\");\n }\n return { $first: `$${expr.__field}` };\n\n case \"last\":\n if (!expr.__field) {\n throw new Error(\"Last aggregate requires a field name\");\n }\n return { $last: `$${expr.__field}` };\n\n case \"distinct\":\n if (!expr.__field) {\n throw new Error(\"Distinct aggregate requires a field name\");\n }\n return { $distinct: `$${expr.__field}` };\n\n case \"floor\":\n if (!expr.__field) {\n throw new Error(\"Floor aggregate requires a field name\");\n }\n\n return { $floor: `$${expr.__field}` };\n\n default:\n throw new Error(`Unknown aggregate function: ${expr.__agg}`);\n }\n }\n\n private buildGroupId(fields: GroupByInput): any {\n if (!fields) {\n return null;\n }\n\n if (typeof fields === \"string\") {\n return `$${fields}`;\n }\n\n if (Array.isArray(fields)) {\n if (fields.length === 0) {\n return null;\n }\n\n const allStrings = fields.every((field) => typeof field === \"string\");\n if (allStrings) {\n const result: Record<string, string> = {};\n for (const field of fields as string[]) {\n result[field] = `$${field}`;\n }\n return result;\n }\n\n // Array of objects - merge them to build complex _id structures\n return (fields as Record<string, unknown>[]).reduce((acc, item) => ({ ...acc, ...item }), {});\n }\n\n if (typeof fields === \"object\") {\n const normalized: Record<string, unknown> = {};\n Object.entries(fields).forEach(([key, value]) => {\n if (typeof value === \"string\" && !value.startsWith(\"$\")) {\n normalized[key] = `$${value}`;\n } else {\n normalized[key] = value;\n }\n });\n return normalized;\n }\n\n return null;\n }\n\n /**\n * Build a $lookup stage from join operations.\n *\n * @param operations - The join operations\n * @returns The $lookup stage or null\n */\n private buildLookupStage(operations: Operation[]): any {\n const op = operations[0];\n const options = op.data;\n\n return {\n $lookup: {\n from: options.table,\n localField: options.localField,\n foreignField: options.foreignField,\n as: options.alias || options.table,\n },\n };\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { SyncAdapterContract, SyncInstruction } from "../../contracts/sync-adapter.contract.mjs";
2
+ import { MongoDbDriver } from "./mongodb-driver.mjs";
3
+
4
+ //#region ../../@warlock.js/cascade/src/drivers/mongodb/mongodb-sync-adapter.d.ts
5
+ /**
6
+ * MongoDB implementation of the sync adapter.
7
+ * Handles array updates using positional operators and arrayFilters.
8
+ * Automatically participates in active transactions via the driver's session context.
9
+ */
10
+ declare class MongoSyncAdapter implements SyncAdapterContract {
11
+ private readonly driver;
12
+ /**
13
+ * Creates a new MongoDB sync adapter.
14
+ *
15
+ * @param driver - The MongoDB driver instance (provides session-aware operations)
16
+ */
17
+ constructor(driver: MongoDbDriver);
18
+ /**
19
+ * Executes a batch of sync instructions.
20
+ *
21
+ * @param instructions - Array of sync instructions
22
+ * @returns Total number of documents affected
23
+ */
24
+ executeBatch(instructions: SyncInstruction[]): Promise<number>;
25
+ /**
26
+ * Executes a single sync instruction.
27
+ * Uses the driver's updateMany to automatically participate in active transactions.
28
+ *
29
+ * @param instruction - The sync instruction
30
+ * @returns Number of documents affected
31
+ */
32
+ executeOne(instruction: SyncInstruction): Promise<number>;
33
+ /**
34
+ * Executes an array update using MongoDB positional operators.
35
+ * Uses the driver's updateMany to automatically participate in active transactions.
36
+ *
37
+ * @param instruction - The sync instruction with array info
38
+ * @returns Number of documents affected
39
+ */
40
+ executeArrayUpdate(instruction: SyncInstruction): Promise<number>;
41
+ /**
42
+ * Checks if positional operator $ can be used.
43
+ * Requires filter to already match the array element.
44
+ *
45
+ * @param instruction - The sync instruction
46
+ * @returns True if positional operator can be used
47
+ */
48
+ private canUsePositionalOperator;
49
+ /**
50
+ * Executes array update using arrayFilters.
51
+ * Uses the driver's updateMany with arrayFilters option to participate in transactions.
52
+ *
53
+ * @param instruction - The sync instruction
54
+ * @returns Number of documents affected
55
+ */
56
+ private executeWithArrayFilters;
57
+ /**
58
+ * Builds an optimized filter to reduce the number of documents scanned.
59
+ * Adds array existence check when filter doesn't already match array elements.
60
+ *
61
+ * @param originalFilter - The original filter from the instruction
62
+ * @param arrayField - The array field path
63
+ * @param identifierField - The identifier field within array elements
64
+ * @returns Optimized filter
65
+ */
66
+ private buildOptimizedFilter;
67
+ /**
68
+ * Transforms update operation to use arrayFilters placeholder.
69
+ *
70
+ * @param update - Original update operation
71
+ * @param arrayField - Array field path
72
+ * @returns Transformed update operation
73
+ */
74
+ private transformUpdateForArrayFilters;
75
+ }
76
+ //#endregion
77
+ export { MongoSyncAdapter };
78
+ //# sourceMappingURL=mongodb-sync-adapter.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb-sync-adapter.d.mts","names":[],"sources":["../../../../../../../@warlock.js/cascade/src/drivers/mongodb/mongodb-sync-adapter.ts"],"mappings":";;;;;;;;;cAca,gBAAA,YAA4B,mBAAA;EAAA,iBACtB,MAAA;EADsB;;;;;cAQpB,MAAA,EAAQ,aAAA;EAAA;;;;;;EAUd,YAAA,CAAa,YAAA,EAAc,eAAA,KAAoB,OAAA;EAqBvB;;;;;;;EAAxB,UAAA,CAAW,WAAA,EAAa,eAAA,GAAkB,OAAA;EA0DzC;;;;AAkEwB;;;EA3GzB,kBAAA,CAAmB,WAAA,EAAa,eAAA,GAAkB,OAAA;;;;;;;;UA4BvD,wBAAA;;;;;;;;UAaM,uBAAA;;;;;;;;;;UAyCN,oBAAA;;;;;;;;UAyBA,8BAAA;AAAA"}
@@ -0,0 +1,118 @@
1
+ //#region ../../@warlock.js/cascade/src/drivers/mongodb/mongodb-sync-adapter.ts
2
+ /**
3
+ * MongoDB implementation of the sync adapter.
4
+ * Handles array updates using positional operators and arrayFilters.
5
+ * Automatically participates in active transactions via the driver's session context.
6
+ */
7
+ var MongoSyncAdapter = class {
8
+ driver;
9
+ /**
10
+ * Creates a new MongoDB sync adapter.
11
+ *
12
+ * @param driver - The MongoDB driver instance (provides session-aware operations)
13
+ */
14
+ constructor(driver) {
15
+ this.driver = driver;
16
+ }
17
+ /**
18
+ * Executes a batch of sync instructions.
19
+ *
20
+ * @param instructions - Array of sync instructions
21
+ * @returns Total number of documents affected
22
+ */
23
+ async executeBatch(instructions) {
24
+ let totalAffected = 0;
25
+ for (const instruction of instructions) {
26
+ const affected = instruction.isArrayUpdate ? await this.executeArrayUpdate(instruction) : await this.executeOne(instruction);
27
+ totalAffected += affected;
28
+ }
29
+ return totalAffected;
30
+ }
31
+ /**
32
+ * Executes a single sync instruction.
33
+ * Uses the driver's updateMany to automatically participate in active transactions.
34
+ *
35
+ * @param instruction - The sync instruction
36
+ * @returns Number of documents affected
37
+ */
38
+ async executeOne(instruction) {
39
+ return (await this.driver.updateMany(instruction.targetTable, instruction.filter, instruction.update)).modifiedCount;
40
+ }
41
+ /**
42
+ * Executes an array update using MongoDB positional operators.
43
+ * Uses the driver's updateMany to automatically participate in active transactions.
44
+ *
45
+ * @param instruction - The sync instruction with array info
46
+ * @returns Number of documents affected
47
+ */
48
+ async executeArrayUpdate(instruction) {
49
+ if (!instruction.arrayField || !instruction.identifierField) throw new Error("Array update requires arrayField and identifierField to be specified");
50
+ if (this.canUsePositionalOperator(instruction)) return (await this.driver.updateMany(instruction.targetTable, instruction.filter, instruction.update)).modifiedCount;
51
+ return await this.executeWithArrayFilters(instruction);
52
+ }
53
+ /**
54
+ * Checks if positional operator $ can be used.
55
+ * Requires filter to already match the array element.
56
+ *
57
+ * @param instruction - The sync instruction
58
+ * @returns True if positional operator can be used
59
+ */
60
+ canUsePositionalOperator(instruction) {
61
+ return `${instruction.arrayField}.${instruction.identifierField}` in instruction.filter;
62
+ }
63
+ /**
64
+ * Executes array update using arrayFilters.
65
+ * Uses the driver's updateMany with arrayFilters option to participate in transactions.
66
+ *
67
+ * @param instruction - The sync instruction
68
+ * @returns Number of documents affected
69
+ */
70
+ async executeWithArrayFilters(instruction) {
71
+ const arrayFilters = [{ [`elem.${instruction.identifierField}`]: instruction.identifierValue }];
72
+ const transformedUpdate = this.transformUpdateForArrayFilters(instruction.update, instruction.arrayField);
73
+ const optimizedFilter = this.buildOptimizedFilter(instruction.filter, instruction.arrayField, instruction.identifierField);
74
+ return (await this.driver.updateMany(instruction.targetTable, optimizedFilter, transformedUpdate, { arrayFilters })).modifiedCount;
75
+ }
76
+ /**
77
+ * Builds an optimized filter to reduce the number of documents scanned.
78
+ * Adds array existence check when filter doesn't already match array elements.
79
+ *
80
+ * @param originalFilter - The original filter from the instruction
81
+ * @param arrayField - The array field path
82
+ * @param identifierField - The identifier field within array elements
83
+ * @returns Optimized filter
84
+ */
85
+ buildOptimizedFilter(originalFilter, arrayField, identifierField) {
86
+ if (`${arrayField}.${identifierField}` in originalFilter) return originalFilter;
87
+ return {
88
+ ...originalFilter,
89
+ [arrayField]: {
90
+ $exists: true,
91
+ $ne: []
92
+ }
93
+ };
94
+ }
95
+ /**
96
+ * Transforms update operation to use arrayFilters placeholder.
97
+ *
98
+ * @param update - Original update operation
99
+ * @param arrayField - Array field path
100
+ * @returns Transformed update operation
101
+ */
102
+ transformUpdateForArrayFilters(update, arrayField) {
103
+ const transformed = {};
104
+ for (const [operator, fields] of Object.entries(update)) if (typeof fields === "object" && fields !== null) {
105
+ const transformedFields = {};
106
+ for (const [field, value] of Object.entries(fields)) {
107
+ const transformedField = field.replace(`${arrayField}.$`, `${arrayField}.$[elem]`);
108
+ transformedFields[transformedField] = value;
109
+ }
110
+ transformed[operator] = transformedFields;
111
+ }
112
+ return transformed;
113
+ }
114
+ };
115
+
116
+ //#endregion
117
+ export { MongoSyncAdapter };
118
+ //# sourceMappingURL=mongodb-sync-adapter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb-sync-adapter.mjs","names":[],"sources":["../../../../../../../@warlock.js/cascade/src/drivers/mongodb/mongodb-sync-adapter.ts"],"sourcesContent":["/**\n * MongoDB-specific sync adapter implementation.\n *\n * @module cascade-next/drivers/mongodb/mongodb-sync-adapter\n */\n\nimport type { SyncAdapterContract, SyncInstruction } from \"../../contracts/sync-adapter.contract\";\nimport type { MongoDbDriver } from \"./mongodb-driver\";\n\n/**\n * MongoDB implementation of the sync adapter.\n * Handles array updates using positional operators and arrayFilters.\n * Automatically participates in active transactions via the driver's session context.\n */\nexport class MongoSyncAdapter implements SyncAdapterContract {\n private readonly driver: MongoDbDriver;\n\n /**\n * Creates a new MongoDB sync adapter.\n *\n * @param driver - The MongoDB driver instance (provides session-aware operations)\n */\n public constructor(driver: MongoDbDriver) {\n this.driver = driver;\n }\n\n /**\n * Executes a batch of sync instructions.\n *\n * @param instructions - Array of sync instructions\n * @returns Total number of documents affected\n */\n public async executeBatch(instructions: SyncInstruction[]): Promise<number> {\n let totalAffected = 0;\n\n for (const instruction of instructions) {\n const affected = instruction.isArrayUpdate\n ? await this.executeArrayUpdate(instruction)\n : await this.executeOne(instruction);\n\n totalAffected += affected;\n }\n\n return totalAffected;\n }\n\n /**\n * Executes a single sync instruction.\n * Uses the driver's updateMany to automatically participate in active transactions.\n *\n * @param instruction - The sync instruction\n * @returns Number of documents affected\n */\n public async executeOne(instruction: SyncInstruction): Promise<number> {\n const result = await this.driver.updateMany(\n instruction.targetTable,\n instruction.filter,\n instruction.update,\n );\n\n return result.modifiedCount;\n }\n\n /**\n * Executes an array update using MongoDB positional operators.\n * Uses the driver's updateMany to automatically participate in active transactions.\n *\n * @param instruction - The sync instruction with array info\n * @returns Number of documents affected\n */\n public async executeArrayUpdate(instruction: SyncInstruction): Promise<number> {\n if (!instruction.arrayField || !instruction.identifierField) {\n throw new Error(\"Array update requires arrayField and identifierField to be specified\");\n }\n\n // Strategy 1: Try positional operator $ (simpler, faster)\n // Works when filter already identifies the array element\n if (this.canUsePositionalOperator(instruction)) {\n const result = await this.driver.updateMany(\n instruction.targetTable,\n instruction.filter,\n instruction.update,\n );\n return result.modifiedCount;\n }\n\n // Strategy 2: Use arrayFilters (more flexible)\n // Works for any array update scenario\n return await this.executeWithArrayFilters(instruction);\n }\n\n /**\n * Checks if positional operator $ can be used.\n * Requires filter to already match the array element.\n *\n * @param instruction - The sync instruction\n * @returns True if positional operator can be used\n */\n private canUsePositionalOperator(instruction: SyncInstruction): boolean {\n // Check if filter already includes array element match\n const arrayElementFilter = `${instruction.arrayField}.${instruction.identifierField}`;\n return arrayElementFilter in instruction.filter;\n }\n\n /**\n * Executes array update using arrayFilters.\n * Uses the driver's updateMany with arrayFilters option to participate in transactions.\n *\n * @param instruction - The sync instruction\n * @returns Number of documents affected\n */\n private async executeWithArrayFilters(instruction: SyncInstruction): Promise<number> {\n // Build arrayFilters to match array elements\n const arrayFilters = [\n {\n [`elem.${instruction.identifierField}`]: instruction.identifierValue,\n },\n ];\n\n // Transform update to use array filter placeholder\n const transformedUpdate = this.transformUpdateForArrayFilters(\n instruction.update,\n instruction.arrayField!,\n );\n\n // Build optimized filter to reduce documents scanned\n const optimizedFilter = this.buildOptimizedFilter(\n instruction.filter,\n instruction.arrayField!,\n instruction.identifierField!,\n );\n\n // Use driver's updateMany (session-aware) with arrayFilters\n const result = await this.driver.updateMany(\n instruction.targetTable,\n optimizedFilter,\n transformedUpdate,\n { arrayFilters },\n );\n\n return result.modifiedCount;\n }\n\n /**\n * Builds an optimized filter to reduce the number of documents scanned.\n * Adds array existence check when filter doesn't already match array elements.\n *\n * @param originalFilter - The original filter from the instruction\n * @param arrayField - The array field path\n * @param identifierField - The identifier field within array elements\n * @returns Optimized filter\n */\n private buildOptimizedFilter(\n originalFilter: Record<string, unknown>,\n arrayField: string,\n identifierField: string,\n ): Record<string, unknown> {\n // If filter already has array element match, use it as-is\n const arrayElementFilter = `${arrayField}.${identifierField}`;\n if (arrayElementFilter in originalFilter) {\n return originalFilter;\n }\n\n // Otherwise, add array existence check to avoid full collection scan\n return {\n ...originalFilter,\n [arrayField]: { $exists: true, $ne: [] }, // Array exists and not empty\n };\n }\n\n /**\n * Transforms update operation to use arrayFilters placeholder.\n *\n * @param update - Original update operation\n * @param arrayField - Array field path\n * @returns Transformed update operation\n */\n private transformUpdateForArrayFilters(\n update: Record<string, unknown>,\n arrayField: string,\n ): Record<string, unknown> {\n const transformed: Record<string, unknown> = {};\n\n for (const [operator, fields] of Object.entries(update)) {\n if (typeof fields === \"object\" && fields !== null) {\n const transformedFields: Record<string, unknown> = {};\n\n for (const [field, value] of Object.entries(fields)) {\n // Replace positional $ with arrayFilters placeholder $[elem]\n const transformedField = field.replace(`${arrayField}.$`, `${arrayField}.$[elem]`);\n transformedFields[transformedField] = value;\n }\n\n transformed[operator] = transformedFields;\n }\n }\n\n return transformed;\n }\n}\n"],"mappings":";;;;;;AAcA,IAAa,mBAAb,MAA6D;CAC3D,AAAiB;;;;;;CAOjB,AAAO,YAAY,QAAuB;EACxC,KAAK,SAAS;CAChB;;;;;;;CAQA,MAAa,aAAa,cAAkD;EAC1E,IAAI,gBAAgB;EAEpB,KAAK,MAAM,eAAe,cAAc;GACtC,MAAM,WAAW,YAAY,gBACzB,MAAM,KAAK,mBAAmB,WAAW,IACzC,MAAM,KAAK,WAAW,WAAW;GAErC,iBAAiB;EACnB;EAEA,OAAO;CACT;;;;;;;;CASA,MAAa,WAAW,aAA+C;EAOrE,QAAO,MANc,KAAK,OAAO,WAC/B,YAAY,aACZ,YAAY,QACZ,YAAY,MACd,GAEc;CAChB;;;;;;;;CASA,MAAa,mBAAmB,aAA+C;EAC7E,IAAI,CAAC,YAAY,cAAc,CAAC,YAAY,iBAC1C,MAAM,IAAI,MAAM,sEAAsE;EAKxF,IAAI,KAAK,yBAAyB,WAAW,GAM3C,QAAO,MALc,KAAK,OAAO,WAC/B,YAAY,aACZ,YAAY,QACZ,YAAY,MACd,GACc;EAKhB,OAAO,MAAM,KAAK,wBAAwB,WAAW;CACvD;;;;;;;;CASA,AAAQ,yBAAyB,aAAuC;EAGtE,OAAO,GADuB,YAAY,WAAW,GAAG,YAAY,qBACvC,YAAY;CAC3C;;;;;;;;CASA,MAAc,wBAAwB,aAA+C;EAEnF,MAAM,eAAe,CACnB,GACG,QAAQ,YAAY,oBAAoB,YAAY,gBACvD,CACF;EAGA,MAAM,oBAAoB,KAAK,+BAC7B,YAAY,QACZ,YAAY,UACd;EAGA,MAAM,kBAAkB,KAAK,qBAC3B,YAAY,QACZ,YAAY,YACZ,YAAY,eACd;EAUA,QAAO,MAPc,KAAK,OAAO,WAC/B,YAAY,aACZ,iBACA,mBACA,EAAE,aAAa,CACjB,GAEc;CAChB;;;;;;;;;;CAWA,AAAQ,qBACN,gBACA,YACA,iBACyB;EAGzB,IAAI,GAD0B,WAAW,GAAG,qBAClB,gBACxB,OAAO;EAIT,OAAO;GACL,GAAG;IACF,aAAa;IAAE,SAAS;IAAM,KAAK,CAAC;GAAE;EACzC;CACF;;;;;;;;CASA,AAAQ,+BACN,QACA,YACyB;EACzB,MAAM,cAAuC,CAAC;EAE9C,KAAK,MAAM,CAAC,UAAU,WAAW,OAAO,QAAQ,MAAM,GACpD,IAAI,OAAO,WAAW,YAAY,WAAW,MAAM;GACjD,MAAM,oBAA6C,CAAC;GAEpD,KAAK,MAAM,CAAC,OAAO,UAAU,OAAO,QAAQ,MAAM,GAAG;IAEnD,MAAM,mBAAmB,MAAM,QAAQ,GAAG,WAAW,KAAK,GAAG,WAAW,SAAS;IACjF,kBAAkB,oBAAoB;GACxC;GAEA,YAAY,YAAY;EAC1B;EAGF,OAAO;CACT;AACF"}
@@ -0,0 +1,43 @@
1
+ import { TransactionOptions } from "mongodb";
2
+
3
+ //#region ../../@warlock.js/cascade/src/drivers/mongodb/types.d.ts
4
+ /**
5
+ * MongoDB pipeline stage names.
6
+ */
7
+ type PipelineStage = "$match" | "$project" | "$sort" | "$group" | "$lookup" | "$limit" | "$skip" | "$unwind" | "$addFields" | "$setWindowFields" | "$vectorSearch";
8
+ /**
9
+ * Represents a single operation in the query builder chain.
10
+ */
11
+ type Operation = {
12
+ /** The MongoDB aggregation stage this operation belongs to */stage: PipelineStage; /** Whether this operation can be merged with other operations of the same stage */
13
+ mergeable: boolean; /** The operation type (for processing logic) */
14
+ type: string; /** The operation data */
15
+ data: any;
16
+ };
17
+ /**
18
+ * MongoDB driver-specific options.
19
+ *
20
+ * These are cascade-next specific configurations for the MongoDB driver,
21
+ * not native MongoDB client options.
22
+ */
23
+ type MongoDriverOptions = {
24
+ /**
25
+ * Enable auto-generation of numeric IDs.
26
+ * When enabled, creates a counter collection for managing sequential IDs.
27
+ * @default false
28
+ */
29
+ autoGenerateId?: boolean;
30
+ /**
31
+ * Counter collection name for auto-generated IDs.
32
+ * @default "counters"
33
+ */
34
+ counterCollection?: string;
35
+ /**
36
+ * Transaction options for this driver.
37
+ * Applied to all transactions unless overridden.
38
+ */
39
+ transactionOptions?: TransactionOptions;
40
+ };
41
+ //#endregion
42
+ export { MongoDriverOptions, Operation, PipelineStage };
43
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../../../../../@warlock.js/cascade/src/drivers/mongodb/types.ts"],"mappings":";;;;;AAKA;KAAY,aAAA;;;AAAa;KAiBb,SAAA;EAAS,8DAEnB,KAAA,EAAO,aAAa,EAAA;EAEpB,SAAA,WAFO;EAIP,IAAA;EAEA,IAAA;AAAA;AAAI;AASN;;;;;AATM,KASM,kBAAA;EAkBV;;;AAAuC;;EAZvC,cAAA;;;;;EAMA,iBAAA;;;;;EAMA,kBAAA,GAAqB,kBAAkB;AAAA"}
@@ -0,0 +1,8 @@
1
+ import { PostgresDialect } from "./postgres-dialect.mjs";
2
+ import { PostgresConnectionConfig, PostgresCopyOptions, PostgresIsolationLevel, PostgresNotification, PostgresOperation, PostgresPoolConfig, PostgresQueryResult, PostgresTransactionOptions, PostgresWhereClause } from "./types.mjs";
3
+ import { PostgresDriver } from "./postgres-driver.mjs";
4
+ import { PostgresBlueprint } from "./postgres-blueprint.mjs";
5
+ import { PostgresMigrationDriver } from "./postgres-migration-driver.mjs";
6
+ import { PostgresQueryBuilder } from "./postgres-query-builder.mjs";
7
+ import { PostgresOperationType, PostgresParserOperation, PostgresParserOptions, PostgresQueryParser } from "./postgres-query-parser.mjs";
8
+ import { PostgresSyncAdapter } from "./postgres-sync-adapter.mjs";
@@ -0,0 +1,9 @@
1
+ import { PostgresBlueprint } from "./postgres-blueprint.mjs";
2
+ import { PostgresDialect } from "./postgres-dialect.mjs";
3
+ import { PostgresMigrationDriver } from "./postgres-migration-driver.mjs";
4
+ import { PostgresQueryParser } from "./postgres-query-parser.mjs";
5
+ import { PostgresQueryBuilder } from "./postgres-query-builder.mjs";
6
+ import { PostgresSyncAdapter } from "./postgres-sync-adapter.mjs";
7
+ import { PostgresDriver } from "./postgres-driver.mjs";
8
+
9
+ export { };
@@ -0,0 +1,60 @@
1
+ import { DriverBlueprintContract, TableIndexInformation } from "../../contracts/driver-blueprint.contract.mjs";
2
+ import { PostgresDriver } from "./postgres-driver.mjs";
3
+
4
+ //#region ../../@warlock.js/cascade/src/drivers/postgres/postgres-blueprint.d.ts
5
+ /**
6
+ * PostgreSQL Blueprint.
7
+ *
8
+ * Provides methods for introspecting the database schema
9
+ * via PostgreSQL's information_schema and pg_catalog.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const blueprint = driver.blueprint;
14
+ *
15
+ * // Get all tables
16
+ * const tables = await blueprint.listTables();
17
+ *
18
+ * // Get columns for a table
19
+ * const columns = await blueprint.listColumns('users');
20
+ * ```
21
+ */
22
+ declare class PostgresBlueprint implements DriverBlueprintContract {
23
+ private readonly driver;
24
+ /**
25
+ * Create a new blueprint.
26
+ *
27
+ * @param driver - The PostgreSQL driver instance
28
+ */
29
+ constructor(driver: PostgresDriver);
30
+ /**
31
+ * Get all table names in the database.
32
+ *
33
+ * @returns Array of table names
34
+ */
35
+ listTables(): Promise<string[]>;
36
+ /**
37
+ * Get all indexes for a table.
38
+ *
39
+ * @param table - Table name
40
+ * @returns Array of index information
41
+ */
42
+ listIndexes(table: string): Promise<TableIndexInformation[]>;
43
+ /**
44
+ * Get all column names for a table.
45
+ *
46
+ * @param table - Table name
47
+ * @returns Array of column names
48
+ */
49
+ listColumns(table: string): Promise<string[]>;
50
+ /**
51
+ * Check if a table exists.
52
+ *
53
+ * @param table - Table name
54
+ * @returns Whether the table exists
55
+ */
56
+ tableExists(table: string): Promise<boolean>;
57
+ }
58
+ //#endregion
59
+ export { PostgresBlueprint };
60
+ //# sourceMappingURL=postgres-blueprint.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-blueprint.d.mts","names":[],"sources":["../../../../../../../@warlock.js/cascade/src/drivers/postgres/postgres-blueprint.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;cAgCa,iBAAA,YAA6B,uBAAA;EAAA,iBAMJ,MAAA;EA6EK;;;;;cA7EL,MAAA,EAAQ,cAAA;;;;;;EAO/B,UAAA,CAAA,GAAc,OAAA;;;;;;;EAkBd,WAAA,CAAY,KAAA,WAAgB,OAAA,CAAQ,qBAAA;;;;;;;EAoDpC,WAAA,CAAY,KAAA,WAAgB,OAAA;;;;;;;EAmB5B,WAAA,CAAY,KAAA,WAAgB,OAAA;AAAA"}
@@ -0,0 +1,105 @@
1
+ //#region ../../@warlock.js/cascade/src/drivers/postgres/postgres-blueprint.ts
2
+ /**
3
+ * PostgreSQL Blueprint.
4
+ *
5
+ * Provides methods for introspecting the database schema
6
+ * via PostgreSQL's information_schema and pg_catalog.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * const blueprint = driver.blueprint;
11
+ *
12
+ * // Get all tables
13
+ * const tables = await blueprint.listTables();
14
+ *
15
+ * // Get columns for a table
16
+ * const columns = await blueprint.listColumns('users');
17
+ * ```
18
+ */
19
+ var PostgresBlueprint = class {
20
+ driver;
21
+ /**
22
+ * Create a new blueprint.
23
+ *
24
+ * @param driver - The PostgreSQL driver instance
25
+ */
26
+ constructor(driver) {
27
+ this.driver = driver;
28
+ }
29
+ /**
30
+ * Get all table names in the database.
31
+ *
32
+ * @returns Array of table names
33
+ */
34
+ async listTables() {
35
+ return (await this.driver.query(`SELECT table_name
36
+ FROM information_schema.tables
37
+ WHERE table_schema = 'public'
38
+ AND table_type = 'BASE TABLE'
39
+ ORDER BY table_name`)).rows.map((row) => row.table_name);
40
+ }
41
+ /**
42
+ * Get all indexes for a table.
43
+ *
44
+ * @param table - Table name
45
+ * @returns Array of index information
46
+ */
47
+ async listIndexes(table) {
48
+ return (await this.driver.query(`SELECT indexname, indexdef
49
+ FROM pg_indexes
50
+ WHERE schemaname = 'public'
51
+ AND tablename = $1`, [table])).rows.map((row) => {
52
+ const isUnique = row.indexdef.includes("UNIQUE");
53
+ const isPrimary = row.indexname.endsWith("_pkey");
54
+ const columnsMatch = row.indexdef.match(/\(([^)]+)\)/);
55
+ const columns = columnsMatch ? columnsMatch[1].split(",").map((c) => c.trim().replace(/"/g, "")) : [];
56
+ let type = "btree";
57
+ if (row.indexdef.includes("USING GIN")) type = "gin";
58
+ else if (row.indexdef.includes("USING GIST")) type = "gist";
59
+ else if (row.indexdef.includes("USING HASH")) type = "hash";
60
+ else if (row.indexdef.includes("USING ivfflat")) type = "ivfflat";
61
+ const isPartial = row.indexdef.includes("WHERE");
62
+ return {
63
+ name: row.indexname,
64
+ columns,
65
+ type,
66
+ unique: isUnique || isPrimary,
67
+ partial: isPartial,
68
+ options: {
69
+ primary: isPrimary,
70
+ definition: row.indexdef
71
+ }
72
+ };
73
+ });
74
+ }
75
+ /**
76
+ * Get all column names for a table.
77
+ *
78
+ * @param table - Table name
79
+ * @returns Array of column names
80
+ */
81
+ async listColumns(table) {
82
+ return (await this.driver.query(`SELECT column_name
83
+ FROM information_schema.columns
84
+ WHERE table_schema = 'public'
85
+ AND table_name = $1
86
+ ORDER BY ordinal_position`, [table])).rows.map((row) => row.column_name);
87
+ }
88
+ /**
89
+ * Check if a table exists.
90
+ *
91
+ * @param table - Table name
92
+ * @returns Whether the table exists
93
+ */
94
+ async tableExists(table) {
95
+ return (await this.driver.query(`SELECT EXISTS (
96
+ SELECT FROM information_schema.tables
97
+ WHERE table_schema = 'public'
98
+ AND table_name = $1
99
+ )`, [table])).rows[0]?.exists ?? false;
100
+ }
101
+ };
102
+
103
+ //#endregion
104
+ export { PostgresBlueprint };
105
+ //# sourceMappingURL=postgres-blueprint.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-blueprint.mjs","names":[],"sources":["../../../../../../../@warlock.js/cascade/src/drivers/postgres/postgres-blueprint.ts"],"sourcesContent":["/**\n * PostgreSQL Blueprint\n *\n * Implements the DriverBlueprintContract for querying PostgreSQL\n * information schema metadata.\n *\n * @module cascade/drivers/postgres\n */\n\nimport type {\n DriverBlueprintContract,\n TableIndexInformation,\n} from \"../../contracts/driver-blueprint.contract\";\nimport type { PostgresDriver } from \"./postgres-driver\";\n\n/**\n * PostgreSQL Blueprint.\n *\n * Provides methods for introspecting the database schema\n * via PostgreSQL's information_schema and pg_catalog.\n *\n * @example\n * ```typescript\n * const blueprint = driver.blueprint;\n *\n * // Get all tables\n * const tables = await blueprint.listTables();\n *\n * // Get columns for a table\n * const columns = await blueprint.listColumns('users');\n * ```\n */\nexport class PostgresBlueprint implements DriverBlueprintContract {\n /**\n * Create a new blueprint.\n *\n * @param driver - The PostgreSQL driver instance\n */\n public constructor(private readonly driver: PostgresDriver) {}\n\n /**\n * Get all table names in the database.\n *\n * @returns Array of table names\n */\n public async listTables(): Promise<string[]> {\n const result = await this.driver.query<{ table_name: string }>(\n `SELECT table_name \n FROM information_schema.tables \n WHERE table_schema = 'public' \n AND table_type = 'BASE TABLE'\n ORDER BY table_name`,\n );\n\n return result.rows.map((row) => row.table_name);\n }\n\n /**\n * Get all indexes for a table.\n *\n * @param table - Table name\n * @returns Array of index information\n */\n public async listIndexes(table: string): Promise<TableIndexInformation[]> {\n const result = await this.driver.query<{\n indexname: string;\n indexdef: string;\n }>(\n `SELECT indexname, indexdef\n FROM pg_indexes\n WHERE schemaname = 'public'\n AND tablename = $1`,\n [table],\n );\n\n return result.rows.map((row) => {\n const isUnique = row.indexdef.includes(\"UNIQUE\");\n const isPrimary = row.indexname.endsWith(\"_pkey\");\n\n // Extract columns from indexdef\n const columnsMatch = row.indexdef.match(/\\(([^)]+)\\)/);\n const columns = columnsMatch\n ? columnsMatch[1].split(\",\").map((c) => c.trim().replace(/\"/g, \"\"))\n : [];\n\n // Determine index type\n let type = \"btree\"; // default\n if (row.indexdef.includes(\"USING GIN\")) type = \"gin\";\n else if (row.indexdef.includes(\"USING GIST\")) type = \"gist\";\n else if (row.indexdef.includes(\"USING HASH\")) type = \"hash\";\n else if (row.indexdef.includes(\"USING ivfflat\")) type = \"ivfflat\";\n\n // Check for partial index\n const isPartial = row.indexdef.includes(\"WHERE\");\n\n return {\n name: row.indexname,\n columns,\n type,\n unique: isUnique || isPrimary,\n partial: isPartial,\n options: {\n primary: isPrimary,\n definition: row.indexdef,\n },\n };\n });\n }\n\n /**\n * Get all column names for a table.\n *\n * @param table - Table name\n * @returns Array of column names\n */\n public async listColumns(table: string): Promise<string[]> {\n const result = await this.driver.query<{ column_name: string }>(\n `SELECT column_name\n FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = $1\n ORDER BY ordinal_position`,\n [table],\n );\n\n return result.rows.map((row) => row.column_name);\n }\n\n /**\n * Check if a table exists.\n *\n * @param table - Table name\n * @returns Whether the table exists\n */\n public async tableExists(table: string): Promise<boolean> {\n const result = await this.driver.query<{ exists: boolean }>(\n `SELECT EXISTS (\n SELECT FROM information_schema.tables \n WHERE table_schema = 'public' \n AND table_name = $1\n )`,\n [table],\n );\n\n return result.rows[0]?.exists ?? false;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAgCA,IAAa,oBAAb,MAAkE;CAM5B;;;;;;CAApC,AAAO,YAAY,AAAiB,QAAwB;EAAxB;CAAyB;;;;;;CAO7D,MAAa,aAAgC;EAS3C,QAAO,MARc,KAAK,OAAO,MAC/B;;;;2BAKF,GAEc,KAAK,KAAK,QAAQ,IAAI,UAAU;CAChD;;;;;;;CAQA,MAAa,YAAY,OAAiD;EAYxE,QAAO,MAXc,KAAK,OAAO,MAI/B;;;4BAIA,CAAC,KAAK,CACR,GAEc,KAAK,KAAK,QAAQ;GAC9B,MAAM,WAAW,IAAI,SAAS,SAAS,QAAQ;GAC/C,MAAM,YAAY,IAAI,UAAU,SAAS,OAAO;GAGhD,MAAM,eAAe,IAAI,SAAS,MAAM,aAAa;GACrD,MAAM,UAAU,eACZ,aAAa,GAAG,MAAM,GAAG,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,MAAM,EAAE,CAAC,IAChE,CAAC;GAGL,IAAI,OAAO;GACX,IAAI,IAAI,SAAS,SAAS,WAAW,GAAG,OAAO;QAC1C,IAAI,IAAI,SAAS,SAAS,YAAY,GAAG,OAAO;QAChD,IAAI,IAAI,SAAS,SAAS,YAAY,GAAG,OAAO;QAChD,IAAI,IAAI,SAAS,SAAS,eAAe,GAAG,OAAO;GAGxD,MAAM,YAAY,IAAI,SAAS,SAAS,OAAO;GAE/C,OAAO;IACL,MAAM,IAAI;IACV;IACA;IACA,QAAQ,YAAY;IACpB,SAAS;IACT,SAAS;KACP,SAAS;KACT,YAAY,IAAI;IAClB;GACF;EACF,CAAC;CACH;;;;;;;CAQA,MAAa,YAAY,OAAkC;EAUzD,QAAO,MATc,KAAK,OAAO,MAC/B;;;;mCAKA,CAAC,KAAK,CACR,GAEc,KAAK,KAAK,QAAQ,IAAI,WAAW;CACjD;;;;;;;CAQA,MAAa,YAAY,OAAiC;EAUxD,QAAO,MATc,KAAK,OAAO,MAC/B;;;;UAKA,CAAC,KAAK,CACR,GAEc,KAAK,IAAI,UAAU;CACnC;AACF"}