@warlock.js/cascade 4.0.174 → 4.1.2

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