joist-core 2.3.0-next.96 → 2.3.0-next.97

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 (687) hide show
  1. package/build/EntityManager.cjs +36 -39
  2. package/build/EntityManager.cjs.map +1 -1
  3. package/build/EntityManager.d.cts +4 -4
  4. package/build/EntityManager.d.mts +4 -4
  5. package/build/EntityManager.js +29 -32
  6. package/build/EntityManager.js.map +1 -1
  7. package/build/EntityMetadata.cjs +3 -3
  8. package/build/EntityMetadata.js +3 -3
  9. package/build/IndexManager.cjs +1 -1
  10. package/build/IndexManager.js +1 -1
  11. package/build/InstanceData.cjs +1 -1
  12. package/build/InstanceData.js +1 -1
  13. package/build/JoinRows.cjs +1 -1
  14. package/build/JoinRows.js +1 -1
  15. package/build/PluginManager.cjs +0 -1
  16. package/build/PluginManager.cjs.map +1 -1
  17. package/build/PluginManager.d.cts +1 -1
  18. package/build/PluginManager.d.mts +1 -1
  19. package/build/PluginManager.js +0 -1
  20. package/build/PluginManager.js.map +1 -1
  21. package/build/ReactionsManager.cjs +2 -2
  22. package/build/ReactionsManager.js +2 -2
  23. package/build/Todo.cjs +1 -1
  24. package/build/Todo.js +1 -1
  25. package/build/batchloaders/enumCollectionBatchLoader.cjs +1 -1
  26. package/build/batchloaders/enumCollectionBatchLoader.js +1 -1
  27. package/build/batchloaders/loadBatchLoader.cjs +6 -5
  28. package/build/batchloaders/loadBatchLoader.cjs.map +1 -1
  29. package/build/batchloaders/loadBatchLoader.d.cts.map +1 -1
  30. package/build/batchloaders/loadBatchLoader.d.mts.map +1 -1
  31. package/build/batchloaders/loadBatchLoader.js +4 -3
  32. package/build/batchloaders/loadBatchLoader.js.map +1 -1
  33. package/build/batchloaders/manyToManyBatchLoader.cjs +1 -1
  34. package/build/batchloaders/manyToManyBatchLoader.js +1 -1
  35. package/build/batchloaders/oneToManyBatchLoader.cjs +3 -3
  36. package/build/batchloaders/oneToManyBatchLoader.cjs.map +1 -1
  37. package/build/batchloaders/oneToManyBatchLoader.js +2 -2
  38. package/build/batchloaders/oneToOneBatchLoader.cjs +4 -4
  39. package/build/batchloaders/oneToOneBatchLoader.cjs.map +1 -1
  40. package/build/batchloaders/oneToOneBatchLoader.js +3 -3
  41. package/build/batchloaders/populateBatchLoader.cjs +11 -11
  42. package/build/batchloaders/populateBatchLoader.cjs.map +1 -1
  43. package/build/batchloaders/populateBatchLoader.js +8 -8
  44. package/build/batchloaders/recursiveChildrenBatchLoader.cjs +8 -8
  45. package/build/batchloaders/recursiveChildrenBatchLoader.cjs.map +1 -1
  46. package/build/batchloaders/recursiveChildrenBatchLoader.js +5 -5
  47. package/build/batchloaders/recursiveM2mBatchLoader.cjs +5 -5
  48. package/build/batchloaders/recursiveM2mBatchLoader.cjs.map +1 -1
  49. package/build/batchloaders/recursiveM2mBatchLoader.js +2 -2
  50. package/build/batchloaders/recursiveParentsBatchLoader.cjs +8 -8
  51. package/build/batchloaders/recursiveParentsBatchLoader.cjs.map +1 -1
  52. package/build/batchloaders/recursiveParentsBatchLoader.js +5 -5
  53. package/build/changes.cjs +4 -4
  54. package/build/changes.js +4 -4
  55. package/build/config.cjs +3 -3
  56. package/build/config.js +3 -3
  57. package/build/configure.cjs +6 -6
  58. package/build/configure.js +6 -6
  59. package/build/dataloaders/fastWhereFilterHash.cjs +3 -3
  60. package/build/dataloaders/fastWhereFilterHash.cjs.map +1 -1
  61. package/build/dataloaders/fastWhereFilterHash.js +2 -2
  62. package/build/dataloaders/fastWhereFilterHash.js.map +1 -1
  63. package/build/dataloaders/findByUniqueDataLoader.cjs +5 -6
  64. package/build/dataloaders/findByUniqueDataLoader.cjs.map +1 -1
  65. package/build/dataloaders/findByUniqueDataLoader.d.cts.map +1 -1
  66. package/build/dataloaders/findByUniqueDataLoader.d.mts.map +1 -1
  67. package/build/dataloaders/findByUniqueDataLoader.js +3 -4
  68. package/build/dataloaders/findByUniqueDataLoader.js.map +1 -1
  69. package/build/dataloaders/findCountDataLoader.cjs +10 -13
  70. package/build/dataloaders/findCountDataLoader.cjs.map +1 -1
  71. package/build/dataloaders/findCountDataLoader.d.cts +2 -2
  72. package/build/dataloaders/findCountDataLoader.d.mts +2 -2
  73. package/build/dataloaders/findCountDataLoader.js +4 -7
  74. package/build/dataloaders/findCountDataLoader.js.map +1 -1
  75. package/build/dataloaders/findDataLoader.cjs +15 -19
  76. package/build/dataloaders/findDataLoader.cjs.map +1 -1
  77. package/build/dataloaders/findDataLoader.d.cts +2 -2
  78. package/build/dataloaders/findDataLoader.d.cts.map +1 -1
  79. package/build/dataloaders/findDataLoader.d.mts +2 -2
  80. package/build/dataloaders/findDataLoader.d.mts.map +1 -1
  81. package/build/dataloaders/findDataLoader.js +5 -9
  82. package/build/dataloaders/findDataLoader.js.map +1 -1
  83. package/build/dataloaders/findIdsDataLoader.cjs +6 -9
  84. package/build/dataloaders/findIdsDataLoader.cjs.map +1 -1
  85. package/build/dataloaders/findIdsDataLoader.d.cts +1 -1
  86. package/build/dataloaders/findIdsDataLoader.d.mts +1 -1
  87. package/build/dataloaders/findIdsDataLoader.js +3 -6
  88. package/build/dataloaders/findIdsDataLoader.js.map +1 -1
  89. package/build/dataloaders/findOrCreateDataLoader.cjs +1 -2
  90. package/build/dataloaders/findOrCreateDataLoader.cjs.map +1 -1
  91. package/build/dataloaders/findOrCreateDataLoader.js +1 -2
  92. package/build/dataloaders/findOrCreateDataLoader.js.map +1 -1
  93. package/build/dataloaders/findPaginatedDataLoader.cjs +3 -6
  94. package/build/dataloaders/findPaginatedDataLoader.cjs.map +1 -1
  95. package/build/dataloaders/findPaginatedDataLoader.d.cts +1 -1
  96. package/build/dataloaders/findPaginatedDataLoader.d.mts +1 -1
  97. package/build/dataloaders/findPaginatedDataLoader.js +2 -5
  98. package/build/dataloaders/findPaginatedDataLoader.js.map +1 -1
  99. package/build/dataloaders/lensDataLoader.cjs +4 -4
  100. package/build/dataloaders/lensDataLoader.cjs.map +1 -1
  101. package/build/dataloaders/lensDataLoader.js +2 -2
  102. package/build/dataloaders/lensDataLoader.js.map +1 -1
  103. package/build/dataloaders/manyToManyFindDataLoader.cjs +1 -4
  104. package/build/dataloaders/manyToManyFindDataLoader.cjs.map +1 -1
  105. package/build/dataloaders/manyToManyFindDataLoader.d.cts +0 -1
  106. package/build/dataloaders/manyToManyFindDataLoader.d.cts.map +1 -1
  107. package/build/dataloaders/manyToManyFindDataLoader.d.mts +0 -1
  108. package/build/dataloaders/manyToManyFindDataLoader.d.mts.map +1 -1
  109. package/build/dataloaders/manyToManyFindDataLoader.js +1 -4
  110. package/build/dataloaders/manyToManyFindDataLoader.js.map +1 -1
  111. package/build/dataloaders/oneToManyFindDataLoader.cjs +3 -6
  112. package/build/dataloaders/oneToManyFindDataLoader.cjs.map +1 -1
  113. package/build/dataloaders/oneToManyFindDataLoader.d.cts +0 -1
  114. package/build/dataloaders/oneToManyFindDataLoader.d.cts.map +1 -1
  115. package/build/dataloaders/oneToManyFindDataLoader.d.mts +0 -1
  116. package/build/dataloaders/oneToManyFindDataLoader.d.mts.map +1 -1
  117. package/build/dataloaders/oneToManyFindDataLoader.js +2 -5
  118. package/build/dataloaders/oneToManyFindDataLoader.js.map +1 -1
  119. package/build/defaults.cjs +4 -4
  120. package/build/defaults.js +4 -4
  121. package/build/driverApi.cjs +4 -5
  122. package/build/driverApi.cjs.map +1 -1
  123. package/build/driverApi.d.cts +1 -1
  124. package/build/driverApi.d.mts +1 -1
  125. package/build/driverApi.js +2 -2
  126. package/build/driverApi.js.map +1 -1
  127. package/build/drivers/Driver.cjs +0 -1
  128. package/build/drivers/Driver.d.cts +1 -1
  129. package/build/drivers/Driver.d.mts +1 -1
  130. package/build/drivers/Driver.js +0 -1
  131. package/build/drivers/EntityWriter.cjs +2 -2
  132. package/build/drivers/EntityWriter.js +2 -2
  133. package/build/drivers/index.cjs +0 -6
  134. package/build/drivers/index.d.cts +1 -3
  135. package/build/drivers/index.d.mts +1 -3
  136. package/build/drivers/index.js +1 -3
  137. package/build/fieldSerde.cjs +2 -2
  138. package/build/fieldSerde.js +2 -2
  139. package/build/fields.cjs +2 -2
  140. package/build/fields.js +2 -2
  141. package/build/getProperties.cjs +1 -1
  142. package/build/getProperties.js +1 -1
  143. package/build/index.cjs +109 -107
  144. package/build/index.cjs.map +1 -1
  145. package/build/index.d.cts +27 -24
  146. package/build/index.d.cts.map +1 -1
  147. package/build/index.d.mts +27 -24
  148. package/build/index.d.mts.map +1 -1
  149. package/build/index.js +51 -49
  150. package/build/index.js.map +1 -1
  151. package/build/json.cjs +3 -3
  152. package/build/json.js +3 -3
  153. package/build/keys.cjs +1 -1
  154. package/build/keys.js +1 -1
  155. package/build/loadHints.cjs +1 -1
  156. package/build/loadHints.js +1 -1
  157. package/build/loadLens.cjs +1 -1
  158. package/build/loadLens.js +1 -1
  159. package/build/logging/FactoryLogger.cjs +1 -1
  160. package/build/logging/FactoryLogger.js +1 -1
  161. package/build/logging/FieldLogger.cjs +1 -1
  162. package/build/logging/FieldLogger.js +1 -1
  163. package/build/logging/ReactionLogger.cjs +1 -1
  164. package/build/logging/ReactionLogger.js +1 -1
  165. package/build/newEntity.cjs +1 -1
  166. package/build/newEntity.js +1 -1
  167. package/build/newTestInstance.cjs +3 -3
  168. package/build/newTestInstance.js +3 -3
  169. package/build/plugins/PreloadPlugin.cjs +1 -2
  170. package/build/plugins/PreloadPlugin.d.cts +1 -1
  171. package/build/plugins/PreloadPlugin.d.mts +1 -1
  172. package/build/plugins/PreloadPlugin.js +1 -2
  173. package/build/preloading/JsonAggregatePreloader.cjs +31 -31
  174. package/build/preloading/JsonAggregatePreloader.cjs.map +1 -1
  175. package/build/preloading/JsonAggregatePreloader.d.cts +1 -1
  176. package/build/preloading/JsonAggregatePreloader.d.mts +1 -1
  177. package/build/preloading/JsonAggregatePreloader.js +6 -6
  178. package/build/preloading/JsonAggregatePreloader.js.map +1 -1
  179. package/build/preloading/partitionHint.cjs +3 -3
  180. package/build/preloading/partitionHint.js +3 -3
  181. package/build/{ConditionBuilder.cjs → queries/ConditionBuilder.cjs} +7 -8
  182. package/build/queries/ConditionBuilder.cjs.map +1 -0
  183. package/build/{ConditionBuilder.d.cts → queries/ConditionBuilder.d.cts} +3 -3
  184. package/build/queries/ConditionBuilder.d.cts.map +1 -0
  185. package/build/{ConditionBuilder.d.mts → queries/ConditionBuilder.d.mts} +3 -3
  186. package/build/queries/ConditionBuilder.d.mts.map +1 -0
  187. package/build/{ConditionBuilder.js → queries/ConditionBuilder.js} +4 -5
  188. package/build/queries/ConditionBuilder.js.map +1 -0
  189. package/build/{conditions.cjs → queries/conditions.cjs} +1 -2
  190. package/build/queries/conditions.cjs.map +1 -0
  191. package/build/{conditions.d.cts → queries/conditions.d.cts} +2 -2
  192. package/build/queries/conditions.d.cts.map +1 -0
  193. package/build/{conditions.d.mts → queries/conditions.d.mts} +2 -2
  194. package/build/queries/conditions.d.mts.map +1 -0
  195. package/build/{conditions.js → queries/conditions.js} +1 -2
  196. package/build/queries/conditions.js.map +1 -0
  197. package/build/queries/entityQueryUtils.cjs +60 -0
  198. package/build/queries/entityQueryUtils.cjs.map +1 -0
  199. package/build/queries/entityQueryUtils.d.cts +19 -0
  200. package/build/queries/entityQueryUtils.d.cts.map +1 -0
  201. package/build/queries/entityQueryUtils.d.mts +19 -0
  202. package/build/queries/entityQueryUtils.d.mts.map +1 -0
  203. package/build/queries/entityQueryUtils.js +56 -0
  204. package/build/queries/entityQueryUtils.js.map +1 -0
  205. package/build/{Aliases.cjs → queries/find/Aliases.cjs} +23 -28
  206. package/build/queries/find/Aliases.cjs.map +1 -0
  207. package/build/{Aliases.d.cts → queries/find/Aliases.d.cts} +7 -7
  208. package/build/queries/find/Aliases.d.cts.map +1 -0
  209. package/build/{Aliases.d.mts → queries/find/Aliases.d.mts} +7 -7
  210. package/build/queries/find/Aliases.d.mts.map +1 -0
  211. package/build/{Aliases.js → queries/find/Aliases.js} +7 -12
  212. package/build/queries/find/Aliases.js.map +1 -0
  213. package/build/{DeferredAlias.cjs → queries/find/DeferredAlias.cjs} +3 -6
  214. package/build/queries/find/DeferredAlias.cjs.map +1 -0
  215. package/build/{DeferredAlias.d.cts → queries/find/DeferredAlias.d.cts} +4 -4
  216. package/build/queries/find/DeferredAlias.d.cts.map +1 -0
  217. package/build/{DeferredAlias.d.mts → queries/find/DeferredAlias.d.mts} +4 -4
  218. package/build/queries/find/DeferredAlias.d.mts.map +1 -0
  219. package/build/{DeferredAlias.js → queries/find/DeferredAlias.js} +2 -5
  220. package/build/queries/find/DeferredAlias.js.map +1 -0
  221. package/build/{EntityFilter.cjs → queries/find/EntityFilter.cjs} +4 -9
  222. package/build/queries/find/EntityFilter.cjs.map +1 -0
  223. package/build/{EntityFilter.d.cts → queries/find/EntityFilter.d.cts} +6 -6
  224. package/build/queries/find/EntityFilter.d.cts.map +1 -0
  225. package/build/{EntityFilter.d.mts → queries/find/EntityFilter.d.mts} +6 -6
  226. package/build/queries/find/EntityFilter.d.mts.map +1 -0
  227. package/build/{EntityFilter.js → queries/find/EntityFilter.js} +1 -6
  228. package/build/queries/find/EntityFilter.js.map +1 -0
  229. package/build/{EntityGraphQLFilter.cjs → queries/find/EntityGraphQLFilter.cjs} +1 -5
  230. package/build/queries/find/EntityGraphQLFilter.cjs.map +1 -0
  231. package/build/{EntityGraphQLFilter.d.cts → queries/find/EntityGraphQLFilter.d.cts} +3 -3
  232. package/build/queries/find/EntityGraphQLFilter.d.cts.map +1 -0
  233. package/build/{EntityGraphQLFilter.d.mts → queries/find/EntityGraphQLFilter.d.mts} +3 -3
  234. package/build/queries/find/EntityGraphQLFilter.d.mts.map +1 -0
  235. package/build/{EntityGraphQLFilter.js → queries/find/EntityGraphQLFilter.js} +1 -5
  236. package/build/queries/find/EntityGraphQLFilter.js.map +1 -0
  237. package/build/{QueryParser.cjs → queries/find/QueryParser.cjs} +68 -356
  238. package/build/queries/find/QueryParser.cjs.map +1 -0
  239. package/build/{QueryParser.collectionJoins.cjs → queries/find/QueryParser.collectionJoins.cjs} +8 -8
  240. package/build/queries/find/QueryParser.collectionJoins.cjs.map +1 -0
  241. package/build/{QueryParser.collectionJoins.d.cts → queries/find/QueryParser.collectionJoins.d.cts} +1 -1
  242. package/build/queries/find/QueryParser.collectionJoins.d.cts.map +1 -0
  243. package/build/{QueryParser.collectionJoins.d.mts → queries/find/QueryParser.collectionJoins.d.mts} +1 -1
  244. package/build/queries/find/QueryParser.collectionJoins.d.mts.map +1 -0
  245. package/build/{QueryParser.collectionJoins.js → queries/find/QueryParser.collectionJoins.js} +2 -2
  246. package/build/queries/find/QueryParser.collectionJoins.js.map +1 -0
  247. package/build/{QueryParser.d.cts → queries/find/QueryParser.d.cts} +5 -159
  248. package/build/queries/find/QueryParser.d.cts.map +1 -0
  249. package/build/{QueryParser.d.mts → queries/find/QueryParser.d.mts} +5 -159
  250. package/build/queries/find/QueryParser.d.mts.map +1 -0
  251. package/build/{QueryParser.js → queries/find/QueryParser.js} +15 -295
  252. package/build/queries/find/QueryParser.js.map +1 -0
  253. package/build/{QueryParser.pruning.cjs → queries/find/QueryParser.pruning.cjs} +6 -20
  254. package/build/queries/find/QueryParser.pruning.cjs.map +1 -0
  255. package/build/queries/find/QueryParser.pruning.d.cts +8 -0
  256. package/build/queries/find/QueryParser.pruning.d.cts.map +1 -0
  257. package/build/queries/find/QueryParser.pruning.d.mts +8 -0
  258. package/build/queries/find/QueryParser.pruning.d.mts.map +1 -0
  259. package/build/{QueryParser.pruning.js → queries/find/QueryParser.pruning.js} +4 -17
  260. package/build/queries/find/QueryParser.pruning.js.map +1 -0
  261. package/build/{QueryVisitor.cjs → queries/find/QueryVisitor.cjs} +2 -3
  262. package/build/queries/find/QueryVisitor.cjs.map +1 -0
  263. package/build/{QueryVisitor.d.cts → queries/find/QueryVisitor.d.cts} +3 -2
  264. package/build/queries/find/QueryVisitor.d.cts.map +1 -0
  265. package/build/{QueryVisitor.d.mts → queries/find/QueryVisitor.d.mts} +3 -2
  266. package/build/queries/find/QueryVisitor.d.mts.map +1 -0
  267. package/build/{QueryVisitor.js → queries/find/QueryVisitor.js} +2 -3
  268. package/build/queries/find/QueryVisitor.js.map +1 -0
  269. package/build/{drivers/buildRawQuery.cjs → queries/find/buildFindQuery.cjs} +14 -15
  270. package/build/queries/find/buildFindQuery.cjs.map +1 -0
  271. package/build/{drivers/buildRawQuery.d.cts → queries/find/buildFindQuery.d.cts} +3 -3
  272. package/build/queries/find/buildFindQuery.d.cts.map +1 -0
  273. package/build/{drivers/buildRawQuery.d.mts → queries/find/buildFindQuery.d.mts} +3 -3
  274. package/build/queries/find/buildFindQuery.d.mts.map +1 -0
  275. package/build/{drivers/buildRawQuery.js → queries/find/buildFindQuery.js} +5 -6
  276. package/build/queries/find/buildFindQuery.js.map +1 -0
  277. package/build/{scopes.cjs → queries/find/scopes.cjs} +2 -3
  278. package/build/queries/find/scopes.cjs.map +1 -0
  279. package/build/{scopes.d.cts → queries/find/scopes.d.cts} +6 -6
  280. package/build/queries/find/scopes.d.cts.map +1 -0
  281. package/build/{scopes.d.mts → queries/find/scopes.d.mts} +6 -6
  282. package/build/queries/find/scopes.d.mts.map +1 -0
  283. package/build/{scopes.js → queries/find/scopes.js} +2 -3
  284. package/build/queries/find/scopes.js.map +1 -0
  285. package/build/queries/parsedConditions.cjs +21 -0
  286. package/build/queries/parsedConditions.cjs.map +1 -0
  287. package/build/queries/parsedConditions.d.cts +127 -0
  288. package/build/queries/parsedConditions.d.cts.map +1 -0
  289. package/build/queries/parsedConditions.d.mts +127 -0
  290. package/build/queries/parsedConditions.d.mts.map +1 -0
  291. package/build/queries/parsedConditions.js +20 -0
  292. package/build/queries/parsedConditions.js.map +1 -0
  293. package/build/{drivers/buildUtils.cjs → queries/renderConditions.cjs} +7 -8
  294. package/build/queries/renderConditions.cjs.map +1 -0
  295. package/build/{drivers/buildUtils.d.mts → queries/renderConditions.d.cts} +5 -4
  296. package/build/queries/renderConditions.d.cts.map +1 -0
  297. package/build/{drivers/buildUtils.d.cts → queries/renderConditions.d.mts} +5 -4
  298. package/build/queries/renderConditions.d.mts.map +1 -0
  299. package/build/{drivers/buildUtils.js → queries/renderConditions.js} +4 -5
  300. package/build/queries/renderConditions.js.map +1 -0
  301. package/build/{skipCondition.cjs → queries/skipCondition.cjs} +1 -2
  302. package/build/queries/skipCondition.cjs.map +1 -0
  303. package/build/{skipCondition.d.cts → queries/skipCondition.d.cts} +2 -2
  304. package/build/{skipCondition.d.cts.map → queries/skipCondition.d.cts.map} +1 -1
  305. package/build/{skipCondition.d.mts → queries/skipCondition.d.mts} +2 -2
  306. package/build/{skipCondition.d.mts.map → queries/skipCondition.d.mts.map} +1 -1
  307. package/build/{skipCondition.js → queries/skipCondition.js} +1 -2
  308. package/build/queries/skipCondition.js.map +1 -0
  309. package/build/{AliasAssigner.cjs → queries/sql/AliasAssigner.cjs} +2 -3
  310. package/build/queries/sql/AliasAssigner.cjs.map +1 -0
  311. package/build/{AliasAssigner.d.cts → queries/sql/AliasAssigner.d.cts} +2 -2
  312. package/build/queries/sql/AliasAssigner.d.cts.map +1 -0
  313. package/build/{AliasAssigner.d.mts → queries/sql/AliasAssigner.d.mts} +2 -2
  314. package/build/queries/sql/AliasAssigner.d.mts.map +1 -0
  315. package/build/{AliasAssigner.js → queries/sql/AliasAssigner.js} +2 -3
  316. package/build/queries/sql/AliasAssigner.js.map +1 -0
  317. package/build/{Expr.cjs → queries/sql/Expr.cjs} +9 -9
  318. package/build/queries/sql/Expr.cjs.map +1 -0
  319. package/build/{Expr.d.cts → queries/sql/Expr.d.cts} +4 -4
  320. package/build/queries/sql/Expr.d.cts.map +1 -0
  321. package/build/{Expr.d.mts → queries/sql/Expr.d.mts} +4 -4
  322. package/build/queries/sql/Expr.d.mts.map +1 -0
  323. package/build/{Expr.js → queries/sql/Expr.js} +4 -4
  324. package/build/queries/sql/Expr.js.map +1 -0
  325. package/build/{Tables.cjs → queries/sql/Tables.cjs} +63 -67
  326. package/build/queries/sql/Tables.cjs.map +1 -0
  327. package/build/{Tables.d.cts → queries/sql/Tables.d.cts} +6 -7
  328. package/build/queries/sql/Tables.d.cts.map +1 -0
  329. package/build/{Tables.d.mts → queries/sql/Tables.d.mts} +6 -7
  330. package/build/queries/sql/Tables.d.mts.map +1 -0
  331. package/build/{Tables.js → queries/sql/Tables.js} +9 -13
  332. package/build/queries/sql/Tables.js.map +1 -0
  333. package/build/{execute.cjs → queries/sql/execute.cjs} +32 -37
  334. package/build/queries/sql/execute.cjs.map +1 -0
  335. package/build/{execute.d.cts → queries/sql/execute.d.cts} +6 -6
  336. package/build/queries/sql/execute.d.cts.map +1 -0
  337. package/build/{execute.d.mts → queries/sql/execute.d.mts} +6 -6
  338. package/build/queries/sql/execute.d.mts.map +1 -0
  339. package/build/{execute.js → queries/sql/execute.js} +5 -10
  340. package/build/queries/sql/execute.js.map +1 -0
  341. package/build/{expressions → queries/sql/expressions}/arrayAgg.cjs +12 -12
  342. package/build/queries/sql/expressions/arrayAgg.cjs.map +1 -0
  343. package/build/{expressions → queries/sql/expressions}/arrayAgg.d.cts +1 -1
  344. package/build/queries/sql/expressions/arrayAgg.d.cts.map +1 -0
  345. package/build/{expressions → queries/sql/expressions}/arrayAgg.d.mts +1 -1
  346. package/build/queries/sql/expressions/arrayAgg.d.mts.map +1 -0
  347. package/build/{expressions → queries/sql/expressions}/arrayAgg.js +1 -1
  348. package/build/queries/sql/expressions/arrayAgg.js.map +1 -0
  349. package/build/{expressions → queries/sql/expressions}/case.cjs +14 -14
  350. package/build/queries/sql/expressions/case.cjs.map +1 -0
  351. package/build/{expressions → queries/sql/expressions}/case.d.cts +1 -1
  352. package/build/queries/sql/expressions/case.d.cts.map +1 -0
  353. package/build/{expressions → queries/sql/expressions}/case.d.mts +1 -1
  354. package/build/queries/sql/expressions/case.d.mts.map +1 -0
  355. package/build/{expressions → queries/sql/expressions}/case.js +1 -1
  356. package/build/queries/sql/expressions/case.js.map +1 -0
  357. package/build/queries/sql/expressions/coalesce.cjs +25 -0
  358. package/build/queries/sql/expressions/coalesce.cjs.map +1 -0
  359. package/build/{expressions → queries/sql/expressions}/coalesce.d.cts +1 -1
  360. package/build/queries/sql/expressions/coalesce.d.cts.map +1 -0
  361. package/build/{expressions → queries/sql/expressions}/coalesce.d.mts +1 -1
  362. package/build/queries/sql/expressions/coalesce.d.mts.map +1 -0
  363. package/build/{expressions → queries/sql/expressions}/coalesce.js +1 -1
  364. package/build/queries/sql/expressions/coalesce.js.map +1 -0
  365. package/build/{expressions → queries/sql/expressions}/codecs.cjs +5 -5
  366. package/build/queries/sql/expressions/codecs.cjs.map +1 -0
  367. package/build/{expressions → queries/sql/expressions}/codecs.d.cts +1 -1
  368. package/build/queries/sql/expressions/codecs.d.cts.map +1 -0
  369. package/build/{expressions → queries/sql/expressions}/codecs.d.mts +1 -1
  370. package/build/queries/sql/expressions/codecs.d.mts.map +1 -0
  371. package/build/{expressions → queries/sql/expressions}/codecs.js +3 -3
  372. package/build/queries/sql/expressions/codecs.js.map +1 -0
  373. package/build/queries/sql/expressions/expression.cjs +102 -0
  374. package/build/queries/sql/expressions/expression.cjs.map +1 -0
  375. package/build/{expressions → queries/sql/expressions}/expression.d.cts +1 -1
  376. package/build/queries/sql/expressions/expression.d.cts.map +1 -0
  377. package/build/{expressions → queries/sql/expressions}/expression.d.mts +1 -1
  378. package/build/queries/sql/expressions/expression.d.mts.map +1 -0
  379. package/build/{expressions → queries/sql/expressions}/expression.js +2 -2
  380. package/build/queries/sql/expressions/expression.js.map +1 -0
  381. package/build/queries/sql/expressions/greatest.cjs +25 -0
  382. package/build/queries/sql/expressions/greatest.cjs.map +1 -0
  383. package/build/{expressions → queries/sql/expressions}/greatest.d.cts +1 -1
  384. package/build/queries/sql/expressions/greatest.d.cts.map +1 -0
  385. package/build/{expressions → queries/sql/expressions}/greatest.d.mts +1 -1
  386. package/build/queries/sql/expressions/greatest.d.mts.map +1 -0
  387. package/build/{expressions → queries/sql/expressions}/greatest.js +1 -1
  388. package/build/queries/sql/expressions/greatest.js.map +1 -0
  389. package/build/queries/sql/expressions/least.cjs +25 -0
  390. package/build/queries/sql/expressions/least.cjs.map +1 -0
  391. package/build/{expressions → queries/sql/expressions}/least.d.cts +1 -1
  392. package/build/queries/sql/expressions/least.d.cts.map +1 -0
  393. package/build/{expressions → queries/sql/expressions}/least.d.mts +1 -1
  394. package/build/queries/sql/expressions/least.d.mts.map +1 -0
  395. package/build/{expressions → queries/sql/expressions}/least.js +1 -1
  396. package/build/queries/sql/expressions/least.js.map +1 -0
  397. package/build/{expressions → queries/sql/expressions}/nullIf.cjs +6 -6
  398. package/build/queries/sql/expressions/nullIf.cjs.map +1 -0
  399. package/build/{expressions → queries/sql/expressions}/nullIf.d.cts +1 -1
  400. package/build/queries/sql/expressions/nullIf.d.cts.map +1 -0
  401. package/build/{expressions → queries/sql/expressions}/nullIf.d.mts +1 -1
  402. package/build/queries/sql/expressions/nullIf.d.mts.map +1 -0
  403. package/build/{expressions → queries/sql/expressions}/nullIf.js +1 -1
  404. package/build/queries/sql/expressions/nullIf.js.map +1 -0
  405. package/build/{expressions → queries/sql/expressions}/parseExpression.cjs +16 -16
  406. package/build/queries/sql/expressions/parseExpression.cjs.map +1 -0
  407. package/build/{expressions → queries/sql/expressions}/parseExpression.d.cts +1 -1
  408. package/build/queries/sql/expressions/parseExpression.d.cts.map +1 -0
  409. package/build/{expressions → queries/sql/expressions}/parseExpression.d.mts +1 -1
  410. package/build/queries/sql/expressions/parseExpression.d.mts.map +1 -0
  411. package/build/{expressions → queries/sql/expressions}/parseExpression.js +2 -2
  412. package/build/queries/sql/expressions/parseExpression.js.map +1 -0
  413. package/build/{expressions → queries/sql/expressions}/types.d.cts +1 -1
  414. package/build/queries/sql/expressions/types.d.cts.map +1 -0
  415. package/build/{expressions → queries/sql/expressions}/types.d.mts +1 -1
  416. package/build/queries/sql/expressions/types.d.mts.map +1 -0
  417. package/build/{keywords.cjs → queries/sql/keywords.cjs} +1 -1
  418. package/build/queries/sql/keywords.cjs.map +1 -0
  419. package/build/{keywords.d.cts → queries/sql/keywords.d.cts} +1 -1
  420. package/build/queries/sql/keywords.d.cts.map +1 -0
  421. package/build/{keywords.d.mts → queries/sql/keywords.d.mts} +1 -1
  422. package/build/queries/sql/keywords.d.mts.map +1 -0
  423. package/build/{keywords.js → queries/sql/keywords.js} +1 -1
  424. package/build/queries/sql/keywords.js.map +1 -0
  425. package/build/{query.cjs → queries/sql/query.cjs} +83 -84
  426. package/build/queries/sql/query.cjs.map +1 -0
  427. package/build/{query.d.cts → queries/sql/query.d.cts} +7 -7
  428. package/build/queries/sql/query.d.cts.map +1 -0
  429. package/build/{query.d.mts → queries/sql/query.d.mts} +7 -7
  430. package/build/queries/sql/query.d.mts.map +1 -0
  431. package/build/{query.js → queries/sql/query.js} +11 -12
  432. package/build/queries/sql/query.js.map +1 -0
  433. package/build/queries/valueFilters.cjs +248 -0
  434. package/build/queries/valueFilters.cjs.map +1 -0
  435. package/build/queries/valueFilters.d.cts +28 -0
  436. package/build/queries/valueFilters.d.cts.map +1 -0
  437. package/build/queries/valueFilters.d.mts +28 -0
  438. package/build/queries/valueFilters.d.mts.map +1 -0
  439. package/build/queries/valueFilters.js +243 -0
  440. package/build/queries/valueFilters.js.map +1 -0
  441. package/build/reactiveHints.cjs +5 -5
  442. package/build/reactiveHints.js +5 -5
  443. package/build/relations/AbstractRelationImpl.cjs +0 -5
  444. package/build/relations/AbstractRelationImpl.cjs.map +1 -1
  445. package/build/relations/AbstractRelationImpl.d.cts +1 -2
  446. package/build/relations/AbstractRelationImpl.d.cts.map +1 -1
  447. package/build/relations/AbstractRelationImpl.d.mts +1 -2
  448. package/build/relations/AbstractRelationImpl.d.mts.map +1 -1
  449. package/build/relations/AbstractRelationImpl.js +1 -5
  450. package/build/relations/AbstractRelationImpl.js.map +1 -1
  451. package/build/relations/AsyncProperty.cjs +1 -1
  452. package/build/relations/AsyncProperty.js +1 -1
  453. package/build/relations/AsyncReactiveField.cjs +3 -3
  454. package/build/relations/AsyncReactiveField.js +3 -3
  455. package/build/relations/Collection.cjs +1 -1
  456. package/build/relations/Collection.js +1 -1
  457. package/build/relations/CustomCollection.cjs +1 -1
  458. package/build/relations/CustomCollection.js +1 -1
  459. package/build/relations/CustomReference.cjs +3 -3
  460. package/build/relations/CustomReference.js +3 -3
  461. package/build/relations/EnumCollection.cjs +2 -2
  462. package/build/relations/EnumCollection.js +2 -2
  463. package/build/relations/LazyField.cjs +6 -7
  464. package/build/relations/LazyField.cjs.map +1 -1
  465. package/build/relations/LazyField.js +5 -6
  466. package/build/relations/LazyField.js.map +1 -1
  467. package/build/relations/ManyToManyCollection.cjs +4 -3
  468. package/build/relations/ManyToManyCollection.cjs.map +1 -1
  469. package/build/relations/ManyToManyCollection.d.cts.map +1 -1
  470. package/build/relations/ManyToManyCollection.d.mts.map +1 -1
  471. package/build/relations/ManyToManyCollection.js +4 -3
  472. package/build/relations/ManyToManyCollection.js.map +1 -1
  473. package/build/relations/ManyToManyLargeCollection.cjs +2 -2
  474. package/build/relations/ManyToManyLargeCollection.js +2 -2
  475. package/build/relations/ManyToOneReference.cjs +7 -6
  476. package/build/relations/ManyToOneReference.cjs.map +1 -1
  477. package/build/relations/ManyToOneReference.d.cts.map +1 -1
  478. package/build/relations/ManyToOneReference.d.mts.map +1 -1
  479. package/build/relations/ManyToOneReference.js +7 -6
  480. package/build/relations/ManyToOneReference.js.map +1 -1
  481. package/build/relations/OneToManyCollection.cjs +6 -5
  482. package/build/relations/OneToManyCollection.cjs.map +1 -1
  483. package/build/relations/OneToManyCollection.d.cts.map +1 -1
  484. package/build/relations/OneToManyCollection.d.mts.map +1 -1
  485. package/build/relations/OneToManyCollection.js +4 -3
  486. package/build/relations/OneToManyCollection.js.map +1 -1
  487. package/build/relations/OneToManyLargeCollection.cjs +3 -3
  488. package/build/relations/OneToManyLargeCollection.js +3 -3
  489. package/build/relations/OneToOneReference.cjs +6 -5
  490. package/build/relations/OneToOneReference.cjs.map +1 -1
  491. package/build/relations/OneToOneReference.d.cts.map +1 -1
  492. package/build/relations/OneToOneReference.d.mts.map +1 -1
  493. package/build/relations/OneToOneReference.js +6 -5
  494. package/build/relations/OneToOneReference.js.map +1 -1
  495. package/build/relations/PolymorphicReference.cjs +7 -6
  496. package/build/relations/PolymorphicReference.cjs.map +1 -1
  497. package/build/relations/PolymorphicReference.d.cts.map +1 -1
  498. package/build/relations/PolymorphicReference.d.mts.map +1 -1
  499. package/build/relations/PolymorphicReference.js +7 -6
  500. package/build/relations/PolymorphicReference.js.map +1 -1
  501. package/build/relations/ReactiveField.cjs +3 -3
  502. package/build/relations/ReactiveField.js +3 -3
  503. package/build/relations/ReactiveGetter.cjs +1 -1
  504. package/build/relations/ReactiveGetter.js +1 -1
  505. package/build/relations/ReactiveManyToMany.cjs +5 -4
  506. package/build/relations/ReactiveManyToMany.cjs.map +1 -1
  507. package/build/relations/ReactiveManyToMany.d.cts.map +1 -1
  508. package/build/relations/ReactiveManyToMany.d.mts.map +1 -1
  509. package/build/relations/ReactiveManyToMany.js +5 -4
  510. package/build/relations/ReactiveManyToMany.js.map +1 -1
  511. package/build/relations/ReactiveManyToManyOtherSide.cjs +3 -3
  512. package/build/relations/ReactiveManyToManyOtherSide.js +3 -3
  513. package/build/relations/ReactiveReference.cjs +8 -7
  514. package/build/relations/ReactiveReference.cjs.map +1 -1
  515. package/build/relations/ReactiveReference.d.cts.map +1 -1
  516. package/build/relations/ReactiveReference.d.mts.map +1 -1
  517. package/build/relations/ReactiveReference.js +8 -7
  518. package/build/relations/ReactiveReference.js.map +1 -1
  519. package/build/relations/RecursiveCollection.cjs +3 -3
  520. package/build/relations/RecursiveCollection.js +3 -3
  521. package/build/relations/Reference.cjs +1 -1
  522. package/build/relations/Reference.js +1 -1
  523. package/build/relations/hasAsyncMethod.cjs +1 -1
  524. package/build/relations/hasAsyncMethod.js +1 -1
  525. package/build/relations/hasManyDerived.cjs +1 -1
  526. package/build/relations/hasManyDerived.js +1 -1
  527. package/build/relations/hasOneDerived.cjs +2 -2
  528. package/build/relations/hasOneDerived.js +2 -2
  529. package/build/relations/hasProperty.cjs +2 -2
  530. package/build/relations/hasProperty.js +2 -2
  531. package/build/relations/index.cjs +13 -13
  532. package/build/relations/index.js +13 -13
  533. package/build/relations/isCascadeDelete.cjs +11 -0
  534. package/build/relations/isCascadeDelete.cjs.map +1 -0
  535. package/build/relations/isCascadeDelete.d.cts +7 -0
  536. package/build/relations/isCascadeDelete.d.cts.map +1 -0
  537. package/build/relations/isCascadeDelete.d.mts +7 -0
  538. package/build/relations/isCascadeDelete.d.mts.map +1 -0
  539. package/build/relations/isCascadeDelete.js +10 -0
  540. package/build/relations/isCascadeDelete.js.map +1 -0
  541. package/build/resurrection.cjs +1 -1
  542. package/build/resurrection.js +1 -1
  543. package/build/rules.cjs +4 -4
  544. package/build/rules.js +4 -4
  545. package/build/serde.cjs +1 -1
  546. package/build/serde.js +1 -1
  547. package/build/unnest.cjs +0 -1
  548. package/build/unnest.cjs.map +1 -1
  549. package/build/unnest.d.cts +1 -1
  550. package/build/unnest.d.mts +1 -1
  551. package/build/unnest.js +0 -1
  552. package/build/unnest.js.map +1 -1
  553. package/build/upsert.cjs +3 -3
  554. package/build/upsert.js +3 -3
  555. package/build/utils.cjs +1 -2
  556. package/build/utils.cjs.map +1 -1
  557. package/build/utils.d.cts +1 -1
  558. package/build/utils.d.mts +1 -1
  559. package/build/utils.js +1 -2
  560. package/build/utils.js.map +1 -1
  561. package/build/withLoaded.cjs +3 -3
  562. package/build/withLoaded.js +3 -3
  563. package/package.json +2 -2
  564. package/build/AliasAssigner.cjs.map +0 -1
  565. package/build/AliasAssigner.d.cts.map +0 -1
  566. package/build/AliasAssigner.d.mts.map +0 -1
  567. package/build/AliasAssigner.js.map +0 -1
  568. package/build/Aliases.cjs.map +0 -1
  569. package/build/Aliases.d.cts.map +0 -1
  570. package/build/Aliases.d.mts.map +0 -1
  571. package/build/Aliases.js.map +0 -1
  572. package/build/ConditionBuilder.cjs.map +0 -1
  573. package/build/ConditionBuilder.d.cts.map +0 -1
  574. package/build/ConditionBuilder.d.mts.map +0 -1
  575. package/build/ConditionBuilder.js.map +0 -1
  576. package/build/DeferredAlias.cjs.map +0 -1
  577. package/build/DeferredAlias.d.cts.map +0 -1
  578. package/build/DeferredAlias.d.mts.map +0 -1
  579. package/build/DeferredAlias.js.map +0 -1
  580. package/build/EntityFilter.cjs.map +0 -1
  581. package/build/EntityFilter.d.cts.map +0 -1
  582. package/build/EntityFilter.d.mts.map +0 -1
  583. package/build/EntityFilter.js.map +0 -1
  584. package/build/EntityGraphQLFilter.cjs.map +0 -1
  585. package/build/EntityGraphQLFilter.d.cts.map +0 -1
  586. package/build/EntityGraphQLFilter.d.mts.map +0 -1
  587. package/build/EntityGraphQLFilter.js.map +0 -1
  588. package/build/Expr.cjs.map +0 -1
  589. package/build/Expr.d.cts.map +0 -1
  590. package/build/Expr.d.mts.map +0 -1
  591. package/build/Expr.js.map +0 -1
  592. package/build/QueryParser.cjs.map +0 -1
  593. package/build/QueryParser.collectionJoins.cjs.map +0 -1
  594. package/build/QueryParser.collectionJoins.d.cts.map +0 -1
  595. package/build/QueryParser.collectionJoins.d.mts.map +0 -1
  596. package/build/QueryParser.collectionJoins.js.map +0 -1
  597. package/build/QueryParser.d.cts.map +0 -1
  598. package/build/QueryParser.d.mts.map +0 -1
  599. package/build/QueryParser.js.map +0 -1
  600. package/build/QueryParser.pruning.cjs.map +0 -1
  601. package/build/QueryParser.pruning.d.cts +0 -10
  602. package/build/QueryParser.pruning.d.cts.map +0 -1
  603. package/build/QueryParser.pruning.d.mts +0 -10
  604. package/build/QueryParser.pruning.d.mts.map +0 -1
  605. package/build/QueryParser.pruning.js.map +0 -1
  606. package/build/QueryVisitor.cjs.map +0 -1
  607. package/build/QueryVisitor.d.cts.map +0 -1
  608. package/build/QueryVisitor.d.mts.map +0 -1
  609. package/build/QueryVisitor.js.map +0 -1
  610. package/build/Tables.cjs.map +0 -1
  611. package/build/Tables.d.cts.map +0 -1
  612. package/build/Tables.d.mts.map +0 -1
  613. package/build/Tables.js.map +0 -1
  614. package/build/conditions.cjs.map +0 -1
  615. package/build/conditions.d.cts.map +0 -1
  616. package/build/conditions.d.mts.map +0 -1
  617. package/build/conditions.js.map +0 -1
  618. package/build/drivers/buildRawQuery.cjs.map +0 -1
  619. package/build/drivers/buildRawQuery.d.cts.map +0 -1
  620. package/build/drivers/buildRawQuery.d.mts.map +0 -1
  621. package/build/drivers/buildRawQuery.js.map +0 -1
  622. package/build/drivers/buildUtils.cjs.map +0 -1
  623. package/build/drivers/buildUtils.d.cts.map +0 -1
  624. package/build/drivers/buildUtils.d.mts.map +0 -1
  625. package/build/drivers/buildUtils.js.map +0 -1
  626. package/build/execute.cjs.map +0 -1
  627. package/build/execute.d.cts.map +0 -1
  628. package/build/execute.d.mts.map +0 -1
  629. package/build/execute.js.map +0 -1
  630. package/build/expressions/arrayAgg.cjs.map +0 -1
  631. package/build/expressions/arrayAgg.d.cts.map +0 -1
  632. package/build/expressions/arrayAgg.d.mts.map +0 -1
  633. package/build/expressions/arrayAgg.js.map +0 -1
  634. package/build/expressions/case.cjs.map +0 -1
  635. package/build/expressions/case.d.cts.map +0 -1
  636. package/build/expressions/case.d.mts.map +0 -1
  637. package/build/expressions/case.js.map +0 -1
  638. package/build/expressions/coalesce.cjs +0 -25
  639. package/build/expressions/coalesce.cjs.map +0 -1
  640. package/build/expressions/coalesce.d.cts.map +0 -1
  641. package/build/expressions/coalesce.d.mts.map +0 -1
  642. package/build/expressions/coalesce.js.map +0 -1
  643. package/build/expressions/codecs.cjs.map +0 -1
  644. package/build/expressions/codecs.d.cts.map +0 -1
  645. package/build/expressions/codecs.d.mts.map +0 -1
  646. package/build/expressions/codecs.js.map +0 -1
  647. package/build/expressions/expression.cjs +0 -102
  648. package/build/expressions/expression.cjs.map +0 -1
  649. package/build/expressions/expression.d.cts.map +0 -1
  650. package/build/expressions/expression.d.mts.map +0 -1
  651. package/build/expressions/expression.js.map +0 -1
  652. package/build/expressions/greatest.cjs +0 -25
  653. package/build/expressions/greatest.cjs.map +0 -1
  654. package/build/expressions/greatest.d.cts.map +0 -1
  655. package/build/expressions/greatest.d.mts.map +0 -1
  656. package/build/expressions/greatest.js.map +0 -1
  657. package/build/expressions/least.cjs +0 -25
  658. package/build/expressions/least.cjs.map +0 -1
  659. package/build/expressions/least.d.cts.map +0 -1
  660. package/build/expressions/least.d.mts.map +0 -1
  661. package/build/expressions/least.js.map +0 -1
  662. package/build/expressions/nullIf.cjs.map +0 -1
  663. package/build/expressions/nullIf.d.cts.map +0 -1
  664. package/build/expressions/nullIf.d.mts.map +0 -1
  665. package/build/expressions/nullIf.js.map +0 -1
  666. package/build/expressions/parseExpression.cjs.map +0 -1
  667. package/build/expressions/parseExpression.d.cts.map +0 -1
  668. package/build/expressions/parseExpression.d.mts.map +0 -1
  669. package/build/expressions/parseExpression.js.map +0 -1
  670. package/build/expressions/types.d.cts.map +0 -1
  671. package/build/expressions/types.d.mts.map +0 -1
  672. package/build/keywords.cjs.map +0 -1
  673. package/build/keywords.d.cts.map +0 -1
  674. package/build/keywords.d.mts.map +0 -1
  675. package/build/keywords.js.map +0 -1
  676. package/build/query.cjs.map +0 -1
  677. package/build/query.d.cts.map +0 -1
  678. package/build/query.d.mts.map +0 -1
  679. package/build/query.js.map +0 -1
  680. package/build/scopes.cjs.map +0 -1
  681. package/build/scopes.d.cts.map +0 -1
  682. package/build/scopes.d.mts.map +0 -1
  683. package/build/scopes.js.map +0 -1
  684. package/build/skipCondition.cjs.map +0 -1
  685. package/build/skipCondition.js.map +0 -1
  686. /package/build/{expressions → queries/sql/expressions}/types.cjs +0 -0
  687. /package/build/{expressions → queries/sql/expressions}/types.js +0 -0
@@ -1,15 +1,16 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_newEntity = require("../newEntity.cjs");
2
+ const require_fields = require("../fields.cjs");
3
3
  const require_relations_AbstractRelationImpl = require("./AbstractRelationImpl.cjs");
4
4
  const require_relations_RelationSymbols = require("./RelationSymbols.cjs");
5
- const require_relations_ReferenceSymbols = require("./ReferenceSymbols.cjs");
5
+ const require_relations_isCascadeDelete = require("./isCascadeDelete.cjs");
6
6
  const require_relations_OneToManyCollection = require("./OneToManyCollection.cjs");
7
- const require_relations_OneToManyLargeCollection = require("./OneToManyLargeCollection.cjs");
7
+ const require_relations_ReferenceSymbols = require("./ReferenceSymbols.cjs");
8
8
  const require_relations_OneToOneReference = require("./OneToOneReference.cjs");
9
+ const require_utils = require("../utils.cjs");
10
+ const require_newEntity = require("../newEntity.cjs");
11
+ const require_relations_OneToManyLargeCollection = require("./OneToManyLargeCollection.cjs");
9
12
  const require_keys = require("../keys.cjs");
10
13
  const require_EntityMetadata = require("../EntityMetadata.cjs");
11
- const require_fields = require("../fields.cjs");
12
- const require_utils = require("../utils.cjs");
13
14
  const require_index = require("../index.cjs");
14
15
  const require_EntityManager = require("../EntityManager.cjs");
15
16
  const require_Entity = require("../Entity.cjs");
@@ -264,7 +265,7 @@ var ManyToOneReferenceImpl = class extends require_relations_AbstractRelationImp
264
265
  return other[this.otherFieldName];
265
266
  }
266
267
  get isCascadeDelete() {
267
- return require_relations_AbstractRelationImpl.isCascadeDelete(this, this.fieldName);
268
+ return require_relations_isCascadeDelete.isCascadeDelete(this, this.fieldName);
268
269
  }
269
270
  /**
270
271
  * Looks for an entity in `EntityManager`, b/c we may have it in memory even if
@@ -1 +1 @@
1
- {"version":3,"file":"ManyToOneReference.cjs","names":["lazyField","getMetadata","AbstractRelationImpl","#field","#state","getInstanceData","isEntity","#loadPromise","sameEntity","#setImpl","toTaggedId","setField","#percolateRemove","#percolateAdd","toIdOf","maybeResolveReferenceToId","deTagId","#hasBeenSet","ensureTagged","OneToManyCollection","OneToManyLargeCollection","OneToOneReferenceImpl","getEmInternalApi","getField","isCascadeDelete","RelationT","RelationU","ReferenceN","BaseEntity","NoIdError","#m2o","#loaded"],"sources":["../../src/relations/ManyToOneReference.ts"],"sourcesContent":["import { type Entity, isEntity } from \"../Entity.ts\";\nimport { type IdOf, type TaggedId, getEmInternalApi, sameEntity } from \"../EntityManager.ts\";\nimport { type EntityMetadata, type ManyToOneField, getMetadata } from \"../EntityMetadata.ts\";\nimport { getField, setField } from \"../fields.ts\";\nimport {\n BaseEntity,\n NoIdError,\n OneToManyLargeCollection,\n OneToOneReferenceImpl,\n type Reference,\n deTagId,\n ensureNotDeleted,\n ensureTagged,\n fail,\n getInstanceData,\n maybeResolveReferenceToId,\n toIdOf,\n toTaggedId,\n} from \"../index.ts\";\nimport { lazyField } from \"../newEntity.ts\";\nimport { maybeAdd, maybeRemove } from \"../utils.ts\";\nimport { AbstractRelationImpl, isCascadeDelete } from \"./AbstractRelationImpl.ts\";\nimport { OneToManyCollection } from \"./OneToManyCollection.ts\";\nimport { ReferenceN } from \"./ReferenceSymbols.ts\";\nimport { RelationT, RelationU } from \"./RelationSymbols.ts\";\n\n/** An alias for creating `ManyToOneReference`s. */\nexport function hasOne<T extends Entity, U extends Entity, N extends never | undefined>(): ManyToOneReference<T, U, N> {\n return lazyField((entity: T, fieldName) => {\n const m2o = getMetadata(entity).allFields[fieldName] as ManyToOneField;\n return new ManyToOneReferenceImpl<T, U, N>(entity, m2o);\n });\n}\n\n/** Type guard utility for determining if an entity field is a ManyToOneReference. */\nexport function isManyToOneReference(maybeReference: any): maybeReference is ManyToOneReference<any, any, any> {\n return maybeReference instanceof ManyToOneReferenceImpl;\n}\n\nexport interface ManyToOneReference<T extends Entity, U extends Entity, N extends never | undefined> extends Reference<\n T,\n U,\n N\n> {\n /** Returns the id of the current assigned entity, or a runtime error if either 1) unset or 2) set to a new entity that doesn't have an `id` yet. */\n id: IdOf<U>;\n\n /** Returns the id of the current assigned entity, undefined if unset, or a runtime error if set to a new entity. */\n idIfSet: IdOf<U> | undefined;\n\n /** Returns the id of the current assigned entity, undefined if unset, or undefined if set to a new entity. */\n idMaybe: IdOf<U> | undefined;\n\n idUntagged: string;\n\n idUntaggedIfSet: string | undefined;\n\n /** Returns `true` if this relation is currently set (i.e. regardless of whether it's loaded, or if it is set but the assigned entity doesn't have an id saved. */\n readonly isSet: boolean;\n}\n\n/**\n * Manages a foreign key from one entity to another, i.e. `Book.author --> Author`.\n *\n * We keep the current `author` / `author_id` value in the `__orm.data` hash, where the\n * current value could be either the (string) author id from the database, or an entity\n * `Author` that the user has set.\n *\n * Note that if our `images.author_id` column is unique, this `ManyToOneReference` will essentially\n * be half of a one-to-one relationship, but we'll keep using this `ManyToOneReference` on the \"many\"\n * side, and the other side, i.e. `Author.image` will use a `OneToOneReference` to point back to us.\n */\nexport class ManyToOneReferenceImpl<T extends Entity, U extends Entity, N extends never | undefined>\n extends AbstractRelationImpl<T, U>\n implements ManyToOneReference<T, U, N>\n{\n readonly #field: ManyToOneField;\n #state: M2OState<U, N>;\n #loadPromise: Promise<void> | undefined;\n #hasBeenSet = false;\n\n constructor(entity: T, field: ManyToOneField) {\n super(entity);\n this.#field = field;\n this.#state = getInstanceData(entity).isOrWasNew\n ? new M2OLoadedState<U, N>(this, undefined)\n : new M2OUnloadedState<U, N>(this);\n }\n\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<U | N> {\n ensureNotDeleted(this.entity, \"pending\");\n this.#state = this.#state.maybeInstantLoad();\n if (!this.#state.isLoaded || opts.forceReload) {\n const current = this.current();\n if (isEntity(current) || current === undefined) {\n this.#state = new M2OLoadedState<U, N>(this, current as U | N | undefined);\n } else {\n await (this.#loadPromise ??= this.entity.em.load(this.otherMeta.cstr, current).then((entity) => {\n this.#loadPromise = undefined;\n // In extremely rare cases, someone might have called `set` while this promise was in-flight,\n // so make sure our current value is still the same as the fetched entity.\n if (sameEntity(entity, this.current())) {\n this.#state = this.#state.applyLoad(entity);\n }\n }));\n }\n }\n return this.filterDeleted(this.#state.doGet() as U | N, opts);\n }\n\n set(other: U | N): void {\n this.#setImpl(other);\n }\n\n get isSet(): boolean {\n return this.current() !== undefined;\n }\n\n get isLoaded(): boolean {\n // Even if `.load()` has not been called, `.get` will detect\n this.#state = this.#state.maybeInstantLoad();\n return this.#state.isLoaded;\n }\n\n get isPreloaded(): boolean {\n return !!this.maybeFindEntity();\n }\n\n preload(): void {\n this.#state = new M2OLoadedState<U, N>(this, this.maybeFindEntity());\n }\n\n private unload(): void {\n this.#state = new M2OUnloadedState<U, N>(this);\n this.#loadPromise = undefined;\n }\n\n /** Copy another em's `source` relation into our state. */\n import(source: ManyToOneReferenceImpl<T, U, N>, findEntity: (e: U) => U): void {\n this.#state = source.#state.import(this, findEntity);\n }\n\n private doGet(opts?: { withDeleted?: boolean }): U | N {\n ensureNotDeleted(this.entity, \"pending\");\n this.#state = this.#state.maybeInstantLoad();\n return this.filterDeleted(this.#state.doGet() as U | N, opts);\n }\n\n get getWithDeleted(): U | N {\n return this.doGet({ withDeleted: true });\n }\n\n get get(): U | N {\n return this.doGet({ withDeleted: false });\n }\n\n /** Returns the id of the current value. */\n get id(): IdOf<U> {\n return this.idMaybe || failNoId(this.entity, this.fieldName, this.current());\n }\n\n /** Sets the m2o to `id`, and allows accepting `undefined` (`N`) if this is a nullable relation. */\n set id(id: IdOf<U> | N) {\n ensureNotDeleted(this.entity, \"pending\");\n const newId = toTaggedId(this.otherMeta, id);\n\n const previousId = this.idTaggedMaybe;\n const previous = this.maybeFindEntity();\n const changed = setField(this.entity, this.fieldName, id);\n if (!changed) {\n return;\n }\n\n const loaded = newId ? (this.entity.em.getEntity(newId) as U) : undefined;\n this.#state = loaded ? new M2OLoadedState<U, N>(this, loaded) : new M2OUnloadedState<U, N>(this);\n this.#loadPromise = undefined;\n this.#percolateRemove(previousId, previous);\n this.#percolateAdd();\n }\n\n get idIfSet(): IdOf<U> | N | undefined {\n return this.idMaybe || failIfNewEntity(this.entity, this.fieldName, this.current());\n }\n\n get idUntagged(): string {\n return this.idUntaggedMaybe || failNoId(this.entity, this.fieldName, this.current());\n }\n\n get idUntaggedIfSet(): string | undefined {\n return this.idUntaggedMaybe || failIfNewEntity(this.entity, this.fieldName, this.current());\n }\n\n get idMaybe(): IdOf<U> | N | undefined {\n ensureNotDeleted(this.entity, \"pending\");\n return toIdOf(this.otherMeta, this.idTaggedMaybe);\n }\n\n /** Returns the tagged id of the current value, or undefined if unset or a new entity. */\n get idTaggedMaybe(): TaggedId | undefined {\n // Skip the deleted check so that `isPreloaded` doesn't blow up during em.refreshes/populates\n // ensureNotDeleted(this.entity, \"pending\");\n return maybeResolveReferenceToId(this.current());\n }\n\n get fieldName(): string {\n return this.#field.fieldName;\n }\n\n get otherFieldName(): keyof U & string {\n return this.#field.otherFieldName as keyof U & string;\n }\n\n private get idUntaggedMaybe(): string | undefined {\n return deTagId(this.otherMeta, this.idMaybe);\n }\n\n #setImpl(_other: U | IdOf<U> | N): void {\n ensureNotDeleted(this.entity, \"pending\");\n this.#hasBeenSet = true;\n\n // If the project is not using tagged ids, we still want it tagged internally\n const other = ensureTagged(this.otherMeta, _other);\n if (sameEntity(other, this.current({ withDeleted: true }))) {\n return;\n }\n\n const previousId = this.idTaggedMaybe;\n const previous = this.maybeFindEntity();\n // Prefer to keep the id in our data hash, but if this is a new entity w/o an id, use the entity itself\n setField(this.entity, this.fieldName, isEntity(other) ? (other?.idTaggedMaybe ?? other) : other);\n\n // Setting to an entity | undefined => loaded, setting to an id might reverse to unloaded\n const maybeEntity = isEntity(other) ? (other as U) : other ? this.entity.em.getEntity(other) : undefined;\n if (maybeEntity || other === undefined) {\n this.#state = new M2OLoadedState<U, N>(this, (maybeEntity ?? other) as U | N);\n } else {\n this.#state = new M2OUnloadedState<U, N>(this);\n }\n this.#loadPromise = undefined;\n this.#percolateRemove(previousId, previous);\n this.#percolateAdd();\n }\n\n // private impl\n\n setFromOpts(other: U | IdOf<U> | N): void {\n this.#setImpl(other);\n }\n\n maybeCascadeDelete(): void {\n if (this.isCascadeDelete) {\n const current = this.current({ withDeleted: true });\n if (current !== undefined) {\n if (typeof current === \"string\") {\n // We're invoked twice, once sync on em.delete, and again in em.flush when we're loaded;\n // but even when loaded, current might still be the tagged id, but we can find the entity in the EM\n const other = this.entity.em.getEntity(current);\n if (other) this.entity.em.delete(other as U);\n } else {\n this.entity.em.delete(current as U);\n }\n }\n }\n }\n\n async cleanupOnEntityDeleted(): Promise<void> {\n // if we are going to delete this relation as well, then we don't need to clean it up\n if (this.isCascadeDelete) return;\n const current = await this.load({ withDeleted: true });\n if (current !== undefined) {\n const o2m = this.getOtherRelation(current);\n if (o2m instanceof OneToManyCollection) {\n o2m.remove(this.entity, { requireLoaded: false });\n } else if (o2m instanceof OneToManyLargeCollection) {\n o2m.remove(this.entity);\n } else if (o2m instanceof OneToOneReferenceImpl) {\n o2m.set(undefined as any);\n } else {\n throw new Error(`Unhandled ${o2m}`);\n }\n }\n setField(this.entity, this.fieldName, undefined);\n this.#state = new M2OLoadedState<U, N>(this, undefined as any);\n }\n\n // Called on `book.author.set(...)` with our previous value, to percolate a `author.books.remove`. */\n #percolateRemove(prevId: string | undefined, prevEntity: U | undefined) {\n if (prevEntity) {\n const prevRelation = this.getOtherRelation(prevEntity);\n if (prevRelation instanceof OneToManyCollection) {\n prevRelation.removeIfLoaded(this.entity);\n } else if (prevRelation instanceof OneToManyLargeCollection) {\n prevRelation.remove(this.entity);\n } else {\n prevRelation.set(undefined as any, { percolating: true });\n }\n } else if (prevId) {\n // prevEntity is not loaded in memory, but cache it in case our other side is later loaded\n const { em } = this.entity;\n let map = getEmInternalApi(em).pendingPercolate.get(prevId);\n if (!map) {\n map = new Map();\n getEmInternalApi(em).pendingPercolate.set(prevId, map);\n }\n let pending = map.get(this.otherFieldName);\n if (!pending) {\n pending = { adds: [], removes: [] };\n map.set(this.otherFieldName, pending);\n }\n maybeAdd(pending.removes, this.entity);\n maybeRemove(pending.adds, this.entity);\n }\n }\n\n #percolateAdd() {\n const id = this.current();\n const other = this.maybeFindEntity();\n if (other) {\n // Other is already loaded in memory, immediately hook it up\n const newRelation = this.getOtherRelation(other);\n if (newRelation instanceof OneToManyCollection) {\n newRelation.add(this.entity);\n } else if (newRelation instanceof OneToManyLargeCollection) {\n newRelation.add(this.entity);\n } else if (newRelation) {\n newRelation.set(this.entity, { percolating: true });\n } else {\n // Something is wrong, we should always have a relation, but instead\n // of blowing up here, let this finish b/c it will probably turn into\n // a validation error.\n }\n } else if (typeof id === \"string\") {\n // Other is not loaded in memory, but cache it in case our other side is later loaded\n const { em } = this.entity;\n let map = getEmInternalApi(em).pendingPercolate.get(id);\n if (!map) {\n map = new Map();\n getEmInternalApi(em).pendingPercolate.set(id, map);\n }\n let pending = map.get(this.otherFieldName);\n if (!pending) {\n pending = { adds: [], removes: [] };\n map.set(this.otherFieldName, pending);\n }\n maybeAdd(pending.adds, this.entity);\n maybeRemove(pending.removes, this.entity);\n }\n }\n\n // We need to keep U in data[fieldName] to handle entities without an id assigned yet.\n current(opts?: { withDeleted?: boolean }): U | TaggedId | N {\n const current = getField(this.entity, this.fieldName);\n if (current !== undefined && isEntity(current)) {\n return this.filterDeleted(current as U, opts);\n }\n return current;\n }\n\n get otherMeta(): EntityMetadata<U> {\n return this.#field.otherMetadata();\n }\n\n get hasBeenSet(): boolean {\n return this.#hasBeenSet;\n }\n\n public toString(): string {\n return `ManyToOneReference(entity: ${this.entity}, fieldName: ${this.fieldName}, otherType: ${this.otherMeta.type}, otherFieldName: ${this.otherFieldName}, id: ${this.idMaybe})`;\n }\n\n /**\n * Removes pending-hard-delete (but not soft-deleted), unless explicitly asked for.\n *\n * Note that we leave soft-deleted entities b/c the call signature of a `book.author.get`\n * very likely does not expect a soft-deleted entity to result in `undefined`.\n *\n * (Contrasted with `author.books.get` which is more intuitive to have soft-deleted\n * entities filtered out, i.e. it doesn't fundamentally change the return type.)\n */\n private filterDeleted(entity: U | N, opts?: { withDeleted?: boolean }): U | N {\n if (entity && (!opts || !opts.withDeleted) && entity.isDeletedEntity) {\n return undefined!;\n }\n return entity;\n }\n\n /** Returns the other relation that points back at us, i.e. we're `book.author_id` and this is `Author.books`. */\n private getOtherRelation(\n other: U,\n ): OneToManyCollection<U, T> | OneToOneReferenceImpl<U, T> | OneToManyLargeCollection<U, T> {\n return (other as U)[this.otherFieldName] as any;\n }\n\n private get isCascadeDelete(): boolean {\n return isCascadeDelete(this, this.fieldName);\n }\n\n /**\n * Looks for an entity in `EntityManager`, b/c we may have it in memory even if\n * our reference is not specifically loaded.\n */\n maybeFindEntity(): U | undefined {\n // Check current() first b/c a new entity won't have an id yet\n const current = this.current();\n if (isEntity(current)) return current as U;\n const { idTaggedMaybe } = this;\n return idTaggedMaybe !== undefined ? (this.entity.em.getEntity(idTaggedMaybe) as U) : undefined;\n }\n\n [RelationT]: T = null!;\n [RelationU]: U = null!;\n [ReferenceN]: N = null!;\n}\n\n/**\n * Fails when we can't return an `.id` for a reference, i.e. it's unset or a new entity.\n *\n * We strictly type `book.author.id` as `AuthorId`, even if `book.author` is nullable, to\n * avoid users calling `.id` and getting back `undefined`, but not because \"there is no\n * author\", but only because \"the assigned author doesn't have an id assigned yet\".\n *\n * To handle nullable references, set `.idIfSet`.\n *\n * Assumes being called like `return idMaybe ?? failNoId()`, i.e. if we're called we\n * know the id is not available.\n */\nexport function failNoId(entity: Entity, fieldName: string, current: string | Entity | undefined): never {\n if (!current) fail(`Reference ${entity}.${fieldName} is unset`);\n // Throw NoIdError, which lets ReactionsManager will handle reactive fields gracefully\n if (current instanceof BaseEntity)\n throw new NoIdError(`Reference ${entity}.${fieldName} is assigned to a new entity`);\n fail(`Unreachable`);\n}\n\n/**\n * Fails when we can't return an `.idIfSet` for a reference, i.e. it's a new entity.\n *\n * Assumes being called like `return idMaybe ?? failIfNewEntity()`, i.e. if we're called we\n * know the id is not available.\n */\nexport function failIfNewEntity(entity: Entity, fieldName: string, current: string | Entity | undefined): undefined {\n if (current instanceof BaseEntity) {\n throw new NoIdError(`Reference ${entity}.${fieldName} is assigned to a new entity`);\n }\n // Since this is a `.idIfSet`, having no `current` is fine, return undefined.\n return undefined;\n}\n\ninterface M2OState<U extends Entity, N extends never | undefined> {\n readonly isLoaded: boolean;\n maybeInstantLoad(): M2OState<U, N>;\n applyLoad(loaded: U | N | undefined): M2OLoadedState<U, N>;\n import(target: ManyToOneReferenceImpl<any, any, any>, findEntity: (e: U) => U): M2OState<U, N>;\n doGet(): U | N | undefined;\n}\n\nclass M2OUnloadedState<U extends Entity, N extends never | undefined> implements M2OState<U, N> {\n readonly isLoaded = false;\n #m2o: ManyToOneReferenceImpl<any, any, any>;\n constructor(m2o: ManyToOneReferenceImpl<any, any, any>) {\n this.#m2o = m2o;\n }\n applyLoad(loaded: U | N | undefined): M2OLoadedState<U, N> {\n return new M2OLoadedState<U, N>(this.#m2o, loaded);\n }\n import(target: ManyToOneReferenceImpl<any, any, any>): M2OState<U, N> {\n return new M2OUnloadedState<U, N>(target);\n }\n maybeInstantLoad(): M2OState<U, N> {\n const current = this.#m2o.current();\n if (current === undefined || isEntity(current)) {\n return new M2OLoadedState<U, N>(this.#m2o, current as U | undefined);\n } else {\n const maybeFound = this.#m2o.entity.em.getEntity(current);\n if (maybeFound) {\n return new M2OLoadedState<U, N>(this.#m2o, maybeFound as U);\n }\n }\n return this;\n }\n doGet(): U | N | undefined {\n throw new Error(`${this.#m2o.entity}.${this.#m2o.fieldName} was not loaded`);\n }\n}\n\n/** The when loaded, with either the loaded entity or undefined. */\nclass M2OLoadedState<U extends Entity, N extends never | undefined> implements M2OState<U, N> {\n readonly isLoaded = true;\n #m2o: ManyToOneReferenceImpl<any, any, any>;\n #loaded: U | N | undefined;\n constructor(m2o: ManyToOneReferenceImpl<any, any, any>, loaded: U | N | undefined) {\n this.#loaded = loaded;\n this.#m2o = m2o;\n }\n applyLoad(loaded: U | N | undefined): M2OLoadedState<U, N> {\n return new M2OLoadedState<U, N>(this.#m2o, loaded);\n }\n import(target: ManyToOneReferenceImpl<any, any, any>, findEntity: (e: U) => U): M2OState<U, N> {\n return new M2OLoadedState<U, N>(target, isEntity(this.#loaded) ? findEntity(this.#loaded) : undefined);\n }\n maybeInstantLoad(): M2OState<U, N> {\n return this;\n }\n doGet(): U | N | undefined {\n return this.#loaded;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ManyToOneReference.cjs","names":["lazyField","getMetadata","AbstractRelationImpl","#field","#state","getInstanceData","isEntity","#loadPromise","sameEntity","#setImpl","toTaggedId","setField","#percolateRemove","#percolateAdd","toIdOf","maybeResolveReferenceToId","deTagId","#hasBeenSet","ensureTagged","OneToManyCollection","OneToManyLargeCollection","OneToOneReferenceImpl","getEmInternalApi","getField","isCascadeDelete","RelationT","RelationU","ReferenceN","BaseEntity","NoIdError","#m2o","#loaded"],"sources":["../../src/relations/ManyToOneReference.ts"],"sourcesContent":["import { type Entity, isEntity } from \"../Entity.ts\";\nimport { type IdOf, type TaggedId, getEmInternalApi, sameEntity } from \"../EntityManager.ts\";\nimport { type EntityMetadata, type ManyToOneField, getMetadata } from \"../EntityMetadata.ts\";\nimport { getField, setField } from \"../fields.ts\";\nimport {\n BaseEntity,\n NoIdError,\n OneToManyLargeCollection,\n OneToOneReferenceImpl,\n type Reference,\n deTagId,\n ensureNotDeleted,\n ensureTagged,\n fail,\n getInstanceData,\n maybeResolveReferenceToId,\n toIdOf,\n toTaggedId,\n} from \"../index.ts\";\nimport { lazyField } from \"../newEntity.ts\";\nimport { maybeAdd, maybeRemove } from \"../utils.ts\";\nimport { AbstractRelationImpl } from \"./AbstractRelationImpl.ts\";\nimport { isCascadeDelete } from \"./isCascadeDelete.ts\";\nimport { OneToManyCollection } from \"./OneToManyCollection.ts\";\nimport { ReferenceN } from \"./ReferenceSymbols.ts\";\nimport { RelationT, RelationU } from \"./RelationSymbols.ts\";\n\n/** An alias for creating `ManyToOneReference`s. */\nexport function hasOne<T extends Entity, U extends Entity, N extends never | undefined>(): ManyToOneReference<T, U, N> {\n return lazyField((entity: T, fieldName) => {\n const m2o = getMetadata(entity).allFields[fieldName] as ManyToOneField;\n return new ManyToOneReferenceImpl<T, U, N>(entity, m2o);\n });\n}\n\n/** Type guard utility for determining if an entity field is a ManyToOneReference. */\nexport function isManyToOneReference(maybeReference: any): maybeReference is ManyToOneReference<any, any, any> {\n return maybeReference instanceof ManyToOneReferenceImpl;\n}\n\nexport interface ManyToOneReference<T extends Entity, U extends Entity, N extends never | undefined> extends Reference<\n T,\n U,\n N\n> {\n /** Returns the id of the current assigned entity, or a runtime error if either 1) unset or 2) set to a new entity that doesn't have an `id` yet. */\n id: IdOf<U>;\n\n /** Returns the id of the current assigned entity, undefined if unset, or a runtime error if set to a new entity. */\n idIfSet: IdOf<U> | undefined;\n\n /** Returns the id of the current assigned entity, undefined if unset, or undefined if set to a new entity. */\n idMaybe: IdOf<U> | undefined;\n\n idUntagged: string;\n\n idUntaggedIfSet: string | undefined;\n\n /** Returns `true` if this relation is currently set (i.e. regardless of whether it's loaded, or if it is set but the assigned entity doesn't have an id saved. */\n readonly isSet: boolean;\n}\n\n/**\n * Manages a foreign key from one entity to another, i.e. `Book.author --> Author`.\n *\n * We keep the current `author` / `author_id` value in the `__orm.data` hash, where the\n * current value could be either the (string) author id from the database, or an entity\n * `Author` that the user has set.\n *\n * Note that if our `images.author_id` column is unique, this `ManyToOneReference` will essentially\n * be half of a one-to-one relationship, but we'll keep using this `ManyToOneReference` on the \"many\"\n * side, and the other side, i.e. `Author.image` will use a `OneToOneReference` to point back to us.\n */\nexport class ManyToOneReferenceImpl<T extends Entity, U extends Entity, N extends never | undefined>\n extends AbstractRelationImpl<T, U>\n implements ManyToOneReference<T, U, N>\n{\n readonly #field: ManyToOneField;\n #state: M2OState<U, N>;\n #loadPromise: Promise<void> | undefined;\n #hasBeenSet = false;\n\n constructor(entity: T, field: ManyToOneField) {\n super(entity);\n this.#field = field;\n this.#state = getInstanceData(entity).isOrWasNew\n ? new M2OLoadedState<U, N>(this, undefined)\n : new M2OUnloadedState<U, N>(this);\n }\n\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<U | N> {\n ensureNotDeleted(this.entity, \"pending\");\n this.#state = this.#state.maybeInstantLoad();\n if (!this.#state.isLoaded || opts.forceReload) {\n const current = this.current();\n if (isEntity(current) || current === undefined) {\n this.#state = new M2OLoadedState<U, N>(this, current as U | N | undefined);\n } else {\n await (this.#loadPromise ??= this.entity.em.load(this.otherMeta.cstr, current).then((entity) => {\n this.#loadPromise = undefined;\n // In extremely rare cases, someone might have called `set` while this promise was in-flight,\n // so make sure our current value is still the same as the fetched entity.\n if (sameEntity(entity, this.current())) {\n this.#state = this.#state.applyLoad(entity);\n }\n }));\n }\n }\n return this.filterDeleted(this.#state.doGet() as U | N, opts);\n }\n\n set(other: U | N): void {\n this.#setImpl(other);\n }\n\n get isSet(): boolean {\n return this.current() !== undefined;\n }\n\n get isLoaded(): boolean {\n // Even if `.load()` has not been called, `.get` will detect\n this.#state = this.#state.maybeInstantLoad();\n return this.#state.isLoaded;\n }\n\n get isPreloaded(): boolean {\n return !!this.maybeFindEntity();\n }\n\n preload(): void {\n this.#state = new M2OLoadedState<U, N>(this, this.maybeFindEntity());\n }\n\n private unload(): void {\n this.#state = new M2OUnloadedState<U, N>(this);\n this.#loadPromise = undefined;\n }\n\n /** Copy another em's `source` relation into our state. */\n import(source: ManyToOneReferenceImpl<T, U, N>, findEntity: (e: U) => U): void {\n this.#state = source.#state.import(this, findEntity);\n }\n\n private doGet(opts?: { withDeleted?: boolean }): U | N {\n ensureNotDeleted(this.entity, \"pending\");\n this.#state = this.#state.maybeInstantLoad();\n return this.filterDeleted(this.#state.doGet() as U | N, opts);\n }\n\n get getWithDeleted(): U | N {\n return this.doGet({ withDeleted: true });\n }\n\n get get(): U | N {\n return this.doGet({ withDeleted: false });\n }\n\n /** Returns the id of the current value. */\n get id(): IdOf<U> {\n return this.idMaybe || failNoId(this.entity, this.fieldName, this.current());\n }\n\n /** Sets the m2o to `id`, and allows accepting `undefined` (`N`) if this is a nullable relation. */\n set id(id: IdOf<U> | N) {\n ensureNotDeleted(this.entity, \"pending\");\n const newId = toTaggedId(this.otherMeta, id);\n\n const previousId = this.idTaggedMaybe;\n const previous = this.maybeFindEntity();\n const changed = setField(this.entity, this.fieldName, id);\n if (!changed) {\n return;\n }\n\n const loaded = newId ? (this.entity.em.getEntity(newId) as U) : undefined;\n this.#state = loaded ? new M2OLoadedState<U, N>(this, loaded) : new M2OUnloadedState<U, N>(this);\n this.#loadPromise = undefined;\n this.#percolateRemove(previousId, previous);\n this.#percolateAdd();\n }\n\n get idIfSet(): IdOf<U> | N | undefined {\n return this.idMaybe || failIfNewEntity(this.entity, this.fieldName, this.current());\n }\n\n get idUntagged(): string {\n return this.idUntaggedMaybe || failNoId(this.entity, this.fieldName, this.current());\n }\n\n get idUntaggedIfSet(): string | undefined {\n return this.idUntaggedMaybe || failIfNewEntity(this.entity, this.fieldName, this.current());\n }\n\n get idMaybe(): IdOf<U> | N | undefined {\n ensureNotDeleted(this.entity, \"pending\");\n return toIdOf(this.otherMeta, this.idTaggedMaybe);\n }\n\n /** Returns the tagged id of the current value, or undefined if unset or a new entity. */\n get idTaggedMaybe(): TaggedId | undefined {\n // Skip the deleted check so that `isPreloaded` doesn't blow up during em.refreshes/populates\n // ensureNotDeleted(this.entity, \"pending\");\n return maybeResolveReferenceToId(this.current());\n }\n\n get fieldName(): string {\n return this.#field.fieldName;\n }\n\n get otherFieldName(): keyof U & string {\n return this.#field.otherFieldName as keyof U & string;\n }\n\n private get idUntaggedMaybe(): string | undefined {\n return deTagId(this.otherMeta, this.idMaybe);\n }\n\n #setImpl(_other: U | IdOf<U> | N): void {\n ensureNotDeleted(this.entity, \"pending\");\n this.#hasBeenSet = true;\n\n // If the project is not using tagged ids, we still want it tagged internally\n const other = ensureTagged(this.otherMeta, _other);\n if (sameEntity(other, this.current({ withDeleted: true }))) {\n return;\n }\n\n const previousId = this.idTaggedMaybe;\n const previous = this.maybeFindEntity();\n // Prefer to keep the id in our data hash, but if this is a new entity w/o an id, use the entity itself\n setField(this.entity, this.fieldName, isEntity(other) ? (other?.idTaggedMaybe ?? other) : other);\n\n // Setting to an entity | undefined => loaded, setting to an id might reverse to unloaded\n const maybeEntity = isEntity(other) ? (other as U) : other ? this.entity.em.getEntity(other) : undefined;\n if (maybeEntity || other === undefined) {\n this.#state = new M2OLoadedState<U, N>(this, (maybeEntity ?? other) as U | N);\n } else {\n this.#state = new M2OUnloadedState<U, N>(this);\n }\n this.#loadPromise = undefined;\n this.#percolateRemove(previousId, previous);\n this.#percolateAdd();\n }\n\n // private impl\n\n setFromOpts(other: U | IdOf<U> | N): void {\n this.#setImpl(other);\n }\n\n maybeCascadeDelete(): void {\n if (this.isCascadeDelete) {\n const current = this.current({ withDeleted: true });\n if (current !== undefined) {\n if (typeof current === \"string\") {\n // We're invoked twice, once sync on em.delete, and again in em.flush when we're loaded;\n // but even when loaded, current might still be the tagged id, but we can find the entity in the EM\n const other = this.entity.em.getEntity(current);\n if (other) this.entity.em.delete(other as U);\n } else {\n this.entity.em.delete(current as U);\n }\n }\n }\n }\n\n async cleanupOnEntityDeleted(): Promise<void> {\n // if we are going to delete this relation as well, then we don't need to clean it up\n if (this.isCascadeDelete) return;\n const current = await this.load({ withDeleted: true });\n if (current !== undefined) {\n const o2m = this.getOtherRelation(current);\n if (o2m instanceof OneToManyCollection) {\n o2m.remove(this.entity, { requireLoaded: false });\n } else if (o2m instanceof OneToManyLargeCollection) {\n o2m.remove(this.entity);\n } else if (o2m instanceof OneToOneReferenceImpl) {\n o2m.set(undefined as any);\n } else {\n throw new Error(`Unhandled ${o2m}`);\n }\n }\n setField(this.entity, this.fieldName, undefined);\n this.#state = new M2OLoadedState<U, N>(this, undefined as any);\n }\n\n // Called on `book.author.set(...)` with our previous value, to percolate a `author.books.remove`. */\n #percolateRemove(prevId: string | undefined, prevEntity: U | undefined) {\n if (prevEntity) {\n const prevRelation = this.getOtherRelation(prevEntity);\n if (prevRelation instanceof OneToManyCollection) {\n prevRelation.removeIfLoaded(this.entity);\n } else if (prevRelation instanceof OneToManyLargeCollection) {\n prevRelation.remove(this.entity);\n } else {\n prevRelation.set(undefined as any, { percolating: true });\n }\n } else if (prevId) {\n // prevEntity is not loaded in memory, but cache it in case our other side is later loaded\n const { em } = this.entity;\n let map = getEmInternalApi(em).pendingPercolate.get(prevId);\n if (!map) {\n map = new Map();\n getEmInternalApi(em).pendingPercolate.set(prevId, map);\n }\n let pending = map.get(this.otherFieldName);\n if (!pending) {\n pending = { adds: [], removes: [] };\n map.set(this.otherFieldName, pending);\n }\n maybeAdd(pending.removes, this.entity);\n maybeRemove(pending.adds, this.entity);\n }\n }\n\n #percolateAdd() {\n const id = this.current();\n const other = this.maybeFindEntity();\n if (other) {\n // Other is already loaded in memory, immediately hook it up\n const newRelation = this.getOtherRelation(other);\n if (newRelation instanceof OneToManyCollection) {\n newRelation.add(this.entity);\n } else if (newRelation instanceof OneToManyLargeCollection) {\n newRelation.add(this.entity);\n } else if (newRelation) {\n newRelation.set(this.entity, { percolating: true });\n } else {\n // Something is wrong, we should always have a relation, but instead\n // of blowing up here, let this finish b/c it will probably turn into\n // a validation error.\n }\n } else if (typeof id === \"string\") {\n // Other is not loaded in memory, but cache it in case our other side is later loaded\n const { em } = this.entity;\n let map = getEmInternalApi(em).pendingPercolate.get(id);\n if (!map) {\n map = new Map();\n getEmInternalApi(em).pendingPercolate.set(id, map);\n }\n let pending = map.get(this.otherFieldName);\n if (!pending) {\n pending = { adds: [], removes: [] };\n map.set(this.otherFieldName, pending);\n }\n maybeAdd(pending.adds, this.entity);\n maybeRemove(pending.removes, this.entity);\n }\n }\n\n // We need to keep U in data[fieldName] to handle entities without an id assigned yet.\n current(opts?: { withDeleted?: boolean }): U | TaggedId | N {\n const current = getField(this.entity, this.fieldName);\n if (current !== undefined && isEntity(current)) {\n return this.filterDeleted(current as U, opts);\n }\n return current;\n }\n\n get otherMeta(): EntityMetadata<U> {\n return this.#field.otherMetadata();\n }\n\n get hasBeenSet(): boolean {\n return this.#hasBeenSet;\n }\n\n public toString(): string {\n return `ManyToOneReference(entity: ${this.entity}, fieldName: ${this.fieldName}, otherType: ${this.otherMeta.type}, otherFieldName: ${this.otherFieldName}, id: ${this.idMaybe})`;\n }\n\n /**\n * Removes pending-hard-delete (but not soft-deleted), unless explicitly asked for.\n *\n * Note that we leave soft-deleted entities b/c the call signature of a `book.author.get`\n * very likely does not expect a soft-deleted entity to result in `undefined`.\n *\n * (Contrasted with `author.books.get` which is more intuitive to have soft-deleted\n * entities filtered out, i.e. it doesn't fundamentally change the return type.)\n */\n private filterDeleted(entity: U | N, opts?: { withDeleted?: boolean }): U | N {\n if (entity && (!opts || !opts.withDeleted) && entity.isDeletedEntity) {\n return undefined!;\n }\n return entity;\n }\n\n /** Returns the other relation that points back at us, i.e. we're `book.author_id` and this is `Author.books`. */\n private getOtherRelation(\n other: U,\n ): OneToManyCollection<U, T> | OneToOneReferenceImpl<U, T> | OneToManyLargeCollection<U, T> {\n return (other as U)[this.otherFieldName] as any;\n }\n\n private get isCascadeDelete(): boolean {\n return isCascadeDelete(this, this.fieldName);\n }\n\n /**\n * Looks for an entity in `EntityManager`, b/c we may have it in memory even if\n * our reference is not specifically loaded.\n */\n maybeFindEntity(): U | undefined {\n // Check current() first b/c a new entity won't have an id yet\n const current = this.current();\n if (isEntity(current)) return current as U;\n const { idTaggedMaybe } = this;\n return idTaggedMaybe !== undefined ? (this.entity.em.getEntity(idTaggedMaybe) as U) : undefined;\n }\n\n [RelationT]: T = null!;\n [RelationU]: U = null!;\n [ReferenceN]: N = null!;\n}\n\n/**\n * Fails when we can't return an `.id` for a reference, i.e. it's unset or a new entity.\n *\n * We strictly type `book.author.id` as `AuthorId`, even if `book.author` is nullable, to\n * avoid users calling `.id` and getting back `undefined`, but not because \"there is no\n * author\", but only because \"the assigned author doesn't have an id assigned yet\".\n *\n * To handle nullable references, set `.idIfSet`.\n *\n * Assumes being called like `return idMaybe ?? failNoId()`, i.e. if we're called we\n * know the id is not available.\n */\nexport function failNoId(entity: Entity, fieldName: string, current: string | Entity | undefined): never {\n if (!current) fail(`Reference ${entity}.${fieldName} is unset`);\n // Throw NoIdError, which lets ReactionsManager will handle reactive fields gracefully\n if (current instanceof BaseEntity)\n throw new NoIdError(`Reference ${entity}.${fieldName} is assigned to a new entity`);\n fail(`Unreachable`);\n}\n\n/**\n * Fails when we can't return an `.idIfSet` for a reference, i.e. it's a new entity.\n *\n * Assumes being called like `return idMaybe ?? failIfNewEntity()`, i.e. if we're called we\n * know the id is not available.\n */\nexport function failIfNewEntity(entity: Entity, fieldName: string, current: string | Entity | undefined): undefined {\n if (current instanceof BaseEntity) {\n throw new NoIdError(`Reference ${entity}.${fieldName} is assigned to a new entity`);\n }\n // Since this is a `.idIfSet`, having no `current` is fine, return undefined.\n return undefined;\n}\n\ninterface M2OState<U extends Entity, N extends never | undefined> {\n readonly isLoaded: boolean;\n maybeInstantLoad(): M2OState<U, N>;\n applyLoad(loaded: U | N | undefined): M2OLoadedState<U, N>;\n import(target: ManyToOneReferenceImpl<any, any, any>, findEntity: (e: U) => U): M2OState<U, N>;\n doGet(): U | N | undefined;\n}\n\nclass M2OUnloadedState<U extends Entity, N extends never | undefined> implements M2OState<U, N> {\n readonly isLoaded = false;\n #m2o: ManyToOneReferenceImpl<any, any, any>;\n constructor(m2o: ManyToOneReferenceImpl<any, any, any>) {\n this.#m2o = m2o;\n }\n applyLoad(loaded: U | N | undefined): M2OLoadedState<U, N> {\n return new M2OLoadedState<U, N>(this.#m2o, loaded);\n }\n import(target: ManyToOneReferenceImpl<any, any, any>): M2OState<U, N> {\n return new M2OUnloadedState<U, N>(target);\n }\n maybeInstantLoad(): M2OState<U, N> {\n const current = this.#m2o.current();\n if (current === undefined || isEntity(current)) {\n return new M2OLoadedState<U, N>(this.#m2o, current as U | undefined);\n } else {\n const maybeFound = this.#m2o.entity.em.getEntity(current);\n if (maybeFound) {\n return new M2OLoadedState<U, N>(this.#m2o, maybeFound as U);\n }\n }\n return this;\n }\n doGet(): U | N | undefined {\n throw new Error(`${this.#m2o.entity}.${this.#m2o.fieldName} was not loaded`);\n }\n}\n\n/** The when loaded, with either the loaded entity or undefined. */\nclass M2OLoadedState<U extends Entity, N extends never | undefined> implements M2OState<U, N> {\n readonly isLoaded = true;\n #m2o: ManyToOneReferenceImpl<any, any, any>;\n #loaded: U | N | undefined;\n constructor(m2o: ManyToOneReferenceImpl<any, any, any>, loaded: U | N | undefined) {\n this.#loaded = loaded;\n this.#m2o = m2o;\n }\n applyLoad(loaded: U | N | undefined): M2OLoadedState<U, N> {\n return new M2OLoadedState<U, N>(this.#m2o, loaded);\n }\n import(target: ManyToOneReferenceImpl<any, any, any>, findEntity: (e: U) => U): M2OState<U, N> {\n return new M2OLoadedState<U, N>(target, isEntity(this.#loaded) ? findEntity(this.#loaded) : undefined);\n }\n maybeInstantLoad(): M2OState<U, N> {\n return this;\n }\n doGet(): U | N | undefined {\n return this.#loaded;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ManyToOneReference.d.cts","names":[],"sources":["../../src/relations/ManyToOneReference.ts"],"mappings":";;;;;;;;;;iBA2BgB,OAAO,UAAU,QAAQ,UAAU,QAAQ,gCAAgC,mBAAmB,GAAG,GAAG;;iBAQpG,qBAAqB,sBAAsB,kBAAkB;UAI5D,mBAAmB,UAAU,QAAQ,UAAU,QAAQ,qCAAqC,UAC3G,GACA,GACA;;EAGA,IAAI,KAAK;;EAGT,SAAS,KAAK;;EAGd,SAAS,KAAK;EAEd;EAEA;;WAGS;;;;;;;;;;;;;cAcE,uBAAuB,UAAU,QAAQ,UAAU,QAAQ,qCAC9D,qBAAqB,GAAG,cACrB,mBAAmB,GAAG,GAAG;;EAOpC,YAAY,QAAQ,GAAG,OAAO;EAQxB,KAAK;IAAQ;IAAuB;MAA+B,QAAQ,IAAI;EAqBrF,IAAI,OAAO,IAAI;MAIX;MAIA;MAMA;EAIJ;UAIQ;;EAMR,OAAO,QAAQ,uBAAuB,GAAG,GAAG,IAAI,aAAa,GAAG,MAAM;UAI9D;MAMJ,kBAAkB,IAAI;MAItB,OAAO,IAAI;;MAKX,MAAM,KAAK;;MAKX,GAAG,IAAI,KAAK,KAAK;MAkBjB,WAAW,KAAK,KAAK;MAIrB;MAIA;MAIA,WAAW,KAAK,KAAK;;MAMrB,iBAAiB;MAMjB;MAIA,wBAAwB;cAIhB;EAiCZ,YAAY,OAAO,IAAI,KAAK,KAAK;EAIjC;EAgBM,0BAA0B;EAqFhC,QAAQ;IAAS;MAA0B,IAAI,WAAW;MAQtD,aAAa,eAAe;MAI5B;EAIG;;;;;;;;;;UAaC;;UAQA;cAMI;;;;;EAQZ,mBAAmB;GAQlB,YAAY;GACZ,YAAY;GACZ,aAAa;;;;;;;;;;;;;;iBAeA,SAAS,QAAQ,QAAQ,mBAAmB,kBAAkB;;;;;;;iBAc9D,gBAAgB,QAAQ,QAAQ,mBAAmB,kBAAkB"}
1
+ {"version":3,"file":"ManyToOneReference.d.cts","names":[],"sources":["../../src/relations/ManyToOneReference.ts"],"mappings":";;;;;;;;;;iBA4BgB,OAAO,UAAU,QAAQ,UAAU,QAAQ,gCAAgC,mBAAmB,GAAG,GAAG;;iBAQpG,qBAAqB,sBAAsB,kBAAkB;UAI5D,mBAAmB,UAAU,QAAQ,UAAU,QAAQ,qCAAqC,UAC3G,GACA,GACA;;EAGA,IAAI,KAAK;;EAGT,SAAS,KAAK;;EAGd,SAAS,KAAK;EAEd;EAEA;;WAGS;;;;;;;;;;;;;cAcE,uBAAuB,UAAU,QAAQ,UAAU,QAAQ,qCAC9D,qBAAqB,GAAG,cACrB,mBAAmB,GAAG,GAAG;;EAOpC,YAAY,QAAQ,GAAG,OAAO;EAQxB,KAAK;IAAQ;IAAuB;MAA+B,QAAQ,IAAI;EAqBrF,IAAI,OAAO,IAAI;MAIX;MAIA;MAMA;EAIJ;UAIQ;;EAMR,OAAO,QAAQ,uBAAuB,GAAG,GAAG,IAAI,aAAa,GAAG,MAAM;UAI9D;MAMJ,kBAAkB,IAAI;MAItB,OAAO,IAAI;;MAKX,MAAM,KAAK;;MAKX,GAAG,IAAI,KAAK,KAAK;MAkBjB,WAAW,KAAK,KAAK;MAIrB;MAIA;MAIA,WAAW,KAAK,KAAK;;MAMrB,iBAAiB;MAMjB;MAIA,wBAAwB;cAIhB;EAiCZ,YAAY,OAAO,IAAI,KAAK,KAAK;EAIjC;EAgBM,0BAA0B;EAqFhC,QAAQ;IAAS;MAA0B,IAAI,WAAW;MAQtD,aAAa,eAAe;MAI5B;EAIG;;;;;;;;;;UAaC;;UAQA;cAMI;;;;;EAQZ,mBAAmB;GAQlB,YAAY;GACZ,YAAY;GACZ,aAAa;;;;;;;;;;;;;;iBAeA,SAAS,QAAQ,QAAQ,mBAAmB,kBAAkB;;;;;;;iBAc9D,gBAAgB,QAAQ,QAAQ,mBAAmB,kBAAkB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ManyToOneReference.d.mts","names":[],"sources":["../../src/relations/ManyToOneReference.ts"],"mappings":";;;;;;;;;;iBA2BgB,OAAO,UAAU,QAAQ,UAAU,QAAQ,gCAAgC,mBAAmB,GAAG,GAAG;;iBAQpG,qBAAqB,sBAAsB,kBAAkB;UAI5D,mBAAmB,UAAU,QAAQ,UAAU,QAAQ,qCAAqC,UAC3G,GACA,GACA;;EAGA,IAAI,KAAK;;EAGT,SAAS,KAAK;;EAGd,SAAS,KAAK;EAEd;EAEA;;WAGS;;;;;;;;;;;;;cAcE,uBAAuB,UAAU,QAAQ,UAAU,QAAQ,qCAC9D,qBAAqB,GAAG,cACrB,mBAAmB,GAAG,GAAG;;EAOpC,YAAY,QAAQ,GAAG,OAAO;EAQxB,KAAK;IAAQ;IAAuB;MAA+B,QAAQ,IAAI;EAqBrF,IAAI,OAAO,IAAI;MAIX;MAIA;MAMA;EAIJ;UAIQ;;EAMR,OAAO,QAAQ,uBAAuB,GAAG,GAAG,IAAI,aAAa,GAAG,MAAM;UAI9D;MAMJ,kBAAkB,IAAI;MAItB,OAAO,IAAI;;MAKX,MAAM,KAAK;;MAKX,GAAG,IAAI,KAAK,KAAK;MAkBjB,WAAW,KAAK,KAAK;MAIrB;MAIA;MAIA,WAAW,KAAK,KAAK;;MAMrB,iBAAiB;MAMjB;MAIA,wBAAwB;cAIhB;EAiCZ,YAAY,OAAO,IAAI,KAAK,KAAK;EAIjC;EAgBM,0BAA0B;EAqFhC,QAAQ;IAAS;MAA0B,IAAI,WAAW;MAQtD,aAAa,eAAe;MAI5B;EAIG;;;;;;;;;;UAaC;;UAQA;cAMI;;;;;EAQZ,mBAAmB;GAQlB,YAAY;GACZ,YAAY;GACZ,aAAa;;;;;;;;;;;;;;iBAeA,SAAS,QAAQ,QAAQ,mBAAmB,kBAAkB;;;;;;;iBAc9D,gBAAgB,QAAQ,QAAQ,mBAAmB,kBAAkB"}
1
+ {"version":3,"file":"ManyToOneReference.d.mts","names":[],"sources":["../../src/relations/ManyToOneReference.ts"],"mappings":";;;;;;;;;;iBA4BgB,OAAO,UAAU,QAAQ,UAAU,QAAQ,gCAAgC,mBAAmB,GAAG,GAAG;;iBAQpG,qBAAqB,sBAAsB,kBAAkB;UAI5D,mBAAmB,UAAU,QAAQ,UAAU,QAAQ,qCAAqC,UAC3G,GACA,GACA;;EAGA,IAAI,KAAK;;EAGT,SAAS,KAAK;;EAGd,SAAS,KAAK;EAEd;EAEA;;WAGS;;;;;;;;;;;;;cAcE,uBAAuB,UAAU,QAAQ,UAAU,QAAQ,qCAC9D,qBAAqB,GAAG,cACrB,mBAAmB,GAAG,GAAG;;EAOpC,YAAY,QAAQ,GAAG,OAAO;EAQxB,KAAK;IAAQ;IAAuB;MAA+B,QAAQ,IAAI;EAqBrF,IAAI,OAAO,IAAI;MAIX;MAIA;MAMA;EAIJ;UAIQ;;EAMR,OAAO,QAAQ,uBAAuB,GAAG,GAAG,IAAI,aAAa,GAAG,MAAM;UAI9D;MAMJ,kBAAkB,IAAI;MAItB,OAAO,IAAI;;MAKX,MAAM,KAAK;;MAKX,GAAG,IAAI,KAAK,KAAK;MAkBjB,WAAW,KAAK,KAAK;MAIrB;MAIA;MAIA,WAAW,KAAK,KAAK;;MAMrB,iBAAiB;MAMjB;MAIA,wBAAwB;cAIhB;EAiCZ,YAAY,OAAO,IAAI,KAAK,KAAK;EAIjC;EAgBM,0BAA0B;EAqFhC,QAAQ;IAAS;MAA0B,IAAI,WAAW;MAQtD,aAAa,eAAe;MAI5B;EAIG;;;;;;;;;;UAaC;;UAQA;cAMI;;;;;EAQZ,mBAAmB;GAQlB,YAAY;GACZ,YAAY;GACZ,aAAa;;;;;;;;;;;;;;iBAeA,SAAS,QAAQ,QAAQ,mBAAmB,kBAAkB;;;;;;;iBAc9D,gBAAgB,QAAQ,QAAQ,mBAAmB,kBAAkB"}
@@ -1,14 +1,15 @@
1
- import { lazyField } from "../newEntity.js";
2
- import { AbstractRelationImpl, isCascadeDelete } from "./AbstractRelationImpl.js";
1
+ import { getField, setField } from "../fields.js";
2
+ import { AbstractRelationImpl } from "./AbstractRelationImpl.js";
3
3
  import { RelationT, RelationU } from "./RelationSymbols.js";
4
- import { ReferenceN } from "./ReferenceSymbols.js";
4
+ import { isCascadeDelete } from "./isCascadeDelete.js";
5
5
  import { OneToManyCollection } from "./OneToManyCollection.js";
6
- import { OneToManyLargeCollection } from "./OneToManyLargeCollection.js";
6
+ import { ReferenceN } from "./ReferenceSymbols.js";
7
7
  import { OneToOneReferenceImpl } from "./OneToOneReference.js";
8
+ import { fail, maybeAdd, maybeRemove } from "../utils.js";
9
+ import { lazyField } from "../newEntity.js";
10
+ import { OneToManyLargeCollection } from "./OneToManyLargeCollection.js";
8
11
  import { deTagId, ensureTagged, maybeResolveReferenceToId, toIdOf, toTaggedId } from "../keys.js";
9
12
  import { getMetadata } from "../EntityMetadata.js";
10
- import { getField, setField } from "../fields.js";
11
- import { fail, maybeAdd, maybeRemove } from "../utils.js";
12
13
  import { NoIdError, ensureNotDeleted } from "../index.js";
13
14
  import { getEmInternalApi, sameEntity } from "../EntityManager.js";
14
15
  import { isEntity } from "../Entity.js";
@@ -1 +1 @@
1
- {"version":3,"file":"ManyToOneReference.js","names":["#field","#state","#loadPromise","#setImpl","#percolateRemove","#percolateAdd","#hasBeenSet","#m2o","#loaded"],"sources":["../../src/relations/ManyToOneReference.ts"],"sourcesContent":["import { type Entity, isEntity } from \"../Entity.ts\";\nimport { type IdOf, type TaggedId, getEmInternalApi, sameEntity } from \"../EntityManager.ts\";\nimport { type EntityMetadata, type ManyToOneField, getMetadata } from \"../EntityMetadata.ts\";\nimport { getField, setField } from \"../fields.ts\";\nimport {\n BaseEntity,\n NoIdError,\n OneToManyLargeCollection,\n OneToOneReferenceImpl,\n type Reference,\n deTagId,\n ensureNotDeleted,\n ensureTagged,\n fail,\n getInstanceData,\n maybeResolveReferenceToId,\n toIdOf,\n toTaggedId,\n} from \"../index.ts\";\nimport { lazyField } from \"../newEntity.ts\";\nimport { maybeAdd, maybeRemove } from \"../utils.ts\";\nimport { AbstractRelationImpl, isCascadeDelete } from \"./AbstractRelationImpl.ts\";\nimport { OneToManyCollection } from \"./OneToManyCollection.ts\";\nimport { ReferenceN } from \"./ReferenceSymbols.ts\";\nimport { RelationT, RelationU } from \"./RelationSymbols.ts\";\n\n/** An alias for creating `ManyToOneReference`s. */\nexport function hasOne<T extends Entity, U extends Entity, N extends never | undefined>(): ManyToOneReference<T, U, N> {\n return lazyField((entity: T, fieldName) => {\n const m2o = getMetadata(entity).allFields[fieldName] as ManyToOneField;\n return new ManyToOneReferenceImpl<T, U, N>(entity, m2o);\n });\n}\n\n/** Type guard utility for determining if an entity field is a ManyToOneReference. */\nexport function isManyToOneReference(maybeReference: any): maybeReference is ManyToOneReference<any, any, any> {\n return maybeReference instanceof ManyToOneReferenceImpl;\n}\n\nexport interface ManyToOneReference<T extends Entity, U extends Entity, N extends never | undefined> extends Reference<\n T,\n U,\n N\n> {\n /** Returns the id of the current assigned entity, or a runtime error if either 1) unset or 2) set to a new entity that doesn't have an `id` yet. */\n id: IdOf<U>;\n\n /** Returns the id of the current assigned entity, undefined if unset, or a runtime error if set to a new entity. */\n idIfSet: IdOf<U> | undefined;\n\n /** Returns the id of the current assigned entity, undefined if unset, or undefined if set to a new entity. */\n idMaybe: IdOf<U> | undefined;\n\n idUntagged: string;\n\n idUntaggedIfSet: string | undefined;\n\n /** Returns `true` if this relation is currently set (i.e. regardless of whether it's loaded, or if it is set but the assigned entity doesn't have an id saved. */\n readonly isSet: boolean;\n}\n\n/**\n * Manages a foreign key from one entity to another, i.e. `Book.author --> Author`.\n *\n * We keep the current `author` / `author_id` value in the `__orm.data` hash, where the\n * current value could be either the (string) author id from the database, or an entity\n * `Author` that the user has set.\n *\n * Note that if our `images.author_id` column is unique, this `ManyToOneReference` will essentially\n * be half of a one-to-one relationship, but we'll keep using this `ManyToOneReference` on the \"many\"\n * side, and the other side, i.e. `Author.image` will use a `OneToOneReference` to point back to us.\n */\nexport class ManyToOneReferenceImpl<T extends Entity, U extends Entity, N extends never | undefined>\n extends AbstractRelationImpl<T, U>\n implements ManyToOneReference<T, U, N>\n{\n readonly #field: ManyToOneField;\n #state: M2OState<U, N>;\n #loadPromise: Promise<void> | undefined;\n #hasBeenSet = false;\n\n constructor(entity: T, field: ManyToOneField) {\n super(entity);\n this.#field = field;\n this.#state = getInstanceData(entity).isOrWasNew\n ? new M2OLoadedState<U, N>(this, undefined)\n : new M2OUnloadedState<U, N>(this);\n }\n\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<U | N> {\n ensureNotDeleted(this.entity, \"pending\");\n this.#state = this.#state.maybeInstantLoad();\n if (!this.#state.isLoaded || opts.forceReload) {\n const current = this.current();\n if (isEntity(current) || current === undefined) {\n this.#state = new M2OLoadedState<U, N>(this, current as U | N | undefined);\n } else {\n await (this.#loadPromise ??= this.entity.em.load(this.otherMeta.cstr, current).then((entity) => {\n this.#loadPromise = undefined;\n // In extremely rare cases, someone might have called `set` while this promise was in-flight,\n // so make sure our current value is still the same as the fetched entity.\n if (sameEntity(entity, this.current())) {\n this.#state = this.#state.applyLoad(entity);\n }\n }));\n }\n }\n return this.filterDeleted(this.#state.doGet() as U | N, opts);\n }\n\n set(other: U | N): void {\n this.#setImpl(other);\n }\n\n get isSet(): boolean {\n return this.current() !== undefined;\n }\n\n get isLoaded(): boolean {\n // Even if `.load()` has not been called, `.get` will detect\n this.#state = this.#state.maybeInstantLoad();\n return this.#state.isLoaded;\n }\n\n get isPreloaded(): boolean {\n return !!this.maybeFindEntity();\n }\n\n preload(): void {\n this.#state = new M2OLoadedState<U, N>(this, this.maybeFindEntity());\n }\n\n private unload(): void {\n this.#state = new M2OUnloadedState<U, N>(this);\n this.#loadPromise = undefined;\n }\n\n /** Copy another em's `source` relation into our state. */\n import(source: ManyToOneReferenceImpl<T, U, N>, findEntity: (e: U) => U): void {\n this.#state = source.#state.import(this, findEntity);\n }\n\n private doGet(opts?: { withDeleted?: boolean }): U | N {\n ensureNotDeleted(this.entity, \"pending\");\n this.#state = this.#state.maybeInstantLoad();\n return this.filterDeleted(this.#state.doGet() as U | N, opts);\n }\n\n get getWithDeleted(): U | N {\n return this.doGet({ withDeleted: true });\n }\n\n get get(): U | N {\n return this.doGet({ withDeleted: false });\n }\n\n /** Returns the id of the current value. */\n get id(): IdOf<U> {\n return this.idMaybe || failNoId(this.entity, this.fieldName, this.current());\n }\n\n /** Sets the m2o to `id`, and allows accepting `undefined` (`N`) if this is a nullable relation. */\n set id(id: IdOf<U> | N) {\n ensureNotDeleted(this.entity, \"pending\");\n const newId = toTaggedId(this.otherMeta, id);\n\n const previousId = this.idTaggedMaybe;\n const previous = this.maybeFindEntity();\n const changed = setField(this.entity, this.fieldName, id);\n if (!changed) {\n return;\n }\n\n const loaded = newId ? (this.entity.em.getEntity(newId) as U) : undefined;\n this.#state = loaded ? new M2OLoadedState<U, N>(this, loaded) : new M2OUnloadedState<U, N>(this);\n this.#loadPromise = undefined;\n this.#percolateRemove(previousId, previous);\n this.#percolateAdd();\n }\n\n get idIfSet(): IdOf<U> | N | undefined {\n return this.idMaybe || failIfNewEntity(this.entity, this.fieldName, this.current());\n }\n\n get idUntagged(): string {\n return this.idUntaggedMaybe || failNoId(this.entity, this.fieldName, this.current());\n }\n\n get idUntaggedIfSet(): string | undefined {\n return this.idUntaggedMaybe || failIfNewEntity(this.entity, this.fieldName, this.current());\n }\n\n get idMaybe(): IdOf<U> | N | undefined {\n ensureNotDeleted(this.entity, \"pending\");\n return toIdOf(this.otherMeta, this.idTaggedMaybe);\n }\n\n /** Returns the tagged id of the current value, or undefined if unset or a new entity. */\n get idTaggedMaybe(): TaggedId | undefined {\n // Skip the deleted check so that `isPreloaded` doesn't blow up during em.refreshes/populates\n // ensureNotDeleted(this.entity, \"pending\");\n return maybeResolveReferenceToId(this.current());\n }\n\n get fieldName(): string {\n return this.#field.fieldName;\n }\n\n get otherFieldName(): keyof U & string {\n return this.#field.otherFieldName as keyof U & string;\n }\n\n private get idUntaggedMaybe(): string | undefined {\n return deTagId(this.otherMeta, this.idMaybe);\n }\n\n #setImpl(_other: U | IdOf<U> | N): void {\n ensureNotDeleted(this.entity, \"pending\");\n this.#hasBeenSet = true;\n\n // If the project is not using tagged ids, we still want it tagged internally\n const other = ensureTagged(this.otherMeta, _other);\n if (sameEntity(other, this.current({ withDeleted: true }))) {\n return;\n }\n\n const previousId = this.idTaggedMaybe;\n const previous = this.maybeFindEntity();\n // Prefer to keep the id in our data hash, but if this is a new entity w/o an id, use the entity itself\n setField(this.entity, this.fieldName, isEntity(other) ? (other?.idTaggedMaybe ?? other) : other);\n\n // Setting to an entity | undefined => loaded, setting to an id might reverse to unloaded\n const maybeEntity = isEntity(other) ? (other as U) : other ? this.entity.em.getEntity(other) : undefined;\n if (maybeEntity || other === undefined) {\n this.#state = new M2OLoadedState<U, N>(this, (maybeEntity ?? other) as U | N);\n } else {\n this.#state = new M2OUnloadedState<U, N>(this);\n }\n this.#loadPromise = undefined;\n this.#percolateRemove(previousId, previous);\n this.#percolateAdd();\n }\n\n // private impl\n\n setFromOpts(other: U | IdOf<U> | N): void {\n this.#setImpl(other);\n }\n\n maybeCascadeDelete(): void {\n if (this.isCascadeDelete) {\n const current = this.current({ withDeleted: true });\n if (current !== undefined) {\n if (typeof current === \"string\") {\n // We're invoked twice, once sync on em.delete, and again in em.flush when we're loaded;\n // but even when loaded, current might still be the tagged id, but we can find the entity in the EM\n const other = this.entity.em.getEntity(current);\n if (other) this.entity.em.delete(other as U);\n } else {\n this.entity.em.delete(current as U);\n }\n }\n }\n }\n\n async cleanupOnEntityDeleted(): Promise<void> {\n // if we are going to delete this relation as well, then we don't need to clean it up\n if (this.isCascadeDelete) return;\n const current = await this.load({ withDeleted: true });\n if (current !== undefined) {\n const o2m = this.getOtherRelation(current);\n if (o2m instanceof OneToManyCollection) {\n o2m.remove(this.entity, { requireLoaded: false });\n } else if (o2m instanceof OneToManyLargeCollection) {\n o2m.remove(this.entity);\n } else if (o2m instanceof OneToOneReferenceImpl) {\n o2m.set(undefined as any);\n } else {\n throw new Error(`Unhandled ${o2m}`);\n }\n }\n setField(this.entity, this.fieldName, undefined);\n this.#state = new M2OLoadedState<U, N>(this, undefined as any);\n }\n\n // Called on `book.author.set(...)` with our previous value, to percolate a `author.books.remove`. */\n #percolateRemove(prevId: string | undefined, prevEntity: U | undefined) {\n if (prevEntity) {\n const prevRelation = this.getOtherRelation(prevEntity);\n if (prevRelation instanceof OneToManyCollection) {\n prevRelation.removeIfLoaded(this.entity);\n } else if (prevRelation instanceof OneToManyLargeCollection) {\n prevRelation.remove(this.entity);\n } else {\n prevRelation.set(undefined as any, { percolating: true });\n }\n } else if (prevId) {\n // prevEntity is not loaded in memory, but cache it in case our other side is later loaded\n const { em } = this.entity;\n let map = getEmInternalApi(em).pendingPercolate.get(prevId);\n if (!map) {\n map = new Map();\n getEmInternalApi(em).pendingPercolate.set(prevId, map);\n }\n let pending = map.get(this.otherFieldName);\n if (!pending) {\n pending = { adds: [], removes: [] };\n map.set(this.otherFieldName, pending);\n }\n maybeAdd(pending.removes, this.entity);\n maybeRemove(pending.adds, this.entity);\n }\n }\n\n #percolateAdd() {\n const id = this.current();\n const other = this.maybeFindEntity();\n if (other) {\n // Other is already loaded in memory, immediately hook it up\n const newRelation = this.getOtherRelation(other);\n if (newRelation instanceof OneToManyCollection) {\n newRelation.add(this.entity);\n } else if (newRelation instanceof OneToManyLargeCollection) {\n newRelation.add(this.entity);\n } else if (newRelation) {\n newRelation.set(this.entity, { percolating: true });\n } else {\n // Something is wrong, we should always have a relation, but instead\n // of blowing up here, let this finish b/c it will probably turn into\n // a validation error.\n }\n } else if (typeof id === \"string\") {\n // Other is not loaded in memory, but cache it in case our other side is later loaded\n const { em } = this.entity;\n let map = getEmInternalApi(em).pendingPercolate.get(id);\n if (!map) {\n map = new Map();\n getEmInternalApi(em).pendingPercolate.set(id, map);\n }\n let pending = map.get(this.otherFieldName);\n if (!pending) {\n pending = { adds: [], removes: [] };\n map.set(this.otherFieldName, pending);\n }\n maybeAdd(pending.adds, this.entity);\n maybeRemove(pending.removes, this.entity);\n }\n }\n\n // We need to keep U in data[fieldName] to handle entities without an id assigned yet.\n current(opts?: { withDeleted?: boolean }): U | TaggedId | N {\n const current = getField(this.entity, this.fieldName);\n if (current !== undefined && isEntity(current)) {\n return this.filterDeleted(current as U, opts);\n }\n return current;\n }\n\n get otherMeta(): EntityMetadata<U> {\n return this.#field.otherMetadata();\n }\n\n get hasBeenSet(): boolean {\n return this.#hasBeenSet;\n }\n\n public toString(): string {\n return `ManyToOneReference(entity: ${this.entity}, fieldName: ${this.fieldName}, otherType: ${this.otherMeta.type}, otherFieldName: ${this.otherFieldName}, id: ${this.idMaybe})`;\n }\n\n /**\n * Removes pending-hard-delete (but not soft-deleted), unless explicitly asked for.\n *\n * Note that we leave soft-deleted entities b/c the call signature of a `book.author.get`\n * very likely does not expect a soft-deleted entity to result in `undefined`.\n *\n * (Contrasted with `author.books.get` which is more intuitive to have soft-deleted\n * entities filtered out, i.e. it doesn't fundamentally change the return type.)\n */\n private filterDeleted(entity: U | N, opts?: { withDeleted?: boolean }): U | N {\n if (entity && (!opts || !opts.withDeleted) && entity.isDeletedEntity) {\n return undefined!;\n }\n return entity;\n }\n\n /** Returns the other relation that points back at us, i.e. we're `book.author_id` and this is `Author.books`. */\n private getOtherRelation(\n other: U,\n ): OneToManyCollection<U, T> | OneToOneReferenceImpl<U, T> | OneToManyLargeCollection<U, T> {\n return (other as U)[this.otherFieldName] as any;\n }\n\n private get isCascadeDelete(): boolean {\n return isCascadeDelete(this, this.fieldName);\n }\n\n /**\n * Looks for an entity in `EntityManager`, b/c we may have it in memory even if\n * our reference is not specifically loaded.\n */\n maybeFindEntity(): U | undefined {\n // Check current() first b/c a new entity won't have an id yet\n const current = this.current();\n if (isEntity(current)) return current as U;\n const { idTaggedMaybe } = this;\n return idTaggedMaybe !== undefined ? (this.entity.em.getEntity(idTaggedMaybe) as U) : undefined;\n }\n\n [RelationT]: T = null!;\n [RelationU]: U = null!;\n [ReferenceN]: N = null!;\n}\n\n/**\n * Fails when we can't return an `.id` for a reference, i.e. it's unset or a new entity.\n *\n * We strictly type `book.author.id` as `AuthorId`, even if `book.author` is nullable, to\n * avoid users calling `.id` and getting back `undefined`, but not because \"there is no\n * author\", but only because \"the assigned author doesn't have an id assigned yet\".\n *\n * To handle nullable references, set `.idIfSet`.\n *\n * Assumes being called like `return idMaybe ?? failNoId()`, i.e. if we're called we\n * know the id is not available.\n */\nexport function failNoId(entity: Entity, fieldName: string, current: string | Entity | undefined): never {\n if (!current) fail(`Reference ${entity}.${fieldName} is unset`);\n // Throw NoIdError, which lets ReactionsManager will handle reactive fields gracefully\n if (current instanceof BaseEntity)\n throw new NoIdError(`Reference ${entity}.${fieldName} is assigned to a new entity`);\n fail(`Unreachable`);\n}\n\n/**\n * Fails when we can't return an `.idIfSet` for a reference, i.e. it's a new entity.\n *\n * Assumes being called like `return idMaybe ?? failIfNewEntity()`, i.e. if we're called we\n * know the id is not available.\n */\nexport function failIfNewEntity(entity: Entity, fieldName: string, current: string | Entity | undefined): undefined {\n if (current instanceof BaseEntity) {\n throw new NoIdError(`Reference ${entity}.${fieldName} is assigned to a new entity`);\n }\n // Since this is a `.idIfSet`, having no `current` is fine, return undefined.\n return undefined;\n}\n\ninterface M2OState<U extends Entity, N extends never | undefined> {\n readonly isLoaded: boolean;\n maybeInstantLoad(): M2OState<U, N>;\n applyLoad(loaded: U | N | undefined): M2OLoadedState<U, N>;\n import(target: ManyToOneReferenceImpl<any, any, any>, findEntity: (e: U) => U): M2OState<U, N>;\n doGet(): U | N | undefined;\n}\n\nclass M2OUnloadedState<U extends Entity, N extends never | undefined> implements M2OState<U, N> {\n readonly isLoaded = false;\n #m2o: ManyToOneReferenceImpl<any, any, any>;\n constructor(m2o: ManyToOneReferenceImpl<any, any, any>) {\n this.#m2o = m2o;\n }\n applyLoad(loaded: U | N | undefined): M2OLoadedState<U, N> {\n return new M2OLoadedState<U, N>(this.#m2o, loaded);\n }\n import(target: ManyToOneReferenceImpl<any, any, any>): M2OState<U, N> {\n return new M2OUnloadedState<U, N>(target);\n }\n maybeInstantLoad(): M2OState<U, N> {\n const current = this.#m2o.current();\n if (current === undefined || isEntity(current)) {\n return new M2OLoadedState<U, N>(this.#m2o, current as U | undefined);\n } else {\n const maybeFound = this.#m2o.entity.em.getEntity(current);\n if (maybeFound) {\n return new M2OLoadedState<U, N>(this.#m2o, maybeFound as U);\n }\n }\n return this;\n }\n doGet(): U | N | undefined {\n throw new Error(`${this.#m2o.entity}.${this.#m2o.fieldName} was not loaded`);\n }\n}\n\n/** The when loaded, with either the loaded entity or undefined. */\nclass M2OLoadedState<U extends Entity, N extends never | undefined> implements M2OState<U, N> {\n readonly isLoaded = true;\n #m2o: ManyToOneReferenceImpl<any, any, any>;\n #loaded: U | N | undefined;\n constructor(m2o: ManyToOneReferenceImpl<any, any, any>, loaded: U | N | undefined) {\n this.#loaded = loaded;\n this.#m2o = m2o;\n }\n applyLoad(loaded: U | N | undefined): M2OLoadedState<U, N> {\n return new M2OLoadedState<U, N>(this.#m2o, loaded);\n }\n import(target: ManyToOneReferenceImpl<any, any, any>, findEntity: (e: U) => U): M2OState<U, N> {\n return new M2OLoadedState<U, N>(target, isEntity(this.#loaded) ? findEntity(this.#loaded) : undefined);\n }\n maybeInstantLoad(): M2OState<U, N> {\n return this;\n }\n doGet(): U | N | undefined {\n return this.#loaded;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ManyToOneReference.js","names":["#field","#state","#loadPromise","#setImpl","#percolateRemove","#percolateAdd","#hasBeenSet","#m2o","#loaded"],"sources":["../../src/relations/ManyToOneReference.ts"],"sourcesContent":["import { type Entity, isEntity } from \"../Entity.ts\";\nimport { type IdOf, type TaggedId, getEmInternalApi, sameEntity } from \"../EntityManager.ts\";\nimport { type EntityMetadata, type ManyToOneField, getMetadata } from \"../EntityMetadata.ts\";\nimport { getField, setField } from \"../fields.ts\";\nimport {\n BaseEntity,\n NoIdError,\n OneToManyLargeCollection,\n OneToOneReferenceImpl,\n type Reference,\n deTagId,\n ensureNotDeleted,\n ensureTagged,\n fail,\n getInstanceData,\n maybeResolveReferenceToId,\n toIdOf,\n toTaggedId,\n} from \"../index.ts\";\nimport { lazyField } from \"../newEntity.ts\";\nimport { maybeAdd, maybeRemove } from \"../utils.ts\";\nimport { AbstractRelationImpl } from \"./AbstractRelationImpl.ts\";\nimport { isCascadeDelete } from \"./isCascadeDelete.ts\";\nimport { OneToManyCollection } from \"./OneToManyCollection.ts\";\nimport { ReferenceN } from \"./ReferenceSymbols.ts\";\nimport { RelationT, RelationU } from \"./RelationSymbols.ts\";\n\n/** An alias for creating `ManyToOneReference`s. */\nexport function hasOne<T extends Entity, U extends Entity, N extends never | undefined>(): ManyToOneReference<T, U, N> {\n return lazyField((entity: T, fieldName) => {\n const m2o = getMetadata(entity).allFields[fieldName] as ManyToOneField;\n return new ManyToOneReferenceImpl<T, U, N>(entity, m2o);\n });\n}\n\n/** Type guard utility for determining if an entity field is a ManyToOneReference. */\nexport function isManyToOneReference(maybeReference: any): maybeReference is ManyToOneReference<any, any, any> {\n return maybeReference instanceof ManyToOneReferenceImpl;\n}\n\nexport interface ManyToOneReference<T extends Entity, U extends Entity, N extends never | undefined> extends Reference<\n T,\n U,\n N\n> {\n /** Returns the id of the current assigned entity, or a runtime error if either 1) unset or 2) set to a new entity that doesn't have an `id` yet. */\n id: IdOf<U>;\n\n /** Returns the id of the current assigned entity, undefined if unset, or a runtime error if set to a new entity. */\n idIfSet: IdOf<U> | undefined;\n\n /** Returns the id of the current assigned entity, undefined if unset, or undefined if set to a new entity. */\n idMaybe: IdOf<U> | undefined;\n\n idUntagged: string;\n\n idUntaggedIfSet: string | undefined;\n\n /** Returns `true` if this relation is currently set (i.e. regardless of whether it's loaded, or if it is set but the assigned entity doesn't have an id saved. */\n readonly isSet: boolean;\n}\n\n/**\n * Manages a foreign key from one entity to another, i.e. `Book.author --> Author`.\n *\n * We keep the current `author` / `author_id` value in the `__orm.data` hash, where the\n * current value could be either the (string) author id from the database, or an entity\n * `Author` that the user has set.\n *\n * Note that if our `images.author_id` column is unique, this `ManyToOneReference` will essentially\n * be half of a one-to-one relationship, but we'll keep using this `ManyToOneReference` on the \"many\"\n * side, and the other side, i.e. `Author.image` will use a `OneToOneReference` to point back to us.\n */\nexport class ManyToOneReferenceImpl<T extends Entity, U extends Entity, N extends never | undefined>\n extends AbstractRelationImpl<T, U>\n implements ManyToOneReference<T, U, N>\n{\n readonly #field: ManyToOneField;\n #state: M2OState<U, N>;\n #loadPromise: Promise<void> | undefined;\n #hasBeenSet = false;\n\n constructor(entity: T, field: ManyToOneField) {\n super(entity);\n this.#field = field;\n this.#state = getInstanceData(entity).isOrWasNew\n ? new M2OLoadedState<U, N>(this, undefined)\n : new M2OUnloadedState<U, N>(this);\n }\n\n async load(opts: { withDeleted?: boolean; forceReload?: boolean } = {}): Promise<U | N> {\n ensureNotDeleted(this.entity, \"pending\");\n this.#state = this.#state.maybeInstantLoad();\n if (!this.#state.isLoaded || opts.forceReload) {\n const current = this.current();\n if (isEntity(current) || current === undefined) {\n this.#state = new M2OLoadedState<U, N>(this, current as U | N | undefined);\n } else {\n await (this.#loadPromise ??= this.entity.em.load(this.otherMeta.cstr, current).then((entity) => {\n this.#loadPromise = undefined;\n // In extremely rare cases, someone might have called `set` while this promise was in-flight,\n // so make sure our current value is still the same as the fetched entity.\n if (sameEntity(entity, this.current())) {\n this.#state = this.#state.applyLoad(entity);\n }\n }));\n }\n }\n return this.filterDeleted(this.#state.doGet() as U | N, opts);\n }\n\n set(other: U | N): void {\n this.#setImpl(other);\n }\n\n get isSet(): boolean {\n return this.current() !== undefined;\n }\n\n get isLoaded(): boolean {\n // Even if `.load()` has not been called, `.get` will detect\n this.#state = this.#state.maybeInstantLoad();\n return this.#state.isLoaded;\n }\n\n get isPreloaded(): boolean {\n return !!this.maybeFindEntity();\n }\n\n preload(): void {\n this.#state = new M2OLoadedState<U, N>(this, this.maybeFindEntity());\n }\n\n private unload(): void {\n this.#state = new M2OUnloadedState<U, N>(this);\n this.#loadPromise = undefined;\n }\n\n /** Copy another em's `source` relation into our state. */\n import(source: ManyToOneReferenceImpl<T, U, N>, findEntity: (e: U) => U): void {\n this.#state = source.#state.import(this, findEntity);\n }\n\n private doGet(opts?: { withDeleted?: boolean }): U | N {\n ensureNotDeleted(this.entity, \"pending\");\n this.#state = this.#state.maybeInstantLoad();\n return this.filterDeleted(this.#state.doGet() as U | N, opts);\n }\n\n get getWithDeleted(): U | N {\n return this.doGet({ withDeleted: true });\n }\n\n get get(): U | N {\n return this.doGet({ withDeleted: false });\n }\n\n /** Returns the id of the current value. */\n get id(): IdOf<U> {\n return this.idMaybe || failNoId(this.entity, this.fieldName, this.current());\n }\n\n /** Sets the m2o to `id`, and allows accepting `undefined` (`N`) if this is a nullable relation. */\n set id(id: IdOf<U> | N) {\n ensureNotDeleted(this.entity, \"pending\");\n const newId = toTaggedId(this.otherMeta, id);\n\n const previousId = this.idTaggedMaybe;\n const previous = this.maybeFindEntity();\n const changed = setField(this.entity, this.fieldName, id);\n if (!changed) {\n return;\n }\n\n const loaded = newId ? (this.entity.em.getEntity(newId) as U) : undefined;\n this.#state = loaded ? new M2OLoadedState<U, N>(this, loaded) : new M2OUnloadedState<U, N>(this);\n this.#loadPromise = undefined;\n this.#percolateRemove(previousId, previous);\n this.#percolateAdd();\n }\n\n get idIfSet(): IdOf<U> | N | undefined {\n return this.idMaybe || failIfNewEntity(this.entity, this.fieldName, this.current());\n }\n\n get idUntagged(): string {\n return this.idUntaggedMaybe || failNoId(this.entity, this.fieldName, this.current());\n }\n\n get idUntaggedIfSet(): string | undefined {\n return this.idUntaggedMaybe || failIfNewEntity(this.entity, this.fieldName, this.current());\n }\n\n get idMaybe(): IdOf<U> | N | undefined {\n ensureNotDeleted(this.entity, \"pending\");\n return toIdOf(this.otherMeta, this.idTaggedMaybe);\n }\n\n /** Returns the tagged id of the current value, or undefined if unset or a new entity. */\n get idTaggedMaybe(): TaggedId | undefined {\n // Skip the deleted check so that `isPreloaded` doesn't blow up during em.refreshes/populates\n // ensureNotDeleted(this.entity, \"pending\");\n return maybeResolveReferenceToId(this.current());\n }\n\n get fieldName(): string {\n return this.#field.fieldName;\n }\n\n get otherFieldName(): keyof U & string {\n return this.#field.otherFieldName as keyof U & string;\n }\n\n private get idUntaggedMaybe(): string | undefined {\n return deTagId(this.otherMeta, this.idMaybe);\n }\n\n #setImpl(_other: U | IdOf<U> | N): void {\n ensureNotDeleted(this.entity, \"pending\");\n this.#hasBeenSet = true;\n\n // If the project is not using tagged ids, we still want it tagged internally\n const other = ensureTagged(this.otherMeta, _other);\n if (sameEntity(other, this.current({ withDeleted: true }))) {\n return;\n }\n\n const previousId = this.idTaggedMaybe;\n const previous = this.maybeFindEntity();\n // Prefer to keep the id in our data hash, but if this is a new entity w/o an id, use the entity itself\n setField(this.entity, this.fieldName, isEntity(other) ? (other?.idTaggedMaybe ?? other) : other);\n\n // Setting to an entity | undefined => loaded, setting to an id might reverse to unloaded\n const maybeEntity = isEntity(other) ? (other as U) : other ? this.entity.em.getEntity(other) : undefined;\n if (maybeEntity || other === undefined) {\n this.#state = new M2OLoadedState<U, N>(this, (maybeEntity ?? other) as U | N);\n } else {\n this.#state = new M2OUnloadedState<U, N>(this);\n }\n this.#loadPromise = undefined;\n this.#percolateRemove(previousId, previous);\n this.#percolateAdd();\n }\n\n // private impl\n\n setFromOpts(other: U | IdOf<U> | N): void {\n this.#setImpl(other);\n }\n\n maybeCascadeDelete(): void {\n if (this.isCascadeDelete) {\n const current = this.current({ withDeleted: true });\n if (current !== undefined) {\n if (typeof current === \"string\") {\n // We're invoked twice, once sync on em.delete, and again in em.flush when we're loaded;\n // but even when loaded, current might still be the tagged id, but we can find the entity in the EM\n const other = this.entity.em.getEntity(current);\n if (other) this.entity.em.delete(other as U);\n } else {\n this.entity.em.delete(current as U);\n }\n }\n }\n }\n\n async cleanupOnEntityDeleted(): Promise<void> {\n // if we are going to delete this relation as well, then we don't need to clean it up\n if (this.isCascadeDelete) return;\n const current = await this.load({ withDeleted: true });\n if (current !== undefined) {\n const o2m = this.getOtherRelation(current);\n if (o2m instanceof OneToManyCollection) {\n o2m.remove(this.entity, { requireLoaded: false });\n } else if (o2m instanceof OneToManyLargeCollection) {\n o2m.remove(this.entity);\n } else if (o2m instanceof OneToOneReferenceImpl) {\n o2m.set(undefined as any);\n } else {\n throw new Error(`Unhandled ${o2m}`);\n }\n }\n setField(this.entity, this.fieldName, undefined);\n this.#state = new M2OLoadedState<U, N>(this, undefined as any);\n }\n\n // Called on `book.author.set(...)` with our previous value, to percolate a `author.books.remove`. */\n #percolateRemove(prevId: string | undefined, prevEntity: U | undefined) {\n if (prevEntity) {\n const prevRelation = this.getOtherRelation(prevEntity);\n if (prevRelation instanceof OneToManyCollection) {\n prevRelation.removeIfLoaded(this.entity);\n } else if (prevRelation instanceof OneToManyLargeCollection) {\n prevRelation.remove(this.entity);\n } else {\n prevRelation.set(undefined as any, { percolating: true });\n }\n } else if (prevId) {\n // prevEntity is not loaded in memory, but cache it in case our other side is later loaded\n const { em } = this.entity;\n let map = getEmInternalApi(em).pendingPercolate.get(prevId);\n if (!map) {\n map = new Map();\n getEmInternalApi(em).pendingPercolate.set(prevId, map);\n }\n let pending = map.get(this.otherFieldName);\n if (!pending) {\n pending = { adds: [], removes: [] };\n map.set(this.otherFieldName, pending);\n }\n maybeAdd(pending.removes, this.entity);\n maybeRemove(pending.adds, this.entity);\n }\n }\n\n #percolateAdd() {\n const id = this.current();\n const other = this.maybeFindEntity();\n if (other) {\n // Other is already loaded in memory, immediately hook it up\n const newRelation = this.getOtherRelation(other);\n if (newRelation instanceof OneToManyCollection) {\n newRelation.add(this.entity);\n } else if (newRelation instanceof OneToManyLargeCollection) {\n newRelation.add(this.entity);\n } else if (newRelation) {\n newRelation.set(this.entity, { percolating: true });\n } else {\n // Something is wrong, we should always have a relation, but instead\n // of blowing up here, let this finish b/c it will probably turn into\n // a validation error.\n }\n } else if (typeof id === \"string\") {\n // Other is not loaded in memory, but cache it in case our other side is later loaded\n const { em } = this.entity;\n let map = getEmInternalApi(em).pendingPercolate.get(id);\n if (!map) {\n map = new Map();\n getEmInternalApi(em).pendingPercolate.set(id, map);\n }\n let pending = map.get(this.otherFieldName);\n if (!pending) {\n pending = { adds: [], removes: [] };\n map.set(this.otherFieldName, pending);\n }\n maybeAdd(pending.adds, this.entity);\n maybeRemove(pending.removes, this.entity);\n }\n }\n\n // We need to keep U in data[fieldName] to handle entities without an id assigned yet.\n current(opts?: { withDeleted?: boolean }): U | TaggedId | N {\n const current = getField(this.entity, this.fieldName);\n if (current !== undefined && isEntity(current)) {\n return this.filterDeleted(current as U, opts);\n }\n return current;\n }\n\n get otherMeta(): EntityMetadata<U> {\n return this.#field.otherMetadata();\n }\n\n get hasBeenSet(): boolean {\n return this.#hasBeenSet;\n }\n\n public toString(): string {\n return `ManyToOneReference(entity: ${this.entity}, fieldName: ${this.fieldName}, otherType: ${this.otherMeta.type}, otherFieldName: ${this.otherFieldName}, id: ${this.idMaybe})`;\n }\n\n /**\n * Removes pending-hard-delete (but not soft-deleted), unless explicitly asked for.\n *\n * Note that we leave soft-deleted entities b/c the call signature of a `book.author.get`\n * very likely does not expect a soft-deleted entity to result in `undefined`.\n *\n * (Contrasted with `author.books.get` which is more intuitive to have soft-deleted\n * entities filtered out, i.e. it doesn't fundamentally change the return type.)\n */\n private filterDeleted(entity: U | N, opts?: { withDeleted?: boolean }): U | N {\n if (entity && (!opts || !opts.withDeleted) && entity.isDeletedEntity) {\n return undefined!;\n }\n return entity;\n }\n\n /** Returns the other relation that points back at us, i.e. we're `book.author_id` and this is `Author.books`. */\n private getOtherRelation(\n other: U,\n ): OneToManyCollection<U, T> | OneToOneReferenceImpl<U, T> | OneToManyLargeCollection<U, T> {\n return (other as U)[this.otherFieldName] as any;\n }\n\n private get isCascadeDelete(): boolean {\n return isCascadeDelete(this, this.fieldName);\n }\n\n /**\n * Looks for an entity in `EntityManager`, b/c we may have it in memory even if\n * our reference is not specifically loaded.\n */\n maybeFindEntity(): U | undefined {\n // Check current() first b/c a new entity won't have an id yet\n const current = this.current();\n if (isEntity(current)) return current as U;\n const { idTaggedMaybe } = this;\n return idTaggedMaybe !== undefined ? (this.entity.em.getEntity(idTaggedMaybe) as U) : undefined;\n }\n\n [RelationT]: T = null!;\n [RelationU]: U = null!;\n [ReferenceN]: N = null!;\n}\n\n/**\n * Fails when we can't return an `.id` for a reference, i.e. it's unset or a new entity.\n *\n * We strictly type `book.author.id` as `AuthorId`, even if `book.author` is nullable, to\n * avoid users calling `.id` and getting back `undefined`, but not because \"there is no\n * author\", but only because \"the assigned author doesn't have an id assigned yet\".\n *\n * To handle nullable references, set `.idIfSet`.\n *\n * Assumes being called like `return idMaybe ?? failNoId()`, i.e. if we're called we\n * know the id is not available.\n */\nexport function failNoId(entity: Entity, fieldName: string, current: string | Entity | undefined): never {\n if (!current) fail(`Reference ${entity}.${fieldName} is unset`);\n // Throw NoIdError, which lets ReactionsManager will handle reactive fields gracefully\n if (current instanceof BaseEntity)\n throw new NoIdError(`Reference ${entity}.${fieldName} is assigned to a new entity`);\n fail(`Unreachable`);\n}\n\n/**\n * Fails when we can't return an `.idIfSet` for a reference, i.e. it's a new entity.\n *\n * Assumes being called like `return idMaybe ?? failIfNewEntity()`, i.e. if we're called we\n * know the id is not available.\n */\nexport function failIfNewEntity(entity: Entity, fieldName: string, current: string | Entity | undefined): undefined {\n if (current instanceof BaseEntity) {\n throw new NoIdError(`Reference ${entity}.${fieldName} is assigned to a new entity`);\n }\n // Since this is a `.idIfSet`, having no `current` is fine, return undefined.\n return undefined;\n}\n\ninterface M2OState<U extends Entity, N extends never | undefined> {\n readonly isLoaded: boolean;\n maybeInstantLoad(): M2OState<U, N>;\n applyLoad(loaded: U | N | undefined): M2OLoadedState<U, N>;\n import(target: ManyToOneReferenceImpl<any, any, any>, findEntity: (e: U) => U): M2OState<U, N>;\n doGet(): U | N | undefined;\n}\n\nclass M2OUnloadedState<U extends Entity, N extends never | undefined> implements M2OState<U, N> {\n readonly isLoaded = false;\n #m2o: ManyToOneReferenceImpl<any, any, any>;\n constructor(m2o: ManyToOneReferenceImpl<any, any, any>) {\n this.#m2o = m2o;\n }\n applyLoad(loaded: U | N | undefined): M2OLoadedState<U, N> {\n return new M2OLoadedState<U, N>(this.#m2o, loaded);\n }\n import(target: ManyToOneReferenceImpl<any, any, any>): M2OState<U, N> {\n return new M2OUnloadedState<U, N>(target);\n }\n maybeInstantLoad(): M2OState<U, N> {\n const current = this.#m2o.current();\n if (current === undefined || isEntity(current)) {\n return new M2OLoadedState<U, N>(this.#m2o, current as U | undefined);\n } else {\n const maybeFound = this.#m2o.entity.em.getEntity(current);\n if (maybeFound) {\n return new M2OLoadedState<U, N>(this.#m2o, maybeFound as U);\n }\n }\n return this;\n }\n doGet(): U | N | undefined {\n throw new Error(`${this.#m2o.entity}.${this.#m2o.fieldName} was not loaded`);\n }\n}\n\n/** The when loaded, with either the loaded entity or undefined. */\nclass M2OLoadedState<U extends Entity, N extends never | undefined> implements M2OState<U, N> {\n readonly isLoaded = true;\n #m2o: ManyToOneReferenceImpl<any, any, any>;\n #loaded: U | N | undefined;\n constructor(m2o: ManyToOneReferenceImpl<any, any, any>, loaded: U | N | undefined) {\n this.#loaded = loaded;\n this.#m2o = m2o;\n }\n applyLoad(loaded: U | N | undefined): M2OLoadedState<U, N> {\n return new M2OLoadedState<U, N>(this.#m2o, loaded);\n }\n import(target: ManyToOneReferenceImpl<any, any, any>, findEntity: (e: U) => U): M2OState<U, N> {\n return new M2OLoadedState<U, N>(target, isEntity(this.#loaded) ? findEntity(this.#loaded) : undefined);\n }\n maybeInstantLoad(): M2OState<U, N> {\n return this;\n }\n doGet(): U | N | undefined {\n return this.#loaded;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA4BA,SAAgB,SAAuG;CACrH,OAAO,WAAW,QAAW,cAAc;EACzC,MAAM,MAAM,YAAY,MAAM,CAAC,CAAC,UAAU;EAC1C,OAAO,IAAI,uBAAgC,QAAQ,GAAG;CACxD,CAAC;AACH;;AAGA,SAAgB,qBAAqB,gBAA0E;CAC7G,OAAO,0BAA0B;AACnC;;;;;;;;;;;;AAmCA,IAAa,yBAAb,cACU,qBAEV;CACE;CACA;CACA;CACA,cAAc;CAEd,YAAY,QAAW,OAAuB;EAC5C,MAAM,MAAM;EACZ,KAAKA,SAAS;EACd,KAAKC,SAAS,gBAAgB,MAAM,CAAC,CAAC,aAClC,IAAI,eAAqB,MAAM,KAAA,CAAS,IACxC,IAAI,iBAAuB,IAAI;CACrC;CAEA,MAAM,KAAK,OAAyD,CAAC,GAAmB;EACtF,iBAAiB,KAAK,QAAQ,SAAS;EACvC,KAAKA,SAAS,KAAKA,OAAO,iBAAiB;EAC3C,IAAI,CAAC,KAAKA,OAAO,YAAY,KAAK,aAAa;GAC7C,MAAM,UAAU,KAAK,QAAQ;GAC7B,IAAI,SAAS,OAAO,KAAK,YAAY,KAAA,GACnC,KAAKA,SAAS,IAAI,eAAqB,MAAM,OAA4B;QAEzE,OAAO,KAAKC,iBAAiB,KAAK,OAAO,GAAG,KAAK,KAAK,UAAU,MAAM,OAAO,CAAC,CAAC,MAAM,WAAW;IAC9F,KAAKA,eAAe,KAAA;IAGpB,IAAI,WAAW,QAAQ,KAAK,QAAQ,CAAC,GACnC,KAAKD,SAAS,KAAKA,OAAO,UAAU,MAAM;GAE9C,CAAC;EAEL;EACA,OAAO,KAAK,cAAc,KAAKA,OAAO,MAAM,GAAY,IAAI;CAC9D;CAEA,IAAI,OAAoB;EACtB,KAAKE,SAAS,KAAK;CACrB;CAEA,IAAI,QAAiB;EACnB,OAAO,KAAK,QAAQ,MAAM,KAAA;CAC5B;CAEA,IAAI,WAAoB;EAEtB,KAAKF,SAAS,KAAKA,OAAO,iBAAiB;EAC3C,OAAO,KAAKA,OAAO;CACrB;CAEA,IAAI,cAAuB;EACzB,OAAO,CAAC,CAAC,KAAK,gBAAgB;CAChC;CAEA,UAAgB;EACd,KAAKA,SAAS,IAAI,eAAqB,MAAM,KAAK,gBAAgB,CAAC;CACrE;CAEA,SAAuB;EACrB,KAAKA,SAAS,IAAI,iBAAuB,IAAI;EAC7C,KAAKC,eAAe,KAAA;CACtB;;CAGA,OAAO,QAAyC,YAA+B;EAC7E,KAAKD,SAAS,OAAOA,OAAO,OAAO,MAAM,UAAU;CACrD;CAEA,MAAc,MAAyC;EACrD,iBAAiB,KAAK,QAAQ,SAAS;EACvC,KAAKA,SAAS,KAAKA,OAAO,iBAAiB;EAC3C,OAAO,KAAK,cAAc,KAAKA,OAAO,MAAM,GAAY,IAAI;CAC9D;CAEA,IAAI,iBAAwB;EAC1B,OAAO,KAAK,MAAM,EAAE,aAAa,KAAK,CAAC;CACzC;CAEA,IAAI,MAAa;EACf,OAAO,KAAK,MAAM,EAAE,aAAa,MAAM,CAAC;CAC1C;;CAGA,IAAI,KAAc;EAChB,OAAO,KAAK,WAAW,SAAS,KAAK,QAAQ,KAAK,WAAW,KAAK,QAAQ,CAAC;CAC7E;;CAGA,IAAI,GAAG,IAAiB;EACtB,iBAAiB,KAAK,QAAQ,SAAS;EACvC,MAAM,QAAQ,WAAW,KAAK,WAAW,EAAE;EAE3C,MAAM,aAAa,KAAK;EACxB,MAAM,WAAW,KAAK,gBAAgB;EAEtC,IAAI,CADY,SAAS,KAAK,QAAQ,KAAK,WAAW,EAC3C,GACT;EAGF,MAAM,SAAS,QAAS,KAAK,OAAO,GAAG,UAAU,KAAK,IAAU,KAAA;EAChE,KAAKA,SAAS,SAAS,IAAI,eAAqB,MAAM,MAAM,IAAI,IAAI,iBAAuB,IAAI;EAC/F,KAAKC,eAAe,KAAA;EACpB,KAAKE,iBAAiB,YAAY,QAAQ;EAC1C,KAAKC,cAAc;CACrB;CAEA,IAAI,UAAmC;EACrC,OAAO,KAAK,WAAW,gBAAgB,KAAK,QAAQ,KAAK,WAAW,KAAK,QAAQ,CAAC;CACpF;CAEA,IAAI,aAAqB;EACvB,OAAO,KAAK,mBAAmB,SAAS,KAAK,QAAQ,KAAK,WAAW,KAAK,QAAQ,CAAC;CACrF;CAEA,IAAI,kBAAsC;EACxC,OAAO,KAAK,mBAAmB,gBAAgB,KAAK,QAAQ,KAAK,WAAW,KAAK,QAAQ,CAAC;CAC5F;CAEA,IAAI,UAAmC;EACrC,iBAAiB,KAAK,QAAQ,SAAS;EACvC,OAAO,OAAO,KAAK,WAAW,KAAK,aAAa;CAClD;;CAGA,IAAI,gBAAsC;EAGxC,OAAO,0BAA0B,KAAK,QAAQ,CAAC;CACjD;CAEA,IAAI,YAAoB;EACtB,OAAO,KAAKL,OAAO;CACrB;CAEA,IAAI,iBAAmC;EACrC,OAAO,KAAKA,OAAO;CACrB;CAEA,IAAY,kBAAsC;EAChD,OAAO,QAAQ,KAAK,WAAW,KAAK,OAAO;CAC7C;CAEA,SAAS,QAA+B;EACtC,iBAAiB,KAAK,QAAQ,SAAS;EACvC,KAAKM,cAAc;EAGnB,MAAM,QAAQ,aAAa,KAAK,WAAW,MAAM;EACjD,IAAI,WAAW,OAAO,KAAK,QAAQ,EAAE,aAAa,KAAK,CAAC,CAAC,GACvD;EAGF,MAAM,aAAa,KAAK;EACxB,MAAM,WAAW,KAAK,gBAAgB;EAEtC,SAAS,KAAK,QAAQ,KAAK,WAAW,SAAS,KAAK,IAAK,OAAO,iBAAiB,QAAS,KAAK;EAG/F,MAAM,cAAc,SAAS,KAAK,IAAK,QAAc,QAAQ,KAAK,OAAO,GAAG,UAAU,KAAK,IAAI,KAAA;EAC/F,IAAI,eAAe,UAAU,KAAA,GAC3B,KAAKL,SAAS,IAAI,eAAqB,MAAO,eAAe,KAAe;OAE5E,KAAKA,SAAS,IAAI,iBAAuB,IAAI;EAE/C,KAAKC,eAAe,KAAA;EACpB,KAAKE,iBAAiB,YAAY,QAAQ;EAC1C,KAAKC,cAAc;CACrB;CAIA,YAAY,OAA8B;EACxC,KAAKF,SAAS,KAAK;CACrB;CAEA,qBAA2B;EACzB,IAAI,KAAK,iBAAiB;GACxB,MAAM,UAAU,KAAK,QAAQ,EAAE,aAAa,KAAK,CAAC;GAClD,IAAI,YAAY,KAAA,GAAW;IACzB,IAAI,OAAO,YAAY,UAAU;KAG/B,MAAM,QAAQ,KAAK,OAAO,GAAG,UAAU,OAAO;KAC9C,IAAI,OAAO,KAAK,OAAO,GAAG,OAAO,KAAU;IAC7C,OACE,KAAK,OAAO,GAAG,OAAO,OAAY;GAEtC;EACF;CACF;CAEA,MAAM,yBAAwC;EAE5C,IAAI,KAAK,iBAAiB;EAC1B,MAAM,UAAU,MAAM,KAAK,KAAK,EAAE,aAAa,KAAK,CAAC;EACrD,IAAI,YAAY,KAAA,GAAW;GACzB,MAAM,MAAM,KAAK,iBAAiB,OAAO;GACzC,IAAI,eAAe,qBACjB,IAAI,OAAO,KAAK,QAAQ,EAAE,eAAe,MAAM,CAAC;QAC3C,IAAI,eAAe,0BACxB,IAAI,OAAO,KAAK,MAAM;QACjB,IAAI,eAAe,uBACxB,IAAI,IAAI,KAAA,CAAgB;QAExB,MAAM,IAAI,MAAM,aAAa,KAAK;EAEtC;EACA,SAAS,KAAK,QAAQ,KAAK,WAAW,KAAA,CAAS;EAC/C,KAAKF,SAAS,IAAI,eAAqB,MAAM,KAAA,CAAgB;CAC/D;CAGA,iBAAiB,QAA4B,YAA2B;EACtE,IAAI,YAAY;GACd,MAAM,eAAe,KAAK,iBAAiB,UAAU;GACrD,IAAI,wBAAwB,qBAC1B,aAAa,eAAe,KAAK,MAAM;QAClC,IAAI,wBAAwB,0BACjC,aAAa,OAAO,KAAK,MAAM;QAE/B,aAAa,IAAI,KAAA,GAAkB,EAAE,aAAa,KAAK,CAAC;EAE5D,OAAO,IAAI,QAAQ;GAEjB,MAAM,EAAE,OAAO,KAAK;GACpB,IAAI,MAAM,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,IAAI,MAAM;GAC1D,IAAI,CAAC,KAAK;IACR,sBAAM,IAAI,IAAI;IACd,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,IAAI,QAAQ,GAAG;GACvD;GACA,IAAI,UAAU,IAAI,IAAI,KAAK,cAAc;GACzC,IAAI,CAAC,SAAS;IACZ,UAAU;KAAE,MAAM,CAAC;KAAG,SAAS,CAAC;IAAE;IAClC,IAAI,IAAI,KAAK,gBAAgB,OAAO;GACtC;GACA,SAAS,QAAQ,SAAS,KAAK,MAAM;GACrC,YAAY,QAAQ,MAAM,KAAK,MAAM;EACvC;CACF;CAEA,gBAAgB;EACd,MAAM,KAAK,KAAK,QAAQ;EACxB,MAAM,QAAQ,KAAK,gBAAgB;EACnC,IAAI,OAAO;GAET,MAAM,cAAc,KAAK,iBAAiB,KAAK;GAC/C,IAAI,uBAAuB,qBACzB,YAAY,IAAI,KAAK,MAAM;QACtB,IAAI,uBAAuB,0BAChC,YAAY,IAAI,KAAK,MAAM;QACtB,IAAI,aACT,YAAY,IAAI,KAAK,QAAQ,EAAE,aAAa,KAAK,CAAC;EAMtD,OAAO,IAAI,OAAO,OAAO,UAAU;GAEjC,MAAM,EAAE,OAAO,KAAK;GACpB,IAAI,MAAM,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,IAAI,EAAE;GACtD,IAAI,CAAC,KAAK;IACR,sBAAM,IAAI,IAAI;IACd,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,IAAI,IAAI,GAAG;GACnD;GACA,IAAI,UAAU,IAAI,IAAI,KAAK,cAAc;GACzC,IAAI,CAAC,SAAS;IACZ,UAAU;KAAE,MAAM,CAAC;KAAG,SAAS,CAAC;IAAE;IAClC,IAAI,IAAI,KAAK,gBAAgB,OAAO;GACtC;GACA,SAAS,QAAQ,MAAM,KAAK,MAAM;GAClC,YAAY,QAAQ,SAAS,KAAK,MAAM;EAC1C;CACF;CAGA,QAAQ,MAAoD;EAC1D,MAAM,UAAU,SAAS,KAAK,QAAQ,KAAK,SAAS;EACpD,IAAI,YAAY,KAAA,KAAa,SAAS,OAAO,GAC3C,OAAO,KAAK,cAAc,SAAc,IAAI;EAE9C,OAAO;CACT;CAEA,IAAI,YAA+B;EACjC,OAAO,KAAKD,OAAO,cAAc;CACnC;CAEA,IAAI,aAAsB;EACxB,OAAO,KAAKM;CACd;CAEA,WAA0B;EACxB,OAAO,8BAA8B,KAAK,OAAO,eAAe,KAAK,UAAU,eAAe,KAAK,UAAU,KAAK,oBAAoB,KAAK,eAAe,QAAQ,KAAK,QAAQ;CACjL;;;;;;;;;;CAWA,cAAsB,QAAe,MAAyC;EAC5E,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,gBAAgB,OAAO,iBACnD;EAEF,OAAO;CACT;;CAGA,iBACE,OAC0F;EAC1F,OAAQ,MAAY,KAAK;CAC3B;CAEA,IAAY,kBAA2B;EACrC,OAAO,gBAAgB,MAAM,KAAK,SAAS;CAC7C;;;;;CAMA,kBAAiC;EAE/B,MAAM,UAAU,KAAK,QAAQ;EAC7B,IAAI,SAAS,OAAO,GAAG,OAAO;EAC9B,MAAM,EAAE,kBAAkB;EAC1B,OAAO,kBAAkB,KAAA,IAAa,KAAK,OAAO,GAAG,UAAU,aAAa,IAAU,KAAA;CACxF;CAEA,CAAC,aAAgB;CACjB,CAAC,aAAgB;CACjB,CAAC,cAAiB;AACpB;;;;;;;;;;;;;AAcA,SAAgB,SAAS,QAAgB,WAAmB,SAA6C;CACvG,IAAI,CAAC,SAAS,KAAK,aAAa,OAAO,GAAG,UAAU,UAAU;CAE9D,IAAI,mBAAmB,YACrB,MAAM,IAAI,UAAU,aAAa,OAAO,GAAG,UAAU,6BAA6B;CACpF,KAAK,aAAa;AACpB;;;;;;;AAQA,SAAgB,gBAAgB,QAAgB,WAAmB,SAAiD;CAClH,IAAI,mBAAmB,YACrB,MAAM,IAAI,UAAU,aAAa,OAAO,GAAG,UAAU,6BAA6B;AAItF;AAUA,IAAM,mBAAN,MAAM,iBAA0F;CAC9F,WAAoB;CACpB;CACA,YAAY,KAA4C;EACtD,KAAKC,OAAO;CACd;CACA,UAAU,QAAiD;EACzD,OAAO,IAAI,eAAqB,KAAKA,MAAM,MAAM;CACnD;CACA,OAAO,QAA+D;EACpE,OAAO,IAAI,iBAAuB,MAAM;CAC1C;CACA,mBAAmC;EACjC,MAAM,UAAU,KAAKA,KAAK,QAAQ;EAClC,IAAI,YAAY,KAAA,KAAa,SAAS,OAAO,GAC3C,OAAO,IAAI,eAAqB,KAAKA,MAAM,OAAwB;OAC9D;GACL,MAAM,aAAa,KAAKA,KAAK,OAAO,GAAG,UAAU,OAAO;GACxD,IAAI,YACF,OAAO,IAAI,eAAqB,KAAKA,MAAM,UAAe;EAE9D;EACA,OAAO;CACT;CACA,QAA2B;EACzB,MAAM,IAAI,MAAM,GAAG,KAAKA,KAAK,OAAO,GAAG,KAAKA,KAAK,UAAU,gBAAgB;CAC7E;AACF;;AAGA,IAAM,iBAAN,MAAM,eAAwF;CAC5F,WAAoB;CACpB;CACA;CACA,YAAY,KAA4C,QAA2B;EACjF,KAAKC,UAAU;EACf,KAAKD,OAAO;CACd;CACA,UAAU,QAAiD;EACzD,OAAO,IAAI,eAAqB,KAAKA,MAAM,MAAM;CACnD;CACA,OAAO,QAA+C,YAAyC;EAC7F,OAAO,IAAI,eAAqB,QAAQ,SAAS,KAAKC,OAAO,IAAI,WAAW,KAAKA,OAAO,IAAI,KAAA,CAAS;CACvG;CACA,mBAAmC;EACjC,OAAO;CACT;CACA,QAA2B;EACzB,OAAO,KAAKA;CACd;AACF"}
@@ -1,14 +1,15 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_newEntity = require("../newEntity.cjs");
3
2
  const require_relations_AbstractRelationImpl = require("./AbstractRelationImpl.cjs");
4
3
  const require_relations_RelationSymbols = require("./RelationSymbols.cjs");
4
+ const require_relations_isCascadeDelete = require("./isCascadeDelete.cjs");
5
5
  const require_batchloaders_oneToManyBatchLoader = require("../batchloaders/oneToManyBatchLoader.cjs");
6
6
  const require_dataloaders_oneToManyFindDataLoader = require("../dataloaders/oneToManyFindDataLoader.cjs");
7
7
  require("../IsLoadedCache.cjs");
8
8
  require("./ManyToOneReference.cjs");
9
+ const require_utils = require("../utils.cjs");
10
+ const require_newEntity = require("../newEntity.cjs");
9
11
  const require_keys = require("../keys.cjs");
10
12
  const require_EntityMetadata = require("../EntityMetadata.cjs");
11
- const require_utils = require("../utils.cjs");
12
13
  const require_index = require("../index.cjs");
13
14
  const require_EntityManager = require("../EntityManager.cjs");
14
15
  const require_BaseEntity = require("../BaseEntity.cjs");
@@ -208,7 +209,7 @@ var OneToManyCollection = class extends require_relations_AbstractRelationImpl.A
208
209
  return other[this.otherFieldName];
209
210
  }
210
211
  get isCascadeDelete() {
211
- return require_relations_AbstractRelationImpl.isCascadeDelete(this, this.fieldName);
212
+ return require_relations_isCascadeDelete.isCascadeDelete(this, this.fieldName);
212
213
  }
213
214
  getPreloaded() {
214
215
  if (this.entity.isNewEntity) return void 0;
@@ -364,7 +365,7 @@ var O2MPendingSetState = class O2MPendingSetState {
364
365
  const o2m = this.#o2m;
365
366
  const entity = o2m.entity;
366
367
  const otherCannotChange = o2m.otherMeta.allFields[o2m.otherFieldName].immutable;
367
- const isCascade = require_relations_AbstractRelationImpl.isCascadeDelete(o2m, o2m.fieldName);
368
+ const isCascade = require_relations_isCascadeDelete.isCascadeDelete(o2m, o2m.fieldName);
368
369
  const dbSet = new Set(dbEntities);
369
370
  const added = [];
370
371
  for (const other of this.#pendingValues) if (!dbSet.has(other)) added.push(other);
@@ -439,7 +440,7 @@ var O2MLoadedState = class O2MLoadedState {
439
440
  let valuesSet = new Set(values);
440
441
  const o2m = this.#o2m;
441
442
  const otherCannotChange = o2m.otherMeta.allFields[o2m.otherFieldName].immutable;
442
- if (require_relations_AbstractRelationImpl.isCascadeDelete(o2m, o2m.fieldName) && otherCannotChange) {
443
+ if (require_relations_isCascadeDelete.isCascadeDelete(o2m, o2m.fieldName) && otherCannotChange) {
443
444
  const implicitlyDeleted = [...this.#loaded].filter((e) => !valuesSet.has(e));
444
445
  implicitlyDeleted.forEach((e) => o2m.entity.em.delete(e));
445
446
  values = [...values, ...implicitlyDeleted];
@@ -1 +1 @@
1
- {"version":3,"file":"OneToManyCollection.cjs","names":["lazyField","getMetadata","AbstractRelationImpl","#field","getInstanceData","#state","getEmInternalApi","#loadPromise","oneToManyBatchLoader","appendStack","#getSorted","#allSorted","oneToManyFindDataLoader","sameEntity","maybeResolveReferenceToId","getMetadataForField","compareValues","isCascadeDelete","RelationT","RelationU","#o2m","#added","#removed","#pendingValues","#percolate","#loaded","#hasBeenSet"],"sources":["../../src/relations/OneToManyCollection.ts"],"sourcesContent":["import { oneToManyBatchLoader } from \"../batchloaders/oneToManyBatchLoader.ts\";\nimport { oneToManyFindDataLoader } from \"../dataloaders/oneToManyFindDataLoader.ts\";\nimport {\n type Collection,\n type Entity,\n type EntityMetadata,\n type IdOf,\n type OneToManyField,\n appendStack,\n ensureNotDeleted,\n getEmInternalApi,\n getInstanceData,\n getMetadata,\n getMetadataForField,\n maybeResolveReferenceToId,\n sameEntity,\n} from \"../index.ts\";\nimport { type IsLoadedCachable } from \"../IsLoadedCache.ts\";\nimport { lazyField } from \"../newEntity.ts\";\nimport { compareValues } from \"../utils.ts\";\nimport { AbstractRelationImpl, isCascadeDelete } from \"./AbstractRelationImpl.ts\";\nimport { type ManyToOneReferenceImpl } from \"./ManyToOneReference.ts\";\nimport { RelationT, RelationU } from \"./RelationSymbols.ts\";\n\n/** An alias for creating `OneToManyCollection`s. */\nexport function hasMany<T extends Entity, U extends Entity>(): Collection<T, U> {\n return lazyField((entity: T, fieldName) => {\n const field = getMetadata(entity).allFields[fieldName] as OneToManyField;\n return new OneToManyCollection(entity, field);\n });\n}\n\nexport class OneToManyCollection<T extends Entity, U extends Entity>\n extends AbstractRelationImpl<T, U[]>\n implements Collection<T, U>, IsLoadedCachable\n{\n readonly #field: OneToManyField;\n #state: O2MState<T, U>;\n #loadPromise: any;\n // Constantly filtering+sorting our `.get` values can be surprisingly expensive if called\n // when processing many entities/writing code that calls it repeatedly, so we cache it\n // both the \"without deleted\" default (`getSorted`) and \"all deleted\" (`allSorted`).\n #getSorted: U[] | undefined;\n #allSorted: U[] | undefined;\n\n constructor(entity: T, field: OneToManyField) {\n super(entity);\n this.#field = field;\n if (getInstanceData(entity).isOrWasNew) {\n this.#state = new O2MLoadedState<T, U>(this, [], false);\n } else {\n const { em } = entity;\n // If any m2o.set(ourId) were made before our entity was loaded, pull in those changes\n const pending = getEmInternalApi(em).pendingPercolate.get(entity.idTagged!)?.get(this.fieldName);\n if (pending) {\n this.#state = new O2MUnloadedAddedRemovedState<T, U>(this, pending.adds as U[], pending.removes as U[]);\n getEmInternalApi(em).pendingPercolate.get(entity.idTagged!)?.delete(this.fieldName);\n } else {\n this.#state = new O2MUnloadedPristineState<T, U>(this);\n }\n }\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.#state.isLoaded || (opts.forceReload && !this.entity.isNewEntity)) {\n const maybePreloaded = this.getPreloaded();\n if (maybePreloaded) {\n this.#state = this.#state.applyLoad(maybePreloaded);\n } else {\n await (this.#loadPromise ??= oneToManyBatchLoader(this.entity.em, this).load(this.entity.idTagged!))\n .then(() => this.preload())\n .catch(function load(err: any) {\n throw appendStack(err as Error, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n });\n }\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n return opts?.withDeleted ? this.getWithDeleted : this.get;\n }\n\n async find(id: IdOf<U>): Promise<U | undefined> {\n ensureNotDeleted(this.entity, \"pending\");\n const inMemory = this.#state.find(id);\n if (inMemory) return inMemory;\n if (this.#state.isLoaded) return undefined;\n const key = `id=${id},${this.#field.otherColumnName}=${this.entity.id}`;\n return oneToManyFindDataLoader(this.entity.em, this)\n .load(key)\n .catch(function find(err) {\n throw appendStack(err, new Error());\n });\n }\n\n async includes(other: U): Promise<boolean> {\n return sameEntity(this.entity, this.getOtherRelation(other).current());\n }\n\n get isLoaded(): boolean {\n return this.#state.isLoaded;\n }\n\n resetIsLoaded(): void {\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n get isPreloaded(): boolean {\n return !!this.getPreloaded();\n }\n\n preload(): void {\n const preloaded = this.getPreloaded();\n if (preloaded) {\n this.#state = this.#state.applyLoad(preloaded);\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n }\n\n /** Copy another em's `source` collection into our state. */\n import(source: OneToManyCollection<T, U>, findEntity: (e: U) => U): void {\n this.#state = source.#state.import(this, findEntity);\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n // todo: this only be a readonly U[]\n get get(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n if (this.#getSorted !== undefined) return this.#getSorted;\n this.#getSorted = Object.freeze(this.filterDeleted(this.#state.doGet(), { withDeleted: false })) as U[];\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#getSorted;\n }\n\n get getWithDeleted(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n if (this.#allSorted !== undefined) return this.#allSorted;\n this.#allSorted = Object.freeze(this.filterDeleted(this.#state.doGet(), { withDeleted: true })) as U[];\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#allSorted;\n }\n\n set(values: readonly U[]): void {\n ensureNotDeleted(this.entity);\n this.#state = this.#state.set(values);\n this.registerAsMutated();\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n add(other: U): void {\n ensureNotDeleted(this.entity);\n this.#state = this.#state.add(other);\n this.percolateAdd(other);\n this.registerAsMutated();\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n remove(other: U, opts: { requireLoaded: boolean } = { requireLoaded: true }) {\n ensureNotDeleted(this.entity, \"pending\");\n this.#state = this.#state.remove(other, opts);\n this.percolateRemove(other);\n this.registerAsMutated();\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n removeAll(): void {\n ensureNotDeleted(this.entity);\n if (!this.#state.isLoaded) {\n throw new Error(\"removeAll was called when not loaded\");\n }\n for (const other of [...this.#state.doGet()]) {\n this.remove(other);\n }\n }\n\n // internal impl\n\n /** @internal */\n percolateAdd(other: U): void {\n this.getOtherRelation(other).set(this.entity);\n }\n\n /** @internal */\n percolateRemove(other: U): void {\n this.getOtherRelation(other).set(undefined);\n }\n\n /** @internal */\n registerAsMutated(): void {\n getEmInternalApi(this.entity.em).mutatedCollections.add(this);\n }\n\n setFromOpts(others: U[]): void {\n this.#state = new O2MLoadedState<T, U>(this, [], false);\n others.forEach((o) => this.add(o));\n }\n\n removeIfLoaded(other: U) {\n this.#state = this.#state.removeIfLoaded(other);\n this.registerAsMutated();\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n maybeCascadeDelete(): void {\n if (this.isCascadeDelete) {\n this.current({ withDeleted: true }).forEach((e) => this.entity.em.delete(e));\n }\n }\n\n // We already unhooked all children in our addedBeforeLoaded list; now load the full list if necessary.\n async cleanupOnEntityDeleted(): Promise<void> {\n // if we are going to delete this relation as well, then we don't need to clean it up\n if (this.isCascadeDelete) return;\n const current = await this.load({ withDeleted: true });\n current.forEach((other) => {\n const m2o = this.getOtherRelation(other);\n if (maybeResolveReferenceToId(m2o.current({ withDeleted: true })) === this.entity.idMaybe) {\n m2o.set(undefined);\n }\n });\n this.#state = new O2MLoadedState<T, U>(this, [], false);\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n // These are public to our internal implementation but not exposed in the Collection API\n public get fieldName(): keyof T & string {\n return this.#field.fieldName as keyof T & string;\n }\n\n public get otherFieldName(): keyof U & string {\n return this.#field.otherFieldName as keyof U & string;\n }\n\n current(opts?: { withDeleted?: boolean }): U[] {\n return this.filterDeleted(this.#state.current(), opts);\n }\n\n public get meta(): EntityMetadata {\n return getMetadataForField(getMetadata(this.entity), this.fieldName);\n }\n\n public get otherMeta(): EntityMetadata {\n return this.#field.otherMetadata();\n }\n\n public get hasBeenSet(): boolean {\n return this.#state.hasBeenSet;\n }\n\n public toString(): string {\n return `OneToManyCollection(entity: ${this.entity}, fieldName: ${this.fieldName}, otherType: ${this.otherMeta.type}, otherFieldName: ${this.otherFieldName})`;\n }\n\n /** Called after `em.flush` to reset our dirty tracking. */\n public resetAddedRemoved(): void {\n this.#state.resetAddedRemoved();\n }\n\n /** Removes pending-hard-delete or soft-deleted entities, unless explicitly asked for. */\n private filterDeleted(entities: U[], opts?: { withDeleted?: boolean }): U[] {\n // Relations configured with `softDeletes: \"include\"` keep soft-deleted entities in `.get`/`.load`.\n const includeSoftDeleted = this.#field.softDeletes === \"include\";\n const list =\n opts?.withDeleted === true\n ? [...entities]\n : entities.filter((e) => !e.isDeletedEntity && (includeSoftDeleted || !(e as any).isSoftDeletedEntity));\n if (this.#field.orderBy) {\n const { field, direction } = this.#field.orderBy;\n list.sort((a, b) => compareValues((a as any)[field], (b as any)[field], direction));\n }\n return list;\n }\n\n /** Returns the other relation that points back at us, i.e. we're `Author.image` and this is `Image.author_id`. */\n private getOtherRelation(other: U): ManyToOneReferenceImpl<U, T, any> {\n return (other as U)[this.otherFieldName] as any;\n }\n\n private get isCascadeDelete(): boolean {\n return isCascadeDelete(this, this.fieldName);\n }\n\n private getPreloaded(): U[] | undefined {\n if (this.entity.isNewEntity) return undefined;\n return getEmInternalApi(this.entity.em).getPreloadedRelation<U>(this.entity.idTagged, this.fieldName);\n }\n\n // Exposed for changes\n added(): U[] {\n return this.#state.added();\n }\n\n removed(): U[] {\n return this.#state.removed();\n }\n\n [RelationT]: T = null!;\n [RelationU]: U = null!;\n}\n\n/**\n * State interface for OneToManyCollection state machine.\n *\n * States handle only data tracking — side effects (percolation, mutation registration)\n * are handled by the collection methods that call into these states.\n *\n * State transitions:\n * ```\n * Constructor (new entity) → Loaded (empty [])\n * Constructor (existing entity) → UnloadedPristine\n *\n * UnloadedPristine + add/remove → UnloadedAddedRemoved\n * UnloadedPristine + set → PendingSet\n * UnloadedPristine + load/preload → Loaded\n *\n * UnloadedAddedRemoved + set → PendingSet\n * UnloadedAddedRemoved + load/preload → Loaded (merges adds/removes)\n *\n * PendingSet + add/remove → PendingSet (self)\n * PendingSet + set → PendingSet (self, replace)\n * PendingSet + load/preload → Loaded (diffs pending vs DB)\n *\n * Loaded + forceReload → Loaded (refreshed, re-merges pending)\n * ```\n */\ninterface O2MState<T extends Entity, U extends Entity> {\n add(other: U): O2MState<T, U>;\n remove(other: U, opts: { requireLoaded: boolean }): O2MState<T, U>;\n removeIfLoaded(other: U): O2MState<T, U>;\n set(values: readonly U[]): O2MState<T, U>;\n doGet(): U[];\n find(id: IdOf<U>): U | undefined;\n applyLoad(dbEntities: U[]): O2MLoadedState<T, U>;\n current(): U[];\n import(target: OneToManyCollection<T, U>, findEntity: (e: U) => U): O2MState<T, U>;\n readonly isLoaded: boolean;\n readonly hasBeenSet: boolean;\n added(): U[];\n removed(): U[];\n resetAddedRemoved(): void;\n}\n\n/** Initial state for existing entities - no data loaded yet. */\nclass O2MUnloadedPristineState<T extends Entity, U extends Entity> implements O2MState<T, U> {\n readonly isLoaded = false;\n readonly hasBeenSet = false;\n #o2m: OneToManyCollection<T, U>;\n\n constructor(o2m: OneToManyCollection<T, U>) {\n this.#o2m = o2m;\n }\n\n add(other: U): O2MState<T, U> {\n return new O2MUnloadedAddedRemovedState<T, U>(this.#o2m, [other], []);\n }\n\n remove(_other: U, opts: { requireLoaded: boolean }): O2MState<T, U> {\n if (opts.requireLoaded) {\n throw new Error(\"remove was called when not loaded\");\n }\n return new O2MUnloadedAddedRemovedState<T, U>(this.#o2m, [], [_other]);\n }\n\n removeIfLoaded(other: U): O2MState<T, U> {\n return new O2MUnloadedAddedRemovedState<T, U>(this.#o2m, [], [other]);\n }\n\n set(values: readonly U[]): O2MState<T, U> {\n return new O2MPendingSetState<T, U>(this.#o2m, values);\n }\n\n doGet(): U[] {\n throw new Error(\"get was called when not loaded\");\n }\n\n find(_id: IdOf<U>): U | undefined {\n return undefined;\n }\n\n applyLoad(dbEntities: U[]): O2MLoadedState<T, U> {\n return new O2MLoadedState<T, U>(this.#o2m, dbEntities, false);\n }\n\n current(): U[] {\n return [];\n }\n\n import(target: OneToManyCollection<T, U>, _findEntity: (e: U) => U): O2MState<T, U> {\n return new O2MUnloadedPristineState<T, U>(target);\n }\n\n added(): U[] {\n return [];\n }\n\n removed(): U[] {\n return [];\n }\n\n resetAddedRemoved(): void {}\n}\n\n/** State when add/remove called before load - tracks changes to merge later. */\nclass O2MUnloadedAddedRemovedState<T extends Entity, U extends Entity> implements O2MState<T, U> {\n readonly isLoaded = false;\n readonly hasBeenSet = false;\n #o2m: OneToManyCollection<T, U>;\n #added: Set<U>;\n #removed: Set<U>;\n\n constructor(o2m: OneToManyCollection<T, U>, added: U[], removed: U[]) {\n this.#o2m = o2m;\n this.#added = new Set(added);\n this.#removed = new Set(removed);\n }\n\n add(other: U): O2MState<T, U> {\n this.#added.add(other);\n this.#removed.delete(other);\n return this;\n }\n\n remove(other: U, opts: { requireLoaded: boolean }): O2MState<T, U> {\n if (opts.requireLoaded) {\n throw new Error(\"remove was called when not loaded\");\n }\n this.#removed.add(other);\n this.#added.delete(other);\n return this;\n }\n\n removeIfLoaded(other: U): O2MState<T, U> {\n this.#added.delete(other);\n this.#removed.add(other);\n return this;\n }\n\n set(values: readonly U[]): O2MState<T, U> {\n // We should do the implicit deletion check?\n // Should we keep #added/#removed?\n return new O2MPendingSetState<T, U>(this.#o2m, values);\n }\n\n doGet(): U[] {\n throw new Error(\"get was called when not loaded\");\n }\n\n find(id: IdOf<U>): U | undefined {\n for (const u of this.#added) {\n if (!u.isNewEntity && u.id === id) return u;\n }\n return undefined;\n }\n\n applyLoad(dbEntities: U[]): O2MLoadedState<T, U> {\n // Push added entities on the end to better match the db order of \"newer things come last\"\n const loaded = new Set(dbEntities);\n for (const e of this.#added) loaded.add(e);\n for (const e of this.#removed) loaded.delete(e);\n return new O2MLoadedState<T, U>(this.#o2m, [...loaded], false, [...this.#added], [...this.#removed]);\n }\n\n current(): U[] {\n return [...this.#added];\n }\n\n import(target: OneToManyCollection<T, U>, findEntity: (e: U) => U): O2MState<T, U> {\n return new O2MUnloadedAddedRemovedState<T, U>(\n target,\n mapEntities([...this.#added], findEntity),\n mapEntities([...this.#removed], findEntity),\n );\n }\n\n added(): U[] {\n return [...this.#added];\n }\n\n removed(): U[] {\n return [...this.#removed];\n }\n\n resetAddedRemoved(): void {\n // This is called after em.flush, so these changes have been pushed into the db; we don't\n // need to track them anymore b/c any future `o2m.load` will see up.\n this.#added = new Set();\n this.#removed = new Set();\n }\n}\n\n/** State when set() called before load - holds pending values to diff on load. */\nclass O2MPendingSetState<T extends Entity, U extends Entity> implements O2MState<T, U> {\n readonly isLoaded = false;\n readonly hasBeenSet = true;\n #o2m: OneToManyCollection<T, U>;\n #pendingValues: Set<U>;\n\n constructor(o2m: OneToManyCollection<T, U>, pendingValues: readonly U[], skipPercolate = false) {\n this.#o2m = o2m;\n this.#pendingValues = new Set(pendingValues);\n // We percolate on normal set() calls to immediately update the other side's m2o references.\n // We skip percolation on import() because those entities already have correct references\n // in the cloned EntityManager.\n if (!skipPercolate) this.#percolate();\n getEmInternalApi(o2m.entity.em).pendingLoads.add(o2m);\n }\n\n add(other: U): O2MState<T, U> {\n this.#pendingValues.add(other);\n return this;\n }\n\n remove(other: U, _opts: { requireLoaded: boolean }): O2MState<T, U> {\n this.#pendingValues.delete(other);\n return this;\n }\n\n removeIfLoaded(other: U): O2MState<T, U> {\n this.#pendingValues.delete(other);\n return this;\n }\n\n set(values: readonly U[]): O2MState<T, U> {\n this.#pendingValues = new Set(values);\n this.#percolate();\n return this;\n }\n\n doGet(): U[] {\n return [...this.#pendingValues];\n }\n\n find(id: IdOf<U>): U | undefined {\n for (const u of this.#pendingValues) {\n if (!u.isNewEntity && u.id === id) return u;\n }\n return undefined;\n }\n\n applyLoad(dbEntities: U[]): O2MLoadedState<T, U> {\n const o2m = this.#o2m;\n const entity = o2m.entity;\n // Handle cascade delete + immutable: entities removed from the collection that\n // cannot have their FK changed should be deleted instead\n const otherCannotChange = o2m.otherMeta.allFields[o2m.otherFieldName].immutable;\n const isCascade = isCascadeDelete(o2m, o2m.fieldName);\n // Calc our added/removed so that `.changes` in the new loaded state are correct\n const dbSet = new Set(dbEntities);\n const added: U[] = [];\n for (const other of this.#pendingValues) {\n if (!dbSet.has(other)) added.push(other);\n }\n const removed: U[] = [];\n for (const other of dbEntities) {\n if (!this.#pendingValues.has(other)) {\n removed.push(other);\n if (isCascade && otherCannotChange) {\n entity.em.delete(other);\n } else {\n o2m.percolateRemove(other);\n }\n }\n }\n return new O2MLoadedState<T, U>(o2m, [...this.#pendingValues], true, added, removed);\n }\n\n current(): U[] {\n return [...this.#pendingValues];\n }\n\n import(target: OneToManyCollection<T, U>, findEntity: (e: U) => U): O2MState<T, U> {\n return new O2MPendingSetState<T, U>(target, mapEntities([...this.#pendingValues], findEntity), true);\n }\n\n added(): U[] {\n return [...this.#pendingValues];\n }\n\n removed(): U[] {\n return [];\n }\n\n resetAddedRemoved(): void {}\n\n #percolate(): void {\n const o2m = this.#o2m;\n // All new values, we immediately tell them we're their new parent\n for (const other of this.#pendingValues) {\n o2m.percolateAdd(other);\n }\n // If we're an existing entity, we can scan for any in-memory entities that were previously\n // pointing to us, but now should not\n if (!o2m.entity.isNewEntity) {\n for (const other of o2m.entity.em.getEntities(o2m.otherMeta.cstr) as Iterable<U>) {\n if (this.#pendingValues.has(other)) continue;\n if (sameEntity((other as any)[o2m.otherFieldName].current(), o2m.entity)) {\n o2m.percolateRemove(other);\n }\n }\n }\n }\n}\n\n/** State when collection is loaded - all operations work directly on loaded array. */\nclass O2MLoadedState<T extends Entity, U extends Entity> implements O2MState<T, U> {\n readonly isLoaded = true;\n #o2m: OneToManyCollection<T, U>;\n #loaded: Set<U>;\n #added: Set<U>;\n #removed: Set<U>;\n #hasBeenSet: boolean;\n\n constructor(o2m: OneToManyCollection<T, U>, loaded: U[], hasBeenSet: boolean, added: U[] = [], removed: U[] = []) {\n this.#o2m = o2m;\n this.#loaded = new Set(loaded);\n this.#added = new Set(added);\n this.#removed = new Set(removed);\n this.#hasBeenSet = hasBeenSet;\n }\n\n get hasBeenSet(): boolean {\n return this.#hasBeenSet;\n }\n\n add(other: U): O2MState<T, U> {\n this.#added.add(other);\n this.#removed.delete(other);\n this.#loaded.add(other);\n return this;\n }\n\n remove(other: U, _opts: { requireLoaded: boolean }): O2MState<T, U> {\n this.#removed.add(other);\n this.#added.delete(other);\n this.#loaded.delete(other);\n return this;\n }\n\n removeIfLoaded(other: U): O2MState<T, U> {\n this.#added.delete(other);\n this.#removed.add(other);\n this.#loaded.delete(other);\n return this;\n }\n\n set(values: readonly U[]): O2MState<T, U> {\n this.#hasBeenSet = true;\n let valuesSet = new Set(values);\n\n const o2m = this.#o2m;\n const otherCannotChange = o2m.otherMeta.allFields[o2m.otherFieldName].immutable;\n const isCascade = isCascadeDelete(o2m, o2m.fieldName);\n if (isCascade && otherCannotChange) {\n const implicitlyDeleted = [...this.#loaded].filter((e) => !valuesSet.has(e));\n implicitlyDeleted.forEach((e) => o2m.entity.em.delete(e));\n // ...we restore the implicitlyDeleted for getWithDeleted\n values = [...values, ...implicitlyDeleted];\n valuesSet = new Set(values);\n }\n\n const loaded = new Set(this.#loaded);\n for (const other of loaded) {\n if (!valuesSet.has(other)) o2m.remove(other);\n }\n for (const other of values) {\n if (!loaded.has(other)) o2m.add(other);\n }\n return this;\n }\n\n doGet(): U[] {\n return [...this.#loaded];\n }\n\n find(id: IdOf<U>): U | undefined {\n for (const other of this.#loaded) {\n if (!other.isNewEntity && other.id === id) return other;\n }\n return undefined;\n }\n\n applyLoad(dbEntities: U[]): O2MLoadedState<T, U> {\n // On forceReload, replace loaded but preserve pending adds/removes\n const loaded = new Set(dbEntities);\n for (const e of this.#added) loaded.add(e);\n for (const e of this.#removed) loaded.delete(e);\n this.#loaded = loaded;\n return this;\n }\n\n current(): U[] {\n return [...this.#loaded];\n }\n\n import(target: OneToManyCollection<T, U>, findEntity: (e: U) => U): O2MState<T, U> {\n return new O2MLoadedState<T, U>(\n target,\n mapEntities([...this.#loaded], findEntity),\n this.#hasBeenSet,\n mapEntities([...this.#added], findEntity),\n mapEntities([...this.#removed], findEntity),\n );\n }\n\n added(): U[] {\n return [...this.#added];\n }\n\n removed(): U[] {\n return [...this.#removed];\n }\n\n resetAddedRemoved(): void {\n this.#added = new Set();\n this.#removed = new Set();\n }\n}\n\nfunction mapEntities<U extends Entity>(entities: U[], findEntity: (e: U) => U): U[] {\n const result = new Array<U>(entities.length);\n for (let i = 0; i < entities.length; i++) result[i] = findEntity(entities[i]);\n return result;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"OneToManyCollection.cjs","names":["lazyField","getMetadata","AbstractRelationImpl","#field","getInstanceData","#state","getEmInternalApi","#loadPromise","oneToManyBatchLoader","appendStack","#getSorted","#allSorted","oneToManyFindDataLoader","sameEntity","maybeResolveReferenceToId","getMetadataForField","compareValues","isCascadeDelete","RelationT","RelationU","#o2m","#added","#removed","#pendingValues","#percolate","#loaded","#hasBeenSet"],"sources":["../../src/relations/OneToManyCollection.ts"],"sourcesContent":["import { oneToManyBatchLoader } from \"../batchloaders/oneToManyBatchLoader.ts\";\nimport { oneToManyFindDataLoader } from \"../dataloaders/oneToManyFindDataLoader.ts\";\nimport {\n type Collection,\n type Entity,\n type EntityMetadata,\n type IdOf,\n type OneToManyField,\n appendStack,\n ensureNotDeleted,\n getEmInternalApi,\n getInstanceData,\n getMetadata,\n getMetadataForField,\n maybeResolveReferenceToId,\n sameEntity,\n} from \"../index.ts\";\nimport { type IsLoadedCachable } from \"../IsLoadedCache.ts\";\nimport { lazyField } from \"../newEntity.ts\";\nimport { compareValues } from \"../utils.ts\";\nimport { AbstractRelationImpl } from \"./AbstractRelationImpl.ts\";\nimport { isCascadeDelete } from \"./isCascadeDelete.ts\";\nimport { type ManyToOneReferenceImpl } from \"./ManyToOneReference.ts\";\nimport { RelationT, RelationU } from \"./RelationSymbols.ts\";\n\n/** An alias for creating `OneToManyCollection`s. */\nexport function hasMany<T extends Entity, U extends Entity>(): Collection<T, U> {\n return lazyField((entity: T, fieldName) => {\n const field = getMetadata(entity).allFields[fieldName] as OneToManyField;\n return new OneToManyCollection(entity, field);\n });\n}\n\nexport class OneToManyCollection<T extends Entity, U extends Entity>\n extends AbstractRelationImpl<T, U[]>\n implements Collection<T, U>, IsLoadedCachable\n{\n readonly #field: OneToManyField;\n #state: O2MState<T, U>;\n #loadPromise: any;\n // Constantly filtering+sorting our `.get` values can be surprisingly expensive if called\n // when processing many entities/writing code that calls it repeatedly, so we cache it\n // both the \"without deleted\" default (`getSorted`) and \"all deleted\" (`allSorted`).\n #getSorted: U[] | undefined;\n #allSorted: U[] | undefined;\n\n constructor(entity: T, field: OneToManyField) {\n super(entity);\n this.#field = field;\n if (getInstanceData(entity).isOrWasNew) {\n this.#state = new O2MLoadedState<T, U>(this, [], false);\n } else {\n const { em } = entity;\n // If any m2o.set(ourId) were made before our entity was loaded, pull in those changes\n const pending = getEmInternalApi(em).pendingPercolate.get(entity.idTagged!)?.get(this.fieldName);\n if (pending) {\n this.#state = new O2MUnloadedAddedRemovedState<T, U>(this, pending.adds as U[], pending.removes as U[]);\n getEmInternalApi(em).pendingPercolate.get(entity.idTagged!)?.delete(this.fieldName);\n } else {\n this.#state = new O2MUnloadedPristineState<T, U>(this);\n }\n }\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.#state.isLoaded || (opts.forceReload && !this.entity.isNewEntity)) {\n const maybePreloaded = this.getPreloaded();\n if (maybePreloaded) {\n this.#state = this.#state.applyLoad(maybePreloaded);\n } else {\n await (this.#loadPromise ??= oneToManyBatchLoader(this.entity.em, this).load(this.entity.idTagged!))\n .then(() => this.preload())\n .catch(function load(err: any) {\n throw appendStack(err as Error, new Error());\n })\n .finally(() => {\n this.#loadPromise = undefined;\n });\n }\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n return opts?.withDeleted ? this.getWithDeleted : this.get;\n }\n\n async find(id: IdOf<U>): Promise<U | undefined> {\n ensureNotDeleted(this.entity, \"pending\");\n const inMemory = this.#state.find(id);\n if (inMemory) return inMemory;\n if (this.#state.isLoaded) return undefined;\n const key = `id=${id},${this.#field.otherColumnName}=${this.entity.id}`;\n return oneToManyFindDataLoader(this.entity.em, this)\n .load(key)\n .catch(function find(err) {\n throw appendStack(err, new Error());\n });\n }\n\n async includes(other: U): Promise<boolean> {\n return sameEntity(this.entity, this.getOtherRelation(other).current());\n }\n\n get isLoaded(): boolean {\n return this.#state.isLoaded;\n }\n\n resetIsLoaded(): void {\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n get isPreloaded(): boolean {\n return !!this.getPreloaded();\n }\n\n preload(): void {\n const preloaded = this.getPreloaded();\n if (preloaded) {\n this.#state = this.#state.applyLoad(preloaded);\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n }\n\n /** Copy another em's `source` collection into our state. */\n import(source: OneToManyCollection<T, U>, findEntity: (e: U) => U): void {\n this.#state = source.#state.import(this, findEntity);\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n // todo: this only be a readonly U[]\n get get(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n if (this.#getSorted !== undefined) return this.#getSorted;\n this.#getSorted = Object.freeze(this.filterDeleted(this.#state.doGet(), { withDeleted: false })) as U[];\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#getSorted;\n }\n\n get getWithDeleted(): U[] {\n ensureNotDeleted(this.entity, \"pending\");\n if (this.#allSorted !== undefined) return this.#allSorted;\n this.#allSorted = Object.freeze(this.filterDeleted(this.#state.doGet(), { withDeleted: true })) as U[];\n getEmInternalApi(this.entity.em).isLoadedCache.addNaive(this);\n return this.#allSorted;\n }\n\n set(values: readonly U[]): void {\n ensureNotDeleted(this.entity);\n this.#state = this.#state.set(values);\n this.registerAsMutated();\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n add(other: U): void {\n ensureNotDeleted(this.entity);\n this.#state = this.#state.add(other);\n this.percolateAdd(other);\n this.registerAsMutated();\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n remove(other: U, opts: { requireLoaded: boolean } = { requireLoaded: true }) {\n ensureNotDeleted(this.entity, \"pending\");\n this.#state = this.#state.remove(other, opts);\n this.percolateRemove(other);\n this.registerAsMutated();\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n removeAll(): void {\n ensureNotDeleted(this.entity);\n if (!this.#state.isLoaded) {\n throw new Error(\"removeAll was called when not loaded\");\n }\n for (const other of [...this.#state.doGet()]) {\n this.remove(other);\n }\n }\n\n // internal impl\n\n /** @internal */\n percolateAdd(other: U): void {\n this.getOtherRelation(other).set(this.entity);\n }\n\n /** @internal */\n percolateRemove(other: U): void {\n this.getOtherRelation(other).set(undefined);\n }\n\n /** @internal */\n registerAsMutated(): void {\n getEmInternalApi(this.entity.em).mutatedCollections.add(this);\n }\n\n setFromOpts(others: U[]): void {\n this.#state = new O2MLoadedState<T, U>(this, [], false);\n others.forEach((o) => this.add(o));\n }\n\n removeIfLoaded(other: U) {\n this.#state = this.#state.removeIfLoaded(other);\n this.registerAsMutated();\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n maybeCascadeDelete(): void {\n if (this.isCascadeDelete) {\n this.current({ withDeleted: true }).forEach((e) => this.entity.em.delete(e));\n }\n }\n\n // We already unhooked all children in our addedBeforeLoaded list; now load the full list if necessary.\n async cleanupOnEntityDeleted(): Promise<void> {\n // if we are going to delete this relation as well, then we don't need to clean it up\n if (this.isCascadeDelete) return;\n const current = await this.load({ withDeleted: true });\n current.forEach((other) => {\n const m2o = this.getOtherRelation(other);\n if (maybeResolveReferenceToId(m2o.current({ withDeleted: true })) === this.entity.idMaybe) {\n m2o.set(undefined);\n }\n });\n this.#state = new O2MLoadedState<T, U>(this, [], false);\n this.#getSorted = undefined;\n this.#allSorted = undefined;\n }\n\n // These are public to our internal implementation but not exposed in the Collection API\n public get fieldName(): keyof T & string {\n return this.#field.fieldName as keyof T & string;\n }\n\n public get otherFieldName(): keyof U & string {\n return this.#field.otherFieldName as keyof U & string;\n }\n\n current(opts?: { withDeleted?: boolean }): U[] {\n return this.filterDeleted(this.#state.current(), opts);\n }\n\n public get meta(): EntityMetadata {\n return getMetadataForField(getMetadata(this.entity), this.fieldName);\n }\n\n public get otherMeta(): EntityMetadata {\n return this.#field.otherMetadata();\n }\n\n public get hasBeenSet(): boolean {\n return this.#state.hasBeenSet;\n }\n\n public toString(): string {\n return `OneToManyCollection(entity: ${this.entity}, fieldName: ${this.fieldName}, otherType: ${this.otherMeta.type}, otherFieldName: ${this.otherFieldName})`;\n }\n\n /** Called after `em.flush` to reset our dirty tracking. */\n public resetAddedRemoved(): void {\n this.#state.resetAddedRemoved();\n }\n\n /** Removes pending-hard-delete or soft-deleted entities, unless explicitly asked for. */\n private filterDeleted(entities: U[], opts?: { withDeleted?: boolean }): U[] {\n // Relations configured with `softDeletes: \"include\"` keep soft-deleted entities in `.get`/`.load`.\n const includeSoftDeleted = this.#field.softDeletes === \"include\";\n const list =\n opts?.withDeleted === true\n ? [...entities]\n : entities.filter((e) => !e.isDeletedEntity && (includeSoftDeleted || !(e as any).isSoftDeletedEntity));\n if (this.#field.orderBy) {\n const { field, direction } = this.#field.orderBy;\n list.sort((a, b) => compareValues((a as any)[field], (b as any)[field], direction));\n }\n return list;\n }\n\n /** Returns the other relation that points back at us, i.e. we're `Author.image` and this is `Image.author_id`. */\n private getOtherRelation(other: U): ManyToOneReferenceImpl<U, T, any> {\n return (other as U)[this.otherFieldName] as any;\n }\n\n private get isCascadeDelete(): boolean {\n return isCascadeDelete(this, this.fieldName);\n }\n\n private getPreloaded(): U[] | undefined {\n if (this.entity.isNewEntity) return undefined;\n return getEmInternalApi(this.entity.em).getPreloadedRelation<U>(this.entity.idTagged, this.fieldName);\n }\n\n // Exposed for changes\n added(): U[] {\n return this.#state.added();\n }\n\n removed(): U[] {\n return this.#state.removed();\n }\n\n [RelationT]: T = null!;\n [RelationU]: U = null!;\n}\n\n/**\n * State interface for OneToManyCollection state machine.\n *\n * States handle only data tracking — side effects (percolation, mutation registration)\n * are handled by the collection methods that call into these states.\n *\n * State transitions:\n * ```\n * Constructor (new entity) → Loaded (empty [])\n * Constructor (existing entity) → UnloadedPristine\n *\n * UnloadedPristine + add/remove → UnloadedAddedRemoved\n * UnloadedPristine + set → PendingSet\n * UnloadedPristine + load/preload → Loaded\n *\n * UnloadedAddedRemoved + set → PendingSet\n * UnloadedAddedRemoved + load/preload → Loaded (merges adds/removes)\n *\n * PendingSet + add/remove → PendingSet (self)\n * PendingSet + set → PendingSet (self, replace)\n * PendingSet + load/preload → Loaded (diffs pending vs DB)\n *\n * Loaded + forceReload → Loaded (refreshed, re-merges pending)\n * ```\n */\ninterface O2MState<T extends Entity, U extends Entity> {\n add(other: U): O2MState<T, U>;\n remove(other: U, opts: { requireLoaded: boolean }): O2MState<T, U>;\n removeIfLoaded(other: U): O2MState<T, U>;\n set(values: readonly U[]): O2MState<T, U>;\n doGet(): U[];\n find(id: IdOf<U>): U | undefined;\n applyLoad(dbEntities: U[]): O2MLoadedState<T, U>;\n current(): U[];\n import(target: OneToManyCollection<T, U>, findEntity: (e: U) => U): O2MState<T, U>;\n readonly isLoaded: boolean;\n readonly hasBeenSet: boolean;\n added(): U[];\n removed(): U[];\n resetAddedRemoved(): void;\n}\n\n/** Initial state for existing entities - no data loaded yet. */\nclass O2MUnloadedPristineState<T extends Entity, U extends Entity> implements O2MState<T, U> {\n readonly isLoaded = false;\n readonly hasBeenSet = false;\n #o2m: OneToManyCollection<T, U>;\n\n constructor(o2m: OneToManyCollection<T, U>) {\n this.#o2m = o2m;\n }\n\n add(other: U): O2MState<T, U> {\n return new O2MUnloadedAddedRemovedState<T, U>(this.#o2m, [other], []);\n }\n\n remove(_other: U, opts: { requireLoaded: boolean }): O2MState<T, U> {\n if (opts.requireLoaded) {\n throw new Error(\"remove was called when not loaded\");\n }\n return new O2MUnloadedAddedRemovedState<T, U>(this.#o2m, [], [_other]);\n }\n\n removeIfLoaded(other: U): O2MState<T, U> {\n return new O2MUnloadedAddedRemovedState<T, U>(this.#o2m, [], [other]);\n }\n\n set(values: readonly U[]): O2MState<T, U> {\n return new O2MPendingSetState<T, U>(this.#o2m, values);\n }\n\n doGet(): U[] {\n throw new Error(\"get was called when not loaded\");\n }\n\n find(_id: IdOf<U>): U | undefined {\n return undefined;\n }\n\n applyLoad(dbEntities: U[]): O2MLoadedState<T, U> {\n return new O2MLoadedState<T, U>(this.#o2m, dbEntities, false);\n }\n\n current(): U[] {\n return [];\n }\n\n import(target: OneToManyCollection<T, U>, _findEntity: (e: U) => U): O2MState<T, U> {\n return new O2MUnloadedPristineState<T, U>(target);\n }\n\n added(): U[] {\n return [];\n }\n\n removed(): U[] {\n return [];\n }\n\n resetAddedRemoved(): void {}\n}\n\n/** State when add/remove called before load - tracks changes to merge later. */\nclass O2MUnloadedAddedRemovedState<T extends Entity, U extends Entity> implements O2MState<T, U> {\n readonly isLoaded = false;\n readonly hasBeenSet = false;\n #o2m: OneToManyCollection<T, U>;\n #added: Set<U>;\n #removed: Set<U>;\n\n constructor(o2m: OneToManyCollection<T, U>, added: U[], removed: U[]) {\n this.#o2m = o2m;\n this.#added = new Set(added);\n this.#removed = new Set(removed);\n }\n\n add(other: U): O2MState<T, U> {\n this.#added.add(other);\n this.#removed.delete(other);\n return this;\n }\n\n remove(other: U, opts: { requireLoaded: boolean }): O2MState<T, U> {\n if (opts.requireLoaded) {\n throw new Error(\"remove was called when not loaded\");\n }\n this.#removed.add(other);\n this.#added.delete(other);\n return this;\n }\n\n removeIfLoaded(other: U): O2MState<T, U> {\n this.#added.delete(other);\n this.#removed.add(other);\n return this;\n }\n\n set(values: readonly U[]): O2MState<T, U> {\n // We should do the implicit deletion check?\n // Should we keep #added/#removed?\n return new O2MPendingSetState<T, U>(this.#o2m, values);\n }\n\n doGet(): U[] {\n throw new Error(\"get was called when not loaded\");\n }\n\n find(id: IdOf<U>): U | undefined {\n for (const u of this.#added) {\n if (!u.isNewEntity && u.id === id) return u;\n }\n return undefined;\n }\n\n applyLoad(dbEntities: U[]): O2MLoadedState<T, U> {\n // Push added entities on the end to better match the db order of \"newer things come last\"\n const loaded = new Set(dbEntities);\n for (const e of this.#added) loaded.add(e);\n for (const e of this.#removed) loaded.delete(e);\n return new O2MLoadedState<T, U>(this.#o2m, [...loaded], false, [...this.#added], [...this.#removed]);\n }\n\n current(): U[] {\n return [...this.#added];\n }\n\n import(target: OneToManyCollection<T, U>, findEntity: (e: U) => U): O2MState<T, U> {\n return new O2MUnloadedAddedRemovedState<T, U>(\n target,\n mapEntities([...this.#added], findEntity),\n mapEntities([...this.#removed], findEntity),\n );\n }\n\n added(): U[] {\n return [...this.#added];\n }\n\n removed(): U[] {\n return [...this.#removed];\n }\n\n resetAddedRemoved(): void {\n // This is called after em.flush, so these changes have been pushed into the db; we don't\n // need to track them anymore b/c any future `o2m.load` will see up.\n this.#added = new Set();\n this.#removed = new Set();\n }\n}\n\n/** State when set() called before load - holds pending values to diff on load. */\nclass O2MPendingSetState<T extends Entity, U extends Entity> implements O2MState<T, U> {\n readonly isLoaded = false;\n readonly hasBeenSet = true;\n #o2m: OneToManyCollection<T, U>;\n #pendingValues: Set<U>;\n\n constructor(o2m: OneToManyCollection<T, U>, pendingValues: readonly U[], skipPercolate = false) {\n this.#o2m = o2m;\n this.#pendingValues = new Set(pendingValues);\n // We percolate on normal set() calls to immediately update the other side's m2o references.\n // We skip percolation on import() because those entities already have correct references\n // in the cloned EntityManager.\n if (!skipPercolate) this.#percolate();\n getEmInternalApi(o2m.entity.em).pendingLoads.add(o2m);\n }\n\n add(other: U): O2MState<T, U> {\n this.#pendingValues.add(other);\n return this;\n }\n\n remove(other: U, _opts: { requireLoaded: boolean }): O2MState<T, U> {\n this.#pendingValues.delete(other);\n return this;\n }\n\n removeIfLoaded(other: U): O2MState<T, U> {\n this.#pendingValues.delete(other);\n return this;\n }\n\n set(values: readonly U[]): O2MState<T, U> {\n this.#pendingValues = new Set(values);\n this.#percolate();\n return this;\n }\n\n doGet(): U[] {\n return [...this.#pendingValues];\n }\n\n find(id: IdOf<U>): U | undefined {\n for (const u of this.#pendingValues) {\n if (!u.isNewEntity && u.id === id) return u;\n }\n return undefined;\n }\n\n applyLoad(dbEntities: U[]): O2MLoadedState<T, U> {\n const o2m = this.#o2m;\n const entity = o2m.entity;\n // Handle cascade delete + immutable: entities removed from the collection that\n // cannot have their FK changed should be deleted instead\n const otherCannotChange = o2m.otherMeta.allFields[o2m.otherFieldName].immutable;\n const isCascade = isCascadeDelete(o2m, o2m.fieldName);\n // Calc our added/removed so that `.changes` in the new loaded state are correct\n const dbSet = new Set(dbEntities);\n const added: U[] = [];\n for (const other of this.#pendingValues) {\n if (!dbSet.has(other)) added.push(other);\n }\n const removed: U[] = [];\n for (const other of dbEntities) {\n if (!this.#pendingValues.has(other)) {\n removed.push(other);\n if (isCascade && otherCannotChange) {\n entity.em.delete(other);\n } else {\n o2m.percolateRemove(other);\n }\n }\n }\n return new O2MLoadedState<T, U>(o2m, [...this.#pendingValues], true, added, removed);\n }\n\n current(): U[] {\n return [...this.#pendingValues];\n }\n\n import(target: OneToManyCollection<T, U>, findEntity: (e: U) => U): O2MState<T, U> {\n return new O2MPendingSetState<T, U>(target, mapEntities([...this.#pendingValues], findEntity), true);\n }\n\n added(): U[] {\n return [...this.#pendingValues];\n }\n\n removed(): U[] {\n return [];\n }\n\n resetAddedRemoved(): void {}\n\n #percolate(): void {\n const o2m = this.#o2m;\n // All new values, we immediately tell them we're their new parent\n for (const other of this.#pendingValues) {\n o2m.percolateAdd(other);\n }\n // If we're an existing entity, we can scan for any in-memory entities that were previously\n // pointing to us, but now should not\n if (!o2m.entity.isNewEntity) {\n for (const other of o2m.entity.em.getEntities(o2m.otherMeta.cstr) as Iterable<U>) {\n if (this.#pendingValues.has(other)) continue;\n if (sameEntity((other as any)[o2m.otherFieldName].current(), o2m.entity)) {\n o2m.percolateRemove(other);\n }\n }\n }\n }\n}\n\n/** State when collection is loaded - all operations work directly on loaded array. */\nclass O2MLoadedState<T extends Entity, U extends Entity> implements O2MState<T, U> {\n readonly isLoaded = true;\n #o2m: OneToManyCollection<T, U>;\n #loaded: Set<U>;\n #added: Set<U>;\n #removed: Set<U>;\n #hasBeenSet: boolean;\n\n constructor(o2m: OneToManyCollection<T, U>, loaded: U[], hasBeenSet: boolean, added: U[] = [], removed: U[] = []) {\n this.#o2m = o2m;\n this.#loaded = new Set(loaded);\n this.#added = new Set(added);\n this.#removed = new Set(removed);\n this.#hasBeenSet = hasBeenSet;\n }\n\n get hasBeenSet(): boolean {\n return this.#hasBeenSet;\n }\n\n add(other: U): O2MState<T, U> {\n this.#added.add(other);\n this.#removed.delete(other);\n this.#loaded.add(other);\n return this;\n }\n\n remove(other: U, _opts: { requireLoaded: boolean }): O2MState<T, U> {\n this.#removed.add(other);\n this.#added.delete(other);\n this.#loaded.delete(other);\n return this;\n }\n\n removeIfLoaded(other: U): O2MState<T, U> {\n this.#added.delete(other);\n this.#removed.add(other);\n this.#loaded.delete(other);\n return this;\n }\n\n set(values: readonly U[]): O2MState<T, U> {\n this.#hasBeenSet = true;\n let valuesSet = new Set(values);\n\n const o2m = this.#o2m;\n const otherCannotChange = o2m.otherMeta.allFields[o2m.otherFieldName].immutable;\n const isCascade = isCascadeDelete(o2m, o2m.fieldName);\n if (isCascade && otherCannotChange) {\n const implicitlyDeleted = [...this.#loaded].filter((e) => !valuesSet.has(e));\n implicitlyDeleted.forEach((e) => o2m.entity.em.delete(e));\n // ...we restore the implicitlyDeleted for getWithDeleted\n values = [...values, ...implicitlyDeleted];\n valuesSet = new Set(values);\n }\n\n const loaded = new Set(this.#loaded);\n for (const other of loaded) {\n if (!valuesSet.has(other)) o2m.remove(other);\n }\n for (const other of values) {\n if (!loaded.has(other)) o2m.add(other);\n }\n return this;\n }\n\n doGet(): U[] {\n return [...this.#loaded];\n }\n\n find(id: IdOf<U>): U | undefined {\n for (const other of this.#loaded) {\n if (!other.isNewEntity && other.id === id) return other;\n }\n return undefined;\n }\n\n applyLoad(dbEntities: U[]): O2MLoadedState<T, U> {\n // On forceReload, replace loaded but preserve pending adds/removes\n const loaded = new Set(dbEntities);\n for (const e of this.#added) loaded.add(e);\n for (const e of this.#removed) loaded.delete(e);\n this.#loaded = loaded;\n return this;\n }\n\n current(): U[] {\n return [...this.#loaded];\n }\n\n import(target: OneToManyCollection<T, U>, findEntity: (e: U) => U): O2MState<T, U> {\n return new O2MLoadedState<T, U>(\n target,\n mapEntities([...this.#loaded], findEntity),\n this.#hasBeenSet,\n mapEntities([...this.#added], findEntity),\n mapEntities([...this.#removed], findEntity),\n );\n }\n\n added(): U[] {\n return [...this.#added];\n }\n\n removed(): U[] {\n return [...this.#removed];\n }\n\n resetAddedRemoved(): void {\n this.#added = new Set();\n this.#removed = new Set();\n }\n}\n\nfunction mapEntities<U extends Entity>(entities: U[], findEntity: (e: U) => U): U[] {\n const result = new Array<U>(entities.length);\n for (let i = 0; i < entities.length; i++) result[i] = findEntity(entities[i]);\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA0BA,SAAgB,UAAgE;CAC9E,OAAOA,kBAAAA,WAAW,QAAW,cAAc;EACzC,MAAM,QAAQC,uBAAAA,YAAY,MAAM,CAAC,CAAC,UAAU;EAC5C,OAAO,IAAI,oBAAoB,QAAQ,KAAK;CAC9C,CAAC;AACH;AAEA,IAAa,sBAAb,cACUC,uCAAAA,qBAEV;CACE;CACA;CACA;CAIA;CACA;CAEA,YAAY,QAAW,OAAuB;EAC5C,MAAM,MAAM;EACZ,KAAKC,SAAS;EACd,IAAIC,mBAAAA,gBAAgB,MAAM,CAAC,CAAC,YAC1B,KAAKC,SAAS,IAAI,eAAqB,MAAM,CAAC,GAAG,KAAK;OACjD;GACL,MAAM,EAAE,OAAO;GAEf,MAAM,UAAUC,sBAAAA,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,IAAI,OAAO,QAAS,CAAC,EAAE,IAAI,KAAK,SAAS;GAC/F,IAAI,SAAS;IACX,KAAKD,SAAS,IAAI,6BAAmC,MAAM,QAAQ,MAAa,QAAQ,OAAc;IACtG,sBAAA,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,IAAI,OAAO,QAAS,CAAC,EAAE,OAAO,KAAK,SAAS;GACpF,OACE,KAAKA,SAAS,IAAI,yBAA+B,IAAI;EAEzD;CACF;CAGA,MAAM,KAAK,OAAyD,CAAC,GAA0B;EAC7F,cAAA,iBAAiB,KAAK,QAAQ,SAAS;EACvC,IAAI,CAAC,KAAKA,OAAO,YAAa,KAAK,eAAe,CAAC,KAAK,OAAO,aAAc;GAC3E,MAAM,iBAAiB,KAAK,aAAa;GACzC,IAAI,gBACF,KAAKA,SAAS,KAAKA,OAAO,UAAU,cAAc;QAElD,OAAO,KAAKE,iBAAiBC,0CAAAA,qBAAqB,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,QAAS,EAAA,CAC/F,WAAW,KAAK,QAAQ,CAAC,CAAC,CAC1B,MAAM,SAAS,KAAK,KAAU;IAC7B,MAAMC,sBAAAA,YAAY,qBAAc,IAAI,MAAM,CAAC;GAC7C,CAAC,CAAC,CACD,cAAc;IACb,KAAKF,eAAe,KAAA;GACtB,CAAC;GAEL,KAAKG,aAAa,KAAA;GAClB,KAAKC,aAAa,KAAA;EACpB;EACA,OAAO,MAAM,cAAc,KAAK,iBAAiB,KAAK;CACxD;CAEA,MAAM,KAAK,IAAqC;EAC9C,cAAA,iBAAiB,KAAK,QAAQ,SAAS;EACvC,MAAM,WAAW,KAAKN,OAAO,KAAK,EAAE;EACpC,IAAI,UAAU,OAAO;EACrB,IAAI,KAAKA,OAAO,UAAU,OAAO,KAAA;EACjC,MAAM,MAAM,MAAM,GAAG,GAAG,KAAKF,OAAO,gBAAgB,GAAG,KAAK,OAAO;EACnE,OAAOS,4CAAAA,wBAAwB,KAAK,OAAO,IAAI,IAAI,CAAC,CACjD,KAAK,GAAG,CAAC,CACT,MAAM,SAAS,KAAK,KAAK;GACxB,MAAMH,sBAAAA,YAAY,qBAAK,IAAI,MAAM,CAAC;EACpC,CAAC;CACL;CAEA,MAAM,SAAS,OAA4B;EACzC,OAAOI,sBAAAA,WAAW,KAAK,QAAQ,KAAK,iBAAiB,KAAK,CAAC,CAAC,QAAQ,CAAC;CACvE;CAEA,IAAI,WAAoB;EACtB,OAAO,KAAKR,OAAO;CACrB;CAEA,gBAAsB;EACpB,KAAKK,aAAa,KAAA;EAClB,KAAKC,aAAa,KAAA;CACpB;CAEA,IAAI,cAAuB;EACzB,OAAO,CAAC,CAAC,KAAK,aAAa;CAC7B;CAEA,UAAgB;EACd,MAAM,YAAY,KAAK,aAAa;EACpC,IAAI,WAAW;GACb,KAAKN,SAAS,KAAKA,OAAO,UAAU,SAAS;GAC7C,KAAKK,aAAa,KAAA;GAClB,KAAKC,aAAa,KAAA;EACpB;CACF;;CAGA,OAAO,QAAmC,YAA+B;EACvE,KAAKN,SAAS,OAAOA,OAAO,OAAO,MAAM,UAAU;EACnD,KAAKK,aAAa,KAAA;EAClB,KAAKC,aAAa,KAAA;CACpB;CAGA,IAAI,MAAW;EACb,cAAA,iBAAiB,KAAK,QAAQ,SAAS;EACvC,IAAI,KAAKD,eAAe,KAAA,GAAW,OAAO,KAAKA;EAC/C,KAAKA,aAAa,OAAO,OAAO,KAAK,cAAc,KAAKL,OAAO,MAAM,GAAG,EAAE,aAAa,MAAM,CAAC,CAAC;EAC/F,sBAAA,iBAAiB,KAAK,OAAO,EAAE,CAAC,CAAC,cAAc,SAAS,IAAI;EAC5D,OAAO,KAAKK;CACd;CAEA,IAAI,iBAAsB;EACxB,cAAA,iBAAiB,KAAK,QAAQ,SAAS;EACvC,IAAI,KAAKC,eAAe,KAAA,GAAW,OAAO,KAAKA;EAC/C,KAAKA,aAAa,OAAO,OAAO,KAAK,cAAc,KAAKN,OAAO,MAAM,GAAG,EAAE,aAAa,KAAK,CAAC,CAAC;EAC9F,sBAAA,iBAAiB,KAAK,OAAO,EAAE,CAAC,CAAC,cAAc,SAAS,IAAI;EAC5D,OAAO,KAAKM;CACd;CAEA,IAAI,QAA4B;EAC9B,cAAA,iBAAiB,KAAK,MAAM;EAC5B,KAAKN,SAAS,KAAKA,OAAO,IAAI,MAAM;EACpC,KAAK,kBAAkB;EACvB,KAAKK,aAAa,KAAA;EAClB,KAAKC,aAAa,KAAA;CACpB;CAEA,IAAI,OAAgB;EAClB,cAAA,iBAAiB,KAAK,MAAM;EAC5B,KAAKN,SAAS,KAAKA,OAAO,IAAI,KAAK;EACnC,KAAK,aAAa,KAAK;EACvB,KAAK,kBAAkB;EACvB,KAAKK,aAAa,KAAA;EAClB,KAAKC,aAAa,KAAA;CACpB;CAEA,OAAO,OAAU,OAAmC,EAAE,eAAe,KAAK,GAAG;EAC3E,cAAA,iBAAiB,KAAK,QAAQ,SAAS;EACvC,KAAKN,SAAS,KAAKA,OAAO,OAAO,OAAO,IAAI;EAC5C,KAAK,gBAAgB,KAAK;EAC1B,KAAK,kBAAkB;EACvB,KAAKK,aAAa,KAAA;EAClB,KAAKC,aAAa,KAAA;CACpB;CAEA,YAAkB;EAChB,cAAA,iBAAiB,KAAK,MAAM;EAC5B,IAAI,CAAC,KAAKN,OAAO,UACf,MAAM,IAAI,MAAM,sCAAsC;EAExD,KAAK,MAAM,SAAS,CAAC,GAAG,KAAKA,OAAO,MAAM,CAAC,GACzC,KAAK,OAAO,KAAK;CAErB;;CAKA,aAAa,OAAgB;EAC3B,KAAK,iBAAiB,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM;CAC9C;;CAGA,gBAAgB,OAAgB;EAC9B,KAAK,iBAAiB,KAAK,CAAC,CAAC,IAAI,KAAA,CAAS;CAC5C;;CAGA,oBAA0B;EACxB,sBAAA,iBAAiB,KAAK,OAAO,EAAE,CAAC,CAAC,mBAAmB,IAAI,IAAI;CAC9D;CAEA,YAAY,QAAmB;EAC7B,KAAKA,SAAS,IAAI,eAAqB,MAAM,CAAC,GAAG,KAAK;EACtD,OAAO,SAAS,MAAM,KAAK,IAAI,CAAC,CAAC;CACnC;CAEA,eAAe,OAAU;EACvB,KAAKA,SAAS,KAAKA,OAAO,eAAe,KAAK;EAC9C,KAAK,kBAAkB;EACvB,KAAKK,aAAa,KAAA;EAClB,KAAKC,aAAa,KAAA;CACpB;CAEA,qBAA2B;EACzB,IAAI,KAAK,iBACP,KAAK,QAAQ,EAAE,aAAa,KAAK,CAAC,CAAC,CAAC,SAAS,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC;CAE/E;CAGA,MAAM,yBAAwC;EAE5C,IAAI,KAAK,iBAAiB;EAE1B,CAAA,MADsB,KAAK,KAAK,EAAE,aAAa,KAAK,CAAC,EAAA,CAC7C,SAAS,UAAU;GACzB,MAAM,MAAM,KAAK,iBAAiB,KAAK;GACvC,IAAIG,aAAAA,0BAA0B,IAAI,QAAQ,EAAE,aAAa,KAAK,CAAC,CAAC,MAAM,KAAK,OAAO,SAChF,IAAI,IAAI,KAAA,CAAS;EAErB,CAAC;EACD,KAAKT,SAAS,IAAI,eAAqB,MAAM,CAAC,GAAG,KAAK;EACtD,KAAKK,aAAa,KAAA;EAClB,KAAKC,aAAa,KAAA;CACpB;CAGA,IAAW,YAA8B;EACvC,OAAO,KAAKR,OAAO;CACrB;CAEA,IAAW,iBAAmC;EAC5C,OAAO,KAAKA,OAAO;CACrB;CAEA,QAAQ,MAAuC;EAC7C,OAAO,KAAK,cAAc,KAAKE,OAAO,QAAQ,GAAG,IAAI;CACvD;CAEA,IAAW,OAAuB;EAChC,OAAOU,uBAAAA,oBAAoBd,uBAAAA,YAAY,KAAK,MAAM,GAAG,KAAK,SAAS;CACrE;CAEA,IAAW,YAA4B;EACrC,OAAO,KAAKE,OAAO,cAAc;CACnC;CAEA,IAAW,aAAsB;EAC/B,OAAO,KAAKE,OAAO;CACrB;CAEA,WAA0B;EACxB,OAAO,+BAA+B,KAAK,OAAO,eAAe,KAAK,UAAU,eAAe,KAAK,UAAU,KAAK,oBAAoB,KAAK,eAAe;CAC7J;;CAGA,oBAAiC;EAC/B,KAAKA,OAAO,kBAAkB;CAChC;;CAGA,cAAsB,UAAe,MAAuC;EAE1E,MAAM,qBAAqB,KAAKF,OAAO,gBAAgB;EACvD,MAAM,OACJ,MAAM,gBAAgB,OAClB,CAAC,GAAG,QAAQ,IACZ,SAAS,QAAQ,MAAM,CAAC,EAAE,oBAAoB,sBAAsB,CAAE,EAAU,oBAAoB;EAC1G,IAAI,KAAKA,OAAO,SAAS;GACvB,MAAM,EAAE,OAAO,cAAc,KAAKA,OAAO;GACzC,KAAK,MAAM,GAAG,MAAMa,cAAAA,cAAe,EAAU,QAAS,EAAU,QAAQ,SAAS,CAAC;EACpF;EACA,OAAO;CACT;;CAGA,iBAAyB,OAA6C;EACpE,OAAQ,MAAY,KAAK;CAC3B;CAEA,IAAY,kBAA2B;EACrC,OAAOC,kCAAAA,gBAAgB,MAAM,KAAK,SAAS;CAC7C;CAEA,eAAwC;EACtC,IAAI,KAAK,OAAO,aAAa,OAAO,KAAA;EACpC,OAAOX,sBAAAA,iBAAiB,KAAK,OAAO,EAAE,CAAC,CAAC,qBAAwB,KAAK,OAAO,UAAU,KAAK,SAAS;CACtG;CAGA,QAAa;EACX,OAAO,KAAKD,OAAO,MAAM;CAC3B;CAEA,UAAe;EACb,OAAO,KAAKA,OAAO,QAAQ;CAC7B;CAEA,CAACa,kCAAAA,aAAgB;CACjB,CAACC,kCAAAA,aAAgB;AACnB;;AA6CA,IAAM,2BAAN,MAAM,yBAAuF;CAC3F,WAAoB;CACpB,aAAsB;CACtB;CAEA,YAAY,KAAgC;EAC1C,KAAKC,OAAO;CACd;CAEA,IAAI,OAA0B;EAC5B,OAAO,IAAI,6BAAmC,KAAKA,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;CACtE;CAEA,OAAO,QAAW,MAAkD;EAClE,IAAI,KAAK,eACP,MAAM,IAAI,MAAM,mCAAmC;EAErD,OAAO,IAAI,6BAAmC,KAAKA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;CACvE;CAEA,eAAe,OAA0B;EACvC,OAAO,IAAI,6BAAmC,KAAKA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;CACtE;CAEA,IAAI,QAAsC;EACxC,OAAO,IAAI,mBAAyB,KAAKA,MAAM,MAAM;CACvD;CAEA,QAAa;EACX,MAAM,IAAI,MAAM,gCAAgC;CAClD;CAEA,KAAK,KAA6B,CAElC;CAEA,UAAU,YAAuC;EAC/C,OAAO,IAAI,eAAqB,KAAKA,MAAM,YAAY,KAAK;CAC9D;CAEA,UAAe;EACb,OAAO,CAAC;CACV;CAEA,OAAO,QAAmC,aAA0C;EAClF,OAAO,IAAI,yBAA+B,MAAM;CAClD;CAEA,QAAa;EACX,OAAO,CAAC;CACV;CAEA,UAAe;EACb,OAAO,CAAC;CACV;CAEA,oBAA0B,CAAC;AAC7B;;AAGA,IAAM,+BAAN,MAAM,6BAA2F;CAC/F,WAAoB;CACpB,aAAsB;CACtB;CACA;CACA;CAEA,YAAY,KAAgC,OAAY,SAAc;EACpE,KAAKA,OAAO;EACZ,KAAKC,SAAS,IAAI,IAAI,KAAK;EAC3B,KAAKC,WAAW,IAAI,IAAI,OAAO;CACjC;CAEA,IAAI,OAA0B;EAC5B,KAAKD,OAAO,IAAI,KAAK;EACrB,KAAKC,SAAS,OAAO,KAAK;EAC1B,OAAO;CACT;CAEA,OAAO,OAAU,MAAkD;EACjE,IAAI,KAAK,eACP,MAAM,IAAI,MAAM,mCAAmC;EAErD,KAAKA,SAAS,IAAI,KAAK;EACvB,KAAKD,OAAO,OAAO,KAAK;EACxB,OAAO;CACT;CAEA,eAAe,OAA0B;EACvC,KAAKA,OAAO,OAAO,KAAK;EACxB,KAAKC,SAAS,IAAI,KAAK;EACvB,OAAO;CACT;CAEA,IAAI,QAAsC;EAGxC,OAAO,IAAI,mBAAyB,KAAKF,MAAM,MAAM;CACvD;CAEA,QAAa;EACX,MAAM,IAAI,MAAM,gCAAgC;CAClD;CAEA,KAAK,IAA4B;EAC/B,KAAK,MAAM,KAAK,KAAKC,QACnB,IAAI,CAAC,EAAE,eAAe,EAAE,OAAO,IAAI,OAAO;CAG9C;CAEA,UAAU,YAAuC;EAE/C,MAAM,SAAS,IAAI,IAAI,UAAU;EACjC,KAAK,MAAM,KAAK,KAAKA,QAAQ,OAAO,IAAI,CAAC;EACzC,KAAK,MAAM,KAAK,KAAKC,UAAU,OAAO,OAAO,CAAC;EAC9C,OAAO,IAAI,eAAqB,KAAKF,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,KAAKC,MAAM,GAAG,CAAC,GAAG,KAAKC,QAAQ,CAAC;CACrG;CAEA,UAAe;EACb,OAAO,CAAC,GAAG,KAAKD,MAAM;CACxB;CAEA,OAAO,QAAmC,YAAyC;EACjF,OAAO,IAAI,6BACT,QACA,YAAY,CAAC,GAAG,KAAKA,MAAM,GAAG,UAAU,GACxC,YAAY,CAAC,GAAG,KAAKC,QAAQ,GAAG,UAAU,CAC5C;CACF;CAEA,QAAa;EACX,OAAO,CAAC,GAAG,KAAKD,MAAM;CACxB;CAEA,UAAe;EACb,OAAO,CAAC,GAAG,KAAKC,QAAQ;CAC1B;CAEA,oBAA0B;EAGxB,KAAKD,yBAAS,IAAI,IAAI;EACtB,KAAKC,2BAAW,IAAI,IAAI;CAC1B;AACF;;AAGA,IAAM,qBAAN,MAAM,mBAAiF;CACrF,WAAoB;CACpB,aAAsB;CACtB;CACA;CAEA,YAAY,KAAgC,eAA6B,gBAAgB,OAAO;EAC9F,KAAKF,OAAO;EACZ,KAAKG,iBAAiB,IAAI,IAAI,aAAa;EAI3C,IAAI,CAAC,eAAe,KAAKC,WAAW;EACpC,sBAAA,iBAAiB,IAAI,OAAO,EAAE,CAAC,CAAC,aAAa,IAAI,GAAG;CACtD;CAEA,IAAI,OAA0B;EAC5B,KAAKD,eAAe,IAAI,KAAK;EAC7B,OAAO;CACT;CAEA,OAAO,OAAU,OAAmD;EAClE,KAAKA,eAAe,OAAO,KAAK;EAChC,OAAO;CACT;CAEA,eAAe,OAA0B;EACvC,KAAKA,eAAe,OAAO,KAAK;EAChC,OAAO;CACT;CAEA,IAAI,QAAsC;EACxC,KAAKA,iBAAiB,IAAI,IAAI,MAAM;EACpC,KAAKC,WAAW;EAChB,OAAO;CACT;CAEA,QAAa;EACX,OAAO,CAAC,GAAG,KAAKD,cAAc;CAChC;CAEA,KAAK,IAA4B;EAC/B,KAAK,MAAM,KAAK,KAAKA,gBACnB,IAAI,CAAC,EAAE,eAAe,EAAE,OAAO,IAAI,OAAO;CAG9C;CAEA,UAAU,YAAuC;EAC/C,MAAM,MAAM,KAAKH;EACjB,MAAM,SAAS,IAAI;EAGnB,MAAM,oBAAoB,IAAI,UAAU,UAAU,IAAI,eAAe,CAAC;EACtE,MAAM,YAAYH,kCAAAA,gBAAgB,KAAK,IAAI,SAAS;EAEpD,MAAM,QAAQ,IAAI,IAAI,UAAU;EAChC,MAAM,QAAa,CAAC;EACpB,KAAK,MAAM,SAAS,KAAKM,gBACvB,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,MAAM,KAAK,KAAK;EAEzC,MAAM,UAAe,CAAC;EACtB,KAAK,MAAM,SAAS,YAClB,IAAI,CAAC,KAAKA,eAAe,IAAI,KAAK,GAAG;GACnC,QAAQ,KAAK,KAAK;GAClB,IAAI,aAAa,mBACf,OAAO,GAAG,OAAO,KAAK;QAEtB,IAAI,gBAAgB,KAAK;EAE7B;EAEF,OAAO,IAAI,eAAqB,KAAK,CAAC,GAAG,KAAKA,cAAc,GAAG,MAAM,OAAO,OAAO;CACrF;CAEA,UAAe;EACb,OAAO,CAAC,GAAG,KAAKA,cAAc;CAChC;CAEA,OAAO,QAAmC,YAAyC;EACjF,OAAO,IAAI,mBAAyB,QAAQ,YAAY,CAAC,GAAG,KAAKA,cAAc,GAAG,UAAU,GAAG,IAAI;CACrG;CAEA,QAAa;EACX,OAAO,CAAC,GAAG,KAAKA,cAAc;CAChC;CAEA,UAAe;EACb,OAAO,CAAC;CACV;CAEA,oBAA0B,CAAC;CAE3B,aAAmB;EACjB,MAAM,MAAM,KAAKH;EAEjB,KAAK,MAAM,SAAS,KAAKG,gBACvB,IAAI,aAAa,KAAK;EAIxB,IAAI,CAAC,IAAI,OAAO,aACd,KAAK,MAAM,SAAS,IAAI,OAAO,GAAG,YAAY,IAAI,UAAU,IAAI,GAAkB;GAChF,IAAI,KAAKA,eAAe,IAAI,KAAK,GAAG;GACpC,IAAIV,sBAAAA,WAAY,MAAc,IAAI,eAAe,CAAC,QAAQ,GAAG,IAAI,MAAM,GACrE,IAAI,gBAAgB,KAAK;EAE7B;CAEJ;AACF;;AAGA,IAAM,iBAAN,MAAM,eAA6E;CACjF,WAAoB;CACpB;CACA;CACA;CACA;CACA;CAEA,YAAY,KAAgC,QAAa,YAAqB,QAAa,CAAC,GAAG,UAAe,CAAC,GAAG;EAChH,KAAKO,OAAO;EACZ,KAAKK,UAAU,IAAI,IAAI,MAAM;EAC7B,KAAKJ,SAAS,IAAI,IAAI,KAAK;EAC3B,KAAKC,WAAW,IAAI,IAAI,OAAO;EAC/B,KAAKI,cAAc;CACrB;CAEA,IAAI,aAAsB;EACxB,OAAO,KAAKA;CACd;CAEA,IAAI,OAA0B;EAC5B,KAAKL,OAAO,IAAI,KAAK;EACrB,KAAKC,SAAS,OAAO,KAAK;EAC1B,KAAKG,QAAQ,IAAI,KAAK;EACtB,OAAO;CACT;CAEA,OAAO,OAAU,OAAmD;EAClE,KAAKH,SAAS,IAAI,KAAK;EACvB,KAAKD,OAAO,OAAO,KAAK;EACxB,KAAKI,QAAQ,OAAO,KAAK;EACzB,OAAO;CACT;CAEA,eAAe,OAA0B;EACvC,KAAKJ,OAAO,OAAO,KAAK;EACxB,KAAKC,SAAS,IAAI,KAAK;EACvB,KAAKG,QAAQ,OAAO,KAAK;EACzB,OAAO;CACT;CAEA,IAAI,QAAsC;EACxC,KAAKC,cAAc;EACnB,IAAI,YAAY,IAAI,IAAI,MAAM;EAE9B,MAAM,MAAM,KAAKN;EACjB,MAAM,oBAAoB,IAAI,UAAU,UAAU,IAAI,eAAe,CAAC;EAEtE,IADkBH,kCAAAA,gBAAgB,KAAK,IAAI,SAC/B,KAAK,mBAAmB;GAClC,MAAM,oBAAoB,CAAC,GAAG,KAAKQ,OAAO,CAAC,CAAC,QAAQ,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;GAC3E,kBAAkB,SAAS,MAAM,IAAI,OAAO,GAAG,OAAO,CAAC,CAAC;GAExD,SAAS,CAAC,GAAG,QAAQ,GAAG,iBAAiB;GACzC,YAAY,IAAI,IAAI,MAAM;EAC5B;EAEA,MAAM,SAAS,IAAI,IAAI,KAAKA,OAAO;EACnC,KAAK,MAAM,SAAS,QAClB,IAAI,CAAC,UAAU,IAAI,KAAK,GAAG,IAAI,OAAO,KAAK;EAE7C,KAAK,MAAM,SAAS,QAClB,IAAI,CAAC,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK;EAEvC,OAAO;CACT;CAEA,QAAa;EACX,OAAO,CAAC,GAAG,KAAKA,OAAO;CACzB;CAEA,KAAK,IAA4B;EAC/B,KAAK,MAAM,SAAS,KAAKA,SACvB,IAAI,CAAC,MAAM,eAAe,MAAM,OAAO,IAAI,OAAO;CAGtD;CAEA,UAAU,YAAuC;EAE/C,MAAM,SAAS,IAAI,IAAI,UAAU;EACjC,KAAK,MAAM,KAAK,KAAKJ,QAAQ,OAAO,IAAI,CAAC;EACzC,KAAK,MAAM,KAAK,KAAKC,UAAU,OAAO,OAAO,CAAC;EAC9C,KAAKG,UAAU;EACf,OAAO;CACT;CAEA,UAAe;EACb,OAAO,CAAC,GAAG,KAAKA,OAAO;CACzB;CAEA,OAAO,QAAmC,YAAyC;EACjF,OAAO,IAAI,eACT,QACA,YAAY,CAAC,GAAG,KAAKA,OAAO,GAAG,UAAU,GACzC,KAAKC,aACL,YAAY,CAAC,GAAG,KAAKL,MAAM,GAAG,UAAU,GACxC,YAAY,CAAC,GAAG,KAAKC,QAAQ,GAAG,UAAU,CAC5C;CACF;CAEA,QAAa;EACX,OAAO,CAAC,GAAG,KAAKD,MAAM;CACxB;CAEA,UAAe;EACb,OAAO,CAAC,GAAG,KAAKC,QAAQ;CAC1B;CAEA,oBAA0B;EACxB,KAAKD,yBAAS,IAAI,IAAI;EACtB,KAAKC,2BAAW,IAAI,IAAI;CAC1B;AACF;AAEA,SAAS,YAA8B,UAAe,YAA8B;CAClF,MAAM,SAAS,IAAI,MAAS,SAAS,MAAM;CAC3C,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,OAAO,KAAK,WAAW,SAAS,EAAE;CAC5E,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"OneToManyCollection.d.cts","names":[],"sources":["../../src/relations/OneToManyCollection.ts"],"mappings":";;;;;;;;;;iBAyBgB,QAAQ,UAAU,QAAQ,UAAU,WAAW,WAAW,GAAG;cAOhE,oBAAoB,UAAU,QAAQ,UAAU,gBACnD,qBAAqB,GAAG,gBACrB,WAAW,GAAG,IAAI;;EAW7B,YAAY,QAAQ,GAAG,OAAO;EAmBxB,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;EAsBpF,KAAK,IAAI,KAAK,KAAK,QAAQ;EAa3B,SAAS,OAAO,IAAI;MAItB;EAIJ;MAKI;EAIJ;;EAUA,OAAO,QAAQ,oBAAoB,GAAG,IAAI,aAAa,GAAG,MAAM;MAO5D,OAAO;MAQP,kBAAkB;EAQtB,IAAI,iBAAiB;EAQrB,IAAI,OAAO;EASX,OAAO,OAAO,GAAG;IAAQ;;EASzB;;EAaA,aAAa,OAAO;;EAKpB,gBAAgB,OAAO;;EAKvB;EAIA,YAAY,QAAQ;EAKpB,eAAe,OAAO;EAOtB;EAOM,0BAA0B;MAgBrB,mBAAmB;MAInB,wBAAwB;EAInC,QAAQ;IAAS;MAA0B;MAIhC,QAAQ;MAIR,aAAa;MAIb;EAIJ;;EAKA;;UAKC;;UAeA;cAII;UAIJ;EAMR,SAAS;EAIT,WAAW;GAIV,YAAY;GACZ,YAAY"}
1
+ {"version":3,"file":"OneToManyCollection.d.cts","names":[],"sources":["../../src/relations/OneToManyCollection.ts"],"mappings":";;;;;;;;;;iBA0BgB,QAAQ,UAAU,QAAQ,UAAU,WAAW,WAAW,GAAG;cAOhE,oBAAoB,UAAU,QAAQ,UAAU,gBACnD,qBAAqB,GAAG,gBACrB,WAAW,GAAG,IAAI;;EAW7B,YAAY,QAAQ,GAAG,OAAO;EAmBxB,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;EAsBpF,KAAK,IAAI,KAAK,KAAK,QAAQ;EAa3B,SAAS,OAAO,IAAI;MAItB;EAIJ;MAKI;EAIJ;;EAUA,OAAO,QAAQ,oBAAoB,GAAG,IAAI,aAAa,GAAG,MAAM;MAO5D,OAAO;MAQP,kBAAkB;EAQtB,IAAI,iBAAiB;EAQrB,IAAI,OAAO;EASX,OAAO,OAAO,GAAG;IAAQ;;EASzB;;EAaA,aAAa,OAAO;;EAKpB,gBAAgB,OAAO;;EAKvB;EAIA,YAAY,QAAQ;EAKpB,eAAe,OAAO;EAOtB;EAOM,0BAA0B;MAgBrB,mBAAmB;MAInB,wBAAwB;EAInC,QAAQ;IAAS;MAA0B;MAIhC,QAAQ;MAIR,aAAa;MAIb;EAIJ;;EAKA;;UAKC;;UAeA;cAII;UAIJ;EAMR,SAAS;EAIT,WAAW;GAIV,YAAY;GACZ,YAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"OneToManyCollection.d.mts","names":[],"sources":["../../src/relations/OneToManyCollection.ts"],"mappings":";;;;;;;;;;iBAyBgB,QAAQ,UAAU,QAAQ,UAAU,WAAW,WAAW,GAAG;cAOhE,oBAAoB,UAAU,QAAQ,UAAU,gBACnD,qBAAqB,GAAG,gBACrB,WAAW,GAAG,IAAI;;EAW7B,YAAY,QAAQ,GAAG,OAAO;EAmBxB,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;EAsBpF,KAAK,IAAI,KAAK,KAAK,QAAQ;EAa3B,SAAS,OAAO,IAAI;MAItB;EAIJ;MAKI;EAIJ;;EAUA,OAAO,QAAQ,oBAAoB,GAAG,IAAI,aAAa,GAAG,MAAM;MAO5D,OAAO;MAQP,kBAAkB;EAQtB,IAAI,iBAAiB;EAQrB,IAAI,OAAO;EASX,OAAO,OAAO,GAAG;IAAQ;;EASzB;;EAaA,aAAa,OAAO;;EAKpB,gBAAgB,OAAO;;EAKvB;EAIA,YAAY,QAAQ;EAKpB,eAAe,OAAO;EAOtB;EAOM,0BAA0B;MAgBrB,mBAAmB;MAInB,wBAAwB;EAInC,QAAQ;IAAS;MAA0B;MAIhC,QAAQ;MAIR,aAAa;MAIb;EAIJ;;EAKA;;UAKC;;UAeA;cAII;UAIJ;EAMR,SAAS;EAIT,WAAW;GAIV,YAAY;GACZ,YAAY"}
1
+ {"version":3,"file":"OneToManyCollection.d.mts","names":[],"sources":["../../src/relations/OneToManyCollection.ts"],"mappings":";;;;;;;;;;iBA0BgB,QAAQ,UAAU,QAAQ,UAAU,WAAW,WAAW,GAAG;cAOhE,oBAAoB,UAAU,QAAQ,UAAU,gBACnD,qBAAqB,GAAG,gBACrB,WAAW,GAAG,IAAI;;EAW7B,YAAY,QAAQ,GAAG,OAAO;EAmBxB,KAAK;IAAQ;IAAuB;MAA+B,iBAAiB;EAsBpF,KAAK,IAAI,KAAK,KAAK,QAAQ;EAa3B,SAAS,OAAO,IAAI;MAItB;EAIJ;MAKI;EAIJ;;EAUA,OAAO,QAAQ,oBAAoB,GAAG,IAAI,aAAa,GAAG,MAAM;MAO5D,OAAO;MAQP,kBAAkB;EAQtB,IAAI,iBAAiB;EAQrB,IAAI,OAAO;EASX,OAAO,OAAO,GAAG;IAAQ;;EASzB;;EAaA,aAAa,OAAO;;EAKpB,gBAAgB,OAAO;;EAKvB;EAIA,YAAY,QAAQ;EAKpB,eAAe,OAAO;EAOtB;EAOM,0BAA0B;MAgBrB,mBAAmB;MAInB,wBAAwB;EAInC,QAAQ;IAAS;MAA0B;MAIhC,QAAQ;MAIR,aAAa;MAIb;EAIJ;;EAKA;;UAKC;;UAeA;cAII;UAIJ;EAMR,SAAS;EAIT,WAAW;GAIV,YAAY;GACZ,YAAY"}