@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,689 @@
1
+ 'use strict';var model=require('../model/model.js'),syncContext=require('./sync-context.js');/**
2
+ * Sync manager service for handling multi-level sync operations.
3
+ *
4
+ * @module cascade-next/sync/sync-manager
5
+ */
6
+ /**
7
+ * Manages sync operations across models with multi-level support.
8
+ */
9
+ class SyncManager {
10
+ sourceModel;
11
+ driver;
12
+ /**
13
+ * Creates a new sync manager.
14
+ *
15
+ * @param sourceModel - The source model class
16
+ * @param driver - The database driver
17
+ */
18
+ constructor(sourceModel, driver) {
19
+ this.sourceModel = sourceModel;
20
+ this.driver = driver;
21
+ }
22
+ /**
23
+ * Executes sync operations for a model update.
24
+ *
25
+ * @param sourceId - The source model ID
26
+ * @param updatedData - The updated data to sync (Model instance or plain data)
27
+ * @param changedFields - Fields that were changed (for filtering)
28
+ * @returns Sync result with success status and details
29
+ */
30
+ async syncUpdate(sourceId, updatedData, changedFields) {
31
+ try {
32
+ const syncConfigs = this.getSyncConfigs();
33
+ if (syncConfigs.length === 0) {
34
+ return this.createEmptyResult();
35
+ }
36
+ const options = {
37
+ currentDepth: 1,
38
+ syncChain: [this.sourceModel.name],
39
+ maxDepth: syncContext.DEFAULT_MAX_SYNC_DEPTH,
40
+ preventCircular: true,
41
+ };
42
+ const instructions = await this.collectInstructions({
43
+ sourceId,
44
+ updatedData,
45
+ changedFields,
46
+ syncConfigs,
47
+ options,
48
+ });
49
+ return await this.executeInstructions(instructions);
50
+ }
51
+ catch (error) {
52
+ // Catch-all error handler for unexpected failures
53
+ console.error(`Sync update failed for ${this.sourceModel.name}#${sourceId}:`, error);
54
+ return {
55
+ success: false,
56
+ attempted: 0,
57
+ succeeded: 0,
58
+ failed: 1,
59
+ errors: [
60
+ {
61
+ instruction: {
62
+ targetTable: "",
63
+ targetModel: "",
64
+ filter: {},
65
+ update: {},
66
+ depth: 0,
67
+ chain: [this.sourceModel.name],
68
+ sourceModel: this.sourceModel.name,
69
+ sourceId,
70
+ },
71
+ error: error instanceof Error ? error : new Error(String(error)),
72
+ },
73
+ ],
74
+ depthReached: 0,
75
+ contexts: [],
76
+ };
77
+ }
78
+ }
79
+ /**
80
+ * Executes sync operations for a model update with a specific config.
81
+ * Used by ModelSyncOperation for event-based sync.
82
+ *
83
+ * @param sourceId - The source model ID
84
+ * @param updatedData - The updated data to sync
85
+ * @param changedFields - Fields that were changed
86
+ * @param config - The sync configuration to use
87
+ * @returns Sync result with success status and details
88
+ */
89
+ async syncUpdateWithConfig(sourceId, updatedData, changedFields, config) {
90
+ try {
91
+ const options = {
92
+ currentDepth: 1,
93
+ syncChain: [this.sourceModel.name],
94
+ maxDepth: config.maxSyncDepth,
95
+ preventCircular: config.preventCircularSync,
96
+ };
97
+ const instructions = await this.collectInstructions({
98
+ sourceId,
99
+ updatedData,
100
+ changedFields,
101
+ syncConfigs: [config],
102
+ options,
103
+ });
104
+ return await this.executeInstructions(instructions);
105
+ }
106
+ catch (error) {
107
+ console.error(`Sync update with config failed for ${this.sourceModel.name}#${sourceId}:`, error);
108
+ return {
109
+ success: false,
110
+ attempted: 0,
111
+ succeeded: 0,
112
+ failed: 1,
113
+ errors: [
114
+ {
115
+ instruction: {
116
+ targetTable: "",
117
+ targetModel: "",
118
+ filter: {},
119
+ update: {},
120
+ depth: 0,
121
+ chain: [this.sourceModel.name],
122
+ sourceModel: this.sourceModel.name,
123
+ sourceId,
124
+ },
125
+ error: error instanceof Error ? error : new Error(String(error)),
126
+ },
127
+ ],
128
+ depthReached: 0,
129
+ contexts: [],
130
+ };
131
+ }
132
+ }
133
+ /**
134
+ * Executes sync delete operations with a specific config.
135
+ * Used by ModelSyncOperation for event-based sync.
136
+ *
137
+ * @param sourceId - The source model ID
138
+ * @param config - The sync configuration to use
139
+ * @returns Sync result with success status and details
140
+ */
141
+ async syncDeleteWithConfig(sourceId, config) {
142
+ try {
143
+ if (!config.unsetOnDelete) {
144
+ return this.createEmptyResult();
145
+ }
146
+ const options = {
147
+ currentDepth: 1,
148
+ syncChain: [this.sourceModel.name],
149
+ maxDepth: config.maxSyncDepth,
150
+ preventCircular: config.preventCircularSync,
151
+ };
152
+ const instructions = await this.collectDeleteInstructions(sourceId, [config], options);
153
+ return await this.executeInstructions(instructions);
154
+ }
155
+ catch (error) {
156
+ console.error(`Sync delete with config failed for ${this.sourceModel.name}#${sourceId}:`, error);
157
+ return {
158
+ success: false,
159
+ attempted: 0,
160
+ succeeded: 0,
161
+ failed: 1,
162
+ errors: [
163
+ {
164
+ instruction: {
165
+ targetTable: "",
166
+ targetModel: "",
167
+ filter: {},
168
+ update: {},
169
+ depth: 0,
170
+ chain: [this.sourceModel.name],
171
+ sourceModel: this.sourceModel.name,
172
+ sourceId,
173
+ },
174
+ error: error instanceof Error ? error : new Error(String(error)),
175
+ },
176
+ ],
177
+ depthReached: 0,
178
+ contexts: [],
179
+ };
180
+ }
181
+ }
182
+ /**
183
+ * Executes sync operations for a model deletion.
184
+ *
185
+ * @param sourceId - The source model ID
186
+ * @returns Sync result with success status and details
187
+ */
188
+ async syncDelete(sourceId) {
189
+ try {
190
+ const syncConfigs = this.getSyncConfigs();
191
+ if (syncConfigs.length === 0) {
192
+ return this.createEmptyResult();
193
+ }
194
+ const options = {
195
+ currentDepth: 1,
196
+ syncChain: [this.sourceModel.name],
197
+ maxDepth: syncContext.DEFAULT_MAX_SYNC_DEPTH,
198
+ preventCircular: true,
199
+ };
200
+ const instructions = await this.collectDeleteInstructions(sourceId, syncConfigs, options);
201
+ return await this.executeInstructions(instructions);
202
+ }
203
+ catch (error) {
204
+ // Catch-all error handler for unexpected failures
205
+ console.error(`Sync delete failed for ${this.sourceModel.name}#${sourceId}:`, error);
206
+ return {
207
+ success: false,
208
+ attempted: 0,
209
+ succeeded: 0,
210
+ failed: 1,
211
+ errors: [
212
+ {
213
+ instruction: {
214
+ targetTable: "",
215
+ targetModel: "",
216
+ filter: {},
217
+ update: {},
218
+ depth: 0,
219
+ chain: [this.sourceModel.name],
220
+ sourceModel: this.sourceModel.name,
221
+ sourceId,
222
+ },
223
+ error: error instanceof Error ? error : new Error(String(error)),
224
+ },
225
+ ],
226
+ depthReached: 0,
227
+ contexts: [],
228
+ };
229
+ }
230
+ }
231
+ /**
232
+ * Collects sync instructions recursively with depth limiting.
233
+ *
234
+ * @param payload - Data payload
235
+ * @returns Array of sync instructions
236
+ */
237
+ async collectInstructions(payload) {
238
+ const { sourceId, updatedData, changedFields, syncConfigs, options } = payload;
239
+ const instructions = [];
240
+ for (const config of syncConfigs) {
241
+ // Check if we should sync based on watched fields
242
+ if (!this.shouldSync(config, changedFields)) {
243
+ continue;
244
+ }
245
+ // Validate depth and circular references
246
+ const validation = syncContext.SyncContextManager.validate(options.currentDepth, options.syncChain, config.targetModelClass.name, config.maxSyncDepth, config.preventCircularSync);
247
+ if (!validation.valid) {
248
+ console.warn(`Sync validation failed: ${validation.error}`);
249
+ continue;
250
+ }
251
+ // Get embedded data (handle both Model instance and plain data)
252
+ const embedData = await this.getEmbedData(updatedData, config);
253
+ // Build instruction
254
+ const instruction = this.buildUpdateInstruction(sourceId, config, embedData, options);
255
+ instructions.push(instruction);
256
+ // Emit syncing event
257
+ await this.emitSyncingEvent(instruction);
258
+ // Recursively collect instructions for next level
259
+ if (syncContext.SyncContextManager.canSyncDeeper(options.currentDepth, config.maxSyncDepth)) {
260
+ const nextLevelInstructions = await this.collectNextLevelInstructions(instruction, embedData, changedFields, config, options);
261
+ instructions.push(...nextLevelInstructions);
262
+ }
263
+ }
264
+ return instructions;
265
+ }
266
+ /**
267
+ * Collects delete sync instructions.
268
+ *
269
+ * @param sourceId - Source model ID
270
+ * @param syncConfigs - Sync configurations
271
+ * @param options - Instruction options
272
+ * @returns Array of sync instructions
273
+ */
274
+ async collectDeleteInstructions(sourceId, syncConfigs, options) {
275
+ const instructions = [];
276
+ for (const config of syncConfigs) {
277
+ if (!config.unsetOnDelete) {
278
+ continue;
279
+ }
280
+ const validation = syncContext.SyncContextManager.validate(options.currentDepth, options.syncChain, config.targetModelClass.name, config.maxSyncDepth, config.preventCircularSync);
281
+ if (!validation.valid) {
282
+ continue;
283
+ }
284
+ const instruction = this.buildDeleteInstruction(sourceId, config, options);
285
+ instructions.push(instruction);
286
+ await this.emitSyncingEvent(instruction);
287
+ }
288
+ return instructions;
289
+ }
290
+ /**
291
+ * Collects instructions for the next level in the sync chain.
292
+ *
293
+ * @param parentInstruction - The parent instruction
294
+ * @param embedData - Embedded data from parent
295
+ * @param changedFields - Changed fields
296
+ * @param parentConfig - Parent sync config
297
+ * @param parentOptions - Parent instruction options
298
+ * @returns Array of next-level sync instructions
299
+ */
300
+ async collectNextLevelInstructions(parentInstruction, embedData, changedFields, parentConfig, parentOptions) {
301
+ const targetModelClass = parentConfig.targetModelClass;
302
+ const targetSyncConfigs = this.getSyncConfigsForModel(targetModelClass);
303
+ if (targetSyncConfigs.length === 0) {
304
+ return [];
305
+ }
306
+ const nextOptions = {
307
+ currentDepth: parentOptions.currentDepth + 1,
308
+ syncChain: syncContext.SyncContextManager.extendChain(parentOptions.syncChain, targetModelClass.name),
309
+ maxDepth: Math.min(parentConfig.maxSyncDepth, parentOptions.maxDepth),
310
+ preventCircular: parentOptions.preventCircular && parentConfig.preventCircularSync,
311
+ };
312
+ // Get the ID from embed data for next level
313
+ const sourceId = embedData[parentConfig.identifierField];
314
+ return await this.collectInstructions({
315
+ sourceId,
316
+ updatedData: embedData,
317
+ changedFields,
318
+ syncConfigs: targetSyncConfigs,
319
+ options: nextOptions,
320
+ });
321
+ }
322
+ /**
323
+ * Builds an update sync instruction.
324
+ *
325
+ * @param sourceId - Source model ID
326
+ * @param config - Sync configuration
327
+ * @param embedData - Embedded data to sync
328
+ * @param options - Instruction options
329
+ * @returns Sync instruction
330
+ */
331
+ buildUpdateInstruction(sourceId, config, embedData, options) {
332
+ const targetModelClass = config.targetModelClass;
333
+ const filter = this.buildFilter(sourceId, config);
334
+ const update = this.buildUpdate(embedData, config);
335
+ const instruction = {
336
+ targetTable: targetModelClass.table,
337
+ targetModel: targetModelClass.name,
338
+ filter,
339
+ update,
340
+ depth: options.currentDepth,
341
+ chain: [...options.syncChain],
342
+ sourceModel: this.sourceModel.name,
343
+ sourceId,
344
+ };
345
+ // Add array update metadata if needed
346
+ if (config.isMany) {
347
+ instruction.isArrayUpdate = true;
348
+ instruction.arrayField = config.targetField;
349
+ instruction.identifierField = config.identifierField;
350
+ instruction.identifierValue = sourceId;
351
+ }
352
+ return instruction;
353
+ }
354
+ /**
355
+ * Builds a delete sync instruction.
356
+ *
357
+ * @param sourceId - Source model ID
358
+ * @param config - Sync configuration
359
+ * @param options - Instruction options
360
+ * @returns Sync instruction
361
+ */
362
+ buildDeleteInstruction(sourceId, config, options) {
363
+ const targetModelClass = config.targetModelClass;
364
+ const filter = this.buildFilter(sourceId, config);
365
+ const update = { $unset: { [config.targetField]: 1 } };
366
+ return {
367
+ targetTable: targetModelClass.table,
368
+ targetModel: targetModelClass.name,
369
+ filter,
370
+ update,
371
+ depth: options.currentDepth,
372
+ chain: [...options.syncChain],
373
+ sourceModel: this.sourceModel.name,
374
+ sourceId,
375
+ };
376
+ }
377
+ /**
378
+ * Builds a filter for identifying target documents.
379
+ *
380
+ * @param sourceId - Source model ID
381
+ * @param config - Sync configuration
382
+ * @returns Filter object
383
+ */
384
+ buildFilter(sourceId, config) {
385
+ if (config.isMany) {
386
+ // For arrays: { "products.id": productId }
387
+ return { [`${config.targetField}.${config.identifierField}`]: sourceId };
388
+ }
389
+ else {
390
+ // For single: { "category.id": categoryId }
391
+ return { [`${config.targetField}.${config.identifierField}`]: sourceId };
392
+ }
393
+ }
394
+ /**
395
+ * Builds an update operation for syncing data.
396
+ *
397
+ * @param embedData - Embedded data to sync
398
+ * @param config - Sync configuration
399
+ * @returns Update operation object
400
+ */
401
+ buildUpdate(embedData, config) {
402
+ if (config.isMany) {
403
+ // For arrays: use positional operator $
404
+ return { $set: { [`${config.targetField}.$`]: embedData } };
405
+ }
406
+ else {
407
+ // For single: direct set
408
+ return { $set: { [config.targetField]: embedData } };
409
+ }
410
+ }
411
+ /**
412
+ * Executes sync instructions with batch optimization.
413
+ * Groups by depth and target table for optimal batching.
414
+ *
415
+ * @param instructions - Array of sync instructions
416
+ * @returns Sync result
417
+ */
418
+ async executeInstructions(instructions) {
419
+ const result = {
420
+ success: true,
421
+ attempted: instructions.length,
422
+ succeeded: 0,
423
+ failed: 0,
424
+ errors: [],
425
+ depthReached: 0,
426
+ contexts: [],
427
+ };
428
+ if (instructions.length === 0) {
429
+ return result;
430
+ }
431
+ // Group instructions by depth for sequential execution
432
+ const instructionsByDepth = this.groupByDepth(instructions);
433
+ for (const [depth, depthInstructions] of instructionsByDepth) {
434
+ result.depthReached = Math.max(result.depthReached, depth);
435
+ // Further group by target table for better batching
436
+ const instructionsByTable = this.groupByTable(depthInstructions);
437
+ for (const [table, tableInstructions] of instructionsByTable) {
438
+ try {
439
+ // Try batch execution first (all instructions for this table)
440
+ await this.executeBatch(tableInstructions, result);
441
+ }
442
+ catch (batchError) {
443
+ // Fallback to individual execution on batch failure
444
+ console.warn(`Batch execution failed for table ${table} at depth ${depth}, falling back to individual execution`);
445
+ await this.executeIndividual(tableInstructions, result);
446
+ }
447
+ }
448
+ }
449
+ result.success = result.failed === 0;
450
+ return result;
451
+ }
452
+ /**
453
+ * Executes instructions in batch.
454
+ *
455
+ * @param instructions - Instructions to execute
456
+ * @param result - Result object to update
457
+ */
458
+ async executeBatch(instructions, result) {
459
+ for (const instruction of instructions) {
460
+ try {
461
+ const updateResult = await this.driver.updateMany(instruction.targetTable, instruction.filter, instruction.update);
462
+ const context = syncContext.SyncContextManager.createContext(instruction, updateResult.modifiedCount);
463
+ result.contexts.push(context);
464
+ result.succeeded++;
465
+ await this.emitSyncedEvent(context);
466
+ }
467
+ catch (error) {
468
+ throw error; // Re-throw for batch fallback
469
+ }
470
+ }
471
+ }
472
+ /**
473
+ * Executes instructions individually (fallback).
474
+ * Provides detailed error reporting for each failed instruction.
475
+ *
476
+ * @param instructions - Instructions to execute
477
+ * @param result - Result object to update
478
+ */
479
+ async executeIndividual(instructions, result) {
480
+ for (const instruction of instructions) {
481
+ try {
482
+ const updateResult = await this.driver.updateMany(instruction.targetTable, instruction.filter, instruction.update);
483
+ const context = syncContext.SyncContextManager.createContext(instruction, updateResult.modifiedCount);
484
+ result.contexts.push(context);
485
+ result.succeeded++;
486
+ await this.emitSyncedEvent(context);
487
+ }
488
+ catch (error) {
489
+ result.failed++;
490
+ const errorMessage = this.formatSyncError(instruction, error);
491
+ const syncError = new Error(errorMessage);
492
+ // Preserve original error stack if available
493
+ if (error instanceof Error && error.stack) {
494
+ syncError.stack = error.stack;
495
+ }
496
+ result.errors.push({
497
+ instruction,
498
+ error: syncError,
499
+ });
500
+ // Log detailed error for debugging
501
+ console.error(`Sync operation failed:`, {
502
+ sourceModel: instruction.sourceModel,
503
+ sourceId: instruction.sourceId,
504
+ targetModel: instruction.targetModel,
505
+ targetTable: instruction.targetTable,
506
+ depth: instruction.depth,
507
+ chain: syncContext.SyncContextManager.formatChain(instruction.chain),
508
+ filter: instruction.filter,
509
+ error: errorMessage,
510
+ });
511
+ }
512
+ }
513
+ }
514
+ /**
515
+ * Formats a sync error with detailed context.
516
+ *
517
+ * @param instruction - The failed instruction
518
+ * @param error - The error that occurred
519
+ * @returns Formatted error message
520
+ */
521
+ formatSyncError(instruction, error) {
522
+ const baseMessage = error instanceof Error ? error.message : String(error);
523
+ const chain = syncContext.SyncContextManager.formatChain(instruction.chain);
524
+ return [
525
+ `Sync failed at depth ${instruction.depth}:`,
526
+ `Chain: ${chain} → ${instruction.targetModel}`,
527
+ `Source: ${instruction.sourceModel}#${instruction.sourceId}`,
528
+ `Target: ${instruction.targetTable}`,
529
+ `Error: ${baseMessage}`,
530
+ ].join(" | ");
531
+ }
532
+ /**
533
+ * Groups instructions by depth for batch processing.
534
+ *
535
+ * @param instructions - Instructions to group
536
+ * @returns Map of depth to instructions (sorted ascending)
537
+ */
538
+ groupByDepth(instructions) {
539
+ const grouped = new Map();
540
+ for (const instruction of instructions) {
541
+ const depth = instruction.depth;
542
+ if (!grouped.has(depth)) {
543
+ grouped.set(depth, []);
544
+ }
545
+ grouped.get(depth).push(instruction);
546
+ }
547
+ // Sort by depth (ascending) for sequential execution
548
+ return new Map([...grouped.entries()].sort((a, b) => a[0] - b[0]));
549
+ }
550
+ /**
551
+ * Groups instructions by target table for batch optimization.
552
+ *
553
+ * @param instructions - Instructions to group
554
+ * @returns Map of table name to instructions
555
+ */
556
+ groupByTable(instructions) {
557
+ const grouped = new Map();
558
+ for (const instruction of instructions) {
559
+ const table = instruction.targetTable;
560
+ if (!grouped.has(table)) {
561
+ grouped.set(table, []);
562
+ }
563
+ grouped.get(table).push(instruction);
564
+ }
565
+ return grouped;
566
+ }
567
+ /**
568
+ * Checks if sync should proceed based on watched fields.
569
+ *
570
+ * @param config - Sync configuration
571
+ * @param changedFields - Fields that changed
572
+ * @returns True if sync should proceed
573
+ */
574
+ shouldSync(config, changedFields) {
575
+ if (config.watchFields.length === 0) {
576
+ return true; // Watch all fields
577
+ }
578
+ return config.watchFields.some((field) => changedFields.includes(field));
579
+ }
580
+ /**
581
+ * Gets embedded data from the source model.
582
+ *
583
+ * @param data - Source model data or Model instance
584
+ * @param config - Sync configuration
585
+ * @returns Embedded data
586
+ */
587
+ async getEmbedData(data, config) {
588
+ // If data is a Model instance, call the embed method on it
589
+ if (data instanceof model.Model) {
590
+ if (Array.isArray(config.embedKey)) {
591
+ return data.only(config.embedKey);
592
+ }
593
+ if (typeof data[config.embedKey] !== "function") {
594
+ return data[config.embedKey];
595
+ }
596
+ // Fallback: use embedData() if available
597
+ if (typeof data.embedData === "function") {
598
+ return data.embedData;
599
+ }
600
+ // Last resort: return model data
601
+ return data.data;
602
+ }
603
+ // Otherwise, return the data as-is
604
+ return data;
605
+ }
606
+ /**
607
+ * Gets sync configurations from the source model.
608
+ *
609
+ * @returns Array of sync configurations
610
+ */
611
+ getSyncConfigs() {
612
+ const syncWith = this.sourceModel.syncWith;
613
+ if (!syncWith || !Array.isArray(syncWith)) {
614
+ return [];
615
+ }
616
+ return syncWith.map((builder) => typeof builder.build === "function" ? builder.build() : builder);
617
+ }
618
+ /**
619
+ * Gets sync configurations for a specific model.
620
+ *
621
+ * @param modelClass - The model class
622
+ * @returns Array of sync configurations
623
+ */
624
+ getSyncConfigsForModel(modelClass) {
625
+ const syncWith = modelClass.syncWith;
626
+ if (!syncWith || !Array.isArray(syncWith)) {
627
+ return [];
628
+ }
629
+ return syncWith.map((builder) => typeof builder.build === "function" ? builder.build() : builder);
630
+ }
631
+ /**
632
+ * Emits a syncing event.
633
+ *
634
+ * @param instruction - The sync instruction
635
+ */
636
+ async emitSyncingEvent(instruction) {
637
+ const payload = {
638
+ sourceModel: instruction.sourceModel,
639
+ sourceId: instruction.sourceId,
640
+ targetModel: instruction.targetModel,
641
+ filter: instruction.filter,
642
+ update: instruction.update,
643
+ affectedCount: 0,
644
+ depth: instruction.depth,
645
+ chain: instruction.chain,
646
+ };
647
+ // Emit on source model
648
+ if (typeof this.sourceModel.emitSyncEvent === "function") {
649
+ await this.sourceModel.emitSyncEvent("syncing", payload);
650
+ }
651
+ }
652
+ /**
653
+ * Emits a synced event.
654
+ *
655
+ * @param context - The sync context
656
+ */
657
+ async emitSyncedEvent(context) {
658
+ const payload = {
659
+ sourceModel: context.sourceModel,
660
+ sourceId: context.sourceId,
661
+ targetModel: context.targetModel,
662
+ filter: context.filter,
663
+ update: context.update,
664
+ affectedCount: context.affectedCount,
665
+ depth: context.currentDepth,
666
+ chain: context.syncChain,
667
+ };
668
+ // Emit on source model
669
+ if (typeof this.sourceModel.emitSyncEvent === "function") {
670
+ await this.sourceModel.emitSyncEvent("synced", payload);
671
+ }
672
+ }
673
+ /**
674
+ * Creates an empty sync result.
675
+ *
676
+ * @returns Empty sync result
677
+ */
678
+ createEmptyResult() {
679
+ return {
680
+ success: true,
681
+ attempted: 0,
682
+ succeeded: 0,
683
+ failed: 0,
684
+ errors: [],
685
+ depthReached: 0,
686
+ contexts: [],
687
+ };
688
+ }
689
+ }exports.SyncManager=SyncManager;//# sourceMappingURL=sync-manager.js.map