joist-core 2.4.0-next.37 → 2.4.0-next.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 (691) hide show
  1. package/build/BaseEntity.d.cts +3 -4
  2. package/build/BaseEntity.d.cts.map +1 -1
  3. package/build/BaseEntity.d.mts +3 -4
  4. package/build/BaseEntity.d.mts.map +1 -1
  5. package/build/Entity.d.cts +3 -4
  6. package/build/Entity.d.cts.map +1 -1
  7. package/build/Entity.d.mts +3 -4
  8. package/build/Entity.d.mts.map +1 -1
  9. package/build/EntityFields.d.cts +3 -4
  10. package/build/EntityFields.d.cts.map +1 -1
  11. package/build/EntityFields.d.mts +3 -4
  12. package/build/EntityFields.d.mts.map +1 -1
  13. package/build/EntityManager.cjs +11 -3
  14. package/build/EntityManager.cjs.map +1 -1
  15. package/build/EntityManager.d.cts +47 -41
  16. package/build/EntityManager.d.cts.map +1 -1
  17. package/build/EntityManager.d.mts +47 -41
  18. package/build/EntityManager.d.mts.map +1 -1
  19. package/build/EntityManager.js +11 -3
  20. package/build/EntityManager.js.map +1 -1
  21. package/build/EntityMetadata.d.cts +31 -32
  22. package/build/EntityMetadata.d.cts.map +1 -1
  23. package/build/EntityMetadata.d.mts +31 -32
  24. package/build/EntityMetadata.d.mts.map +1 -1
  25. package/build/EnumMetadata.d.cts +1 -2
  26. package/build/EnumMetadata.d.cts.map +1 -1
  27. package/build/EnumMetadata.d.mts +1 -2
  28. package/build/EnumMetadata.d.mts.map +1 -1
  29. package/build/IndexManager.cjs.map +1 -1
  30. package/build/IndexManager.d.cts +2 -3
  31. package/build/IndexManager.d.cts.map +1 -1
  32. package/build/IndexManager.d.mts +2 -3
  33. package/build/IndexManager.d.mts.map +1 -1
  34. package/build/IndexManager.js.map +1 -1
  35. package/build/InstanceData.cjs.map +1 -1
  36. package/build/InstanceData.d.cts +1 -2
  37. package/build/InstanceData.d.cts.map +1 -1
  38. package/build/InstanceData.d.mts +1 -2
  39. package/build/InstanceData.d.mts.map +1 -1
  40. package/build/InstanceData.js.map +1 -1
  41. package/build/PluginManager.cjs.map +1 -1
  42. package/build/PluginManager.d.cts +4 -4
  43. package/build/PluginManager.d.cts.map +1 -1
  44. package/build/PluginManager.d.mts +4 -4
  45. package/build/PluginManager.d.mts.map +1 -1
  46. package/build/PluginManager.js.map +1 -1
  47. package/build/RowData.d.cts +3 -4
  48. package/build/RowData.d.cts.map +1 -1
  49. package/build/RowData.d.mts +3 -4
  50. package/build/RowData.d.mts.map +1 -1
  51. package/build/batchloaders/BatchLoader.cjs.map +1 -1
  52. package/build/batchloaders/BatchLoader.d.cts +1 -2
  53. package/build/batchloaders/BatchLoader.d.cts.map +1 -1
  54. package/build/batchloaders/BatchLoader.d.mts +1 -2
  55. package/build/batchloaders/BatchLoader.d.mts.map +1 -1
  56. package/build/batchloaders/BatchLoader.js.map +1 -1
  57. package/build/batchloaders/enumCollectionBatchLoader.d.cts +2 -3
  58. package/build/batchloaders/enumCollectionBatchLoader.d.cts.map +1 -1
  59. package/build/batchloaders/enumCollectionBatchLoader.d.mts +2 -3
  60. package/build/batchloaders/enumCollectionBatchLoader.d.mts.map +1 -1
  61. package/build/batchloaders/loadBatchLoader.d.cts +2 -3
  62. package/build/batchloaders/loadBatchLoader.d.cts.map +1 -1
  63. package/build/batchloaders/loadBatchLoader.d.mts +2 -3
  64. package/build/batchloaders/loadBatchLoader.d.mts.map +1 -1
  65. package/build/batchloaders/manyToManyBatchLoader.d.cts +2 -3
  66. package/build/batchloaders/manyToManyBatchLoader.d.cts.map +1 -1
  67. package/build/batchloaders/manyToManyBatchLoader.d.mts +2 -3
  68. package/build/batchloaders/manyToManyBatchLoader.d.mts.map +1 -1
  69. package/build/batchloaders/oneToManyBatchLoader.d.cts +2 -3
  70. package/build/batchloaders/oneToManyBatchLoader.d.cts.map +1 -1
  71. package/build/batchloaders/oneToManyBatchLoader.d.mts +2 -3
  72. package/build/batchloaders/oneToManyBatchLoader.d.mts.map +1 -1
  73. package/build/batchloaders/oneToOneBatchLoader.d.cts +2 -3
  74. package/build/batchloaders/oneToOneBatchLoader.d.cts.map +1 -1
  75. package/build/batchloaders/oneToOneBatchLoader.d.mts +2 -3
  76. package/build/batchloaders/oneToOneBatchLoader.d.mts.map +1 -1
  77. package/build/batchloaders/populateBatchLoader.d.cts +2 -3
  78. package/build/batchloaders/populateBatchLoader.d.cts.map +1 -1
  79. package/build/batchloaders/populateBatchLoader.d.mts +2 -3
  80. package/build/batchloaders/populateBatchLoader.d.mts.map +1 -1
  81. package/build/batchloaders/recursiveChildrenBatchLoader.d.cts +2 -3
  82. package/build/batchloaders/recursiveChildrenBatchLoader.d.cts.map +1 -1
  83. package/build/batchloaders/recursiveChildrenBatchLoader.d.mts +2 -3
  84. package/build/batchloaders/recursiveChildrenBatchLoader.d.mts.map +1 -1
  85. package/build/batchloaders/recursiveM2mBatchLoader.d.cts +2 -3
  86. package/build/batchloaders/recursiveM2mBatchLoader.d.cts.map +1 -1
  87. package/build/batchloaders/recursiveM2mBatchLoader.d.mts +2 -3
  88. package/build/batchloaders/recursiveM2mBatchLoader.d.mts.map +1 -1
  89. package/build/batchloaders/recursiveParentsBatchLoader.d.cts +2 -3
  90. package/build/batchloaders/recursiveParentsBatchLoader.d.cts.map +1 -1
  91. package/build/batchloaders/recursiveParentsBatchLoader.d.mts +2 -3
  92. package/build/batchloaders/recursiveParentsBatchLoader.d.mts.map +1 -1
  93. package/build/changes.cjs.map +1 -1
  94. package/build/changes.d.cts +9 -10
  95. package/build/changes.d.cts.map +1 -1
  96. package/build/changes.d.mts +9 -10
  97. package/build/changes.d.mts.map +1 -1
  98. package/build/changes.js.map +1 -1
  99. package/build/config.d.cts +17 -17
  100. package/build/config.d.cts.map +1 -1
  101. package/build/config.d.mts +17 -17
  102. package/build/config.d.mts.map +1 -1
  103. package/build/configure.d.cts +8 -9
  104. package/build/configure.d.cts.map +1 -1
  105. package/build/configure.d.mts +8 -9
  106. package/build/configure.d.mts.map +1 -1
  107. package/build/dataloaders/fastWhereFilterHash.d.cts +1 -2
  108. package/build/dataloaders/fastWhereFilterHash.d.cts.map +1 -1
  109. package/build/dataloaders/fastWhereFilterHash.d.mts +1 -2
  110. package/build/dataloaders/fastWhereFilterHash.d.mts.map +1 -1
  111. package/build/dataloaders/findByUniqueDataLoader.d.cts +2 -3
  112. package/build/dataloaders/findByUniqueDataLoader.d.cts.map +1 -1
  113. package/build/dataloaders/findByUniqueDataLoader.d.mts +2 -3
  114. package/build/dataloaders/findByUniqueDataLoader.d.mts.map +1 -1
  115. package/build/dataloaders/findCountDataLoader.d.cts +4 -5
  116. package/build/dataloaders/findCountDataLoader.d.cts.map +1 -1
  117. package/build/dataloaders/findCountDataLoader.d.mts +4 -5
  118. package/build/dataloaders/findCountDataLoader.d.mts.map +1 -1
  119. package/build/dataloaders/findDataLoader.d.cts +11 -12
  120. package/build/dataloaders/findDataLoader.d.cts.map +1 -1
  121. package/build/dataloaders/findDataLoader.d.mts +11 -12
  122. package/build/dataloaders/findDataLoader.d.mts.map +1 -1
  123. package/build/dataloaders/findIdsDataLoader.d.cts +2 -3
  124. package/build/dataloaders/findIdsDataLoader.d.cts.map +1 -1
  125. package/build/dataloaders/findIdsDataLoader.d.mts +2 -3
  126. package/build/dataloaders/findIdsDataLoader.d.mts.map +1 -1
  127. package/build/dataloaders/findOrCreateDataLoader.d.cts +3 -3
  128. package/build/dataloaders/findOrCreateDataLoader.d.cts.map +1 -1
  129. package/build/dataloaders/findOrCreateDataLoader.d.mts +3 -3
  130. package/build/dataloaders/findOrCreateDataLoader.d.mts.map +1 -1
  131. package/build/dataloaders/findPaginatedDataLoader.d.cts +1 -2
  132. package/build/dataloaders/findPaginatedDataLoader.d.cts.map +1 -1
  133. package/build/dataloaders/findPaginatedDataLoader.d.mts +1 -2
  134. package/build/dataloaders/findPaginatedDataLoader.d.mts.map +1 -1
  135. package/build/dataloaders/lensDataLoader.d.cts +2 -3
  136. package/build/dataloaders/lensDataLoader.d.cts.map +1 -1
  137. package/build/dataloaders/lensDataLoader.d.mts +2 -3
  138. package/build/dataloaders/lensDataLoader.d.mts.map +1 -1
  139. package/build/dataloaders/manyToManyFindDataLoader.d.cts +2 -3
  140. package/build/dataloaders/manyToManyFindDataLoader.d.cts.map +1 -1
  141. package/build/dataloaders/manyToManyFindDataLoader.d.mts +2 -3
  142. package/build/dataloaders/manyToManyFindDataLoader.d.mts.map +1 -1
  143. package/build/dataloaders/oneToManyFindDataLoader.d.cts +2 -3
  144. package/build/dataloaders/oneToManyFindDataLoader.d.cts.map +1 -1
  145. package/build/dataloaders/oneToManyFindDataLoader.d.mts +2 -3
  146. package/build/dataloaders/oneToManyFindDataLoader.d.mts.map +1 -1
  147. package/build/defaults.cjs.map +1 -1
  148. package/build/defaults.d.cts +7 -7
  149. package/build/defaults.d.cts.map +1 -1
  150. package/build/defaults.d.mts +7 -7
  151. package/build/defaults.d.mts.map +1 -1
  152. package/build/defaults.js.map +1 -1
  153. package/build/drivers/Driver.d.cts +2 -3
  154. package/build/drivers/Driver.d.cts.map +1 -1
  155. package/build/drivers/Driver.d.mts +2 -3
  156. package/build/drivers/Driver.d.mts.map +1 -1
  157. package/build/drivers/EntityWriter.d.cts +7 -7
  158. package/build/drivers/EntityWriter.d.cts.map +1 -1
  159. package/build/drivers/EntityWriter.d.mts +7 -7
  160. package/build/drivers/EntityWriter.d.mts.map +1 -1
  161. package/build/drivers/IdAssigner.cjs.map +1 -1
  162. package/build/drivers/IdAssigner.d.cts +5 -5
  163. package/build/drivers/IdAssigner.d.cts.map +1 -1
  164. package/build/drivers/IdAssigner.d.mts +5 -5
  165. package/build/drivers/IdAssigner.d.mts.map +1 -1
  166. package/build/drivers/IdAssigner.js.map +1 -1
  167. package/build/drivers/driverApi.d.cts +2 -3
  168. package/build/drivers/driverApi.d.cts.map +1 -1
  169. package/build/drivers/driverApi.d.mts +2 -3
  170. package/build/drivers/driverApi.d.mts.map +1 -1
  171. package/build/fields.d.cts +6 -7
  172. package/build/fields.d.cts.map +1 -1
  173. package/build/fields.d.mts +6 -7
  174. package/build/fields.d.mts.map +1 -1
  175. package/build/flush/FlushLock.cjs.map +1 -1
  176. package/build/flush/FlushLock.d.cts +1 -2
  177. package/build/flush/FlushLock.d.cts.map +1 -1
  178. package/build/flush/FlushLock.d.mts +1 -2
  179. package/build/flush/FlushLock.d.mts.map +1 -1
  180. package/build/flush/FlushLock.js.map +1 -1
  181. package/build/flush/JoinRows.cjs.map +1 -1
  182. package/build/flush/JoinRows.d.cts +5 -6
  183. package/build/flush/JoinRows.d.cts.map +1 -1
  184. package/build/flush/JoinRows.d.mts +5 -6
  185. package/build/flush/JoinRows.d.mts.map +1 -1
  186. package/build/flush/JoinRows.js.map +1 -1
  187. package/build/flush/PendingChanges.d.cts +5 -6
  188. package/build/flush/PendingChanges.d.cts.map +1 -1
  189. package/build/flush/PendingChanges.d.mts +5 -6
  190. package/build/flush/PendingChanges.d.mts.map +1 -1
  191. package/build/flush/Todo.d.cts +5 -6
  192. package/build/flush/Todo.d.cts.map +1 -1
  193. package/build/flush/Todo.d.mts +5 -6
  194. package/build/flush/Todo.d.mts.map +1 -1
  195. package/build/getProperties.d.cts +3 -4
  196. package/build/getProperties.d.cts.map +1 -1
  197. package/build/getProperties.d.mts +3 -4
  198. package/build/getProperties.d.mts.map +1 -1
  199. package/build/index.d.cts +17 -17
  200. package/build/index.d.cts.map +1 -1
  201. package/build/index.d.mts +17 -17
  202. package/build/index.d.mts.map +1 -1
  203. package/build/json.d.cts +11 -11
  204. package/build/json.d.cts.map +1 -1
  205. package/build/json.d.mts +11 -11
  206. package/build/json.d.mts.map +1 -1
  207. package/build/keys.d.cts +27 -27
  208. package/build/keys.d.cts.map +1 -1
  209. package/build/keys.d.mts +27 -27
  210. package/build/keys.d.mts.map +1 -1
  211. package/build/loading/HintTree.d.cts +3 -4
  212. package/build/loading/HintTree.d.cts.map +1 -1
  213. package/build/loading/HintTree.d.mts +3 -4
  214. package/build/loading/HintTree.d.mts.map +1 -1
  215. package/build/loading/IsLoadedCache.cjs.map +1 -1
  216. package/build/loading/IsLoadedCache.d.cts +2 -3
  217. package/build/loading/IsLoadedCache.d.cts.map +1 -1
  218. package/build/loading/IsLoadedCache.d.mts +2 -3
  219. package/build/loading/IsLoadedCache.d.mts.map +1 -1
  220. package/build/loading/IsLoadedCache.js.map +1 -1
  221. package/build/loading/loadHints.d.cts +17 -17
  222. package/build/loading/loadHints.d.cts.map +1 -1
  223. package/build/loading/loadHints.d.mts +17 -17
  224. package/build/loading/loadHints.d.mts.map +1 -1
  225. package/build/loading/loadLens.d.cts +13 -13
  226. package/build/loading/loadLens.d.cts.map +1 -1
  227. package/build/loading/loadLens.d.mts +13 -13
  228. package/build/loading/loadLens.d.mts.map +1 -1
  229. package/build/loading/withLoaded.d.cts +5 -6
  230. package/build/loading/withLoaded.d.cts.map +1 -1
  231. package/build/loading/withLoaded.d.mts +5 -6
  232. package/build/loading/withLoaded.d.mts.map +1 -1
  233. package/build/logging/FactoryLogger.d.cts +3 -4
  234. package/build/logging/FactoryLogger.d.cts.map +1 -1
  235. package/build/logging/FactoryLogger.d.mts +3 -4
  236. package/build/logging/FactoryLogger.d.mts.map +1 -1
  237. package/build/logging/FieldLogger.cjs.map +1 -1
  238. package/build/logging/FieldLogger.d.cts +4 -5
  239. package/build/logging/FieldLogger.d.cts.map +1 -1
  240. package/build/logging/FieldLogger.d.mts +4 -5
  241. package/build/logging/FieldLogger.d.mts.map +1 -1
  242. package/build/logging/FieldLogger.js.map +1 -1
  243. package/build/logging/ReactionLogger.d.cts +7 -7
  244. package/build/logging/ReactionLogger.d.cts.map +1 -1
  245. package/build/logging/ReactionLogger.d.mts +7 -7
  246. package/build/logging/ReactionLogger.d.mts.map +1 -1
  247. package/build/newEntity.cjs.map +1 -1
  248. package/build/newEntity.d.cts +4 -5
  249. package/build/newEntity.d.cts.map +1 -1
  250. package/build/newEntity.d.mts +4 -5
  251. package/build/newEntity.d.mts.map +1 -1
  252. package/build/newEntity.js.map +1 -1
  253. package/build/newTestInstance.d.cts +21 -21
  254. package/build/newTestInstance.d.cts.map +1 -1
  255. package/build/newTestInstance.d.mts +21 -21
  256. package/build/newTestInstance.d.mts.map +1 -1
  257. package/build/normalizeHints.d.cts +7 -8
  258. package/build/normalizeHints.d.cts.map +1 -1
  259. package/build/normalizeHints.d.mts +7 -8
  260. package/build/normalizeHints.d.mts.map +1 -1
  261. package/build/nowUTC.d.cts +4 -5
  262. package/build/nowUTC.d.cts.map +1 -1
  263. package/build/nowUTC.d.mts +4 -5
  264. package/build/nowUTC.d.mts.map +1 -1
  265. package/build/plugins/ImmutableEntitiesPlugin.d.cts +1 -2
  266. package/build/plugins/ImmutableEntitiesPlugin.d.cts.map +1 -1
  267. package/build/plugins/ImmutableEntitiesPlugin.d.mts +1 -2
  268. package/build/plugins/ImmutableEntitiesPlugin.d.mts.map +1 -1
  269. package/build/plugins/PreloadPlugin.d.cts +3 -4
  270. package/build/plugins/PreloadPlugin.d.cts.map +1 -1
  271. package/build/plugins/PreloadPlugin.d.mts +3 -4
  272. package/build/plugins/PreloadPlugin.d.mts.map +1 -1
  273. package/build/preloading/JsonAggregatePreloader.d.cts +1 -2
  274. package/build/preloading/JsonAggregatePreloader.d.cts.map +1 -1
  275. package/build/preloading/JsonAggregatePreloader.d.mts +1 -2
  276. package/build/preloading/JsonAggregatePreloader.d.mts.map +1 -1
  277. package/build/preloading/canPreload.d.cts +1 -2
  278. package/build/preloading/canPreload.d.cts.map +1 -1
  279. package/build/preloading/canPreload.d.mts +1 -2
  280. package/build/preloading/canPreload.d.mts.map +1 -1
  281. package/build/preloading/partitionHint.d.cts +1 -2
  282. package/build/preloading/partitionHint.d.cts.map +1 -1
  283. package/build/preloading/partitionHint.d.mts +1 -2
  284. package/build/preloading/partitionHint.d.mts.map +1 -1
  285. package/build/queries/ConditionBuilder.d.cts +2 -2
  286. package/build/queries/ConditionBuilder.d.cts.map +1 -1
  287. package/build/queries/ConditionBuilder.d.mts +2 -2
  288. package/build/queries/ConditionBuilder.d.mts.map +1 -1
  289. package/build/queries/conditions.d.cts +11 -12
  290. package/build/queries/conditions.d.cts.map +1 -1
  291. package/build/queries/conditions.d.mts +11 -12
  292. package/build/queries/conditions.d.mts.map +1 -1
  293. package/build/queries/entityQueryUtils.d.cts +4 -5
  294. package/build/queries/entityQueryUtils.d.cts.map +1 -1
  295. package/build/queries/entityQueryUtils.d.mts +4 -5
  296. package/build/queries/entityQueryUtils.d.mts.map +1 -1
  297. package/build/queries/find/Aliases.d.cts +16 -16
  298. package/build/queries/find/Aliases.d.cts.map +1 -1
  299. package/build/queries/find/Aliases.d.mts +16 -16
  300. package/build/queries/find/Aliases.d.mts.map +1 -1
  301. package/build/queries/find/DeferredAlias.d.cts +5 -6
  302. package/build/queries/find/DeferredAlias.d.cts.map +1 -1
  303. package/build/queries/find/DeferredAlias.d.mts +5 -6
  304. package/build/queries/find/DeferredAlias.d.mts.map +1 -1
  305. package/build/queries/find/EntityFilter.d.cts +12 -13
  306. package/build/queries/find/EntityFilter.d.cts.map +1 -1
  307. package/build/queries/find/EntityFilter.d.mts +12 -13
  308. package/build/queries/find/EntityFilter.d.mts.map +1 -1
  309. package/build/queries/find/EntityGraphQLFilter.d.cts +8 -9
  310. package/build/queries/find/EntityGraphQLFilter.d.cts.map +1 -1
  311. package/build/queries/find/EntityGraphQLFilter.d.mts +8 -9
  312. package/build/queries/find/EntityGraphQLFilter.d.mts.map +1 -1
  313. package/build/queries/find/QueryParser.collectionJoins.d.cts +1 -2
  314. package/build/queries/find/QueryParser.collectionJoins.d.cts.map +1 -1
  315. package/build/queries/find/QueryParser.collectionJoins.d.mts +1 -2
  316. package/build/queries/find/QueryParser.collectionJoins.d.mts.map +1 -1
  317. package/build/queries/find/QueryParser.d.cts +18 -18
  318. package/build/queries/find/QueryParser.d.cts.map +1 -1
  319. package/build/queries/find/QueryParser.d.mts +18 -18
  320. package/build/queries/find/QueryParser.d.mts.map +1 -1
  321. package/build/queries/find/QueryParser.pruning.d.cts +2 -3
  322. package/build/queries/find/QueryParser.pruning.d.cts.map +1 -1
  323. package/build/queries/find/QueryParser.pruning.d.mts +2 -3
  324. package/build/queries/find/QueryParser.pruning.d.mts.map +1 -1
  325. package/build/queries/find/QueryVisitor.d.cts +4 -4
  326. package/build/queries/find/QueryVisitor.d.cts.map +1 -1
  327. package/build/queries/find/QueryVisitor.d.mts +4 -4
  328. package/build/queries/find/QueryVisitor.d.mts.map +1 -1
  329. package/build/queries/find/buildFindQuery.d.cts +3 -3
  330. package/build/queries/find/buildFindQuery.d.cts.map +1 -1
  331. package/build/queries/find/buildFindQuery.d.mts +3 -3
  332. package/build/queries/find/buildFindQuery.d.mts.map +1 -1
  333. package/build/queries/find/scopes.cjs.map +1 -1
  334. package/build/queries/find/scopes.d.cts +12 -13
  335. package/build/queries/find/scopes.d.cts.map +1 -1
  336. package/build/queries/find/scopes.d.mts +12 -13
  337. package/build/queries/find/scopes.d.mts.map +1 -1
  338. package/build/queries/find/scopes.js.map +1 -1
  339. package/build/queries/parsedConditions.d.cts +7 -8
  340. package/build/queries/parsedConditions.d.cts.map +1 -1
  341. package/build/queries/parsedConditions.d.mts +7 -8
  342. package/build/queries/parsedConditions.d.mts.map +1 -1
  343. package/build/queries/renderConditions.d.cts +3 -4
  344. package/build/queries/renderConditions.d.cts.map +1 -1
  345. package/build/queries/renderConditions.d.mts +3 -4
  346. package/build/queries/renderConditions.d.mts.map +1 -1
  347. package/build/queries/skipCondition.d.cts +1 -2
  348. package/build/queries/skipCondition.d.cts.map +1 -1
  349. package/build/queries/skipCondition.d.mts +1 -2
  350. package/build/queries/skipCondition.d.mts.map +1 -1
  351. package/build/queries/sql/AliasAssigner.cjs.map +1 -1
  352. package/build/queries/sql/AliasAssigner.d.cts +1 -2
  353. package/build/queries/sql/AliasAssigner.d.cts.map +1 -1
  354. package/build/queries/sql/AliasAssigner.d.mts +1 -2
  355. package/build/queries/sql/AliasAssigner.d.mts.map +1 -1
  356. package/build/queries/sql/AliasAssigner.js.map +1 -1
  357. package/build/queries/sql/Expr.d.cts +26 -27
  358. package/build/queries/sql/Expr.d.cts.map +1 -1
  359. package/build/queries/sql/Expr.d.mts +26 -27
  360. package/build/queries/sql/Expr.d.mts.map +1 -1
  361. package/build/queries/sql/JoinTree.d.cts +5 -5
  362. package/build/queries/sql/JoinTree.d.cts.map +1 -1
  363. package/build/queries/sql/JoinTree.d.mts +5 -5
  364. package/build/queries/sql/JoinTree.d.mts.map +1 -1
  365. package/build/queries/sql/Tables.d.cts +39 -39
  366. package/build/queries/sql/Tables.d.cts.map +1 -1
  367. package/build/queries/sql/Tables.d.mts +39 -39
  368. package/build/queries/sql/Tables.d.mts.map +1 -1
  369. package/build/queries/sql/custom.d.cts +14 -14
  370. package/build/queries/sql/custom.d.cts.map +1 -1
  371. package/build/queries/sql/custom.d.mts +14 -14
  372. package/build/queries/sql/custom.d.mts.map +1 -1
  373. package/build/queries/sql/execute.d.cts +15 -15
  374. package/build/queries/sql/execute.d.cts.map +1 -1
  375. package/build/queries/sql/execute.d.mts +15 -15
  376. package/build/queries/sql/execute.d.mts.map +1 -1
  377. package/build/queries/sql/expressions/arrayAgg.d.cts +5 -6
  378. package/build/queries/sql/expressions/arrayAgg.d.cts.map +1 -1
  379. package/build/queries/sql/expressions/arrayAgg.d.mts +5 -6
  380. package/build/queries/sql/expressions/arrayAgg.d.mts.map +1 -1
  381. package/build/queries/sql/expressions/case.d.cts +10 -10
  382. package/build/queries/sql/expressions/case.d.cts.map +1 -1
  383. package/build/queries/sql/expressions/case.d.mts +10 -10
  384. package/build/queries/sql/expressions/case.d.mts.map +1 -1
  385. package/build/queries/sql/expressions/coalesce.d.cts +5 -6
  386. package/build/queries/sql/expressions/coalesce.d.cts.map +1 -1
  387. package/build/queries/sql/expressions/coalesce.d.mts +5 -6
  388. package/build/queries/sql/expressions/coalesce.d.mts.map +1 -1
  389. package/build/queries/sql/expressions/codecs.d.cts +1 -2
  390. package/build/queries/sql/expressions/codecs.d.cts.map +1 -1
  391. package/build/queries/sql/expressions/codecs.d.mts +1 -2
  392. package/build/queries/sql/expressions/codecs.d.mts.map +1 -1
  393. package/build/queries/sql/expressions/expression.d.cts +6 -6
  394. package/build/queries/sql/expressions/expression.d.cts.map +1 -1
  395. package/build/queries/sql/expressions/expression.d.mts +6 -6
  396. package/build/queries/sql/expressions/expression.d.mts.map +1 -1
  397. package/build/queries/sql/expressions/greatest.d.cts +5 -6
  398. package/build/queries/sql/expressions/greatest.d.cts.map +1 -1
  399. package/build/queries/sql/expressions/greatest.d.mts +5 -6
  400. package/build/queries/sql/expressions/greatest.d.mts.map +1 -1
  401. package/build/queries/sql/expressions/least.d.cts +5 -6
  402. package/build/queries/sql/expressions/least.d.cts.map +1 -1
  403. package/build/queries/sql/expressions/least.d.mts +5 -6
  404. package/build/queries/sql/expressions/least.d.mts.map +1 -1
  405. package/build/queries/sql/expressions/nullIf.d.cts +5 -6
  406. package/build/queries/sql/expressions/nullIf.d.cts.map +1 -1
  407. package/build/queries/sql/expressions/nullIf.d.mts +5 -6
  408. package/build/queries/sql/expressions/nullIf.d.mts.map +1 -1
  409. package/build/queries/sql/expressions/parseExpression.d.cts +5 -6
  410. package/build/queries/sql/expressions/parseExpression.d.cts.map +1 -1
  411. package/build/queries/sql/expressions/parseExpression.d.mts +5 -6
  412. package/build/queries/sql/expressions/parseExpression.d.mts.map +1 -1
  413. package/build/queries/sql/expressions/types.d.cts +11 -11
  414. package/build/queries/sql/expressions/types.d.cts.map +1 -1
  415. package/build/queries/sql/expressions/types.d.mts +11 -11
  416. package/build/queries/sql/expressions/types.d.mts.map +1 -1
  417. package/build/queries/sql/keywords.d.cts +4 -5
  418. package/build/queries/sql/keywords.d.cts.map +1 -1
  419. package/build/queries/sql/keywords.d.mts +4 -5
  420. package/build/queries/sql/keywords.d.mts.map +1 -1
  421. package/build/queries/sql/query.cjs.map +1 -1
  422. package/build/queries/sql/query.d.cts +67 -67
  423. package/build/queries/sql/query.d.cts.map +1 -1
  424. package/build/queries/sql/query.d.mts +67 -67
  425. package/build/queries/sql/query.d.mts.map +1 -1
  426. package/build/queries/sql/query.js.map +1 -1
  427. package/build/queries/unnest.d.cts +2 -3
  428. package/build/queries/unnest.d.cts.map +1 -1
  429. package/build/queries/unnest.d.mts +2 -3
  430. package/build/queries/unnest.d.mts.map +1 -1
  431. package/build/queries/valueFilters.d.cts +5 -6
  432. package/build/queries/valueFilters.d.cts.map +1 -1
  433. package/build/queries/valueFilters.d.mts +5 -6
  434. package/build/queries/valueFilters.d.mts.map +1 -1
  435. package/build/reactivity/ReactionsManager.cjs.map +1 -1
  436. package/build/reactivity/ReactionsManager.d.cts +2 -3
  437. package/build/reactivity/ReactionsManager.d.cts.map +1 -1
  438. package/build/reactivity/ReactionsManager.d.mts +2 -3
  439. package/build/reactivity/ReactionsManager.d.mts.map +1 -1
  440. package/build/reactivity/ReactionsManager.js.map +1 -1
  441. package/build/reactivity/reactiveHints.d.cts +18 -18
  442. package/build/reactivity/reactiveHints.d.cts.map +1 -1
  443. package/build/reactivity/reactiveHints.d.mts +18 -18
  444. package/build/reactivity/reactiveHints.d.mts.map +1 -1
  445. package/build/relations/AbstractPropertyImpl.cjs.map +1 -1
  446. package/build/relations/AbstractPropertyImpl.d.cts +1 -2
  447. package/build/relations/AbstractPropertyImpl.d.cts.map +1 -1
  448. package/build/relations/AbstractPropertyImpl.d.mts +1 -2
  449. package/build/relations/AbstractPropertyImpl.d.mts.map +1 -1
  450. package/build/relations/AbstractPropertyImpl.js.map +1 -1
  451. package/build/relations/AbstractRelationImpl.d.cts +1 -2
  452. package/build/relations/AbstractRelationImpl.d.cts.map +1 -1
  453. package/build/relations/AbstractRelationImpl.d.mts +1 -2
  454. package/build/relations/AbstractRelationImpl.d.mts.map +1 -1
  455. package/build/relations/AsyncProperty.cjs.map +1 -1
  456. package/build/relations/AsyncProperty.d.cts +5 -6
  457. package/build/relations/AsyncProperty.d.cts.map +1 -1
  458. package/build/relations/AsyncProperty.d.mts +5 -6
  459. package/build/relations/AsyncProperty.d.mts.map +1 -1
  460. package/build/relations/AsyncProperty.js.map +1 -1
  461. package/build/relations/AsyncReactiveField.cjs.map +1 -1
  462. package/build/relations/AsyncReactiveField.d.cts +4 -5
  463. package/build/relations/AsyncReactiveField.d.cts.map +1 -1
  464. package/build/relations/AsyncReactiveField.d.mts +4 -5
  465. package/build/relations/AsyncReactiveField.d.mts.map +1 -1
  466. package/build/relations/AsyncReactiveField.js.map +1 -1
  467. package/build/relations/Collection.d.cts +4 -5
  468. package/build/relations/Collection.d.cts.map +1 -1
  469. package/build/relations/Collection.d.mts +4 -5
  470. package/build/relations/Collection.d.mts.map +1 -1
  471. package/build/relations/CustomCollection.cjs.map +1 -1
  472. package/build/relations/CustomCollection.d.cts +3 -4
  473. package/build/relations/CustomCollection.d.cts.map +1 -1
  474. package/build/relations/CustomCollection.d.mts +3 -4
  475. package/build/relations/CustomCollection.d.mts.map +1 -1
  476. package/build/relations/CustomCollection.js.map +1 -1
  477. package/build/relations/CustomReference.cjs.map +1 -1
  478. package/build/relations/CustomReference.d.cts +3 -4
  479. package/build/relations/CustomReference.d.cts.map +1 -1
  480. package/build/relations/CustomReference.d.mts +3 -4
  481. package/build/relations/CustomReference.d.mts.map +1 -1
  482. package/build/relations/CustomReference.js.map +1 -1
  483. package/build/relations/EnumCollection.cjs.map +1 -1
  484. package/build/relations/EnumCollection.d.cts +5 -5
  485. package/build/relations/EnumCollection.d.cts.map +1 -1
  486. package/build/relations/EnumCollection.d.mts +5 -5
  487. package/build/relations/EnumCollection.d.mts.map +1 -1
  488. package/build/relations/EnumCollection.js.map +1 -1
  489. package/build/relations/LargeCollection.d.cts +1 -2
  490. package/build/relations/LargeCollection.d.cts.map +1 -1
  491. package/build/relations/LargeCollection.d.mts +1 -2
  492. package/build/relations/LargeCollection.d.mts.map +1 -1
  493. package/build/relations/LazyField.cjs.map +1 -1
  494. package/build/relations/LazyField.d.cts +7 -8
  495. package/build/relations/LazyField.d.cts.map +1 -1
  496. package/build/relations/LazyField.d.mts +7 -8
  497. package/build/relations/LazyField.d.mts.map +1 -1
  498. package/build/relations/LazyField.js.map +1 -1
  499. package/build/relations/ManyToManyCollection.cjs.map +1 -1
  500. package/build/relations/ManyToManyCollection.d.cts +2 -3
  501. package/build/relations/ManyToManyCollection.d.cts.map +1 -1
  502. package/build/relations/ManyToManyCollection.d.mts +2 -3
  503. package/build/relations/ManyToManyCollection.d.mts.map +1 -1
  504. package/build/relations/ManyToManyCollection.js.map +1 -1
  505. package/build/relations/ManyToManyLargeCollection.d.cts +2 -3
  506. package/build/relations/ManyToManyLargeCollection.d.cts.map +1 -1
  507. package/build/relations/ManyToManyLargeCollection.d.mts +2 -3
  508. package/build/relations/ManyToManyLargeCollection.d.mts.map +1 -1
  509. package/build/relations/ManyToOneReference.cjs.map +1 -1
  510. package/build/relations/ManyToOneReference.d.cts +6 -7
  511. package/build/relations/ManyToOneReference.d.cts.map +1 -1
  512. package/build/relations/ManyToOneReference.d.mts +6 -7
  513. package/build/relations/ManyToOneReference.d.mts.map +1 -1
  514. package/build/relations/ManyToOneReference.js.map +1 -1
  515. package/build/relations/OneToManyCollection.cjs.map +1 -1
  516. package/build/relations/OneToManyCollection.d.cts +2 -3
  517. package/build/relations/OneToManyCollection.d.cts.map +1 -1
  518. package/build/relations/OneToManyCollection.d.mts +2 -3
  519. package/build/relations/OneToManyCollection.d.mts.map +1 -1
  520. package/build/relations/OneToManyCollection.js.map +1 -1
  521. package/build/relations/OneToManyLargeCollection.cjs.map +1 -1
  522. package/build/relations/OneToManyLargeCollection.d.cts +2 -3
  523. package/build/relations/OneToManyLargeCollection.d.cts.map +1 -1
  524. package/build/relations/OneToManyLargeCollection.d.mts +2 -3
  525. package/build/relations/OneToManyLargeCollection.d.mts.map +1 -1
  526. package/build/relations/OneToManyLargeCollection.js.map +1 -1
  527. package/build/relations/OneToOneReference.cjs.map +1 -1
  528. package/build/relations/OneToOneReference.d.cts +7 -7
  529. package/build/relations/OneToOneReference.d.cts.map +1 -1
  530. package/build/relations/OneToOneReference.d.mts +7 -7
  531. package/build/relations/OneToOneReference.d.mts.map +1 -1
  532. package/build/relations/OneToOneReference.js.map +1 -1
  533. package/build/relations/PolymorphicReference.cjs.map +1 -1
  534. package/build/relations/PolymorphicReference.d.cts +4 -5
  535. package/build/relations/PolymorphicReference.d.cts.map +1 -1
  536. package/build/relations/PolymorphicReference.d.mts +4 -5
  537. package/build/relations/PolymorphicReference.d.mts.map +1 -1
  538. package/build/relations/PolymorphicReference.js.map +1 -1
  539. package/build/relations/PropertySymbols.d.cts +1 -2
  540. package/build/relations/PropertySymbols.d.cts.map +1 -1
  541. package/build/relations/PropertySymbols.d.mts +1 -2
  542. package/build/relations/PropertySymbols.d.mts.map +1 -1
  543. package/build/relations/ReactiveField.cjs.map +1 -1
  544. package/build/relations/ReactiveField.d.cts +4 -5
  545. package/build/relations/ReactiveField.d.cts.map +1 -1
  546. package/build/relations/ReactiveField.d.mts +4 -5
  547. package/build/relations/ReactiveField.d.mts.map +1 -1
  548. package/build/relations/ReactiveField.js.map +1 -1
  549. package/build/relations/ReactiveGetter.cjs.map +1 -1
  550. package/build/relations/ReactiveGetter.d.cts +4 -5
  551. package/build/relations/ReactiveGetter.d.cts.map +1 -1
  552. package/build/relations/ReactiveGetter.d.mts +4 -5
  553. package/build/relations/ReactiveGetter.d.mts.map +1 -1
  554. package/build/relations/ReactiveGetter.js.map +1 -1
  555. package/build/relations/ReactiveManyToMany.cjs.map +1 -1
  556. package/build/relations/ReactiveManyToMany.d.cts +4 -5
  557. package/build/relations/ReactiveManyToMany.d.cts.map +1 -1
  558. package/build/relations/ReactiveManyToMany.d.mts +4 -5
  559. package/build/relations/ReactiveManyToMany.d.mts.map +1 -1
  560. package/build/relations/ReactiveManyToMany.js.map +1 -1
  561. package/build/relations/ReactiveManyToManyOtherSide.cjs.map +1 -1
  562. package/build/relations/ReactiveManyToManyOtherSide.d.cts +4 -5
  563. package/build/relations/ReactiveManyToManyOtherSide.d.cts.map +1 -1
  564. package/build/relations/ReactiveManyToManyOtherSide.d.mts +4 -5
  565. package/build/relations/ReactiveManyToManyOtherSide.d.mts.map +1 -1
  566. package/build/relations/ReactiveManyToManyOtherSide.js.map +1 -1
  567. package/build/relations/ReactiveReference.cjs.map +1 -1
  568. package/build/relations/ReactiveReference.d.cts +5 -6
  569. package/build/relations/ReactiveReference.d.cts.map +1 -1
  570. package/build/relations/ReactiveReference.d.mts +5 -6
  571. package/build/relations/ReactiveReference.d.mts.map +1 -1
  572. package/build/relations/ReactiveReference.js.map +1 -1
  573. package/build/relations/ReadOnlyCollection.d.cts +4 -5
  574. package/build/relations/ReadOnlyCollection.d.cts.map +1 -1
  575. package/build/relations/ReadOnlyCollection.d.mts +4 -5
  576. package/build/relations/ReadOnlyCollection.d.mts.map +1 -1
  577. package/build/relations/RecursiveCollection.cjs.map +1 -1
  578. package/build/relations/RecursiveCollection.d.cts +10 -10
  579. package/build/relations/RecursiveCollection.d.cts.map +1 -1
  580. package/build/relations/RecursiveCollection.d.mts +10 -10
  581. package/build/relations/RecursiveCollection.d.mts.map +1 -1
  582. package/build/relations/RecursiveCollection.js.map +1 -1
  583. package/build/relations/RecursiveCycleError.d.cts +2 -2
  584. package/build/relations/RecursiveCycleError.d.cts.map +1 -1
  585. package/build/relations/RecursiveCycleError.d.mts +2 -2
  586. package/build/relations/RecursiveCycleError.d.mts.map +1 -1
  587. package/build/relations/Reference.d.cts +5 -5
  588. package/build/relations/Reference.d.cts.map +1 -1
  589. package/build/relations/Reference.d.mts +5 -5
  590. package/build/relations/Reference.d.mts.map +1 -1
  591. package/build/relations/ReferenceSymbols.d.cts +1 -2
  592. package/build/relations/ReferenceSymbols.d.cts.map +1 -1
  593. package/build/relations/ReferenceSymbols.d.mts +1 -2
  594. package/build/relations/ReferenceSymbols.d.mts.map +1 -1
  595. package/build/relations/Relation.d.cts +3 -3
  596. package/build/relations/Relation.d.cts.map +1 -1
  597. package/build/relations/Relation.d.mts +3 -3
  598. package/build/relations/Relation.d.mts.map +1 -1
  599. package/build/relations/RelationSymbols.d.cts +2 -3
  600. package/build/relations/RelationSymbols.d.cts.map +1 -1
  601. package/build/relations/RelationSymbols.d.mts +2 -3
  602. package/build/relations/RelationSymbols.d.mts.map +1 -1
  603. package/build/relations/hasAsyncMethod.cjs.map +1 -1
  604. package/build/relations/hasAsyncMethod.d.cts +6 -6
  605. package/build/relations/hasAsyncMethod.d.cts.map +1 -1
  606. package/build/relations/hasAsyncMethod.d.mts +6 -6
  607. package/build/relations/hasAsyncMethod.d.mts.map +1 -1
  608. package/build/relations/hasAsyncMethod.js.map +1 -1
  609. package/build/relations/hasManyDerived.d.cts +2 -2
  610. package/build/relations/hasManyDerived.d.cts.map +1 -1
  611. package/build/relations/hasManyDerived.d.mts +2 -2
  612. package/build/relations/hasManyDerived.d.mts.map +1 -1
  613. package/build/relations/hasManyThrough.d.cts +1 -2
  614. package/build/relations/hasManyThrough.d.cts.map +1 -1
  615. package/build/relations/hasManyThrough.d.mts +1 -2
  616. package/build/relations/hasManyThrough.d.mts.map +1 -1
  617. package/build/relations/hasOneDerived.d.cts +1 -2
  618. package/build/relations/hasOneDerived.d.cts.map +1 -1
  619. package/build/relations/hasOneDerived.d.mts +1 -2
  620. package/build/relations/hasOneDerived.d.mts.map +1 -1
  621. package/build/relations/hasOneThrough.d.cts +1 -2
  622. package/build/relations/hasOneThrough.d.cts.map +1 -1
  623. package/build/relations/hasOneThrough.d.mts +1 -2
  624. package/build/relations/hasOneThrough.d.mts.map +1 -1
  625. package/build/relations/hasProperty.cjs.map +1 -1
  626. package/build/relations/hasProperty.d.cts +8 -8
  627. package/build/relations/hasProperty.d.cts.map +1 -1
  628. package/build/relations/hasProperty.d.mts +8 -8
  629. package/build/relations/hasProperty.d.mts.map +1 -1
  630. package/build/relations/hasProperty.js.map +1 -1
  631. package/build/relations/isCascadeDelete.d.cts +1 -2
  632. package/build/relations/isCascadeDelete.d.cts.map +1 -1
  633. package/build/relations/isCascadeDelete.d.mts +1 -2
  634. package/build/relations/isCascadeDelete.d.mts.map +1 -1
  635. package/build/resurrection.d.cts +3 -4
  636. package/build/resurrection.d.cts.map +1 -1
  637. package/build/resurrection.d.mts +3 -4
  638. package/build/resurrection.d.mts.map +1 -1
  639. package/build/rules.d.cts +20 -20
  640. package/build/rules.d.cts.map +1 -1
  641. package/build/rules.d.mts +20 -20
  642. package/build/rules.d.mts.map +1 -1
  643. package/build/runtimeConfig.d.cts +4 -5
  644. package/build/runtimeConfig.d.cts.map +1 -1
  645. package/build/runtimeConfig.d.mts +4 -5
  646. package/build/runtimeConfig.d.mts.map +1 -1
  647. package/build/serde/TypeInfo.d.cts +3 -4
  648. package/build/serde/TypeInfo.d.cts.map +1 -1
  649. package/build/serde/TypeInfo.d.mts +3 -4
  650. package/build/serde/TypeInfo.d.mts.map +1 -1
  651. package/build/serde/columns.d.cts +2 -3
  652. package/build/serde/columns.d.cts.map +1 -1
  653. package/build/serde/columns.d.mts +2 -3
  654. package/build/serde/columns.d.mts.map +1 -1
  655. package/build/serde/fieldSerde.d.cts +9 -9
  656. package/build/serde/fieldSerde.d.cts.map +1 -1
  657. package/build/serde/fieldSerde.d.mts +9 -9
  658. package/build/serde/fieldSerde.d.mts.map +1 -1
  659. package/build/serde/serde.d.cts +18 -19
  660. package/build/serde/serde.d.cts.map +1 -1
  661. package/build/serde/serde.d.mts +18 -19
  662. package/build/serde/serde.d.mts.map +1 -1
  663. package/build/serde/temporal.d.cts +5 -5
  664. package/build/serde/temporal.d.cts.map +1 -1
  665. package/build/serde/temporal.d.mts +5 -5
  666. package/build/serde/temporal.d.mts.map +1 -1
  667. package/build/serde/temporalMappers.d.cts +4 -5
  668. package/build/serde/temporalMappers.d.cts.map +1 -1
  669. package/build/serde/temporalMappers.d.mts +4 -5
  670. package/build/serde/temporalMappers.d.mts.map +1 -1
  671. package/build/transitions.d.cts +17 -18
  672. package/build/transitions.d.cts.map +1 -1
  673. package/build/transitions.d.mts +17 -18
  674. package/build/transitions.d.mts.map +1 -1
  675. package/build/trusted.d.cts +2 -3
  676. package/build/trusted.d.cts.map +1 -1
  677. package/build/trusted.d.mts +2 -3
  678. package/build/trusted.d.mts.map +1 -1
  679. package/build/typeMap.d.cts +17 -17
  680. package/build/typeMap.d.cts.map +1 -1
  681. package/build/typeMap.d.mts +17 -17
  682. package/build/typeMap.d.mts.map +1 -1
  683. package/build/upsert.d.cts +4 -4
  684. package/build/upsert.d.cts.map +1 -1
  685. package/build/upsert.d.mts +4 -4
  686. package/build/upsert.d.mts.map +1 -1
  687. package/build/utils.d.cts +27 -28
  688. package/build/utils.d.cts.map +1 -1
  689. package/build/utils.d.mts +27 -28
  690. package/build/utils.d.mts.map +1 -1
  691. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"RecursiveCollection.cjs","names":["lazyField","AbstractRelationImpl","getMetadata","RelationT","RelationU","#fieldName","#m2oName","#otherFieldName","#loaded","#loadPromise","recursiveParentsBatchLoader","appendStack","RecursiveCycleError","isReference","isLoadedReference","#o2mName","recursiveChildrenBatchLoader","isCollection","isLoadedCollection","isOneToOneReference","isLoadedOneToOneReference","#m2mName","recursiveM2mBatchLoader","fail"],"sources":["../../src/relations/RecursiveCollection.ts"],"sourcesContent":["import { recursiveChildrenBatchLoader } from \"src/batchloaders/recursiveChildrenBatchLoader.ts\";\nimport { recursiveM2mBatchLoader } from \"src/batchloaders/recursiveM2mBatchLoader.ts\";\nimport { recursiveParentsBatchLoader } from \"src/batchloaders/recursiveParentsBatchLoader.ts\";\nimport {\n type Entity,\n type EntityMetadata,\n type ManyToManyField,\n type Reference,\n type Relation,\n appendStack,\n ensureNotDeleted,\n fail,\n getEmInternalApi,\n getMetadata,\n isCollection,\n isLoadedCollection,\n isLoadedOneToOneReference,\n isLoadedReference,\n isOneToOneReference,\n isReference,\n} from \"src/index.ts\";\nimport type { IsLoadedCachable } from \"src/loading/IsLoadedCache.ts\";\nimport { lazyField } from \"src/newEntity.ts\";\nimport { AbstractRelationImpl } from \"src/relations/AbstractRelationImpl.ts\";\nimport { type ReadOnlyCollection } from \"src/relations/ReadOnlyCollection.ts\";\nimport { RecursiveCycleError } from \"src/relations/RecursiveCycleError.ts\";\nimport { RelationT, RelationU } from \"src/relations/RelationSymbols.ts\";\n\nexport { RecursiveCycleError };\n\n/**\n * An alias for creating `RecursiveParentsCollectionImpl`s.\n *\n * I.e. for `Author.mentor` (m2o fk), we can return `Author.mentorsRecursive` recursively looking up.\n */\nexport function hasRecursiveParents<T extends Entity, U extends Entity>(\n m2oName: keyof T & string, // i.e. `author.mentor`\n otherFieldName: keyof T & string, // i.e. `author.menteesRecursive`\n): ReadOnlyCollection<T, U> {\n return lazyField((entity: T, fieldName) => {\n return new RecursiveParentsCollectionImpl(entity, fieldName as keyof T & string, m2oName, otherFieldName);\n });\n}\n\n/**\n * An alias for creating `RecursiveChildrenCollectionImpl`s.\n *\n * I.e. for `Author.mentees` (o2m), we can return `Author.menteesRecursive` recursively looking down.\n */\nexport function hasRecursiveChildren<T extends Entity, U extends Entity>(\n o2mName: keyof T & string, // i.e. `author.mentees`\n otherFieldName: keyof T & string, // i.e. `author.mentorsRecursive`\n): ReadOnlyCollection<T, U> {\n return lazyField((entity: T, fieldName) => {\n return new RecursiveChildrenCollectionImpl(entity, fieldName as keyof T & string, o2mName, otherFieldName);\n });\n}\n\n/**\n * An alias for creating `RecursiveM2mCollectionImpl`s.\n *\n * I.e. for `User.parents` (m2m), we can return `User.parentsRecursive` recursively looking up through the m2m.\n * Or for `User.children` (m2m), we can return `User.childrenRecursive` recursively looking down.\n */\nexport function hasRecursiveM2m<T extends Entity, U extends Entity>(\n m2mName: keyof T & string, // i.e. `user.parents` or `user.children`\n otherFieldName: keyof T & string, // i.e. `user.childrenRecursive` or `user.parentsRecursive`\n): ReadOnlyCollection<T, U> {\n return lazyField((entity: T, fieldName) => {\n return new RecursiveM2mCollectionImpl(entity, fieldName as keyof T & string, m2mName, otherFieldName);\n });\n}\n\n/**\n * A base class for the common methods between the parent & children recursive collections.\n *\n * We could probably move some of this into AbstractRelationImpl?\n */\nabstract class AbstractRecursiveCollectionImpl<T extends Entity, U extends Entity> extends AbstractRelationImpl<\n T,\n U[]\n> {\n abstract fieldName: string;\n\n get get(): U[] {\n return this.filterDeleted(this.doGet(), { withDeleted: false });\n }\n\n get getWithDeleted(): U[] {\n return this.filterDeleted(this.doGet(), { withDeleted: true });\n }\n\n setFromOpts(): void {\n throw new Error(\"Method not implemented.\");\n }\n\n set(): void {\n throw new Error(\"Method not implemented.\");\n }\n\n get isPreloaded(): boolean {\n return false;\n }\n\n preload(): void {\n throw new Error(\"Method not implemented.\");\n }\n\n cleanupOnEntityDeleted(): Promise<void> {\n return Promise.resolve();\n }\n\n maybeCascadeDelete(): void {}\n\n get meta(): EntityMetadata {\n return getMetadata(this.entity);\n }\n\n abstract doGet(): U[];\n\n /** Removes pending-hard-delete or soft-deleted entities, unless explicitly asked for. */\n protected filterDeleted(entities: U[], opts?: { withDeleted?: boolean }): U[] {\n return opts?.withDeleted === true\n ? [...entities]\n : entities.filter((e) => !e.isDeletedEntity && !(e as any).isSoftDeletedEntity);\n }\n\n [RelationT]: T = null!;\n [RelationU]: U = null!;\n}\n\nexport class RecursiveParentsCollectionImpl<T extends Entity, U extends Entity>\n extends AbstractRecursiveCollectionImpl<T, U>\n implements ReadOnlyCollection<T, U>, IsLoadedCachable\n{\n readonly #fieldName: keyof T & string;\n readonly #m2oName: keyof T & string;\n readonly #otherFieldName: keyof T & string;\n #loaded: boolean | undefined = undefined;\n #loadPromise: Promise<void> | undefined;\n\n constructor(entity: T, fieldName: keyof T & string, m2oName: keyof T & string, otherFieldName: keyof T & string) {\n super(entity);\n this.#fieldName = fieldName;\n this.#m2oName = m2oName;\n this.#otherFieldName = otherFieldName;\n }\n\n // opts is an internal parameter\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<readonly U[]> {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded || opts.forceReload) {\n if (opts.forceReload) {\n this.#loaded = undefined;\n }\n // If we have `[grandchild, newlyCreatedParent, existingGrandparent, ...more...]`, skip up to the\n // `existingGrandparent`, because if we `.load(entity)` (i.e. where we are the `grandchild`) then\n // recursiveParentsBatchLoader will try CTE query up from `grandchild[parent]`, but since that will\n // be `newlyCreatedParent`, it doesn't have an id yet.\n const entityToLoad = opts.forceReload ? this.entity : this.findUnloadedReference()?.entity;\n if (entityToLoad && !entityToLoad.isNewEntity) {\n await (this.#loadPromise ??= recursiveParentsBatchLoader(this.entity.em, this)\n .load(entityToLoad)\n .catch(function load(err) {\n throw appendStack(err, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n }));\n // See if there are any WIP changes, i.e. new parents, that the ^ SQL query didn't know to load.\n // We don't have to `while` loop this, because if parent itself has WIP changes above it, then\n // its own `RecursiveParentsCollectionImpl.load` will load it, before returning to this method.\n const unloadedParent = this.findUnloadedReference();\n if (unloadedParent) {\n await recursiveParentsBatchLoader(this.entity.em, this)\n .load(unloadedParent.entity)\n .catch(function load(err) {\n throw appendStack(err, new Error());\n });\n }\n }\n this.#loaded = true;\n }\n return this.filterDeleted(this.doGet(), opts);\n }\n\n get isLoaded(): boolean {\n if (this.#loaded !== undefined) return this.#loaded;\n this.#loaded = this.findUnloadedReference() === undefined;\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#loaded;\n }\n\n resetIsLoaded(): void {\n this.#loaded = undefined;\n }\n\n get fieldName(): string {\n return this.#fieldName;\n }\n\n get m2oFieldName(): string {\n return this.#m2oName;\n }\n\n get otherFieldName(): string {\n return this.#otherFieldName;\n }\n\n get hasBeenSet(): boolean {\n return false;\n }\n\n toString(): string {\n return `RecursiveParentsCollectionImpl(entity: ${this.entity}, fieldName: ${this.fieldName})`;\n }\n\n doGet(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n const unloaded = this.findUnloadedReference();\n if (unloaded) {\n throw new Error(this.toString() + `.get was called but ${unloaded} was not loaded`);\n }\n const parents: U[] = [];\n const visited = new Set<U>();\n for (\n let current = getLoadedReference(this.entity[this.#m2oName]);\n current !== undefined;\n current = getLoadedReference(current[this.#m2oName])\n ) {\n parents.push(current);\n if (visited.has(current)) throw new RecursiveCycleError(this, [...visited, current]);\n visited.add(current);\n }\n return parents;\n }\n\n private findUnloadedReference(): Reference<any, any, any> | undefined {\n const visited = new Set<any>();\n for (let current = this.entity; current !== undefined; current = getLoadedReference(current[this.#m2oName])) {\n const relation = current[this.#m2oName];\n if (isReference(relation) && !isLoadedReference(relation)) return relation;\n if (visited.has(current)) throw new RecursiveCycleError(this, [...visited, current]);\n visited.add(current);\n }\n return undefined;\n }\n}\n\nexport class RecursiveChildrenCollectionImpl<T extends Entity, U extends Entity>\n extends AbstractRecursiveCollectionImpl<T, U>\n implements ReadOnlyCollection<T, U>, IsLoadedCachable\n{\n readonly #fieldName: keyof T & string;\n readonly #o2mName: keyof T & string;\n readonly #otherFieldName: keyof T & string;\n #loaded: boolean | undefined = undefined;\n #loadPromise: Promise<void> | undefined;\n\n constructor(entity: T, fieldName: keyof T & string, o2mName: keyof T & string, otherFieldName: keyof T & string) {\n super(entity);\n this.#fieldName = fieldName;\n this.#o2mName = o2mName;\n this.#otherFieldName = otherFieldName;\n }\n\n // opts is an internal parameter\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<readonly U[]> {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded || opts.forceReload) {\n if (opts.forceReload) {\n this.#loaded = undefined;\n }\n if (!this.entity.isNewEntity) {\n await (this.#loadPromise ??= recursiveChildrenBatchLoader(this.entity.em, this)\n .load(this.entity)\n .catch(function load(err) {\n throw appendStack(err, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n }));\n }\n const unloaded = this.findUnloadedCollections();\n if (unloaded.length > 0) {\n // Go through the entities own `fooRecursive` collection so that it's marked as loaded.\n // We don't have to `while` loop this, because if they children themselves have any WIP\n // changes, then their own `RecursiveChildrenCollectionImpl.load` will load them.\n await Promise.all(unloaded.map((r) => (r.entity as any)[this.fieldName].load(opts)));\n }\n this.#loaded = true;\n }\n return this.filterDeleted(this.doGet(), opts);\n }\n\n get isLoaded(): boolean {\n if (this.#loaded !== undefined) return this.#loaded;\n this.#loaded = this.findUnloadedCollections().length === 0;\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#loaded;\n }\n\n resetIsLoaded(): void {\n this.#loaded = undefined;\n }\n\n get fieldName(): string {\n return this.#fieldName;\n }\n\n get o2mFieldName(): string {\n return this.#o2mName;\n }\n\n get otherFieldName(): string {\n return this.#otherFieldName;\n }\n\n get hasBeenSet(): boolean {\n return false;\n }\n\n toString(): string {\n return `RecursiveChildrenCollectionImpl(entity: ${this.entity}, fieldName: ${this.fieldName})`;\n }\n\n doGet(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded) {\n throw new Error(this.toString() + `.get was called but when not loaded`);\n }\n const children: U[] = [];\n const visited = new Set<any>();\n // Use a node+path combo to know which path caused the cycle\n const todo: { relation: any; path: U[] }[] = [{ relation: this.entity[this.#o2mName], path: [this.entity as any] }];\n while (todo.length > 0) {\n const { relation, path } = todo.pop()!;\n if (visited.has(relation)) throw new RecursiveCycleError(this, path);\n visited.add(relation);\n for (const child of getLoadedCollection(relation)) {\n children.push(child);\n todo.push({ relation: child[this.#o2mName], path: [...path, child] });\n }\n }\n return children;\n }\n\n /** Finds any children/downstream o2m collections or o2o references. */\n private findUnloadedCollections(): Relation<any, any>[] {\n const visited = new Set<any>();\n const unloaded: Relation<any, any>[] = [];\n const todo: { relation: any; path: U[] }[] = [{ relation: this.entity[this.#o2mName], path: [this.entity as any] }];\n while (todo.length > 0) {\n const { relation, path } = todo.pop()!;\n if (visited.has(relation)) throw new RecursiveCycleError(this, path);\n visited.add(relation);\n if (isCollection(relation) && !isLoadedCollection(relation)) {\n unloaded.push(relation);\n } else if (isOneToOneReference(relation) && !isLoadedOneToOneReference(relation)) {\n unloaded.push(relation);\n } else {\n for (const child of getLoadedCollection(relation)) {\n todo.push({ relation: child[this.#o2mName], path: [...path, child] });\n }\n }\n }\n return unloaded;\n }\n}\n\nexport class RecursiveM2mCollectionImpl<T extends Entity, U extends Entity>\n extends AbstractRecursiveCollectionImpl<T, U>\n implements ReadOnlyCollection<T, U>, IsLoadedCachable\n{\n readonly #fieldName: keyof T & string;\n readonly #m2mName: keyof T & string;\n readonly #otherFieldName: keyof T & string;\n #loaded: boolean | undefined = undefined;\n #loadPromise: Promise<void> | undefined;\n\n constructor(entity: T, fieldName: keyof T & string, m2mName: keyof T & string, otherFieldName: keyof T & string) {\n super(entity);\n this.#fieldName = fieldName;\n this.#m2mName = m2mName;\n this.#otherFieldName = otherFieldName;\n }\n\n // opts is an internal parameter\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<readonly U[]> {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded || opts.forceReload) {\n if (opts.forceReload) {\n this.#loaded = undefined;\n }\n if (!this.entity.isNewEntity) {\n await (this.#loadPromise ??= recursiveM2mBatchLoader(this.entity.em, this)\n .load(this.entity)\n .catch(function load(err: any) {\n throw appendStack(err, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n }));\n }\n const unloaded = this.findUnloadedCollections();\n if (unloaded.length > 0) {\n // Go through the entity's own `fooRecursive` collection so that it's marked as loaded.\n await Promise.all(unloaded.map((r) => (r.entity as any)[this.fieldName].load(opts)));\n }\n this.#loaded = true;\n }\n return this.filterDeleted(this.doGet(), opts);\n }\n\n get isLoaded(): boolean {\n if (this.#loaded !== undefined) return this.#loaded;\n this.#loaded = this.findUnloadedCollections().length === 0;\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#loaded;\n }\n\n resetIsLoaded(): void {\n this.#loaded = undefined;\n }\n\n get fieldName(): string {\n return this.#fieldName;\n }\n\n get m2mFieldName(): string {\n return this.#m2mName;\n }\n\n get otherFieldName(): string {\n return this.#otherFieldName;\n }\n\n get m2mField(): ManyToManyField {\n return this.meta.allFields[this.#m2mName] as ManyToManyField;\n }\n\n get hasBeenSet(): boolean {\n return false;\n }\n\n toString(): string {\n return `RecursiveM2mCollectionImpl(entity: ${this.entity}, fieldName: ${this.fieldName})`;\n }\n\n doGet(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded) {\n throw new Error(this.toString() + `.get was called but when not loaded`);\n }\n const results: U[] = [];\n // Track by entity to handle diamonds (same entity reachable via multiple paths)\n const visited = new Set<any>();\n visited.add(this.entity);\n const todo: { entity: any; path: U[] }[] = [{ entity: this.entity, path: [this.entity as any] }];\n while (todo.length > 0) {\n const { entity: current, path } = todo.pop()!;\n for (const other of getLoadedCollection(current[this.#m2mName])) {\n if (visited.has(other)) {\n // If we're reaching an entity we've already visited, and it's this.entity, that's a cycle\n if (other === this.entity) throw new RecursiveCycleError(this, [...path, other]);\n // Otherwise it's a diamond (reachable via multiple paths) — skip\n continue;\n }\n visited.add(other);\n results.push(other);\n todo.push({ entity: other, path: [...path, other] });\n }\n }\n return results;\n }\n\n /** Finds any m2m collections that are not yet loaded in the recursive tree. */\n private findUnloadedCollections(): Relation<any, any>[] {\n const visited = new Set<any>();\n visited.add(this.entity);\n const unloaded: Relation<any, any>[] = [];\n const todo: { entity: any; path: U[] }[] = [{ entity: this.entity, path: [this.entity as any] }];\n while (todo.length > 0) {\n const { entity: current, path } = todo.pop()!;\n const relation = current[this.#m2mName];\n if (isCollection(relation) && !isLoadedCollection(relation)) {\n unloaded.push(relation);\n } else {\n for (const other of getLoadedCollection(relation)) {\n if (visited.has(other)) {\n if (other === this.entity) throw new RecursiveCycleError(this, [...path, other]);\n continue;\n }\n visited.add(other);\n todo.push({ entity: other, path: [...path, other] });\n }\n }\n }\n return unloaded;\n }\n}\n\nfunction getLoadedReference(relation: any): any {\n return isLoadedReference(relation) ? relation.get : fail(`${relation} was not loaded`);\n}\n\nfunction getLoadedCollection(relation: any): any {\n return isLoadedCollection(relation)\n ? relation.get\n : isLoadedOneToOneReference(relation)\n ? relation.get\n ? [relation.get]\n : []\n : fail(`${relation} was not loaded`);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmCA,SAAgB,oBACd,SACA,gBAC0B;CAC1B,OAAOA,kBAAAA,WAAW,QAAW,cAAc;EACzC,OAAO,IAAI,+BAA+B,QAAQ,WAA+B,SAAS,cAAc;CAC1G,CAAC;AACH;;;;;;AAOA,SAAgB,qBACd,SACA,gBAC0B;CAC1B,OAAOA,kBAAAA,WAAW,QAAW,cAAc;EACzC,OAAO,IAAI,gCAAgC,QAAQ,WAA+B,SAAS,cAAc;CAC3G,CAAC;AACH;;;;;;;AAQA,SAAgB,gBACd,SACA,gBAC0B;CAC1B,OAAOA,kBAAAA,WAAW,QAAW,cAAc;EACzC,OAAO,IAAI,2BAA2B,QAAQ,WAA+B,SAAS,cAAc;CACtG,CAAC;AACH;;;;;;AAOA,IAAe,kCAAf,cAA2FC,uCAAAA,qBAGzF;CAGA,IAAI,MAAW;EACb,OAAO,KAAK,cAAc,KAAK,MAAM,GAAG,EAAE,aAAa,MAAM,CAAC;CAChE;CAEA,IAAI,iBAAsB;EACxB,OAAO,KAAK,cAAc,KAAK,MAAM,GAAG,EAAE,aAAa,KAAK,CAAC;CAC/D;CAEA,cAAoB;EAClB,MAAM,IAAI,MAAM,yBAAyB;CAC3C;CAEA,MAAY;EACV,MAAM,IAAI,MAAM,yBAAyB;CAC3C;CAEA,IAAI,cAAuB;EACzB,OAAO;CACT;CAEA,UAAgB;EACd,MAAM,IAAI,MAAM,yBAAyB;CAC3C;CAEA,yBAAwC;EACtC,OAAO,QAAQ,QAAQ;CACzB;CAEA,qBAA2B,CAAC;CAE5B,IAAI,OAAuB;EACzB,OAAOC,uBAAAA,YAAY,KAAK,MAAM;CAChC;;CAKA,cAAwB,UAAe,MAAuC;EAC5E,OAAO,MAAM,gBAAgB,OACzB,CAAC,GAAG,QAAQ,IACZ,SAAS,QAAQ,MAAM,CAAC,EAAE,mBAAmB,CAAE,EAAU,mBAAmB;CAClF;CAEA,CAACC,kCAAAA,aAAgB;CACjB,CAACC,kCAAAA,aAAgB;AACnB;AAEA,IAAa,iCAAb,cACU,gCAEV;CACE;CACA;CACA;CACA,UAA+B,KAAA;CAC/B;CAEA,YAAY,QAAW,WAA6B,SAA2B,gBAAkC;EAC/G,MAAM,MAAM;EACZ,KAAKC,aAAa;EAClB,KAAKC,WAAW;EAChB,KAAKC,kBAAkB;CACzB;CAGA,MAAM,KAAK,OAAyD,CAAC,GAA0B;EAC7F,cAAA,iBAAiB,KAAK,QAAQ,SAAS;EACvC,IAAI,CAAC,KAAK,YAAY,KAAK,aAAa;GACtC,IAAI,KAAK,aACP,KAAKC,UAAU,KAAA;GAMjB,MAAM,eAAe,KAAK,cAAc,KAAK,SAAS,KAAK,sBAAsB,CAAC,EAAE;GACpF,IAAI,gBAAgB,CAAC,aAAa,aAAa;IAC7C,OAAO,KAAKC,iBAAiBC,iDAAAA,4BAA4B,KAAK,OAAO,IAAI,IAAI,CAAC,CAC3E,KAAK,YAAY,CAAC,CAClB,MAAM,SAAS,KAAK,KAAK;KACxB,MAAMC,sBAAAA,YAAY,qBAAK,IAAI,MAAM,CAAC;IACpC,CAAC,CAAC,CACD,cAAc;KACb,KAAKF,eAAe,KAAA;IACtB,CAAC;IAIH,MAAM,iBAAiB,KAAK,sBAAsB;IAClD,IAAI,gBACF,MAAMC,iDAAAA,4BAA4B,KAAK,OAAO,IAAI,IAAI,CAAC,CACpD,KAAK,eAAe,MAAM,CAAC,CAC3B,MAAM,SAAS,KAAK,KAAK;KACxB,MAAMC,sBAAAA,YAAY,qBAAK,IAAI,MAAM,CAAC;IACpC,CAAC;GAEP;GACA,KAAKH,UAAU;EACjB;EACA,OAAO,KAAK,cAAc,KAAK,MAAM,GAAG,IAAI;CAC9C;CAEA,IAAI,WAAoB;EACtB,IAAI,KAAKA,YAAY,KAAA,GAAW,OAAO,KAAKA;EAC5C,KAAKA,UAAU,KAAK,sBAAsB,MAAM,KAAA;EAChD,sBAAA,iBAAiB,KAAK,OAAO,EAAE,CAAC,CAAC,cAAc,SAAS,IAAI;EAC5D,OAAO,KAAKA;CACd;CAEA,gBAAsB;EACpB,KAAKA,UAAU,KAAA;CACjB;CAEA,IAAI,YAAoB;EACtB,OAAO,KAAKH;CACd;CAEA,IAAI,eAAuB;EACzB,OAAO,KAAKC;CACd;CAEA,IAAI,iBAAyB;EAC3B,OAAO,KAAKC;CACd;CAEA,IAAI,aAAsB;EACxB,OAAO;CACT;CAEA,WAAmB;EACjB,OAAO,0CAA0C,KAAK,OAAO,eAAe,KAAK,UAAU;CAC7F;CAEA,QAAa;EACX,cAAA,iBAAiB,KAAK,QAAQ,SAAS;EACvC,MAAM,WAAW,KAAK,sBAAsB;EAC5C,IAAI,UACF,MAAM,IAAI,MAAM,KAAK,SAAS,IAAI,uBAAuB,SAAS,gBAAgB;EAEpF,MAAM,UAAe,CAAC;EACtB,MAAM,0BAAU,IAAI,IAAO;EAC3B,KACE,IAAI,UAAU,mBAAmB,KAAK,OAAO,KAAKD,SAAS,GAC3D,YAAY,KAAA,GACZ,UAAU,mBAAmB,QAAQ,KAAKA,SAAS,GACnD;GACA,QAAQ,KAAK,OAAO;GACpB,IAAI,QAAQ,IAAI,OAAO,GAAG,MAAM,IAAIM,sCAAAA,oBAAoB,MAAM,CAAC,GAAG,SAAS,OAAO,CAAC;GACnF,QAAQ,IAAI,OAAO;EACrB;EACA,OAAO;CACT;CAEA,wBAAsE;EACpE,MAAM,0BAAU,IAAI,IAAS;EAC7B,KAAK,IAAI,UAAU,KAAK,QAAQ,YAAY,KAAA,GAAW,UAAU,mBAAmB,QAAQ,KAAKN,SAAS,GAAG;GAC3G,MAAM,WAAW,QAAQ,KAAKA;GAC9B,IAAIO,4BAAAA,YAAY,QAAQ,KAAK,CAACC,4BAAAA,kBAAkB,QAAQ,GAAG,OAAO;GAClE,IAAI,QAAQ,IAAI,OAAO,GAAG,MAAM,IAAIF,sCAAAA,oBAAoB,MAAM,CAAC,GAAG,SAAS,OAAO,CAAC;GACnF,QAAQ,IAAI,OAAO;EACrB;CAEF;AACF;AAEA,IAAa,kCAAb,cACU,gCAEV;CACE;CACA;CACA;CACA,UAA+B,KAAA;CAC/B;CAEA,YAAY,QAAW,WAA6B,SAA2B,gBAAkC;EAC/G,MAAM,MAAM;EACZ,KAAKP,aAAa;EAClB,KAAKU,WAAW;EAChB,KAAKR,kBAAkB;CACzB;CAGA,MAAM,KAAK,OAAyD,CAAC,GAA0B;EAC7F,cAAA,iBAAiB,KAAK,QAAQ,SAAS;EACvC,IAAI,CAAC,KAAK,YAAY,KAAK,aAAa;GACtC,IAAI,KAAK,aACP,KAAKC,UAAU,KAAA;GAEjB,IAAI,CAAC,KAAK,OAAO,aACf,OAAO,KAAKC,iBAAiBO,kDAAAA,6BAA6B,KAAK,OAAO,IAAI,IAAI,CAAC,CAC5E,KAAK,KAAK,MAAM,CAAC,CACjB,MAAM,SAAS,KAAK,KAAK;IACxB,MAAML,sBAAAA,YAAY,qBAAK,IAAI,MAAM,CAAC;GACpC,CAAC,CAAC,CACD,cAAc;IACb,KAAKF,eAAe,KAAA;GACtB,CAAC;GAEL,MAAM,WAAW,KAAK,wBAAwB;GAC9C,IAAI,SAAS,SAAS,GAIpB,MAAM,QAAQ,IAAI,SAAS,KAAK,MAAO,EAAE,OAAe,KAAK,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;GAErF,KAAKD,UAAU;EACjB;EACA,OAAO,KAAK,cAAc,KAAK,MAAM,GAAG,IAAI;CAC9C;CAEA,IAAI,WAAoB;EACtB,IAAI,KAAKA,YAAY,KAAA,GAAW,OAAO,KAAKA;EAC5C,KAAKA,UAAU,KAAK,wBAAwB,CAAC,CAAC,WAAW;EACzD,sBAAA,iBAAiB,KAAK,OAAO,EAAE,CAAC,CAAC,cAAc,SAAS,IAAI;EAC5D,OAAO,KAAKA;CACd;CAEA,gBAAsB;EACpB,KAAKA,UAAU,KAAA;CACjB;CAEA,IAAI,YAAoB;EACtB,OAAO,KAAKH;CACd;CAEA,IAAI,eAAuB;EACzB,OAAO,KAAKU;CACd;CAEA,IAAI,iBAAyB;EAC3B,OAAO,KAAKR;CACd;CAEA,IAAI,aAAsB;EACxB,OAAO;CACT;CAEA,WAAmB;EACjB,OAAO,2CAA2C,KAAK,OAAO,eAAe,KAAK,UAAU;CAC9F;CAEA,QAAa;EACX,cAAA,iBAAiB,KAAK,QAAQ,SAAS;EACvC,IAAI,CAAC,KAAK,UACR,MAAM,IAAI,MAAM,KAAK,SAAS,IAAI,qCAAqC;EAEzE,MAAM,WAAgB,CAAC;EACvB,MAAM,0BAAU,IAAI,IAAS;EAE7B,MAAM,OAAuC,CAAC;GAAE,UAAU,KAAK,OAAO,KAAKQ;GAAW,MAAM,CAAC,KAAK,MAAa;EAAE,CAAC;EAClH,OAAO,KAAK,SAAS,GAAG;GACtB,MAAM,EAAE,UAAU,SAAS,KAAK,IAAI;GACpC,IAAI,QAAQ,IAAI,QAAQ,GAAG,MAAM,IAAIH,sCAAAA,oBAAoB,MAAM,IAAI;GACnE,QAAQ,IAAI,QAAQ;GACpB,KAAK,MAAM,SAAS,oBAAoB,QAAQ,GAAG;IACjD,SAAS,KAAK,KAAK;IACnB,KAAK,KAAK;KAAE,UAAU,MAAM,KAAKG;KAAW,MAAM,CAAC,GAAG,MAAM,KAAK;IAAE,CAAC;GACtE;EACF;EACA,OAAO;CACT;;CAGA,0BAAwD;EACtD,MAAM,0BAAU,IAAI,IAAS;EAC7B,MAAM,WAAiC,CAAC;EACxC,MAAM,OAAuC,CAAC;GAAE,UAAU,KAAK,OAAO,KAAKA;GAAW,MAAM,CAAC,KAAK,MAAa;EAAE,CAAC;EAClH,OAAO,KAAK,SAAS,GAAG;GACtB,MAAM,EAAE,UAAU,SAAS,KAAK,IAAI;GACpC,IAAI,QAAQ,IAAI,QAAQ,GAAG,MAAM,IAAIH,sCAAAA,oBAAoB,MAAM,IAAI;GACnE,QAAQ,IAAI,QAAQ;GACpB,IAAIK,6BAAAA,aAAa,QAAQ,KAAK,CAACC,6BAAAA,mBAAmB,QAAQ,GACxD,SAAS,KAAK,QAAQ;QACjB,IAAIC,oCAAAA,oBAAoB,QAAQ,KAAK,CAACC,oCAAAA,0BAA0B,QAAQ,GAC7E,SAAS,KAAK,QAAQ;QAEtB,KAAK,MAAM,SAAS,oBAAoB,QAAQ,GAC9C,KAAK,KAAK;IAAE,UAAU,MAAM,KAAKL;IAAW,MAAM,CAAC,GAAG,MAAM,KAAK;GAAE,CAAC;EAG1E;EACA,OAAO;CACT;AACF;AAEA,IAAa,6BAAb,cACU,gCAEV;CACE;CACA;CACA;CACA,UAA+B,KAAA;CAC/B;CAEA,YAAY,QAAW,WAA6B,SAA2B,gBAAkC;EAC/G,MAAM,MAAM;EACZ,KAAKV,aAAa;EAClB,KAAKgB,WAAW;EAChB,KAAKd,kBAAkB;CACzB;CAGA,MAAM,KAAK,OAAyD,CAAC,GAA0B;EAC7F,cAAA,iBAAiB,KAAK,QAAQ,SAAS;EACvC,IAAI,CAAC,KAAK,YAAY,KAAK,aAAa;GACtC,IAAI,KAAK,aACP,KAAKC,UAAU,KAAA;GAEjB,IAAI,CAAC,KAAK,OAAO,aACf,OAAO,KAAKC,iBAAiBa,6CAAAA,wBAAwB,KAAK,OAAO,IAAI,IAAI,CAAC,CACvE,KAAK,KAAK,MAAM,CAAC,CACjB,MAAM,SAAS,KAAK,KAAU;IAC7B,MAAMX,sBAAAA,YAAY,qBAAK,IAAI,MAAM,CAAC;GACpC,CAAC,CAAC,CACD,cAAc;IACb,KAAKF,eAAe,KAAA;GACtB,CAAC;GAEL,MAAM,WAAW,KAAK,wBAAwB;GAC9C,IAAI,SAAS,SAAS,GAEpB,MAAM,QAAQ,IAAI,SAAS,KAAK,MAAO,EAAE,OAAe,KAAK,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;GAErF,KAAKD,UAAU;EACjB;EACA,OAAO,KAAK,cAAc,KAAK,MAAM,GAAG,IAAI;CAC9C;CAEA,IAAI,WAAoB;EACtB,IAAI,KAAKA,YAAY,KAAA,GAAW,OAAO,KAAKA;EAC5C,KAAKA,UAAU,KAAK,wBAAwB,CAAC,CAAC,WAAW;EACzD,sBAAA,iBAAiB,KAAK,OAAO,EAAE,CAAC,CAAC,cAAc,SAAS,IAAI;EAC5D,OAAO,KAAKA;CACd;CAEA,gBAAsB;EACpB,KAAKA,UAAU,KAAA;CACjB;CAEA,IAAI,YAAoB;EACtB,OAAO,KAAKH;CACd;CAEA,IAAI,eAAuB;EACzB,OAAO,KAAKgB;CACd;CAEA,IAAI,iBAAyB;EAC3B,OAAO,KAAKd;CACd;CAEA,IAAI,WAA4B;EAC9B,OAAO,KAAK,KAAK,UAAU,KAAKc;CAClC;CAEA,IAAI,aAAsB;EACxB,OAAO;CACT;CAEA,WAAmB;EACjB,OAAO,sCAAsC,KAAK,OAAO,eAAe,KAAK,UAAU;CACzF;CAEA,QAAa;EACX,cAAA,iBAAiB,KAAK,QAAQ,SAAS;EACvC,IAAI,CAAC,KAAK,UACR,MAAM,IAAI,MAAM,KAAK,SAAS,IAAI,qCAAqC;EAEzE,MAAM,UAAe,CAAC;EAEtB,MAAM,0BAAU,IAAI,IAAS;EAC7B,QAAQ,IAAI,KAAK,MAAM;EACvB,MAAM,OAAqC,CAAC;GAAE,QAAQ,KAAK;GAAQ,MAAM,CAAC,KAAK,MAAa;EAAE,CAAC;EAC/F,OAAO,KAAK,SAAS,GAAG;GACtB,MAAM,EAAE,QAAQ,SAAS,SAAS,KAAK,IAAI;GAC3C,KAAK,MAAM,SAAS,oBAAoB,QAAQ,KAAKA,SAAS,GAAG;IAC/D,IAAI,QAAQ,IAAI,KAAK,GAAG;KAEtB,IAAI,UAAU,KAAK,QAAQ,MAAM,IAAIT,sCAAAA,oBAAoB,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC;KAE/E;IACF;IACA,QAAQ,IAAI,KAAK;IACjB,QAAQ,KAAK,KAAK;IAClB,KAAK,KAAK;KAAE,QAAQ;KAAO,MAAM,CAAC,GAAG,MAAM,KAAK;IAAE,CAAC;GACrD;EACF;EACA,OAAO;CACT;;CAGA,0BAAwD;EACtD,MAAM,0BAAU,IAAI,IAAS;EAC7B,QAAQ,IAAI,KAAK,MAAM;EACvB,MAAM,WAAiC,CAAC;EACxC,MAAM,OAAqC,CAAC;GAAE,QAAQ,KAAK;GAAQ,MAAM,CAAC,KAAK,MAAa;EAAE,CAAC;EAC/F,OAAO,KAAK,SAAS,GAAG;GACtB,MAAM,EAAE,QAAQ,SAAS,SAAS,KAAK,IAAI;GAC3C,MAAM,WAAW,QAAQ,KAAKS;GAC9B,IAAIJ,6BAAAA,aAAa,QAAQ,KAAK,CAACC,6BAAAA,mBAAmB,QAAQ,GACxD,SAAS,KAAK,QAAQ;QAEtB,KAAK,MAAM,SAAS,oBAAoB,QAAQ,GAAG;IACjD,IAAI,QAAQ,IAAI,KAAK,GAAG;KACtB,IAAI,UAAU,KAAK,QAAQ,MAAM,IAAIN,sCAAAA,oBAAoB,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC;KAC/E;IACF;IACA,QAAQ,IAAI,KAAK;IACjB,KAAK,KAAK;KAAE,QAAQ;KAAO,MAAM,CAAC,GAAG,MAAM,KAAK;IAAE,CAAC;GACrD;EAEJ;EACA,OAAO;CACT;AACF;AAEA,SAAS,mBAAmB,UAAoB;CAC9C,OAAOE,4BAAAA,kBAAkB,QAAQ,IAAI,SAAS,MAAMS,cAAAA,KAAK,GAAG,SAAS,gBAAgB;AACvF;AAEA,SAAS,oBAAoB,UAAoB;CAC/C,OAAOL,6BAAAA,mBAAmB,QAAQ,IAC9B,SAAS,MACTE,oCAAAA,0BAA0B,QAAQ,IAChC,SAAS,MACP,CAAC,SAAS,GAAG,IACb,CAAC,IACHG,cAAAA,KAAK,GAAG,SAAS,gBAAgB;AACzC"}
1
+ {"version":3,"file":"RecursiveCollection.cjs","names":["lazyField","AbstractRelationImpl","getMetadata","RelationT","RelationU","recursiveParentsBatchLoader","appendStack","RecursiveCycleError","isReference","isLoadedReference","recursiveChildrenBatchLoader","isCollection","isLoadedCollection","isOneToOneReference","isLoadedOneToOneReference","recursiveM2mBatchLoader","fail"],"sources":["../../src/relations/RecursiveCollection.ts"],"sourcesContent":["import { recursiveChildrenBatchLoader } from \"src/batchloaders/recursiveChildrenBatchLoader.ts\";\nimport { recursiveM2mBatchLoader } from \"src/batchloaders/recursiveM2mBatchLoader.ts\";\nimport { recursiveParentsBatchLoader } from \"src/batchloaders/recursiveParentsBatchLoader.ts\";\nimport {\n type Entity,\n type EntityMetadata,\n type ManyToManyField,\n type Reference,\n type Relation,\n appendStack,\n ensureNotDeleted,\n fail,\n getEmInternalApi,\n getMetadata,\n isCollection,\n isLoadedCollection,\n isLoadedOneToOneReference,\n isLoadedReference,\n isOneToOneReference,\n isReference,\n} from \"src/index.ts\";\nimport type { IsLoadedCachable } from \"src/loading/IsLoadedCache.ts\";\nimport { lazyField } from \"src/newEntity.ts\";\nimport { AbstractRelationImpl } from \"src/relations/AbstractRelationImpl.ts\";\nimport { type ReadOnlyCollection } from \"src/relations/ReadOnlyCollection.ts\";\nimport { RecursiveCycleError } from \"src/relations/RecursiveCycleError.ts\";\nimport { RelationT, RelationU } from \"src/relations/RelationSymbols.ts\";\n\nexport { RecursiveCycleError };\n\n/**\n * An alias for creating `RecursiveParentsCollectionImpl`s.\n *\n * I.e. for `Author.mentor` (m2o fk), we can return `Author.mentorsRecursive` recursively looking up.\n */\nexport function hasRecursiveParents<T extends Entity, U extends Entity>(\n m2oName: keyof T & string, // i.e. `author.mentor`\n otherFieldName: keyof T & string, // i.e. `author.menteesRecursive`\n): ReadOnlyCollection<T, U> {\n return lazyField((entity: T, fieldName) => {\n return new RecursiveParentsCollectionImpl(entity, fieldName as keyof T & string, m2oName, otherFieldName);\n });\n}\n\n/**\n * An alias for creating `RecursiveChildrenCollectionImpl`s.\n *\n * I.e. for `Author.mentees` (o2m), we can return `Author.menteesRecursive` recursively looking down.\n */\nexport function hasRecursiveChildren<T extends Entity, U extends Entity>(\n o2mName: keyof T & string, // i.e. `author.mentees`\n otherFieldName: keyof T & string, // i.e. `author.mentorsRecursive`\n): ReadOnlyCollection<T, U> {\n return lazyField((entity: T, fieldName) => {\n return new RecursiveChildrenCollectionImpl(entity, fieldName as keyof T & string, o2mName, otherFieldName);\n });\n}\n\n/**\n * An alias for creating `RecursiveM2mCollectionImpl`s.\n *\n * I.e. for `User.parents` (m2m), we can return `User.parentsRecursive` recursively looking up through the m2m.\n * Or for `User.children` (m2m), we can return `User.childrenRecursive` recursively looking down.\n */\nexport function hasRecursiveM2m<T extends Entity, U extends Entity>(\n m2mName: keyof T & string, // i.e. `user.parents` or `user.children`\n otherFieldName: keyof T & string, // i.e. `user.childrenRecursive` or `user.parentsRecursive`\n): ReadOnlyCollection<T, U> {\n return lazyField((entity: T, fieldName) => {\n return new RecursiveM2mCollectionImpl(entity, fieldName as keyof T & string, m2mName, otherFieldName);\n });\n}\n\n/**\n * A base class for the common methods between the parent & children recursive collections.\n *\n * We could probably move some of this into AbstractRelationImpl?\n */\nabstract class AbstractRecursiveCollectionImpl<T extends Entity, U extends Entity> extends AbstractRelationImpl<\n T,\n U[]\n> {\n abstract fieldName: string;\n\n get get(): U[] {\n return this.filterDeleted(this.doGet(), { withDeleted: false });\n }\n\n get getWithDeleted(): U[] {\n return this.filterDeleted(this.doGet(), { withDeleted: true });\n }\n\n setFromOpts(): void {\n throw new Error(\"Method not implemented.\");\n }\n\n set(): void {\n throw new Error(\"Method not implemented.\");\n }\n\n get isPreloaded(): boolean {\n return false;\n }\n\n preload(): void {\n throw new Error(\"Method not implemented.\");\n }\n\n cleanupOnEntityDeleted(): Promise<void> {\n return Promise.resolve();\n }\n\n maybeCascadeDelete(): void {}\n\n get meta(): EntityMetadata {\n return getMetadata(this.entity);\n }\n\n abstract doGet(): U[];\n\n /** Removes pending-hard-delete or soft-deleted entities, unless explicitly asked for. */\n protected filterDeleted(entities: U[], opts?: { withDeleted?: boolean }): U[] {\n return opts?.withDeleted === true\n ? [...entities]\n : entities.filter((e) => !e.isDeletedEntity && !(e as any).isSoftDeletedEntity);\n }\n\n [RelationT]: T = null!;\n [RelationU]: U = null!;\n}\n\nexport class RecursiveParentsCollectionImpl<T extends Entity, U extends Entity>\n extends AbstractRecursiveCollectionImpl<T, U>\n implements ReadOnlyCollection<T, U>, IsLoadedCachable\n{\n readonly #fieldName: keyof T & string;\n readonly #m2oName: keyof T & string;\n readonly #otherFieldName: keyof T & string;\n #loaded: boolean | undefined = undefined;\n #loadPromise: Promise<void> | undefined;\n\n constructor(entity: T, fieldName: keyof T & string, m2oName: keyof T & string, otherFieldName: keyof T & string) {\n super(entity);\n this.#fieldName = fieldName;\n this.#m2oName = m2oName;\n this.#otherFieldName = otherFieldName;\n }\n\n // opts is an internal parameter\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<readonly U[]> {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded || opts.forceReload) {\n if (opts.forceReload) {\n this.#loaded = undefined;\n }\n // If we have `[grandchild, newlyCreatedParent, existingGrandparent, ...more...]`, skip up to the\n // `existingGrandparent`, because if we `.load(entity)` (i.e. where we are the `grandchild`) then\n // recursiveParentsBatchLoader will try CTE query up from `grandchild[parent]`, but since that will\n // be `newlyCreatedParent`, it doesn't have an id yet.\n const entityToLoad = opts.forceReload ? this.entity : this.findUnloadedReference()?.entity;\n if (entityToLoad && !entityToLoad.isNewEntity) {\n await (this.#loadPromise ??= recursiveParentsBatchLoader(this.entity.em, this)\n .load(entityToLoad)\n .catch(function load(err) {\n throw appendStack(err, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n }));\n // See if there are any WIP changes, i.e. new parents, that the ^ SQL query didn't know to load.\n // We don't have to `while` loop this, because if parent itself has WIP changes above it, then\n // its own `RecursiveParentsCollectionImpl.load` will load it, before returning to this method.\n const unloadedParent = this.findUnloadedReference();\n if (unloadedParent) {\n await recursiveParentsBatchLoader(this.entity.em, this)\n .load(unloadedParent.entity)\n .catch(function load(err) {\n throw appendStack(err, new Error());\n });\n }\n }\n this.#loaded = true;\n }\n return this.filterDeleted(this.doGet(), opts);\n }\n\n get isLoaded(): boolean {\n if (this.#loaded !== undefined) return this.#loaded;\n this.#loaded = this.findUnloadedReference() === undefined;\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#loaded;\n }\n\n resetIsLoaded(): void {\n this.#loaded = undefined;\n }\n\n get fieldName(): string {\n return this.#fieldName;\n }\n\n get m2oFieldName(): string {\n return this.#m2oName;\n }\n\n get otherFieldName(): string {\n return this.#otherFieldName;\n }\n\n get hasBeenSet(): boolean {\n return false;\n }\n\n toString(): string {\n return `RecursiveParentsCollectionImpl(entity: ${this.entity}, fieldName: ${this.fieldName})`;\n }\n\n doGet(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n const unloaded = this.findUnloadedReference();\n if (unloaded) {\n throw new Error(this.toString() + `.get was called but ${unloaded} was not loaded`);\n }\n const parents: U[] = [];\n const visited = new Set<U>();\n for (\n let current = getLoadedReference(this.entity[this.#m2oName]);\n current !== undefined;\n current = getLoadedReference(current[this.#m2oName])\n ) {\n parents.push(current);\n if (visited.has(current)) throw new RecursiveCycleError(this, [...visited, current]);\n visited.add(current);\n }\n return parents;\n }\n\n private findUnloadedReference(): Reference<any, any, any> | undefined {\n const visited = new Set<any>();\n for (let current = this.entity; current !== undefined; current = getLoadedReference(current[this.#m2oName])) {\n const relation = current[this.#m2oName];\n if (isReference(relation) && !isLoadedReference(relation)) return relation;\n if (visited.has(current)) throw new RecursiveCycleError(this, [...visited, current]);\n visited.add(current);\n }\n return undefined;\n }\n}\n\nexport class RecursiveChildrenCollectionImpl<T extends Entity, U extends Entity>\n extends AbstractRecursiveCollectionImpl<T, U>\n implements ReadOnlyCollection<T, U>, IsLoadedCachable\n{\n readonly #fieldName: keyof T & string;\n readonly #o2mName: keyof T & string;\n readonly #otherFieldName: keyof T & string;\n #loaded: boolean | undefined = undefined;\n #loadPromise: Promise<void> | undefined;\n\n constructor(entity: T, fieldName: keyof T & string, o2mName: keyof T & string, otherFieldName: keyof T & string) {\n super(entity);\n this.#fieldName = fieldName;\n this.#o2mName = o2mName;\n this.#otherFieldName = otherFieldName;\n }\n\n // opts is an internal parameter\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<readonly U[]> {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded || opts.forceReload) {\n if (opts.forceReload) {\n this.#loaded = undefined;\n }\n if (!this.entity.isNewEntity) {\n await (this.#loadPromise ??= recursiveChildrenBatchLoader(this.entity.em, this)\n .load(this.entity)\n .catch(function load(err) {\n throw appendStack(err, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n }));\n }\n const unloaded = this.findUnloadedCollections();\n if (unloaded.length > 0) {\n // Go through the entities own `fooRecursive` collection so that it's marked as loaded.\n // We don't have to `while` loop this, because if they children themselves have any WIP\n // changes, then their own `RecursiveChildrenCollectionImpl.load` will load them.\n await Promise.all(unloaded.map((r) => (r.entity as any)[this.fieldName].load(opts)));\n }\n this.#loaded = true;\n }\n return this.filterDeleted(this.doGet(), opts);\n }\n\n get isLoaded(): boolean {\n if (this.#loaded !== undefined) return this.#loaded;\n this.#loaded = this.findUnloadedCollections().length === 0;\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#loaded;\n }\n\n resetIsLoaded(): void {\n this.#loaded = undefined;\n }\n\n get fieldName(): string {\n return this.#fieldName;\n }\n\n get o2mFieldName(): string {\n return this.#o2mName;\n }\n\n get otherFieldName(): string {\n return this.#otherFieldName;\n }\n\n get hasBeenSet(): boolean {\n return false;\n }\n\n toString(): string {\n return `RecursiveChildrenCollectionImpl(entity: ${this.entity}, fieldName: ${this.fieldName})`;\n }\n\n doGet(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded) {\n throw new Error(this.toString() + `.get was called but when not loaded`);\n }\n const children: U[] = [];\n const visited = new Set<any>();\n // Use a node+path combo to know which path caused the cycle\n const todo: { relation: any; path: U[] }[] = [{ relation: this.entity[this.#o2mName], path: [this.entity as any] }];\n while (todo.length > 0) {\n const { relation, path } = todo.pop()!;\n if (visited.has(relation)) throw new RecursiveCycleError(this, path);\n visited.add(relation);\n for (const child of getLoadedCollection(relation)) {\n children.push(child);\n todo.push({ relation: child[this.#o2mName], path: [...path, child] });\n }\n }\n return children;\n }\n\n /** Finds any children/downstream o2m collections or o2o references. */\n private findUnloadedCollections(): Relation<any, any>[] {\n const visited = new Set<any>();\n const unloaded: Relation<any, any>[] = [];\n const todo: { relation: any; path: U[] }[] = [{ relation: this.entity[this.#o2mName], path: [this.entity as any] }];\n while (todo.length > 0) {\n const { relation, path } = todo.pop()!;\n if (visited.has(relation)) throw new RecursiveCycleError(this, path);\n visited.add(relation);\n if (isCollection(relation) && !isLoadedCollection(relation)) {\n unloaded.push(relation);\n } else if (isOneToOneReference(relation) && !isLoadedOneToOneReference(relation)) {\n unloaded.push(relation);\n } else {\n for (const child of getLoadedCollection(relation)) {\n todo.push({ relation: child[this.#o2mName], path: [...path, child] });\n }\n }\n }\n return unloaded;\n }\n}\n\nexport class RecursiveM2mCollectionImpl<T extends Entity, U extends Entity>\n extends AbstractRecursiveCollectionImpl<T, U>\n implements ReadOnlyCollection<T, U>, IsLoadedCachable\n{\n readonly #fieldName: keyof T & string;\n readonly #m2mName: keyof T & string;\n readonly #otherFieldName: keyof T & string;\n #loaded: boolean | undefined = undefined;\n #loadPromise: Promise<void> | undefined;\n\n constructor(entity: T, fieldName: keyof T & string, m2mName: keyof T & string, otherFieldName: keyof T & string) {\n super(entity);\n this.#fieldName = fieldName;\n this.#m2mName = m2mName;\n this.#otherFieldName = otherFieldName;\n }\n\n // opts is an internal parameter\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<readonly U[]> {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded || opts.forceReload) {\n if (opts.forceReload) {\n this.#loaded = undefined;\n }\n if (!this.entity.isNewEntity) {\n await (this.#loadPromise ??= recursiveM2mBatchLoader(this.entity.em, this)\n .load(this.entity)\n .catch(function load(err: any) {\n throw appendStack(err, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n }));\n }\n const unloaded = this.findUnloadedCollections();\n if (unloaded.length > 0) {\n // Go through the entity's own `fooRecursive` collection so that it's marked as loaded.\n await Promise.all(unloaded.map((r) => (r.entity as any)[this.fieldName].load(opts)));\n }\n this.#loaded = true;\n }\n return this.filterDeleted(this.doGet(), opts);\n }\n\n get isLoaded(): boolean {\n if (this.#loaded !== undefined) return this.#loaded;\n this.#loaded = this.findUnloadedCollections().length === 0;\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#loaded;\n }\n\n resetIsLoaded(): void {\n this.#loaded = undefined;\n }\n\n get fieldName(): string {\n return this.#fieldName;\n }\n\n get m2mFieldName(): string {\n return this.#m2mName;\n }\n\n get otherFieldName(): string {\n return this.#otherFieldName;\n }\n\n get m2mField(): ManyToManyField {\n return this.meta.allFields[this.#m2mName] as ManyToManyField;\n }\n\n get hasBeenSet(): boolean {\n return false;\n }\n\n toString(): string {\n return `RecursiveM2mCollectionImpl(entity: ${this.entity}, fieldName: ${this.fieldName})`;\n }\n\n doGet(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded) {\n throw new Error(this.toString() + `.get was called but when not loaded`);\n }\n const results: U[] = [];\n // Track by entity to handle diamonds (same entity reachable via multiple paths)\n const visited = new Set<any>();\n visited.add(this.entity);\n const todo: { entity: any; path: U[] }[] = [{ entity: this.entity, path: [this.entity as any] }];\n while (todo.length > 0) {\n const { entity: current, path } = todo.pop()!;\n for (const other of getLoadedCollection(current[this.#m2mName])) {\n if (visited.has(other)) {\n // If we're reaching an entity we've already visited, and it's this.entity, that's a cycle\n if (other === this.entity) throw new RecursiveCycleError(this, [...path, other]);\n // Otherwise it's a diamond (reachable via multiple paths) — skip\n continue;\n }\n visited.add(other);\n results.push(other);\n todo.push({ entity: other, path: [...path, other] });\n }\n }\n return results;\n }\n\n /** Finds any m2m collections that are not yet loaded in the recursive tree. */\n private findUnloadedCollections(): Relation<any, any>[] {\n const visited = new Set<any>();\n visited.add(this.entity);\n const unloaded: Relation<any, any>[] = [];\n const todo: { entity: any; path: U[] }[] = [{ entity: this.entity, path: [this.entity as any] }];\n while (todo.length > 0) {\n const { entity: current, path } = todo.pop()!;\n const relation = current[this.#m2mName];\n if (isCollection(relation) && !isLoadedCollection(relation)) {\n unloaded.push(relation);\n } else {\n for (const other of getLoadedCollection(relation)) {\n if (visited.has(other)) {\n if (other === this.entity) throw new RecursiveCycleError(this, [...path, other]);\n continue;\n }\n visited.add(other);\n todo.push({ entity: other, path: [...path, other] });\n }\n }\n }\n return unloaded;\n }\n}\n\nfunction getLoadedReference(relation: any): any {\n return isLoadedReference(relation) ? relation.get : fail(`${relation} was not loaded`);\n}\n\nfunction getLoadedCollection(relation: any): any {\n return isLoadedCollection(relation)\n ? relation.get\n : isLoadedOneToOneReference(relation)\n ? relation.get\n ? [relation.get]\n : []\n : fail(`${relation} was not loaded`);\n}\n"],"mappings":"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"}
@@ -12,23 +12,23 @@ import { Entity } from "../Entity.cjs";
12
12
  *
13
13
  * I.e. for `Author.mentor` (m2o fk), we can return `Author.mentorsRecursive` recursively looking up.
14
14
  */
15
- declare function hasRecursiveParents<T extends Entity, U extends Entity>(m2oName: keyof T & string // i.e. `author.mentor`
16
- , otherFieldName: keyof T & string): ReadOnlyCollection<T, U>;
15
+ export declare function hasRecursiveParents<T extends Entity, U extends Entity>(m2oName: keyof T & string, // i.e. `author.mentor`
16
+ otherFieldName: keyof T & string): ReadOnlyCollection<T, U>;
17
17
  /**
18
18
  * An alias for creating `RecursiveChildrenCollectionImpl`s.
19
19
  *
20
20
  * I.e. for `Author.mentees` (o2m), we can return `Author.menteesRecursive` recursively looking down.
21
21
  */
22
- declare function hasRecursiveChildren<T extends Entity, U extends Entity>(o2mName: keyof T & string // i.e. `author.mentees`
23
- , otherFieldName: keyof T & string): ReadOnlyCollection<T, U>;
22
+ export declare function hasRecursiveChildren<T extends Entity, U extends Entity>(o2mName: keyof T & string, // i.e. `author.mentees`
23
+ otherFieldName: keyof T & string): ReadOnlyCollection<T, U>;
24
24
  /**
25
25
  * An alias for creating `RecursiveM2mCollectionImpl`s.
26
26
  *
27
27
  * I.e. for `User.parents` (m2m), we can return `User.parentsRecursive` recursively looking up through the m2m.
28
28
  * Or for `User.children` (m2m), we can return `User.childrenRecursive` recursively looking down.
29
29
  */
30
- declare function hasRecursiveM2m<T extends Entity, U extends Entity>(m2mName: keyof T & string // i.e. `user.parents` or `user.children`
31
- , otherFieldName: keyof T & string): ReadOnlyCollection<T, U>;
30
+ export declare function hasRecursiveM2m<T extends Entity, U extends Entity>(m2mName: keyof T & string, // i.e. `user.parents` or `user.children`
31
+ otherFieldName: keyof T & string): ReadOnlyCollection<T, U>;
32
32
  /**
33
33
  * A base class for the common methods between the parent & children recursive collections.
34
34
  *
@@ -53,7 +53,7 @@ declare abstract class AbstractRecursiveCollectionImpl<T extends Entity, U exten
53
53
  [RelationT]: T;
54
54
  [RelationU]: U;
55
55
  }
56
- declare class RecursiveParentsCollectionImpl<T extends Entity, U extends Entity> extends AbstractRecursiveCollectionImpl<T, U> implements ReadOnlyCollection<T, U>, IsLoadedCachable {
56
+ export declare class RecursiveParentsCollectionImpl<T extends Entity, U extends Entity> extends AbstractRecursiveCollectionImpl<T, U> implements ReadOnlyCollection<T, U>, IsLoadedCachable {
57
57
  #private;
58
58
  constructor(entity: T, fieldName: keyof T & string, m2oName: keyof T & string, otherFieldName: keyof T & string);
59
59
  load(opts?: {
@@ -70,7 +70,7 @@ declare class RecursiveParentsCollectionImpl<T extends Entity, U extends Entity>
70
70
  doGet(): U[];
71
71
  private findUnloadedReference;
72
72
  }
73
- declare class RecursiveChildrenCollectionImpl<T extends Entity, U extends Entity> extends AbstractRecursiveCollectionImpl<T, U> implements ReadOnlyCollection<T, U>, IsLoadedCachable {
73
+ export declare class RecursiveChildrenCollectionImpl<T extends Entity, U extends Entity> extends AbstractRecursiveCollectionImpl<T, U> implements ReadOnlyCollection<T, U>, IsLoadedCachable {
74
74
  #private;
75
75
  constructor(entity: T, fieldName: keyof T & string, o2mName: keyof T & string, otherFieldName: keyof T & string);
76
76
  load(opts?: {
@@ -88,7 +88,7 @@ declare class RecursiveChildrenCollectionImpl<T extends Entity, U extends Entity
88
88
  /** Finds any children/downstream o2m collections or o2o references. */
89
89
  private findUnloadedCollections;
90
90
  }
91
- declare class RecursiveM2mCollectionImpl<T extends Entity, U extends Entity> extends AbstractRecursiveCollectionImpl<T, U> implements ReadOnlyCollection<T, U>, IsLoadedCachable {
91
+ export declare class RecursiveM2mCollectionImpl<T extends Entity, U extends Entity> extends AbstractRecursiveCollectionImpl<T, U> implements ReadOnlyCollection<T, U>, IsLoadedCachable {
92
92
  #private;
93
93
  constructor(entity: T, fieldName: keyof T & string, m2mName: keyof T & string, otherFieldName: keyof T & string);
94
94
  load(opts?: {
@@ -108,5 +108,5 @@ declare class RecursiveM2mCollectionImpl<T extends Entity, U extends Entity> ext
108
108
  private findUnloadedCollections;
109
109
  }
110
110
  //#endregion
111
- export { RecursiveChildrenCollectionImpl, RecursiveCycleError, RecursiveM2mCollectionImpl, RecursiveParentsCollectionImpl, hasRecursiveChildren, hasRecursiveM2m, hasRecursiveParents };
111
+ export { RecursiveCycleError };
112
112
  //# sourceMappingURL=RecursiveCollection.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RecursiveCollection.d.cts","names":[],"sources":["../../src/relations/RecursiveCollection.ts"],"mappings":";;;;;;;;;;;;;;iBAmCgB,oBAAoB,UAAU,QAAQ,UAAU,QAC9D,eAAe;EACf,sBAAsB,aACrB,mBAAmB,GAAG;;;;;;iBAWT,qBAAqB,UAAU,QAAQ,UAAU,QAC/D,eAAe;EACf,sBAAsB,aACrB,mBAAmB,GAAG;;;;;;;iBAYT,gBAAgB,UAAU,QAAQ,UAAU,QAC1D,eAAe;EACf,sBAAsB,aACrB,mBAAmB,GAAG;;;;;;uBAWV,gCAAgC,UAAU,QAAQ,UAAU,gBAAgB,qBACzF,GACA;WAES;MAEL,OAAO;MAIP,kBAAkB;EAItB;EAIA;MAII;EAIJ;EAIA,0BAA0B;EAI1B;MAEI,QAAQ;WAIH,SAAS;;YAGR,cAAc,UAAU,KAAK;IAAS;MAA0B;GAMzE,YAAY;GACZ,YAAY;;cAGF,+BAA+B,UAAU,QAAQ,UAAU,gBAC9D,gCAAgC,GAAG,cAChC,mBAAmB,GAAG,IAAI;;EAQrC,YAAY,QAAQ,GAAG,iBAAiB,YAAY,eAAe,YAAY,sBAAsB;EAQ/F,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;MAqCtF;EAOJ;MAII;MAIA;MAIA;MAIA;EAIJ;EAIA,SAAS;UAoBD;;cAYG,gCAAgC,UAAU,QAAQ,UAAU,gBAC/D,gCAAgC,GAAG,cAChC,mBAAmB,GAAG,IAAI;;EAQrC,YAAY,QAAQ,GAAG,iBAAiB,YAAY,eAAe,YAAY,sBAAsB;EAQ/F,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;MA4BtF;EAOJ;MAII;MAIA;MAIA;MAIA;EAIJ;EAIA,SAAS;;UAsBD;;cAsBG,2BAA2B,UAAU,QAAQ,UAAU,gBAC1D,gCAAgC,GAAG,cAChC,mBAAmB,GAAG,IAAI;;EAQrC,YAAY,QAAQ,GAAG,iBAAiB,YAAY,eAAe,YAAY,sBAAsB;EAQ/F,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;MA0BtF;EAOJ;MAII;MAIA;MAIA;MAIA,YAAY;MAIZ;EAIJ;EAIA,SAAS;;UA4BD"}
1
+ {"version":3,"file":"RecursiveCollection.d.cts","names":[],"sources":["../../src/relations/RecursiveCollection.ts"],"mappings":";;;;;;;;;;;;;;wBAmCgB,oBAAoB,UAAU,QAAQ,UAAU,QAC9D,eAAe;EACf,sBAAsB,aACrB,mBAAmB,GAAG;;;;;;wBAWT,qBAAqB,UAAU,QAAQ,UAAU,QAC/D,eAAe;EACf,sBAAsB,aACrB,mBAAmB,GAAG;;;;;;;wBAYT,gBAAgB,UAAU,QAAQ,UAAU,QAC1D,eAAe;EACf,sBAAsB,aACrB,mBAAmB,GAAG;;;;;;uBAWV,gCAAgC,UAAU,QAAQ,UAAU,gBAAgB,qBACzF,GACA;WAES;MAEL,OAAO;MAIP,kBAAkB;EAItB;EAIA;MAII;EAIJ;EAIA,0BAA0B;EAI1B;MAEI,QAAQ;WAIH,SAAS;;YAGR,cAAc,UAAU,KAAK;IAAS;MAA0B;GAMzE,YAAY;GACZ,YAAY;;qBAGF,+BAA+B,UAAU,QAAQ,UAAU,gBAC9D,gCAAgC,GAAG,cAChC,mBAAmB,GAAG,IAAI;;EAQrC,YAAY,QAAQ,GAAG,iBAAiB,YAAY,eAAe,YAAY,sBAAsB;EAQ/F,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;MAqCtF;EAOJ;MAII;MAIA;MAIA;MAIA;EAIJ;EAIA,SAAS;UAoBD;;qBAYG,gCAAgC,UAAU,QAAQ,UAAU,gBAC/D,gCAAgC,GAAG,cAChC,mBAAmB,GAAG,IAAI;;EAQrC,YAAY,QAAQ,GAAG,iBAAiB,YAAY,eAAe,YAAY,sBAAsB;EAQ/F,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;MA4BtF;EAOJ;MAII;MAIA;MAIA;MAIA;EAIJ;EAIA,SAAS;;UAsBD;;qBAsBG,2BAA2B,UAAU,QAAQ,UAAU,gBAC1D,gCAAgC,GAAG,cAChC,mBAAmB,GAAG,IAAI;;EAQrC,YAAY,QAAQ,GAAG,iBAAiB,YAAY,eAAe,YAAY,sBAAsB;EAQ/F,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;MA0BtF;EAOJ;MAII;MAIA;MAIA;MAIA,YAAY;MAIZ;EAIJ;EAIA,SAAS;;UA4BD"}
@@ -12,23 +12,23 @@ import { Entity } from "../Entity.mjs";
12
12
  *
13
13
  * I.e. for `Author.mentor` (m2o fk), we can return `Author.mentorsRecursive` recursively looking up.
14
14
  */
15
- declare function hasRecursiveParents<T extends Entity, U extends Entity>(m2oName: keyof T & string // i.e. `author.mentor`
16
- , otherFieldName: keyof T & string): ReadOnlyCollection<T, U>;
15
+ export declare function hasRecursiveParents<T extends Entity, U extends Entity>(m2oName: keyof T & string, // i.e. `author.mentor`
16
+ otherFieldName: keyof T & string): ReadOnlyCollection<T, U>;
17
17
  /**
18
18
  * An alias for creating `RecursiveChildrenCollectionImpl`s.
19
19
  *
20
20
  * I.e. for `Author.mentees` (o2m), we can return `Author.menteesRecursive` recursively looking down.
21
21
  */
22
- declare function hasRecursiveChildren<T extends Entity, U extends Entity>(o2mName: keyof T & string // i.e. `author.mentees`
23
- , otherFieldName: keyof T & string): ReadOnlyCollection<T, U>;
22
+ export declare function hasRecursiveChildren<T extends Entity, U extends Entity>(o2mName: keyof T & string, // i.e. `author.mentees`
23
+ otherFieldName: keyof T & string): ReadOnlyCollection<T, U>;
24
24
  /**
25
25
  * An alias for creating `RecursiveM2mCollectionImpl`s.
26
26
  *
27
27
  * I.e. for `User.parents` (m2m), we can return `User.parentsRecursive` recursively looking up through the m2m.
28
28
  * Or for `User.children` (m2m), we can return `User.childrenRecursive` recursively looking down.
29
29
  */
30
- declare function hasRecursiveM2m<T extends Entity, U extends Entity>(m2mName: keyof T & string // i.e. `user.parents` or `user.children`
31
- , otherFieldName: keyof T & string): ReadOnlyCollection<T, U>;
30
+ export declare function hasRecursiveM2m<T extends Entity, U extends Entity>(m2mName: keyof T & string, // i.e. `user.parents` or `user.children`
31
+ otherFieldName: keyof T & string): ReadOnlyCollection<T, U>;
32
32
  /**
33
33
  * A base class for the common methods between the parent & children recursive collections.
34
34
  *
@@ -53,7 +53,7 @@ declare abstract class AbstractRecursiveCollectionImpl<T extends Entity, U exten
53
53
  [RelationT]: T;
54
54
  [RelationU]: U;
55
55
  }
56
- declare class RecursiveParentsCollectionImpl<T extends Entity, U extends Entity> extends AbstractRecursiveCollectionImpl<T, U> implements ReadOnlyCollection<T, U>, IsLoadedCachable {
56
+ export declare class RecursiveParentsCollectionImpl<T extends Entity, U extends Entity> extends AbstractRecursiveCollectionImpl<T, U> implements ReadOnlyCollection<T, U>, IsLoadedCachable {
57
57
  #private;
58
58
  constructor(entity: T, fieldName: keyof T & string, m2oName: keyof T & string, otherFieldName: keyof T & string);
59
59
  load(opts?: {
@@ -70,7 +70,7 @@ declare class RecursiveParentsCollectionImpl<T extends Entity, U extends Entity>
70
70
  doGet(): U[];
71
71
  private findUnloadedReference;
72
72
  }
73
- declare class RecursiveChildrenCollectionImpl<T extends Entity, U extends Entity> extends AbstractRecursiveCollectionImpl<T, U> implements ReadOnlyCollection<T, U>, IsLoadedCachable {
73
+ export declare class RecursiveChildrenCollectionImpl<T extends Entity, U extends Entity> extends AbstractRecursiveCollectionImpl<T, U> implements ReadOnlyCollection<T, U>, IsLoadedCachable {
74
74
  #private;
75
75
  constructor(entity: T, fieldName: keyof T & string, o2mName: keyof T & string, otherFieldName: keyof T & string);
76
76
  load(opts?: {
@@ -88,7 +88,7 @@ declare class RecursiveChildrenCollectionImpl<T extends Entity, U extends Entity
88
88
  /** Finds any children/downstream o2m collections or o2o references. */
89
89
  private findUnloadedCollections;
90
90
  }
91
- declare class RecursiveM2mCollectionImpl<T extends Entity, U extends Entity> extends AbstractRecursiveCollectionImpl<T, U> implements ReadOnlyCollection<T, U>, IsLoadedCachable {
91
+ export declare class RecursiveM2mCollectionImpl<T extends Entity, U extends Entity> extends AbstractRecursiveCollectionImpl<T, U> implements ReadOnlyCollection<T, U>, IsLoadedCachable {
92
92
  #private;
93
93
  constructor(entity: T, fieldName: keyof T & string, m2mName: keyof T & string, otherFieldName: keyof T & string);
94
94
  load(opts?: {
@@ -108,5 +108,5 @@ declare class RecursiveM2mCollectionImpl<T extends Entity, U extends Entity> ext
108
108
  private findUnloadedCollections;
109
109
  }
110
110
  //#endregion
111
- export { RecursiveChildrenCollectionImpl, RecursiveCycleError, RecursiveM2mCollectionImpl, RecursiveParentsCollectionImpl, hasRecursiveChildren, hasRecursiveM2m, hasRecursiveParents };
111
+ export { RecursiveCycleError };
112
112
  //# sourceMappingURL=RecursiveCollection.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RecursiveCollection.d.mts","names":[],"sources":["../../src/relations/RecursiveCollection.ts"],"mappings":";;;;;;;;;;;;;;iBAmCgB,oBAAoB,UAAU,QAAQ,UAAU,QAC9D,eAAe;EACf,sBAAsB,aACrB,mBAAmB,GAAG;;;;;;iBAWT,qBAAqB,UAAU,QAAQ,UAAU,QAC/D,eAAe;EACf,sBAAsB,aACrB,mBAAmB,GAAG;;;;;;;iBAYT,gBAAgB,UAAU,QAAQ,UAAU,QAC1D,eAAe;EACf,sBAAsB,aACrB,mBAAmB,GAAG;;;;;;uBAWV,gCAAgC,UAAU,QAAQ,UAAU,gBAAgB,qBACzF,GACA;WAES;MAEL,OAAO;MAIP,kBAAkB;EAItB;EAIA;MAII;EAIJ;EAIA,0BAA0B;EAI1B;MAEI,QAAQ;WAIH,SAAS;;YAGR,cAAc,UAAU,KAAK;IAAS;MAA0B;GAMzE,YAAY;GACZ,YAAY;;cAGF,+BAA+B,UAAU,QAAQ,UAAU,gBAC9D,gCAAgC,GAAG,cAChC,mBAAmB,GAAG,IAAI;;EAQrC,YAAY,QAAQ,GAAG,iBAAiB,YAAY,eAAe,YAAY,sBAAsB;EAQ/F,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;MAqCtF;EAOJ;MAII;MAIA;MAIA;MAIA;EAIJ;EAIA,SAAS;UAoBD;;cAYG,gCAAgC,UAAU,QAAQ,UAAU,gBAC/D,gCAAgC,GAAG,cAChC,mBAAmB,GAAG,IAAI;;EAQrC,YAAY,QAAQ,GAAG,iBAAiB,YAAY,eAAe,YAAY,sBAAsB;EAQ/F,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;MA4BtF;EAOJ;MAII;MAIA;MAIA;MAIA;EAIJ;EAIA,SAAS;;UAsBD;;cAsBG,2BAA2B,UAAU,QAAQ,UAAU,gBAC1D,gCAAgC,GAAG,cAChC,mBAAmB,GAAG,IAAI;;EAQrC,YAAY,QAAQ,GAAG,iBAAiB,YAAY,eAAe,YAAY,sBAAsB;EAQ/F,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;MA0BtF;EAOJ;MAII;MAIA;MAIA;MAIA,YAAY;MAIZ;EAIJ;EAIA,SAAS;;UA4BD"}
1
+ {"version":3,"file":"RecursiveCollection.d.mts","names":[],"sources":["../../src/relations/RecursiveCollection.ts"],"mappings":";;;;;;;;;;;;;;wBAmCgB,oBAAoB,UAAU,QAAQ,UAAU,QAC9D,eAAe;EACf,sBAAsB,aACrB,mBAAmB,GAAG;;;;;;wBAWT,qBAAqB,UAAU,QAAQ,UAAU,QAC/D,eAAe;EACf,sBAAsB,aACrB,mBAAmB,GAAG;;;;;;;wBAYT,gBAAgB,UAAU,QAAQ,UAAU,QAC1D,eAAe;EACf,sBAAsB,aACrB,mBAAmB,GAAG;;;;;;uBAWV,gCAAgC,UAAU,QAAQ,UAAU,gBAAgB,qBACzF,GACA;WAES;MAEL,OAAO;MAIP,kBAAkB;EAItB;EAIA;MAII;EAIJ;EAIA,0BAA0B;EAI1B;MAEI,QAAQ;WAIH,SAAS;;YAGR,cAAc,UAAU,KAAK;IAAS;MAA0B;GAMzE,YAAY;GACZ,YAAY;;qBAGF,+BAA+B,UAAU,QAAQ,UAAU,gBAC9D,gCAAgC,GAAG,cAChC,mBAAmB,GAAG,IAAI;;EAQrC,YAAY,QAAQ,GAAG,iBAAiB,YAAY,eAAe,YAAY,sBAAsB;EAQ/F,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;MAqCtF;EAOJ;MAII;MAIA;MAIA;MAIA;EAIJ;EAIA,SAAS;UAoBD;;qBAYG,gCAAgC,UAAU,QAAQ,UAAU,gBAC/D,gCAAgC,GAAG,cAChC,mBAAmB,GAAG,IAAI;;EAQrC,YAAY,QAAQ,GAAG,iBAAiB,YAAY,eAAe,YAAY,sBAAsB;EAQ/F,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;MA4BtF;EAOJ;MAII;MAIA;MAIA;MAIA;EAIJ;EAIA,SAAS;;UAsBD;;qBAsBG,2BAA2B,UAAU,QAAQ,UAAU,gBAC1D,gCAAgC,GAAG,cAChC,mBAAmB,GAAG,IAAI;;EAQrC,YAAY,QAAQ,GAAG,iBAAiB,YAAY,eAAe,YAAY,sBAAsB;EAQ/F,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;MA0BtF;EAOJ;MAII;MAIA;MAIA;MAIA,YAAY;MAIZ;EAIJ;EAIA,SAAS;;UA4BD"}
@@ -1 +1 @@
1
- {"version":3,"file":"RecursiveCollection.js","names":["#fieldName","#m2oName","#otherFieldName","#loaded","#loadPromise","#o2mName","#m2mName"],"sources":["../../src/relations/RecursiveCollection.ts"],"sourcesContent":["import { recursiveChildrenBatchLoader } from \"src/batchloaders/recursiveChildrenBatchLoader.ts\";\nimport { recursiveM2mBatchLoader } from \"src/batchloaders/recursiveM2mBatchLoader.ts\";\nimport { recursiveParentsBatchLoader } from \"src/batchloaders/recursiveParentsBatchLoader.ts\";\nimport {\n type Entity,\n type EntityMetadata,\n type ManyToManyField,\n type Reference,\n type Relation,\n appendStack,\n ensureNotDeleted,\n fail,\n getEmInternalApi,\n getMetadata,\n isCollection,\n isLoadedCollection,\n isLoadedOneToOneReference,\n isLoadedReference,\n isOneToOneReference,\n isReference,\n} from \"src/index.ts\";\nimport type { IsLoadedCachable } from \"src/loading/IsLoadedCache.ts\";\nimport { lazyField } from \"src/newEntity.ts\";\nimport { AbstractRelationImpl } from \"src/relations/AbstractRelationImpl.ts\";\nimport { type ReadOnlyCollection } from \"src/relations/ReadOnlyCollection.ts\";\nimport { RecursiveCycleError } from \"src/relations/RecursiveCycleError.ts\";\nimport { RelationT, RelationU } from \"src/relations/RelationSymbols.ts\";\n\nexport { RecursiveCycleError };\n\n/**\n * An alias for creating `RecursiveParentsCollectionImpl`s.\n *\n * I.e. for `Author.mentor` (m2o fk), we can return `Author.mentorsRecursive` recursively looking up.\n */\nexport function hasRecursiveParents<T extends Entity, U extends Entity>(\n m2oName: keyof T & string, // i.e. `author.mentor`\n otherFieldName: keyof T & string, // i.e. `author.menteesRecursive`\n): ReadOnlyCollection<T, U> {\n return lazyField((entity: T, fieldName) => {\n return new RecursiveParentsCollectionImpl(entity, fieldName as keyof T & string, m2oName, otherFieldName);\n });\n}\n\n/**\n * An alias for creating `RecursiveChildrenCollectionImpl`s.\n *\n * I.e. for `Author.mentees` (o2m), we can return `Author.menteesRecursive` recursively looking down.\n */\nexport function hasRecursiveChildren<T extends Entity, U extends Entity>(\n o2mName: keyof T & string, // i.e. `author.mentees`\n otherFieldName: keyof T & string, // i.e. `author.mentorsRecursive`\n): ReadOnlyCollection<T, U> {\n return lazyField((entity: T, fieldName) => {\n return new RecursiveChildrenCollectionImpl(entity, fieldName as keyof T & string, o2mName, otherFieldName);\n });\n}\n\n/**\n * An alias for creating `RecursiveM2mCollectionImpl`s.\n *\n * I.e. for `User.parents` (m2m), we can return `User.parentsRecursive` recursively looking up through the m2m.\n * Or for `User.children` (m2m), we can return `User.childrenRecursive` recursively looking down.\n */\nexport function hasRecursiveM2m<T extends Entity, U extends Entity>(\n m2mName: keyof T & string, // i.e. `user.parents` or `user.children`\n otherFieldName: keyof T & string, // i.e. `user.childrenRecursive` or `user.parentsRecursive`\n): ReadOnlyCollection<T, U> {\n return lazyField((entity: T, fieldName) => {\n return new RecursiveM2mCollectionImpl(entity, fieldName as keyof T & string, m2mName, otherFieldName);\n });\n}\n\n/**\n * A base class for the common methods between the parent & children recursive collections.\n *\n * We could probably move some of this into AbstractRelationImpl?\n */\nabstract class AbstractRecursiveCollectionImpl<T extends Entity, U extends Entity> extends AbstractRelationImpl<\n T,\n U[]\n> {\n abstract fieldName: string;\n\n get get(): U[] {\n return this.filterDeleted(this.doGet(), { withDeleted: false });\n }\n\n get getWithDeleted(): U[] {\n return this.filterDeleted(this.doGet(), { withDeleted: true });\n }\n\n setFromOpts(): void {\n throw new Error(\"Method not implemented.\");\n }\n\n set(): void {\n throw new Error(\"Method not implemented.\");\n }\n\n get isPreloaded(): boolean {\n return false;\n }\n\n preload(): void {\n throw new Error(\"Method not implemented.\");\n }\n\n cleanupOnEntityDeleted(): Promise<void> {\n return Promise.resolve();\n }\n\n maybeCascadeDelete(): void {}\n\n get meta(): EntityMetadata {\n return getMetadata(this.entity);\n }\n\n abstract doGet(): U[];\n\n /** Removes pending-hard-delete or soft-deleted entities, unless explicitly asked for. */\n protected filterDeleted(entities: U[], opts?: { withDeleted?: boolean }): U[] {\n return opts?.withDeleted === true\n ? [...entities]\n : entities.filter((e) => !e.isDeletedEntity && !(e as any).isSoftDeletedEntity);\n }\n\n [RelationT]: T = null!;\n [RelationU]: U = null!;\n}\n\nexport class RecursiveParentsCollectionImpl<T extends Entity, U extends Entity>\n extends AbstractRecursiveCollectionImpl<T, U>\n implements ReadOnlyCollection<T, U>, IsLoadedCachable\n{\n readonly #fieldName: keyof T & string;\n readonly #m2oName: keyof T & string;\n readonly #otherFieldName: keyof T & string;\n #loaded: boolean | undefined = undefined;\n #loadPromise: Promise<void> | undefined;\n\n constructor(entity: T, fieldName: keyof T & string, m2oName: keyof T & string, otherFieldName: keyof T & string) {\n super(entity);\n this.#fieldName = fieldName;\n this.#m2oName = m2oName;\n this.#otherFieldName = otherFieldName;\n }\n\n // opts is an internal parameter\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<readonly U[]> {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded || opts.forceReload) {\n if (opts.forceReload) {\n this.#loaded = undefined;\n }\n // If we have `[grandchild, newlyCreatedParent, existingGrandparent, ...more...]`, skip up to the\n // `existingGrandparent`, because if we `.load(entity)` (i.e. where we are the `grandchild`) then\n // recursiveParentsBatchLoader will try CTE query up from `grandchild[parent]`, but since that will\n // be `newlyCreatedParent`, it doesn't have an id yet.\n const entityToLoad = opts.forceReload ? this.entity : this.findUnloadedReference()?.entity;\n if (entityToLoad && !entityToLoad.isNewEntity) {\n await (this.#loadPromise ??= recursiveParentsBatchLoader(this.entity.em, this)\n .load(entityToLoad)\n .catch(function load(err) {\n throw appendStack(err, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n }));\n // See if there are any WIP changes, i.e. new parents, that the ^ SQL query didn't know to load.\n // We don't have to `while` loop this, because if parent itself has WIP changes above it, then\n // its own `RecursiveParentsCollectionImpl.load` will load it, before returning to this method.\n const unloadedParent = this.findUnloadedReference();\n if (unloadedParent) {\n await recursiveParentsBatchLoader(this.entity.em, this)\n .load(unloadedParent.entity)\n .catch(function load(err) {\n throw appendStack(err, new Error());\n });\n }\n }\n this.#loaded = true;\n }\n return this.filterDeleted(this.doGet(), opts);\n }\n\n get isLoaded(): boolean {\n if (this.#loaded !== undefined) return this.#loaded;\n this.#loaded = this.findUnloadedReference() === undefined;\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#loaded;\n }\n\n resetIsLoaded(): void {\n this.#loaded = undefined;\n }\n\n get fieldName(): string {\n return this.#fieldName;\n }\n\n get m2oFieldName(): string {\n return this.#m2oName;\n }\n\n get otherFieldName(): string {\n return this.#otherFieldName;\n }\n\n get hasBeenSet(): boolean {\n return false;\n }\n\n toString(): string {\n return `RecursiveParentsCollectionImpl(entity: ${this.entity}, fieldName: ${this.fieldName})`;\n }\n\n doGet(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n const unloaded = this.findUnloadedReference();\n if (unloaded) {\n throw new Error(this.toString() + `.get was called but ${unloaded} was not loaded`);\n }\n const parents: U[] = [];\n const visited = new Set<U>();\n for (\n let current = getLoadedReference(this.entity[this.#m2oName]);\n current !== undefined;\n current = getLoadedReference(current[this.#m2oName])\n ) {\n parents.push(current);\n if (visited.has(current)) throw new RecursiveCycleError(this, [...visited, current]);\n visited.add(current);\n }\n return parents;\n }\n\n private findUnloadedReference(): Reference<any, any, any> | undefined {\n const visited = new Set<any>();\n for (let current = this.entity; current !== undefined; current = getLoadedReference(current[this.#m2oName])) {\n const relation = current[this.#m2oName];\n if (isReference(relation) && !isLoadedReference(relation)) return relation;\n if (visited.has(current)) throw new RecursiveCycleError(this, [...visited, current]);\n visited.add(current);\n }\n return undefined;\n }\n}\n\nexport class RecursiveChildrenCollectionImpl<T extends Entity, U extends Entity>\n extends AbstractRecursiveCollectionImpl<T, U>\n implements ReadOnlyCollection<T, U>, IsLoadedCachable\n{\n readonly #fieldName: keyof T & string;\n readonly #o2mName: keyof T & string;\n readonly #otherFieldName: keyof T & string;\n #loaded: boolean | undefined = undefined;\n #loadPromise: Promise<void> | undefined;\n\n constructor(entity: T, fieldName: keyof T & string, o2mName: keyof T & string, otherFieldName: keyof T & string) {\n super(entity);\n this.#fieldName = fieldName;\n this.#o2mName = o2mName;\n this.#otherFieldName = otherFieldName;\n }\n\n // opts is an internal parameter\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<readonly U[]> {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded || opts.forceReload) {\n if (opts.forceReload) {\n this.#loaded = undefined;\n }\n if (!this.entity.isNewEntity) {\n await (this.#loadPromise ??= recursiveChildrenBatchLoader(this.entity.em, this)\n .load(this.entity)\n .catch(function load(err) {\n throw appendStack(err, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n }));\n }\n const unloaded = this.findUnloadedCollections();\n if (unloaded.length > 0) {\n // Go through the entities own `fooRecursive` collection so that it's marked as loaded.\n // We don't have to `while` loop this, because if they children themselves have any WIP\n // changes, then their own `RecursiveChildrenCollectionImpl.load` will load them.\n await Promise.all(unloaded.map((r) => (r.entity as any)[this.fieldName].load(opts)));\n }\n this.#loaded = true;\n }\n return this.filterDeleted(this.doGet(), opts);\n }\n\n get isLoaded(): boolean {\n if (this.#loaded !== undefined) return this.#loaded;\n this.#loaded = this.findUnloadedCollections().length === 0;\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#loaded;\n }\n\n resetIsLoaded(): void {\n this.#loaded = undefined;\n }\n\n get fieldName(): string {\n return this.#fieldName;\n }\n\n get o2mFieldName(): string {\n return this.#o2mName;\n }\n\n get otherFieldName(): string {\n return this.#otherFieldName;\n }\n\n get hasBeenSet(): boolean {\n return false;\n }\n\n toString(): string {\n return `RecursiveChildrenCollectionImpl(entity: ${this.entity}, fieldName: ${this.fieldName})`;\n }\n\n doGet(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded) {\n throw new Error(this.toString() + `.get was called but when not loaded`);\n }\n const children: U[] = [];\n const visited = new Set<any>();\n // Use a node+path combo to know which path caused the cycle\n const todo: { relation: any; path: U[] }[] = [{ relation: this.entity[this.#o2mName], path: [this.entity as any] }];\n while (todo.length > 0) {\n const { relation, path } = todo.pop()!;\n if (visited.has(relation)) throw new RecursiveCycleError(this, path);\n visited.add(relation);\n for (const child of getLoadedCollection(relation)) {\n children.push(child);\n todo.push({ relation: child[this.#o2mName], path: [...path, child] });\n }\n }\n return children;\n }\n\n /** Finds any children/downstream o2m collections or o2o references. */\n private findUnloadedCollections(): Relation<any, any>[] {\n const visited = new Set<any>();\n const unloaded: Relation<any, any>[] = [];\n const todo: { relation: any; path: U[] }[] = [{ relation: this.entity[this.#o2mName], path: [this.entity as any] }];\n while (todo.length > 0) {\n const { relation, path } = todo.pop()!;\n if (visited.has(relation)) throw new RecursiveCycleError(this, path);\n visited.add(relation);\n if (isCollection(relation) && !isLoadedCollection(relation)) {\n unloaded.push(relation);\n } else if (isOneToOneReference(relation) && !isLoadedOneToOneReference(relation)) {\n unloaded.push(relation);\n } else {\n for (const child of getLoadedCollection(relation)) {\n todo.push({ relation: child[this.#o2mName], path: [...path, child] });\n }\n }\n }\n return unloaded;\n }\n}\n\nexport class RecursiveM2mCollectionImpl<T extends Entity, U extends Entity>\n extends AbstractRecursiveCollectionImpl<T, U>\n implements ReadOnlyCollection<T, U>, IsLoadedCachable\n{\n readonly #fieldName: keyof T & string;\n readonly #m2mName: keyof T & string;\n readonly #otherFieldName: keyof T & string;\n #loaded: boolean | undefined = undefined;\n #loadPromise: Promise<void> | undefined;\n\n constructor(entity: T, fieldName: keyof T & string, m2mName: keyof T & string, otherFieldName: keyof T & string) {\n super(entity);\n this.#fieldName = fieldName;\n this.#m2mName = m2mName;\n this.#otherFieldName = otherFieldName;\n }\n\n // opts is an internal parameter\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<readonly U[]> {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded || opts.forceReload) {\n if (opts.forceReload) {\n this.#loaded = undefined;\n }\n if (!this.entity.isNewEntity) {\n await (this.#loadPromise ??= recursiveM2mBatchLoader(this.entity.em, this)\n .load(this.entity)\n .catch(function load(err: any) {\n throw appendStack(err, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n }));\n }\n const unloaded = this.findUnloadedCollections();\n if (unloaded.length > 0) {\n // Go through the entity's own `fooRecursive` collection so that it's marked as loaded.\n await Promise.all(unloaded.map((r) => (r.entity as any)[this.fieldName].load(opts)));\n }\n this.#loaded = true;\n }\n return this.filterDeleted(this.doGet(), opts);\n }\n\n get isLoaded(): boolean {\n if (this.#loaded !== undefined) return this.#loaded;\n this.#loaded = this.findUnloadedCollections().length === 0;\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#loaded;\n }\n\n resetIsLoaded(): void {\n this.#loaded = undefined;\n }\n\n get fieldName(): string {\n return this.#fieldName;\n }\n\n get m2mFieldName(): string {\n return this.#m2mName;\n }\n\n get otherFieldName(): string {\n return this.#otherFieldName;\n }\n\n get m2mField(): ManyToManyField {\n return this.meta.allFields[this.#m2mName] as ManyToManyField;\n }\n\n get hasBeenSet(): boolean {\n return false;\n }\n\n toString(): string {\n return `RecursiveM2mCollectionImpl(entity: ${this.entity}, fieldName: ${this.fieldName})`;\n }\n\n doGet(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded) {\n throw new Error(this.toString() + `.get was called but when not loaded`);\n }\n const results: U[] = [];\n // Track by entity to handle diamonds (same entity reachable via multiple paths)\n const visited = new Set<any>();\n visited.add(this.entity);\n const todo: { entity: any; path: U[] }[] = [{ entity: this.entity, path: [this.entity as any] }];\n while (todo.length > 0) {\n const { entity: current, path } = todo.pop()!;\n for (const other of getLoadedCollection(current[this.#m2mName])) {\n if (visited.has(other)) {\n // If we're reaching an entity we've already visited, and it's this.entity, that's a cycle\n if (other === this.entity) throw new RecursiveCycleError(this, [...path, other]);\n // Otherwise it's a diamond (reachable via multiple paths) — skip\n continue;\n }\n visited.add(other);\n results.push(other);\n todo.push({ entity: other, path: [...path, other] });\n }\n }\n return results;\n }\n\n /** Finds any m2m collections that are not yet loaded in the recursive tree. */\n private findUnloadedCollections(): Relation<any, any>[] {\n const visited = new Set<any>();\n visited.add(this.entity);\n const unloaded: Relation<any, any>[] = [];\n const todo: { entity: any; path: U[] }[] = [{ entity: this.entity, path: [this.entity as any] }];\n while (todo.length > 0) {\n const { entity: current, path } = todo.pop()!;\n const relation = current[this.#m2mName];\n if (isCollection(relation) && !isLoadedCollection(relation)) {\n unloaded.push(relation);\n } else {\n for (const other of getLoadedCollection(relation)) {\n if (visited.has(other)) {\n if (other === this.entity) throw new RecursiveCycleError(this, [...path, other]);\n continue;\n }\n visited.add(other);\n todo.push({ entity: other, path: [...path, other] });\n }\n }\n }\n return unloaded;\n }\n}\n\nfunction getLoadedReference(relation: any): any {\n return isLoadedReference(relation) ? relation.get : fail(`${relation} was not loaded`);\n}\n\nfunction getLoadedCollection(relation: any): any {\n return isLoadedCollection(relation)\n ? relation.get\n : isLoadedOneToOneReference(relation)\n ? relation.get\n ? [relation.get]\n : []\n : fail(`${relation} was not loaded`);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"RecursiveCollection.js","names":[],"sources":["../../src/relations/RecursiveCollection.ts"],"sourcesContent":["import { recursiveChildrenBatchLoader } from \"src/batchloaders/recursiveChildrenBatchLoader.ts\";\nimport { recursiveM2mBatchLoader } from \"src/batchloaders/recursiveM2mBatchLoader.ts\";\nimport { recursiveParentsBatchLoader } from \"src/batchloaders/recursiveParentsBatchLoader.ts\";\nimport {\n type Entity,\n type EntityMetadata,\n type ManyToManyField,\n type Reference,\n type Relation,\n appendStack,\n ensureNotDeleted,\n fail,\n getEmInternalApi,\n getMetadata,\n isCollection,\n isLoadedCollection,\n isLoadedOneToOneReference,\n isLoadedReference,\n isOneToOneReference,\n isReference,\n} from \"src/index.ts\";\nimport type { IsLoadedCachable } from \"src/loading/IsLoadedCache.ts\";\nimport { lazyField } from \"src/newEntity.ts\";\nimport { AbstractRelationImpl } from \"src/relations/AbstractRelationImpl.ts\";\nimport { type ReadOnlyCollection } from \"src/relations/ReadOnlyCollection.ts\";\nimport { RecursiveCycleError } from \"src/relations/RecursiveCycleError.ts\";\nimport { RelationT, RelationU } from \"src/relations/RelationSymbols.ts\";\n\nexport { RecursiveCycleError };\n\n/**\n * An alias for creating `RecursiveParentsCollectionImpl`s.\n *\n * I.e. for `Author.mentor` (m2o fk), we can return `Author.mentorsRecursive` recursively looking up.\n */\nexport function hasRecursiveParents<T extends Entity, U extends Entity>(\n m2oName: keyof T & string, // i.e. `author.mentor`\n otherFieldName: keyof T & string, // i.e. `author.menteesRecursive`\n): ReadOnlyCollection<T, U> {\n return lazyField((entity: T, fieldName) => {\n return new RecursiveParentsCollectionImpl(entity, fieldName as keyof T & string, m2oName, otherFieldName);\n });\n}\n\n/**\n * An alias for creating `RecursiveChildrenCollectionImpl`s.\n *\n * I.e. for `Author.mentees` (o2m), we can return `Author.menteesRecursive` recursively looking down.\n */\nexport function hasRecursiveChildren<T extends Entity, U extends Entity>(\n o2mName: keyof T & string, // i.e. `author.mentees`\n otherFieldName: keyof T & string, // i.e. `author.mentorsRecursive`\n): ReadOnlyCollection<T, U> {\n return lazyField((entity: T, fieldName) => {\n return new RecursiveChildrenCollectionImpl(entity, fieldName as keyof T & string, o2mName, otherFieldName);\n });\n}\n\n/**\n * An alias for creating `RecursiveM2mCollectionImpl`s.\n *\n * I.e. for `User.parents` (m2m), we can return `User.parentsRecursive` recursively looking up through the m2m.\n * Or for `User.children` (m2m), we can return `User.childrenRecursive` recursively looking down.\n */\nexport function hasRecursiveM2m<T extends Entity, U extends Entity>(\n m2mName: keyof T & string, // i.e. `user.parents` or `user.children`\n otherFieldName: keyof T & string, // i.e. `user.childrenRecursive` or `user.parentsRecursive`\n): ReadOnlyCollection<T, U> {\n return lazyField((entity: T, fieldName) => {\n return new RecursiveM2mCollectionImpl(entity, fieldName as keyof T & string, m2mName, otherFieldName);\n });\n}\n\n/**\n * A base class for the common methods between the parent & children recursive collections.\n *\n * We could probably move some of this into AbstractRelationImpl?\n */\nabstract class AbstractRecursiveCollectionImpl<T extends Entity, U extends Entity> extends AbstractRelationImpl<\n T,\n U[]\n> {\n abstract fieldName: string;\n\n get get(): U[] {\n return this.filterDeleted(this.doGet(), { withDeleted: false });\n }\n\n get getWithDeleted(): U[] {\n return this.filterDeleted(this.doGet(), { withDeleted: true });\n }\n\n setFromOpts(): void {\n throw new Error(\"Method not implemented.\");\n }\n\n set(): void {\n throw new Error(\"Method not implemented.\");\n }\n\n get isPreloaded(): boolean {\n return false;\n }\n\n preload(): void {\n throw new Error(\"Method not implemented.\");\n }\n\n cleanupOnEntityDeleted(): Promise<void> {\n return Promise.resolve();\n }\n\n maybeCascadeDelete(): void {}\n\n get meta(): EntityMetadata {\n return getMetadata(this.entity);\n }\n\n abstract doGet(): U[];\n\n /** Removes pending-hard-delete or soft-deleted entities, unless explicitly asked for. */\n protected filterDeleted(entities: U[], opts?: { withDeleted?: boolean }): U[] {\n return opts?.withDeleted === true\n ? [...entities]\n : entities.filter((e) => !e.isDeletedEntity && !(e as any).isSoftDeletedEntity);\n }\n\n [RelationT]: T = null!;\n [RelationU]: U = null!;\n}\n\nexport class RecursiveParentsCollectionImpl<T extends Entity, U extends Entity>\n extends AbstractRecursiveCollectionImpl<T, U>\n implements ReadOnlyCollection<T, U>, IsLoadedCachable\n{\n readonly #fieldName: keyof T & string;\n readonly #m2oName: keyof T & string;\n readonly #otherFieldName: keyof T & string;\n #loaded: boolean | undefined = undefined;\n #loadPromise: Promise<void> | undefined;\n\n constructor(entity: T, fieldName: keyof T & string, m2oName: keyof T & string, otherFieldName: keyof T & string) {\n super(entity);\n this.#fieldName = fieldName;\n this.#m2oName = m2oName;\n this.#otherFieldName = otherFieldName;\n }\n\n // opts is an internal parameter\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<readonly U[]> {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded || opts.forceReload) {\n if (opts.forceReload) {\n this.#loaded = undefined;\n }\n // If we have `[grandchild, newlyCreatedParent, existingGrandparent, ...more...]`, skip up to the\n // `existingGrandparent`, because if we `.load(entity)` (i.e. where we are the `grandchild`) then\n // recursiveParentsBatchLoader will try CTE query up from `grandchild[parent]`, but since that will\n // be `newlyCreatedParent`, it doesn't have an id yet.\n const entityToLoad = opts.forceReload ? this.entity : this.findUnloadedReference()?.entity;\n if (entityToLoad && !entityToLoad.isNewEntity) {\n await (this.#loadPromise ??= recursiveParentsBatchLoader(this.entity.em, this)\n .load(entityToLoad)\n .catch(function load(err) {\n throw appendStack(err, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n }));\n // See if there are any WIP changes, i.e. new parents, that the ^ SQL query didn't know to load.\n // We don't have to `while` loop this, because if parent itself has WIP changes above it, then\n // its own `RecursiveParentsCollectionImpl.load` will load it, before returning to this method.\n const unloadedParent = this.findUnloadedReference();\n if (unloadedParent) {\n await recursiveParentsBatchLoader(this.entity.em, this)\n .load(unloadedParent.entity)\n .catch(function load(err) {\n throw appendStack(err, new Error());\n });\n }\n }\n this.#loaded = true;\n }\n return this.filterDeleted(this.doGet(), opts);\n }\n\n get isLoaded(): boolean {\n if (this.#loaded !== undefined) return this.#loaded;\n this.#loaded = this.findUnloadedReference() === undefined;\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#loaded;\n }\n\n resetIsLoaded(): void {\n this.#loaded = undefined;\n }\n\n get fieldName(): string {\n return this.#fieldName;\n }\n\n get m2oFieldName(): string {\n return this.#m2oName;\n }\n\n get otherFieldName(): string {\n return this.#otherFieldName;\n }\n\n get hasBeenSet(): boolean {\n return false;\n }\n\n toString(): string {\n return `RecursiveParentsCollectionImpl(entity: ${this.entity}, fieldName: ${this.fieldName})`;\n }\n\n doGet(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n const unloaded = this.findUnloadedReference();\n if (unloaded) {\n throw new Error(this.toString() + `.get was called but ${unloaded} was not loaded`);\n }\n const parents: U[] = [];\n const visited = new Set<U>();\n for (\n let current = getLoadedReference(this.entity[this.#m2oName]);\n current !== undefined;\n current = getLoadedReference(current[this.#m2oName])\n ) {\n parents.push(current);\n if (visited.has(current)) throw new RecursiveCycleError(this, [...visited, current]);\n visited.add(current);\n }\n return parents;\n }\n\n private findUnloadedReference(): Reference<any, any, any> | undefined {\n const visited = new Set<any>();\n for (let current = this.entity; current !== undefined; current = getLoadedReference(current[this.#m2oName])) {\n const relation = current[this.#m2oName];\n if (isReference(relation) && !isLoadedReference(relation)) return relation;\n if (visited.has(current)) throw new RecursiveCycleError(this, [...visited, current]);\n visited.add(current);\n }\n return undefined;\n }\n}\n\nexport class RecursiveChildrenCollectionImpl<T extends Entity, U extends Entity>\n extends AbstractRecursiveCollectionImpl<T, U>\n implements ReadOnlyCollection<T, U>, IsLoadedCachable\n{\n readonly #fieldName: keyof T & string;\n readonly #o2mName: keyof T & string;\n readonly #otherFieldName: keyof T & string;\n #loaded: boolean | undefined = undefined;\n #loadPromise: Promise<void> | undefined;\n\n constructor(entity: T, fieldName: keyof T & string, o2mName: keyof T & string, otherFieldName: keyof T & string) {\n super(entity);\n this.#fieldName = fieldName;\n this.#o2mName = o2mName;\n this.#otherFieldName = otherFieldName;\n }\n\n // opts is an internal parameter\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<readonly U[]> {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded || opts.forceReload) {\n if (opts.forceReload) {\n this.#loaded = undefined;\n }\n if (!this.entity.isNewEntity) {\n await (this.#loadPromise ??= recursiveChildrenBatchLoader(this.entity.em, this)\n .load(this.entity)\n .catch(function load(err) {\n throw appendStack(err, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n }));\n }\n const unloaded = this.findUnloadedCollections();\n if (unloaded.length > 0) {\n // Go through the entities own `fooRecursive` collection so that it's marked as loaded.\n // We don't have to `while` loop this, because if they children themselves have any WIP\n // changes, then their own `RecursiveChildrenCollectionImpl.load` will load them.\n await Promise.all(unloaded.map((r) => (r.entity as any)[this.fieldName].load(opts)));\n }\n this.#loaded = true;\n }\n return this.filterDeleted(this.doGet(), opts);\n }\n\n get isLoaded(): boolean {\n if (this.#loaded !== undefined) return this.#loaded;\n this.#loaded = this.findUnloadedCollections().length === 0;\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#loaded;\n }\n\n resetIsLoaded(): void {\n this.#loaded = undefined;\n }\n\n get fieldName(): string {\n return this.#fieldName;\n }\n\n get o2mFieldName(): string {\n return this.#o2mName;\n }\n\n get otherFieldName(): string {\n return this.#otherFieldName;\n }\n\n get hasBeenSet(): boolean {\n return false;\n }\n\n toString(): string {\n return `RecursiveChildrenCollectionImpl(entity: ${this.entity}, fieldName: ${this.fieldName})`;\n }\n\n doGet(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded) {\n throw new Error(this.toString() + `.get was called but when not loaded`);\n }\n const children: U[] = [];\n const visited = new Set<any>();\n // Use a node+path combo to know which path caused the cycle\n const todo: { relation: any; path: U[] }[] = [{ relation: this.entity[this.#o2mName], path: [this.entity as any] }];\n while (todo.length > 0) {\n const { relation, path } = todo.pop()!;\n if (visited.has(relation)) throw new RecursiveCycleError(this, path);\n visited.add(relation);\n for (const child of getLoadedCollection(relation)) {\n children.push(child);\n todo.push({ relation: child[this.#o2mName], path: [...path, child] });\n }\n }\n return children;\n }\n\n /** Finds any children/downstream o2m collections or o2o references. */\n private findUnloadedCollections(): Relation<any, any>[] {\n const visited = new Set<any>();\n const unloaded: Relation<any, any>[] = [];\n const todo: { relation: any; path: U[] }[] = [{ relation: this.entity[this.#o2mName], path: [this.entity as any] }];\n while (todo.length > 0) {\n const { relation, path } = todo.pop()!;\n if (visited.has(relation)) throw new RecursiveCycleError(this, path);\n visited.add(relation);\n if (isCollection(relation) && !isLoadedCollection(relation)) {\n unloaded.push(relation);\n } else if (isOneToOneReference(relation) && !isLoadedOneToOneReference(relation)) {\n unloaded.push(relation);\n } else {\n for (const child of getLoadedCollection(relation)) {\n todo.push({ relation: child[this.#o2mName], path: [...path, child] });\n }\n }\n }\n return unloaded;\n }\n}\n\nexport class RecursiveM2mCollectionImpl<T extends Entity, U extends Entity>\n extends AbstractRecursiveCollectionImpl<T, U>\n implements ReadOnlyCollection<T, U>, IsLoadedCachable\n{\n readonly #fieldName: keyof T & string;\n readonly #m2mName: keyof T & string;\n readonly #otherFieldName: keyof T & string;\n #loaded: boolean | undefined = undefined;\n #loadPromise: Promise<void> | undefined;\n\n constructor(entity: T, fieldName: keyof T & string, m2mName: keyof T & string, otherFieldName: keyof T & string) {\n super(entity);\n this.#fieldName = fieldName;\n this.#m2mName = m2mName;\n this.#otherFieldName = otherFieldName;\n }\n\n // opts is an internal parameter\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<readonly U[]> {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded || opts.forceReload) {\n if (opts.forceReload) {\n this.#loaded = undefined;\n }\n if (!this.entity.isNewEntity) {\n await (this.#loadPromise ??= recursiveM2mBatchLoader(this.entity.em, this)\n .load(this.entity)\n .catch(function load(err: any) {\n throw appendStack(err, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n }));\n }\n const unloaded = this.findUnloadedCollections();\n if (unloaded.length > 0) {\n // Go through the entity's own `fooRecursive` collection so that it's marked as loaded.\n await Promise.all(unloaded.map((r) => (r.entity as any)[this.fieldName].load(opts)));\n }\n this.#loaded = true;\n }\n return this.filterDeleted(this.doGet(), opts);\n }\n\n get isLoaded(): boolean {\n if (this.#loaded !== undefined) return this.#loaded;\n this.#loaded = this.findUnloadedCollections().length === 0;\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#loaded;\n }\n\n resetIsLoaded(): void {\n this.#loaded = undefined;\n }\n\n get fieldName(): string {\n return this.#fieldName;\n }\n\n get m2mFieldName(): string {\n return this.#m2mName;\n }\n\n get otherFieldName(): string {\n return this.#otherFieldName;\n }\n\n get m2mField(): ManyToManyField {\n return this.meta.allFields[this.#m2mName] as ManyToManyField;\n }\n\n get hasBeenSet(): boolean {\n return false;\n }\n\n toString(): string {\n return `RecursiveM2mCollectionImpl(entity: ${this.entity}, fieldName: ${this.fieldName})`;\n }\n\n doGet(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n if (!this.isLoaded) {\n throw new Error(this.toString() + `.get was called but when not loaded`);\n }\n const results: U[] = [];\n // Track by entity to handle diamonds (same entity reachable via multiple paths)\n const visited = new Set<any>();\n visited.add(this.entity);\n const todo: { entity: any; path: U[] }[] = [{ entity: this.entity, path: [this.entity as any] }];\n while (todo.length > 0) {\n const { entity: current, path } = todo.pop()!;\n for (const other of getLoadedCollection(current[this.#m2mName])) {\n if (visited.has(other)) {\n // If we're reaching an entity we've already visited, and it's this.entity, that's a cycle\n if (other === this.entity) throw new RecursiveCycleError(this, [...path, other]);\n // Otherwise it's a diamond (reachable via multiple paths) — skip\n continue;\n }\n visited.add(other);\n results.push(other);\n todo.push({ entity: other, path: [...path, other] });\n }\n }\n return results;\n }\n\n /** Finds any m2m collections that are not yet loaded in the recursive tree. */\n private findUnloadedCollections(): Relation<any, any>[] {\n const visited = new Set<any>();\n visited.add(this.entity);\n const unloaded: Relation<any, any>[] = [];\n const todo: { entity: any; path: U[] }[] = [{ entity: this.entity, path: [this.entity as any] }];\n while (todo.length > 0) {\n const { entity: current, path } = todo.pop()!;\n const relation = current[this.#m2mName];\n if (isCollection(relation) && !isLoadedCollection(relation)) {\n unloaded.push(relation);\n } else {\n for (const other of getLoadedCollection(relation)) {\n if (visited.has(other)) {\n if (other === this.entity) throw new RecursiveCycleError(this, [...path, other]);\n continue;\n }\n visited.add(other);\n todo.push({ entity: other, path: [...path, other] });\n }\n }\n }\n return unloaded;\n }\n}\n\nfunction getLoadedReference(relation: any): any {\n return isLoadedReference(relation) ? relation.get : fail(`${relation} was not loaded`);\n}\n\nfunction getLoadedCollection(relation: any): any {\n return isLoadedCollection(relation)\n ? relation.get\n : isLoadedOneToOneReference(relation)\n ? relation.get\n ? [relation.get]\n : []\n : fail(`${relation} was not loaded`);\n}\n"],"mappings":"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"}
@@ -5,11 +5,11 @@ interface RecursiveCycleRelation {
5
5
  fieldName: string;
6
6
  }
7
7
  /** Indicates a recursive relation/property cycle that cannot be safely evaluated. */
8
- declare class RecursiveCycleError extends Error {
8
+ export declare class RecursiveCycleError extends Error {
9
9
  readonly fieldName: string;
10
10
  entities: Entity[];
11
11
  constructor(relation: RecursiveCycleRelation, entities: Entity[]);
12
12
  }
13
13
  //#endregion
14
- export { RecursiveCycleError };
14
+ export {};
15
15
  //# sourceMappingURL=RecursiveCycleError.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RecursiveCycleError.d.cts","names":[],"sources":["../../src/relations/RecursiveCycleError.ts"],"mappings":";;UAEU;EACR,QAAQ;EACR;;;cAIW,4BAA4B;WAC9B;EACT,UAAU;EAEV,YAAY,UAAU,wBAAwB,UAAU"}
1
+ {"version":3,"file":"RecursiveCycleError.d.cts","names":[],"sources":["../../src/relations/RecursiveCycleError.ts"],"mappings":";;UAEU;EACR,QAAQ;EACR;;;qBAIW,4BAA4B;WAC9B;EACT,UAAU;EAEV,YAAY,UAAU,wBAAwB,UAAU"}
@@ -5,11 +5,11 @@ interface RecursiveCycleRelation {
5
5
  fieldName: string;
6
6
  }
7
7
  /** Indicates a recursive relation/property cycle that cannot be safely evaluated. */
8
- declare class RecursiveCycleError extends Error {
8
+ export declare class RecursiveCycleError extends Error {
9
9
  readonly fieldName: string;
10
10
  entities: Entity[];
11
11
  constructor(relation: RecursiveCycleRelation, entities: Entity[]);
12
12
  }
13
13
  //#endregion
14
- export { RecursiveCycleError };
14
+ export {};
15
15
  //# sourceMappingURL=RecursiveCycleError.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RecursiveCycleError.d.mts","names":[],"sources":["../../src/relations/RecursiveCycleError.ts"],"mappings":";;UAEU;EACR,QAAQ;EACR;;;cAIW,4BAA4B;WAC9B;EACT,UAAU;EAEV,YAAY,UAAU,wBAAwB,UAAU"}
1
+ {"version":3,"file":"RecursiveCycleError.d.mts","names":[],"sources":["../../src/relations/RecursiveCycleError.ts"],"mappings":";;UAEU;EACR,QAAQ;EACR;;;qBAIW,4BAA4B;WAC9B;EACT,UAAU;EAEV,YAAY,UAAU,wBAAwB,UAAU"}
@@ -12,7 +12,7 @@ import { Entity } from "../Entity.cjs";
12
12
  * `U | undefined`. If it is not optional, `N` will be `never`, making the return types
13
13
  * `U | never` which becomes just `U`.
14
14
  */
15
- interface Reference<T extends Entity, U extends Entity, N extends never | undefined> extends Relation<T, U> {
15
+ export interface Reference<T extends Entity, U extends Entity, N extends never | undefined> extends Relation<T, U> {
16
16
  [ReferenceN]: N;
17
17
  readonly isLoaded: boolean;
18
18
  load(opts?: {
@@ -24,16 +24,16 @@ interface Reference<T extends Entity, U extends Entity, N extends never | undefi
24
24
  idTaggedMaybe: TaggedId | undefined;
25
25
  }
26
26
  /** Adds a known-safe `get` accessor. */
27
- interface LoadedReference<T extends Entity, U extends Entity, N extends never | undefined> extends Reference<T, U, N> {
27
+ export interface LoadedReference<T extends Entity, U extends Entity, N extends never | undefined> extends Reference<T, U, N> {
28
28
  id: IdOf<U> | N;
29
29
  get: U | N;
30
30
  getWithDeleted: U | N;
31
31
  isSet: boolean;
32
32
  }
33
33
  /** Type guard utility for determining if an entity field is a Reference. */
34
- declare function isReference(maybeReference: any): maybeReference is Reference<any, any, any>;
34
+ export declare function isReference(maybeReference: any): maybeReference is Reference<any, any, any>;
35
35
  /** Type guard utility for determining if an entity field is a loaded Reference. */
36
- declare function isLoadedReference(maybeReference: any): maybeReference is Reference<any, any, any> & LoadedReference<any, any, any>;
36
+ export declare function isLoadedReference(maybeReference: any): maybeReference is Reference<any, any, any> & LoadedReference<any, any, any>;
37
37
  //#endregion
38
- export { LoadedReference, Reference, ReferenceN, isLoadedReference, isReference };
38
+ export { ReferenceN };
39
39
  //# sourceMappingURL=Reference.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Reference.d.cts","names":[],"sources":["../../src/relations/Reference.ts"],"mappings":";;;;;;;;;;;;;;UAsBiB,UAAU,UAAU,QAAQ,UAAU,QAAQ,qCAAqC,SAAS,GAAG;GAC7G,aAAa;WAGL;EAET,KAAK;IAAS;IAAuB;MAAuB,QAAQ,IAAI;EAExE,IAAI,OAAO,IAAI;;EAGf,eAAe;;;UAIA,gBAAgB,UAAU,QAAQ,UAAU,QAAQ,qCAAqC,UACxG,GACA,GACA;EASA,IAAI,KAAK,KAAK;EAEd,KAAK,IAAI;EAET,gBAAgB,IAAI;EAIpB;;;iBAIc,YAAY,sBAAsB,kBAAkB;;iBAWpD,kBACd,sBACC,kBAAkB,2BAA2B"}
1
+ {"version":3,"file":"Reference.d.cts","names":[],"sources":["../../src/relations/Reference.ts"],"mappings":";;;;;;;;;;;;;;iBAsBiB,UAAU,UAAU,QAAQ,UAAU,QAAQ,qCAAqC,SAAS,GAAG;GAC7G,aAAa;WAGL;EAET,KAAK;IAAS;IAAuB;MAAuB,QAAQ,IAAI;EAExE,IAAI,OAAO,IAAI;;EAGf,eAAe;;;iBAIA,gBAAgB,UAAU,QAAQ,UAAU,QAAQ,qCAAqC,UACxG,GACA,GACA;EASA,IAAI,KAAK,KAAK;EAEd,KAAK,IAAI;EAET,gBAAgB,IAAI;EAIpB;;;wBAIc,YAAY,sBAAsB,kBAAkB;;wBAWpD,kBACd,sBACC,kBAAkB,2BAA2B"}
@@ -12,7 +12,7 @@ import { Entity } from "../Entity.mjs";
12
12
  * `U | undefined`. If it is not optional, `N` will be `never`, making the return types
13
13
  * `U | never` which becomes just `U`.
14
14
  */
15
- interface Reference<T extends Entity, U extends Entity, N extends never | undefined> extends Relation<T, U> {
15
+ export interface Reference<T extends Entity, U extends Entity, N extends never | undefined> extends Relation<T, U> {
16
16
  [ReferenceN]: N;
17
17
  readonly isLoaded: boolean;
18
18
  load(opts?: {
@@ -24,16 +24,16 @@ interface Reference<T extends Entity, U extends Entity, N extends never | undefi
24
24
  idTaggedMaybe: TaggedId | undefined;
25
25
  }
26
26
  /** Adds a known-safe `get` accessor. */
27
- interface LoadedReference<T extends Entity, U extends Entity, N extends never | undefined> extends Reference<T, U, N> {
27
+ export interface LoadedReference<T extends Entity, U extends Entity, N extends never | undefined> extends Reference<T, U, N> {
28
28
  id: IdOf<U> | N;
29
29
  get: U | N;
30
30
  getWithDeleted: U | N;
31
31
  isSet: boolean;
32
32
  }
33
33
  /** Type guard utility for determining if an entity field is a Reference. */
34
- declare function isReference(maybeReference: any): maybeReference is Reference<any, any, any>;
34
+ export declare function isReference(maybeReference: any): maybeReference is Reference<any, any, any>;
35
35
  /** Type guard utility for determining if an entity field is a loaded Reference. */
36
- declare function isLoadedReference(maybeReference: any): maybeReference is Reference<any, any, any> & LoadedReference<any, any, any>;
36
+ export declare function isLoadedReference(maybeReference: any): maybeReference is Reference<any, any, any> & LoadedReference<any, any, any>;
37
37
  //#endregion
38
- export { LoadedReference, Reference, ReferenceN, isLoadedReference, isReference };
38
+ export { ReferenceN };
39
39
  //# sourceMappingURL=Reference.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Reference.d.mts","names":[],"sources":["../../src/relations/Reference.ts"],"mappings":";;;;;;;;;;;;;;UAsBiB,UAAU,UAAU,QAAQ,UAAU,QAAQ,qCAAqC,SAAS,GAAG;GAC7G,aAAa;WAGL;EAET,KAAK;IAAS;IAAuB;MAAuB,QAAQ,IAAI;EAExE,IAAI,OAAO,IAAI;;EAGf,eAAe;;;UAIA,gBAAgB,UAAU,QAAQ,UAAU,QAAQ,qCAAqC,UACxG,GACA,GACA;EASA,IAAI,KAAK,KAAK;EAEd,KAAK,IAAI;EAET,gBAAgB,IAAI;EAIpB;;;iBAIc,YAAY,sBAAsB,kBAAkB;;iBAWpD,kBACd,sBACC,kBAAkB,2BAA2B"}
1
+ {"version":3,"file":"Reference.d.mts","names":[],"sources":["../../src/relations/Reference.ts"],"mappings":";;;;;;;;;;;;;;iBAsBiB,UAAU,UAAU,QAAQ,UAAU,QAAQ,qCAAqC,SAAS,GAAG;GAC7G,aAAa;WAGL;EAET,KAAK;IAAS;IAAuB;MAAuB,QAAQ,IAAI;EAExE,IAAI,OAAO,IAAI;;EAGf,eAAe;;;iBAIA,gBAAgB,UAAU,QAAQ,UAAU,QAAQ,qCAAqC,UACxG,GACA,GACA;EASA,IAAI,KAAK,KAAK;EAEd,KAAK,IAAI;EAET,gBAAgB,IAAI;EAIpB;;;wBAIc,YAAY,sBAAsB,kBAAkB;;wBAWpD,kBACd,sBACC,kBAAkB,2BAA2B"}
@@ -1,5 +1,4 @@
1
1
  //#region src/relations/ReferenceSymbols.d.ts
2
- declare const ReferenceN: unique symbol;
2
+ export declare const ReferenceN: unique symbol;
3
3
  //#endregion
4
- export { ReferenceN };
5
4
  //# sourceMappingURL=ReferenceSymbols.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReferenceSymbols.d.cts","names":[],"sources":["../../src/relations/ReferenceSymbols.ts"],"mappings":";cACa"}
1
+ {"version":3,"file":"ReferenceSymbols.d.cts","names":[],"sources":["../../src/relations/ReferenceSymbols.ts"],"mappings":";qBACa"}
@@ -1,5 +1,4 @@
1
1
  //#region src/relations/ReferenceSymbols.d.ts
2
- declare const ReferenceN: unique symbol;
2
+ export declare const ReferenceN: unique symbol;
3
3
  //#endregion
4
- export { ReferenceN };
5
4
  //# sourceMappingURL=ReferenceSymbols.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReferenceSymbols.d.mts","names":[],"sources":["../../src/relations/ReferenceSymbols.ts"],"mappings":";cACa"}
1
+ {"version":3,"file":"ReferenceSymbols.d.mts","names":[],"sources":["../../src/relations/ReferenceSymbols.ts"],"mappings":";qBACa"}
@@ -2,7 +2,7 @@ import { RelationT, RelationU } from "./RelationSymbols.cjs";
2
2
  import { Entity } from "../Entity.cjs";
3
3
  //#region src/relations/Relation.d.ts
4
4
  /** A relationship from `T` to `U`, could be any of many-to-one, one-to-many, or many-to-many. */
5
- interface Relation<T extends Entity, U extends Entity> {
5
+ export interface Relation<T extends Entity, U extends Entity> {
6
6
  [RelationT]: T;
7
7
  [RelationU]: U;
8
8
  isLoaded: boolean;
@@ -10,7 +10,7 @@ interface Relation<T extends Entity, U extends Entity> {
10
10
  hasBeenSet: boolean;
11
11
  }
12
12
  /** Type guard utility for determining if an entity field is a Relation. */
13
- declare function isRelation(maybeRelation: any): maybeRelation is Relation<any, any>;
13
+ export declare function isRelation(maybeRelation: any): maybeRelation is Relation<any, any>;
14
14
  //#endregion
15
- export { Relation, RelationT, RelationU, isRelation };
15
+ export { RelationT, RelationU };
16
16
  //# sourceMappingURL=Relation.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Relation.d.cts","names":[],"sources":["../../src/relations/Relation.ts"],"mappings":";;;;UAOiB,SAAS,UAAU,QAAQ,UAAU;GAOnD,YAAY;GACZ,YAAY;EACb;EACA,QAAQ;EACR;;;iBAIc,WAAW,qBAAqB,iBAAiB"}
1
+ {"version":3,"file":"Relation.d.cts","names":[],"sources":["../../src/relations/Relation.ts"],"mappings":";;;;iBAOiB,SAAS,UAAU,QAAQ,UAAU;GAOnD,YAAY;GACZ,YAAY;EACb;EACA,QAAQ;EACR;;;wBAIc,WAAW,qBAAqB,iBAAiB"}
@@ -2,7 +2,7 @@ import { RelationT, RelationU } from "./RelationSymbols.mjs";
2
2
  import { Entity } from "../Entity.mjs";
3
3
  //#region src/relations/Relation.d.ts
4
4
  /** A relationship from `T` to `U`, could be any of many-to-one, one-to-many, or many-to-many. */
5
- interface Relation<T extends Entity, U extends Entity> {
5
+ export interface Relation<T extends Entity, U extends Entity> {
6
6
  [RelationT]: T;
7
7
  [RelationU]: U;
8
8
  isLoaded: boolean;
@@ -10,7 +10,7 @@ interface Relation<T extends Entity, U extends Entity> {
10
10
  hasBeenSet: boolean;
11
11
  }
12
12
  /** Type guard utility for determining if an entity field is a Relation. */
13
- declare function isRelation(maybeRelation: any): maybeRelation is Relation<any, any>;
13
+ export declare function isRelation(maybeRelation: any): maybeRelation is Relation<any, any>;
14
14
  //#endregion
15
- export { Relation, RelationT, RelationU, isRelation };
15
+ export { RelationT, RelationU };
16
16
  //# sourceMappingURL=Relation.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Relation.d.mts","names":[],"sources":["../../src/relations/Relation.ts"],"mappings":";;;;UAOiB,SAAS,UAAU,QAAQ,UAAU;GAOnD,YAAY;GACZ,YAAY;EACb;EACA,QAAQ;EACR;;;iBAIc,WAAW,qBAAqB,iBAAiB"}
1
+ {"version":3,"file":"Relation.d.mts","names":[],"sources":["../../src/relations/Relation.ts"],"mappings":";;;;iBAOiB,SAAS,UAAU,QAAQ,UAAU;GAOnD,YAAY;GACZ,YAAY;EACb;EACA,QAAQ;EACR;;;wBAIc,WAAW,qBAAqB,iBAAiB"}