@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,1778 @@
1
+ import { DeleteStrategy, StrictMode } from "../types.mjs";
2
+ import { DatabaseDirtyTracker } from "../database-dirty-tracker.mjs";
3
+ import { ChildModel, GlobalScopeDefinition, GlobalScopeOptions, LocalScopeCallback, ModelSchema, ScopeTiming } from "./model.types.mjs";
4
+ import { ModelEventListener, ModelEventName, ModelEvents } from "../events/model-events.mjs";
5
+ import { LoadedRelationResult, PivotData, PivotIds, RelationDefinition } from "../relations/types.mjs";
6
+ import { PivotOperations } from "../relations/pivot-operations.mjs";
7
+ import { ModelSnapshot } from "../relations/relation-hydrator.mjs";
8
+ import { ModelSyncOperationContract } from "../sync/types.mjs";
9
+ import { PaginationOptions, PaginationResult, QueryBuilderContract, WhereCallback, WhereObject, WhereOperator } from "../contracts/query-builder.contract.mjs";
10
+ import { DriverContract, UpdateOperations } from "../contracts/database-driver.contract.mjs";
11
+ import { RemoverResult } from "../contracts/database-remover.contract.mjs";
12
+ import { WriterOptions } from "../contracts/database-writer.contract.mjs";
13
+ import { DataSource } from "../data-source/data-source.mjs";
14
+ import { GenericObject } from "@mongez/reinforcements";
15
+ import { ObjectValidator } from "@warlock.js/seal";
16
+
17
+ //#region ../../@warlock.js/cascade/src/model/model.d.ts
18
+ /**
19
+ * Base class that powers all Cascade models.
20
+ *
21
+ * Provides:
22
+ * - Type-safe value accessors with dot-notation support (get, set, has, unset, merge)
23
+ * - Automatic dirty tracking for efficient partial updates
24
+ * - Lifecycle event hooks (saving, created, deleting, etc.)
25
+ * - Integration with the data-source registry for multi-database support
26
+ * - Support for both per-model and global event listeners
27
+ *
28
+ * @template TSchema - The shape of the model's underlying data
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * interface UserSchema {
33
+ * id: number;
34
+ * name: string;
35
+ * email: string;
36
+ * }
37
+ *
38
+ * class User extends Model<UserSchema> {
39
+ * public static table = "users";
40
+ * }
41
+ *
42
+ * const user = new User({ name: "Alice" });
43
+ * user.set("email", "alice@example.com");
44
+ * console.log(user.hasChanges()); // true
45
+ * ```
46
+ */
47
+ declare abstract class Model<TSchema extends ModelSchema = ModelSchema> {
48
+ /**
49
+ * The database table or collection name associated with this model.
50
+ *
51
+ * Must be defined by each concrete model subclass.
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * class User extends Model {
56
+ * public static table = "users";
57
+ * }
58
+ * ```
59
+ */
60
+ static table: string;
61
+ /**
62
+ * Resource for this model.
63
+ * It is a class that holds a toJSON function
64
+ * Called when the model is being converted to JSON (by calling toJSON or JSON.stringify(model))
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * class User extends Model {
69
+ * public static resource = UserResource;
70
+ * }
71
+ * ```
72
+ */
73
+ static resource?: any;
74
+ /**
75
+ * Resource columns
76
+ * Define what columns should be sent to the resource (if any) when converting to JSON
77
+ */
78
+ static resourceColumns?: string[];
79
+ /**
80
+ * JSON keys for this model.
81
+ * This could be used if resource is not passed
82
+ * It will select only these keys from the model
83
+ * @example
84
+ * ```typescript
85
+ * class User extends Model {
86
+ * public static toJsonColumns = ["id", "name"];
87
+ * }
88
+ * ```
89
+ */
90
+ static toJsonColumns?: string[];
91
+ /**
92
+ * Data source reference for this model.
93
+ *
94
+ * Can be:
95
+ * - A string name registered in the data-source registry
96
+ * - A DataSource instance
97
+ * - Undefined (falls back to the default data source)
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * class User extends Model {
102
+ * public static dataSource = "primary";
103
+ * }
104
+ * ```
105
+ */
106
+ static dataSource?: string | DataSource;
107
+ /**
108
+ * Query builder class
109
+ */
110
+ static builder?: new (...args: any[]) => QueryBuilderContract<Model>;
111
+ /**
112
+ * Primary key field name used to identify records.
113
+ *
114
+ * @default "id"
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * class User extends Model {
119
+ * public static primaryKey = "_id"; // MongoDB
120
+ * }
121
+ *
122
+ * class Product extends Model {
123
+ * public static primaryKey = "id"; // SQL
124
+ * }
125
+ * ```
126
+ */
127
+ static primaryKey: string;
128
+ /**
129
+ * Embeded fields when document is Being embeded
130
+ */
131
+ static embed?: string[];
132
+ /**
133
+ * Validation and casting schema using @warlock.js/seal.
134
+ *
135
+ * Defines validation rules and data transformations for the model.
136
+ * Used automatically during save operations.
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * import { v } from "@warlock.js/seal";
141
+ *
142
+ * class User extends Model {
143
+ * public static schema = v.object({
144
+ * name: v.string().required().trim(),
145
+ * age: v.number().min(0).max(120),
146
+ * email: v.string().email().required().toLowerCase(),
147
+ * createdAt: v.date().default(() => new Date()),
148
+ * });
149
+ * }
150
+ * ```
151
+ */
152
+ static schema?: ObjectValidator;
153
+ /**
154
+ * Strict mode behavior for unknown fields.
155
+ *
156
+ * - `"strip"`: Remove unknown fields silently (default, recommended for APIs)
157
+ * - `"fail"`: Throw validation error on unknown fields (strict validation)
158
+ * - `"allow"`: Allow unknown fields to pass through (permissive)
159
+ *
160
+ * @default "strip"
161
+ *
162
+ * @example
163
+ * ```typescript
164
+ * import { Model, type StrictMode } from "@warlock.js/cascade";
165
+ *
166
+ * class User extends Model {
167
+ * public static strictMode: StrictMode = "fail"; // Throw on unknown fields
168
+ * }
169
+ *
170
+ * const user = new User({ name: "Alice", unknownField: "value" });
171
+ * await user.save(); // DatabaseWriterValidationError: unknown field
172
+ * ```
173
+ */
174
+ static strictMode: StrictMode;
175
+ /**
176
+ * Auto-generate incremental `id` field on insert (NoSQL only).
177
+ *
178
+ * When enabled, the ID generator creates a sequential integer ID
179
+ * separate from the database's native ID (_id for MongoDB).
180
+ *
181
+ * **Note:** SQL databases use native AUTO_INCREMENT and don't need this.
182
+ *
183
+ * @default true
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * class User extends Model {
188
+ * public static autoGenerateId = true;
189
+ * }
190
+ *
191
+ * const user = new User({ name: "Alice" });
192
+ * await user.save();
193
+ * console.log(user.get("_id")); // ObjectId("...") - MongoDB
194
+ * console.log(user.get("id")); // 1 - Generated
195
+ * ```
196
+ */
197
+ static autoGenerateId: boolean;
198
+ /**
199
+ * Initial ID value for the first record.
200
+ *
201
+ * If not set, defaults to 1 or uses `randomInitialId`.
202
+ *
203
+ * @example
204
+ * ```typescript
205
+ * class User extends Model {
206
+ * public static initialId = 1000; // Start from 1000
207
+ * }
208
+ * ```
209
+ */
210
+ static initialId?: number;
211
+ /**
212
+ * Randomly generate the initial ID.
213
+ *
214
+ * Can be:
215
+ * - `true`: Generate random ID between 10000-499999
216
+ * - Function: Custom random ID generator
217
+ * - `false`: Use `initialId` or default to 1
218
+ *
219
+ * @default false
220
+ *
221
+ * @example
222
+ * ```typescript
223
+ * class User extends Model {
224
+ * public static randomInitialId = true; // Random 10000-499999
225
+ * }
226
+ *
227
+ * class Product extends Model {
228
+ * public static randomInitialId = () => Math.floor(Math.random() * 1000000);
229
+ * }
230
+ * ```
231
+ */
232
+ static randomInitialId?: boolean | (() => number);
233
+ /**
234
+ * Amount to increment ID by for each new record.
235
+ *
236
+ * If not set, defaults to 1 or uses `randomIncrement`.
237
+ *
238
+ * @default 1
239
+ *
240
+ * @example
241
+ * ```typescript
242
+ * class User extends Model {
243
+ * public static incrementIdBy = 5; // Increment by 5
244
+ * }
245
+ * ```
246
+ */
247
+ static incrementIdBy?: number;
248
+ /**
249
+ * Randomly generate the increment amount.
250
+ *
251
+ * Can be:
252
+ * - `true`: Generate random increment between 1-10
253
+ * - Function: Custom random increment generator
254
+ * - `false`: Use `incrementIdBy` or default to 1
255
+ *
256
+ * @default false
257
+ *
258
+ * @example
259
+ * ```typescript
260
+ * class User extends Model {
261
+ * public static randomIncrement = true; // Random 1-10
262
+ * }
263
+ *
264
+ * class Product extends Model {
265
+ * public static randomIncrement = () => Math.floor(Math.random() * 100);
266
+ * }
267
+ * ```
268
+ */
269
+ static randomIncrement?: boolean | (() => number);
270
+ /**
271
+ * Created at column name.
272
+ */
273
+ static createdAtColumn?: string | false;
274
+ /**
275
+ * Updated at column name.
276
+ */
277
+ static updatedAtColumn?: string | false;
278
+ /**
279
+ * Delete strategy for this model.
280
+ *
281
+ * Controls how models are deleted:
282
+ * - `"trash"` - Moves to trash collection, then deletes
283
+ * - `"permanent"` - Direct deletion (hard delete)
284
+ * - `"soft"` - Sets deletedAt timestamp (soft delete)
285
+ *
286
+ * Can be overridden by destroy() options.
287
+ * Falls back to data source default if not set.
288
+ *
289
+ * @example
290
+ * ```typescript
291
+ * class User extends Model {
292
+ * public static deleteStrategy: DeleteStrategy = "soft";
293
+ * }
294
+ * ```
295
+ */
296
+ static deleteStrategy?: DeleteStrategy;
297
+ /**
298
+ * Column name for soft delete timestamp.
299
+ *
300
+ * Used when delete strategy is "soft".
301
+ *
302
+ * @default "deletedAt"
303
+ *
304
+ * @example
305
+ * ```typescript
306
+ * class User extends Model {
307
+ * public static deletedAtColumn = "archivedAt";
308
+ * }
309
+ * ```
310
+ */
311
+ static deletedAtColumn: string | false;
312
+ /**
313
+ * Trash table/collection name override.
314
+ *
315
+ * If not set, defaults to `{table}Trash` or data source default.
316
+ * Used when delete strategy is "trash".
317
+ *
318
+ * @example
319
+ * ```typescript
320
+ * class User extends Model {
321
+ * public static trashTable = "userRecycleBin";
322
+ * }
323
+ * ```
324
+ */
325
+ static trashTable?: string;
326
+ /**
327
+ * Global scopes that are automatically applied to all queries.
328
+ * These scopes are inherited by child models.
329
+ */
330
+ static globalScopes: Map<string, GlobalScopeDefinition>;
331
+ /**
332
+ * Local scopes that can be manually applied to queries.
333
+ * These are reusable query snippets that developers opt into.
334
+ */
335
+ static localScopes: Map<string, LocalScopeCallback>;
336
+ /**
337
+ * Relation definitions for this model.
338
+ *
339
+ * Define relationships to other models using helper functions:
340
+ * - `hasMany()` - One-to-many (User has many Posts)
341
+ * - `hasOne()` - One-to-one (User has one Profile)
342
+ * - `belongsTo()` - Inverse of hasMany/hasOne (Post belongs to User)
343
+ * - `belongsToMany()` - Many-to-many with pivot table (User has many Roles)
344
+ *
345
+ * @example
346
+ * ```typescript
347
+ * import { hasMany, belongsTo, belongsToMany, hasOne } from "@warlock.js/cascade";
348
+ *
349
+ * class User extends Model {
350
+ * public posts?: Post[]; // Optional: for TypeScript autocomplete
351
+ *
352
+ * static relations = {
353
+ * posts: hasMany("Post"),
354
+ * profile: hasOne("Profile"),
355
+ * organization: belongsTo("Organization"),
356
+ * roles: belongsToMany("Role", { pivot: "user_roles" }),
357
+ * };
358
+ * }
359
+ *
360
+ * // Usage:
361
+ * const users = await User.query().with("posts").get();
362
+ * console.log(users[0].posts); // Post[]
363
+ * ```
364
+ */
365
+ static relations: Readonly<Record<string, RelationDefinition>>;
366
+ /**
367
+ * Flag indicating whether this model instance represents a new (unsaved) record.
368
+ *
369
+ * - `true`: The model has not been persisted to the database yet
370
+ * - `false`: The model represents an existing database record
371
+ *
372
+ * This flag is used by the writer to determine whether to perform an insert or update.
373
+ */
374
+ isNew: boolean;
375
+ /**
376
+ * The raw mutable data backing this model instance.
377
+ *
378
+ * All field accessors (get, set, merge, etc.) operate on this object.
379
+ */
380
+ data: TSchema;
381
+ /**
382
+ * Dirty tracker that monitors changes to the model's data.
383
+ *
384
+ * Tracks:
385
+ * - Which fields have been modified (dirty columns)
386
+ * - Which fields have been removed
387
+ * - Original vs. current values for each dirty field
388
+ *
389
+ * Used by the writer to generate efficient partial update payloads.
390
+ */
391
+ readonly dirtyTracker: DatabaseDirtyTracker;
392
+ /**
393
+ * Model instance events.
394
+ * Allows registering listeners for lifecycle events on this specific instance.
395
+ */
396
+ events: ModelEvents<any>;
397
+ /**
398
+ * Map of loaded relations for this model instance.
399
+ *
400
+ * Populated automatically when using `with()` for eager loading,
401
+ * or when calling `load()` for lazy loading.
402
+ *
403
+ * @example
404
+ * ```typescript
405
+ * const user = await User.query().with("posts").first();
406
+ * console.log(user.loadedRelations.get("posts")); // Post[]
407
+ *
408
+ * // Also accessible as direct properties:
409
+ * console.log(user.posts); // Post[]\n * ```
410
+ */
411
+ loadedRelations: Map<string, any>;
412
+ /**
413
+ * Column name for active status.
414
+ */
415
+ protected isActiveColumn: string;
416
+ /**
417
+ * Constructs a new model instance with optional initial data.
418
+ *
419
+ * Initializes the dirty tracker with a snapshot of the provided data.
420
+ *
421
+ * @param initialData - Partial data to populate the model
422
+ *
423
+ * @example
424
+ * ```typescript
425
+ * const user = new User({ name: "Alice", email: "alice@example.com" });
426
+ * ```
427
+ */
428
+ constructor(initialData?: Partial<TSchema>);
429
+ /**
430
+ * Lazily load one or more relations for this model instance.
431
+ *
432
+ * This method loads relations on-demand after the model has been fetched.
433
+ * The loaded relations are attached directly to the model instance and
434
+ * also stored in `loadedRelations` map.
435
+ *
436
+ * @param relations - Relation name(s) to load
437
+ * @returns This model instance for chaining
438
+ *
439
+ * @example
440
+ * ```typescript
441
+ * const user = await User.first();
442
+ *
443
+ * // Load single relation
444
+ * await user.load("posts");
445
+ * console.log(user.posts); // Post[]
446
+ *
447
+ * // Load multiple relations
448
+ * await user.load("posts", "organization");
449
+ *
450
+ * // Chain with other operations
451
+ * const posts = await user.load("posts").then(() => user.posts);
452
+ * ```
453
+ */
454
+ load(...relations: string[]): Promise<this>;
455
+ /**
456
+ * Check if a relation has been loaded.
457
+ *
458
+ * @param relationName - Name of the relation to check
459
+ * @returns True if the relation has been loaded
460
+ *
461
+ * @example
462
+ * ```typescript
463
+ * const user = await User.first();
464
+ *
465
+ * console.log(user.isLoaded("posts")); // false
466
+ * await user.load("posts");
467
+ * console.log(user.isLoaded("posts")); // true
468
+ * ```
469
+ */
470
+ isLoaded(relationName: string): boolean;
471
+ /**
472
+ * Set relation manually
473
+ *
474
+ * @param relationName
475
+ * @param relationData
476
+ */
477
+ setRelation(relationName: string, relationData: LoadedRelationResult): void;
478
+ /**
479
+ * Get a loaded relation by name.
480
+ *
481
+ * Returns undefined if the relation has not been loaded.
482
+ *
483
+ * @param relationName - Name of the relation to get
484
+ * @returns The loaded relation data, or undefined
485
+ *
486
+ * @example
487
+ * ```typescript
488
+ * const user = await User.query().with("posts").first();
489
+ *
490
+ * const posts = user.getRelation<Post[]>("posts");
491
+ * console.log(posts?.length);
492
+ * ```
493
+ */
494
+ getRelation<TRelation = any>(relationName: string): TRelation | undefined;
495
+ /**
496
+ * Get a model class by its name from the global registry.
497
+ *
498
+ * Models must be decorated with @RegisterModel() to be available in the registry.
499
+ *
500
+ * @param name - The model class name
501
+ * @returns The model class or undefined if not found
502
+ *
503
+ * @example
504
+ * ```typescript
505
+ * const UserModel = Model.getModel("User");
506
+ * if (UserModel) {
507
+ * const user = await UserModel.find(1);
508
+ * }
509
+ * ```
510
+ */
511
+ static getModel(name: string): ChildModel<Model<ModelSchema>> | undefined;
512
+ /**
513
+ * Get all registered models from the global registry.
514
+ *
515
+ * Only models decorated with @RegisterModel() will appear here.
516
+ *
517
+ * @returns A Map of all registered model classes by name
518
+ *
519
+ * @example
520
+ * ```typescript
521
+ * const allModels = Model.getAllModels();
522
+ * for (const [name, ModelClass] of allModels) {
523
+ * console.log(`Found model: ${name} with table: ${ModelClass.table}`);
524
+ * }
525
+ * ```
526
+ */
527
+ static getAllModels(): Map<string, ChildModel<Model<ModelSchema>>>;
528
+ /**
529
+ * Create a sync operation for a single embedded document.
530
+ *
531
+ * When this model is updated, the target model's field
532
+ * will be updated with the embedded data.
533
+ *
534
+ * @param TargetModel - Target model class that receives data
535
+ * @param targetField - Field path in target model
536
+ * @returns Sync operation for chaining configuration
537
+ *
538
+ * @example
539
+ * ```typescript
540
+ * // When Category updates, update Product.category
541
+ * Category.sync(Product, "category");
542
+ * ```
543
+ */
544
+ static sync<TModel extends Model = Model>(this: ChildModel<TModel>, TargetModel: ChildModel<Model>, targetField: string): ModelSyncOperationContract;
545
+ /**
546
+ * Create a sync operation for an array of embedded documents.
547
+ *
548
+ * When this model is updated, the corresponding element
549
+ * in the target model's array field will be updated.
550
+ *
551
+ * @param TargetModel - Target model class that receives data
552
+ * @param targetField - Array field path in target model
553
+ * @returns Sync operation for chaining configuration
554
+ *
555
+ * @example
556
+ * ```typescript
557
+ * // When Tag updates, update Post.tags[i] where tags[i].id matches
558
+ * Tag.syncMany(Post, "tags").identifyBy("id");
559
+ * ```
560
+ */
561
+ static syncMany<TModel extends Model = Model>(this: ChildModel<TModel>, TargetModel: ChildModel<Model>, targetField: string): ModelSyncOperationContract;
562
+ /**
563
+ * Get model id
564
+ */
565
+ get id(): number | string;
566
+ /**
567
+ * String-typed accessor for the model's primary id.
568
+ *
569
+ * The underlying `id` field is `string | number` (MongoDB's ObjectId-as-string
570
+ * vs SQL's auto-increment integer), which forces consumers to write
571
+ * `string | number` everywhere they pass an id around. This getter narrows
572
+ * the contract to `string` so callers can write functions that accept a
573
+ * single id type without leaking the engine difference.
574
+ *
575
+ * The name `uuid` is historical — it does NOT validate or coerce the value
576
+ * to a UUID. It simply returns the id, typed as a string.
577
+ *
578
+ * @example
579
+ * ```typescript
580
+ * function shareLink(modelId: string) { ... }
581
+ * shareLink(user.uuid); // works regardless of whether the underlying id is
582
+ * // a Mongo ObjectId string or a SQL integer
583
+ * ```
584
+ */
585
+ get uuid(): string;
586
+ /**
587
+ * Retrieves a field value from the model's data.
588
+ *
589
+ * Supports both top-level keys and dot-notation paths for nested access.
590
+ *
591
+ * @param field - The field name or dot-notation path (e.g., "address.city")
592
+ * @param defaultValue - Value to return if the field is missing
593
+ * @returns The field value or the default value if not found
594
+ *
595
+ * @example
596
+ * ```typescript
597
+ * user.get("name"); // "Alice"
598
+ * user.get("address.city", "Unknown"); // "Unknown" if address.city is missing
599
+ * ```
600
+ */
601
+ get<TKey extends keyof TSchema & string>(field: TKey): TSchema[TKey];
602
+ get<TKey extends keyof TSchema & string>(field: TKey, defaultValue: TSchema[TKey]): TSchema[TKey];
603
+ get<Type extends unknown = any>(field: string): Type;
604
+ get<Type extends unknown = any>(field: string, defaultValue: Type): Type;
605
+ /**
606
+ * Get only the values of the given fields
607
+ */
608
+ only<TKey extends keyof TSchema & string>(fields: TKey[]): Record<TKey, TSchema[TKey]>;
609
+ only(fields: string[]): Record<string, unknown>;
610
+ /**
611
+ * Get a string value
612
+ */
613
+ string(key: string, defaultValue?: string): string | undefined;
614
+ /**
615
+ * Get a number value
616
+ */
617
+ number(key: string, defaultValue?: number): number | undefined;
618
+ /**
619
+ * Get a boolean value
620
+ */
621
+ boolean(key: string, defaultValue?: boolean): boolean | undefined;
622
+ /**
623
+ * Sets a field value in the model's data and marks it as dirty.
624
+ *
625
+ * Supports both top-level keys and dot-notation paths for nested assignment.
626
+ * Automatically updates the dirty tracker to reflect the change.
627
+ *
628
+ * @param field - The field name or dot-notation path (e.g., "address.city")
629
+ * @param value - The value to assign
630
+ * @returns The model instance for method chaining
631
+ *
632
+ * @example
633
+ * ```typescript
634
+ * user.set("name", "Bob").set("address.city", "NYC");
635
+ * ```
636
+ */
637
+ set<TKey extends keyof TSchema & string>(field: TKey, value: TSchema[TKey]): this;
638
+ set(field: string, value: unknown): this;
639
+ /**
640
+ * Checks whether a field exists in the model's data.
641
+ *
642
+ * Supports both top-level keys and dot-notation paths.
643
+ *
644
+ * @param field - The field name or dot-notation path
645
+ * @returns `true` if the field exists, `false` otherwise
646
+ *
647
+ * @example
648
+ * ```typescript
649
+ * user.has("name"); // true
650
+ * user.has("address.zipCode"); // false
651
+ * ```
652
+ */
653
+ has<TKey extends keyof TSchema & string>(field: TKey): boolean;
654
+ has(field: string): boolean;
655
+ /**
656
+ * Increment the given field by the given amount
657
+ */
658
+ increment<TKey extends keyof TSchema & string>(field: TKey, amount: number): this;
659
+ increment(field: string, amount?: number): this;
660
+ /**
661
+ * Decrement the given field by the given amount
662
+ */
663
+ decrement<TKey extends keyof TSchema & string>(field: TKey, amount: number): this;
664
+ decrement(field: string, amount?: number): this;
665
+ /**
666
+ * Removes one or more fields from the model's data and marks them as removed.
667
+ *
668
+ * Supports both top-level keys and dot-notation paths.
669
+ * Automatically updates the dirty tracker to reflect the removal.
670
+ *
671
+ * @param fields - One or more field names or dot-notation paths to remove
672
+ * @returns The model instance for method chaining
673
+ *
674
+ * @example
675
+ * ```typescript
676
+ * user.unset("tempField", "address.oldZip");
677
+ * ```
678
+ */
679
+ unset(...fields: (keyof TSchema & string)[]): this;
680
+ unset(...fields: string[]): this;
681
+ /**
682
+ * Merges new values into the model's data and marks changed fields as dirty.
683
+ *
684
+ * Performs a deep merge, preserving existing nested structures.
685
+ * Automatically updates the dirty tracker to reflect all changes.
686
+ *
687
+ * @param values - Partial data to merge into the model
688
+ * @returns The model instance for method chaining
689
+ *
690
+ * @example
691
+ * ```typescript
692
+ * user.merge({ name: "Charlie", address: { city: "LA" } });
693
+ * ```
694
+ */
695
+ merge(values: Partial<TSchema>): this;
696
+ merge(values: Record<string, unknown>): this;
697
+ /**
698
+ * Perform atomoic update from current model instance
699
+ * Please note that it would require the id to be existing in the current
700
+ * model instance
701
+ * @returns number of affected records
702
+ */
703
+ atomicUpdate(operations: Record<string, unknown>): Promise<number>;
704
+ /**
705
+ * Perform atomic increment
706
+ * This would issue a query update and update the given field without
707
+ * saving the model
708
+ */
709
+ atomicIncrement<T extends keyof TSchema & string>(field: T, amount?: number): Promise<number>;
710
+ /**
711
+ * Perform atomic decrement
712
+ * This would issue a query update and update the given field without
713
+ * saving the model
714
+ */
715
+ atomicDecrement<T extends keyof TSchema & string>(field: T, amount?: number): Promise<number>;
716
+ /**
717
+ * Determine if current model is active
718
+ */
719
+ get isActive(): boolean;
720
+ /**
721
+ * Get created at date
722
+ */
723
+ get createdAt(): Date | undefined;
724
+ /**
725
+ * Get updated at date
726
+ */
727
+ get updatedAt(): Date | undefined;
728
+ /**
729
+ * Check if current model record is created by the given user model
730
+ */
731
+ isCreatedBy(user: Model | GenericObject): boolean;
732
+ /**
733
+ * Checks whether the model's data has changed since instantiation or last reset.
734
+ *
735
+ * @returns `true` if any fields have been modified or removed, `false` otherwise
736
+ *
737
+ * @example
738
+ * ```typescript
739
+ * const user = new User({ name: "Alice" });
740
+ * user.hasChanges(); // false
741
+ * user.set("name", "Bob");
742
+ * user.hasChanges(); // true
743
+ * ```
744
+ */
745
+ hasChanges(): boolean;
746
+ /**
747
+ * Check if the given column has been modified.
748
+ *
749
+ * @param column - The column name to check
750
+ * @returns `true` if the column has been modified, `false` otherwise
751
+ *
752
+ * @example
753
+ * ```typescript
754
+ * user.set("name", "Bob");
755
+ * user.isDirty("name"); // true
756
+ * ```
757
+ */
758
+ isDirty(column: string): boolean;
759
+ /**
760
+ * Retrieves all dirty columns with their old and new values.
761
+ *
762
+ * @returns A record mapping each dirty column to its previous and current value
763
+ *
764
+ * @example
765
+ * ```typescript
766
+ * user.set("name", "Bob");
767
+ * user.getDirtyColumnsWithValues();
768
+ * // { name: { oldValue: "Alice", newValue: "Bob" } }
769
+ * ```
770
+ */
771
+ getDirtyColumnsWithValues(): Record<string, {
772
+ oldValue: unknown;
773
+ newValue: unknown;
774
+ }>;
775
+ /**
776
+ * Lists all columns that have been removed from the model's data.
777
+ *
778
+ * @returns An array of field names that were present initially but have been unset
779
+ *
780
+ * @example
781
+ * ```typescript
782
+ * user.unset("tempField");
783
+ * user.getRemovedColumns(); // ["tempField"]
784
+ * ```
785
+ */
786
+ getRemovedColumns(): string[];
787
+ /**
788
+ * Lists all columns that have been modified since instantiation or last reset.
789
+ *
790
+ * @returns An array of field names that have changed
791
+ *
792
+ * @example
793
+ * ```typescript
794
+ * user.set("name", "Bob");
795
+ * user.getDirtyColumns(); // ["name"]
796
+ * ```
797
+ */
798
+ getDirtyColumns(): string[];
799
+ /**
800
+ * Emits a lifecycle event to both per-model and global listeners.
801
+ *
802
+ * This method is public so that external services (like the writer) can trigger
803
+ * lifecycle events when appropriate.
804
+ *
805
+ * @param event - The event name (e.g., "saving", "created", "deleting")
806
+ * @param context - Optional context data to pass to listeners
807
+ *
808
+ * @example
809
+ * ```typescript
810
+ * await user.emitEvent("saving");
811
+ * await user.emitEvent("validated", { errors: [] });
812
+ * ```
813
+ */
814
+ emitEvent<TContext = unknown>(event: ModelEventName, context?: TContext): Promise<void>;
815
+ /**
816
+ * Register a listener for a model lifecycle event on this instance.
817
+ *
818
+ * @param event - Event name (e.g., "saving", "updated")
819
+ * @param listener - Callback function
820
+ * @returns Unsubscribe function
821
+ */
822
+ on<TContext = unknown>(event: ModelEventName, listener: ModelEventListener<this, TContext>): () => void;
823
+ /**
824
+ * Register a one-time listener for a model lifecycle event on this instance.
825
+ *
826
+ * @param event - Event name
827
+ * @param listener - Callback function
828
+ * @returns Unsubscribe function
829
+ */
830
+ once<TContext = unknown>(event: ModelEventName, listener: ModelEventListener<this, TContext>): () => void;
831
+ /**
832
+ * Remove a listener from this instance.
833
+ *
834
+ * @param event - Event name
835
+ * @param listener - Callback function to remove
836
+ */
837
+ off<TContext = unknown>(event: ModelEventName, listener: ModelEventListener<this, TContext>): void;
838
+ /**
839
+ * Resolves the data source associated with this model.
840
+ *
841
+ * Resolution order:
842
+ * 1. If `dataSource` is a string, looks it up in the data-source registry
843
+ * 2. If `dataSource` is a DataSource instance, returns it directly
844
+ * 3. Otherwise, returns the default data source from the registry
845
+ *
846
+ * @returns The resolved DataSource instance
847
+ * @throws Error if no data source is found
848
+ *
849
+ * @example
850
+ * ```typescript
851
+ * class User extends Model {
852
+ * public static dataSource = "primary";
853
+ * }
854
+ *
855
+ * const ds = User.getDataSource();
856
+ * ```
857
+ */
858
+ static getDataSource(): DataSource;
859
+ /**
860
+ * Get driver instance
861
+ */
862
+ static getDriver(): DriverContract;
863
+ /**
864
+ * Generate next id and set it to current model's id
865
+ */
866
+ generateNextId(): Promise<number | string>;
867
+ /**
868
+ * Apply model defaults from data source configuration.
869
+ *
870
+ * This is called automatically by getDataSource() the first time
871
+ * a model accesses its data source. Defaults are only applied if
872
+ * the model doesn't already have its own value set.
873
+ *
874
+ * The hierarchy is:
875
+ * 1. Model static property (highest priority - skipped here)
876
+ * 2. Database config modelDefaults (passed here)
877
+ * 3. Driver modelDefaults (merged before passing here)
878
+ * 4. Framework defaults (fallback values in the code)
879
+ *
880
+ * @param defaults - Model default configuration from data source
881
+ */
882
+ static applyModelDefaults(defaults: any): void;
883
+ /**
884
+ * Add a global scope that is automatically applied to all queries.
885
+ *
886
+ * Global scopes are inherited by child models and applied before query execution.
887
+ * Use for security filters, multi-tenancy, soft deletes, etc.
888
+ *
889
+ * @param name - Unique name for the scope
890
+ * @param callback - Function that modifies the query
891
+ * @param options - Scope options (timing: 'before' | 'after')
892
+ *
893
+ * @example
894
+ * ```typescript
895
+ * // Multi-tenancy scope
896
+ * Model.addGlobalScope('tenant', (query) => {
897
+ * query.where('tenantId', getCurrentTenant());
898
+ * }, { timing: 'before' });
899
+ *
900
+ * // Soft delete scope
901
+ * User.addGlobalScope('notDeleted', (query) => {
902
+ * query.whereNull('deletedAt');
903
+ * });
904
+ * ```
905
+ */
906
+ static addGlobalScope(name: string, callback: (query: QueryBuilderContract) => void, options?: GlobalScopeOptions): void;
907
+ /**
908
+ * Remove a global scope by name.
909
+ *
910
+ * @param name - Name of the scope to remove
911
+ *
912
+ * @example
913
+ * ```typescript
914
+ * Model.removeGlobalScope('tenant');
915
+ * ```
916
+ */
917
+ static removeGlobalScope(name: string): void;
918
+ /**
919
+ * Add a local scope that can be manually applied to queries.
920
+ *
921
+ * Local scopes are reusable query snippets that developers opt into.
922
+ * They are not automatically applied.
923
+ *
924
+ * @param name - Unique name for the scope
925
+ * @param callback - Function that modifies the query
926
+ *
927
+ * @example
928
+ * ```typescript
929
+ * // Define reusable scopes
930
+ * User.addScope('active', (query) => {
931
+ * query.where('isActive', true);
932
+ * });
933
+ *
934
+ * User.addScope('admins', (query) => {
935
+ * query.where('role', 'admin');
936
+ * });
937
+ *
938
+ * // Use explicitly
939
+ * await User.query().scope('active').get();
940
+ * await User.query().scope('admins').get();
941
+ * ```
942
+ */
943
+ static addScope(name: string, callback: LocalScopeCallback): void;
944
+ /**
945
+ * Remove a local scope by name.
946
+ *
947
+ * @param name - Name of the scope to remove
948
+ *
949
+ * @example
950
+ * ```typescript
951
+ * User.removeScope('active');
952
+ * ```
953
+ */
954
+ static removeScope(name: string): void;
955
+ /**
956
+ * Create a new query builder for this model
957
+ */
958
+ static query<TModel extends Model = Model>(this: ChildModel<TModel>): QueryBuilderContract<TModel>;
959
+ /**
960
+ * Eagerly load one or more relations with the query results.
961
+ *
962
+ * Relations are loaded in separate optimized queries to prevent N+1 problems.
963
+ * The loaded relations are attached to each model instance.
964
+ *
965
+ * @param relation - Single relation name to load
966
+ * @returns Query builder for chaining
967
+ *
968
+ * @example
969
+ * ```typescript
970
+ * // Load single relation
971
+ * const user = await User.query().with("posts").find(1);
972
+ * console.log(user.posts); // Post[]
973
+ *
974
+ * // Load multiple relations
975
+ * const user = await User.query().with("posts", "organization").find(1);
976
+ *
977
+ * // Load nested relations
978
+ * const user = await User.query().with("posts.comments.author").find(1);
979
+ * ```
980
+ */
981
+ static with<TModel extends Model = Model>(this: ChildModel<TModel>, relation: string): QueryBuilderContract<TModel>;
982
+ /**
983
+ * Eagerly load multiple relations.
984
+ *
985
+ * @param relations - Relation names to load
986
+ * @returns Query builder for chaining
987
+ */
988
+ static with<TModel extends Model = Model>(this: ChildModel<TModel>, ...relations: string[]): QueryBuilderContract<TModel>;
989
+ /**
990
+ * Eagerly load a relation with a constraint callback.
991
+ *
992
+ * The callback receives the relation query builder, allowing you to
993
+ * add conditions, ordering, or limits to the related query.
994
+ *
995
+ * @param relation - Relation name to load
996
+ * @param constraint - Callback to configure the relation query
997
+ * @returns Query builder for chaining
998
+ *
999
+ * @example
1000
+ * ```typescript
1001
+ * const user = await User.query()
1002
+ * .with("posts", (query) => {
1003
+ * query.where("isPublished", true)
1004
+ * .orderBy("createdAt", "desc")
1005
+ * .limit(5);
1006
+ * })
1007
+ * .find(1);
1008
+ * ```
1009
+ */
1010
+ static with<TModel extends Model = Model>(this: ChildModel<TModel>, relation: string, constraint: (query: QueryBuilderContract) => void): QueryBuilderContract<TModel>;
1011
+ /**
1012
+ * Eagerly load multiple relations with constraints.
1013
+ *
1014
+ * Pass an object where keys are relation names and values are either:
1015
+ * - `true` to load without constraints
1016
+ * - A callback function to configure the relation query
1017
+ *
1018
+ * @param relations - Object mapping relation names to constraints
1019
+ * @returns Query builder for chaining
1020
+ *
1021
+ * @example
1022
+ * ```typescript
1023
+ * const user = await User.query()
1024
+ * .with({
1025
+ * posts: (query) => query.where("isPublished", true),
1026
+ * organization: true,
1027
+ * roles: (query) => query.orderBy("priority"),
1028
+ * })
1029
+ * .find(1);
1030
+ * ```
1031
+ */
1032
+ static with<TModel extends Model = Model>(this: ChildModel<TModel>, relations: Record<string, boolean | ((query: QueryBuilderContract) => void)>): QueryBuilderContract<TModel>;
1033
+ /**
1034
+ * Add a count of related records as a virtual field on each result row.
1035
+ *
1036
+ * Each relation produces a `${relationName}Count` column by default. Use
1037
+ * the `"name as alias"` shorthand or the object form to customise the
1038
+ * output alias or apply per-relation where-clause constraints.
1039
+ *
1040
+ * @param relation - Relation name (optionally with `as <alias>`)
1041
+ * @returns Query builder for chaining
1042
+ *
1043
+ * @example
1044
+ * ```typescript
1045
+ * const users = await User.withCount("posts").get();
1046
+ * console.log(users[0].postsCount); // number
1047
+ * ```
1048
+ */
1049
+ static withCount<TModel extends Model = Model>(this: ChildModel<TModel>, relation: string): QueryBuilderContract<TModel>;
1050
+ /**
1051
+ * Add counts for multiple relations at once.
1052
+ *
1053
+ * @example
1054
+ * ```typescript
1055
+ * await User.withCount("posts", "comments", "followers").get();
1056
+ * ```
1057
+ */
1058
+ static withCount<TModel extends Model = Model>(this: ChildModel<TModel>, ...relations: string[]): QueryBuilderContract<TModel>;
1059
+ /**
1060
+ * Add counts for multiple relations supplied as an array.
1061
+ */
1062
+ static withCount<TModel extends Model = Model>(this: ChildModel<TModel>, relations: string[]): QueryBuilderContract<TModel>;
1063
+ /**
1064
+ * Add counts with optional per-relation constraints and alias overrides.
1065
+ *
1066
+ * Values may be `true`, an alias string, or a callback that applies
1067
+ * where-clauses inside the count subquery. Use the `as <alias>` shorthand
1068
+ * in the key to count the same relation more than once.
1069
+ *
1070
+ * @example
1071
+ * ```typescript
1072
+ * await Post.withCount({
1073
+ * comments: true,
1074
+ * "comments as approvedCount": (q) => q.where("approved", true),
1075
+ * tags: "tagCount",
1076
+ * }).get();
1077
+ * ```
1078
+ */
1079
+ static withCount<TModel extends Model = Model>(this: ChildModel<TModel>, relations: Record<string, true | string | ((query: QueryBuilderContract) => void)>): QueryBuilderContract<TModel>;
1080
+ /**
1081
+ * Load relations using database JOINs in a single query.
1082
+ *
1083
+ * Unlike `with()` which uses separate queries, `joinWith()` uses
1084
+ * LEFT JOIN (SQL) or $lookup (MongoDB) to fetch related data
1085
+ * in a single query. The related data is hydrated into proper
1086
+ * model instances and attached to the main model.
1087
+ *
1088
+ * Best for: belongsTo and hasOne relations where you need
1089
+ * efficient single-query loading.
1090
+ *
1091
+ * @param relations - Relation names to load via JOIN
1092
+ * @returns Query builder for chaining
1093
+ *
1094
+ * @example
1095
+ * ```typescript
1096
+ * // Single relation
1097
+ * const post = await Post.joinWith("author").first();
1098
+ * console.log(post.author); // User model instance
1099
+ * console.log(post.data); // { id, title, authorId } - no author data
1100
+ *
1101
+ * // Multiple relations
1102
+ * const post = await Post.joinWith("author", "category").first();
1103
+ * ```
1104
+ */
1105
+ static joinWith<TModel extends Model = Model>(this: ChildModel<TModel>, ...relations: string[]): QueryBuilderContract<TModel>;
1106
+ /**
1107
+ * Create new query builder.
1108
+ *
1109
+ * If the model has a static `builder` property set to a query builder class,
1110
+ * it will be instantiated instead of the default driver query builder.
1111
+ *
1112
+ * @example
1113
+ * ```typescript
1114
+ * class UserQueryBuilder<T = User> extends MongoQueryBuilder<T> {
1115
+ * active() { return this.where("isActive", true); }
1116
+ * }
1117
+ *
1118
+ * class User extends Model {
1119
+ * static builder = UserQueryBuilder; // That's it! ✨
1120
+ * }
1121
+ *
1122
+ * // Now User.query() returns UserQueryBuilder<User> with autocomplete!
1123
+ * ```
1124
+ */
1125
+ static newQueryBuilder<TModel extends Model = Model>(this: ChildModel<TModel>): QueryBuilderContract<TModel>;
1126
+ /**
1127
+ * Get First matched record for the given filter
1128
+ */
1129
+ static first<TModel extends Model = Model>(this: ChildModel<TModel>, filter?: Record<string, unknown>): Promise<TModel | null>;
1130
+ /**
1131
+ * Get last matched record for the given filter
1132
+ */
1133
+ static last<TModel extends Model = Model>(this: ChildModel<TModel>, filter?: Record<string, unknown>): Promise<TModel | null>;
1134
+ /**
1135
+ * Use where clause directly
1136
+ */
1137
+ static where<TModel extends Model = Model>(this: ChildModel<TModel>, field: string, value: unknown): QueryBuilderContract<TModel>;
1138
+ static where<TModel extends Model = Model>(this: ChildModel<TModel>, field: string, operator: WhereOperator, value: unknown): QueryBuilderContract<TModel>;
1139
+ static where<TModel extends Model = Model>(this: (new (...args: any[]) => TModel) & Pick<typeof Model, "query" | "getDataSource" | "table">, conditions: WhereObject): QueryBuilderContract<TModel>;
1140
+ static where<TModel extends Model = Model>(this: (new (...args: any[]) => TModel) & Pick<typeof Model, "query" | "getDataSource" | "table">, callback: WhereCallback<TModel>): QueryBuilderContract<TModel>;
1141
+ /**
1142
+ * Count the number of records in the table
1143
+ * @param filter - The filter to apply to the query
1144
+ */
1145
+ static count<TModel extends Model = Model>(this: ChildModel<TModel>, filter?: Record<string, unknown>): Promise<number>;
1146
+ /**
1147
+ * Find record by id
1148
+ */
1149
+ static find<TModel extends Model = Model>(this: ChildModel<TModel>, id: string | number): Promise<TModel | null>;
1150
+ /**
1151
+ * Get all records from the table
1152
+ *
1153
+ * @param filter - The filter to apply to the query
1154
+ * @returns All records from the table
1155
+ */
1156
+ static all<TModel extends Model = Model>(this: ChildModel<TModel>, filter?: Record<string, unknown>): Promise<TModel[]>;
1157
+ /**
1158
+ * Perform pagination
1159
+ */
1160
+ static paginate<TModel extends Model = Model>(this: ChildModel<TModel>, options?: PaginationOptions & {
1161
+ filter?: Record<string, unknown>;
1162
+ }): Promise<PaginationResult<TModel>>;
1163
+ /**
1164
+ * Get latest records from the table
1165
+ *
1166
+ * @param filter - The filter to apply to the query
1167
+ */
1168
+ static latest<TModel extends Model = Model>(this: ChildModel<TModel>, filter?: Record<string, unknown>): Promise<TModel[]>;
1169
+ /**
1170
+ * Increment the given field by the given amount using atomic update
1171
+ *
1172
+ * @example ```typescript
1173
+ * // Increase age by 1 for user id 1
1174
+ * User.increment({id: 1}, "age", 1);
1175
+ * // Increase age by 1 and views by 2 for user id 1
1176
+ * User.increment({id: 1}, {age: 1, views: 2});
1177
+ * ```
1178
+ */
1179
+ static increase<TModel extends Model = Model>(this: ChildModel<TModel>, filter: Record<string, unknown>, field: string, amount: number): Promise<number>;
1180
+ /**
1181
+ * Decrement the given field by the given amount using atomic update
1182
+ * @example ```typescript
1183
+ * // Decrease age by 1 for user id 1
1184
+ * User.decrement({id: 1}, "age", 1);
1185
+ * // Decrease age by 1 and views by 2 for user id 1
1186
+ * User.decrement({id: 1}, {age: 1, views: 2});
1187
+ * ```
1188
+ */
1189
+ static decrease<TModel extends Model = Model>(this: ChildModel<TModel>, filter: Record<string, unknown>, field: string, amount: number): Promise<number>;
1190
+ /**
1191
+ * Perform atomic operation
1192
+ * Example
1193
+ *
1194
+ * ```typescript
1195
+ * const user = await User.atomic({id: 1}, {$inc: {age: 1}})
1196
+ * Returns user model with updated age
1197
+ */
1198
+ static atomic<TModel extends Model = Model>(this: ChildModel<TModel>, filter: Record<string, unknown>, operations: UpdateOperations): Promise<number>;
1199
+ /**
1200
+ * Perform an atomic update for the given id
1201
+ */
1202
+ static update<TModel extends Model = Model>(this: ChildModel<TModel>, id: string | number, data: Record<string, unknown>): Promise<number>;
1203
+ /**
1204
+ * Find one and update multiple records that matches the provided filter and return the updated record
1205
+ * @param filter - Filter conditions
1206
+ * @param update - Update operations ($set, $unset, $inc)
1207
+ * @returns The updated records
1208
+ */
1209
+ static findAndUpdate<TModel extends Model = Model>(this: ChildModel<TModel>, filter: Record<string, unknown>, update: UpdateOperations): Promise<TModel[]>;
1210
+ /**
1211
+ * Find one and update a single record that matches the provided filter and return the updated record
1212
+ * @param filter - Filter conditions
1213
+ * @param update - Update operations ($set, $unset, $inc)
1214
+ * @returns The updated record or null
1215
+ */
1216
+ static findOneAndUpdate<TModel extends Model = Model>(this: ChildModel<TModel>, filter: Record<string, unknown>, update: UpdateOperations): Promise<TModel | null>;
1217
+ /**
1218
+ * Find and replace the entire document that matches the provided filter and return the replaced document
1219
+ */
1220
+ static findAndReplace<TModel extends Model = Model>(this: ChildModel<TModel>, filter: Record<string, unknown>, document: Record<string, unknown>): Promise<TModel | null>;
1221
+ /**
1222
+ * Destroy (delete) the current model instance from the database.
1223
+ *
1224
+ * Emits lifecycle events:
1225
+ * - `deleting` - Before deletion
1226
+ * - `deleted` - After successful deletion
1227
+ *
1228
+ * @param options - Destroy options (strategy override, skipEvents)
1229
+ * @throws {Error} If the model is new (not saved) or if deletion fails
1230
+ *
1231
+ * @example
1232
+ * ```typescript
1233
+ * const user = await User.find(1);
1234
+ * await user.destroy(); // Uses default strategy
1235
+ * await user.destroy({ strategy: "permanent" }); // Override strategy
1236
+ * await user.destroy({ skipEvents: true }); // Silent delete
1237
+ * ```
1238
+ */
1239
+ destroy(options?: {
1240
+ strategy?: DeleteStrategy;
1241
+ skipEvents?: boolean;
1242
+ }): Promise<RemoverResult>;
1243
+ /**
1244
+ * Attach one or more related records to a `belongsToMany` pivot table.
1245
+ *
1246
+ * Thin wrapper over `createPivotOperations(this, relation).attach(ids, pivotData)`.
1247
+ * Throws if the named relation is not a `belongsToMany` relation.
1248
+ *
1249
+ * @example
1250
+ * ```typescript
1251
+ * await post.attach("tags", [1, 2, 3]);
1252
+ * await post.attach("tags", [4], { addedBy: currentUserId });
1253
+ * ```
1254
+ */
1255
+ attach(relation: string, ids: PivotIds, pivotData?: PivotData): Promise<void>;
1256
+ /**
1257
+ * Detach related records from a `belongsToMany` pivot table. Omit `ids`
1258
+ * to detach every row for this side of the relation.
1259
+ *
1260
+ * Thin wrapper over `createPivotOperations(this, relation).detach(ids)`.
1261
+ * Throws if the named relation is not a `belongsToMany` relation.
1262
+ *
1263
+ * @example
1264
+ * ```typescript
1265
+ * await post.detach("tags", [2]);
1266
+ * await post.detach("tags"); // detach all
1267
+ * ```
1268
+ */
1269
+ detach(relation: string, ids?: PivotIds): Promise<void>;
1270
+ /**
1271
+ * Get the pivot-operations handle for a `belongsToMany` relation.
1272
+ *
1273
+ * Returns a `PivotOperations` object exposing `attach` / `detach` /
1274
+ * `sync` / `toggle` for the named relation's pivot table. Routing every
1275
+ * pivot mutation through `model.pivot(relation)` keeps the join-table
1276
+ * `sync` distinct from `Model.sync(Target, field)` (the denormalization
1277
+ * feature). Throws if the named relation is not a `belongsToMany` relation.
1278
+ *
1279
+ * @example
1280
+ * ```typescript
1281
+ * await post.pivot("tags").attach([1, 2, 3]);
1282
+ * await post.pivot("tags").sync([1, 3, 5]); // replace the whole set
1283
+ * await post.pivot("tags").toggle([1, 7]); // flip each
1284
+ * ```
1285
+ */
1286
+ pivot(relation: string): PivotOperations;
1287
+ /**
1288
+ * Get the class constructor from an instance.
1289
+ *
1290
+ * This helper method allows instance methods to access static properties
1291
+ * and methods of the model class in a type-safe way.
1292
+ *
1293
+ * @returns The model class constructor
1294
+ *
1295
+ * @example
1296
+ * ```typescript
1297
+ * const constructor = this.self();
1298
+ * const table = constructor.table;
1299
+ * await constructor.deleteOne({ id: 1 });
1300
+ * ```
1301
+ */
1302
+ self<TModel extends Model = this>(): ChildModel<TModel>;
1303
+ /**
1304
+ * Creates an immutable clone of the model with its current state.
1305
+ *
1306
+ * The cloned model:
1307
+ * - Contains a deep copy of all current data
1308
+ * - Has frozen (immutable) data that cannot be modified
1309
+ * - Preserves the `isNew` flag from the original
1310
+ * - Has no dirty changes (clean state)
1311
+ * - Cannot be saved or modified
1312
+ *
1313
+ * This is useful for:
1314
+ * - Creating snapshots of model state
1315
+ * - Passing read-only model data to other parts of the application
1316
+ * - Preventing accidental mutations
1317
+ * - Maintaining historical records
1318
+ *
1319
+ * @returns A new immutable model instance with the current state
1320
+ *
1321
+ * @example
1322
+ * ```typescript
1323
+ * const user = new User({ name: "Alice", email: "alice@example.com" });
1324
+ * await user.save();
1325
+ *
1326
+ * // Create an immutable snapshot
1327
+ * const snapshot = user.clone();
1328
+ *
1329
+ * // This will throw an error because the clone is immutable
1330
+ * snapshot.set("name", "Bob"); // TypeError: Cannot assign to read only property
1331
+ *
1332
+ * // Original can still be modified
1333
+ * user.set("name", "Bob");
1334
+ * await user.save();
1335
+ * ```
1336
+ */
1337
+ clone(): this;
1338
+ /**
1339
+ * Recursively freezes an object and all its nested properties.
1340
+ *
1341
+ * @param obj - The object to freeze
1342
+ * @returns The frozen object
1343
+ */
1344
+ deepFreeze<T>(obj: T): T;
1345
+ /**
1346
+ * Get table name
1347
+ */
1348
+ getTableName(): string;
1349
+ /**
1350
+ * Get primary key name
1351
+ */
1352
+ getPrimaryKey(): string;
1353
+ /**
1354
+ * Get model schema
1355
+ */
1356
+ getSchema(): any;
1357
+ /**
1358
+ * Check if schema has the given key
1359
+ */
1360
+ schemaHas(key: string): boolean;
1361
+ /**
1362
+ * Get strict mode
1363
+ */
1364
+ getStrictMode(): StrictMode;
1365
+ /**
1366
+ * Get data source (Connection)
1367
+ */
1368
+ getConnection(): DataSource;
1369
+ /**
1370
+ * Delete all matching documents from the table.
1371
+ */
1372
+ static delete<TModel extends Model = Model>(this: ChildModel<TModel>, filter?: Record<string, unknown>): Promise<number>;
1373
+ /**
1374
+ * Delete a single matching document from the table.
1375
+ */
1376
+ static deleteOne<TModel extends Model = Model>(this: ChildModel<TModel>, filter?: Record<string, unknown>): Promise<number>;
1377
+ /**
1378
+ * Restore a single deleted record by its ID.
1379
+ *
1380
+ * Automatically detects whether the record was deleted via "trash" or "soft" strategy.
1381
+ * Handles ID conflicts based on options.
1382
+ *
1383
+ * @param id - The primary key value of the record to restore
1384
+ * @param options - Restorer options (onIdConflict, skipEvents)
1385
+ * @returns The restored model instance
1386
+ *
1387
+ * @throws {Error} If record not found in trash or soft-deleted records
1388
+ * @throws {Error} If ID conflict and onIdConflict is "fail"
1389
+ *
1390
+ * @example
1391
+ * ```typescript
1392
+ * // Restore with default options (assign new ID if conflict)
1393
+ * const user = await User.restore(123);
1394
+ *
1395
+ * // Restore and fail if ID conflict
1396
+ * const user = await User.restore(123, { onIdConflict: "fail" });
1397
+ *
1398
+ * // Silent restore (skip events)
1399
+ * const user = await User.restore(123, { skipEvents: true });
1400
+ * ```
1401
+ */
1402
+ static restore<TModel extends Model = Model>(this: ChildModel<TModel>, id: string | number, options?: {
1403
+ onIdConflict?: "fail" | "assignNew";
1404
+ skipEvents?: boolean;
1405
+ }): Promise<TModel>;
1406
+ /**
1407
+ * Restore all deleted records for the model's table.
1408
+ *
1409
+ * Restores all records from the trash table (if using trash strategy)
1410
+ * or all soft-deleted records (if using soft strategy).
1411
+ *
1412
+ * @param options - Restorer options (onIdConflict, skipEvents)
1413
+ * @returns Array of restored model instances
1414
+ *
1415
+ * @example
1416
+ * ```typescript
1417
+ * // Restore all with default options
1418
+ * const users = await User.restoreAll();
1419
+ *
1420
+ * // Restore all and fail on any ID conflict
1421
+ * const users = await User.restoreAll({ onIdConflict: "fail" });
1422
+ * ```
1423
+ */
1424
+ static restoreAll<TModel extends Model = Model>(this: ChildModel<TModel>, options?: {
1425
+ onIdConflict?: "fail" | "assignNew";
1426
+ skipEvents?: boolean;
1427
+ }): Promise<TModel[]>;
1428
+ /**
1429
+ * Create a new record in database and return the model instance.
1430
+ *
1431
+ * The data type is automatically inferred from the model's schema type.
1432
+ *
1433
+ * @param data - Partial data matching the model's schema type
1434
+ * @returns The created model instance
1435
+ *
1436
+ * @example
1437
+ * ```typescript
1438
+ * // TypeScript automatically infers UserSchema from User model
1439
+ * const user = await User.create({
1440
+ * name: "Alice",
1441
+ * email: "alice@example.com",
1442
+ * age: 30
1443
+ * });
1444
+ * // Type: User (with UserSchema inferred)
1445
+ * ```
1446
+ */
1447
+ static create<TModel extends Model = Model, TSchema extends ModelSchema = (TModel extends Model<infer S> ? S : ModelSchema)>(this: ChildModel<TModel>, data: Partial<TSchema>): Promise<TModel>;
1448
+ /**
1449
+ * Create many documents and return an array of created models
1450
+ */
1451
+ static createMany<TModel extends Model = Model, TSchema extends ModelSchema = (TModel extends Model<infer S> ? S : ModelSchema)>(this: ChildModel<TModel>, data: Partial<TSchema>[]): Promise<TModel[]>;
1452
+ /**
1453
+ * Find a record or create it if not found.
1454
+ *
1455
+ * Does NOT update existing records - returns them as-is.
1456
+ * Useful when you want to ensure a record exists without modifying it.
1457
+ *
1458
+ * @param filter - Conditions to find by
1459
+ * @param data - Data to create if not found (merged with filter)
1460
+ * @returns Promise resolving to found or created model
1461
+ *
1462
+ * @example
1463
+ * ```typescript
1464
+ * // Ensure default admin exists (don't modify if exists)
1465
+ * const admin = await User.findOrCreate(
1466
+ * { email: "admin@example.com" },
1467
+ * { email: "admin@example.com", name: "Admin", role: "admin" }
1468
+ * );
1469
+ * // If admin exists, returns existing (password unchanged)
1470
+ * // If not found, creates new admin
1471
+ * ```
1472
+ */
1473
+ static findOrCreate<TModel extends Model = Model, TSchema extends ModelSchema = (TModel extends Model<infer S> ? S : ModelSchema)>(this: ChildModel<TModel>, filter: Partial<TSchema>, data: Partial<TSchema>): Promise<TModel>;
1474
+ /**
1475
+ * Upsert (insert or update) a record atomically.
1476
+ *
1477
+ * Uses the driver's native upsert operation for atomic insert-or-update.
1478
+ * More efficient than updateOrCreate as it's a single database operation.
1479
+ *
1480
+ * Includes full Model features:
1481
+ * - ID generation (if creating)
1482
+ * - createdAt timestamp (if creating)
1483
+ * - updatedAt timestamp (always)
1484
+ * - Validation & casting
1485
+ * - Lifecycle events
1486
+ *
1487
+ * @param filter - Conditions to find by (used for conflict detection)
1488
+ * @param data - Data to update or create (merged with filter)
1489
+ * @param options - Upsert options (conflictColumns for PostgreSQL, etc.)
1490
+ * @returns Promise resolving to upserted model
1491
+ *
1492
+ * @example
1493
+ * ```typescript
1494
+ * // PostgreSQL: upsert on unique email
1495
+ * const user = await User.upsert(
1496
+ * { email: "user@example.com" },
1497
+ * {
1498
+ * email: "user@example.com",
1499
+ * name: "John Updated",
1500
+ * lastSyncedAt: new Date()
1501
+ * },
1502
+ * { conflictColumns: ["email"] }
1503
+ * );
1504
+ *
1505
+ * // MongoDB: upsert by filter
1506
+ * const user = await User.upsert(
1507
+ * { externalId: "ext-123" },
1508
+ * {
1509
+ * externalId: "ext-123",
1510
+ * name: "John Updated",
1511
+ * email: "john.new@example.com"
1512
+ * }
1513
+ * );
1514
+ * ```
1515
+ */
1516
+ static upsert<TModel extends Model = Model, TSchema extends ModelSchema = (TModel extends Model<infer S> ? S : ModelSchema)>(this: ChildModel<TModel>, filter: Partial<TSchema>, data: Partial<TSchema>, options?: Record<string, unknown>): Promise<TModel>;
1517
+ /**
1518
+ * Update a record or create it if not found (upsert).
1519
+ *
1520
+ * @deprecated Use `upsert()` instead for better performance and atomicity.
1521
+ * This method is kept for backward compatibility but uses upsert internally.
1522
+ *
1523
+ * @param filter - Conditions to find by
1524
+ * @param data - Data to update or create (merged with filter)
1525
+ * @returns Promise resolving to updated or created model
1526
+ */
1527
+ static updateOrCreate<TModel extends Model = Model, TSchema extends ModelSchema = (TModel extends Model<infer S> ? S : ModelSchema)>(this: ChildModel<TModel>, filter: Partial<TSchema>, data: Partial<TSchema>, options?: Record<string, unknown>): Promise<TModel>;
1528
+ /**
1529
+ * Find one and delete a record that matches the filter and return the deleted record.
1530
+ *
1531
+ * @param filter - Filter conditions
1532
+ * @param options - Optional delete options
1533
+ * @returns The deleted model instance or null if not found
1534
+ *
1535
+ * @example
1536
+ * ```typescript
1537
+ * const deleted = await User.findOneAndDelete({ id: 1 });
1538
+ * if (deleted) {
1539
+ * console.log('Deleted user:', deleted.get('name'));
1540
+ * }
1541
+ * ```
1542
+ */
1543
+ static findOneAndDelete<TModel extends Model = Model>(this: ChildModel<TModel>, filter: Record<string, unknown>, options?: Record<string, unknown>): Promise<TModel | null>;
1544
+ /**
1545
+ * Returns embedded data for sync operations.
1546
+ * Excludes internal MongoDB fields and ensures proper date serialization.
1547
+ *
1548
+ * @returns Embedded data object suitable for syncing
1549
+ *
1550
+ * @example
1551
+ * ```typescript
1552
+ * const user = await User.find(1);
1553
+ * const embedData = user.embedData;
1554
+ * // Returns: { id: 1, name: "Alice", email: "alice@example.com", ... }
1555
+ * // Excludes: _id
1556
+ * ```
1557
+ */
1558
+ get embedData(): Record<string, unknown>;
1559
+ /**
1560
+ * Tear down framework-level registrations attached to this Model class.
1561
+ *
1562
+ * Called by Warlock's HMR machinery when a model file (or any file in its
1563
+ * dependency graph) is reloaded. Removes the event listeners and registry
1564
+ * entries the Model installed at module-load time so the reloaded class
1565
+ * does not double-register.
1566
+ *
1567
+ * The `$` prefix marks this as framework-internal — application code should
1568
+ * not call this. It is part of the public surface only because the HMR
1569
+ * system needs to invoke it from outside the Model class.
1570
+ *
1571
+ * @internal
1572
+ */
1573
+ static $cleanup(): void;
1574
+ /**
1575
+ * Accesses the event emitter dedicated to this model constructor.
1576
+ *
1577
+ * Each model subclass gets its own isolated event emitter, allowing you to
1578
+ * register lifecycle hooks that only apply to that specific model.
1579
+ *
1580
+ * @returns The ModelEvents instance for this model constructor
1581
+ *
1582
+ * @example
1583
+ * ```typescript
1584
+ * User.events().onSaving((user) => {
1585
+ * console.log("User is being saved:", user);
1586
+ * });
1587
+ * ```
1588
+ */
1589
+ static events<TModel extends Model = Model>(this: ChildModel<TModel>): ModelEvents<TModel>;
1590
+ /**
1591
+ * Registers an event listener for this model constructor.
1592
+ *
1593
+ * Convenience shorthand for `Model.events().on(...)`.
1594
+ *
1595
+ * @param event - The event name (e.g., "saving", "created")
1596
+ * @param listener - The callback to invoke when the event fires
1597
+ * @returns An unsubscribe function
1598
+ *
1599
+ * @example
1600
+ * ```typescript
1601
+ * const unsubscribe = User.on("saving", (user) => {
1602
+ * console.log("Saving user:", user);
1603
+ * });
1604
+ * ```
1605
+ */
1606
+ static on<TModel extends Model = Model, TContext = unknown>(this: ChildModel<TModel>, event: ModelEventName, listener: ModelEventListener<TModel, TContext>): () => void;
1607
+ /**
1608
+ * Registers a one-time event listener for this model constructor.
1609
+ *
1610
+ * The listener will automatically unsubscribe after its first invocation.
1611
+ * Convenience shorthand for `Model.events().once(...)`.
1612
+ *
1613
+ * @param event - The event name (e.g., "saving", "created")
1614
+ * @param listener - The callback to invoke when the event fires
1615
+ * @returns An unsubscribe function
1616
+ *
1617
+ * @example
1618
+ * ```typescript
1619
+ * User.once("created", (user) => {
1620
+ * console.log("First user created:", user);
1621
+ * });
1622
+ * ```
1623
+ */
1624
+ static once<TModel extends Model = Model, TContext = unknown>(this: ChildModel<TModel>, event: ModelEventName, listener: ModelEventListener<TModel, TContext>): () => void;
1625
+ /**
1626
+ * Removes an event listener from this model constructor.
1627
+ *
1628
+ * Convenience shorthand for `Model.events().off(...)`.
1629
+ *
1630
+ * @param event - The event name
1631
+ * @param listener - The callback to remove
1632
+ *
1633
+ * @example
1634
+ * ```typescript
1635
+ * const listener = (user) => console.log(user);
1636
+ * User.on("saving", listener);
1637
+ * User.off("saving", listener);
1638
+ * ```
1639
+ */
1640
+ static off<TModel extends Model = Model, TContext = unknown>(this: ChildModel<TModel>, event: ModelEventName, listener: ModelEventListener<TModel, TContext>): void;
1641
+ /**
1642
+ * Accesses the global event emitter shared by all model instances.
1643
+ *
1644
+ * Use this for cross-cutting concerns like auditing, logging, or injecting
1645
+ * common fields (e.g., `createdBy`, `updatedBy`) across all models.
1646
+ *
1647
+ * @returns The global ModelEvents instance
1648
+ *
1649
+ * @example
1650
+ * ```typescript
1651
+ * Model.globalEvents().onSaving((model) => {
1652
+ * model.set("updatedAt", new Date());
1653
+ * });
1654
+ * ```
1655
+ */
1656
+ static globalEvents(): ModelEvents<Model>;
1657
+ /**
1658
+ * Replace the model's data entirely.
1659
+ *
1660
+ * Used internally by the writer after validation to update the model
1661
+ * with validated/casted data.
1662
+ *
1663
+ * **Warning:** This replaces all data and updates the dirty tracker.
1664
+ * Use with caution in application code.
1665
+ *
1666
+ * @param data - New data to replace current data
1667
+ *
1668
+ * @example
1669
+ * ```typescript
1670
+ * // Internal usage by writer
1671
+ * model.replaceData(validatedData);
1672
+ * ```
1673
+ */
1674
+ replaceData(data: Record<string, unknown>): void;
1675
+ /**
1676
+ * Save the model to the database.
1677
+ *
1678
+ * Performs insert if `isNew === true`, otherwise performs update.
1679
+ * Automatically validates, casts, generates IDs, and emits lifecycle events.
1680
+ *
1681
+ * **Features:**
1682
+ * - Validation via @warlock.js/seal schema
1683
+ * - Data casting (string → number, etc.)
1684
+ * - ID generation (NoSQL only)
1685
+ * - Partial updates (only changed fields)
1686
+ * - Lifecycle events (validating, saving, created/updated, saved)
1687
+ *
1688
+ * @param data - Optional data to merge before saving
1689
+ * @param options - Save options
1690
+ * @returns The model instance for method chaining
1691
+ *
1692
+ * @throws {ValidationError} If validation fails
1693
+ * @throws {Error} If database operation fails
1694
+ *
1695
+ * @example
1696
+ * ```typescript
1697
+ * // Simple save
1698
+ * const user = new User({ name: "Alice" });
1699
+ * await user.save();
1700
+ *
1701
+ * // Merge data before saving
1702
+ * await user.save({ age: 31, email: "alice@example.com" });
1703
+ *
1704
+ * // Silent save (no events)
1705
+ * await user.save(null, { skipEvents: true });
1706
+ *
1707
+ * // Skip validation
1708
+ * await user.save(null, { skipValidation: true });
1709
+ *
1710
+ * // Method chaining
1711
+ * await user.set("name", "Bob").save();
1712
+ * ```
1713
+ */
1714
+ save(options?: WriterOptions & {
1715
+ merge?: Partial<TSchema>;
1716
+ }): Promise<this>;
1717
+ /**
1718
+ * Serialize the model data for storage in the database.
1719
+ *
1720
+ * Uses the driver's `serialize` to apply driver-specific type transformations
1721
+ * (e.g. Date → ISO string, BigInt → string for Postgres).
1722
+ *
1723
+ * **Not** the same as `toSnapshot` — this is a DB write concern, not a cache concern.
1724
+ */
1725
+ serialize(): Record<string, unknown>;
1726
+ /**
1727
+ * Produce a plain-object snapshot of this model suitable for cache storage.
1728
+ *
1729
+ * - `data`: The model's own fields, serialized via the driver (handles Dates, BigInt, ObjectId).
1730
+ * - `relations`: Each entry in `loadedRelations` recursively snapshotted via `toSnapshot`.
1731
+ * A relation that was loaded but resolved to `null` is stored as `null` (not omitted),
1732
+ * so that `fromSnapshot` can distinguish "loaded + null" from "never loaded".
1733
+ *
1734
+ * Use `Model.fromSnapshot(snapshot)` to reconstruct.
1735
+ *
1736
+ * @example
1737
+ * ```typescript
1738
+ * await cache.set(key, chat.toSnapshot());
1739
+ * ```
1740
+ */
1741
+ toSnapshot(): ModelSnapshot;
1742
+ /**
1743
+ * Reconstruct a model instance (with relations) from a cache snapshot.
1744
+ *
1745
+ * Counterpart to `toSnapshot`. Applies driver deserialization (e.g. ISO string → Date)
1746
+ * and recursively hydrates any nested relation snapshots via `RelationHydrator`.
1747
+ *
1748
+ * @example
1749
+ * ```typescript
1750
+ * const snapshot = await cache.get(key);
1751
+ * const chat = Chat.fromSnapshot(snapshot);
1752
+ * chat.unit; // Unit model instance, fully hydrated
1753
+ * ```
1754
+ */
1755
+ static fromSnapshot<TModel extends Model>(this: ChildModel<TModel>, snapshot: ModelSnapshot): TModel;
1756
+ /**
1757
+ * Create a model instance from raw data (no relations).
1758
+ *
1759
+ * This is the data-only hydration path, used by the query builder when
1760
+ * converting a raw DB row into a model instance. Relations are NOT restored
1761
+ * here — use `fromSnapshot` when restoring from a cache snapshot that
1762
+ * includes relation data.
1763
+ *
1764
+ * @example
1765
+ * ```typescript
1766
+ * // Query builder internals:
1767
+ * const user = User.hydrate(rawRow);
1768
+ * ```
1769
+ */
1770
+ static hydrate<TModel extends Model = Model>(this: ChildModel<TModel>, data: Record<string, unknown>): TModel;
1771
+ /**
1772
+ * Convert the model into JSON
1773
+ */
1774
+ toJSON(): Record<string, unknown>;
1775
+ }
1776
+ //#endregion
1777
+ export { Model };
1778
+ //# sourceMappingURL=model.d.mts.map