@warlock.js/cascade 4.0.48 → 4.0.58

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 (401) hide show
  1. package/cjs/context/database-data-source-context.d.ts +29 -0
  2. package/cjs/context/database-data-source-context.d.ts.map +1 -0
  3. package/cjs/context/database-data-source-context.js +28 -0
  4. package/cjs/context/database-data-source-context.js.map +1 -0
  5. package/cjs/context/database-transaction-context.d.ts +31 -0
  6. package/cjs/context/database-transaction-context.d.ts.map +1 -0
  7. package/cjs/context/database-transaction-context.js +34 -0
  8. package/cjs/context/database-transaction-context.js.map +1 -0
  9. package/cjs/contracts/database-driver.contract.d.ts +143 -0
  10. package/cjs/contracts/database-driver.contract.d.ts.map +1 -0
  11. package/cjs/contracts/database-id-generator.contract.d.ts +109 -0
  12. package/cjs/contracts/database-id-generator.contract.d.ts.map +1 -0
  13. package/cjs/contracts/database-remover.contract.d.ts +104 -0
  14. package/cjs/contracts/database-remover.contract.d.ts.map +1 -0
  15. package/cjs/contracts/database-restorer.contract.d.ts +143 -0
  16. package/cjs/contracts/database-restorer.contract.d.ts.map +1 -0
  17. package/cjs/contracts/database-writer.contract.d.ts +119 -0
  18. package/cjs/contracts/database-writer.contract.d.ts.map +1 -0
  19. package/cjs/contracts/driver-blueprint.contract.d.ts +45 -0
  20. package/cjs/contracts/driver-blueprint.contract.d.ts.map +1 -0
  21. package/cjs/contracts/index.d.ts +10 -0
  22. package/cjs/contracts/index.d.ts.map +1 -0
  23. package/cjs/contracts/migration-driver.contract.d.ts +365 -0
  24. package/cjs/contracts/migration-driver.contract.d.ts.map +1 -0
  25. package/cjs/contracts/query-builder.contract.d.ts +1128 -0
  26. package/cjs/contracts/query-builder.contract.d.ts.map +1 -0
  27. package/cjs/contracts/sync-adapter.contract.d.ts +58 -0
  28. package/cjs/contracts/sync-adapter.contract.d.ts.map +1 -0
  29. package/cjs/data-source/data-source-registry.d.ts +104 -0
  30. package/cjs/data-source/data-source-registry.d.ts.map +1 -0
  31. package/cjs/data-source/data-source-registry.js +138 -0
  32. package/cjs/data-source/data-source-registry.js.map +1 -0
  33. package/cjs/data-source/data-source.d.ts +106 -0
  34. package/cjs/data-source/data-source.d.ts.map +1 -0
  35. package/cjs/data-source/data-source.js +77 -0
  36. package/cjs/data-source/data-source.js.map +1 -0
  37. package/cjs/database-dirty-tracker.d.ts +253 -0
  38. package/cjs/database-dirty-tracker.d.ts.map +1 -0
  39. package/cjs/database-dirty-tracker.js +389 -0
  40. package/cjs/database-dirty-tracker.js.map +1 -0
  41. package/cjs/drivers/mongo/mongo-id-generator.d.ts +116 -0
  42. package/cjs/drivers/mongo/mongo-id-generator.d.ts.map +1 -0
  43. package/cjs/drivers/mongo/mongo-id-generator.js +149 -0
  44. package/cjs/drivers/mongo/mongo-id-generator.js.map +1 -0
  45. package/cjs/drivers/mongo/mongo-migration-driver.d.ts +228 -0
  46. package/cjs/drivers/mongo/mongo-migration-driver.d.ts.map +1 -0
  47. package/cjs/drivers/mongo/mongo-migration-driver.js +524 -0
  48. package/cjs/drivers/mongo/mongo-migration-driver.js.map +1 -0
  49. package/cjs/drivers/mongo/mongo-query-builder.d.ts +922 -0
  50. package/cjs/drivers/mongo/mongo-query-builder.d.ts.map +1 -0
  51. package/cjs/drivers/mongo/mongo-query-builder.js +1740 -0
  52. package/cjs/drivers/mongo/mongo-query-builder.js.map +1 -0
  53. package/cjs/drivers/mongo/mongo-query-operations.d.ts +226 -0
  54. package/cjs/drivers/mongo/mongo-query-operations.d.ts.map +1 -0
  55. package/cjs/drivers/mongo/mongo-query-operations.js +270 -0
  56. package/cjs/drivers/mongo/mongo-query-operations.js.map +1 -0
  57. package/cjs/drivers/mongo/mongo-query-parser.d.ts +262 -0
  58. package/cjs/drivers/mongo/mongo-query-parser.d.ts.map +1 -0
  59. package/cjs/drivers/mongo/mongo-query-parser.js +1351 -0
  60. package/cjs/drivers/mongo/mongo-query-parser.js.map +1 -0
  61. package/cjs/drivers/mongo/mongo-sync-adapter.d.ts +79 -0
  62. package/cjs/drivers/mongo/mongo-sync-adapter.d.ts.map +1 -0
  63. package/cjs/drivers/mongo/mongo-sync-adapter.js +146 -0
  64. package/cjs/drivers/mongo/mongo-sync-adapter.js.map +1 -0
  65. package/cjs/drivers/mongo/mongodb-blueprint.d.ts +30 -0
  66. package/cjs/drivers/mongo/mongodb-blueprint.d.ts.map +1 -0
  67. package/cjs/drivers/mongo/mongodb-blueprint.js +51 -0
  68. package/cjs/drivers/mongo/mongodb-blueprint.js.map +1 -0
  69. package/cjs/drivers/mongo/mongodb-driver.d.ts +188 -0
  70. package/cjs/drivers/mongo/mongodb-driver.d.ts.map +1 -0
  71. package/cjs/drivers/mongo/mongodb-driver.js +411 -0
  72. package/cjs/drivers/mongo/mongodb-driver.js.map +1 -0
  73. package/cjs/drivers/mongo/types.d.ts +43 -0
  74. package/cjs/drivers/mongo/types.d.ts.map +1 -0
  75. package/cjs/errors/missing-data-source.error.d.ts +22 -0
  76. package/cjs/errors/missing-data-source.error.d.ts.map +1 -0
  77. package/cjs/errors/missing-data-source.error.js +29 -0
  78. package/cjs/errors/missing-data-source.error.js.map +1 -0
  79. package/cjs/events/model-events.d.ts +231 -0
  80. package/cjs/events/model-events.d.ts.map +1 -0
  81. package/cjs/events/model-events.js +259 -0
  82. package/cjs/events/model-events.js.map +1 -0
  83. package/cjs/expressions/aggregate-expressions.d.ts +215 -0
  84. package/cjs/expressions/aggregate-expressions.d.ts.map +1 -0
  85. package/cjs/expressions/aggregate-expressions.js +221 -0
  86. package/cjs/expressions/aggregate-expressions.js.map +1 -0
  87. package/cjs/expressions/index.d.ts +2 -0
  88. package/cjs/expressions/index.d.ts.map +1 -0
  89. package/cjs/index.d.ts +41 -0
  90. package/cjs/index.d.ts.map +1 -0
  91. package/cjs/index.js +1 -267
  92. package/cjs/index.js.map +1 -1
  93. package/cjs/migration/column-builder.d.ts +167 -0
  94. package/cjs/migration/column-builder.d.ts.map +1 -0
  95. package/cjs/migration/column-builder.js +217 -0
  96. package/cjs/migration/column-builder.js.map +1 -0
  97. package/cjs/migration/foreign-key-builder.d.ts +110 -0
  98. package/cjs/migration/foreign-key-builder.d.ts.map +1 -0
  99. package/cjs/migration/foreign-key-builder.js +129 -0
  100. package/cjs/migration/foreign-key-builder.js.map +1 -0
  101. package/cjs/migration/index.d.ts +6 -0
  102. package/cjs/migration/index.d.ts.map +1 -0
  103. package/cjs/migration/migration-runner.d.ts +231 -0
  104. package/cjs/migration/migration-runner.d.ts.map +1 -0
  105. package/cjs/migration/migration-runner.js +443 -0
  106. package/cjs/migration/migration-runner.js.map +1 -0
  107. package/cjs/migration/migration.js +1346 -0
  108. package/cjs/migration/migration.js.map +1 -0
  109. package/cjs/migration/types.d.ts +132 -0
  110. package/cjs/migration/types.d.ts.map +1 -0
  111. package/cjs/model/model.d.ts +1267 -0
  112. package/cjs/model/model.d.ts.map +1 -0
  113. package/cjs/model/model.js +1463 -0
  114. package/cjs/model/model.js.map +1 -0
  115. package/cjs/model/register-model.d.ts +80 -0
  116. package/cjs/model/register-model.d.ts.map +1 -0
  117. package/cjs/model/register-model.js +91 -0
  118. package/cjs/model/register-model.js.map +1 -0
  119. package/cjs/remover/database-remover.d.ts +100 -0
  120. package/cjs/remover/database-remover.d.ts.map +1 -0
  121. package/cjs/remover/database-remover.js +209 -0
  122. package/cjs/remover/database-remover.js.map +1 -0
  123. package/cjs/restorer/database-restorer.d.ts +131 -0
  124. package/cjs/restorer/database-restorer.d.ts.map +1 -0
  125. package/cjs/restorer/database-restorer.js +425 -0
  126. package/cjs/restorer/database-restorer.js.map +1 -0
  127. package/cjs/sync/index.d.ts +12 -0
  128. package/cjs/sync/index.d.ts.map +1 -0
  129. package/cjs/sync/model-events.d.ts +62 -0
  130. package/cjs/sync/model-events.d.ts.map +1 -0
  131. package/cjs/sync/model-events.js +49 -0
  132. package/cjs/sync/model-events.js.map +1 -0
  133. package/cjs/sync/model-sync-operation.d.ts +163 -0
  134. package/cjs/sync/model-sync-operation.d.ts.map +1 -0
  135. package/cjs/sync/model-sync-operation.js +292 -0
  136. package/cjs/sync/model-sync-operation.js.map +1 -0
  137. package/cjs/sync/model-sync.d.ts +130 -0
  138. package/cjs/sync/model-sync.d.ts.map +1 -0
  139. package/cjs/sync/model-sync.js +178 -0
  140. package/cjs/sync/model-sync.js.map +1 -0
  141. package/cjs/sync/sync-context.d.ts +70 -0
  142. package/cjs/sync/sync-context.d.ts.map +1 -0
  143. package/cjs/sync/sync-context.js +101 -0
  144. package/cjs/sync/sync-context.js.map +1 -0
  145. package/cjs/sync/sync-manager.d.ts +213 -0
  146. package/cjs/sync/sync-manager.d.ts.map +1 -0
  147. package/cjs/sync/sync-manager.js +689 -0
  148. package/cjs/sync/sync-manager.js.map +1 -0
  149. package/cjs/sync/types.d.ts +289 -0
  150. package/cjs/sync/types.d.ts.map +1 -0
  151. package/cjs/types.d.ts +45 -0
  152. package/cjs/types.d.ts.map +1 -0
  153. package/cjs/utils/connect-to-database.d.ts +246 -0
  154. package/cjs/utils/connect-to-database.d.ts.map +1 -0
  155. package/cjs/utils/connect-to-database.js +92 -0
  156. package/cjs/utils/connect-to-database.js.map +1 -0
  157. package/cjs/utils/database-writer.utils.d.ts +15 -0
  158. package/cjs/utils/database-writer.utils.d.ts.map +1 -0
  159. package/cjs/utils/database-writer.utils.js +14 -0
  160. package/cjs/utils/database-writer.utils.js.map +1 -0
  161. package/cjs/utils/define-model.js +100 -0
  162. package/cjs/utils/define-model.js.map +1 -0
  163. package/cjs/utils/once-connected.d.ts +146 -0
  164. package/cjs/utils/once-connected.d.ts.map +1 -0
  165. package/cjs/utils/once-connected.js +252 -0
  166. package/cjs/utils/once-connected.js.map +1 -0
  167. package/cjs/validation/database-seal-plugins.d.ts +2 -0
  168. package/cjs/validation/database-seal-plugins.d.ts.map +1 -0
  169. package/cjs/validation/database-seal-plugins.js +4 -0
  170. package/cjs/validation/database-seal-plugins.js.map +1 -0
  171. package/cjs/validation/database-writer-validation-error.d.ts +97 -0
  172. package/cjs/validation/database-writer-validation-error.d.ts.map +1 -0
  173. package/cjs/validation/database-writer-validation-error.js +160 -0
  174. package/cjs/validation/database-writer-validation-error.js.map +1 -0
  175. package/cjs/validation/index.d.ts +3 -0
  176. package/cjs/validation/index.d.ts.map +1 -0
  177. package/cjs/validation/mutators/embed-mutator.d.ts +9 -0
  178. package/cjs/validation/mutators/embed-mutator.d.ts.map +1 -0
  179. package/cjs/validation/mutators/embed-mutator.js +33 -0
  180. package/cjs/validation/mutators/embed-mutator.js.map +1 -0
  181. package/cjs/validation/plugins/embed-validator-plugin.d.ts +24 -0
  182. package/cjs/validation/plugins/embed-validator-plugin.d.ts.map +1 -0
  183. package/cjs/validation/plugins/embed-validator-plugin.js +18 -0
  184. package/cjs/validation/plugins/embed-validator-plugin.js.map +1 -0
  185. package/cjs/validation/rules/database-model-rule.d.ts +7 -0
  186. package/cjs/validation/rules/database-model-rule.d.ts.map +1 -0
  187. package/cjs/validation/rules/database-model-rule.js +27 -0
  188. package/cjs/validation/rules/database-model-rule.js.map +1 -0
  189. package/cjs/validation/transformers/embed-model-transformer.d.ts +3 -0
  190. package/cjs/validation/transformers/embed-model-transformer.d.ts.map +1 -0
  191. package/cjs/validation/transformers/embed-model-transformer.js +18 -0
  192. package/cjs/validation/transformers/embed-model-transformer.js.map +1 -0
  193. package/cjs/validation/validators/embed-validator.d.ts +21 -0
  194. package/cjs/validation/validators/embed-validator.d.ts.map +1 -0
  195. package/cjs/validation/validators/embed-validator.js +42 -0
  196. package/cjs/validation/validators/embed-validator.js.map +1 -0
  197. package/cjs/writer/database-writer.d.ts +181 -0
  198. package/cjs/writer/database-writer.d.ts.map +1 -0
  199. package/cjs/writer/database-writer.js +402 -0
  200. package/cjs/writer/database-writer.js.map +1 -0
  201. package/esm/context/database-data-source-context.d.ts +29 -0
  202. package/esm/context/database-data-source-context.d.ts.map +1 -0
  203. package/esm/context/database-data-source-context.js +28 -0
  204. package/esm/context/database-data-source-context.js.map +1 -0
  205. package/esm/context/database-transaction-context.d.ts +31 -0
  206. package/esm/context/database-transaction-context.d.ts.map +1 -0
  207. package/esm/context/database-transaction-context.js +34 -0
  208. package/esm/context/database-transaction-context.js.map +1 -0
  209. package/esm/contracts/database-driver.contract.d.ts +143 -0
  210. package/esm/contracts/database-driver.contract.d.ts.map +1 -0
  211. package/esm/contracts/database-id-generator.contract.d.ts +109 -0
  212. package/esm/contracts/database-id-generator.contract.d.ts.map +1 -0
  213. package/esm/contracts/database-remover.contract.d.ts +104 -0
  214. package/esm/contracts/database-remover.contract.d.ts.map +1 -0
  215. package/esm/contracts/database-restorer.contract.d.ts +143 -0
  216. package/esm/contracts/database-restorer.contract.d.ts.map +1 -0
  217. package/esm/contracts/database-writer.contract.d.ts +119 -0
  218. package/esm/contracts/database-writer.contract.d.ts.map +1 -0
  219. package/esm/contracts/driver-blueprint.contract.d.ts +45 -0
  220. package/esm/contracts/driver-blueprint.contract.d.ts.map +1 -0
  221. package/esm/contracts/index.d.ts +10 -0
  222. package/esm/contracts/index.d.ts.map +1 -0
  223. package/esm/contracts/migration-driver.contract.d.ts +365 -0
  224. package/esm/contracts/migration-driver.contract.d.ts.map +1 -0
  225. package/esm/contracts/query-builder.contract.d.ts +1128 -0
  226. package/esm/contracts/query-builder.contract.d.ts.map +1 -0
  227. package/esm/contracts/sync-adapter.contract.d.ts +58 -0
  228. package/esm/contracts/sync-adapter.contract.d.ts.map +1 -0
  229. package/esm/data-source/data-source-registry.d.ts +104 -0
  230. package/esm/data-source/data-source-registry.d.ts.map +1 -0
  231. package/esm/data-source/data-source-registry.js +138 -0
  232. package/esm/data-source/data-source-registry.js.map +1 -0
  233. package/esm/data-source/data-source.d.ts +106 -0
  234. package/esm/data-source/data-source.d.ts.map +1 -0
  235. package/esm/data-source/data-source.js +77 -0
  236. package/esm/data-source/data-source.js.map +1 -0
  237. package/esm/database-dirty-tracker.d.ts +253 -0
  238. package/esm/database-dirty-tracker.d.ts.map +1 -0
  239. package/esm/database-dirty-tracker.js +389 -0
  240. package/esm/database-dirty-tracker.js.map +1 -0
  241. package/esm/drivers/mongo/mongo-id-generator.d.ts +116 -0
  242. package/esm/drivers/mongo/mongo-id-generator.d.ts.map +1 -0
  243. package/esm/drivers/mongo/mongo-id-generator.js +149 -0
  244. package/esm/drivers/mongo/mongo-id-generator.js.map +1 -0
  245. package/esm/drivers/mongo/mongo-migration-driver.d.ts +228 -0
  246. package/esm/drivers/mongo/mongo-migration-driver.d.ts.map +1 -0
  247. package/esm/drivers/mongo/mongo-migration-driver.js +524 -0
  248. package/esm/drivers/mongo/mongo-migration-driver.js.map +1 -0
  249. package/esm/drivers/mongo/mongo-query-builder.d.ts +922 -0
  250. package/esm/drivers/mongo/mongo-query-builder.d.ts.map +1 -0
  251. package/esm/drivers/mongo/mongo-query-builder.js +1740 -0
  252. package/esm/drivers/mongo/mongo-query-builder.js.map +1 -0
  253. package/esm/drivers/mongo/mongo-query-operations.d.ts +226 -0
  254. package/esm/drivers/mongo/mongo-query-operations.d.ts.map +1 -0
  255. package/esm/drivers/mongo/mongo-query-operations.js +270 -0
  256. package/esm/drivers/mongo/mongo-query-operations.js.map +1 -0
  257. package/esm/drivers/mongo/mongo-query-parser.d.ts +262 -0
  258. package/esm/drivers/mongo/mongo-query-parser.d.ts.map +1 -0
  259. package/esm/drivers/mongo/mongo-query-parser.js +1351 -0
  260. package/esm/drivers/mongo/mongo-query-parser.js.map +1 -0
  261. package/esm/drivers/mongo/mongo-sync-adapter.d.ts +79 -0
  262. package/esm/drivers/mongo/mongo-sync-adapter.d.ts.map +1 -0
  263. package/esm/drivers/mongo/mongo-sync-adapter.js +146 -0
  264. package/esm/drivers/mongo/mongo-sync-adapter.js.map +1 -0
  265. package/esm/drivers/mongo/mongodb-blueprint.d.ts +30 -0
  266. package/esm/drivers/mongo/mongodb-blueprint.d.ts.map +1 -0
  267. package/esm/drivers/mongo/mongodb-blueprint.js +51 -0
  268. package/esm/drivers/mongo/mongodb-blueprint.js.map +1 -0
  269. package/esm/drivers/mongo/mongodb-driver.d.ts +188 -0
  270. package/esm/drivers/mongo/mongodb-driver.d.ts.map +1 -0
  271. package/esm/drivers/mongo/mongodb-driver.js +411 -0
  272. package/esm/drivers/mongo/mongodb-driver.js.map +1 -0
  273. package/esm/drivers/mongo/types.d.ts +43 -0
  274. package/esm/drivers/mongo/types.d.ts.map +1 -0
  275. package/esm/errors/missing-data-source.error.d.ts +22 -0
  276. package/esm/errors/missing-data-source.error.d.ts.map +1 -0
  277. package/esm/errors/missing-data-source.error.js +29 -0
  278. package/esm/errors/missing-data-source.error.js.map +1 -0
  279. package/esm/events/model-events.d.ts +231 -0
  280. package/esm/events/model-events.d.ts.map +1 -0
  281. package/esm/events/model-events.js +259 -0
  282. package/esm/events/model-events.js.map +1 -0
  283. package/esm/expressions/aggregate-expressions.d.ts +215 -0
  284. package/esm/expressions/aggregate-expressions.d.ts.map +1 -0
  285. package/esm/expressions/aggregate-expressions.js +221 -0
  286. package/esm/expressions/aggregate-expressions.js.map +1 -0
  287. package/esm/expressions/index.d.ts +2 -0
  288. package/esm/expressions/index.d.ts.map +1 -0
  289. package/esm/index.d.ts +41 -0
  290. package/esm/index.d.ts.map +1 -0
  291. package/esm/index.js +1 -40
  292. package/esm/index.js.map +1 -1
  293. package/esm/migration/column-builder.d.ts +167 -0
  294. package/esm/migration/column-builder.d.ts.map +1 -0
  295. package/esm/migration/column-builder.js +217 -0
  296. package/esm/migration/column-builder.js.map +1 -0
  297. package/esm/migration/foreign-key-builder.d.ts +110 -0
  298. package/esm/migration/foreign-key-builder.d.ts.map +1 -0
  299. package/esm/migration/foreign-key-builder.js +129 -0
  300. package/esm/migration/foreign-key-builder.js.map +1 -0
  301. package/esm/migration/index.d.ts +6 -0
  302. package/esm/migration/index.d.ts.map +1 -0
  303. package/esm/migration/migration-runner.d.ts +231 -0
  304. package/esm/migration/migration-runner.d.ts.map +1 -0
  305. package/esm/migration/migration-runner.js +443 -0
  306. package/esm/migration/migration-runner.js.map +1 -0
  307. package/esm/migration/migration.js +1346 -0
  308. package/esm/migration/migration.js.map +1 -0
  309. package/esm/migration/types.d.ts +132 -0
  310. package/esm/migration/types.d.ts.map +1 -0
  311. package/esm/model/model.d.ts +1267 -0
  312. package/esm/model/model.d.ts.map +1 -0
  313. package/esm/model/model.js +1463 -0
  314. package/esm/model/model.js.map +1 -0
  315. package/esm/model/register-model.d.ts +80 -0
  316. package/esm/model/register-model.d.ts.map +1 -0
  317. package/esm/model/register-model.js +91 -0
  318. package/esm/model/register-model.js.map +1 -0
  319. package/esm/remover/database-remover.d.ts +100 -0
  320. package/esm/remover/database-remover.d.ts.map +1 -0
  321. package/esm/remover/database-remover.js +209 -0
  322. package/esm/remover/database-remover.js.map +1 -0
  323. package/esm/restorer/database-restorer.d.ts +131 -0
  324. package/esm/restorer/database-restorer.d.ts.map +1 -0
  325. package/esm/restorer/database-restorer.js +425 -0
  326. package/esm/restorer/database-restorer.js.map +1 -0
  327. package/esm/sync/index.d.ts +12 -0
  328. package/esm/sync/index.d.ts.map +1 -0
  329. package/esm/sync/model-events.d.ts +62 -0
  330. package/esm/sync/model-events.d.ts.map +1 -0
  331. package/esm/sync/model-events.js +49 -0
  332. package/esm/sync/model-events.js.map +1 -0
  333. package/esm/sync/model-sync-operation.d.ts +163 -0
  334. package/esm/sync/model-sync-operation.d.ts.map +1 -0
  335. package/esm/sync/model-sync-operation.js +292 -0
  336. package/esm/sync/model-sync-operation.js.map +1 -0
  337. package/esm/sync/model-sync.d.ts +130 -0
  338. package/esm/sync/model-sync.d.ts.map +1 -0
  339. package/esm/sync/model-sync.js +178 -0
  340. package/esm/sync/model-sync.js.map +1 -0
  341. package/esm/sync/sync-context.d.ts +70 -0
  342. package/esm/sync/sync-context.d.ts.map +1 -0
  343. package/esm/sync/sync-context.js +101 -0
  344. package/esm/sync/sync-context.js.map +1 -0
  345. package/esm/sync/sync-manager.d.ts +213 -0
  346. package/esm/sync/sync-manager.d.ts.map +1 -0
  347. package/esm/sync/sync-manager.js +689 -0
  348. package/esm/sync/sync-manager.js.map +1 -0
  349. package/esm/sync/types.d.ts +289 -0
  350. package/esm/sync/types.d.ts.map +1 -0
  351. package/esm/types.d.ts +45 -0
  352. package/esm/types.d.ts.map +1 -0
  353. package/esm/utils/connect-to-database.d.ts +246 -0
  354. package/esm/utils/connect-to-database.d.ts.map +1 -0
  355. package/esm/utils/connect-to-database.js +92 -0
  356. package/esm/utils/connect-to-database.js.map +1 -0
  357. package/esm/utils/database-writer.utils.d.ts +15 -0
  358. package/esm/utils/database-writer.utils.d.ts.map +1 -0
  359. package/esm/utils/database-writer.utils.js +14 -0
  360. package/esm/utils/database-writer.utils.js.map +1 -0
  361. package/esm/utils/define-model.js +100 -0
  362. package/esm/utils/define-model.js.map +1 -0
  363. package/esm/utils/once-connected.d.ts +146 -0
  364. package/esm/utils/once-connected.d.ts.map +1 -0
  365. package/esm/utils/once-connected.js +252 -0
  366. package/esm/utils/once-connected.js.map +1 -0
  367. package/esm/validation/database-seal-plugins.d.ts +2 -0
  368. package/esm/validation/database-seal-plugins.d.ts.map +1 -0
  369. package/esm/validation/database-seal-plugins.js +4 -0
  370. package/esm/validation/database-seal-plugins.js.map +1 -0
  371. package/esm/validation/database-writer-validation-error.d.ts +97 -0
  372. package/esm/validation/database-writer-validation-error.d.ts.map +1 -0
  373. package/esm/validation/database-writer-validation-error.js +160 -0
  374. package/esm/validation/database-writer-validation-error.js.map +1 -0
  375. package/esm/validation/index.d.ts +3 -0
  376. package/esm/validation/index.d.ts.map +1 -0
  377. package/esm/validation/mutators/embed-mutator.d.ts +9 -0
  378. package/esm/validation/mutators/embed-mutator.d.ts.map +1 -0
  379. package/esm/validation/mutators/embed-mutator.js +33 -0
  380. package/esm/validation/mutators/embed-mutator.js.map +1 -0
  381. package/esm/validation/plugins/embed-validator-plugin.d.ts +24 -0
  382. package/esm/validation/plugins/embed-validator-plugin.d.ts.map +1 -0
  383. package/esm/validation/plugins/embed-validator-plugin.js +18 -0
  384. package/esm/validation/plugins/embed-validator-plugin.js.map +1 -0
  385. package/esm/validation/rules/database-model-rule.d.ts +7 -0
  386. package/esm/validation/rules/database-model-rule.d.ts.map +1 -0
  387. package/esm/validation/rules/database-model-rule.js +27 -0
  388. package/esm/validation/rules/database-model-rule.js.map +1 -0
  389. package/esm/validation/transformers/embed-model-transformer.d.ts +3 -0
  390. package/esm/validation/transformers/embed-model-transformer.d.ts.map +1 -0
  391. package/esm/validation/transformers/embed-model-transformer.js +18 -0
  392. package/esm/validation/transformers/embed-model-transformer.js.map +1 -0
  393. package/esm/validation/validators/embed-validator.d.ts +21 -0
  394. package/esm/validation/validators/embed-validator.d.ts.map +1 -0
  395. package/esm/validation/validators/embed-validator.js +42 -0
  396. package/esm/validation/validators/embed-validator.js.map +1 -0
  397. package/esm/writer/database-writer.d.ts +181 -0
  398. package/esm/writer/database-writer.d.ts.map +1 -0
  399. package/esm/writer/database-writer.js +402 -0
  400. package/esm/writer/database-writer.js.map +1 -0
  401. package/package.json +61 -52
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Model sync operation class.
3
+ *
4
+ * Manages a single sync relationship between a source and target model.
5
+ * Subscribes to source model events and triggers sync operations when
6
+ * the source is updated or deleted.
7
+ *
8
+ * @module cascade-next/sync/model-sync-operation
9
+ */
10
+ import type { ChildModel, Model } from "../model/model";
11
+ import type { ModelSyncConfig, ModelSyncOperationContract } from "./types";
12
+ /**
13
+ * Manages a single model sync operation.
14
+ *
15
+ * Subscribes to source model events (updated, deleted) and triggers
16
+ * sync operations to update embedded data in target models.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * // Created via modelSync.sync() or Model.sync()
21
+ * const operation = new ModelSyncOperation(Category, Product, "category", false);
22
+ * operation
23
+ * .embed("embedMinimal")
24
+ * .watchFields(["name", "slug"])
25
+ * .unsetOnDelete();
26
+ * ```
27
+ */
28
+ export declare class ModelSyncOperation implements ModelSyncOperationContract {
29
+ /**
30
+ * Configuration for this sync operation.
31
+ */
32
+ private readonly config;
33
+ /**
34
+ * Active event subscriptions for cleanup.
35
+ */
36
+ private readonly subscriptions;
37
+ /**
38
+ * Whether this operation is currently subscribed to events.
39
+ */
40
+ private isSubscribed;
41
+ /**
42
+ * Create a new model sync operation.
43
+ *
44
+ * @param sourceModel - Source model class that triggers sync
45
+ * @param targetModel - Target model class that receives data
46
+ * @param targetField - Field path in target model
47
+ * @param isMany - Whether this syncs to an array field
48
+ */
49
+ constructor(sourceModelClass: ChildModel<Model>, targetModelClass: ChildModel<Model>, targetField: string, isMany: boolean);
50
+ /**
51
+ * Set the embed method to call on source model.
52
+ *
53
+ * @param embed - getter property name (e.g., "embedData", "embedMinimal") Or Array of fields
54
+ * @returns This operation for chaining
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * Category.sync(Product, "category").embed("embedMinimal");
59
+ * ```
60
+ */
61
+ embed(method: string | string[]): this;
62
+ /**
63
+ * Set the identifier field for array matching.
64
+ * Required when syncing to array fields (syncMany).
65
+ *
66
+ * @param field - Field name used as identifier (default: "id")
67
+ * @returns This operation for chaining
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * Tag.syncMany(Post, "tags").identifyBy("tagId");
72
+ * ```
73
+ */
74
+ identifyBy(field: string): this;
75
+ /**
76
+ * Set the maximum sync depth for chained operations.
77
+ *
78
+ * @param depth - Maximum depth (default: 3)
79
+ * @returns This operation for chaining
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * Category.sync(Product, "category").maxDepth(2);
84
+ * ```
85
+ */
86
+ maxDepth(depth: number): this;
87
+ /**
88
+ * Set which fields to watch for changes.
89
+ * Sync only triggers when these fields change.
90
+ *
91
+ * @param fields - Array of field names to watch (empty = all)
92
+ * @returns This operation for chaining
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * Category.sync(Product, "category").watchFields(["name", "slug"]);
97
+ * ```
98
+ */
99
+ watchFields(fields: string[]): this;
100
+ /**
101
+ * Unset the target field when source is deleted.
102
+ *
103
+ * @returns This operation for chaining
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * Category.sync(Product, "category").unsetOnDelete();
108
+ * ```
109
+ */
110
+ unsetOnDelete(): this;
111
+ /**
112
+ * Delete target documents when source is deleted.
113
+ *
114
+ * @returns This operation for chaining
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * User.sync(Profile, "user").removeOnDelete();
119
+ * ```
120
+ */
121
+ removeOnDelete(): this;
122
+ /**
123
+ * Subscribe to source model events.
124
+ * Called automatically in constructor.
125
+ */
126
+ private subscribe;
127
+ /**
128
+ * Unsubscribe from all events and cleanup.
129
+ * Called automatically when using modelSync.register().
130
+ */
131
+ unsubscribe(): void;
132
+ /**
133
+ * Cleanup the sync operations
134
+ */
135
+ $cleanup(): void;
136
+ /**
137
+ * Handle model updated event.
138
+ * Triggers sync to update embedded data in target models.
139
+ */
140
+ private handleModelUpdated;
141
+ /**
142
+ * Handle model deleted event.
143
+ * Triggers unset or remove based on configuration.
144
+ */
145
+ private handleModelDeleted;
146
+ /**
147
+ * Check if sync should proceed based on watched fields.
148
+ */
149
+ private shouldSync;
150
+ /**
151
+ * Build sync config compatible with SyncManager.
152
+ */
153
+ private buildSyncConfig;
154
+ /**
155
+ * Remove target documents that reference the deleted source.
156
+ */
157
+ private removeTargetDocuments;
158
+ /**
159
+ * Get the current configuration (for debugging/testing).
160
+ */
161
+ getConfig(): Readonly<ModelSyncConfig>;
162
+ }
163
+ //# sourceMappingURL=model-sync-operation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-sync-operation.d.ts","sourceRoot":"","sources":["../../src/sync/model-sync-operation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAIxD,OAAO,KAAK,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAE3E;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,kBAAmB,YAAW,0BAA0B;IACnE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IAEzD;;OAEG;IACH,OAAO,CAAC,YAAY,CAAS;IAE7B;;;;;;;OAOG;gBAED,gBAAgB,EAAE,UAAU,CAAC,KAAK,CAAC,EACnC,gBAAgB,EAAE,UAAU,CAAC,KAAK,CAAC,EACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO;IAsBjB;;;;;;;;;;OAUG;IACI,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAK7C;;;;;;;;;;;OAWG;IACI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC;;;;;;;;;;OAUG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKpC;;;;;;;;;;;OAWG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAK1C;;;;;;;;;OASG;IACI,aAAa,IAAI,IAAI;IAK5B;;;;;;;;;OASG;IACI,cAAc,IAAI,IAAI;IAS7B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAoBjB;;;OAGG;IACI,WAAW,IAAI,IAAI;IAS1B;;OAEG;IACI,QAAQ;IAQf;;;OAGG;IACH,OAAO,CAAC,kBAAkB,CAgCxB;IAEF;;;OAGG;IACH,OAAO,CAAC,kBAAkB,CA8BxB;IAMF;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;YACW,qBAAqB;IAQnC;;OAEG;IACI,SAAS,IAAI,QAAQ,CAAC,eAAe,CAAC;CAG9C"}
@@ -0,0 +1,292 @@
1
+ import events from'@mongez/events';import {getModelUpdatedEvent,getModelDeletedEvent}from'./model-events.js';import {DEFAULT_MAX_SYNC_DEPTH}from'./sync-context.js';import {SyncManager}from'./sync-manager.js';/**
2
+ * Model sync operation class.
3
+ *
4
+ * Manages a single sync relationship between a source and target model.
5
+ * Subscribes to source model events and triggers sync operations when
6
+ * the source is updated or deleted.
7
+ *
8
+ * @module cascade-next/sync/model-sync-operation
9
+ */
10
+ /**
11
+ * Manages a single model sync operation.
12
+ *
13
+ * Subscribes to source model events (updated, deleted) and triggers
14
+ * sync operations to update embedded data in target models.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // Created via modelSync.sync() or Model.sync()
19
+ * const operation = new ModelSyncOperation(Category, Product, "category", false);
20
+ * operation
21
+ * .embed("embedMinimal")
22
+ * .watchFields(["name", "slug"])
23
+ * .unsetOnDelete();
24
+ * ```
25
+ */
26
+ class ModelSyncOperation {
27
+ /**
28
+ * Configuration for this sync operation.
29
+ */
30
+ config;
31
+ /**
32
+ * Active event subscriptions for cleanup.
33
+ */
34
+ subscriptions = [];
35
+ /**
36
+ * Whether this operation is currently subscribed to events.
37
+ */
38
+ isSubscribed = false;
39
+ /**
40
+ * Create a new model sync operation.
41
+ *
42
+ * @param sourceModel - Source model class that triggers sync
43
+ * @param targetModel - Target model class that receives data
44
+ * @param targetField - Field path in target model
45
+ * @param isMany - Whether this syncs to an array field
46
+ */
47
+ constructor(sourceModelClass, targetModelClass, targetField, isMany) {
48
+ this.config = {
49
+ sourceModel: sourceModelClass,
50
+ targetModel: targetModelClass,
51
+ targetField,
52
+ isMany,
53
+ embedKey: "embedData",
54
+ identifierField: "id",
55
+ maxSyncDepth: DEFAULT_MAX_SYNC_DEPTH,
56
+ watchFields: [],
57
+ unsetOnDelete: false,
58
+ removeOnDelete: false,
59
+ };
60
+ this.subscribe();
61
+ }
62
+ // ============================================================================
63
+ // FLUENT CONFIGURATION
64
+ // ============================================================================
65
+ /**
66
+ * Set the embed method to call on source model.
67
+ *
68
+ * @param embed - getter property name (e.g., "embedData", "embedMinimal") Or Array of fields
69
+ * @returns This operation for chaining
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * Category.sync(Product, "category").embed("embedMinimal");
74
+ * ```
75
+ */
76
+ embed(method) {
77
+ this.config.embedKey = method;
78
+ return this;
79
+ }
80
+ /**
81
+ * Set the identifier field for array matching.
82
+ * Required when syncing to array fields (syncMany).
83
+ *
84
+ * @param field - Field name used as identifier (default: "id")
85
+ * @returns This operation for chaining
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * Tag.syncMany(Post, "tags").identifyBy("tagId");
90
+ * ```
91
+ */
92
+ identifyBy(field) {
93
+ this.config.identifierField = field;
94
+ return this;
95
+ }
96
+ /**
97
+ * Set the maximum sync depth for chained operations.
98
+ *
99
+ * @param depth - Maximum depth (default: 3)
100
+ * @returns This operation for chaining
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * Category.sync(Product, "category").maxDepth(2);
105
+ * ```
106
+ */
107
+ maxDepth(depth) {
108
+ this.config.maxSyncDepth = depth;
109
+ return this;
110
+ }
111
+ /**
112
+ * Set which fields to watch for changes.
113
+ * Sync only triggers when these fields change.
114
+ *
115
+ * @param fields - Array of field names to watch (empty = all)
116
+ * @returns This operation for chaining
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * Category.sync(Product, "category").watchFields(["name", "slug"]);
121
+ * ```
122
+ */
123
+ watchFields(fields) {
124
+ this.config.watchFields = fields;
125
+ return this;
126
+ }
127
+ /**
128
+ * Unset the target field when source is deleted.
129
+ *
130
+ * @returns This operation for chaining
131
+ *
132
+ * @example
133
+ * ```typescript
134
+ * Category.sync(Product, "category").unsetOnDelete();
135
+ * ```
136
+ */
137
+ unsetOnDelete() {
138
+ this.config.unsetOnDelete = true;
139
+ return this;
140
+ }
141
+ /**
142
+ * Delete target documents when source is deleted.
143
+ *
144
+ * @returns This operation for chaining
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * User.sync(Profile, "user").removeOnDelete();
149
+ * ```
150
+ */
151
+ removeOnDelete() {
152
+ this.config.removeOnDelete = true;
153
+ return this;
154
+ }
155
+ // ============================================================================
156
+ // LIFECYCLE
157
+ // ============================================================================
158
+ /**
159
+ * Subscribe to source model events.
160
+ * Called automatically in constructor.
161
+ */
162
+ subscribe() {
163
+ if (this.isSubscribed) {
164
+ return;
165
+ }
166
+ const sourceModel = this.config.sourceModel;
167
+ // Subscribe to model.updated event
168
+ this.subscriptions.push(events.subscribe(getModelUpdatedEvent(sourceModel), this.handleModelUpdated));
169
+ // Subscribe to model.deleted event
170
+ this.subscriptions.push(events.subscribe(getModelDeletedEvent(sourceModel), this.handleModelDeleted));
171
+ this.isSubscribed = true;
172
+ }
173
+ /**
174
+ * Unsubscribe from all events and cleanup.
175
+ * Called automatically when using modelSync.register().
176
+ */
177
+ unsubscribe() {
178
+ for (const subscription of this.subscriptions) {
179
+ subscription.unsubscribe();
180
+ }
181
+ this.subscriptions.length = 0;
182
+ this.isSubscribed = false;
183
+ }
184
+ /**
185
+ * Cleanup the sync operations
186
+ */
187
+ $cleanup() {
188
+ return this.unsubscribe();
189
+ }
190
+ // ============================================================================
191
+ // EVENT HANDLERS
192
+ // ============================================================================
193
+ /**
194
+ * Handle model updated event.
195
+ * Triggers sync to update embedded data in target models.
196
+ */
197
+ handleModelUpdated = async (model, changedFields) => {
198
+ // Check if we should sync based on watched fields
199
+ if (!this.shouldSync(changedFields)) {
200
+ return;
201
+ }
202
+ try {
203
+ const primaryKey = this.config.sourceModel.primaryKey || "id";
204
+ const sourceId = model.get(primaryKey);
205
+ if (!sourceId) {
206
+ return;
207
+ }
208
+ // Get the driver from the source model's data source
209
+ const dataSource = this.config.sourceModel.getDataSource();
210
+ const driver = dataSource.driver;
211
+ // Create sync manager and execute
212
+ const syncManager = new SyncManager(this.config.sourceModel, driver);
213
+ await syncManager.syncUpdateWithConfig(sourceId, model, changedFields, this.buildSyncConfig());
214
+ }
215
+ catch (error) {
216
+ console.error(`[ModelSync] Failed to sync ${this.config.sourceModel.name} -> ${this.config.targetModel.name}:`, error);
217
+ }
218
+ };
219
+ /**
220
+ * Handle model deleted event.
221
+ * Triggers unset or remove based on configuration.
222
+ */
223
+ handleModelDeleted = async (model) => {
224
+ if (!this.config.unsetOnDelete && !this.config.removeOnDelete) {
225
+ return;
226
+ }
227
+ try {
228
+ const primaryKey = this.config.sourceModel.primaryKey || "id";
229
+ const sourceId = model.get(primaryKey);
230
+ if (!sourceId) {
231
+ return;
232
+ }
233
+ const dataSource = this.config.sourceModel.getDataSource();
234
+ const driver = dataSource.driver;
235
+ if (this.config.removeOnDelete) {
236
+ // Delete all target documents that reference this source
237
+ await this.removeTargetDocuments(sourceId, driver);
238
+ }
239
+ else if (this.config.unsetOnDelete) {
240
+ // Unset the field in target documents
241
+ const syncManager = new SyncManager(this.config.sourceModel, driver);
242
+ await syncManager.syncDeleteWithConfig(sourceId, this.buildSyncConfig());
243
+ }
244
+ }
245
+ catch (error) {
246
+ console.error(`[ModelSync] Failed to handle delete for ${this.config.sourceModel.name}:`, error);
247
+ }
248
+ };
249
+ // ============================================================================
250
+ // HELPERS
251
+ // ============================================================================
252
+ /**
253
+ * Check if sync should proceed based on watched fields.
254
+ */
255
+ shouldSync(changedFields) {
256
+ if (this.config.watchFields.length === 0) {
257
+ return true; // Watch all fields
258
+ }
259
+ return this.config.watchFields.some((field) => changedFields.includes(field));
260
+ }
261
+ /**
262
+ * Build sync config compatible with SyncManager.
263
+ */
264
+ buildSyncConfig() {
265
+ return {
266
+ targetField: this.config.targetField,
267
+ isMany: this.config.isMany,
268
+ embedKey: this.config.embedKey,
269
+ identifierField: this.config.identifierField,
270
+ maxSyncDepth: this.config.maxSyncDepth,
271
+ preventCircularSync: true,
272
+ watchFields: this.config.watchFields,
273
+ unsetOnDelete: this.config.unsetOnDelete,
274
+ targetModelClass: this.config.targetModel,
275
+ };
276
+ }
277
+ /**
278
+ * Remove target documents that reference the deleted source.
279
+ */
280
+ async removeTargetDocuments(sourceId, driver) {
281
+ const filter = this.config.isMany
282
+ ? { [`${this.config.targetField}.${this.config.identifierField}`]: sourceId }
283
+ : { [`${this.config.targetField}.${this.config.identifierField}`]: sourceId };
284
+ await driver.deleteMany(this.config.targetModel.table, filter);
285
+ }
286
+ /**
287
+ * Get the current configuration (for debugging/testing).
288
+ */
289
+ getConfig() {
290
+ return { ...this.config };
291
+ }
292
+ }export{ModelSyncOperation};//# sourceMappingURL=model-sync-operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-sync-operation.js","sources":["../../src/sync/model-sync-operation.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * ModelSync facade for registering sync operations.
3
+ *
4
+ * Provides a clean API for defining sync relationships between models
5
+ * with automatic cleanup support for HMR (Hot Module Replacement).
6
+ *
7
+ * @module cascade-next/sync/model-sync
8
+ */
9
+ import type { ChildModel, Model } from "../model/model";
10
+ import type { ModelSyncContract, ModelSyncOperationContract } from "./types";
11
+ /**
12
+ * ModelSync facade implementation.
13
+ *
14
+ * Manages sync operation registration with scoped cleanup support.
15
+ * Uses a registration stack to track operations created during
16
+ * a `register()` callback for proper HMR cleanup.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * // In events file
21
+ * export const cleanup = modelSync.register(() => {
22
+ * Category.sync(Product, "category");
23
+ * Tag.syncMany(Post, "tags").identifyBy("id");
24
+ * });
25
+ * ```
26
+ */
27
+ declare class ModelSyncFacade implements ModelSyncContract {
28
+ /**
29
+ * All active sync operations.
30
+ */
31
+ private readonly operations;
32
+ /**
33
+ * Stack for tracking operations during register() callbacks.
34
+ * Each element is an array of operations created in that scope.
35
+ */
36
+ private readonly registrationStack;
37
+ /**
38
+ * Create a sync operation for a single embedded document.
39
+ *
40
+ * When the source model is updated, the target model's field
41
+ * will be updated with the embedded data.
42
+ *
43
+ * @param source - Source model class that triggers sync
44
+ * @param target - Target model class that receives data
45
+ * @param field - Field path in target model
46
+ * @returns Sync operation for chaining configuration
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * // When Category updates, update Product.category
51
+ * modelSync.sync(Category, Product, "category");
52
+ *
53
+ * // With configuration
54
+ * modelSync.sync(Category, Product, "category")
55
+ * .embed("embedMinimal")
56
+ * .watchFields(["name", "slug"]);
57
+ * ```
58
+ */
59
+ sync(source: ChildModel<Model>, target: ChildModel<Model>, field: string): ModelSyncOperationContract;
60
+ /**
61
+ * Create a sync operation for an array of embedded documents.
62
+ *
63
+ * When the source model is updated, the corresponding element
64
+ * in the target model's array field will be updated.
65
+ *
66
+ * @param source - Source model class that triggers sync
67
+ * @param target - Target model class that receives data
68
+ * @param field - Array field path in target model
69
+ * @returns Sync operation for chaining configuration
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * // When Tag updates, update Post.tags[i] where tags[i].id matches
74
+ * modelSync.syncMany(Tag, Post, "tags").identifyBy("id");
75
+ * ```
76
+ */
77
+ syncMany(source: ChildModel<Model>, target: ChildModel<Model>, field: string): ModelSyncOperationContract;
78
+ /**
79
+ * Register sync operations with automatic cleanup.
80
+ *
81
+ * Executes the callback function which should contain sync registrations.
82
+ * Returns a cleanup function that unsubscribes all operations created
83
+ * during the callback - perfect for HMR module cleanup.
84
+ *
85
+ * @param callback - Function that registers sync operations
86
+ * @returns Cleanup function that unsubscribes all registered operations
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * // In src/app/blog/events/sync.ts
91
+ * export const cleanup = modelSync.register(() => {
92
+ * Category.sync(Product, "category");
93
+ * Tag.syncMany(Post, "tags").identifyBy("id");
94
+ * Author.sync(Article, "author").unsetOnDelete();
95
+ * });
96
+ * ```
97
+ */
98
+ register(callback: () => void): () => void;
99
+ /**
100
+ * Clear all registered sync operations.
101
+ * Useful for testing or complete reset.
102
+ */
103
+ clear(): void;
104
+ /**
105
+ * Get count of active sync operations.
106
+ * Useful for debugging and testing.
107
+ */
108
+ get count(): number;
109
+ /**
110
+ * Track a new operation in global list and current registration scope.
111
+ */
112
+ private trackOperation;
113
+ }
114
+ /**
115
+ * Global modelSync facade instance.
116
+ *
117
+ * Use this to register sync operations between models.
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * import { modelSync } from "@warlock.js/cascade";
122
+ *
123
+ * export const cleanup = modelSync.register(() => {
124
+ * Category.sync(Product, "category");
125
+ * });
126
+ * ```
127
+ */
128
+ export declare const modelSync: ModelSyncFacade;
129
+ export {};
130
+ //# sourceMappingURL=model-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-sync.d.ts","sourceRoot":"","sources":["../../src/sync/model-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAE7E;;;;;;;;;;;;;;;GAeG;AACH,cAAM,eAAgB,YAAW,iBAAiB;IAChD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4B;IAEvD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA8B;IAMhE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,IAAI,CACT,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EACzB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EACzB,KAAK,EAAE,MAAM,GACZ,0BAA0B;IAM7B;;;;;;;;;;;;;;;;OAgBG;IACI,QAAQ,CACb,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EACzB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EACzB,KAAK,EAAE,MAAM,GACZ,0BAA0B;IAM7B;;;;;;;;;;;;;;;;;;;OAmBG;IACI,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IA2BjD;;;OAGG;IACI,KAAK,IAAI,IAAI;IAOpB;;;OAGG;IACH,IAAW,KAAK,IAAI,MAAM,CAEzB;IAMD;;OAEG;IACH,OAAO,CAAC,cAAc;CAUvB;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,SAAS,iBAAwB,CAAC"}