@warlock.js/cascade 4.0.30 → 4.0.39

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 (533) hide show
  1. package/cjs/index.js +15 -1
  2. package/cjs/index.js.map +1 -1
  3. package/esm/index.js +15 -1
  4. package/esm/index.js.map +1 -1
  5. package/package.json +52 -61
  6. package/cjs/aggregate/DeselectPipeline.d.ts +0 -10
  7. package/cjs/aggregate/DeselectPipeline.d.ts.map +0 -1
  8. package/cjs/aggregate/DeselectPipeline.js +0 -17
  9. package/cjs/aggregate/DeselectPipeline.js.map +0 -1
  10. package/cjs/aggregate/GeoNearPipeline.d.ts +0 -34
  11. package/cjs/aggregate/GeoNearPipeline.d.ts.map +0 -1
  12. package/cjs/aggregate/GeoNearPipeline.js +0 -44
  13. package/cjs/aggregate/GeoNearPipeline.js.map +0 -1
  14. package/cjs/aggregate/GroupByPipeline.d.ts +0 -12
  15. package/cjs/aggregate/GroupByPipeline.d.ts.map +0 -1
  16. package/cjs/aggregate/GroupByPipeline.js +0 -28
  17. package/cjs/aggregate/GroupByPipeline.js.map +0 -1
  18. package/cjs/aggregate/LimitPipeline.d.ts +0 -10
  19. package/cjs/aggregate/LimitPipeline.d.ts.map +0 -1
  20. package/cjs/aggregate/LimitPipeline.js +0 -14
  21. package/cjs/aggregate/LimitPipeline.js.map +0 -1
  22. package/cjs/aggregate/LookupPipeline.d.ts +0 -19
  23. package/cjs/aggregate/LookupPipeline.d.ts.map +0 -1
  24. package/cjs/aggregate/LookupPipeline.js +0 -23
  25. package/cjs/aggregate/LookupPipeline.js.map +0 -1
  26. package/cjs/aggregate/OrWherePipeline.d.ts +0 -21
  27. package/cjs/aggregate/OrWherePipeline.d.ts.map +0 -1
  28. package/cjs/aggregate/OrWherePipeline.js +0 -63
  29. package/cjs/aggregate/OrWherePipeline.js.map +0 -1
  30. package/cjs/aggregate/SelectPipeline.d.ts +0 -10
  31. package/cjs/aggregate/SelectPipeline.d.ts.map +0 -1
  32. package/cjs/aggregate/SelectPipeline.js +0 -26
  33. package/cjs/aggregate/SelectPipeline.js.map +0 -1
  34. package/cjs/aggregate/SkipPipeline.d.ts +0 -10
  35. package/cjs/aggregate/SkipPipeline.d.ts.map +0 -1
  36. package/cjs/aggregate/SkipPipeline.js +0 -14
  37. package/cjs/aggregate/SkipPipeline.js.map +0 -1
  38. package/cjs/aggregate/SortByPipeline.d.ts +0 -10
  39. package/cjs/aggregate/SortByPipeline.d.ts.map +0 -1
  40. package/cjs/aggregate/SortByPipeline.js +0 -18
  41. package/cjs/aggregate/SortByPipeline.js.map +0 -1
  42. package/cjs/aggregate/SortPipeline.d.ts +0 -11
  43. package/cjs/aggregate/SortPipeline.d.ts.map +0 -1
  44. package/cjs/aggregate/SortPipeline.js +0 -18
  45. package/cjs/aggregate/SortPipeline.js.map +0 -1
  46. package/cjs/aggregate/SortRandomPipeline.d.ts +0 -10
  47. package/cjs/aggregate/SortRandomPipeline.d.ts.map +0 -1
  48. package/cjs/aggregate/SortRandomPipeline.js +0 -16
  49. package/cjs/aggregate/SortRandomPipeline.js.map +0 -1
  50. package/cjs/aggregate/UnwindPipeline.d.ts +0 -14
  51. package/cjs/aggregate/UnwindPipeline.d.ts.map +0 -1
  52. package/cjs/aggregate/UnwindPipeline.js +0 -19
  53. package/cjs/aggregate/UnwindPipeline.js.map +0 -1
  54. package/cjs/aggregate/WhereExpression.d.ts +0 -17
  55. package/cjs/aggregate/WhereExpression.d.ts.map +0 -1
  56. package/cjs/aggregate/WhereExpression.js +0 -149
  57. package/cjs/aggregate/WhereExpression.js.map +0 -1
  58. package/cjs/aggregate/WhereExpressionPipeline.d.ts +0 -10
  59. package/cjs/aggregate/WhereExpressionPipeline.d.ts.map +0 -1
  60. package/cjs/aggregate/WhereExpressionPipeline.js +0 -15
  61. package/cjs/aggregate/WhereExpressionPipeline.js.map +0 -1
  62. package/cjs/aggregate/WherePipeline.d.ts +0 -13
  63. package/cjs/aggregate/WherePipeline.d.ts.map +0 -1
  64. package/cjs/aggregate/WherePipeline.js +0 -12
  65. package/cjs/aggregate/WherePipeline.js.map +0 -1
  66. package/cjs/aggregate/aggregate.d.ts +0 -409
  67. package/cjs/aggregate/aggregate.d.ts.map +0 -1
  68. package/cjs/aggregate/aggregate.js +0 -911
  69. package/cjs/aggregate/aggregate.js.map +0 -1
  70. package/cjs/aggregate/expressions.d.ts +0 -361
  71. package/cjs/aggregate/expressions.d.ts.map +0 -1
  72. package/cjs/aggregate/expressions.js +0 -536
  73. package/cjs/aggregate/expressions.js.map +0 -1
  74. package/cjs/aggregate/filters/apply-filters.d.ts +0 -3
  75. package/cjs/aggregate/filters/apply-filters.d.ts.map +0 -1
  76. package/cjs/aggregate/filters/apply-filters.js +0 -75
  77. package/cjs/aggregate/filters/apply-filters.js.map +0 -1
  78. package/cjs/aggregate/filters/boolean-filters.d.ts +0 -3
  79. package/cjs/aggregate/filters/boolean-filters.d.ts.map +0 -1
  80. package/cjs/aggregate/filters/boolean-filters.js +0 -33
  81. package/cjs/aggregate/filters/boolean-filters.js.map +0 -1
  82. package/cjs/aggregate/filters/date-filters.d.ts +0 -3
  83. package/cjs/aggregate/filters/date-filters.d.ts.map +0 -1
  84. package/cjs/aggregate/filters/date-filters.js +0 -128
  85. package/cjs/aggregate/filters/date-filters.js.map +0 -1
  86. package/cjs/aggregate/filters/index.d.ts +0 -3
  87. package/cjs/aggregate/filters/index.d.ts.map +0 -1
  88. package/cjs/aggregate/filters/numeric-filters.d.ts +0 -3
  89. package/cjs/aggregate/filters/numeric-filters.d.ts.map +0 -1
  90. package/cjs/aggregate/filters/numeric-filters.js +0 -99
  91. package/cjs/aggregate/filters/numeric-filters.js.map +0 -1
  92. package/cjs/aggregate/filters/types.d.ts +0 -46
  93. package/cjs/aggregate/filters/types.d.ts.map +0 -1
  94. package/cjs/aggregate/filters/utils.d.ts +0 -13
  95. package/cjs/aggregate/filters/utils.d.ts.map +0 -1
  96. package/cjs/aggregate/filters/utils.js +0 -38
  97. package/cjs/aggregate/filters/utils.js.map +0 -1
  98. package/cjs/aggregate/index.d.ts +0 -21
  99. package/cjs/aggregate/index.d.ts.map +0 -1
  100. package/cjs/aggregate/parsePipelines.d.ts +0 -5
  101. package/cjs/aggregate/parsePipelines.d.ts.map +0 -1
  102. package/cjs/aggregate/parsePipelines.js +0 -6
  103. package/cjs/aggregate/parsePipelines.js.map +0 -1
  104. package/cjs/aggregate/pipeline.d.ts +0 -31
  105. package/cjs/aggregate/pipeline.d.ts.map +0 -1
  106. package/cjs/aggregate/pipeline.js +0 -42
  107. package/cjs/aggregate/pipeline.js.map +0 -1
  108. package/cjs/aggregate/types.d.ts +0 -8
  109. package/cjs/aggregate/types.d.ts.map +0 -1
  110. package/cjs/aggregate/types.js +0 -31
  111. package/cjs/aggregate/types.js.map +0 -1
  112. package/cjs/blueprint/blueprint-column.d.ts +0 -82
  113. package/cjs/blueprint/blueprint-column.d.ts.map +0 -1
  114. package/cjs/blueprint/blueprint.d.ts +0 -162
  115. package/cjs/blueprint/blueprint.d.ts.map +0 -1
  116. package/cjs/blueprint/blueprint.js +0 -340
  117. package/cjs/blueprint/blueprint.js.map +0 -1
  118. package/cjs/blueprint/index.d.ts +0 -3
  119. package/cjs/blueprint/index.d.ts.map +0 -1
  120. package/cjs/blueprint/model-blueprint.d.ts +0 -15
  121. package/cjs/blueprint/model-blueprint.d.ts.map +0 -1
  122. package/cjs/blueprint/model-blueprint.js +0 -16
  123. package/cjs/blueprint/model-blueprint.js.map +0 -1
  124. package/cjs/casts/arrayOf.d.ts +0 -5
  125. package/cjs/casts/arrayOf.d.ts.map +0 -1
  126. package/cjs/casts/arrayOf.js +0 -18
  127. package/cjs/casts/arrayOf.js.map +0 -1
  128. package/cjs/casts/cast-email.d.ts +0 -2
  129. package/cjs/casts/cast-email.d.ts.map +0 -1
  130. package/cjs/casts/cast-email.js +0 -5
  131. package/cjs/casts/cast-email.js.map +0 -1
  132. package/cjs/casts/castModel.d.ts +0 -3
  133. package/cjs/casts/castModel.d.ts.map +0 -1
  134. package/cjs/casts/castModel.js +0 -49
  135. package/cjs/casts/castModel.js.map +0 -1
  136. package/cjs/casts/expiresAfter.d.ts +0 -3
  137. package/cjs/casts/expiresAfter.d.ts.map +0 -1
  138. package/cjs/casts/expiresAfter.js +0 -5
  139. package/cjs/casts/expiresAfter.js.map +0 -1
  140. package/cjs/casts/index.d.ts +0 -9
  141. package/cjs/casts/index.d.ts.map +0 -1
  142. package/cjs/casts/oneOf.d.ts +0 -3
  143. package/cjs/casts/oneOf.d.ts.map +0 -1
  144. package/cjs/casts/oneOf.js +0 -22
  145. package/cjs/casts/oneOf.js.map +0 -1
  146. package/cjs/casts/random-string.d.ts +0 -2
  147. package/cjs/casts/random-string.d.ts.map +0 -1
  148. package/cjs/casts/random-string.js +0 -5
  149. package/cjs/casts/random-string.js.map +0 -1
  150. package/cjs/casts/randomInteger.d.ts +0 -2
  151. package/cjs/casts/randomInteger.d.ts.map +0 -1
  152. package/cjs/casts/randomInteger.js +0 -7
  153. package/cjs/casts/randomInteger.js.map +0 -1
  154. package/cjs/casts/shapedArray.d.ts +0 -26
  155. package/cjs/casts/shapedArray.d.ts.map +0 -1
  156. package/cjs/casts/shapedArray.js +0 -100
  157. package/cjs/casts/shapedArray.js.map +0 -1
  158. package/cjs/config.d.ts +0 -6
  159. package/cjs/config.d.ts.map +0 -1
  160. package/cjs/config.js +0 -16
  161. package/cjs/config.js.map +0 -1
  162. package/cjs/connection.d.ts +0 -49
  163. package/cjs/connection.d.ts.map +0 -1
  164. package/cjs/connection.js +0 -108
  165. package/cjs/connection.js.map +0 -1
  166. package/cjs/database.d.ts +0 -97
  167. package/cjs/database.d.ts.map +0 -1
  168. package/cjs/database.js +0 -164
  169. package/cjs/database.js.map +0 -1
  170. package/cjs/index.d.ts +0 -13
  171. package/cjs/index.d.ts.map +0 -1
  172. package/cjs/migration/index.d.ts +0 -4
  173. package/cjs/migration/index.d.ts.map +0 -1
  174. package/cjs/migration/migrate.d.ts +0 -13
  175. package/cjs/migration/migrate.d.ts.map +0 -1
  176. package/cjs/migration/migrate.js +0 -72
  177. package/cjs/migration/migrate.js.map +0 -1
  178. package/cjs/migration/migration-office.d.ts +0 -21
  179. package/cjs/migration/migration-office.d.ts.map +0 -1
  180. package/cjs/migration/migration-office.js +0 -39
  181. package/cjs/migration/migration-office.js.map +0 -1
  182. package/cjs/migration/migration-officer.d.ts +0 -33
  183. package/cjs/migration/migration-officer.d.ts.map +0 -1
  184. package/cjs/migration/migration-officer.js +0 -55
  185. package/cjs/migration/migration-officer.js.map +0 -1
  186. package/cjs/migration/types.d.ts +0 -34
  187. package/cjs/migration/types.d.ts.map +0 -1
  188. package/cjs/model/ModelAggregate.d.ts +0 -114
  189. package/cjs/model/ModelAggregate.d.ts.map +0 -1
  190. package/cjs/model/ModelAggregate.js +0 -182
  191. package/cjs/model/ModelAggregate.js.map +0 -1
  192. package/cjs/model/ModelSync.d.ts +0 -73
  193. package/cjs/model/ModelSync.d.ts.map +0 -1
  194. package/cjs/model/ModelSync.js +0 -215
  195. package/cjs/model/ModelSync.js.map +0 -1
  196. package/cjs/model/RelationshipWithMany.d.ts +0 -24
  197. package/cjs/model/RelationshipWithMany.d.ts.map +0 -1
  198. package/cjs/model/RelationshipWithMany.js +0 -42
  199. package/cjs/model/RelationshipWithMany.js.map +0 -1
  200. package/cjs/model/base-model.d.ts +0 -161
  201. package/cjs/model/base-model.d.ts.map +0 -1
  202. package/cjs/model/base-model.js +0 -265
  203. package/cjs/model/base-model.js.map +0 -1
  204. package/cjs/model/crud-model.d.ts +0 -122
  205. package/cjs/model/crud-model.d.ts.map +0 -1
  206. package/cjs/model/crud-model.js +0 -366
  207. package/cjs/model/crud-model.js.map +0 -1
  208. package/cjs/model/index.d.ts +0 -10
  209. package/cjs/model/index.d.ts.map +0 -1
  210. package/cjs/model/joinable.d.ts +0 -87
  211. package/cjs/model/joinable.d.ts.map +0 -1
  212. package/cjs/model/joinable.js +0 -158
  213. package/cjs/model/joinable.js.map +0 -1
  214. package/cjs/model/master-mind.d.ts +0 -44
  215. package/cjs/model/master-mind.d.ts.map +0 -1
  216. package/cjs/model/master-mind.js +0 -118
  217. package/cjs/model/master-mind.js.map +0 -1
  218. package/cjs/model/model-events.d.ts +0 -57
  219. package/cjs/model/model-events.d.ts.map +0 -1
  220. package/cjs/model/model-events.js +0 -102
  221. package/cjs/model/model-events.js.map +0 -1
  222. package/cjs/model/model.d.ts +0 -464
  223. package/cjs/model/model.d.ts.map +0 -1
  224. package/cjs/model/model.js +0 -1134
  225. package/cjs/model/model.js.map +0 -1
  226. package/cjs/model/types.d.ts +0 -149
  227. package/cjs/model/types.d.ts.map +0 -1
  228. package/cjs/model/types.js +0 -11
  229. package/cjs/model/types.js.map +0 -1
  230. package/cjs/query/index.d.ts +0 -2
  231. package/cjs/query/index.d.ts.map +0 -1
  232. package/cjs/query/query.d.ts +0 -218
  233. package/cjs/query/query.d.ts.map +0 -1
  234. package/cjs/query/query.js +0 -672
  235. package/cjs/query/query.js.map +0 -1
  236. package/cjs/query/types.d.ts +0 -60
  237. package/cjs/query/types.d.ts.map +0 -1
  238. package/cjs/types.d.ts +0 -75
  239. package/cjs/types.d.ts.map +0 -1
  240. package/cjs/utils/connectToDatabase.d.ts +0 -3
  241. package/cjs/utils/connectToDatabase.d.ts.map +0 -1
  242. package/cjs/utils/connectToDatabase.js +0 -3
  243. package/cjs/utils/connectToDatabase.js.map +0 -1
  244. package/cjs/utils/deep-diff.d.ts +0 -9
  245. package/cjs/utils/deep-diff.d.ts.map +0 -1
  246. package/cjs/utils/deep-diff.js +0 -44
  247. package/cjs/utils/deep-diff.js.map +0 -1
  248. package/cjs/utils/dropAllDatabaseIndexes.d.ts +0 -2
  249. package/cjs/utils/dropAllDatabaseIndexes.d.ts.map +0 -1
  250. package/cjs/utils/dropAllDatabaseIndexes.js +0 -10
  251. package/cjs/utils/dropAllDatabaseIndexes.js.map +0 -1
  252. package/cjs/utils/index.d.ts +0 -6
  253. package/cjs/utils/index.d.ts.map +0 -1
  254. package/cjs/utils/joinable-proxy.d.ts +0 -3
  255. package/cjs/utils/joinable-proxy.d.ts.map +0 -1
  256. package/cjs/utils/joinable-proxy.js +0 -14
  257. package/cjs/utils/joinable-proxy.js.map +0 -1
  258. package/cjs/utils/listDatabaseIndexes.d.ts +0 -4
  259. package/cjs/utils/listDatabaseIndexes.d.ts.map +0 -1
  260. package/cjs/utils/listDatabaseIndexes.js +0 -101
  261. package/cjs/utils/listDatabaseIndexes.js.map +0 -1
  262. package/cjs/utils/onceConnected.d.ts +0 -2
  263. package/cjs/utils/onceConnected.d.ts.map +0 -1
  264. package/cjs/utils/onceConnected.js +0 -8
  265. package/cjs/utils/onceConnected.js.map +0 -1
  266. package/cjs/utils/sync-with.d.ts +0 -27
  267. package/cjs/utils/sync-with.d.ts.map +0 -1
  268. package/cjs/utils/sync-with.js +0 -60
  269. package/cjs/utils/sync-with.js.map +0 -1
  270. package/esm/aggregate/DeselectPipeline.d.ts +0 -10
  271. package/esm/aggregate/DeselectPipeline.d.ts.map +0 -1
  272. package/esm/aggregate/DeselectPipeline.js +0 -17
  273. package/esm/aggregate/DeselectPipeline.js.map +0 -1
  274. package/esm/aggregate/GeoNearPipeline.d.ts +0 -34
  275. package/esm/aggregate/GeoNearPipeline.d.ts.map +0 -1
  276. package/esm/aggregate/GeoNearPipeline.js +0 -44
  277. package/esm/aggregate/GeoNearPipeline.js.map +0 -1
  278. package/esm/aggregate/GroupByPipeline.d.ts +0 -12
  279. package/esm/aggregate/GroupByPipeline.d.ts.map +0 -1
  280. package/esm/aggregate/GroupByPipeline.js +0 -28
  281. package/esm/aggregate/GroupByPipeline.js.map +0 -1
  282. package/esm/aggregate/LimitPipeline.d.ts +0 -10
  283. package/esm/aggregate/LimitPipeline.d.ts.map +0 -1
  284. package/esm/aggregate/LimitPipeline.js +0 -14
  285. package/esm/aggregate/LimitPipeline.js.map +0 -1
  286. package/esm/aggregate/LookupPipeline.d.ts +0 -19
  287. package/esm/aggregate/LookupPipeline.d.ts.map +0 -1
  288. package/esm/aggregate/LookupPipeline.js +0 -23
  289. package/esm/aggregate/LookupPipeline.js.map +0 -1
  290. package/esm/aggregate/OrWherePipeline.d.ts +0 -21
  291. package/esm/aggregate/OrWherePipeline.d.ts.map +0 -1
  292. package/esm/aggregate/OrWherePipeline.js +0 -63
  293. package/esm/aggregate/OrWherePipeline.js.map +0 -1
  294. package/esm/aggregate/SelectPipeline.d.ts +0 -10
  295. package/esm/aggregate/SelectPipeline.d.ts.map +0 -1
  296. package/esm/aggregate/SelectPipeline.js +0 -26
  297. package/esm/aggregate/SelectPipeline.js.map +0 -1
  298. package/esm/aggregate/SkipPipeline.d.ts +0 -10
  299. package/esm/aggregate/SkipPipeline.d.ts.map +0 -1
  300. package/esm/aggregate/SkipPipeline.js +0 -14
  301. package/esm/aggregate/SkipPipeline.js.map +0 -1
  302. package/esm/aggregate/SortByPipeline.d.ts +0 -10
  303. package/esm/aggregate/SortByPipeline.d.ts.map +0 -1
  304. package/esm/aggregate/SortByPipeline.js +0 -18
  305. package/esm/aggregate/SortByPipeline.js.map +0 -1
  306. package/esm/aggregate/SortPipeline.d.ts +0 -11
  307. package/esm/aggregate/SortPipeline.d.ts.map +0 -1
  308. package/esm/aggregate/SortPipeline.js +0 -18
  309. package/esm/aggregate/SortPipeline.js.map +0 -1
  310. package/esm/aggregate/SortRandomPipeline.d.ts +0 -10
  311. package/esm/aggregate/SortRandomPipeline.d.ts.map +0 -1
  312. package/esm/aggregate/SortRandomPipeline.js +0 -16
  313. package/esm/aggregate/SortRandomPipeline.js.map +0 -1
  314. package/esm/aggregate/UnwindPipeline.d.ts +0 -14
  315. package/esm/aggregate/UnwindPipeline.d.ts.map +0 -1
  316. package/esm/aggregate/UnwindPipeline.js +0 -19
  317. package/esm/aggregate/UnwindPipeline.js.map +0 -1
  318. package/esm/aggregate/WhereExpression.d.ts +0 -17
  319. package/esm/aggregate/WhereExpression.d.ts.map +0 -1
  320. package/esm/aggregate/WhereExpression.js +0 -149
  321. package/esm/aggregate/WhereExpression.js.map +0 -1
  322. package/esm/aggregate/WhereExpressionPipeline.d.ts +0 -10
  323. package/esm/aggregate/WhereExpressionPipeline.d.ts.map +0 -1
  324. package/esm/aggregate/WhereExpressionPipeline.js +0 -15
  325. package/esm/aggregate/WhereExpressionPipeline.js.map +0 -1
  326. package/esm/aggregate/WherePipeline.d.ts +0 -13
  327. package/esm/aggregate/WherePipeline.d.ts.map +0 -1
  328. package/esm/aggregate/WherePipeline.js +0 -12
  329. package/esm/aggregate/WherePipeline.js.map +0 -1
  330. package/esm/aggregate/aggregate.d.ts +0 -409
  331. package/esm/aggregate/aggregate.d.ts.map +0 -1
  332. package/esm/aggregate/aggregate.js +0 -911
  333. package/esm/aggregate/aggregate.js.map +0 -1
  334. package/esm/aggregate/expressions.d.ts +0 -361
  335. package/esm/aggregate/expressions.d.ts.map +0 -1
  336. package/esm/aggregate/expressions.js +0 -536
  337. package/esm/aggregate/expressions.js.map +0 -1
  338. package/esm/aggregate/filters/apply-filters.d.ts +0 -3
  339. package/esm/aggregate/filters/apply-filters.d.ts.map +0 -1
  340. package/esm/aggregate/filters/apply-filters.js +0 -75
  341. package/esm/aggregate/filters/apply-filters.js.map +0 -1
  342. package/esm/aggregate/filters/boolean-filters.d.ts +0 -3
  343. package/esm/aggregate/filters/boolean-filters.d.ts.map +0 -1
  344. package/esm/aggregate/filters/boolean-filters.js +0 -33
  345. package/esm/aggregate/filters/boolean-filters.js.map +0 -1
  346. package/esm/aggregate/filters/date-filters.d.ts +0 -3
  347. package/esm/aggregate/filters/date-filters.d.ts.map +0 -1
  348. package/esm/aggregate/filters/date-filters.js +0 -128
  349. package/esm/aggregate/filters/date-filters.js.map +0 -1
  350. package/esm/aggregate/filters/index.d.ts +0 -3
  351. package/esm/aggregate/filters/index.d.ts.map +0 -1
  352. package/esm/aggregate/filters/numeric-filters.d.ts +0 -3
  353. package/esm/aggregate/filters/numeric-filters.d.ts.map +0 -1
  354. package/esm/aggregate/filters/numeric-filters.js +0 -99
  355. package/esm/aggregate/filters/numeric-filters.js.map +0 -1
  356. package/esm/aggregate/filters/types.d.ts +0 -46
  357. package/esm/aggregate/filters/types.d.ts.map +0 -1
  358. package/esm/aggregate/filters/utils.d.ts +0 -13
  359. package/esm/aggregate/filters/utils.d.ts.map +0 -1
  360. package/esm/aggregate/filters/utils.js +0 -38
  361. package/esm/aggregate/filters/utils.js.map +0 -1
  362. package/esm/aggregate/index.d.ts +0 -21
  363. package/esm/aggregate/index.d.ts.map +0 -1
  364. package/esm/aggregate/parsePipelines.d.ts +0 -5
  365. package/esm/aggregate/parsePipelines.d.ts.map +0 -1
  366. package/esm/aggregate/parsePipelines.js +0 -6
  367. package/esm/aggregate/parsePipelines.js.map +0 -1
  368. package/esm/aggregate/pipeline.d.ts +0 -31
  369. package/esm/aggregate/pipeline.d.ts.map +0 -1
  370. package/esm/aggregate/pipeline.js +0 -42
  371. package/esm/aggregate/pipeline.js.map +0 -1
  372. package/esm/aggregate/types.d.ts +0 -8
  373. package/esm/aggregate/types.d.ts.map +0 -1
  374. package/esm/aggregate/types.js +0 -31
  375. package/esm/aggregate/types.js.map +0 -1
  376. package/esm/blueprint/blueprint-column.d.ts +0 -82
  377. package/esm/blueprint/blueprint-column.d.ts.map +0 -1
  378. package/esm/blueprint/blueprint.d.ts +0 -162
  379. package/esm/blueprint/blueprint.d.ts.map +0 -1
  380. package/esm/blueprint/blueprint.js +0 -340
  381. package/esm/blueprint/blueprint.js.map +0 -1
  382. package/esm/blueprint/index.d.ts +0 -3
  383. package/esm/blueprint/index.d.ts.map +0 -1
  384. package/esm/blueprint/model-blueprint.d.ts +0 -15
  385. package/esm/blueprint/model-blueprint.d.ts.map +0 -1
  386. package/esm/blueprint/model-blueprint.js +0 -16
  387. package/esm/blueprint/model-blueprint.js.map +0 -1
  388. package/esm/casts/arrayOf.d.ts +0 -5
  389. package/esm/casts/arrayOf.d.ts.map +0 -1
  390. package/esm/casts/arrayOf.js +0 -18
  391. package/esm/casts/arrayOf.js.map +0 -1
  392. package/esm/casts/cast-email.d.ts +0 -2
  393. package/esm/casts/cast-email.d.ts.map +0 -1
  394. package/esm/casts/cast-email.js +0 -5
  395. package/esm/casts/cast-email.js.map +0 -1
  396. package/esm/casts/castModel.d.ts +0 -3
  397. package/esm/casts/castModel.d.ts.map +0 -1
  398. package/esm/casts/castModel.js +0 -49
  399. package/esm/casts/castModel.js.map +0 -1
  400. package/esm/casts/expiresAfter.d.ts +0 -3
  401. package/esm/casts/expiresAfter.d.ts.map +0 -1
  402. package/esm/casts/expiresAfter.js +0 -5
  403. package/esm/casts/expiresAfter.js.map +0 -1
  404. package/esm/casts/index.d.ts +0 -9
  405. package/esm/casts/index.d.ts.map +0 -1
  406. package/esm/casts/oneOf.d.ts +0 -3
  407. package/esm/casts/oneOf.d.ts.map +0 -1
  408. package/esm/casts/oneOf.js +0 -22
  409. package/esm/casts/oneOf.js.map +0 -1
  410. package/esm/casts/random-string.d.ts +0 -2
  411. package/esm/casts/random-string.d.ts.map +0 -1
  412. package/esm/casts/random-string.js +0 -5
  413. package/esm/casts/random-string.js.map +0 -1
  414. package/esm/casts/randomInteger.d.ts +0 -2
  415. package/esm/casts/randomInteger.d.ts.map +0 -1
  416. package/esm/casts/randomInteger.js +0 -7
  417. package/esm/casts/randomInteger.js.map +0 -1
  418. package/esm/casts/shapedArray.d.ts +0 -26
  419. package/esm/casts/shapedArray.d.ts.map +0 -1
  420. package/esm/casts/shapedArray.js +0 -100
  421. package/esm/casts/shapedArray.js.map +0 -1
  422. package/esm/config.d.ts +0 -6
  423. package/esm/config.d.ts.map +0 -1
  424. package/esm/config.js +0 -16
  425. package/esm/config.js.map +0 -1
  426. package/esm/connection.d.ts +0 -49
  427. package/esm/connection.d.ts.map +0 -1
  428. package/esm/connection.js +0 -108
  429. package/esm/connection.js.map +0 -1
  430. package/esm/database.d.ts +0 -97
  431. package/esm/database.d.ts.map +0 -1
  432. package/esm/database.js +0 -164
  433. package/esm/database.js.map +0 -1
  434. package/esm/index.d.ts +0 -13
  435. package/esm/index.d.ts.map +0 -1
  436. package/esm/migration/index.d.ts +0 -4
  437. package/esm/migration/index.d.ts.map +0 -1
  438. package/esm/migration/migrate.d.ts +0 -13
  439. package/esm/migration/migrate.d.ts.map +0 -1
  440. package/esm/migration/migrate.js +0 -72
  441. package/esm/migration/migrate.js.map +0 -1
  442. package/esm/migration/migration-office.d.ts +0 -21
  443. package/esm/migration/migration-office.d.ts.map +0 -1
  444. package/esm/migration/migration-office.js +0 -39
  445. package/esm/migration/migration-office.js.map +0 -1
  446. package/esm/migration/migration-officer.d.ts +0 -33
  447. package/esm/migration/migration-officer.d.ts.map +0 -1
  448. package/esm/migration/migration-officer.js +0 -55
  449. package/esm/migration/migration-officer.js.map +0 -1
  450. package/esm/migration/types.d.ts +0 -34
  451. package/esm/migration/types.d.ts.map +0 -1
  452. package/esm/model/ModelAggregate.d.ts +0 -114
  453. package/esm/model/ModelAggregate.d.ts.map +0 -1
  454. package/esm/model/ModelAggregate.js +0 -182
  455. package/esm/model/ModelAggregate.js.map +0 -1
  456. package/esm/model/ModelSync.d.ts +0 -73
  457. package/esm/model/ModelSync.d.ts.map +0 -1
  458. package/esm/model/ModelSync.js +0 -215
  459. package/esm/model/ModelSync.js.map +0 -1
  460. package/esm/model/RelationshipWithMany.d.ts +0 -24
  461. package/esm/model/RelationshipWithMany.d.ts.map +0 -1
  462. package/esm/model/RelationshipWithMany.js +0 -42
  463. package/esm/model/RelationshipWithMany.js.map +0 -1
  464. package/esm/model/base-model.d.ts +0 -161
  465. package/esm/model/base-model.d.ts.map +0 -1
  466. package/esm/model/base-model.js +0 -265
  467. package/esm/model/base-model.js.map +0 -1
  468. package/esm/model/crud-model.d.ts +0 -122
  469. package/esm/model/crud-model.d.ts.map +0 -1
  470. package/esm/model/crud-model.js +0 -366
  471. package/esm/model/crud-model.js.map +0 -1
  472. package/esm/model/index.d.ts +0 -10
  473. package/esm/model/index.d.ts.map +0 -1
  474. package/esm/model/joinable.d.ts +0 -87
  475. package/esm/model/joinable.d.ts.map +0 -1
  476. package/esm/model/joinable.js +0 -158
  477. package/esm/model/joinable.js.map +0 -1
  478. package/esm/model/master-mind.d.ts +0 -44
  479. package/esm/model/master-mind.d.ts.map +0 -1
  480. package/esm/model/master-mind.js +0 -118
  481. package/esm/model/master-mind.js.map +0 -1
  482. package/esm/model/model-events.d.ts +0 -57
  483. package/esm/model/model-events.d.ts.map +0 -1
  484. package/esm/model/model-events.js +0 -102
  485. package/esm/model/model-events.js.map +0 -1
  486. package/esm/model/model.d.ts +0 -464
  487. package/esm/model/model.d.ts.map +0 -1
  488. package/esm/model/model.js +0 -1134
  489. package/esm/model/model.js.map +0 -1
  490. package/esm/model/types.d.ts +0 -149
  491. package/esm/model/types.d.ts.map +0 -1
  492. package/esm/model/types.js +0 -11
  493. package/esm/model/types.js.map +0 -1
  494. package/esm/query/index.d.ts +0 -2
  495. package/esm/query/index.d.ts.map +0 -1
  496. package/esm/query/query.d.ts +0 -218
  497. package/esm/query/query.d.ts.map +0 -1
  498. package/esm/query/query.js +0 -672
  499. package/esm/query/query.js.map +0 -1
  500. package/esm/query/types.d.ts +0 -60
  501. package/esm/query/types.d.ts.map +0 -1
  502. package/esm/types.d.ts +0 -75
  503. package/esm/types.d.ts.map +0 -1
  504. package/esm/utils/connectToDatabase.d.ts +0 -3
  505. package/esm/utils/connectToDatabase.d.ts.map +0 -1
  506. package/esm/utils/connectToDatabase.js +0 -3
  507. package/esm/utils/connectToDatabase.js.map +0 -1
  508. package/esm/utils/deep-diff.d.ts +0 -9
  509. package/esm/utils/deep-diff.d.ts.map +0 -1
  510. package/esm/utils/deep-diff.js +0 -44
  511. package/esm/utils/deep-diff.js.map +0 -1
  512. package/esm/utils/dropAllDatabaseIndexes.d.ts +0 -2
  513. package/esm/utils/dropAllDatabaseIndexes.d.ts.map +0 -1
  514. package/esm/utils/dropAllDatabaseIndexes.js +0 -10
  515. package/esm/utils/dropAllDatabaseIndexes.js.map +0 -1
  516. package/esm/utils/index.d.ts +0 -6
  517. package/esm/utils/index.d.ts.map +0 -1
  518. package/esm/utils/joinable-proxy.d.ts +0 -3
  519. package/esm/utils/joinable-proxy.d.ts.map +0 -1
  520. package/esm/utils/joinable-proxy.js +0 -14
  521. package/esm/utils/joinable-proxy.js.map +0 -1
  522. package/esm/utils/listDatabaseIndexes.d.ts +0 -4
  523. package/esm/utils/listDatabaseIndexes.d.ts.map +0 -1
  524. package/esm/utils/listDatabaseIndexes.js +0 -101
  525. package/esm/utils/listDatabaseIndexes.js.map +0 -1
  526. package/esm/utils/onceConnected.d.ts +0 -2
  527. package/esm/utils/onceConnected.d.ts.map +0 -1
  528. package/esm/utils/onceConnected.js +0 -8
  529. package/esm/utils/onceConnected.js.map +0 -1
  530. package/esm/utils/sync-with.d.ts +0 -27
  531. package/esm/utils/sync-with.d.ts.map +0 -1
  532. package/esm/utils/sync-with.js +0 -60
  533. package/esm/utils/sync-with.js.map +0 -1
package/cjs/index.js CHANGED
@@ -1 +1,15 @@
1
- 'use strict';var DeselectPipeline=require('./aggregate/DeselectPipeline.js'),GeoNearPipeline=require('./aggregate/GeoNearPipeline.js'),GroupByPipeline=require('./aggregate/GroupByPipeline.js'),LimitPipeline=require('./aggregate/LimitPipeline.js'),LookupPipeline=require('./aggregate/LookupPipeline.js'),OrWherePipeline=require('./aggregate/OrWherePipeline.js'),SelectPipeline=require('./aggregate/SelectPipeline.js'),SkipPipeline=require('./aggregate/SkipPipeline.js'),SortByPipeline=require('./aggregate/SortByPipeline.js'),SortPipeline=require('./aggregate/SortPipeline.js'),SortRandomPipeline=require('./aggregate/SortRandomPipeline.js'),UnwindPipeline=require('./aggregate/UnwindPipeline.js'),WhereExpression=require('./aggregate/WhereExpression.js'),WhereExpressionPipeline=require('./aggregate/WhereExpressionPipeline.js'),WherePipeline=require('./aggregate/WherePipeline.js'),aggregate=require('./aggregate/aggregate.js'),expressions=require('./aggregate/expressions.js'),parsePipelines=require('./aggregate/parsePipelines.js'),pipeline=require('./aggregate/pipeline.js'),types=require('./aggregate/types.js'),applyFilters=require('./aggregate/filters/apply-filters.js'),blueprint=require('./blueprint/blueprint.js'),modelBlueprint=require('./blueprint/model-blueprint.js'),arrayOf=require('./casts/arrayOf.js'),castEmail=require('./casts/cast-email.js'),castModel=require('./casts/castModel.js'),expiresAfter=require('./casts/expiresAfter.js'),oneOf=require('./casts/oneOf.js'),randomString=require('./casts/random-string.js'),randomInteger=require('./casts/randomInteger.js'),shapedArray=require('./casts/shapedArray.js'),config=require('./config.js'),connection=require('./connection.js'),database=require('./database.js'),migrate=require('./migration/migrate.js'),migrationOffice=require('./migration/migration-office.js'),ModelAggregate=require('./model/ModelAggregate.js'),ModelSync=require('./model/ModelSync.js'),baseModel=require('./model/base-model.js'),crudModel=require('./model/crud-model.js'),joinable=require('./model/joinable.js'),masterMind=require('./model/master-mind.js'),model=require('./model/model.js'),types$1=require('./model/types.js'),query=require('./query/query.js'),connectToDatabase=require('./utils/connectToDatabase.js'),dropAllDatabaseIndexes=require('./utils/dropAllDatabaseIndexes.js'),listDatabaseIndexes=require('./utils/listDatabaseIndexes.js'),onceConnected=require('./utils/onceConnected.js'),syncWith=require('./utils/sync-with.js');exports.DeselectPipeline=DeselectPipeline.DeselectPipeline;exports.deselectPipeline=DeselectPipeline.deselectPipeline;exports.GeoNearPipeline=GeoNearPipeline.GeoNearPipeline;exports.geoNearPipeline=GeoNearPipeline.geoNearPipeline;exports.GroupByPipeline=GroupByPipeline.GroupByPipeline;exports.groupByPipeline=GroupByPipeline.groupByPipeline;exports.LimitPipeline=LimitPipeline.LimitPipeline;exports.limitPipeline=LimitPipeline.limitPipeline;exports.LookupPipeline=LookupPipeline.LookupPipeline;exports.lookupPipeline=LookupPipeline.lookupPipeline;exports.OrWherePipeline=OrWherePipeline.OrWherePipeline;exports.orWherePipeline=OrWherePipeline.orWherePipeline;exports.SelectPipeline=SelectPipeline.SelectPipeline;exports.selectPipeline=SelectPipeline.selectPipeline;exports.SkipPipeline=SkipPipeline.SkipPipeline;exports.skipPipeline=SkipPipeline.skipPipeline;exports.SortByPipeline=SortByPipeline.SortByPipeline;exports.sortByPipeline=SortByPipeline.sortByPipeline;exports.SortPipeline=SortPipeline.SortPipeline;exports.sortPipeline=SortPipeline.sortPipeline;exports.SortRandomPipeline=SortRandomPipeline.SortRandomPipeline;exports.sortRandomPipeline=SortRandomPipeline.sortRandomPipeline;exports.UnwindPipeline=UnwindPipeline.UnwindPipeline;exports.unwindPipeline=UnwindPipeline.unwindPipeline;exports.WhereExpression=WhereExpression.WhereExpression;exports.parseValuesInObject=WhereExpression.parseValuesInObject;exports.toOperator=WhereExpression.toOperator;exports.WhereExpressionPipeline=WhereExpressionPipeline.WhereExpressionPipeline;exports.WherePipeline=WherePipeline.WherePipeline;exports.wherePipeline=WherePipeline.wherePipeline;exports.Aggregate=aggregate.Aggregate;exports.$agg=expressions.$agg;exports._divide=expressions._divide;exports._multiply=expressions._multiply;exports._round=expressions._round;exports.addToSet=expressions.addToSet;exports.all=expressions.all;exports.average=expressions.average;exports.avg=expressions.avg;exports.between=expressions.between;exports.booleanCond=expressions.booleanCond;exports.columnName=expressions.columnName;exports.columns=expressions.columns;exports.concat=expressions.concat;exports.concatWith=expressions.concatWith;exports.cond=expressions.cond;exports.condition=expressions.condition;exports.count=expressions.count;exports.dayOfMonth=expressions.dayOfMonth;exports.dayOfWeek=expressions.dayOfWeek;exports.divide=expressions.divide;exports.eq=expressions.eq;exports.equal=expressions.equal;exports.exists=expressions.exists;exports.expr=expressions.expr;exports.first=expressions.first;exports.firstDayOfMonth=expressions.firstDayOfMonth;exports.firstMonth=expressions.firstMonth;exports.firstYear=expressions.firstYear;exports.greaterThan=expressions.greaterThan;exports.greaterThanOrEqual=expressions.greaterThanOrEqual;exports.gt=expressions.gt;exports.gte=expressions.gte;exports.inArray=expressions.inArray;exports.isNull=expressions.isNull;exports.last=expressions.last;exports.lastDayOfMonth=expressions.lastDayOfMonth;exports.lastMonth=expressions.lastMonth;exports.lastYear=expressions.lastYear;exports.lessThan=expressions.lessThan;exports.lessThanOrEqual=expressions.lessThanOrEqual;exports.like=expressions.like;exports.lt=expressions.lt;exports.lte=expressions.lte;exports.max=expressions.max;exports.merge=expressions.merge;exports.mergeWith=expressions.mergeWith;exports.min=expressions.min;exports.month=expressions.month;exports.multiply=expressions.multiply;exports.ne=expressions.ne;exports.nin=expressions.nin;exports.notBetween=expressions.notBetween;exports.notEqual=expressions.notEqual;exports.notExists=expressions.notExists;exports.notIn=expressions.notIn;exports.notInArray=expressions.notInArray;exports.notLike=expressions.notLike;exports.notNull=expressions.notNull;exports.push=expressions.push;exports.regex=expressions.regex;exports.round=expressions.round;exports.size=expressions.size;exports.sum=expressions.sum;exports.week=expressions.week;exports.year=expressions.year;exports.parsePipeline=parsePipelines.parsePipeline;exports.parsePipelines=parsePipelines.parsePipelines;exports.Pipeline=pipeline.Pipeline;exports.whereOperators=types.whereOperators;exports.applyFilters=applyFilters.applyFilters;exports.Blueprint=blueprint.Blueprint;exports.blueprint=blueprint.blueprint;exports.ModelBlueprint=modelBlueprint.ModelBlueprint;exports.modelBlueprint=modelBlueprint.modelBlueprint;exports.arrayOf=arrayOf.arrayOf;exports.castEmail=castEmail.castEmail;exports.castModel=castModel.castModel;exports.expiresAfter=expiresAfter.expiresAfter;exports.castEnum=oneOf.castEnum;exports.oneOf=oneOf.oneOf;exports.randomString=randomString.randomString;exports.randomInteger=randomInteger.randomInteger;Object.defineProperty(exports,'ShapedArrayType',{enumerable:true,get:function(){return shapedArray.ShapedArrayType}});exports.shapedArray=shapedArray.shapedArray;exports.getDatabaseConfig=config.getDatabaseConfig;exports.getDatabaseConfigurations=config.getDatabaseConfigurations;exports.getDatabaseDebugLevel=config.getDatabaseDebugLevel;exports.setDatabaseConfigurations=config.setDatabaseConfigurations;exports.Connection=connection.Connection;exports.connection=connection.connection;exports.Database=database.Database;exports.database=database.database;exports.dropMigrations=migrate.dropMigrations;exports.listMigrations=migrate.listMigrations;exports.migrate=migrate.migrate;exports.MigrationOffice=migrationOffice.MigrationOffice;exports.migrationOffice=migrationOffice.migrationOffice;exports.ModelAggregate=ModelAggregate.ModelAggregate;exports.ModelSync=ModelSync.ModelSync;exports.BaseModel=baseModel.BaseModel;exports.CrudModel=crudModel.CrudModel;exports.Joinable=joinable.Joinable;exports.MasterMind=masterMind.MasterMind;exports.masterMind=masterMind.masterMind;exports.Model=model.Model;Object.defineProperty(exports,'ModelDeleteStrategy',{enumerable:true,get:function(){return types$1.ModelDeleteStrategy}});exports.Query=query.Query;exports.query=query.query;exports.connectToDatabase=connectToDatabase.connectToDatabase;exports.dropAllDatabaseIndexes=dropAllDatabaseIndexes.dropAllDatabaseIndexes;exports.listDatabaseIndexes=listDatabaseIndexes.listDatabaseIndexes;exports.listIndexesForCertainCollections=listDatabaseIndexes.listIndexesForCertainCollections;exports.printCollectionIndexes=listDatabaseIndexes.printCollectionIndexes;exports.onceConnected=onceConnected.onceConnected;exports.registerSyncs=syncWith.registerSyncs;exports.syncMany=syncWith.syncMany;exports.syncManyOnCreateFrom=syncWith.syncManyOnCreateFrom;exports.syncUnsetOnDelete=syncWith.syncUnsetOnDelete;exports.syncWith=syncWith.syncWith;//# sourceMappingURL=index.js.map
1
+ 'use strict';var context=require('@warlock.js/context'),events=require('events'),reinforcements=require('@mongez/reinforcements'),supportiveIs=require('@mongez/supportive-is'),be=require('@mongez/events'),seal=require('@warlock.js/seal'),copper=require('@mongez/copper'),logger=require('@warlock.js/logger');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var be__default=/*#__PURE__*/_interopDefault(be);var ee=class extends context.Context{getDataSource(){return this.get("dataSource")}setDataSource(e){this.set("dataSource",e);}buildStore(){return {dataSource:void 0}}},te=new ee;context.contextManager.register("db.datasource",te);var re=class extends context.Context{getSession(){return this.get("session")}setSession(e){this.set("session",e);}exit(){this.clear();}buildStore(){return {session:void 0}}},M=new re;context.contextManager.register("db.transaction",M);var x=class{name;driver;isDefault;defaultDeleteStrategy;defaultTrashTable;modelDefaults;constructor(e){this.name=e.name,this.driver=e.driver,this.isDefault=!!e.isDefault,this.defaultDeleteStrategy=e.defaultDeleteStrategy,this.defaultTrashTable=e.defaultTrashTable,this.modelDefaults=e.modelDefaults;}get idGenerator(){let e=this.driver;if(typeof e.getIdGenerator=="function")return e.getIdGenerator()}};var I=class s extends Error{dataSourceName;constructor(e,t){super(e),this.name="MissingDataSourceError",this.dataSourceName=t,Error.captureStackTrace&&Error.captureStackTrace(this,s);}};var ie=class{sources=new Map;defaultSource;events=new events.EventEmitter;register(e){let t=new x(e);this.sources.set(t.name,t);let r=t.isDefault||!this.defaultSource;return r&&(this.defaultSource=t),this.events.emit("registered",t),r&&this.events.emit("default-registered",t),t.driver.on("connected",()=>{this.events.emit("connected",t);}),t.driver.on("disconnected",()=>{this.events.emit("disconnected",t);}),t}on(e,t){this.events.on(e,t);}once(e,t){this.events.once(e,t);}off(e,t){this.events.off(e,t);}get(e){let t=e==null?te.get():null;if(t){if(t instanceof x)return t;let r=this.sources.get(t);if(!r)throw new I(`Data source "${t}" is not registered (context override).`,t);return r}if(e!=null){let r=this.sources.get(e);if(!r)throw new I(`Data source "${e}" is not registered.`,e);return r}if(!this.defaultSource)throw new I("No default data source registered.");return this.defaultSource}getAllDataSources(){return Array.from(this.sources.values())}},m=new ie;function ge(s){return supportiveIs.isPlainObject(s)}function T(s,e=".",t=false,r,i={}){if(ge(s)===false)return s;for(let n of Object.keys(s)){let o=s[n],l=r?r+e+n:n;Array.isArray(o)&&o.length===0||typeof o=="function"?i[l]=o:ge(o)?(t&&(i[l]=o),T(o,e,t,l,i)):i[l]=o;}return i}var W=class{initialRaw;currentRaw;initialFlattened;currentFlattened;dirtyColumns=new Set;removedColumns=new Set;constructor(e){this.initialRaw=this.cloneData(e),this.currentRaw=this.cloneData(e),this.initialFlattened=T(this.initialRaw),this.currentFlattened={...this.initialFlattened},this.updateDirtyState();}getDirtyColumns(){return Array.from(this.dirtyColumns)}hasChanges(){return this.dirtyColumns.size>0||this.removedColumns.size>0}isDirty(e){return this.dirtyColumns.has(e)}getRemovedColumns(){return Array.from(this.removedColumns)}getDirtyColumnsWithValues(){let e={};for(let t of this.dirtyColumns){let r=this.currentFlattened[t]!==void 0||t in this.currentFlattened;e[t]={oldValue:this.initialFlattened[t],newValue:r?this.currentFlattened[t]:void 0};}return e}replaceCurrentData(e){this.currentRaw=this.cloneData(e),this.currentFlattened=T(this.currentRaw),this.updateDirtyState();}mergeChanges(e){this.mergeIntoRaw(this.currentRaw,e),this.currentFlattened=T(this.currentRaw),this.updateDirtyState();}unset(e){let t=Array.isArray(e)?e:[e];for(let r of t)this.deleteFromRaw(r);this.currentFlattened=T(this.currentRaw),this.updateDirtyState();}reset(e){let t=e??this.currentRaw;this.initialRaw=this.cloneData(t),this.currentRaw=this.cloneData(t),this.initialFlattened=T(this.initialRaw),this.currentFlattened=T(this.currentRaw),this.dirtyColumns.clear(),this.removedColumns.clear();}updateDirtyState(){this.dirtyColumns.clear(),this.removedColumns.clear();let e=new Set([...Object.keys(this.initialFlattened),...Object.keys(this.currentFlattened)]);for(let t of e){let r=this.currentFlattened[t]!==void 0||t in this.currentFlattened,i=this.initialFlattened[t]!==void 0||t in this.initialFlattened;!r&&i&&this.removedColumns.add(t);let n=this.initialFlattened[t],o=r?this.currentFlattened[t]:void 0;reinforcements.areEqual(n,o)||this.dirtyColumns.add(t);}}mergeIntoRaw(e,t){for(let[r,i]of Object.entries(t)){if(i&&typeof i=="object"&&!Array.isArray(i)&&e[r]&&typeof e[r]=="object"&&!Array.isArray(e[r])){this.mergeIntoRaw(e[r],i);continue}e[r]=this.cloneData(i);}}deleteFromRaw(e){let t=e.split("."),r=this.currentRaw;for(let n=0;n<t.length-1;n+=1){if(r==null)return;r=this.resolveSegment(r,t[n]);}if(r==null)return;let i=t[t.length-1];if(Array.isArray(r)){let n=Number(i);Number.isNaN(n)||r.splice(n,1);return}typeof r=="object"&&delete r[i];}resolveSegment(e,t){if(Array.isArray(e)){let r=Number(t);return Number.isNaN(r)?void 0:e[r]}if(e&&typeof e=="object")return e[t]}cloneData(e){return reinforcements.clone(e)}};var P=class{listeners=new Map;on(e,t){return this.ensureListenerSet(e).add(t),()=>this.off(e,t)}once(e,t){let r=async(i,n)=>{try{await t(i,n);}finally{this.off(e,r);}};return this.on(e,r)}off(e,t){let r=this.listeners.get(e);r&&(r.delete(t),r.size===0&&this.listeners.delete(e));}async emit(e,t,r){let i=this.listeners.get(e);if(!(!i||i.size===0))for(let n of Array.from(i))await n(t,r);}async emitFetching(e,t){await this.emit("fetching",e,t);}clear(){this.listeners.clear();}onSaving(e){return this.on("saving",e)}onSaved(e){return this.on("saved",e)}onCreating(e){return this.on("creating",e)}onCreated(e){return this.on("created",e)}onUpdating(e){return this.on("updating",e)}onUpdated(e){return this.on("updated",e)}onDeleting(e){return this.on("deleting",e)}onDeleted(e){return this.on("deleted",e)}onValidating(e){return this.on("validating",e)}onValidated(e){return this.on("validated",e)}onFetching(e){return this.on("fetching",e)}onHydrating(e){return this.on("hydrating",e)}onFetched(e){return this.on("fetched",e)}onRestoring(e){return this.on("restoring",e)}onRestored(e){return this.on("restored",e)}ensureListenerSet(e){let t=this.listeners.get(e);return t||(t=new Set,this.listeners.set(e,t)),t}},ne=new P;var me="model",ye={UPDATED:"updated",DELETED:"deleted"};function K(s){return `${me}.${s.name}.${ye.UPDATED}`}function H(s){return `${me}.${s.name}.${ye.DELETED}`}var L=class{model;ctor;dataSource;driver;table;primaryKey;constructor(e){this.model=e,this.ctor=e.constructor,this.dataSource=this.ctor.getDataSource(),this.driver=this.dataSource.driver,this.table=this.ctor.table,this.primaryKey=this.ctor.primaryKey;}async destroy(e={}){let t=e.strategy??this.ctor.deleteStrategy??this.dataSource.defaultDeleteStrategy??"permanent";if(this.model.isNew)throw new Error(`Cannot destroy ${this.ctor.name} instance that hasn't been saved to the database.`);let r=this.model.get(this.primaryKey);if(!r)throw new Error(`Cannot destroy ${this.ctor.name} instance: primary key (${this.primaryKey}) is missing.`);e.skipEvents||await this.model.emitEvent("deleting",{strategy:t,primaryKeyValue:r,primaryKey:this.primaryKey});let i=0,n,o={[this.primaryKey]:r},l={strategy:t,primaryKeyValue:r,primaryKey:this.primaryKey};switch(t){case "trash":{let a=this.resolveTrashTable(),c={...this.model.data},p=this.prepareTrashRecord(c);n=(await this.driver.insert(a,p)).document,l.trashRecord=n,i=await this.driver.delete(this.table,o)>0?1:0;break}case "permanent":{i=await this.driver.delete(this.table,o)>0?1:0;break}case "soft":{let c={$set:{[this.ctor.deletedAtColumn??"deletedAt"]:new Date}};i=(await this.driver.update(this.table,o,c)).modifiedCount>0?1:0;break}}if(i===0)throw new Error(`Failed to destroy ${this.ctor.name} instance: record not found.`);return l.deletedCount=i,t!=="soft"&&(this.model.isNew=true),e.skipEvents||await this.model.emitEvent("deleted",l),e.skipSync||this.triggerSync(),{success:true,deletedCount:i,strategy:t,trashRecord:n}}prepareTrashRecord(e){return {...e,deletedAt:new Date,originalTable:this.table}}resolveTrashTable(){return this.ctor.trashTable?this.ctor.trashTable:this.dataSource.defaultTrashTable?this.dataSource.defaultTrashTable:`${this.table}Trash`}async triggerSync(){await be__default.default.triggerAll(H(this.ctor),this.model);}};var A=class{ctor;dataSource;driver;table;primaryKey;constructor(e){this.ctor=e,this.dataSource=e.getDataSource(),this.driver=this.dataSource.driver,this.table=e.table,this.primaryKey=e.primaryKey;}async restore(e,t={}){let r=t.onIdConflict??"assignNew",i=t.skipEvents??false,n=this.resolveStrategy(t.strategy);if(n==="permanent")throw new Error(`Cannot restore ${this.ctor.name} with ${this.primaryKey} ${e}: permanently deleted records cannot be restored.`);let o=await this.fetchRecordByStrategy(e,n);if(!o)throw new Error(`Cannot restore ${this.ctor.name} with ${this.primaryKey} ${e}: record not found in ${n==="trash"?"trash table":"soft-deleted records"}.`);let l={...o};delete l.deletedAt,delete l.originalTable;let a=await this.handleIdConflict(l,e,r),c=new this.ctor(a);if(i||await c.emitEvent("restoring"),n==="trash")await this.driver.insert(this.table,a),c.isNew=false,await this.driver.delete(this.resolveTrashTable(),{[this.primaryKey]:e});else if(n==="soft"){let p=this.ctor.deletedAtColumn??"deletedAt",h={[this.primaryKey]:e},y={$unset:{[p]:1}};await this.driver.update(this.table,h,y),c.isNew=false;}return i||await c.emitEvent("restored"),{success:true,restoredCount:1,strategy:n,restoredRecord:c}}async restoreAll(e={}){let t=e.onIdConflict??"assignNew",r=e.skipEvents??false,i=this.resolveStrategy(e.strategy);if(i==="permanent")throw new Error(`Cannot restore all ${this.ctor.name} records: permanently deleted records cannot be restored.`);let n=await this.fetchAllRecordsByStrategy(i);if(n.length===0)return {success:true,restoredCount:0,strategy:i};let o=0,l=[],a=[];for(let c of n){let p=c[this.primaryKey];try{let h={...c};if(delete h.deletedAt,delete h.originalTable,await this.checkIdExists(p)){if(t==="fail")throw new Error(`Cannot restore ${this.ctor.name} with ${this.primaryKey} ${p}: ID already exists in target table.`);let g=await this.assignNewId(h);l.push({id:p,reason:`ID ${p} already exists, assigned new ID ${g[this.primaryKey]}`});let d=new this.ctor(g);if(r||await d.emitEvent("restoring"),i==="trash")await this.driver.insert(this.table,g),d.isNew=!1;else if(i==="soft"){let w=this.ctor.deletedAtColumn??"deletedAt",b={[this.primaryKey]:p},k={$unset:{[w]:1}};await this.driver.update(this.table,b,k),d.isNew=!1;}a.push(d),r||await d.emitEvent("restored");}else {let g=new this.ctor(h);if(r||await g.emitEvent("restoring"),i==="trash")await this.driver.insert(this.table,h),g.isNew=!1;else if(i==="soft"){let d=this.ctor.deletedAtColumn??"deletedAt",w={[this.primaryKey]:p},b={$unset:{[d]:1}};await this.driver.update(this.table,w,b),g.isNew=!1;}a.push(g),r||await g.emitEvent("restored");}if(i==="trash"){let g=this.resolveTrashTable(),d={[this.primaryKey]:p};await this.driver.delete(g,d);}o++;}catch(h){if(t==="fail")throw h;l.push({id:p,reason:h instanceof Error?h.message:String(h)});}}return {success:true,restoredCount:o,restoredRecords:a,strategy:i,conflicts:l.length>0?l:void 0}}resolveStrategy(e){return e??this.ctor.deleteStrategy??this.dataSource.defaultDeleteStrategy??"permanent"}async fetchRecordByStrategy(e,t){if(t==="trash"){let r=this.resolveTrashTable();try{return await this.driver.queryBuilder(r).where(this.primaryKey,e).first()}catch{return null}}else if(t==="soft"){let r=this.ctor.deletedAtColumn??"deletedAt";try{return await this.driver.queryBuilder(this.table).where(this.primaryKey,e).whereNotNull(r).first()}catch{return null}}return null}async fetchAllRecordsByStrategy(e){if(e==="trash"){let t=this.resolveTrashTable();try{return await this.driver.queryBuilder(t).where("originalTable",this.table).get()}catch{return []}}else if(e==="soft"){let t=this.ctor.deletedAtColumn??"deletedAt";try{return await this.driver.queryBuilder(this.table).whereNotNull(t).get()}catch{return []}}return []}async handleIdConflict(e,t,r){if(await this.checkIdExists(t)){if(r==="fail")throw new Error(`Cannot restore ${this.ctor.name} with ${this.primaryKey} ${t}: ID already exists in target table.`);return await this.assignNewId(e)}return e}async checkIdExists(e){try{return await this.driver.queryBuilder(this.table).where(this.primaryKey,e).exists()}catch{return false}}async assignNewId(e){let t=this.driver.name==="mongodb",r={...e};return t?this.primaryKey==="_id"?delete r._id:this.primaryKey==="id"&&delete r.id:delete r[this.primaryKey],r}resolveTrashTable(){return this.ctor.trashTable?this.ctor.trashTable:this.dataSource.defaultTrashTable?this.dataSource.defaultTrashTable:`${this.table}Trash`}};var R=3,v=class{static createContext(e,t){return {sourceModel:e.sourceModel,sourceId:e.sourceId,currentDepth:e.depth,syncChain:[...e.chain],targetModel:e.targetModel,filter:{...e.filter},update:{...e.update},affectedCount:t,timestamp:new Date}}static validate(e,t,r,i,n){return e>i?{valid:false,error:`Sync depth limit exceeded: ${e} > ${i}. Chain: ${t.join(" \u2192 ")}`}:n&&this.hasCycle(t,r)?{valid:false,error:`Circular sync detected: ${r} already exists in chain [${t.join(" \u2192 ")}]`}:{valid:true}}static hasCycle(e,t){return e.includes(t)}static extendChain(e,t){return [...e,t]}static formatChain(e){return e.join(" \u2192 ")}static canSyncDeeper(e,t){return e<t}};var E=class{sourceModel;driver;constructor(e,t){this.sourceModel=e,this.driver=t;}async syncUpdate(e,t,r){try{let i=this.getSyncConfigs();if(i.length===0)return this.createEmptyResult();let n={currentDepth:1,syncChain:[this.sourceModel.name],maxDepth:3,preventCircular:!0},o=await this.collectInstructions({sourceId:e,updatedData:t,changedFields:r,syncConfigs:i,options:n});return await this.executeInstructions(o)}catch(i){return console.error(`Sync update failed for ${this.sourceModel.name}#${e}:`,i),{success:false,attempted:0,succeeded:0,failed:1,errors:[{instruction:{targetTable:"",targetModel:"",filter:{},update:{},depth:0,chain:[this.sourceModel.name],sourceModel:this.sourceModel.name,sourceId:e},error:i instanceof Error?i:new Error(String(i))}],depthReached:0,contexts:[]}}}async syncUpdateWithConfig(e,t,r,i){try{let n={currentDepth:1,syncChain:[this.sourceModel.name],maxDepth:i.maxSyncDepth,preventCircular:i.preventCircularSync},o=await this.collectInstructions({sourceId:e,updatedData:t,changedFields:r,syncConfigs:[i],options:n});return await this.executeInstructions(o)}catch(n){return console.error(`Sync update with config failed for ${this.sourceModel.name}#${e}:`,n),{success:false,attempted:0,succeeded:0,failed:1,errors:[{instruction:{targetTable:"",targetModel:"",filter:{},update:{},depth:0,chain:[this.sourceModel.name],sourceModel:this.sourceModel.name,sourceId:e},error:n instanceof Error?n:new Error(String(n))}],depthReached:0,contexts:[]}}}async syncDeleteWithConfig(e,t){try{if(!t.unsetOnDelete)return this.createEmptyResult();let r={currentDepth:1,syncChain:[this.sourceModel.name],maxDepth:t.maxSyncDepth,preventCircular:t.preventCircularSync},i=await this.collectDeleteInstructions(e,[t],r);return await this.executeInstructions(i)}catch(r){return console.error(`Sync delete with config failed for ${this.sourceModel.name}#${e}:`,r),{success:false,attempted:0,succeeded:0,failed:1,errors:[{instruction:{targetTable:"",targetModel:"",filter:{},update:{},depth:0,chain:[this.sourceModel.name],sourceModel:this.sourceModel.name,sourceId:e},error:r instanceof Error?r:new Error(String(r))}],depthReached:0,contexts:[]}}}async syncDelete(e){try{let t=this.getSyncConfigs();if(t.length===0)return this.createEmptyResult();let r={currentDepth:1,syncChain:[this.sourceModel.name],maxDepth:3,preventCircular:!0},i=await this.collectDeleteInstructions(e,t,r);return await this.executeInstructions(i)}catch(t){return console.error(`Sync delete failed for ${this.sourceModel.name}#${e}:`,t),{success:false,attempted:0,succeeded:0,failed:1,errors:[{instruction:{targetTable:"",targetModel:"",filter:{},update:{},depth:0,chain:[this.sourceModel.name],sourceModel:this.sourceModel.name,sourceId:e},error:t instanceof Error?t:new Error(String(t))}],depthReached:0,contexts:[]}}}async collectInstructions(e){let{sourceId:t,updatedData:r,changedFields:i,syncConfigs:n,options:o}=e,l=[];for(let a of n){if(!this.shouldSync(a,i))continue;let c=v.validate(o.currentDepth,o.syncChain,a.targetModelClass.name,a.maxSyncDepth,a.preventCircularSync);if(!c.valid){console.warn(`Sync validation failed: ${c.error}`);continue}let p=await this.getEmbedData(r,a),h=this.buildUpdateInstruction(t,a,p,o);if(l.push(h),await this.emitSyncingEvent(h),v.canSyncDeeper(o.currentDepth,a.maxSyncDepth)){let y=await this.collectNextLevelInstructions(h,p,i,a,o);l.push(...y);}}return l}async collectDeleteInstructions(e,t,r){let i=[];for(let n of t){if(!n.unsetOnDelete||!v.validate(r.currentDepth,r.syncChain,n.targetModelClass.name,n.maxSyncDepth,n.preventCircularSync).valid)continue;let l=this.buildDeleteInstruction(e,n,r);i.push(l),await this.emitSyncingEvent(l);}return i}async collectNextLevelInstructions(e,t,r,i,n){let o=i.targetModelClass,l=this.getSyncConfigsForModel(o);if(l.length===0)return [];let a={currentDepth:n.currentDepth+1,syncChain:v.extendChain(n.syncChain,o.name),maxDepth:Math.min(i.maxSyncDepth,n.maxDepth),preventCircular:n.preventCircular&&i.preventCircularSync},c=t[i.identifierField];return await this.collectInstructions({sourceId:c,updatedData:t,changedFields:r,syncConfigs:l,options:a})}buildUpdateInstruction(e,t,r,i){let n=t.targetModelClass,o=this.buildFilter(e,t),l=this.buildUpdate(r,t),a={targetTable:n.table,targetModel:n.name,filter:o,update:l,depth:i.currentDepth,chain:[...i.syncChain],sourceModel:this.sourceModel.name,sourceId:e};return t.isMany&&(a.isArrayUpdate=true,a.arrayField=t.targetField,a.identifierField=t.identifierField,a.identifierValue=e),a}buildDeleteInstruction(e,t,r){let i=t.targetModelClass,n=this.buildFilter(e,t),o={$unset:{[t.targetField]:1}};return {targetTable:i.table,targetModel:i.name,filter:n,update:o,depth:r.currentDepth,chain:[...r.syncChain],sourceModel:this.sourceModel.name,sourceId:e}}buildFilter(e,t){return t.isMany?{[`${t.targetField}.${t.identifierField}`]:e}:{[`${t.targetField}.${t.identifierField}`]:e}}buildUpdate(e,t){return t.isMany?{$set:{[`${t.targetField}.$`]:e}}:{$set:{[t.targetField]:e}}}async executeInstructions(e){let t={success:true,attempted:e.length,succeeded:0,failed:0,errors:[],depthReached:0,contexts:[]};if(e.length===0)return t;let r=this.groupByDepth(e);for(let[i,n]of r){t.depthReached=Math.max(t.depthReached,i);let o=this.groupByTable(n);for(let[l,a]of o)try{await this.executeBatch(a,t);}catch{console.warn(`Batch execution failed for table ${l} at depth ${i}, falling back to individual execution`),await this.executeIndividual(a,t);}}return t.success=t.failed===0,t}async executeBatch(e,t){for(let r of e)try{let i=await this.driver.updateMany(r.targetTable,r.filter,r.update),n=v.createContext(r,i.modifiedCount);t.contexts.push(n),t.succeeded++,await this.emitSyncedEvent(n);}catch(i){throw i}}async executeIndividual(e,t){for(let r of e)try{let i=await this.driver.updateMany(r.targetTable,r.filter,r.update),n=v.createContext(r,i.modifiedCount);t.contexts.push(n),t.succeeded++,await this.emitSyncedEvent(n);}catch(i){t.failed++;let n=this.formatSyncError(r,i),o=new Error(n);i instanceof Error&&i.stack&&(o.stack=i.stack),t.errors.push({instruction:r,error:o}),console.error("Sync operation failed:",{sourceModel:r.sourceModel,sourceId:r.sourceId,targetModel:r.targetModel,targetTable:r.targetTable,depth:r.depth,chain:v.formatChain(r.chain),filter:r.filter,error:n});}}formatSyncError(e,t){let r=t instanceof Error?t.message:String(t),i=v.formatChain(e.chain);return [`Sync failed at depth ${e.depth}:`,`Chain: ${i} \u2192 ${e.targetModel}`,`Source: ${e.sourceModel}#${e.sourceId}`,`Target: ${e.targetTable}`,`Error: ${r}`].join(" | ")}groupByDepth(e){let t=new Map;for(let r of e){let i=r.depth;t.has(i)||t.set(i,[]),t.get(i).push(r);}return new Map([...t.entries()].sort((r,i)=>r[0]-i[0]))}groupByTable(e){let t=new Map;for(let r of e){let i=r.targetTable;t.has(i)||t.set(i,[]),t.get(i).push(r);}return t}shouldSync(e,t){return e.watchFields.length===0?true:e.watchFields.some(r=>t.includes(r))}async getEmbedData(e,t){return e instanceof f?Array.isArray(t.embedKey)?e.only(t.embedKey):typeof e[t.embedKey]!="function"?e[t.embedKey]:typeof e.embedData=="function"?e.embedData:e.data:e}getSyncConfigs(){let e=this.sourceModel.syncWith;return !e||!Array.isArray(e)?[]:e.map(t=>typeof t.build=="function"?t.build():t)}getSyncConfigsForModel(e){let t=e.syncWith;return !t||!Array.isArray(t)?[]:t.map(r=>typeof r.build=="function"?r.build():r)}async emitSyncingEvent(e){let t={sourceModel:e.sourceModel,sourceId:e.sourceId,targetModel:e.targetModel,filter:e.filter,update:e.update,affectedCount:0,depth:e.depth,chain:e.chain};typeof this.sourceModel.emitSyncEvent=="function"&&await this.sourceModel.emitSyncEvent("syncing",t);}async emitSyncedEvent(e){let t={sourceModel:e.sourceModel,sourceId:e.sourceId,targetModel:e.targetModel,filter:e.filter,update:e.update,affectedCount:e.affectedCount,depth:e.currentDepth,chain:e.syncChain};typeof this.sourceModel.emitSyncEvent=="function"&&await this.sourceModel.emitSyncEvent("synced",t);}createEmptyResult(){return {success:true,attempted:0,succeeded:0,failed:0,errors:[],depthReached:0,contexts:[]}}};var $=class{config;subscriptions=[];isSubscribed=false;constructor(e,t,r,i){this.config={sourceModel:e,targetModel:t,targetField:r,isMany:i,embedKey:"embedData",identifierField:"id",maxSyncDepth:3,watchFields:[],unsetOnDelete:false,removeOnDelete:false},this.subscribe();}embed(e){return this.config.embedKey=e,this}identifyBy(e){return this.config.identifierField=e,this}maxDepth(e){return this.config.maxSyncDepth=e,this}watchFields(e){return this.config.watchFields=e,this}unsetOnDelete(){return this.config.unsetOnDelete=true,this}removeOnDelete(){return this.config.removeOnDelete=true,this}subscribe(){if(this.isSubscribed)return;let e=this.config.sourceModel;this.subscriptions.push(be__default.default.subscribe(K(e),this.handleModelUpdated)),this.subscriptions.push(be__default.default.subscribe(H(e),this.handleModelDeleted)),this.isSubscribed=true;}unsubscribe(){for(let e of this.subscriptions)e.unsubscribe();this.subscriptions.length=0,this.isSubscribed=false;}$cleanup(){return this.unsubscribe()}handleModelUpdated=async(e,t)=>{if(this.shouldSync(t))try{let r=this.config.sourceModel.primaryKey||"id",i=e.get(r);if(!i)return;let o=this.config.sourceModel.getDataSource().driver;await new E(this.config.sourceModel,o).syncUpdateWithConfig(i,e,t,this.buildSyncConfig());}catch(r){console.error(`[ModelSync] Failed to sync ${this.config.sourceModel.name} -> ${this.config.targetModel.name}:`,r);}};handleModelDeleted=async e=>{if(!(!this.config.unsetOnDelete&&!this.config.removeOnDelete))try{let t=this.config.sourceModel.primaryKey||"id",r=e.get(t);if(!r)return;let n=this.config.sourceModel.getDataSource().driver;this.config.removeOnDelete?await this.removeTargetDocuments(r,n):this.config.unsetOnDelete&&await new E(this.config.sourceModel,n).syncDeleteWithConfig(r,this.buildSyncConfig());}catch(t){console.error(`[ModelSync] Failed to handle delete for ${this.config.sourceModel.name}:`,t);}};shouldSync(e){return this.config.watchFields.length===0?true:this.config.watchFields.some(t=>e.includes(t))}buildSyncConfig(){return {targetField:this.config.targetField,isMany:this.config.isMany,embedKey:this.config.embedKey,identifierField:this.config.identifierField,maxSyncDepth:this.config.maxSyncDepth,preventCircularSync:true,watchFields:this.config.watchFields,unsetOnDelete:this.config.unsetOnDelete,targetModelClass:this.config.targetModel}}async removeTargetDocuments(e,t){let r=this.config.isMany?{[`${this.config.targetField}.${this.config.identifierField}`]:e}:{[`${this.config.targetField}.${this.config.identifierField}`]:e};await t.deleteMany(this.config.targetModel.table,r);}getConfig(){return {...this.config}}};var oe=class{operations=[];registrationStack=[];sync(e,t,r){let i=new $(e,t,r,false);return this.trackOperation(i),i}syncMany(e,t,r){let i=new $(e,t,r,true);return this.trackOperation(i),i}register(e){let t=[];this.registrationStack.push(t);try{e();}finally{this.registrationStack.pop();}return ()=>{for(let r of t){r.unsubscribe();let i=this.operations.indexOf(r);i!==-1&&this.operations.splice(i,1);}}}clear(){for(let e of this.operations)e.unsubscribe();this.operations.length=0;}get count(){return this.operations.length}trackOperation(e){this.operations.push(e);let t=this.registrationStack[this.registrationStack.length-1];t&&t.push(e);}},q=new oe;var G=class s extends Error{errors;constructor(e,t){super(e),this.name="DatabaseWriterValidationError",this.errors=t,Error.captureStackTrace&&Error.captureStackTrace(this,s),Object.defineProperty(this,"inspect",{value:()=>this.toString(),enumerable:false});}[Symbol.for("nodejs.util.inspect.custom")](){return this.toString()}toString(){let e=this.message.match(/\[(\w+)\s+Model\]/),t=e?e[1]:"Model",r=this.message.includes("Insert")?"Insert":"Update",i=[];i.push(""),i.push(copper.colors.red(`\u274C Validation Error: ${t} (${r})`)),i.push("");let n=new Map;for(let o of this.errors){let l=o.input||"unknown";n.has(l)||n.set(l,[]),n.get(l).push({error:o.error,type:o.type,value:o.value});}for(let[o,l]of n){i.push(copper.colors.yellow(` Field: ${o}`));for(let a of l){if(i.push(copper.colors.white(` Error: ${a.error}`)),a.value!==void 0){let c=typeof a.value=="string"?`"${a.value}"`:JSON.stringify(a.value);i.push(copper.colors.gray(` Value: ${c}`));}a.type&&i.push(copper.colors.cyan(` Type: ${a.type}`));}i.push("");}return i.join(`
2
+ `)}getFieldErrors(e){return this.errors.filter(t=>t.input===e)}hasFieldError(e){return this.errors.some(t=>t.input===e)}};var D=new Map;function Ft(s){return function(e){let t=s?.name||e.name;if(!t)throw new Error("@RegisterModel decorator: Unable to determine model name. Please provide a name in options or ensure your class has a name.");return D.has(t)&&console.warn(`\u26A0\uFE0F Model "${t}" is already registered. This will overwrite the previous registration.`),D.set(t,e),e}}function fe(s,e){D.set(s,e);}function O(s){return D.get(s)}function we(){return new Map(D)}function Bt(){D.clear();}function ve(s){D.delete(s);}var Me=async(s,e)=>{let{model:t}=e.options;if(typeof t=="string"&&(t=O(t)),!t)throw new Error(`Model ${t} not found in registry`);return s instanceof f||(typeof s=="object"&&s?.id&&(s=Number(s.id)),typeof s!="number")?s:await t.find(s)},Ce=async(s,e)=>{if(!Array.isArray(s))return s;let{model:t}=e.options;if(typeof t=="string"&&(t=O(t)),!t)throw new Error(`Model ${t} not found in registry`);if(s.every(i=>i instanceof f))return s;let r=s.map(i=>i?.id||i).filter(i=>i!==void 0);return await t.query().whereIn("id",r).get()};var xe={name:"databaseModule",defaultErrorMessage:"The :input must be a valid :model model",async validate(s,e){return s instanceof f?seal.VALID_RULE:(this.context.attributesList.model=this.context.options.model.name,seal.invalidRule(this,e))}},Te={name:"databaseModels",defaultErrorMessage:"The :input must be a list of valid :model",async validate(s,e){let{model:t}=this.context.options;return typeof t=="string"&&(t=O(t)),this.context.attributesList.model=t.name,Array.isArray(s)?s.every(r=>r instanceof f)?seal.VALID_RULE:seal.invalidRule(this,e):seal.invalidRule(this,e)}};var De=(s,e)=>{let t=e.options.embed??"embedData";return !(s instanceof f)&&!Array.isArray(s)?s:Array.isArray(s)?s.map(r=>typeof t=="string"?r[t]:r.only(t)):typeof t=="string"?s[t]:s.only(t)};var B=class extends seal.BaseValidator{matchesType(e){return e instanceof f||typeof e=="number"||Array.isArray(e)&&e.every(t=>t instanceof f)}model(e){this.addMutator(Me,{model:e});let t=this.addRule(xe);return t.context.options.model=e,this}models(e){this.addMutator(Ce,{model:e}),this.addRule(seal.arrayRule);let t=this.addRule(Te);return t.context.options.model=e,this}embed(e){return this.addTransformer(De,{embed:e}),this}};var ke={name:"embed",version:"1.0.0",description:"Adds file upload validation (v.file())",install(){seal.v.embed=(s,e)=>new B().model(s).embed(e?.embed),seal.v.embedMany=(s,e)=>new B().models(s).embed(e?.embed);}};seal.registerPlugin(ke);var V=class{model;ctor;dataSource;driver;table;primaryKey;schema;strictMode;constructor(e){this.model=e,this.ctor=e.constructor,this.dataSource=this.ctor.getDataSource(),this.driver=this.dataSource.driver,this.table=this.ctor.table,this.primaryKey=this.ctor.primaryKey,this.schema=this.ctor.schema,this.strictMode=this.ctor.strictMode;}async save(e={}){let t=this.model.isNew;if(!t&&!this.model.hasChanges())return {success:true,document:this.model.data,isNew:false,modifiedCount:0};e.skipEvents||await this.model.emitEvent("saving",{isInsert:t,options:e,mode:t?"insert":"update"}),await this.validateAndCast(t,e);let r;t?r=await this.performInsert(e):r=await this.performUpdate(e);let i=t?[]:this.model.getDirtyColumns();return this.model.dirtyTracker.reset(),this.model.isNew=false,e.skipEvents||(await this.model.emitEvent("saved"),await this.model.emitEvent(t?"created":"updated")),!e.skipSync&&!t&&this.triggerSync(i),{success:true,document:this.model.data,isNew:t,modifiedCount:t?void 0:r.modifiedCount}}async validateAndCast(e,t){if(t.skipEvents||await this.model.emitEvent("validating",{isInsert:e,options:t,mode:e?"insert":"update"}),t.skipValidation||!this.schema)return;let r=e?this.schema.clone():this.schema.clone(Object.keys(this.model.data)).extend({id:seal.v.int(),_id:seal.v.any(),createdAt:seal.v.date(),updatedAt:seal.v.date()});this.strictMode==="strip"?r.stripUnknown():this.strictMode==="fail"?r.allowUnknown(false):this.strictMode==="allow"&&r.allowUnknown(true);let i=await seal.v.validate(r,this.model.data,{context:{model:this.model},...seal.getSealConfig()});if(!i.isValid){let n=new G(`[${this.model.constructor.name} Model] ${e?"Insert":"Update"} Validation failed`,i.errors);throw t.skipEvents||await this.model.emitEvent("validated",{result:i,error:n}),n}this.model.replaceData(i.data),t.skipEvents||await this.model.emitEvent("validated",{result:i});}async performInsert(e){await this.generateIdIfNeeded();let t=this.model.data,r=this.ctor.createdAtColumn??"createdAt";r&&(t[r]=new Date);let i=this.ctor.updatedAtColumn??"updatedAt";i&&(t[i]=new Date),e.skipEvents||await this.model.emitEvent("creating");let n=await this.driver.insert(this.table,t);return this.model.merge(n.document),this.model.dirtyTracker.reset(),n}async performUpdate(e){if(e.skipEvents||await this.model.emitEvent("updating"),this.ctor.updatedAtColumn!==false&&this.model.set(this.ctor.updatedAtColumn??"updatedAt",new Date),e.replace){let i=await this.driver.replace(this.table,{[this.primaryKey]:this.model.get(this.primaryKey)},this.model.data);return i&&this.model.replaceData(i),{modifiedCount:i?1:0}}let t=this.buildUpdateOperations(),r={[this.primaryKey]:this.model.get(this.primaryKey)};return await this.driver.update(this.table,r,t)}async generateIdIfNeeded(){if(!this.ctor.autoGenerateId||this.model.get("id"))return;let e=this.dataSource.idGenerator;if(!e)return;let t=this.resolveInitialId(),r=this.resolveIncrementBy(),i=await e.generateNextId({table:this.table,initialId:t,incrementIdBy:r});this.model.set("id",i);}buildUpdateOperations(){let e={},t=this.model.getDirtyColumns();if(t.length>0){e.$set={};for(let i of t)this.model.get(i)!==void 0&&(e.$set[i]=this.model.get(i));}let r=this.model.getRemovedColumns();if(r.length>0){e.$unset={};for(let i of r)e.$unset[i]=1;}return e}resolveInitialId(){return this.ctor.initialId?this.ctor.initialId:this.ctor.randomInitialId?typeof this.ctor.randomInitialId=="function"?this.ctor.randomInitialId():this.randomInt(1e4,499999):1}resolveIncrementBy(){return this.ctor.incrementIdBy?this.ctor.incrementIdBy:this.ctor.randomIncrement?typeof this.ctor.randomIncrement=="function"?this.ctor.randomIncrement():this.randomInt(1,10):1}randomInt(e,t){return Math.floor(Math.random()*(t-e+1))+e}async triggerSync(e){await be__default.default.triggerAll(K(this.ctor),this.model,e);}};var Ee=Symbol("missing"),ae=new WeakMap,f=class s{static table;static resource;static resourceColumns;static toJsonColumns;static dataSource;static builder;static primaryKey="id";static embed;static schema;static strictMode="strip";static autoGenerateId=true;static initialId;static randomInitialId;static incrementIdBy=1;static randomIncrement;static createdAtColumn="createdAt";static updatedAtColumn="updatedAt";static deleteStrategy;static deletedAtColumn="deletedAt";static trashTable;static globalScopes=new Map;static localScopes=new Map;isNew=true;data;dirtyTracker;constructor(e={}){this.data=e,this.dirtyTracker=new W(this.data);}static getModel(e){return O(e)}static getAllModels(){return we()}static sync(e,t){return q.sync(this,e,t)}static syncMany(e,t){return q.syncMany(this,e,t)}get id(){return this.get("id")}get(e,t){return reinforcements.get(this.data,e,t)}only(e){return reinforcements.only(this.data,e)}string(e,t){return this.get(e,t)}number(e,t){return this.get(e,t)}boolean(e,t){return this.get(e,t)}set(e,t){let r=String(e);reinforcements.set(this.data,r,t);let i={};return reinforcements.set(i,r,t),this.dirtyTracker.mergeChanges(i),this}has(e){return reinforcements.get(this.data,e,Ee)!==Ee}increment(e,t){let i=this.get(e,0)+t;return this.set(e,i)}decrement(e,t){let i=this.get(e,0)-t;return this.set(e,i)}unset(...e){return this.data=reinforcements.unset(this.data,e),this.dirtyTracker.unset(e),this}merge(e){return this.data=reinforcements.merge(this.data,e),this.dirtyTracker.mergeChanges(e),this}hasChanges(){return this.dirtyTracker.hasChanges()}isDirty(e){return this.dirtyTracker.isDirty(e)}getDirtyColumnsWithValues(){return this.dirtyTracker.getDirtyColumnsWithValues()}getRemovedColumns(){return this.dirtyTracker.getRemovedColumns()}getDirtyColumns(){return this.dirtyTracker.getDirtyColumns()}async emitEvent(e,t){await this.constructor.events().emit(e,this,t),await ne.emit(e,this,t);}static getDataSource(){let e=this.dataSource,t;return typeof e=="string"?t=m.get(e):e?t=e:t=m.get(),!this.hasOwnProperty("_defaultsApplied")&&t.modelDefaults&&(this.applyModelDefaults(t.modelDefaults),this._defaultsApplied=true),t}static applyModelDefaults(e){e.initialId!==void 0&&this.initialId===void 0&&(this.initialId=e.initialId),e.randomInitialId!==void 0&&this.randomInitialId===void 0&&(this.randomInitialId=e.randomInitialId),e.incrementIdBy!==void 0&&this.incrementIdBy===void 0&&(this.incrementIdBy=e.incrementIdBy),e.randomIncrement!==void 0&&this.randomIncrement===void 0&&(this.randomIncrement=e.randomIncrement),e.deleteStrategy!==void 0&&this.deleteStrategy===void 0&&(this.deleteStrategy=e.deleteStrategy),e.strictMode!==void 0&&this.strictMode===void 0&&(this.strictMode=e.strictMode);}static addGlobalScope(e,t,r={}){this.globalScopes.set(e,{callback:t,timing:r.timing||"before"});}static removeGlobalScope(e){this.globalScopes.delete(e);}static addScope(e,t){this.localScopes.set(e,t);}static removeScope(e){this.localScopes.delete(e);}static query(){let e=this.newQueryBuilder(),t=this,r=new Map([...s.globalScopes,...this.globalScopes]);return e.pendingGlobalScopes=r,e.availableLocalScopes=this.localScopes,e.disabledGlobalScopes=new Set,this.events().emitFetching(e,{table:this.table,modelClass:this}),e.hydrate(i=>{let n=new t(i);return n.isNew=false,n}),e.onFetched(async(i,n)=>{await this.events().emit("fetched",i,n);}),e}static newQueryBuilder(){let e=this.getDataSource();if(this.builder){let r=this.builder;return new r(this.table,e)}return e.driver.queryBuilder(this.table)}static async first(e){let t=this.query();return e&&t.where(e),t.first()}static async last(e){let t=this.query();return e&&t.where(e),t.last()}static where(...e){return this.query().where(...e)}static count(e){let t=this.query();return e&&t.where(e),t.count()}static async find(e){return this.query().where(this.primaryKey,e).first()}static async all(e){let t=this.query();return e&&t.where(e),t.get()}static async latest(e){let t=this.query();return e&&t.where(e),await t.latest()}static increase(e,t,r){return this.query().where(e).increment(t,r)}static decrease(e,t,r){return this.query().where(e).decrement(t,r)}static async atomic(e,t){return (await this.getDataSource().driver.atomic(this.table,e,t)).modifiedCount}async destroy(e){return await new L(this).destroy(e)}self(){return this.constructor}getTableName(){return this.self().table}getPrimaryKey(){return this.self().primaryKey}getSchema(){return this.self().schema}schemaHas(e){return this.self().schema?.schema[e]!==void 0}getStrictMode(){return this.self().strictMode}getConnection(){return this.self().getDataSource()}static async delete(e){return await this.getDataSource().driver.deleteMany(this.table,e)}static async deleteOne(e){return await this.getDataSource().driver.delete(this.table,e)}static async restore(e,t){let i=await new A(this).restore(e,t);if(!i.restoredRecord)throw new Error(`Failed to restore ${this.name} with ${this.primaryKey} ${e}: no record returned.`);return i.restoredRecord}static async restoreAll(e){let r=await new A(this).restoreAll(e);return r.restoredCount===0?[]:r.restoredRecords}static async create(e){let t=new this(e);return await t.save(),t}static async createMany(e){return await Promise.all(e.map(t=>this.create(t)))}static async findOrCreate(e,t){let r=await this.first(e);return r||await this.create({...e,...t})}static async updateOrCreate(e,t){let r=await this.first(e);return r?(await r.save({merge:t}),r):await this.create({...e,...t})}get embedData(){return this.self().embed?this.only(this.self().embed):this.data}static events(){let e=ae.get(this);return e||(e=new P,ae.set(this,e)),e}static $cleanup(){ae.delete(this),ve(this.name);}static on(e,t){return this.events().on(e,t)}static once(e,t){return this.events().once(e,t)}static off(e,t){this.events().off(e,t);}static globalEvents(){return ne}replaceData(e){this.data=e,this.dirtyTracker.replaceCurrentData(e);}async save(e){return e?.merge&&this.merge(e.merge),await new V(this).save(e),this}serialize(){return this.self().getDataSource().driver.serialize(this.data)}static deserialize(e){let t=this.getDataSource().driver.deserialize(e),r=new this(t);return r.isNew=false,r}toJSON(){let e=this.self().resource;if(!e){let i=this.self().toJsonColumns;return i&&i.length>0?this.only(i):this.data}let t=this.self().resourceColumns,r=t!==void 0&&t.length>0?this.only(t):this.data;return new e(r).toJSON()}};function $e(s){return typeof s=="object"&&s!==null&&"__field"in s&&typeof s.__agg=="string"}var xr={count(){return {__agg:"count",__field:null}},sum(s){return {__agg:"sum",__field:s}},avg(s){return {__agg:"avg",__field:s}},min(s){return {__agg:"min",__field:s}},max(s){return {__agg:"max",__field:s}},distinct(s){return {__agg:"distinct",__field:s}},floor(s){return {__agg:"floor",__field:s}},first(s){return {__agg:"first",__field:s}},last(s){return {__agg:"last",__field:s}}};var U=class{constructor(e,t){this.driver=e;t&&(this.counterCollection=t);}counterCollection="MasterMind";async generateNextId(e){let{table:t,initialId:r=1,incrementIdBy:i=1}=e;return (await this.driver.getDatabase().collection(this.counterCollection).findOneAndUpdate({collection:t},[{$set:{id:{$cond:{if:{$or:[{$eq:["$id",null]},{$not:"$id"}]},then:r,else:{$add:["$id",i]}}},collection:t}}],{upsert:true,returnDocument:"after"}))?.id??r}async getLastId(e){return (await this.driver.queryBuilder(this.counterCollection).where("collection",e).first())?.id??0}async setLastId(e,t){await this.driver.update(this.counterCollection,{collection:e},{$set:{id:t,collection:e}},{upsert:true});}};var z=class{constructor(e){this.operations=e;}setOperations(e){this.operations=e;}addMatchOperation(e,t,r=true){this.operations.push({stage:"$match",mergeable:r,type:e,payload:t});}addProjectOperation(e,t,r=true){this.operations.push({stage:"$project",mergeable:r,type:e,payload:t});}addSortOperation(e,t,r=true){this.operations.push({stage:"$sort",mergeable:r,type:e,payload:t});}addGroupOperation(e,t,r=false){this.operations.push({stage:"$group",mergeable:r,type:e,payload:t});}addLookupOperation(e,t){this.operations.push({stage:"$lookup",mergeable:false,type:e,payload:t});}addOperation(e,t,r,i=false){this.operations.push({stage:e,mergeable:i,type:t,payload:r});}};var J=class{collection;operations;createSubBuilder;groupFieldNames=new Map;constructor(e){this.collection=e.collection,this.operations=e.operations,this.createSubBuilder=e.createSubBuilder;}parse(){let e=[],t=null,r=[];for(let i of this.operations)if(i.mergeable&&i.stage===t)r.push(i);else {if(r.length>0){let n=this.buildStage(t,r);if(n){let o=e.length;e.push(n),this.trackGroupFieldNames(t,r,o);}r=[];}if(i.mergeable)t=i.stage,r.push(i);else {let n=this.buildStage(i.stage,[i]);if(n){let o=e.length;e.push(n),this.trackGroupFieldNames(i.stage,[i],o);}t=null;}}if(r.length>0){let i=this.buildStage(t,r);if(i){let n=e.length;e.push(i),this.trackGroupFieldNames(t,r,n);}}return this.postProcessGroupStages(e)}trackGroupFieldNames(e,t,r){if(e==="$group"){let i=t[0];if(i.type==="groupByWithAggregates"&&i.payload.fields){let n=this.extractGroupFieldNames(i.payload.fields);n&&this.groupFieldNames.set(r,n);}}}postProcessGroupStages(e){let t=[];for(let r=0;r<e.length;r++){let i=e[r];if(i.$group&&this.groupFieldNames.has(r)){let n=this.groupFieldNames.get(r);t.push(i);let o={};if(typeof n=="string")o[n]="$_id";else if(Array.isArray(n)&&n.length>0)for(let a of n)o[a]=`$_id.${a}`;let l=Object.keys(i.$group).filter(a=>a!=="_id");for(let a of l)o[a]=1;Object.keys(o).length>0&&(o._id=0,t.push({$project:o}));}else t.push(i);}return t}toPrettyString(){let e=this.parse();if(e.length===0)return "MongoDB Aggregation Pipeline: (empty)";let t=`MongoDB Aggregation Pipeline:
3
+ `;return t+="\u2550".repeat(50)+`
4
+ `,e.forEach((r,i)=>{let n=Object.keys(r)[0],o=r[n];i>0&&(t+=`
5
+ `),t+=`Stage ${i+1}: ${copper.colors.redBright(n)}
6
+ `,t+=this.formatStageData(o,2);}),t}formatStageData(e,t=0){let r=" ".repeat(t);if(typeof e!="object"||e===null)return `${r}${JSON.stringify(e)}
7
+ `;if(Array.isArray(e)){if(e.length===0)return `${r}[]`;let n="";return e.forEach((o,l)=>{n+=`${r}[${copper.colors.magenta(l)}]:
8
+ `,n+=this.formatStageData(o,t+2);}),n}let i="";return Object.entries(e).forEach(([n,o])=>{let a=n.startsWith("$")?copper.colors.magentaBright(n):copper.colors.blue(n);if(typeof o=="object"&&o!==null&&!Array.isArray(o))i+=`${r}${a}:
9
+ `,i+=this.formatStageData(o,t+2);else if(Array.isArray(o))i+=`${r}${a}:
10
+ `,i+=this.formatStageData(o,t+2);else {let c=typeof o=="number"?copper.colors.yellowBright(o):typeof o=="boolean"?copper.colors.cyanBright(o.toString()):typeof o=="string"?copper.colors.greenBright(JSON.stringify(o)):copper.colors.greenBright(String(o));i+=`${r}${a}: ${c}
11
+ `;}}),i.endsWith(`
12
+ `)?i:`${i}
13
+ `}buildStage(e,t){switch(e){case "$match":return this.buildMatchStage(t);case "$project":return this.buildProjectStage(t);case "$sort":return this.buildSortStage(t);case "$group":return this.buildGroupStage(t);case "$lookup":return this.buildLookupStage(t);case "$limit":return {$limit:t[0].payload.value};case "$skip":return {$skip:t[0].payload.value};case "$setWindowFields":return {$setWindowFields:t[0].payload.spec};default:return null}}buildMatchStage(e){let t={},r=[],i=[],n=false,o=d=>{if(d){if(this.isPureOrCondition(d)){r.push(...d.$or);return}if(Array.isArray(d)){r.push(...d);return}r.push(d);}},l=d=>{d&&Object.entries(d).forEach(([w,b])=>{if(w==="$or"){o(b);return}b&&typeof b=="object"&&!Array.isArray(b)&&t[w]&&typeof t[w]=="object"&&!Array.isArray(t[w])?t[w]={...t[w],...b}:t[w]=b;});},a=d=>{d&&(n?o(d):i.push(d));},c=()=>{if(!n)for(n=true;i.length>0;){let d=i.shift();d&&o(d);}},p=()=>{i.length!==0&&(n?i.forEach(o):i.forEach(l),i.length=0);};for(let d of e){if(d.type==="where:callback"||d.type==="orWhere:callback"){p();let b=this.buildCallbackCondition(d.payload);if(!b)continue;d.type==="orWhere:callback"||n&&!this.isPureOrCondition(b)||this.isPureOrCondition(b)?(d.type==="orWhere:callback"&&c(),o(b)):l(b);continue}if(d.type==="where:object"){a(d.payload);continue}if(d.type==="where:not"||d.type==="orWhere:not"||d.type==="where:exists"||d.type==="where:notExists"){let b=d.type==="where:not"||d.type==="where:notExists",k=this.buildCallbackCondition(d.payload.callback);if(k){let he=b?{$nor:[k]}:k;d.type.startsWith("orWhere")?(c(),o(he)):a(he);}continue}if(d.type==="orWhere:object"){c(),o(d.payload);continue}let w=this.buildWhereCondition(d);w&&(d.type.startsWith("orWhere")?(c(),o(w)):a(w));}p();let h=Object.keys(t).length>0,y=r.length>0;if(!h&&!y)return null;let g={};return h&&Object.assign(g,t),y&&(g.$or=r),{$match:g}}isPureOrCondition(e){return e&&typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length===1&&Array.isArray(e.$or)}buildCallbackCondition(e){let t=this.createSubBuilder();e(t);let r=t.operations.filter(a=>a.stage==="$match");if(r.length===0)return null;let i={},n=[],o=r.some(a=>a.type.startsWith("orWhere")),l=a=>{if(a){if(this.isPureOrCondition(a)){n.push(...a.$or);return}n.push(a);}};if(o){for(let a of r){if(a.type==="where:callback"||a.type==="orWhere:callback"){let p=this.buildCallbackCondition(a.payload);p&&l(p);continue}if(a.type==="where:object"||a.type==="orWhere:object"){l(a.payload);continue}let c=this.buildWhereCondition(a);c&&l(c);}return n.length>0?{$or:n}:null}for(let a of r)if(a.type==="where:callback"){let c=this.buildCallbackCondition(a.payload);c&&Object.assign(i,c);}else if(a.type==="where:object")Object.assign(i,a.payload);else {let c=this.buildWhereCondition(a);c&&Object.assign(i,c);}return Object.keys(i).length>0?i:null}buildWhereCondition(e){let{field:t,operator:r,value:i}=e.payload;switch(e.type){case "where":case "orWhere":return this.buildOperatorCondition(t,r,i);case "whereIn":return {[t]:{$in:i||e.payload.values}};case "whereNotIn":return {[t]:{$nin:i||e.payload.values}};case "whereNull":return {[t]:null};case "whereNotNull":return {[t]:{$ne:null}};case "whereBetween":return {[t]:{$gte:e.payload.range[0],$lte:e.payload.range[1]}};case "whereNotBetween":return {[t]:{$not:{$gte:e.payload.range[0],$lte:e.payload.range[1]}}};case "whereLike":{let n=typeof e.payload.pattern=="string"?e.payload.pattern:e.payload.pattern.source;return {[t]:{$regex:n,$options:"i"}}}case "whereNotLike":{let n=typeof e.payload.pattern=="string"?e.payload.pattern:e.payload.pattern.source;return {[t]:{$not:{$regex:n,$options:"i"}}}}case "whereStartsWith":return {[t]:{$regex:`^${e.payload.value}`,$options:"i"}};case "whereNotStartsWith":return {[t]:{$not:{$regex:`^${e.payload.value}`,$options:"i"}}};case "whereEndsWith":return {[t]:{$regex:`${e.payload.value}$`,$options:"i"}};case "whereNotEndsWith":return {[t]:{$not:{$regex:`${e.payload.value}$`,$options:"i"}}};case "whereExists":return {[t]:{$exists:true}};case "whereNotExists":return {[t]:{$exists:false}};case "whereSize":return e.payload.operator==="="?{[t]:{$size:e.payload.size}}:{$expr:{[this.getMongoOperator(e.payload.operator)]:[{$size:`$${t}`},e.payload.size]}};case "textSearch":return {$text:{$search:e.payload.query},...e.payload.filters||{}};case "whereRaw":case "orWhereRaw":return this.resolveRawExpression(e.payload.expression,e.payload.bindings);case "whereColumn":case "orWhereColumn":return this.buildColumnComparison(e.payload.first,e.payload.operator,e.payload.second);case "whereBetweenColumns":return this.buildBetweenColumnsCondition(e.payload.field,e.payload.lowerColumn,e.payload.upperColumn);case "whereDate":case "whereDateEquals":return this.buildDateEqualityCondition(e.payload.field,e.payload.value);case "whereDateBefore":return this.buildDateBeforeCondition(e.payload.field,e.payload.value);case "whereDateAfter":return this.buildDateAfterCondition(e.payload.field,e.payload.value);case "whereTime":return this.buildTimeCondition(e.payload.field,e.payload.value);case "whereDay":return this.buildDatePartCondition(e.payload.field,"$dayOfMonth",e.payload.value);case "whereMonth":return this.buildDatePartCondition(e.payload.field,"$month",e.payload.value);case "whereYear":return this.buildDatePartCondition(e.payload.field,"$year",e.payload.value);case "whereJsonContains":return this.buildJsonContainsCondition(e.payload.path,e.payload.value);case "whereJsonDoesntContain":return this.buildJsonDoesntContainCondition(e.payload.path,e.payload.value);case "whereJsonContainsKey":return this.buildJsonContainsKeyCondition(e.payload.path);case "whereJsonLength":return this.buildJsonLengthCondition(e.payload.path,e.payload.operator,e.payload.value);case "whereJsonIsArray":return this.buildJsonTypeCondition(e.payload.path,"array");case "whereJsonIsObject":return this.buildJsonTypeCondition(e.payload.path,"object");case "whereArrayLength":return this.buildArrayLengthCondition(e.payload.field,e.payload.operator,e.payload.value);case "whereFullText":case "orWhereFullText":return {$text:{$search:e.payload.query}};case "whereSearch":return {[e.payload.field]:{$regex:e.payload.query,$options:"i"}};case "where:not":case "orWhere:not":{let n=this.buildCallbackCondition(e.payload.callback);return n?{$nor:[n]}:null}case "where:exists":return this.buildCallbackCondition(e.payload.callback);case "where:notExists":{let n=this.buildCallbackCondition(e.payload.callback);return n?{$nor:[n]}:null}case "whereArrayContains":return e.payload.key?{[t]:{$elemMatch:{[e.payload.key]:e.payload.value}}}:{[t]:e.payload.value};default:return null}}buildOperatorCondition(e,t,r){switch(t){case "=":return {[e]:r};case "!=":return {[e]:{$ne:r}};case ">":return {[e]:{$gt:r}};case ">=":return {[e]:{$gte:r}};case "<":return {[e]:{$lt:r}};case "<=":return {[e]:{$lte:r}};default:return {[e]:r}}}getMongoOperator(e){return {"=":"$eq","!=":"$ne",">":"$gt",">=":"$gte","<":"$lt","<=":"$lte"}[e]||"$eq"}resolveRawExpression(e,t){return typeof e=="string"?{$where:this.bindRawString(e,t)}:typeof e=="object"&&e!==null?e:null}bindRawString(e,t){if(!t||t.length===0)return e;let r=0;return e.replace(/\?/g,()=>{let i=t[r++];return i===void 0?"?":JSON.stringify(i)})}buildColumnComparison(e,t,r){return {$expr:{[this.getMongoOperator(t)]:[this.wrapColumn(e),this.wrapColumn(r)]}}}buildBetweenColumnsCondition(e,t,r){return {$expr:{$and:[{$gte:[this.wrapColumn(e),this.wrapColumn(t)]},{$lte:[this.wrapColumn(e),this.wrapColumn(r)]}]}}}wrapColumn(e){return e.startsWith("$")?e:`$${e}`}buildDateEqualityCondition(e,t){let r=this.normalizeDateInput(t),i=this.startOfDay(r),n=this.endOfDay(r);return {[e]:{$gte:i,$lte:n}}}buildDateBeforeCondition(e,t){let r=this.startOfDay(this.normalizeDateInput(t));return {[e]:{$lt:r}}}buildDateAfterCondition(e,t){let r=this.endOfDay(this.normalizeDateInput(t));return {[e]:{$gt:r}}}buildTimeCondition(e,t){return {$expr:{$eq:[{$dateToString:{format:"%H:%M",date:`$${e}`}},t]}}}buildDatePartCondition(e,t,r){return {$expr:{$eq:[{[t]:`$${e}`},r]}}}buildJsonContainsCondition(e,t){let r=this.normalizePath(e);return Array.isArray(t)?{[r]:{$all:t}}:{[r]:t}}buildJsonDoesntContainCondition(e,t){let r=this.normalizePath(e),i=Array.isArray(t)?t:[t];return {[r]:{$nin:i}}}buildJsonContainsKeyCondition(e){return {[this.normalizePath(e)]:{$exists:true}}}buildJsonLengthCondition(e,t,r){return {$expr:{[this.getMongoOperator(t)]:[{$size:{$ifNull:[`$${this.normalizePath(e)}`,[]]}},r]}}}buildJsonTypeCondition(e,t){return {$expr:{$eq:[{$type:`$${this.normalizePath(e)}`},t]}}}buildArrayLengthCondition(e,t,r){return {$expr:{[this.getMongoOperator(t)]:[{$size:{$ifNull:[`$${e}`,[]]}},r]}}}normalizeDateInput(e){if(e instanceof Date)return e;let t=new Date(e);if(Number.isNaN(t.getTime()))throw new Error(`Invalid date value: ${e}`);return t}startOfDay(e){let t=new Date(e);return t.setHours(0,0,0,0),t}endOfDay(e){let t=new Date(e);return t.setHours(23,59,59,999),t}normalizePath(e){return e.replace(/->/g,".")}applyProjectionFields(e,t,r){for(let i of t)e[i]=r;}applyProjectionObject(e,t){for(let[r,i]of Object.entries(t)){if(typeof i=="boolean"){e[r]=i?1:0;continue}if(typeof i=="number"){e[r]=i;continue}if(typeof i=="string"){e[i]=`$${r}`;continue}if(typeof i=="object"&&i!==null){e[r]=i;continue}e[r]=1;}}applyRawProjection(e,t,r){let i=this.resolveProjectionExpression(t,r);i&&typeof i=="object"&&i!==null&&!Array.isArray(i)&&Object.assign(e,i);}resolveProjectionExpression(e,t){if(typeof e=="string"){let r=t&&e.includes("?")?this.bindRawString(e,t):e;return r.startsWith(":")?r.slice(1):this.normalizeFieldReference(r)}return e}normalizeFieldReference(e){return typeof e=="string"?e.startsWith(":")?e.slice(1):e.startsWith("$")||!/^[a-zA-Z0-9_.]+$/.test(e)?e:`$${e}`:e}buildAggregateProjection(e,t){if(t==="count")return this.buildArraySizeExpression(e);let i={sum:"$sum",avg:"$avg",min:"$min",max:"$max",first:"$first",last:"$last"}[t];return i?{[i]:this.normalizeFieldReference(e)}:null}buildExistsProjection(e){return {$ne:[{$type:`$${e}`},"missing"]}}buildArraySizeExpression(e){return {$size:{$ifNull:[`$${e}`,[]]}}}buildCaseExpression(e,t){return {$switch:{branches:e.map(r=>({case:this.resolveProjectionExpression(r.when),then:this.resolveLiteralOrExpression(r.then)})),default:this.resolveLiteralOrExpression(t)}}}buildCondExpression(e,t,r){return {$cond:[this.resolveProjectionExpression(e),this.resolveLiteralOrExpression(t),this.resolveLiteralOrExpression(r)]}}resolveLiteralOrExpression(e){return typeof e=="string"&&e.startsWith("$")||typeof e=="string"?e:this.resolveProjectionExpression(e)}inferJsonAlias(e){let r=this.normalizePath(e).split(".");return r[r.length-1]}buildConcatExpression(e){return {$concat:e.map(t=>this.normalizeFieldReference(t))}}buildCoalesceExpression(e){if(e.length===0)return null;let t=this.normalizeFieldReference(e[e.length-1]);for(let r=e.length-2;r>=0;r--)t={$ifNull:[this.normalizeFieldReference(e[r]),t]};return t}buildProjectStage(e){if(e.length===0)return null;let t={},r=[];for(let i of e)switch(i.type){case "select":i.payload.projection?this.applyProjectionObject(t,i.payload.projection):i.payload.fields&&this.applyProjectionFields(t,i.payload.fields,1);break;case "deselect":this.applyProjectionFields(t,i.payload.fields,0);break;case "addSelect":this.applyProjectionFields(t,i.payload.fields,1);break;case "selectRaw":this.applyRawProjection(t,i.payload.expression,i.payload.bindings);break;case "selectSub":case "addSelectSub":{let n=this.resolveProjectionExpression(i.payload.expression,i.payload.bindings);n!==void 0&&(t[i.payload.alias]=n);break}case "selectAggregate":t[i.payload.alias]=this.buildAggregateProjection(i.payload.field,i.payload.aggregate);break;case "selectExists":t[i.payload.alias]=this.buildExistsProjection(i.payload.field);break;case "selectCount":t[i.payload.alias]=this.buildArraySizeExpression(i.payload.field);break;case "selectCase":t[i.payload.alias]=this.buildCaseExpression(i.payload.cases,i.payload.otherwise);break;case "selectWhen":t[i.payload.alias]=this.buildCondExpression(i.payload.condition,i.payload.thenValue,i.payload.elseValue);break;case "selectDriverProjection":r.push(i.payload.callback);break;case "selectJson":{let n=i.payload.alias??this.inferJsonAlias(i.payload.path);t[n]=this.normalizeFieldReference(`$${this.normalizePath(i.payload.path)}`);break}case "selectJsonRaw":{t[i.payload.alias]=this.resolveProjectionExpression(i.payload.expression);break}case "deselectJson":t[this.normalizePath(i.payload.path)]=0;break;case "selectConcat":t[i.payload.alias]=this.buildConcatExpression(i.payload.fields);break;case "selectCoalesce":t[i.payload.alias]=this.buildCoalesceExpression(i.payload.fields);break;}for(let i of r)i(t);return Object.keys(t).length>0?{$project:t}:null}buildSortStage(e){let t={};for(let r of e)switch(r.type){case "orderBy":t[r.payload.field]=r.payload.direction==="asc"?1:-1;break;case "orderByRandom":return {$sample:{size:r.payload.limit}};}return Object.keys(t).length>0?{$sort:t}:null}buildGroupStage(e){let t=e[0];switch(t.type){case "groupBy":{let r=this.buildGroupByStage(t.payload.fields);if(r)return r;break}case "groupByWithAggregates":{let r=this.buildGroupByWithAggregatesStage(t.payload.fields,t.payload.aggregates);if(r)return r;break}case "groupByRaw":{let r=t.payload.expression;if(r&&typeof r=="object")return {$group:r};if(r)return {$group:{_id:r}};break}case "distinct":{let r=this.buildGroupByStage(t.payload.fields);if(r)return r;break}}return null}buildGroupByStage(e){let t=this.buildGroupId(e);return t?{$group:{_id:t}}:null}buildGroupByWithAggregatesStage(e,t){let r=this.buildGroupId(e);if(!r)return null;let i={_id:r};for(let[n,o]of Object.entries(t))$e(o)?i[n]=this.translateAggregateExpression(o):i[n]=o;return {$group:i}}extractGroupFieldNames(e){return typeof e=="string"?e:Array.isArray(e)?e.every(r=>typeof r=="string")?e:null:typeof e=="object"&&e!==null?Object.keys(e):null}translateAggregateExpression(e){switch(e.__agg){case "count":return {$sum:1};case "sum":if(!e.__field)throw new Error("Sum aggregate requires a field name");return {$sum:`$${e.__field}`};case "avg":if(!e.__field)throw new Error("Average aggregate requires a field name");return {$avg:`$${e.__field}`};case "min":if(!e.__field)throw new Error("Min aggregate requires a field name");return {$min:`$${e.__field}`};case "max":if(!e.__field)throw new Error("Max aggregate requires a field name");return {$max:`$${e.__field}`};case "first":if(!e.__field)throw new Error("First aggregate requires a field name");return {$first:`$${e.__field}`};case "last":if(!e.__field)throw new Error("Last aggregate requires a field name");return {$last:`$${e.__field}`};case "distinct":if(!e.__field)throw new Error("Distinct aggregate requires a field name");return {$distinct:`$${e.__field}`};case "floor":if(!e.__field)throw new Error("Floor aggregate requires a field name");return {$floor:`$${e.__field}`};default:throw new Error(`Unknown aggregate function: ${e.__agg}`)}}buildGroupId(e){if(!e)return null;if(typeof e=="string")return `$${e}`;if(Array.isArray(e)){if(e.length===0)return null;if(e.every(r=>typeof r=="string")){let r={};for(let i of e)r[i]=`$${i}`;return r}return e.reduce((r,i)=>({...r,...i}),{})}if(typeof e=="object"){let t={};return Object.entries(e).forEach(([r,i])=>{typeof i=="string"&&!i.startsWith("$")?t[r]=`$${i}`:t[r]=i;}),t}return null}buildLookupStage(e){let r=e[0].payload;return {$lookup:{from:r.table,localField:r.localField,foreignField:r.foreignField,as:r.alias||r.table}}}};var Q=class s{constructor(e,t){this.table=e;this.dataSource=t||m.get();}operations=[];dataSource;_operationsHelper;hydrateCallback;fetchingCallback;hydratingCallback;fetchedCallback;pendingGlobalScopes;availableLocalScopes;disabledGlobalScopes=new Set;scopesApplied=false;get operationsHelper(){return this._operationsHelper||(this._operationsHelper=new z(this.operations)),this._operationsHelper}get collection(){return this.dataSource.driver.database.collection(this.table)}hydrate(e){return this.hydrateCallback=e,this}onFetching(e){return this.fetchingCallback=e,()=>{this.fetchingCallback=void 0;}}onHydrating(e){return this.hydratingCallback=e,()=>{this.hydratingCallback=void 0;}}onFetched(e){return this.fetchedCallback=e,()=>{this.fetchedCallback=void 0;}}withoutGlobalScope(...e){return e.forEach(t=>this.disabledGlobalScopes.add(t)),this}withoutGlobalScopes(){return this.pendingGlobalScopes&&this.pendingGlobalScopes.forEach((e,t)=>{this.disabledGlobalScopes.add(t);}),this}scope(e){if(!this.availableLocalScopes)throw new Error("No local scopes available");let t=this.availableLocalScopes.get(e);if(!t)throw new Error(`Local scope "${e}" not found`);return t(this),this}applyPendingScopes(){if(!this.pendingGlobalScopes||this.scopesApplied)return;let e=[],t=[];for(let[r,{callback:i,timing:n}]of this.pendingGlobalScopes){if(this.disabledGlobalScopes.has(r))continue;let o=new s(this.table,this.dataSource);i(o),n==="before"?e.push(...o.operations):t.push(...o.operations);}this.operations=[...e,...this.operations,...t],this.scopesApplied=true;}where(...e){return this.addWhereClause("where",e),this}orWhere(...e){return this.addWhereClause("orWhere",e),this}whereRaw(e,t){return this.addRawWhere("whereRaw",e,t)}orWhereRaw(e,t){return this.addRawWhere("orWhereRaw",e,t)}whereColumn(e,t,r){return this.operationsHelper.addMatchOperation("whereColumn",{first:e,operator:t,second:r}),this}orWhereColumn(e,t,r){return this.operationsHelper.addMatchOperation("orWhereColumn",{first:e,operator:t,second:r}),this}whereColumns(e){for(let[t,r,i]of e)this.whereColumn(t,r,i);return this}whereBetweenColumns(e,t,r){return this.operationsHelper.addMatchOperation("whereBetweenColumns",{field:e,lowerColumn:t,upperColumn:r}),this}whereDate(e,t){return this.operationsHelper.addMatchOperation("whereDate",{field:e,value:t}),this}whereDateEquals(e,t){return this.operationsHelper.addMatchOperation("whereDateEquals",{field:e,value:t}),this}whereDateBefore(e,t){return this.operationsHelper.addMatchOperation("whereDateBefore",{field:e,value:t}),this}whereDateAfter(e,t){return this.operationsHelper.addMatchOperation("whereDateAfter",{field:e,value:t}),this}whereTime(e,t){return this.operationsHelper.addMatchOperation("whereTime",{field:e,value:t}),this}whereDay(e,t){return this.operationsHelper.addMatchOperation("whereDay",{field:e,value:t}),this}whereMonth(e,t){return this.operationsHelper.addMatchOperation("whereMonth",{field:e,value:t}),this}whereYear(e,t){return this.operationsHelper.addMatchOperation("whereYear",{field:e,value:t}),this}whereJsonContains(e,t){return this.operationsHelper.addMatchOperation("whereJsonContains",{path:e,value:t}),this}whereJsonDoesntContain(e,t){return this.operationsHelper.addMatchOperation("whereJsonDoesntContain",{path:e,value:t}),this}whereJsonContainsKey(e){return this.operationsHelper.addMatchOperation("whereJsonContainsKey",{path:e}),this}whereJsonLength(e,t,r){return this.operationsHelper.addMatchOperation("whereJsonLength",{path:e,operator:t,value:r}),this}whereJsonIsArray(e){return this.operationsHelper.addMatchOperation("whereJsonIsArray",{path:e}),this}whereJsonIsObject(e){return this.operationsHelper.addMatchOperation("whereJsonIsObject",{path:e}),this}whereArrayLength(e,t,r){return this.operationsHelper.addMatchOperation("whereArrayLength",{field:e,operator:t,value:r}),this}whereId(e){return this.where("id",e)}whereIds(e){return this.whereIn("id",e)}whereUuid(e){return this.where("uuid",e)}whereUlid(e){return this.where("ulid",e)}whereFullText(e,t){let r=typeof e=="string"?{fields:[e]}:{fields:e??[]};return this.operationsHelper.addMatchOperation("whereFullText",{fields:r.fields,query:t}),this}orWhereFullText(e,t){let r=typeof e=="string"?{fields:[e]}:{fields:e??[]};return this.operationsHelper.addMatchOperation("orWhereFullText",{fields:r.fields,query:t}),this}whereSearch(e,t){return this.whereFullText(e,t)}whereNot(e){return this.operationsHelper.addMatchOperation("where:not",{callback:e}),this}orWhereNot(e){return this.operationsHelper.addMatchOperation("orWhere:not",{callback:e}),this}whereIn(e,t){return this.operationsHelper.addMatchOperation("whereIn",{field:e,values:t}),this}whereNotIn(e,t){return this.operationsHelper.addMatchOperation("whereNotIn",{field:e,values:t}),this}whereNull(e){return this.operationsHelper.addMatchOperation("whereNull",{field:e}),this}whereNotNull(e){return this.operationsHelper.addMatchOperation("whereNotNull",{field:e}),this}whereBetween(e,t){return this.operationsHelper.addMatchOperation("whereBetween",{field:e,range:t}),this}whereNotBetween(e,t){return this.operationsHelper.addMatchOperation("whereNotBetween",{field:e,range:t}),this}whereLike(e,t){return this.operationsHelper.addMatchOperation("whereLike",{field:e,pattern:t}),this}whereNotLike(e,t){return this.operationsHelper.addMatchOperation("whereNotLike",{field:e,pattern:t}),this}whereStartsWith(e,t){return this.operationsHelper.addMatchOperation("whereStartsWith",{field:e,value:t}),this}whereNotStartsWith(e,t){return this.operationsHelper.addMatchOperation("whereNotStartsWith",{field:e,value:t}),this}whereEndsWith(e,t){return this.operationsHelper.addMatchOperation("whereEndsWith",{field:e,value:t}),this}whereNotEndsWith(e,t){return this.operationsHelper.addMatchOperation("whereNotEndsWith",{field:e,value:t}),this}whereDateBetween(e,t){return this.operationsHelper.addMatchOperation("whereDateBetween",{field:e,range:t}),this}whereDateNotBetween(e,t){return this.operationsHelper.addMatchOperation("whereDateNotBetween",{field:e,range:t}),this}whereExists(e){return typeof e=="function"?(this.operationsHelper.addMatchOperation("where:exists",{callback:e}),this):(this.operationsHelper.addMatchOperation("whereExists",{field:e}),this)}whereNotExists(e){return typeof e=="function"?(this.operationsHelper.addMatchOperation("where:notExists",{callback:e}),this):(this.operationsHelper.addMatchOperation("whereNotExists",{field:e}),this)}whereSize(e,...t){return t.length===1?this.operationsHelper.addMatchOperation("whereSize",{field:e,operator:"=",size:t[0]}):this.operationsHelper.addMatchOperation("whereSize",{field:e,operator:t[0],size:t[1]}),this}textSearch(e,t){return this.operationsHelper.addMatchOperation("textSearch",{query:e,filters:t}),this}whereArrayContains(e,t,r){return this.operationsHelper.addMatchOperation("whereArrayContains",{field:e,value:t,key:r}),this}whereArrayNotContains(e,t,r){return this.operationsHelper.addMatchOperation("whereArrayNotContains",{field:e,value:t,key:r}),this}whereArrayHasOrEmpty(e,t,r){return this.operationsHelper.addMatchOperation("whereArrayHasOrEmpty",{field:e,value:t,key:r}),this}whereArrayNotHaveOrEmpty(e,t,r){return this.operationsHelper.addMatchOperation("whereArrayNotHaveOrEmpty",{field:e,value:t,key:r}),this}addWhereClause(e,t){t.length===1?typeof t[0]=="function"?this.operationsHelper.addMatchOperation(`${e}:callback`,t[0]):this.operationsHelper.addMatchOperation(`${e}:object`,t[0]):t.length===2?this.operationsHelper.addMatchOperation(e,{field:t[0],operator:"=",value:t[1]}):t.length===3&&this.operationsHelper.addMatchOperation(e,{field:t[0],operator:t[1],value:t[2]});}addRawWhere(e,t,r){return this.operationsHelper.addMatchOperation(e,{expression:t,bindings:r}),this}normalizeSelectFields(e){if(e.length===1){let t=e[0];if(typeof t=="object"&&!Array.isArray(t))return {projection:t};if(Array.isArray(t))return {fields:t};if(typeof t=="string")return {fields:[t]}}return {fields:e.filter(t=>typeof t=="string")}}select(...e){let t=this.normalizeSelectFields(e);return this.operationsHelper.addProjectOperation("select",t),this}selectAs(e,t){return this.select({[e]:t})}selectRaw(e,t){return this.operationsHelper.addProjectOperation("selectRaw",{expression:e,bindings:t}),this}selectRawMany(e){for(let t of e)this.selectRaw({[t.alias]:t.expression},t.bindings);return this}selectSub(e,t){return this.operationsHelper.addProjectOperation("selectSub",{expression:e,alias:t}),this}addSelectSub(e,t){return this.operationsHelper.addProjectOperation("addSelectSub",{expression:e,alias:t}),this}selectAggregate(e,t,r){return this.operationsHelper.addProjectOperation("selectAggregate",{field:e,aggregate:t,alias:r}),this}selectExists(e,t){return this.operationsHelper.addProjectOperation("selectExists",{field:e,alias:t}),this}selectCount(e,t){return this.operationsHelper.addProjectOperation("selectCount",{field:e,alias:t}),this}selectCase(e,t,r){return this.operationsHelper.addProjectOperation("selectCase",{cases:e,otherwise:t,alias:r}),this}selectWhen(e,t,r,i){return this.operationsHelper.addProjectOperation("selectWhen",{condition:e,thenValue:t,elseValue:r,alias:i}),this}selectDriverProjection(e){return this.operationsHelper.addProjectOperation("selectDriverProjection",{callback:e}),this}selectJson(e,t){return this.operationsHelper.addProjectOperation("selectJson",{path:e,alias:t}),this}selectJsonRaw(e,t,r){return this.operationsHelper.addProjectOperation("selectJsonRaw",{path:e,expression:t,alias:r}),this}deselectJson(e){return this.operationsHelper.addProjectOperation("deselectJson",{path:e}),this}selectConcat(e,t){return this.operationsHelper.addProjectOperation("selectConcat",{fields:e,alias:t}),this}selectCoalesce(e,t){return this.operationsHelper.addProjectOperation("selectCoalesce",{fields:e,alias:t}),this}selectWindow(e){return this.operationsHelper.addOperation("$setWindowFields","selectWindow",{spec:e},false),this}deselect(...e){let t=this.normalizeSelectFields(e);return this.operationsHelper.addProjectOperation("deselect",{fields:t}),this}distinctValues(e){return this.operationsHelper.addGroupOperation("distinct",{fields:e},false),this}addSelect(...e){let t=this.normalizeSelectFields(e);return this.operationsHelper.addProjectOperation("addSelect",{fields:t}),this}clearSelect(){return this.operations=this.operations.filter(e=>e.stage!=="$project"),this}selectAll(){return this.clearSelect()}selectDefault(){return this.clearSelect()}orderBy(e,t="asc"){if(typeof e=="string")this.operationsHelper.addSortOperation("orderBy",{field:e,direction:t});else for(let[r,i]of Object.entries(e))this.operationsHelper.addSortOperation("orderBy",{field:r,direction:i});return this}orderByDesc(e){return this.orderBy(e,"desc")}orderByRaw(e,t){return this.operationsHelper.addSortOperation("orderByRaw",{expression:e,bindings:t}),this}orderByRandom(e=1e3){return this.operationsHelper.addSortOperation("orderByRandom",{limit:e},false),this}latest(e="createdAt"){return this.orderBy(e,"desc").get()}oldest(e="createdAt"){return this.orderBy(e,"asc")}limit(e){return this.operationsHelper.addOperation("$limit","limit",{value:e},false),this}skip(e){return this.operationsHelper.addOperation("$skip","skip",{value:e},false),this}offset(e){return this.skip(e)}take(e){return this.limit(e)}cursor(e,t){return this.operationsHelper.addMatchOperation("cursor",{after:e,before:t}),this}groupBy(e,t){return t?this.operationsHelper.addGroupOperation("groupByWithAggregates",{fields:e,aggregates:t},false):this.operationsHelper.addGroupOperation("groupBy",{fields:e},false),this}groupByRaw(e,t){return this.operationsHelper.addGroupOperation("groupByRaw",{expression:e,bindings:t},false),this}having(...e){return e.length===1?this.operationsHelper.addMatchOperation("having:condition",e[0],false):e.length===2?this.operationsHelper.addMatchOperation("having",{field:e[0],operator:"=",value:e[1]},false):this.operationsHelper.addMatchOperation("having",{field:e[0],operator:e[1],value:e[2]},false),this}havingRaw(e,t){return this.operationsHelper.addMatchOperation("havingRaw",{expression:e,bindings:t},false),this}join(e){return this.operationsHelper.addLookupOperation("join",e),this}raw(e){return this.operationsHelper.addMatchOperation("raw",{builder:e},false),this}extend(e,...t){throw new Error(`Extension '${e}' is not supported by MongoQueryBuilder`)}clone(){let e=new s(this.table,this.dataSource);return e.operations=[...this.operations],e.hydrateCallback=this.hydrateCallback?.bind(e),e.fetchingCallback=this.fetchingCallback?.bind(e),e.hydratingCallback=this.hydratingCallback?.bind(e),e.fetchedCallback=this.fetchedCallback?.bind(e),e.pendingGlobalScopes=this.pendingGlobalScopes,e.availableLocalScopes=this.availableLocalScopes,e.disabledGlobalScopes=new Set(this.disabledGlobalScopes),e.scopesApplied=this.scopesApplied,e.__operationsHelper=this.__operationsHelper,e}tap(e){return e(this),this}when(e,t,r){return e?t(this,e):r&&r(this),this}async get(){let e=Date.now();this.fetchingCallback&&await this.fetchingCallback(this);let t=await this.execute();this.hydratingCallback&&await this.hydratingCallback(t,{query:this,hydrateCallback:this.hydrateCallback});let r=this.hydrateCallback?t.map(this.hydrateCallback):t;return this.fetchedCallback&&await this.fetchedCallback(r,{query:this,rawRecords:t,duration:Date.now()-e}),r}async getFirst(){return (await this.get())?.[0]??null}async first(){let e=await this.limit(1).get();return e.length>0?e[0]:null}async firstOrFail(){let e=await this.first();if(!e)throw new Error("No records found matching the query");return e}last(e="createdAt"){return this.orderBy(e,"desc"),this.first()}async count(){let e=this.buildPipeline();e.push({$count:"total"});let t=await this.execute(e);return t.length>0?t[0].total:0}async sum(e){return this.groupByRaw({_id:null,total:{$sum:`$${e}`}}),this.hydrateCallback=void 0,(await this.getFirst())?.total??0}async avg(e){return this.groupByRaw({_id:null,average:{$avg:`$${e}`}}),this.hydrateCallback=void 0,(await this.getFirst())?.average??0}async min(e){return this.groupByRaw({_id:null,minimum:{$min:`$${e}`}}),this.hydrateCallback=void 0,(await this.getFirst())?.minimum??0}async max(e){return this.groupByRaw({_id:null,maximum:{$max:`$${e}`}}),this.hydrateCallback=void 0,(await this.getFirst())?.maximum??0}async distinct(e,t=true){return t&&this.whereNotNull(e),this.groupBy(e),this.hydrateCallback=void 0,(await this.get()).map(i=>i._id)}async countDistinct(e,t=true){return t&&this.whereNotNull(e),await this.groupBy(e).count()}async pluck(e){return this.hydrateCallback=void 0,(await this.selectAs(e,"value").get()).map(r=>r.value).filter(r=>r!==void 0)}async value(e){return this.hydrateCallback=void 0,(await this.selectAs(e,"value").first())?.value??null}async exists(e){return e&&this.where(e),await this.limit(1).count()>0}async notExists(e){return !await this.exists(e)}async increment(e,t=1){let r=this.buildFilter(),i=await this.collection.findOneAndUpdate(r,{$inc:{[e]:t}},{returnDocument:"after"});return reinforcements.get(i,e,0)}async decrement(e,t=1){return this.increment(e,-t)}async incrementMany(e,t=1){let r=this.buildFilter();return (await this.dataSource.driver.updateMany(this.table,r,{$inc:{[e]:t}})).modifiedCount}async decrementMany(e,t=1){return this.incrementMany(e,-t)}async delete(){let e=this.buildFilter();return await this.dataSource.driver.deleteMany(this.table,e)}async deleteOne(){let e=this.buildFilter();return await this.dataSource.driver.delete(this.table,e)}async update(e){let t=this.buildFilter();return (await this.dataSource.driver.updateMany(this.table,t,{$set:e})).modifiedCount}async unset(...e){let t=this.buildFilter();return (await this.dataSource.driver.updateMany(this.table,t,{$unset:e.reduce((i,n)=>(i[n]=1,i),{})})).modifiedCount}async chunk(e,t){let r=0,i=true;for(;i;){let n=await this.clone().skip(r*e).limit(e).get();if(n.length===0||await t(n,r)===false)break;i=n.length===e,r++;}}async paginate(e){let t=e.page??1,r=e.limit??10,i=(t-1)*r,[n,o]=await Promise.all([this.clone().skip(i).limit(r).get(),this.count()]);return {data:n,pagination:{total:o,page:t,limit:r,pages:Math.ceil(o/r)}}}async cursorPaginate(e){let t=e.limit,r=e.cursor,i=e.column??"_id",n=e.direction??"next";if(r){let g=n==="next"?">":"<";this.where(i,g,r);}let o=n==="next"?"asc":"desc";this.orderBy(i,o),this.orderBy("_id",o);let l=await this.limit(t+1).get(),a=l.length>t,c=a?l.slice(0,t):l;n==="prev"&&(c=c.reverse());let p,h,y=false;if(c.length>0){let g=c[0][i],d=c[c.length-1][i];n==="next"?(p=a?d:void 0,r&&(y=true,h=g)):(h=a?g:void 0,y=a,r&&(p=d));}return {data:c,pagination:{hasMore:a,hasPrev:y,nextCursor:p,prevCursor:h}}}parse(){return this.buildPipeline()}pretty(){return this.getParser().toPrettyString()}async explain(){let e=this.buildPipeline(),t=M.getSession(),r=t?{session:t,explain:true}:{explain:true};return this.collection.aggregate(e,r).toArray()}getParser(){return this.applyPendingScopes(),new J({collection:this.collection,operations:this.operations,createSubBuilder:()=>new s(this.table,this.dataSource)})}buildPipeline(){return this.getParser().parse()}buildFilter(){if(this.operations.filter(i=>i.stage==="$match").length===0)return {};let r=this.buildPipeline().find(i=>i.$match);return r&&r.$match?r.$match:{}}async execute(e){let t=e||this.buildPipeline(),i={session:M.getSession()},n=await this.collection.aggregate(t,i).toArray();return this.operations=[],this.operationsHelper.setOperations(this.operations),n}};var Y=class{driver;constructor(e){this.driver=e;}async executeBatch(e){let t=0;for(let r of e){let i=r.isArrayUpdate?await this.executeArrayUpdate(r):await this.executeOne(r);t+=i;}return t}async executeOne(e){return (await this.driver.updateMany(e.targetTable,e.filter,e.update)).modifiedCount}async executeArrayUpdate(e){if(!e.arrayField||!e.identifierField)throw new Error("Array update requires arrayField and identifierField to be specified");return this.canUsePositionalOperator(e)?(await this.driver.updateMany(e.targetTable,e.filter,e.update)).modifiedCount:await this.executeWithArrayFilters(e)}canUsePositionalOperator(e){return `${e.arrayField}.${e.identifierField}`in e.filter}async executeWithArrayFilters(e){let t=[{[`elem.${e.identifierField}`]:e.identifierValue}],r=this.transformUpdateForArrayFilters(e.update,e.arrayField),i=this.buildOptimizedFilter(e.filter,e.arrayField,e.identifierField);return (await this.driver.updateMany(e.targetTable,i,r,{arrayFilters:t})).modifiedCount}buildOptimizedFilter(e,t,r){return `${t}.${r}`in e?e:{...e,[t]:{$exists:true,$ne:[]}}}transformUpdateForArrayFilters(e,t){let r={};for(let[i,n]of Object.entries(e))if(typeof n=="object"&&n!==null){let o={};for(let[l,a]of Object.entries(n)){let c=l.replace(`${t}.$`,`${t}.$[elem]`);o[c]=a;}r[i]=o;}return r}};var _=class{constructor(e){this.driver=e;}session;get db(){return this.driver.getDatabase()}get sessionOptions(){let e=M.getSession();return e?{session:e}:void 0}async createTable(e){try{await this.db.createCollection(e);}catch(t){if(t.codeName==="NamespaceExists")return;throw t}}async createTableIfNotExists(e){try{await this.db.createCollection(e);}catch(t){if(t.codeName==="NamespaceExists")return;throw t}}async dropTable(e){await this.db.dropCollection(e);}async dropTableIfExists(e){try{await this.db.dropCollection(e);}catch{}}async renameTable(e,t){await this.db.renameCollection(e,t);}async tableExists(e){return (await this.db.listCollections({name:e}).toArray()).length>0}async addColumn(e,t){}async dropColumn(e,t){await this.db.collection(e).updateMany({},{$unset:{[t]:""}},this.sessionOptions);}async dropColumns(e,t){let r=this.db.collection(e),i={};for(let n of t)i[n]="";await r.updateMany({},{$unset:i},this.sessionOptions);}async renameColumn(e,t,r){await this.db.collection(e).updateMany({},{$rename:{[t]:r}},this.sessionOptions);}async modifyColumn(e,t){}async createIndex(e,t){let r=this.db.collection(e),i={};for(let o=0;o<t.columns.length;o++){let l=t.columns[o],a=t.directions?.[o]==="desc"?-1:1;i[l]=a;}let n={};t.name&&(n.name=t.name),t.unique&&(n.unique=true),t.sparse&&(n.sparse=true),t.where&&(n.partialFilterExpression=t.where),await r.createIndex(i,n);}async dropIndex(e,t){let r=this.db.collection(e);Array.isArray(t)||(t=[t]);let i=t.map(n=>`${n}_1`).join("_");await r.dropIndex(i);}async createUniqueIndex(e,t,r){await this.createIndex(e,{columns:t,unique:true,name:r});}async dropUniqueIndex(e,t){let r=this.db.collection(e),i=await r.indexes();for(let n of i){let o=Object.keys(n.key||{});if(o.length===t.length&&o.every((l,a)=>l===t[a])&&n.name&&n.name!=="_id_"){await r.dropIndex(n.name);return}}}async createFullTextIndex(e,t,r){let i=this.db.collection(e),n={};for(let l of t)n[l]="text";let o={};r?.name&&(o.name=r.name),r?.language&&(o.default_language=r.language),r?.weights&&(o.weights=r.weights),await i.createIndex(n,o);}async dropFullTextIndex(e,t){await this.dropIndex(e,t);}async createGeoIndex(e,t,r){let i=this.db.collection(e),n=r?.type??"2dsphere",o={};r?.name&&(o.name=r.name),r?.min!==void 0&&(o.min=r.min),r?.max!==void 0&&(o.max=r.max),await i.createIndex({[t]:n},o);}async dropGeoIndex(e,t){let r=this.db.collection(e),i=await r.indexes();for(let n of i){let o=n.key||{};if(t in o&&(o[t]==="2dsphere"||o[t]==="2d")&&n.name&&n.name!=="_id_"){await r.dropIndex(n.name);return}}}async createVectorIndex(e,t,r){let i=this.db.collection(e);try{let n=await i.listSearchIndexes?.()?.toArray?.();if(Array.isArray(n)){await i.createSearchIndex({name:r.name??`${t}_vector_idx`,definition:{mappings:{dynamic:!1,fields:{[t]:{type:"knnVector",dimensions:r.dimensions,similarity:r.similarity??"cosine"}}}}});return}}catch{}await i.createIndex({[t]:1},{name:r.name??`${t}_vector_idx`});}async dropVectorIndex(e,t){let r=this.db.collection(e);try{let n=await r.listSearchIndexes?.()?.toArray?.();if(Array.isArray(n)){for(let o of n)if(o.name?.includes(t)){await r.dropSearchIndex(o.name);return}}}catch{}let i=`${t}_vector_idx`;try{await r.dropIndex(i);}catch{}}async createTTLIndex(e,t,r){await this.db.collection(e).createIndex({[t]:1},{expireAfterSeconds:r});}async dropTTLIndex(e,t){let r=this.db.collection(e),i=await r.indexes();for(let n of i){let o=n.key||{};if(t in o&&n.expireAfterSeconds!==void 0&&n.name&&n.name!=="_id_"){await r.dropIndex(n.name);return}}}async addForeignKey(e,t){}async dropForeignKey(e,t){}async addPrimaryKey(e,t){}async dropPrimaryKey(e){}async setSchemaValidation(e,t){await this.db.command({collMod:e,validator:{$jsonSchema:t},validationLevel:"strict",validationAction:"error"});}async removeSchemaValidation(e){await this.db.command({collMod:e,validator:{},validationLevel:"off"});}async beginTransaction(){let e=await this.driver.beginTransaction();this.session=e.context;}async commit(){this.session&&(await this.session.commitTransaction(),await this.session.endSession(),this.session=void 0);}async rollback(){this.session&&(await this.session.abortTransaction(),await this.session.endSession(),this.session=void 0);}supportsTransactions(){return true}async raw(e){return e(this.db)}};var X=class{constructor(e){this.database=e;}async listTables(){return (await this.database.listCollections().toArray()).map(t=>t.name)}async listIndexes(e){return (await this.database.collection(e).indexes()).map(this.buildIndexInformation)}buildIndexInformation(e){return {name:e.name,type:e.type,columns:Object.keys(e.key),unique:!!e.unique,partial:!!e.partialFilterExpression,options:e}}async listColumns(e){return console.log(copper.colors.yellowBright(`MongoDBBlueprint: listColumns(${e}) MongoDB does not have static columns`)),[]}async tableExists(e){return (await this.database.listCollections().toArray()).some(r=>r.name===e)}};var et={readPreference:"primary",readConcern:{level:"local"},writeConcern:{w:"majority"}},ce,Z=class{constructor(e,t){this.config=e;this.driverOptions=t;this.transactionOptions={...et,...t?.transactionOptions};}events=new events.EventEmitter;client;database;connected=false;syncAdapterInstance;migrationDriverInstance;transactionOptions;idGeneratorInstance;_blueprint;get blueprint(){return this._blueprint||(this._blueprint=new X(this.database)),this._blueprint}name="mongodb";get isConnected(){return this.connected}getDatabase(){if(!this.database)throw new Error("Database not available. Ensure the driver is connected before accessing the database.");return this.database}getIdGenerator(){if(this.driverOptions?.autoGenerateId!==false)return this.idGeneratorInstance||(this.idGeneratorInstance=new U(this,this.driverOptions?.counterCollection)),this.idGeneratorInstance}async connect(){if(this.connected)return;let e=this.resolveUri(),{MongoClient:t,ObjectId:r}=await import('mongodb');ce=r;let i=new t(e,this.buildClientOptions());try{logger.log.info("database","connection",`Connecting to database ${copper.colors.bold(copper.colors.yellowBright(this.config.database))}`),await i.connect(),this.client=i,this.database=i.db(this.config.database),this.connected=!0,logger.log.success("database","connection","Connected to database"),i.on("close",()=>{this.connected&&(this.connected=!1,this.emit("disconnected"),logger.log.warn("database","connection","Disconnected from database"));}),this.emit("connected");}catch(n){throw await i.close().catch(()=>{}),this.emit("disconnected"),n}}async disconnect(){if(this.client)try{await this.client.close();}finally{this.connected=false,this.emit("disconnected");}}on(e,t){this.events.on(e,t);}async insert(e,t,r){let i=this.getDatabaseInstance().collection(e),n=this.withSession(r),o=await i.insertOne(t,n);return {document:{...t,_id:o.insertedId}}}async insertMany(e,t,r){let i=this.getDatabaseInstance().collection(e),n=this.withSession(r),o=await i.insertMany(t,n);return t.map((l,a)=>{let c=o.insertedIds[a];return {document:{...l,_id:c}}})}async update(e,t,r,i){let n=this.getDatabaseInstance().collection(e),o=this.withSession(i);return {modifiedCount:(await n.updateOne(t,r,o)).modifiedCount}}async replace(e,t,r,i){return (await this.getDatabaseInstance().collection(e).findOneAndReplace(t,r))?.value}async updateMany(e,t,r,i){let n=this.getDatabaseInstance().collection(e),o=this.withSession(i);return {modifiedCount:(await n.updateMany(t,r,o)).modifiedCount}}async delete(e,t={},r){let i=this.getDatabaseInstance().collection(e),n=this.withSession(r);return (await i.deleteOne(t,n)).deletedCount>0?1:0}async deleteMany(e,t={},r){let i=this.getDatabaseInstance().collection(e),n=this.withSession(r);return (await i.deleteMany(t,n)).deletedCount??0}async truncateTable(e,t){let r=this.getDatabaseInstance().collection(e),i=this.withSession(t);return (await r.deleteMany({},i)).deletedCount??0}serialize(e){return e._id&&e._id instanceof ce&&(e._id=e._id.toString()),e}deserialize(e){return e._id&&typeof e._id=="string"&&(e._id=new ce(e._id)),e}queryBuilder(e){return new Q(e,m.get())}async beginTransaction(){let t=this.getClientInstance().startSession();await t.startTransaction(this.transactionOptions),M.enter({session:t});let r=false,i=async n=>{if(!r)try{await n();}finally{r=true,M.exit(),await t.endSession().catch(()=>{});}};return {context:t,commit:async()=>{await i(async()=>{try{await t.commitTransaction();}catch(n){throw await t.abortTransaction().catch(()=>{}),n}});},rollback:async()=>{await i(async()=>{await t.abortTransaction();});}}}async atomic(e,t,r,i){let n=this.getDatabaseInstance().collection(e),o=this.withSession(i);return {modifiedCount:(await n.updateMany(t,r,o)).modifiedCount}}syncAdapter(){return this.syncAdapterInstance||(this.syncAdapterInstance=new Y(this)),this.syncAdapterInstance}migrationDriver(){return this.migrationDriverInstance||(this.migrationDriverInstance=new _(this)),this.migrationDriverInstance}getClient(){return this.getClientInstance()}getClientInstance(){if(!this.client)throw new Error("Mongo driver is not connected.");return this.client}getDatabaseInstance(){if(!this.database)throw new Error("Mongo driver is not connected to a database.");return this.database}resolveUri(){if(this.config.uri)return this.config.uri;let e=this.config.host??"localhost",t=this.config.port??27017;return `mongodb://${e}:${t}`}buildClientOptions(){let e={...this.config.clientOptions??{}};return this.config.username&&!e.auth&&(e.auth={username:this.config.username,password:this.config.password}),this.config.authSource&&!e.authSource&&(e.authSource=this.config.authSource),e}emit(e,...t){this.events.emit(e,...t);}withSession(e){let t=M.getSession();if(!t)return e;let r=e?{...e}:{};return r.session=t,r}};async function oi(s){let e=s.driver??"mongodb",t=s.name??"default",r=s.isDefault??true,i;switch(e){case "mongodb":{i=new Z({database:s.database,uri:s.uri,host:s.host,port:s.port,username:s.username,password:s.password,authSource:s.authSource,clientOptions:s.clientOptions},s.driverOptions);break}case "postgres":throw new Error("PostgreSQL driver is not yet implemented. Coming soon!");case "mysql":throw new Error("MySQL driver is not yet implemented. Coming soon!");default:throw new Error(`Unknown driver: "${e}". Supported drivers: mongodb, postgres, mysql`)}let n=new x({name:t,driver:i,isDefault:r,defaultDeleteStrategy:s.defaultDeleteStrategy,defaultTrashTable:s.defaultTrashTable,modelDefaults:s.modelOptions});m.register(n);try{await i.connect();}catch(o){throw new Error(`Failed to connect to ${e} database: ${o instanceof Error?o.message:String(o)}`)}return n}function ai(s){return (t,{context:r})=>{let i=r.rootContext?.model,n=r.key,o=t,l=i.isDirty(n),a=i.isNew;return s({model:i,column:n,value:o,isChanged:l,isNew:a})}}function ui(s){class e extends f{static table=s.table;static schema=s.schema;static deleteStrategy=s.deleteStrategy||"trash";static strictMode=s.strictMode||"strip";static autoGenerateId=s.autoGenerateId||false;static randomIncrement=s.randomIncrement||false;static initialId=s.initialId||1}return s.properties&&Object.defineProperties(e.prototype,Object.getOwnPropertyDescriptors(s.properties)),s.name&&fe(s.name,e),s.statics&&Object.defineProperties(e,Object.getOwnPropertyDescriptors(s.statics)),e}function gi(s,e){let t,r;if(typeof s=="function")r=s,t="default";else {if(!e)throw new Error("Callback is required when providing a data source name or instance.");r=e,t=s;}let i;if(typeof t=="string")try{i=t==="default"?m.get():m.get(t);}catch{}else i=t;if(i&&i.driver.isConnected){r(i);return}let n=o=>{(typeof t=="string"?t==="default"?o.isDefault:o.name===t:o===t)?r(o):m.once("connected",n);};m.once("connected",n);}function mi(s,e){let t,r;if(typeof s=="function")r=s,t="default";else {if(!e)throw new Error("Callback is required when providing a data source name or instance.");r=e,t=s;}let i;if(typeof t=="string")try{i=t==="default"?m.get():m.get(t);}catch{}else i=t;if(i&&!i.driver.isConnected){r(i);return}let n=o=>{(typeof t=="string"?t==="default"?o.isDefault:o.name===t:o===t)?r(o):m.once("disconnected",n);};m.once("disconnected",n);}var u=class{constructor(e,t,r,i={}){this.migration=e;this.definition={name:t,type:r,nullable:false,...i};}definition;nullable(){return this.definition.nullable=true,this}notNullable(){return this.definition.nullable=false,this}default(e){return this.definition.defaultValue=e,this}unique(){return this.migration.addPendingIndex({columns:[this.definition.name],unique:true}),this}index(){return this.migration.addPendingIndex({columns:[this.definition.name]}),this}primary(){return this.definition.primary=true,this}autoIncrement(){return this.definition.autoIncrement=true,this}unsigned(){return this.definition.unsigned=true,this}comment(e){return this.definition.comment=e,this}getDefinition(){return this.definition}};var j=class{constructor(e,t){this.migration=e;this.definition={column:t,referencesTable:"",referencesColumn:"id",onDelete:"restrict",onUpdate:"restrict"};}definition;name(e){return this.definition.name=e,this}references(e,t="id"){return this.definition.referencesTable=e,this.definition.referencesColumn=t,this}onDelete(e){return this.definition.onDelete=e,this}onUpdate(e){return this.definition.onUpdate=e,this}cascadeAll(){return this.definition.onDelete="cascade",this.definition.onUpdate="cascade",this}add(){this.migration.addForeignKeyOperation(this.definition);}};var de=class s{static migrationName;table;static order;dataSource;createdAt;transactional;driver;pendingOperations=[];pendingIndexes=[];static for(e){class t extends s{table=e.table;dataSource=e.dataSource}return t}setDriver(e){this.driver=e;}getDriver(){return this.driver}async execute(){for(let e of this.pendingOperations)await this.executeOperation(e);for(let e of this.pendingIndexes)e.unique?await this.driver.createUniqueIndex(this.table,e.columns,e.name):await this.driver.createIndex(this.table,e);this.pendingOperations.length=0,this.pendingIndexes.length=0;}async executeOperation(e){switch(e.type){case "addColumn":await this.driver.addColumn(this.table,e.payload);break;case "dropColumn":await this.driver.dropColumn(this.table,e.payload);break;case "dropColumns":await this.driver.dropColumns(this.table,e.payload);break;case "renameColumn":{let{from:t,to:r}=e.payload;await this.driver.renameColumn(this.table,t,r);break}case "modifyColumn":await this.driver.modifyColumn(this.table,e.payload);break;case "createIndex":await this.driver.createIndex(this.table,e.payload);break;case "dropIndex":await this.driver.dropIndex(this.table,e.payload);break;case "createUniqueIndex":{let{columns:t,name:r}=e.payload;await this.driver.createUniqueIndex(this.table,t,r);break}case "dropUniqueIndex":await this.driver.dropUniqueIndex(this.table,e.payload);break;case "createFullTextIndex":{let{columns:t,options:r}=e.payload;await this.driver.createFullTextIndex(this.table,t,r);break}case "dropFullTextIndex":await this.driver.dropFullTextIndex(this.table,e.payload);break;case "createGeoIndex":{let{column:t,options:r}=e.payload;await this.driver.createGeoIndex(this.table,t,r);break}case "dropGeoIndex":await this.driver.dropGeoIndex(this.table,e.payload);break;case "createVectorIndex":{let{column:t,options:r}=e.payload;await this.driver.createVectorIndex(this.table,t,r);break}case "dropVectorIndex":await this.driver.dropVectorIndex(this.table,e.payload);break;case "createTTLIndex":{let{column:t,seconds:r}=e.payload;await this.driver.createTTLIndex(this.table,t,r);break}case "dropTTLIndex":await this.driver.dropTTLIndex(this.table,e.payload);break;case "addForeignKey":await this.driver.addForeignKey(this.table,e.payload);break;case "dropForeignKey":await this.driver.dropForeignKey(this.table,e.payload);break;case "addPrimaryKey":await this.driver.addPrimaryKey(this.table,e.payload);break;case "dropPrimaryKey":await this.driver.dropPrimaryKey(this.table);break;case "createTable":await this.driver.createTable(this.table);break;case "createTableIfNotExists":await this.driver.createTableIfNotExists(this.table);break;case "dropTable":await this.driver.dropTable(this.table);break;case "dropTableIfExists":await this.driver.dropTableIfExists(this.table);break;case "renameTable":await this.driver.renameTable(this.table,e.payload);break;case "setSchemaValidation":await this.driver.setSchemaValidation(this.table,e.payload);break;case "removeSchemaValidation":await this.driver.removeSchemaValidation(this.table);break}}addPendingIndex(e){this.pendingIndexes.push(e);}addForeignKeyOperation(e){this.pendingOperations.push({type:"addForeignKey",payload:e});}createTable(){return this.pendingOperations.push({type:"createTable",payload:null}),this}createTableIfNotExists(){return this.pendingOperations.push({type:"createTableIfNotExists",payload:null}),this}dropTable(){return this.pendingOperations.push({type:"dropTable",payload:null}),this}dropTableIfExists(){return this.pendingOperations.push({type:"dropTableIfExists",payload:null}),this}renameTableTo(e){return this.pendingOperations.push({type:"renameTable",payload:e}),this}string(e,t=255){let r=new u(this,e,"string",{length:t});return this.pendingOperations.push({type:"addColumn",payload:r.getDefinition()}),r}char(e,t){let r=new u(this,e,"char",{length:t});return this.pendingOperations.push({type:"addColumn",payload:r.getDefinition()}),r}text(e){let t=new u(this,e,"text");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}mediumText(e){let t=new u(this,e,"mediumText");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}longText(e){let t=new u(this,e,"longText");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}integer(e){let t=new u(this,e,"integer");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}int(e){return this.integer(e)}smallInteger(e){let t=new u(this,e,"smallInteger");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}smallInt(e){return this.smallInteger(e)}tinyInteger(e){let t=new u(this,e,"tinyInteger");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}tinyInt(e){return this.tinyInteger(e)}bigInteger(e){let t=new u(this,e,"bigInteger");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}bigInt(e){return this.bigInteger(e)}float(e){let t=new u(this,e,"float");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}double(e){let t=new u(this,e,"double");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}decimal(e,t=8,r=2){let i=new u(this,e,"decimal",{precision:t,scale:r});return this.pendingOperations.push({type:"addColumn",payload:i.getDefinition()}),i}boolean(e){let t=new u(this,e,"boolean");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}bool(e){return this.boolean(e)}date(e){let t=new u(this,e,"date");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}dateTime(e){let t=new u(this,e,"dateTime");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}timestamp(e){let t=new u(this,e,"timestamp");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}time(e){let t=new u(this,e,"time");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}year(e){let t=new u(this,e,"year");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}json(e){let t=new u(this,e,"json");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}object(e){return this.json(e)}binary(e){let t=new u(this,e,"binary");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}blob(e){return this.binary(e)}uuid(e){let t=new u(this,e,"uuid");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}ulid(e){let t=new u(this,e,"ulid");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}ipAddress(e){let t=new u(this,e,"ipAddress");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}macAddress(e){let t=new u(this,e,"macAddress");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}point(e){let t=new u(this,e,"point");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}polygon(e){let t=new u(this,e,"polygon");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}lineString(e){let t=new u(this,e,"lineString");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}geometry(e){let t=new u(this,e,"geometry");return this.pendingOperations.push({type:"addColumn",payload:t.getDefinition()}),t}vector(e,t){let r=new u(this,e,"vector",{dimensions:t});return this.pendingOperations.push({type:"addColumn",payload:r.getDefinition()}),r}enum(e,t){let r=new u(this,e,"enum",{values:t});return this.pendingOperations.push({type:"addColumn",payload:r.getDefinition()}),r}set(e,t){let r=new u(this,e,"set",{values:t});return this.pendingOperations.push({type:"addColumn",payload:r.getDefinition()}),r}id(e="id"){return this.integer(e).primary().autoIncrement().unsigned()}bigId(e="id"){return this.bigInteger(e).primary().autoIncrement().unsigned()}uuidId(e="id"){return this.uuid(e).primary()}timestamps(){return this.dateTime("createdAt"),this.dateTime("updatedAt"),this}softDeletes(e="deletedAt"){return this.dateTime(e).nullable()}dropColumn(e){return this.pendingOperations.push({type:"dropColumn",payload:e}),this}dropColumns(...e){return this.pendingOperations.push({type:"dropColumns",payload:e}),this}renameColumn(e,t){return this.pendingOperations.push({type:"renameColumn",payload:{from:e,to:t}}),this}index(e,t){let r=Array.isArray(e)?e:[e];return this.pendingOperations.push({type:"createIndex",payload:{columns:r,name:t}}),this}dropIndex(e){return this.pendingOperations.push({type:"dropIndex",payload:e}),this}unique(e,t){let r=Array.isArray(e)?e:[e];return this.pendingOperations.push({type:"createUniqueIndex",payload:{columns:r,name:t}}),this}dropUnique(e){let t=Array.isArray(e)?e:[e];return this.pendingOperations.push({type:"dropUniqueIndex",payload:t}),this}fullText(e,t){let r=Array.isArray(e)?e:[e];return this.pendingOperations.push({type:"createFullTextIndex",payload:{columns:r,options:t}}),this}dropFullText(e){return this.pendingOperations.push({type:"dropFullTextIndex",payload:e}),this}geoIndex(e,t){return this.pendingOperations.push({type:"createGeoIndex",payload:{column:e,options:t}}),this}dropGeoIndex(e){return this.pendingOperations.push({type:"dropGeoIndex",payload:e}),this}vectorIndex(e,t){return this.pendingOperations.push({type:"createVectorIndex",payload:{column:e,options:t}}),this}dropVectorIndex(e){return this.pendingOperations.push({type:"dropVectorIndex",payload:e}),this}ttlIndex(e,t){return this.pendingOperations.push({type:"createTTLIndex",payload:{column:e,seconds:t}}),this}dropTTLIndex(e){return this.pendingOperations.push({type:"dropTTLIndex",payload:e}),this}primaryKey(e){return this.pendingOperations.push({type:"addPrimaryKey",payload:e}),this}dropPrimaryKey(){return this.pendingOperations.push({type:"dropPrimaryKey",payload:null}),this}foreign(e){return new j(this,e)}dropForeign(e){return this.pendingOperations.push({type:"dropForeignKey",payload:e}),this}schemaValidation(e){return this.pendingOperations.push({type:"setSchemaValidation",payload:e}),this}dropSchemaValidation(){return this.pendingOperations.push({type:"removeSchemaValidation",payload:null}),this}async raw(e){return this.driver.raw(e)}};function Ci(s,e){return class extends de{static migrationName=e?.name;static createdAt=e?.createdAt;table=s.table;static transactional=e?.transactional;async up(){e?.up?.call(this);}async down(){e?.down?.call(this);}}}var pe=class{migrations=[];dataSource;cachedMigrationDriver;migrationsTable;verbose;constructor(e={}){this.dataSource=e.dataSource,this.migrationsTable=e.migrationsTable??"_migrations",this.verbose=e.verbose??true;}setDataSource(e){return this.dataSource=e,this.cachedMigrationDriver=void 0,this}getDataSource(){return this.dataSource||(this.dataSource=m.get()),this.dataSource}getMigrationDriver(){return this.cachedMigrationDriver||(this.cachedMigrationDriver=this.getDataSource().driver.migrationDriver()),this.cachedMigrationDriver}register(e){let t=e.migrationName;if(!t)throw new Error(`Migration class must have a static 'migrationName' property set. Set it in CLI after importing: MigrationClass.migrationName = "filename";`);return this.migrations.some(r=>r.migrationName===t)||this.migrations.push(e),this}registerMany(e){for(let t of e)this.register(t);return this}clear(){return this.migrations.length=0,this}getRegisteredNames(){return this.migrations.map(e=>e.migrationName)}async run(e,t={}){return this.runMigration(e,"up",{dryRun:t.dryRun,record:t.record??false})}async rollback(e,t={}){return this.runMigration(e,"down",{dryRun:t.dryRun,record:t.record??false})}async runAll(e={}){let{dryRun:t=false,record:r=true}=e,i=[],n=await this.getPendingMigrations();if(n.length===0)return logger.log.warn("database","migration","Nothing to migrate."),i;logger.log.info("database","migration",`Found ${n.length} pending migration(s).`);let o=await this.getNextBatchNumber();for(let a of n){let c=await this.runMigration(a,"up",{dryRun:t,record:r,batch:o});if(i.push(c),!c.success)break}let l=i.filter(a=>a.success).length;return logger.log.success("database","migration",`Migration complete: ${l}/${n.length} successful.`),i}async rollbackLast(e={}){return this.rollbackBatches(1,e)}async rollbackBatches(e,t={}){let r=t.dryRun??false,i=t.record??true,n=[],o=await this.getMigrationsToRollback(e);if(o.length===0)return logger.log.warn("database","migration","Nothing to rollback."),n;logger.log.info("database","migration",`Rolling back ${o.length} migration(s).`);for(let a of o){let c=await this.runMigration(a,"down",{dryRun:r,record:i});if(n.push(c),!c.success)break}let l=n.filter(a=>a.success).length;return logger.log.success("database","migration",`Rollback complete: ${l}/${o.length} successful.`),n}async rollbackAll(e={}){let t=await this.getExecutedMigrations();if(t.length===0)return logger.log.warn("database","migration","Nothing to rollback."),[];let r=Math.max(...t.map(i=>i.batch));return this.rollbackBatches(r,e)}async fresh(e={}){let t=await this.rollbackAll(e),r=await this.runAll(e);return [...t,...r]}async status(){let e=await this.getExecutedMigrations(),t=new Map(e.map(r=>[r.name,r]));return this.migrations.map(r=>{let i=new r,n=r.migrationName,o=t.get(n);return {name:n,table:i.table,executed:!!o,batch:o?.batch??null}})}async runMigration(e,t,r={}){let{dryRun:i=false,record:n=true}=r,o=Date.now(),l=true,a,c=new e,p=e.migrationName;logger.log.info("database","migration",`${t==="up"?"Migrating":"Rolling back"}: ${copper.colors.magenta(p)}...`);try{if(!i){let y=this.getMigrationDriver();if(c.setDriver(y),t==="up"?await c.up():await c.down(),await c.execute(),n)if(t==="up"){let g=r.batch??await this.getNextBatchNumber();await this.recordMigration(p,g,e.createdAt?new Date(e.createdAt):void 0);}else await this.removeMigrationRecord(p);}}catch(y){l=false,a=y instanceof Error?y.message:String(y),logger.log.error("database","migration",`${copper.colors.magenta(p)}: \u2717 Failed: ${a}`);}let h=Date.now()-o;return l&&logger.log.success("database","migration",`${t=="up"?"Migrated":"Rolled back"} ${copper.colors.magenta(p)}: successfully (${h}ms)`),{name:p,table:c.table,direction:t,success:l,error:a,durationMs:h,executedAt:new Date}}async getPendingMigrations(){let e=await this.getExecutedMigrations(),t=new Set(e.map(i=>i.name));return this.migrations.filter(i=>!t.has(i.migrationName)).sort((i,n)=>i.order&&n.order?i.order-n.order:i.migrationName.localeCompare(n.migrationName))}async getMigrationsToRollback(e){let t=await this.getExecutedMigrations();if(t.length===0)return [];let r=[...new Set(t.map(o=>o.batch))].sort((o,l)=>l-o).slice(0,e);return t.filter(o=>r.includes(o.batch)).reverse().map(o=>this.migrations.find(l=>l.migrationName===o.name)).filter(o=>!!o).sort((o,l)=>o.order&&l.order?o.order-l.order:o.migrationName.localeCompare(l.migrationName))}async getExecutedMigrations(){let e=this.getDataSource().driver;try{return await e.queryBuilder(this.migrationsTable).orderBy("batch","asc").orderBy("name","asc").get()}catch{return []}}async recordMigration(e,t,r){await this.getDataSource().driver.insert(this.migrationsTable,{name:e,batch:t,executedAt:new Date,createdAt:r});}async removeMigrationRecord(e){await this.getDataSource().driver.delete(this.migrationsTable,{name:e});}async getNextBatchNumber(){let e=await this.getExecutedMigrations();return e.length===0?1:Math.max(...e.map(t=>t.batch))+1}},Oi=new pe;
14
+ exports.$agg=xr;exports.ColumnBuilder=u;exports.DEFAULT_MAX_SYNC_DEPTH=R;exports.DataSource=x;exports.DatabaseDirtyTracker=W;exports.DatabaseRemover=L;exports.DatabaseRestorer=A;exports.DatabaseWriter=V;exports.DatabaseWriterValidationError=G;exports.ForeignKeyBuilder=j;exports.Migration=de;exports.MigrationRunner=pe;exports.MissingDataSourceError=I;exports.Model=f;exports.ModelEvents=P;exports.ModelSyncOperation=$;exports.MongoDbDriver=Z;exports.MongoIdGenerator=U;exports.MongoMigrationDriver=_;exports.MongoQueryBuilder=Q;exports.MongoSyncAdapter=Y;exports.RegisterModel=Ft;exports.SyncContextManager=v;exports.SyncManager=E;exports.cleanupModelsRegistery=Bt;exports.connectToDatabase=oi;exports.dataSourceRegistry=m;exports.databaseDataSourceContext=te;exports.databaseTransactionContext=M;exports.defineModel=ui;exports.getAllModelsFromRegistry=we;exports.getModelFromRegistry=O;exports.globalModelEvents=ne;exports.isAggregateExpression=$e;exports.migrate=Ci;exports.migrationRunner=Oi;exports.modelSync=q;exports.onceConnected=gi;exports.onceDisconnected=mi;exports.registerModelInRegistry=fe;exports.removeModelFromRegistery=ve;exports.useModelTransformer=ai;//# sourceMappingURL=index.js.map
15
+ //# sourceMappingURL=index.js.map