joist-core 2.3.0-next.95 → 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 -106
  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 +52 -50
  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} +112 -83
  426. package/build/queries/sql/query.cjs.map +1 -0
  427. package/build/{query.d.cts → queries/sql/query.d.cts} +18 -8
  428. package/build/queries/sql/query.d.cts.map +1 -0
  429. package/build/{query.d.mts → queries/sql/query.d.mts} +18 -8
  430. package/build/queries/sql/query.d.mts.map +1 -0
  431. package/build/{query.js → queries/sql/query.js} +41 -13
  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 +1 @@
1
- {"version":3,"file":"fastWhereFilterHash.cjs","names":["maybeRequireTemporal","isAlias","isEntity","isReference","zonedDateTimeMapper","plainDateTimeMapper","plainDateMapper","plainTimeMapper"],"sources":["../../src/dataloaders/fastWhereFilterHash.ts"],"sourcesContent":["import { isAlias } from \"../Aliases.ts\";\nimport { isEntity } from \"../Entity.ts\";\nimport { isReference } from \"../relations/index.ts\";\nimport { maybeRequireTemporal } from \"../temporal.ts\";\nimport { plainDateMapper, plainDateTimeMapper, plainTimeMapper, zonedDateTimeMapper } from \"../temporalMappers.ts\";\n\nconst Temporal = maybeRequireTemporal()?.Temporal;\n\n/**\n * Returns a fast stable key for find filters.\n *\n * This avoids `object-hash` for simple find filters; the phase 8 query-prep benchmark saw 1,000-query p50s drop\n * from ~22-26ms to ~7.6-10.9ms, with heap allocation dropping from ~24-30MB to ~10-16MB.\n *\n * We also benchmarked native/WASM non-cryptographic hash libraries, but they only hash bytes; they still need this\n * deterministic serialization first. For 1,000 filter keys, this helper alone had p50s of 0.337/0.353/0.410ms vs.\n * object-hash md5 at 7.467/7.436/7.620ms, and wrapping this key with native hashes was slower: farmhash\n * fingerprint64 at 0.517/0.524/0.538ms, @node-rs/xxhash xxh3-128 at 0.611/0.613/0.627ms, and xxhash-addon\n * XXH128 at 1.031/1.078/1.348ms. So the stable serialization is the necessary work, and keeping it as the cache\n * key avoids extra native-call/digest overhead and avoids introducing probabilistic hash collisions.\n */\nexport function fastWhereFilterHash(value: unknown): string | undefined {\n return appendStableValue(\"\", value, new WeakSet<object>());\n}\n\n/** Appends a deterministic, type-tagged representation of `value` to `key`. */\nfunction appendStableValue(key: string, value: unknown, seen: WeakSet<object>): string | undefined {\n if (value === undefined) return `${key}u;`;\n if (value === null) return `${key}n;`;\n switch (typeof value) {\n case \"string\":\n return `${key}s${value.length}:${value};`;\n case \"number\":\n return `${key}d${value};`;\n case \"boolean\":\n return `${key}b${value ? 1 : 0};`;\n case \"bigint\":\n return `${key}i${value.toString()};`;\n case \"object\":\n return appendStableObject(key, value, seen);\n case \"function\":\n return isAlias(value) ? `${key}xalias;` : undefined;\n default:\n return undefined;\n }\n}\n\n/** Appends a deterministic, type-tagged representation of `value` to `key`. */\nfunction appendStableObject(key: string, value: object, seen: WeakSet<object>): string | undefined {\n if (value instanceof Date) return `${key}t${value.toISOString().length}:${value.toISOString()};`;\n if (ArrayBuffer.isView(value)) return appendArrayBufferView(key, value);\n\n if (Array.isArray(value)) {\n if (seen.has(value)) return undefined;\n seen.add(value);\n key = `${key}a${value.length}[`;\n for (const item of value) {\n const nextKey = appendStableValue(key, item, seen);\n if (nextKey === undefined) {\n seen.delete(value);\n return undefined;\n }\n key = nextKey;\n }\n seen.delete(value);\n return `${key}]`;\n }\n\n if (isPlainObject(value)) {\n if (seen.has(value)) return undefined;\n seen.add(value);\n\n const keys = Object.keys(value).sort();\n key = `${key}o${keys.length}{`;\n for (const property of keys) {\n key = `${key}${property.length}:${property}=`;\n const nextKey = appendStableValue(key, (value as Record<string, unknown>)[property], seen);\n if (nextKey === undefined) {\n seen.delete(value);\n return undefined;\n }\n key = nextKey;\n }\n seen.delete(value);\n return `${key}}`;\n }\n\n if (isEntity(value)) return `${key}e${value.toString().length}:${value.toString()};`;\n const referenceKey = appendReferenceValue(key, value);\n if (referenceKey !== undefined) return referenceKey;\n const temporalValue = toTemporalDbValue(value);\n if (temporalValue !== undefined) return appendTemporalValue(key, temporalValue);\n const valueObjectKey = appendValueObject(key, value, seen);\n if (valueObjectKey !== undefined) return valueObjectKey;\n return undefined;\n}\n\n/** Appends an ArrayBuffer view by its exact byte contents. */\nfunction appendArrayBufferView(key: string, value: ArrayBufferView): string {\n const bytes = Buffer.from(value.buffer, value.byteOffset, value.byteLength).toString(\"base64\");\n return `${key}y${value.constructor.name.length}:${value.constructor.name}:${bytes.length}:${bytes};`;\n}\n\n/** Appends a Joist reference by its tagged id. */\nfunction appendReferenceValue(key: string, value: object): string | undefined {\n if (!isReference(value)) return undefined;\n const id = value.idTaggedMaybe;\n return id === undefined ? `${key}r;` : `${key}r${id.length}:${id};`;\n}\n\n/** Appends a custom value object by constructor name and enumerable properties. */\nfunction appendValueObject(key: string, value: object, seen: WeakSet<object>): string | undefined {\n if (!isValueObject(value)) return undefined;\n if (seen.has(value)) return undefined;\n seen.add(value);\n\n const constructorName = value.constructor.name;\n const keys = Object.keys(value).sort();\n key = `${key}c${constructorName.length}:${constructorName}:${keys.length}{`;\n for (const property of keys) {\n key = `${key}${property.length}:${property}=`;\n const nextKey = appendStableValue(key, (value as Record<string, unknown>)[property], seen);\n if (nextKey === undefined) {\n seen.delete(value);\n return undefined;\n }\n key = nextKey;\n }\n seen.delete(value);\n return `${key}}`;\n}\n\n/** Appends a Temporal value as a distinct scalar type. */\nfunction appendTemporalValue(key: string, value: string): string {\n return `${key}t${value.length}:${value};`;\n}\n\n/** Returns the db representation for Temporal values, or undefined for non-Temporal values. */\nfunction toTemporalDbValue(value: object): string | undefined {\n if (!Temporal) return undefined;\n if (value instanceof Temporal.ZonedDateTime) return zonedDateTimeMapper.toDb(value);\n if (value instanceof Temporal.PlainDateTime) return plainDateTimeMapper.toDb(value);\n if (value instanceof Temporal.PlainDate) return plainDateMapper.toDb(value);\n if (value instanceof Temporal.PlainTime) return plainTimeMapper.toDb(value);\n return undefined;\n}\n\n/** Returns true for plain object literals used by find filters/settings. */\nfunction isPlainObject(value: object): boolean {\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\n/** Returns true for custom value objects that can be represented by enumerable fields. */\nfunction isValueObject(value: object): boolean {\n const prototype = Object.getPrototypeOf(value);\n return prototype !== Object.prototype && prototype !== null && Object.keys(value).length > 0;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"fastWhereFilterHash.cjs","names":["maybeRequireTemporal","isAlias","isEntity","isReference","zonedDateTimeMapper","plainDateTimeMapper","plainDateMapper","plainTimeMapper"],"sources":["../../src/dataloaders/fastWhereFilterHash.ts"],"sourcesContent":["import { isEntity } from \"../Entity.ts\";\nimport { isAlias } from \"../queries/find/Aliases.ts\";\nimport { isReference } from \"../relations/index.ts\";\nimport { maybeRequireTemporal } from \"../temporal.ts\";\nimport { plainDateMapper, plainDateTimeMapper, plainTimeMapper, zonedDateTimeMapper } from \"../temporalMappers.ts\";\n\nconst Temporal = maybeRequireTemporal()?.Temporal;\n\n/**\n * Returns a fast stable key for find filters.\n *\n * This avoids `object-hash` for simple find filters; the phase 8 query-prep benchmark saw 1,000-query p50s drop\n * from ~22-26ms to ~7.6-10.9ms, with heap allocation dropping from ~24-30MB to ~10-16MB.\n *\n * We also benchmarked native/WASM non-cryptographic hash libraries, but they only hash bytes; they still need this\n * deterministic serialization first. For 1,000 filter keys, this helper alone had p50s of 0.337/0.353/0.410ms vs.\n * object-hash md5 at 7.467/7.436/7.620ms, and wrapping this key with native hashes was slower: farmhash\n * fingerprint64 at 0.517/0.524/0.538ms, @node-rs/xxhash xxh3-128 at 0.611/0.613/0.627ms, and xxhash-addon\n * XXH128 at 1.031/1.078/1.348ms. So the stable serialization is the necessary work, and keeping it as the cache\n * key avoids extra native-call/digest overhead and avoids introducing probabilistic hash collisions.\n */\nexport function fastWhereFilterHash(value: unknown): string | undefined {\n return appendStableValue(\"\", value, new WeakSet<object>());\n}\n\n/** Appends a deterministic, type-tagged representation of `value` to `key`. */\nfunction appendStableValue(key: string, value: unknown, seen: WeakSet<object>): string | undefined {\n if (value === undefined) return `${key}u;`;\n if (value === null) return `${key}n;`;\n switch (typeof value) {\n case \"string\":\n return `${key}s${value.length}:${value};`;\n case \"number\":\n return `${key}d${value};`;\n case \"boolean\":\n return `${key}b${value ? 1 : 0};`;\n case \"bigint\":\n return `${key}i${value.toString()};`;\n case \"object\":\n return appendStableObject(key, value, seen);\n case \"function\":\n return isAlias(value) ? `${key}xalias;` : undefined;\n default:\n return undefined;\n }\n}\n\n/** Appends a deterministic, type-tagged representation of `value` to `key`. */\nfunction appendStableObject(key: string, value: object, seen: WeakSet<object>): string | undefined {\n if (value instanceof Date) return `${key}t${value.toISOString().length}:${value.toISOString()};`;\n if (ArrayBuffer.isView(value)) return appendArrayBufferView(key, value);\n\n if (Array.isArray(value)) {\n if (seen.has(value)) return undefined;\n seen.add(value);\n key = `${key}a${value.length}[`;\n for (const item of value) {\n const nextKey = appendStableValue(key, item, seen);\n if (nextKey === undefined) {\n seen.delete(value);\n return undefined;\n }\n key = nextKey;\n }\n seen.delete(value);\n return `${key}]`;\n }\n\n if (isPlainObject(value)) {\n if (seen.has(value)) return undefined;\n seen.add(value);\n\n const keys = Object.keys(value).sort();\n key = `${key}o${keys.length}{`;\n for (const property of keys) {\n key = `${key}${property.length}:${property}=`;\n const nextKey = appendStableValue(key, (value as Record<string, unknown>)[property], seen);\n if (nextKey === undefined) {\n seen.delete(value);\n return undefined;\n }\n key = nextKey;\n }\n seen.delete(value);\n return `${key}}`;\n }\n\n if (isEntity(value)) return `${key}e${value.toString().length}:${value.toString()};`;\n const referenceKey = appendReferenceValue(key, value);\n if (referenceKey !== undefined) return referenceKey;\n const temporalValue = toTemporalDbValue(value);\n if (temporalValue !== undefined) return appendTemporalValue(key, temporalValue);\n const valueObjectKey = appendValueObject(key, value, seen);\n if (valueObjectKey !== undefined) return valueObjectKey;\n return undefined;\n}\n\n/** Appends an ArrayBuffer view by its exact byte contents. */\nfunction appendArrayBufferView(key: string, value: ArrayBufferView): string {\n const bytes = Buffer.from(value.buffer, value.byteOffset, value.byteLength).toString(\"base64\");\n return `${key}y${value.constructor.name.length}:${value.constructor.name}:${bytes.length}:${bytes};`;\n}\n\n/** Appends a Joist reference by its tagged id. */\nfunction appendReferenceValue(key: string, value: object): string | undefined {\n if (!isReference(value)) return undefined;\n const id = value.idTaggedMaybe;\n return id === undefined ? `${key}r;` : `${key}r${id.length}:${id};`;\n}\n\n/** Appends a custom value object by constructor name and enumerable properties. */\nfunction appendValueObject(key: string, value: object, seen: WeakSet<object>): string | undefined {\n if (!isValueObject(value)) return undefined;\n if (seen.has(value)) return undefined;\n seen.add(value);\n\n const constructorName = value.constructor.name;\n const keys = Object.keys(value).sort();\n key = `${key}c${constructorName.length}:${constructorName}:${keys.length}{`;\n for (const property of keys) {\n key = `${key}${property.length}:${property}=`;\n const nextKey = appendStableValue(key, (value as Record<string, unknown>)[property], seen);\n if (nextKey === undefined) {\n seen.delete(value);\n return undefined;\n }\n key = nextKey;\n }\n seen.delete(value);\n return `${key}}`;\n}\n\n/** Appends a Temporal value as a distinct scalar type. */\nfunction appendTemporalValue(key: string, value: string): string {\n return `${key}t${value.length}:${value};`;\n}\n\n/** Returns the db representation for Temporal values, or undefined for non-Temporal values. */\nfunction toTemporalDbValue(value: object): string | undefined {\n if (!Temporal) return undefined;\n if (value instanceof Temporal.ZonedDateTime) return zonedDateTimeMapper.toDb(value);\n if (value instanceof Temporal.PlainDateTime) return plainDateTimeMapper.toDb(value);\n if (value instanceof Temporal.PlainDate) return plainDateMapper.toDb(value);\n if (value instanceof Temporal.PlainTime) return plainTimeMapper.toDb(value);\n return undefined;\n}\n\n/** Returns true for plain object literals used by find filters/settings. */\nfunction isPlainObject(value: object): boolean {\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\n/** Returns true for custom value objects that can be represented by enumerable fields. */\nfunction isValueObject(value: object): boolean {\n const prototype = Object.getPrototypeOf(value);\n return prototype !== Object.prototype && prototype !== null && Object.keys(value).length > 0;\n}\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
+ import { maybeRequireTemporal } from "../temporal.js";
2
+ import { isAlias } from "../queries/find/Aliases.js";
1
3
  import { isReference } from "../relations/Reference.js";
2
4
  import "../relations/index.js";
3
- import { maybeRequireTemporal } from "../temporal.js";
4
5
  import { plainDateMapper, plainDateTimeMapper, plainTimeMapper, zonedDateTimeMapper } from "../temporalMappers.js";
5
6
  import { isEntity } from "../Entity.js";
6
- import { isAlias } from "../Aliases.js";
7
7
  //#region src/dataloaders/fastWhereFilterHash.ts
8
8
  const Temporal = maybeRequireTemporal()?.Temporal;
9
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fastWhereFilterHash.js","names":[],"sources":["../../src/dataloaders/fastWhereFilterHash.ts"],"sourcesContent":["import { isAlias } from \"../Aliases.ts\";\nimport { isEntity } from \"../Entity.ts\";\nimport { isReference } from \"../relations/index.ts\";\nimport { maybeRequireTemporal } from \"../temporal.ts\";\nimport { plainDateMapper, plainDateTimeMapper, plainTimeMapper, zonedDateTimeMapper } from \"../temporalMappers.ts\";\n\nconst Temporal = maybeRequireTemporal()?.Temporal;\n\n/**\n * Returns a fast stable key for find filters.\n *\n * This avoids `object-hash` for simple find filters; the phase 8 query-prep benchmark saw 1,000-query p50s drop\n * from ~22-26ms to ~7.6-10.9ms, with heap allocation dropping from ~24-30MB to ~10-16MB.\n *\n * We also benchmarked native/WASM non-cryptographic hash libraries, but they only hash bytes; they still need this\n * deterministic serialization first. For 1,000 filter keys, this helper alone had p50s of 0.337/0.353/0.410ms vs.\n * object-hash md5 at 7.467/7.436/7.620ms, and wrapping this key with native hashes was slower: farmhash\n * fingerprint64 at 0.517/0.524/0.538ms, @node-rs/xxhash xxh3-128 at 0.611/0.613/0.627ms, and xxhash-addon\n * XXH128 at 1.031/1.078/1.348ms. So the stable serialization is the necessary work, and keeping it as the cache\n * key avoids extra native-call/digest overhead and avoids introducing probabilistic hash collisions.\n */\nexport function fastWhereFilterHash(value: unknown): string | undefined {\n return appendStableValue(\"\", value, new WeakSet<object>());\n}\n\n/** Appends a deterministic, type-tagged representation of `value` to `key`. */\nfunction appendStableValue(key: string, value: unknown, seen: WeakSet<object>): string | undefined {\n if (value === undefined) return `${key}u;`;\n if (value === null) return `${key}n;`;\n switch (typeof value) {\n case \"string\":\n return `${key}s${value.length}:${value};`;\n case \"number\":\n return `${key}d${value};`;\n case \"boolean\":\n return `${key}b${value ? 1 : 0};`;\n case \"bigint\":\n return `${key}i${value.toString()};`;\n case \"object\":\n return appendStableObject(key, value, seen);\n case \"function\":\n return isAlias(value) ? `${key}xalias;` : undefined;\n default:\n return undefined;\n }\n}\n\n/** Appends a deterministic, type-tagged representation of `value` to `key`. */\nfunction appendStableObject(key: string, value: object, seen: WeakSet<object>): string | undefined {\n if (value instanceof Date) return `${key}t${value.toISOString().length}:${value.toISOString()};`;\n if (ArrayBuffer.isView(value)) return appendArrayBufferView(key, value);\n\n if (Array.isArray(value)) {\n if (seen.has(value)) return undefined;\n seen.add(value);\n key = `${key}a${value.length}[`;\n for (const item of value) {\n const nextKey = appendStableValue(key, item, seen);\n if (nextKey === undefined) {\n seen.delete(value);\n return undefined;\n }\n key = nextKey;\n }\n seen.delete(value);\n return `${key}]`;\n }\n\n if (isPlainObject(value)) {\n if (seen.has(value)) return undefined;\n seen.add(value);\n\n const keys = Object.keys(value).sort();\n key = `${key}o${keys.length}{`;\n for (const property of keys) {\n key = `${key}${property.length}:${property}=`;\n const nextKey = appendStableValue(key, (value as Record<string, unknown>)[property], seen);\n if (nextKey === undefined) {\n seen.delete(value);\n return undefined;\n }\n key = nextKey;\n }\n seen.delete(value);\n return `${key}}`;\n }\n\n if (isEntity(value)) return `${key}e${value.toString().length}:${value.toString()};`;\n const referenceKey = appendReferenceValue(key, value);\n if (referenceKey !== undefined) return referenceKey;\n const temporalValue = toTemporalDbValue(value);\n if (temporalValue !== undefined) return appendTemporalValue(key, temporalValue);\n const valueObjectKey = appendValueObject(key, value, seen);\n if (valueObjectKey !== undefined) return valueObjectKey;\n return undefined;\n}\n\n/** Appends an ArrayBuffer view by its exact byte contents. */\nfunction appendArrayBufferView(key: string, value: ArrayBufferView): string {\n const bytes = Buffer.from(value.buffer, value.byteOffset, value.byteLength).toString(\"base64\");\n return `${key}y${value.constructor.name.length}:${value.constructor.name}:${bytes.length}:${bytes};`;\n}\n\n/** Appends a Joist reference by its tagged id. */\nfunction appendReferenceValue(key: string, value: object): string | undefined {\n if (!isReference(value)) return undefined;\n const id = value.idTaggedMaybe;\n return id === undefined ? `${key}r;` : `${key}r${id.length}:${id};`;\n}\n\n/** Appends a custom value object by constructor name and enumerable properties. */\nfunction appendValueObject(key: string, value: object, seen: WeakSet<object>): string | undefined {\n if (!isValueObject(value)) return undefined;\n if (seen.has(value)) return undefined;\n seen.add(value);\n\n const constructorName = value.constructor.name;\n const keys = Object.keys(value).sort();\n key = `${key}c${constructorName.length}:${constructorName}:${keys.length}{`;\n for (const property of keys) {\n key = `${key}${property.length}:${property}=`;\n const nextKey = appendStableValue(key, (value as Record<string, unknown>)[property], seen);\n if (nextKey === undefined) {\n seen.delete(value);\n return undefined;\n }\n key = nextKey;\n }\n seen.delete(value);\n return `${key}}`;\n}\n\n/** Appends a Temporal value as a distinct scalar type. */\nfunction appendTemporalValue(key: string, value: string): string {\n return `${key}t${value.length}:${value};`;\n}\n\n/** Returns the db representation for Temporal values, or undefined for non-Temporal values. */\nfunction toTemporalDbValue(value: object): string | undefined {\n if (!Temporal) return undefined;\n if (value instanceof Temporal.ZonedDateTime) return zonedDateTimeMapper.toDb(value);\n if (value instanceof Temporal.PlainDateTime) return plainDateTimeMapper.toDb(value);\n if (value instanceof Temporal.PlainDate) return plainDateMapper.toDb(value);\n if (value instanceof Temporal.PlainTime) return plainTimeMapper.toDb(value);\n return undefined;\n}\n\n/** Returns true for plain object literals used by find filters/settings. */\nfunction isPlainObject(value: object): boolean {\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\n/** Returns true for custom value objects that can be represented by enumerable fields. */\nfunction isValueObject(value: object): boolean {\n const prototype = Object.getPrototypeOf(value);\n return prototype !== Object.prototype && prototype !== null && Object.keys(value).length > 0;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"fastWhereFilterHash.js","names":[],"sources":["../../src/dataloaders/fastWhereFilterHash.ts"],"sourcesContent":["import { isEntity } from \"../Entity.ts\";\nimport { isAlias } from \"../queries/find/Aliases.ts\";\nimport { isReference } from \"../relations/index.ts\";\nimport { maybeRequireTemporal } from \"../temporal.ts\";\nimport { plainDateMapper, plainDateTimeMapper, plainTimeMapper, zonedDateTimeMapper } from \"../temporalMappers.ts\";\n\nconst Temporal = maybeRequireTemporal()?.Temporal;\n\n/**\n * Returns a fast stable key for find filters.\n *\n * This avoids `object-hash` for simple find filters; the phase 8 query-prep benchmark saw 1,000-query p50s drop\n * from ~22-26ms to ~7.6-10.9ms, with heap allocation dropping from ~24-30MB to ~10-16MB.\n *\n * We also benchmarked native/WASM non-cryptographic hash libraries, but they only hash bytes; they still need this\n * deterministic serialization first. For 1,000 filter keys, this helper alone had p50s of 0.337/0.353/0.410ms vs.\n * object-hash md5 at 7.467/7.436/7.620ms, and wrapping this key with native hashes was slower: farmhash\n * fingerprint64 at 0.517/0.524/0.538ms, @node-rs/xxhash xxh3-128 at 0.611/0.613/0.627ms, and xxhash-addon\n * XXH128 at 1.031/1.078/1.348ms. So the stable serialization is the necessary work, and keeping it as the cache\n * key avoids extra native-call/digest overhead and avoids introducing probabilistic hash collisions.\n */\nexport function fastWhereFilterHash(value: unknown): string | undefined {\n return appendStableValue(\"\", value, new WeakSet<object>());\n}\n\n/** Appends a deterministic, type-tagged representation of `value` to `key`. */\nfunction appendStableValue(key: string, value: unknown, seen: WeakSet<object>): string | undefined {\n if (value === undefined) return `${key}u;`;\n if (value === null) return `${key}n;`;\n switch (typeof value) {\n case \"string\":\n return `${key}s${value.length}:${value};`;\n case \"number\":\n return `${key}d${value};`;\n case \"boolean\":\n return `${key}b${value ? 1 : 0};`;\n case \"bigint\":\n return `${key}i${value.toString()};`;\n case \"object\":\n return appendStableObject(key, value, seen);\n case \"function\":\n return isAlias(value) ? `${key}xalias;` : undefined;\n default:\n return undefined;\n }\n}\n\n/** Appends a deterministic, type-tagged representation of `value` to `key`. */\nfunction appendStableObject(key: string, value: object, seen: WeakSet<object>): string | undefined {\n if (value instanceof Date) return `${key}t${value.toISOString().length}:${value.toISOString()};`;\n if (ArrayBuffer.isView(value)) return appendArrayBufferView(key, value);\n\n if (Array.isArray(value)) {\n if (seen.has(value)) return undefined;\n seen.add(value);\n key = `${key}a${value.length}[`;\n for (const item of value) {\n const nextKey = appendStableValue(key, item, seen);\n if (nextKey === undefined) {\n seen.delete(value);\n return undefined;\n }\n key = nextKey;\n }\n seen.delete(value);\n return `${key}]`;\n }\n\n if (isPlainObject(value)) {\n if (seen.has(value)) return undefined;\n seen.add(value);\n\n const keys = Object.keys(value).sort();\n key = `${key}o${keys.length}{`;\n for (const property of keys) {\n key = `${key}${property.length}:${property}=`;\n const nextKey = appendStableValue(key, (value as Record<string, unknown>)[property], seen);\n if (nextKey === undefined) {\n seen.delete(value);\n return undefined;\n }\n key = nextKey;\n }\n seen.delete(value);\n return `${key}}`;\n }\n\n if (isEntity(value)) return `${key}e${value.toString().length}:${value.toString()};`;\n const referenceKey = appendReferenceValue(key, value);\n if (referenceKey !== undefined) return referenceKey;\n const temporalValue = toTemporalDbValue(value);\n if (temporalValue !== undefined) return appendTemporalValue(key, temporalValue);\n const valueObjectKey = appendValueObject(key, value, seen);\n if (valueObjectKey !== undefined) return valueObjectKey;\n return undefined;\n}\n\n/** Appends an ArrayBuffer view by its exact byte contents. */\nfunction appendArrayBufferView(key: string, value: ArrayBufferView): string {\n const bytes = Buffer.from(value.buffer, value.byteOffset, value.byteLength).toString(\"base64\");\n return `${key}y${value.constructor.name.length}:${value.constructor.name}:${bytes.length}:${bytes};`;\n}\n\n/** Appends a Joist reference by its tagged id. */\nfunction appendReferenceValue(key: string, value: object): string | undefined {\n if (!isReference(value)) return undefined;\n const id = value.idTaggedMaybe;\n return id === undefined ? `${key}r;` : `${key}r${id.length}:${id};`;\n}\n\n/** Appends a custom value object by constructor name and enumerable properties. */\nfunction appendValueObject(key: string, value: object, seen: WeakSet<object>): string | undefined {\n if (!isValueObject(value)) return undefined;\n if (seen.has(value)) return undefined;\n seen.add(value);\n\n const constructorName = value.constructor.name;\n const keys = Object.keys(value).sort();\n key = `${key}c${constructorName.length}:${constructorName}:${keys.length}{`;\n for (const property of keys) {\n key = `${key}${property.length}:${property}=`;\n const nextKey = appendStableValue(key, (value as Record<string, unknown>)[property], seen);\n if (nextKey === undefined) {\n seen.delete(value);\n return undefined;\n }\n key = nextKey;\n }\n seen.delete(value);\n return `${key}}`;\n}\n\n/** Appends a Temporal value as a distinct scalar type. */\nfunction appendTemporalValue(key: string, value: string): string {\n return `${key}t${value.length}:${value};`;\n}\n\n/** Returns the db representation for Temporal values, or undefined for non-Temporal values. */\nfunction toTemporalDbValue(value: object): string | undefined {\n if (!Temporal) return undefined;\n if (value instanceof Temporal.ZonedDateTime) return zonedDateTimeMapper.toDb(value);\n if (value instanceof Temporal.PlainDateTime) return plainDateTimeMapper.toDb(value);\n if (value instanceof Temporal.PlainDate) return plainDateMapper.toDb(value);\n if (value instanceof Temporal.PlainTime) return plainTimeMapper.toDb(value);\n return undefined;\n}\n\n/** Returns true for plain object literals used by find filters/settings. */\nfunction isPlainObject(value: object): boolean {\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\n/** Returns true for custom value objects that can be represented by enumerable fields. */\nfunction isValueObject(value: object): boolean {\n const prototype = Object.getPrototypeOf(value);\n return prototype !== Object.prototype && prototype !== null && Object.keys(value).length > 0;\n}\n"],"mappings":"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"}
@@ -1,9 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_EntityMetadata = require("../EntityMetadata.cjs");
2
+ const require_queries_entityQueryUtils = require("../queries/entityQueryUtils.cjs");
3
+ const require_queries_find_QueryParser = require("../queries/find/QueryParser.cjs");
3
4
  const require_utils = require("../utils.cjs");
4
- require("../EntityManager.cjs");
5
- require("../Entity.cjs");
6
- const require_QueryParser = require("../QueryParser.cjs");
5
+ const require_EntityMetadata = require("../EntityMetadata.cjs");
7
6
  //#region src/dataloaders/findByUniqueDataLoader.ts
8
7
  const findByUniqueOperation = "find-by-unique";
9
8
  function findByUniqueDataLoader(em, type, field, softDeletes) {
@@ -26,8 +25,8 @@ function findByUniqueDataLoader(em, type, field, softDeletes) {
26
25
  },
27
26
  orderBys: []
28
27
  };
29
- require_QueryParser.addTablePerClassJoinsAndClassTag(query, meta, alias, true);
30
- require_QueryParser.maybeAddNotSoftDeleted(conditions, meta, alias, softDeletes);
28
+ require_queries_find_QueryParser.addTablePerClassJoinsAndClassTag(query, meta, alias, true);
29
+ require_queries_entityQueryUtils.maybeAddNotSoftDeleted(conditions, meta, alias, softDeletes);
31
30
  let column;
32
31
  switch (field.kind) {
33
32
  case "primitive":
@@ -1 +1 @@
1
- {"version":3,"file":"findByUniqueDataLoader.cjs","names":["getMetadata","abbreviation","groupBy"],"sources":["../../src/dataloaders/findByUniqueDataLoader.ts"],"sourcesContent":["import type DataLoader from \"dataloader\";\n\nimport { type Column } from \"../columns.ts\";\nimport { type Entity } from \"../Entity.ts\";\nimport { type EntityManager, type MaybeAbstractEntityConstructor } from \"../EntityManager.ts\";\nimport { type Field, getMetadata } from \"../EntityMetadata.ts\";\nimport {\n type ColumnCondition,\n type ParsedFindQuery,\n addTablePerClassJoinsAndClassTag,\n maybeAddNotSoftDeleted,\n} from \"../QueryParser.ts\";\nimport { abbreviation, groupBy } from \"../utils.ts\";\n\nexport const findByUniqueOperation = \"find-by-unique\";\n\nexport function findByUniqueDataLoader<T extends Entity>(\n em: EntityManager,\n type: MaybeAbstractEntityConstructor<T>,\n field: Field,\n softDeletes: \"include\" | \"exclude\",\n): DataLoader<any, unknown | undefined> {\n const batchKey = `${type.name}-${field.fieldName}-${softDeletes}`;\n return em.getLoader(findByUniqueOperation, batchKey, async (values) => {\n const meta = getMetadata(type);\n const alias = abbreviation(meta.tableName);\n\n const conditions: ColumnCondition[] = [];\n const query: ParsedFindQuery = {\n selects: [`${alias}.*`],\n tables: [{ alias, join: \"primary\", table: meta.tableName }],\n condition: { kind: \"exp\", op: \"and\", conditions },\n orderBys: [],\n };\n\n addTablePerClassJoinsAndClassTag(query, meta, alias, true);\n maybeAddNotSoftDeleted(conditions, meta, alias, softDeletes);\n\n let column: Column;\n switch (field.kind) {\n case \"primitive\":\n column = field.serde.columns[0];\n conditions.push({\n kind: \"column\",\n alias,\n column: column.columnName,\n dbType: column.dbType,\n cond: { kind: \"in\", value: values.map((v) => column.mapToDb(v)) },\n });\n break;\n default:\n throw new Error(`Unsupported field ${field.fieldName}`);\n }\n\n const rows = await em[\"executeFind\"](meta, findByUniqueOperation, query, {});\n\n const rowsByValue = groupBy(rows, (row) => row[column.columnName]);\n\n // Re-order the output by the batched input\n return values.map((value) => {\n const result = rowsByValue.get(value) ?? [];\n return result[0];\n });\n });\n}\n"],"mappings":";;;;;;;AAcA,MAAa,wBAAwB;AAErC,SAAgB,uBACd,IACA,MACA,OACA,aACsC;CACtC,MAAM,WAAW,GAAG,KAAK,KAAK,GAAG,MAAM,UAAU,GAAG;CACpD,OAAO,GAAG,UAAU,uBAAuB,UAAU,OAAO,WAAW;EACrE,MAAM,OAAOA,uBAAAA,YAAY,IAAI;EAC7B,MAAM,QAAQC,cAAAA,aAAa,KAAK,SAAS;EAEzC,MAAM,aAAgC,CAAC;EACvC,MAAM,QAAyB;GAC7B,SAAS,CAAC,GAAG,MAAM,GAAG;GACtB,QAAQ,CAAC;IAAE;IAAO,MAAM;IAAW,OAAO,KAAK;GAAU,CAAC;GAC1D,WAAW;IAAE,MAAM;IAAO,IAAI;IAAO;GAAW;GAChD,UAAU,CAAC;EACb;EAEA,oBAAA,iCAAiC,OAAO,MAAM,OAAO,IAAI;EACzD,oBAAA,uBAAuB,YAAY,MAAM,OAAO,WAAW;EAE3D,IAAI;EACJ,QAAQ,MAAM,MAAd;GACE,KAAK;IACH,SAAS,MAAM,MAAM,QAAQ;IAC7B,WAAW,KAAK;KACd,MAAM;KACN;KACA,QAAQ,OAAO;KACf,QAAQ,OAAO;KACf,MAAM;MAAE,MAAM;MAAM,OAAO,OAAO,KAAK,MAAM,OAAO,QAAQ,CAAC,CAAC;KAAE;IAClE,CAAC;IACD;GACF,SACE,MAAM,IAAI,MAAM,qBAAqB,MAAM,WAAW;EAC1D;EAEA,MAAM,OAAO,MAAM,GAAG,cAAc,CAAC,MAAM,uBAAuB,OAAO,CAAC,CAAC;EAE3E,MAAM,cAAcC,cAAAA,QAAQ,OAAO,QAAQ,IAAI,OAAO,WAAW;EAGjE,OAAO,OAAO,KAAK,UAAU;GAE3B,QADe,YAAY,IAAI,KAAK,KAAK,CAAC,EAAA,CAC5B;EAChB,CAAC;CACH,CAAC;AACH"}
1
+ {"version":3,"file":"findByUniqueDataLoader.cjs","names":["getMetadata","abbreviation","groupBy"],"sources":["../../src/dataloaders/findByUniqueDataLoader.ts"],"sourcesContent":["import type DataLoader from \"dataloader\";\n\nimport type { Column } from \"../columns.ts\";\nimport type { Entity } from \"../Entity.ts\";\nimport type { EntityManager, MaybeAbstractEntityConstructor } from \"../EntityManager.ts\";\nimport { type Field, getMetadata } from \"../EntityMetadata.ts\";\nimport { maybeAddNotSoftDeleted } from \"../queries/entityQueryUtils.ts\";\nimport { type ParsedFindQuery, addTablePerClassJoinsAndClassTag } from \"../queries/find/QueryParser.ts\";\nimport type { ColumnCondition } from \"../queries/parsedConditions.ts\";\nimport { abbreviation, groupBy } from \"../utils.ts\";\n\nexport const findByUniqueOperation = \"find-by-unique\";\n\nexport function findByUniqueDataLoader<T extends Entity>(\n em: EntityManager,\n type: MaybeAbstractEntityConstructor<T>,\n field: Field,\n softDeletes: \"include\" | \"exclude\",\n): DataLoader<any, unknown | undefined> {\n const batchKey = `${type.name}-${field.fieldName}-${softDeletes}`;\n return em.getLoader(findByUniqueOperation, batchKey, async (values) => {\n const meta = getMetadata(type);\n const alias = abbreviation(meta.tableName);\n\n const conditions: ColumnCondition[] = [];\n const query: ParsedFindQuery = {\n selects: [`${alias}.*`],\n tables: [{ alias, join: \"primary\", table: meta.tableName }],\n condition: { kind: \"exp\", op: \"and\", conditions },\n orderBys: [],\n };\n\n addTablePerClassJoinsAndClassTag(query, meta, alias, true);\n maybeAddNotSoftDeleted(conditions, meta, alias, softDeletes);\n\n let column: Column;\n switch (field.kind) {\n case \"primitive\":\n column = field.serde.columns[0];\n conditions.push({\n kind: \"column\",\n alias,\n column: column.columnName,\n dbType: column.dbType,\n cond: { kind: \"in\", value: values.map((v) => column.mapToDb(v)) },\n });\n break;\n default:\n throw new Error(`Unsupported field ${field.fieldName}`);\n }\n\n const rows = await em[\"executeFind\"](meta, findByUniqueOperation, query, {});\n\n const rowsByValue = groupBy(rows, (row) => row[column.columnName]);\n\n // Re-order the output by the batched input\n return values.map((value) => {\n const result = rowsByValue.get(value) ?? [];\n return result[0];\n });\n });\n}\n"],"mappings":";;;;;;AAWA,MAAa,wBAAwB;AAErC,SAAgB,uBACd,IACA,MACA,OACA,aACsC;CACtC,MAAM,WAAW,GAAG,KAAK,KAAK,GAAG,MAAM,UAAU,GAAG;CACpD,OAAO,GAAG,UAAU,uBAAuB,UAAU,OAAO,WAAW;EACrE,MAAM,OAAOA,uBAAAA,YAAY,IAAI;EAC7B,MAAM,QAAQC,cAAAA,aAAa,KAAK,SAAS;EAEzC,MAAM,aAAgC,CAAC;EACvC,MAAM,QAAyB;GAC7B,SAAS,CAAC,GAAG,MAAM,GAAG;GACtB,QAAQ,CAAC;IAAE;IAAO,MAAM;IAAW,OAAO,KAAK;GAAU,CAAC;GAC1D,WAAW;IAAE,MAAM;IAAO,IAAI;IAAO;GAAW;GAChD,UAAU,CAAC;EACb;EAEA,iCAAA,iCAAiC,OAAO,MAAM,OAAO,IAAI;EACzD,iCAAA,uBAAuB,YAAY,MAAM,OAAO,WAAW;EAE3D,IAAI;EACJ,QAAQ,MAAM,MAAd;GACE,KAAK;IACH,SAAS,MAAM,MAAM,QAAQ;IAC7B,WAAW,KAAK;KACd,MAAM;KACN;KACA,QAAQ,OAAO;KACf,QAAQ,OAAO;KACf,MAAM;MAAE,MAAM;MAAM,OAAO,OAAO,KAAK,MAAM,OAAO,QAAQ,CAAC,CAAC;KAAE;IAClE,CAAC;IACD;GACF,SACE,MAAM,IAAI,MAAM,qBAAqB,MAAM,WAAW;EAC1D;EAEA,MAAM,OAAO,MAAM,GAAG,cAAc,CAAC,MAAM,uBAAuB,OAAO,CAAC,CAAC;EAE3E,MAAM,cAAcC,cAAAA,QAAQ,OAAO,QAAQ,IAAI,OAAO,WAAW;EAGjE,OAAO,OAAO,KAAK,UAAU;GAE3B,QADe,YAAY,IAAI,KAAK,KAAK,CAAC,EAAA,CAC5B;EAChB,CAAC;CACH,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"findByUniqueDataLoader.d.cts","names":[],"sources":["../../src/dataloaders/findByUniqueDataLoader.ts"],"mappings":";;;;;cAca;iBAEG,uBAAuB,UAAU,QAC/C,IAAI,eACJ,MAAM,+BAA+B,IACrC,OAAO,OACP,qCACC"}
1
+ {"version":3,"file":"findByUniqueDataLoader.d.cts","names":[],"sources":["../../src/dataloaders/findByUniqueDataLoader.ts"],"mappings":";;;;;cAWa;iBAEG,uBAAuB,UAAU,QAC/C,IAAI,eACJ,MAAM,+BAA+B,IACrC,OAAO,OACP,qCACC"}
@@ -1 +1 @@
1
- {"version":3,"file":"findByUniqueDataLoader.d.mts","names":[],"sources":["../../src/dataloaders/findByUniqueDataLoader.ts"],"mappings":";;;;;cAca;iBAEG,uBAAuB,UAAU,QAC/C,IAAI,eACJ,MAAM,+BAA+B,IACrC,OAAO,OACP,qCACC"}
1
+ {"version":3,"file":"findByUniqueDataLoader.d.mts","names":[],"sources":["../../src/dataloaders/findByUniqueDataLoader.ts"],"mappings":";;;;;cAWa;iBAEG,uBAAuB,UAAU,QAC/C,IAAI,eACJ,MAAM,+BAA+B,IACrC,OAAO,OACP,qCACC"}
@@ -1,8 +1,7 @@
1
- import { getMetadata } from "../EntityMetadata.js";
1
+ import { maybeAddNotSoftDeleted } from "../queries/entityQueryUtils.js";
2
+ import { addTablePerClassJoinsAndClassTag } from "../queries/find/QueryParser.js";
2
3
  import { abbreviation, groupBy } from "../utils.js";
3
- import "../EntityManager.js";
4
- import "../Entity.js";
5
- import { addTablePerClassJoinsAndClassTag, maybeAddNotSoftDeleted } from "../QueryParser.js";
4
+ import { getMetadata } from "../EntityMetadata.js";
6
5
  //#region src/dataloaders/findByUniqueDataLoader.ts
7
6
  const findByUniqueOperation = "find-by-unique";
8
7
  function findByUniqueDataLoader(em, type, field, softDeletes) {
@@ -1 +1 @@
1
- {"version":3,"file":"findByUniqueDataLoader.js","names":[],"sources":["../../src/dataloaders/findByUniqueDataLoader.ts"],"sourcesContent":["import type DataLoader from \"dataloader\";\n\nimport { type Column } from \"../columns.ts\";\nimport { type Entity } from \"../Entity.ts\";\nimport { type EntityManager, type MaybeAbstractEntityConstructor } from \"../EntityManager.ts\";\nimport { type Field, getMetadata } from \"../EntityMetadata.ts\";\nimport {\n type ColumnCondition,\n type ParsedFindQuery,\n addTablePerClassJoinsAndClassTag,\n maybeAddNotSoftDeleted,\n} from \"../QueryParser.ts\";\nimport { abbreviation, groupBy } from \"../utils.ts\";\n\nexport const findByUniqueOperation = \"find-by-unique\";\n\nexport function findByUniqueDataLoader<T extends Entity>(\n em: EntityManager,\n type: MaybeAbstractEntityConstructor<T>,\n field: Field,\n softDeletes: \"include\" | \"exclude\",\n): DataLoader<any, unknown | undefined> {\n const batchKey = `${type.name}-${field.fieldName}-${softDeletes}`;\n return em.getLoader(findByUniqueOperation, batchKey, async (values) => {\n const meta = getMetadata(type);\n const alias = abbreviation(meta.tableName);\n\n const conditions: ColumnCondition[] = [];\n const query: ParsedFindQuery = {\n selects: [`${alias}.*`],\n tables: [{ alias, join: \"primary\", table: meta.tableName }],\n condition: { kind: \"exp\", op: \"and\", conditions },\n orderBys: [],\n };\n\n addTablePerClassJoinsAndClassTag(query, meta, alias, true);\n maybeAddNotSoftDeleted(conditions, meta, alias, softDeletes);\n\n let column: Column;\n switch (field.kind) {\n case \"primitive\":\n column = field.serde.columns[0];\n conditions.push({\n kind: \"column\",\n alias,\n column: column.columnName,\n dbType: column.dbType,\n cond: { kind: \"in\", value: values.map((v) => column.mapToDb(v)) },\n });\n break;\n default:\n throw new Error(`Unsupported field ${field.fieldName}`);\n }\n\n const rows = await em[\"executeFind\"](meta, findByUniqueOperation, query, {});\n\n const rowsByValue = groupBy(rows, (row) => row[column.columnName]);\n\n // Re-order the output by the batched input\n return values.map((value) => {\n const result = rowsByValue.get(value) ?? [];\n return result[0];\n });\n });\n}\n"],"mappings":";;;;;;AAcA,MAAa,wBAAwB;AAErC,SAAgB,uBACd,IACA,MACA,OACA,aACsC;CACtC,MAAM,WAAW,GAAG,KAAK,KAAK,GAAG,MAAM,UAAU,GAAG;CACpD,OAAO,GAAG,UAAU,uBAAuB,UAAU,OAAO,WAAW;EACrE,MAAM,OAAO,YAAY,IAAI;EAC7B,MAAM,QAAQ,aAAa,KAAK,SAAS;EAEzC,MAAM,aAAgC,CAAC;EACvC,MAAM,QAAyB;GAC7B,SAAS,CAAC,GAAG,MAAM,GAAG;GACtB,QAAQ,CAAC;IAAE;IAAO,MAAM;IAAW,OAAO,KAAK;GAAU,CAAC;GAC1D,WAAW;IAAE,MAAM;IAAO,IAAI;IAAO;GAAW;GAChD,UAAU,CAAC;EACb;EAEA,iCAAiC,OAAO,MAAM,OAAO,IAAI;EACzD,uBAAuB,YAAY,MAAM,OAAO,WAAW;EAE3D,IAAI;EACJ,QAAQ,MAAM,MAAd;GACE,KAAK;IACH,SAAS,MAAM,MAAM,QAAQ;IAC7B,WAAW,KAAK;KACd,MAAM;KACN;KACA,QAAQ,OAAO;KACf,QAAQ,OAAO;KACf,MAAM;MAAE,MAAM;MAAM,OAAO,OAAO,KAAK,MAAM,OAAO,QAAQ,CAAC,CAAC;KAAE;IAClE,CAAC;IACD;GACF,SACE,MAAM,IAAI,MAAM,qBAAqB,MAAM,WAAW;EAC1D;EAEA,MAAM,OAAO,MAAM,GAAG,cAAc,CAAC,MAAM,uBAAuB,OAAO,CAAC,CAAC;EAE3E,MAAM,cAAc,QAAQ,OAAO,QAAQ,IAAI,OAAO,WAAW;EAGjE,OAAO,OAAO,KAAK,UAAU;GAE3B,QADe,YAAY,IAAI,KAAK,KAAK,CAAC,EAAA,CAC5B;EAChB,CAAC;CACH,CAAC;AACH"}
1
+ {"version":3,"file":"findByUniqueDataLoader.js","names":[],"sources":["../../src/dataloaders/findByUniqueDataLoader.ts"],"sourcesContent":["import type DataLoader from \"dataloader\";\n\nimport type { Column } from \"../columns.ts\";\nimport type { Entity } from \"../Entity.ts\";\nimport type { EntityManager, MaybeAbstractEntityConstructor } from \"../EntityManager.ts\";\nimport { type Field, getMetadata } from \"../EntityMetadata.ts\";\nimport { maybeAddNotSoftDeleted } from \"../queries/entityQueryUtils.ts\";\nimport { type ParsedFindQuery, addTablePerClassJoinsAndClassTag } from \"../queries/find/QueryParser.ts\";\nimport type { ColumnCondition } from \"../queries/parsedConditions.ts\";\nimport { abbreviation, groupBy } from \"../utils.ts\";\n\nexport const findByUniqueOperation = \"find-by-unique\";\n\nexport function findByUniqueDataLoader<T extends Entity>(\n em: EntityManager,\n type: MaybeAbstractEntityConstructor<T>,\n field: Field,\n softDeletes: \"include\" | \"exclude\",\n): DataLoader<any, unknown | undefined> {\n const batchKey = `${type.name}-${field.fieldName}-${softDeletes}`;\n return em.getLoader(findByUniqueOperation, batchKey, async (values) => {\n const meta = getMetadata(type);\n const alias = abbreviation(meta.tableName);\n\n const conditions: ColumnCondition[] = [];\n const query: ParsedFindQuery = {\n selects: [`${alias}.*`],\n tables: [{ alias, join: \"primary\", table: meta.tableName }],\n condition: { kind: \"exp\", op: \"and\", conditions },\n orderBys: [],\n };\n\n addTablePerClassJoinsAndClassTag(query, meta, alias, true);\n maybeAddNotSoftDeleted(conditions, meta, alias, softDeletes);\n\n let column: Column;\n switch (field.kind) {\n case \"primitive\":\n column = field.serde.columns[0];\n conditions.push({\n kind: \"column\",\n alias,\n column: column.columnName,\n dbType: column.dbType,\n cond: { kind: \"in\", value: values.map((v) => column.mapToDb(v)) },\n });\n break;\n default:\n throw new Error(`Unsupported field ${field.fieldName}`);\n }\n\n const rows = await em[\"executeFind\"](meta, findByUniqueOperation, query, {});\n\n const rowsByValue = groupBy(rows, (row) => row[column.columnName]);\n\n // Re-order the output by the batched input\n return values.map((value) => {\n const result = rowsByValue.get(value) ?? [];\n return result[0];\n });\n });\n}\n"],"mappings":";;;;;AAWA,MAAa,wBAAwB;AAErC,SAAgB,uBACd,IACA,MACA,OACA,aACsC;CACtC,MAAM,WAAW,GAAG,KAAK,KAAK,GAAG,MAAM,UAAU,GAAG;CACpD,OAAO,GAAG,UAAU,uBAAuB,UAAU,OAAO,WAAW;EACrE,MAAM,OAAO,YAAY,IAAI;EAC7B,MAAM,QAAQ,aAAa,KAAK,SAAS;EAEzC,MAAM,aAAgC,CAAC;EACvC,MAAM,QAAyB;GAC7B,SAAS,CAAC,GAAG,MAAM,GAAG;GACtB,QAAQ,CAAC;IAAE;IAAO,MAAM;IAAW,OAAO,KAAK;GAAU,CAAC;GAC1D,WAAW;IAAE,MAAM;IAAO,IAAI;IAAO;GAAW;GAChD,UAAU,CAAC;EACb;EAEA,iCAAiC,OAAO,MAAM,OAAO,IAAI;EACzD,uBAAuB,YAAY,MAAM,OAAO,WAAW;EAE3D,IAAI;EACJ,QAAQ,MAAM,MAAd;GACE,KAAK;IACH,SAAS,MAAM,MAAM,QAAQ;IAC7B,WAAW,KAAK;KACd,MAAM;KACN;KACA,QAAQ,OAAO;KACf,QAAQ,OAAO;KACf,MAAM;MAAE,MAAM;MAAM,OAAO,OAAO,KAAK,MAAM,OAAO,QAAQ,CAAC,CAAC;KAAE;IAClE,CAAC;IACD;GACF,SACE,MAAM,IAAI,MAAM,qBAAqB,MAAM,WAAW;EAC1D;EAEA,MAAM,OAAO,MAAM,GAAG,cAAc,CAAC,MAAM,uBAAuB,OAAO,CAAC,CAAC;EAE3E,MAAM,cAAc,QAAQ,OAAO,QAAQ,IAAI,OAAO,WAAW;EAGjE,OAAO,OAAO,KAAK,UAAU;GAE3B,QADe,YAAY,IAAI,KAAK,KAAK,CAAC,EAAA,CAC5B;EAChB,CAAC;CACH,CAAC;AACH"}
@@ -1,22 +1,19 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_scopes = require("../scopes.cjs");
3
- require("../EntityFilter.cjs");
4
- require("../EntityGraphQLFilter.cjs");
5
- const require_keywords = require("../keywords.cjs");
6
- const require_EntityMetadata = require("../EntityMetadata.cjs");
2
+ const require_queries_sql_keywords = require("../queries/sql/keywords.cjs");
3
+ const require_queries_find_scopes = require("../queries/find/scopes.cjs");
4
+ const require_queries_find_QueryParser = require("../queries/find/QueryParser.cjs");
7
5
  const require_utils = require("../utils.cjs");
6
+ const require_EntityMetadata = require("../EntityMetadata.cjs");
8
7
  const require_unnest = require("../unnest.cjs");
9
8
  const require_dataloaders_findDataLoader = require("./findDataLoader.cjs");
10
9
  const require_EntityManager = require("../EntityManager.cjs");
11
- require("../Entity.cjs");
12
- const require_QueryParser = require("../QueryParser.cjs");
13
10
  //#region src/dataloaders/findCountDataLoader.ts
14
11
  const findCountOperation = "find-count";
15
12
  function findCountDataLoader(em, type, filter) {
16
13
  const { where, ...opts } = filter;
17
14
  if (opts.limit || opts.offset) throw new Error("Cannot use limit/offset with findCountDataLoader");
18
15
  const meta = require_EntityMetadata.getMetadata(type);
19
- const query = require_QueryParser.parseFindQuery(meta, where, opts);
16
+ const query = require_queries_find_QueryParser.parseFindQuery(meta, where, opts);
20
17
  const pendingDeletedIds = appendPendingDeletedIds(em, type, query, meta.idDbType, where, opts);
21
18
  const { findSettings } = em["prepareFind"](meta, findCountOperation, query, {
22
19
  ...opts,
@@ -36,7 +33,7 @@ function findCountDataLoader(em, type, filter) {
36
33
  if (entries.length === 1) {
37
34
  const { query, findSettings } = entries[0];
38
35
  const primary = query.tables.find((t) => t.join === "primary") ?? require_utils.fail("No primary");
39
- query.selects = [`count(distinct ${require_keywords.kq(primary.alias)}.id) as count`];
36
+ query.selects = [`count(distinct ${require_queries_sql_keywords.kq(primary.alias)}.id) as count`];
40
37
  query.orderBys = [];
41
38
  const rows = await em["executePreparedFind"](meta, findCountOperation, query, findSettings, false);
42
39
  return [Number(rows[0].count)];
@@ -48,7 +45,7 @@ function findCountDataLoader(em, type, filter) {
48
45
  dbType: "int"
49
46
  }, ...args.map((a) => a.column)];
50
47
  const primary = query.tables.find((t) => t.join === "primary") ?? require_utils.fail("No primary");
51
- query.selects = [`count(distinct ${require_keywords.kq(primary.alias)}.id) as count`];
48
+ query.selects = [`count(distinct ${require_queries_sql_keywords.kq(primary.alias)}.id) as count`];
52
49
  query.orderBys = [];
53
50
  const query2 = {
54
51
  selects: ["_find.tag as tag", "_data.count as count"],
@@ -73,11 +70,11 @@ function findCountDataLoader(em, type, filter) {
73
70
  }, { cacheKeyFn: (entry) => require_dataloaders_findDataLoader.queryFilterHash(entry) }).load(prepared);
74
71
  }
75
72
  function mergeCountOptions(where, options) {
76
- if (!require_scopes.isScope(where)) return {
73
+ if (!require_queries_find_scopes.isScope(where)) return {
77
74
  where,
78
75
  options
79
76
  };
80
- const resolved = require_scopes.resolveScope(where);
77
+ const resolved = require_queries_find_scopes.resolveScope(where);
81
78
  const scopeOptions = {};
82
79
  if (resolved.softDeletes !== void 0) scopeOptions.softDeletes = resolved.softDeletes;
83
80
  return {
@@ -90,7 +87,7 @@ function mergeCountOptions(where, options) {
90
87
  }
91
88
  /** Adds `id not in pendingDeletedIds` to the count query so pending deletes are excluded in SQL. */
92
89
  function appendPendingDeletedIds(em, type, query, idDbType, where, opts) {
93
- const pendingDeletedIds = require_scopes.isSelectAllFilter(where, opts.conditions) ? [] : require_EntityManager.getEmInternalApi(em).pendingDeleteIds(type);
90
+ const pendingDeletedIds = require_queries_find_scopes.isSelectAllFilter(where, opts.conditions) ? [] : require_EntityManager.getEmInternalApi(em).pendingDeleteIds(type);
94
91
  if (pendingDeletedIds.length === 0) return pendingDeletedIds;
95
92
  const condition = {
96
93
  kind: "column",
@@ -1 +1 @@
1
- {"version":3,"file":"findCountDataLoader.cjs","names":["getMetadata","parseFindQuery","getBatchKeyFromGenericStructure","fail","kq","collectAndReplaceArgs","buildUnnestCte","createColumnValuesFromPrepared","queryFilterHash","isScope","resolveScope","isSelectAllFilter","getEmInternalApi"],"sources":["../../src/dataloaders/findCountDataLoader.ts"],"sourcesContent":["import { type Entity, type IdType } from \"../Entity.ts\";\nimport { type FilterAndSettings, type FindFilter } from \"../EntityFilter.ts\";\nimport { type GraphQLFilterWithAlias } from \"../EntityGraphQLFilter.ts\";\nimport {\n type EntityManager,\n type FindCountFilterOptions,\n type MaybeAbstractEntityConstructor,\n getEmInternalApi,\n} from \"../EntityManager.ts\";\nimport { getMetadata } from \"../EntityMetadata.ts\";\nimport { kq } from \"../keywords.ts\";\nimport { type ParsedFindQuery, parseFindQuery } from \"../QueryParser.ts\";\nimport { isScope, isSelectAllFilter, resolveScope } from \"../scopes.ts\";\nimport { buildUnnestCte } from \"../unnest.ts\";\nimport { fail } from \"../utils.ts\";\nimport {\n collectAndReplaceArgs,\n collectValues,\n createColumnValuesFromPrepared,\n getBatchKeyFromGenericStructure,\n queryFilterHash,\n} from \"./findDataLoader.ts\";\n\nexport const findCountOperation = \"find-count\";\n\nexport function findCountDataLoader<T extends Entity>(\n em: EntityManager,\n type: MaybeAbstractEntityConstructor<T>,\n filter: FilterAndSettings<T>,\n): Promise<number> {\n const { where, ...opts } = filter;\n if (opts.limit || opts.offset) {\n throw new Error(\"Cannot use limit/offset with findCountDataLoader\");\n }\n\n const meta = getMetadata(type);\n const query = parseFindQuery(meta, where, opts);\n const pendingDeletedIds = appendPendingDeletedIds(em, type, query, meta.idDbType, where, opts);\n const { findSettings } = em[\"prepareFind\"](meta, findCountOperation, query, { ...opts, checkLimit: false });\n const bindings: any[] = [];\n collectValues(bindings, query);\n const prepared = { filter, pendingDeletedIds, query, bindings, findSettings };\n const batchKey = getBatchKeyFromGenericStructure(meta, query);\n\n return em\n .getLoader<typeof prepared, number>(\n findCountOperation,\n batchKey,\n async (entries) => {\n // We're guaranteed that these queries all have the same structure\n\n // Don't bother with the CTE if there's only 1 query (or each query has exactly the same filter values)\n if (entries.length === 1) {\n const { query, findSettings } = entries[0];\n const primary = query.tables.find((t) => t.join === \"primary\") ?? fail(\"No primary\");\n query.selects = [`count(distinct ${kq(primary.alias)}.id) as count`];\n query.orderBys = [];\n const rows = await em[\"executePreparedFind\"](meta, findCountOperation, query, findSettings, false);\n return [Number(rows[0].count)];\n }\n\n // WITH _find (tag, arg1, arg2) AS (\n // SELECT unnest($0::int[]), unnest($0::varchar[]), unnest($0::varchar[])\n // )\n // SELECT _find.tag, _data.count\n // FROM _find\n // CROSS JOIN LATERAL (\n // SELECT count(*) as count\n // FROM author a WHERE a.first_name = _find.arg1 OR a.last_name = _find.arg2\n // ) _data\n\n // Build the list of 'arg1', 'arg2', ... strings\n const { query, findSettings } = entries[0];\n const args = collectAndReplaceArgs(query, entries);\n const argsColumns = [{ columnName: \"tag\", dbType: \"int\" }, ...args.map((a) => a.column)];\n\n // We're not returning the entities, just counting them...\n const primary = query.tables.find((t) => t.join === \"primary\") ?? fail(\"No primary\");\n query.selects = [`count(distinct ${kq(primary.alias)}.id) as count`];\n query.orderBys = [];\n\n const query2: ParsedFindQuery = {\n selects: [\"_find.tag as tag\", \"_data.count as count\"],\n tables: [\n { join: \"primary\", table: \"_find\", alias: \"_find\" },\n // Not sure what fromAlias is for/that it matters...\n { join: \"lateral\", query: query, table: meta.tableName, alias: \"_data\", fromAlias: \"_f\" },\n ],\n // For each unique query, capture its filter values in `bindings` to populate the CTE _find table\n ctes: [buildUnnestCte(\"_find\", argsColumns, createColumnValuesFromPrepared(args, entries))],\n orderBys: [],\n };\n\n const rows = await em[\"executePreparedFind\"](meta, findCountOperation, query2, findSettings, false);\n\n // Make an empty array for each batched query, per the dataloader contract\n const results = entries.map(() => 0);\n // Then put each row into the tagged query it matched\n for (const row of rows) {\n results[row.tag] = Number(row.count);\n }\n return results;\n },\n // Our filter/order tuple is a complex object, so use a stable cache key to ensure caching works.\n { cacheKeyFn: (entry) => queryFilterHash(entry) },\n )\n .load(prepared);\n}\n\n/** Merges root-scope count/id settings with caller options, dropping pagination-only settings. */\nexport function mergeCountOptions<T extends Entity>(\n where: FindFilter<T>,\n options: FindCountFilterOptions<T>,\n): { where: FindFilter<T>; options: FindCountFilterOptions<T> };\nexport function mergeCountOptions<T extends Entity>(\n where: FindFilter<T> | GraphQLFilterWithAlias<T>,\n options: FindCountFilterOptions<T>,\n): { where: FindFilter<T> | GraphQLFilterWithAlias<T>; options: FindCountFilterOptions<T> };\nexport function mergeCountOptions<T extends Entity>(\n where: FindFilter<T> | GraphQLFilterWithAlias<T>,\n options: FindCountFilterOptions<T>,\n): { where: FindFilter<T> | GraphQLFilterWithAlias<T>; options: FindCountFilterOptions<T> } {\n if (!isScope<T>(where)) return { where, options };\n\n const resolved = resolveScope(where);\n const scopeOptions: FindCountFilterOptions<T> = {};\n if (resolved.softDeletes !== undefined) scopeOptions.softDeletes = resolved.softDeletes;\n return { where, options: { ...scopeOptions, ...options } };\n}\n\n/** Adds `id not in pendingDeletedIds` to the count query so pending deletes are excluded in SQL. */\nfunction appendPendingDeletedIds<T extends Entity>(\n em: EntityManager,\n type: MaybeAbstractEntityConstructor<T>,\n query: ParsedFindQuery,\n idDbType: \"bigint\" | \"int\" | \"uuid\" | \"text\",\n where: FilterAndSettings<T>[\"where\"],\n opts: Omit<FilterAndSettings<T>, \"where\">,\n): readonly IdType[] {\n const pendingDeletedIds = isSelectAllFilter(where, opts.conditions)\n ? []\n : getEmInternalApi(em).pendingDeleteIds(type);\n if (pendingDeletedIds.length === 0) return pendingDeletedIds;\n\n const primary = query.tables.find((t) => t.join === \"primary\") ?? fail(\"No primary\");\n const condition = {\n kind: \"column\" as const,\n alias: primary.alias,\n column: \"id\",\n dbType: idDbType,\n cond: { kind: \"nin\" as const, value: pendingDeletedIds },\n pruneable: true,\n };\n\n if (!query.condition) {\n query.condition = { kind: \"exp\", op: \"and\", conditions: [condition] };\n } else if (query.condition.op === \"and\") {\n query.condition.conditions.push(condition);\n } else {\n query.condition = { kind: \"exp\", op: \"and\", conditions: [query.condition, condition] };\n }\n return pendingDeletedIds;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"findCountDataLoader.cjs","names":["getMetadata","parseFindQuery","getBatchKeyFromGenericStructure","fail","kq","collectAndReplaceArgs","buildUnnestCte","createColumnValuesFromPrepared","queryFilterHash","isScope","resolveScope","isSelectAllFilter","getEmInternalApi"],"sources":["../../src/dataloaders/findCountDataLoader.ts"],"sourcesContent":["import type { Entity, IdType } from \"../Entity.ts\";\nimport {\n type EntityManager,\n type FindCountFilterOptions,\n type MaybeAbstractEntityConstructor,\n getEmInternalApi,\n} from \"../EntityManager.ts\";\nimport { getMetadata } from \"../EntityMetadata.ts\";\nimport type { FilterAndSettings, FindFilter } from \"../queries/find/EntityFilter.ts\";\nimport type { GraphQLFilterWithAlias } from \"../queries/find/EntityGraphQLFilter.ts\";\nimport { type ParsedFindQuery, parseFindQuery } from \"../queries/find/QueryParser.ts\";\nimport { isScope, isSelectAllFilter, resolveScope } from \"../queries/find/scopes.ts\";\nimport { kq } from \"../queries/sql/keywords.ts\";\nimport { buildUnnestCte } from \"../unnest.ts\";\nimport { fail } from \"../utils.ts\";\nimport {\n collectAndReplaceArgs,\n collectValues,\n createColumnValuesFromPrepared,\n getBatchKeyFromGenericStructure,\n queryFilterHash,\n} from \"./findDataLoader.ts\";\n\nexport const findCountOperation = \"find-count\";\n\nexport function findCountDataLoader<T extends Entity>(\n em: EntityManager,\n type: MaybeAbstractEntityConstructor<T>,\n filter: FilterAndSettings<T>,\n): Promise<number> {\n const { where, ...opts } = filter;\n if (opts.limit || opts.offset) {\n throw new Error(\"Cannot use limit/offset with findCountDataLoader\");\n }\n\n const meta = getMetadata(type);\n const query = parseFindQuery(meta, where, opts);\n const pendingDeletedIds = appendPendingDeletedIds(em, type, query, meta.idDbType, where, opts);\n const { findSettings } = em[\"prepareFind\"](meta, findCountOperation, query, { ...opts, checkLimit: false });\n const bindings: any[] = [];\n collectValues(bindings, query);\n const prepared = { filter, pendingDeletedIds, query, bindings, findSettings };\n const batchKey = getBatchKeyFromGenericStructure(meta, query);\n\n return em\n .getLoader<typeof prepared, number>(\n findCountOperation,\n batchKey,\n async (entries) => {\n // We're guaranteed that these queries all have the same structure\n\n // Don't bother with the CTE if there's only 1 query (or each query has exactly the same filter values)\n if (entries.length === 1) {\n const { query, findSettings } = entries[0];\n const primary = query.tables.find((t) => t.join === \"primary\") ?? fail(\"No primary\");\n query.selects = [`count(distinct ${kq(primary.alias)}.id) as count`];\n query.orderBys = [];\n const rows = await em[\"executePreparedFind\"](meta, findCountOperation, query, findSettings, false);\n return [Number(rows[0].count)];\n }\n\n // WITH _find (tag, arg1, arg2) AS (\n // SELECT unnest($0::int[]), unnest($0::varchar[]), unnest($0::varchar[])\n // )\n // SELECT _find.tag, _data.count\n // FROM _find\n // CROSS JOIN LATERAL (\n // SELECT count(*) as count\n // FROM author a WHERE a.first_name = _find.arg1 OR a.last_name = _find.arg2\n // ) _data\n\n // Build the list of 'arg1', 'arg2', ... strings\n const { query, findSettings } = entries[0];\n const args = collectAndReplaceArgs(query, entries);\n const argsColumns = [{ columnName: \"tag\", dbType: \"int\" }, ...args.map((a) => a.column)];\n\n // We're not returning the entities, just counting them...\n const primary = query.tables.find((t) => t.join === \"primary\") ?? fail(\"No primary\");\n query.selects = [`count(distinct ${kq(primary.alias)}.id) as count`];\n query.orderBys = [];\n\n const query2: ParsedFindQuery = {\n selects: [\"_find.tag as tag\", \"_data.count as count\"],\n tables: [\n { join: \"primary\", table: \"_find\", alias: \"_find\" },\n // Not sure what fromAlias is for/that it matters...\n { join: \"lateral\", query: query, table: meta.tableName, alias: \"_data\", fromAlias: \"_f\" },\n ],\n // For each unique query, capture its filter values in `bindings` to populate the CTE _find table\n ctes: [buildUnnestCte(\"_find\", argsColumns, createColumnValuesFromPrepared(args, entries))],\n orderBys: [],\n };\n\n const rows = await em[\"executePreparedFind\"](meta, findCountOperation, query2, findSettings, false);\n\n // Make an empty array for each batched query, per the dataloader contract\n const results = entries.map(() => 0);\n // Then put each row into the tagged query it matched\n for (const row of rows) {\n results[row.tag] = Number(row.count);\n }\n return results;\n },\n // Our filter/order tuple is a complex object, so use a stable cache key to ensure caching works.\n { cacheKeyFn: (entry) => queryFilterHash(entry) },\n )\n .load(prepared);\n}\n\n/** Merges root-scope count/id settings with caller options, dropping pagination-only settings. */\nexport function mergeCountOptions<T extends Entity>(\n where: FindFilter<T>,\n options: FindCountFilterOptions<T>,\n): { where: FindFilter<T>; options: FindCountFilterOptions<T> };\nexport function mergeCountOptions<T extends Entity>(\n where: FindFilter<T> | GraphQLFilterWithAlias<T>,\n options: FindCountFilterOptions<T>,\n): { where: FindFilter<T> | GraphQLFilterWithAlias<T>; options: FindCountFilterOptions<T> };\nexport function mergeCountOptions<T extends Entity>(\n where: FindFilter<T> | GraphQLFilterWithAlias<T>,\n options: FindCountFilterOptions<T>,\n): { where: FindFilter<T> | GraphQLFilterWithAlias<T>; options: FindCountFilterOptions<T> } {\n if (!isScope<T>(where)) return { where, options };\n\n const resolved = resolveScope(where);\n const scopeOptions: FindCountFilterOptions<T> = {};\n if (resolved.softDeletes !== undefined) scopeOptions.softDeletes = resolved.softDeletes;\n return { where, options: { ...scopeOptions, ...options } };\n}\n\n/** Adds `id not in pendingDeletedIds` to the count query so pending deletes are excluded in SQL. */\nfunction appendPendingDeletedIds<T extends Entity>(\n em: EntityManager,\n type: MaybeAbstractEntityConstructor<T>,\n query: ParsedFindQuery,\n idDbType: \"bigint\" | \"int\" | \"uuid\" | \"text\",\n where: FilterAndSettings<T>[\"where\"],\n opts: Omit<FilterAndSettings<T>, \"where\">,\n): readonly IdType[] {\n const pendingDeletedIds = isSelectAllFilter(where, opts.conditions)\n ? []\n : getEmInternalApi(em).pendingDeleteIds(type);\n if (pendingDeletedIds.length === 0) return pendingDeletedIds;\n\n const primary = query.tables.find((t) => t.join === \"primary\") ?? fail(\"No primary\");\n const condition = {\n kind: \"column\" as const,\n alias: primary.alias,\n column: \"id\",\n dbType: idDbType,\n cond: { kind: \"nin\" as const, value: pendingDeletedIds },\n pruneable: true,\n };\n\n if (!query.condition) {\n query.condition = { kind: \"exp\", op: \"and\", conditions: [condition] };\n } else if (query.condition.op === \"and\") {\n query.condition.conditions.push(condition);\n } else {\n query.condition = { kind: \"exp\", op: \"and\", conditions: [query.condition, condition] };\n }\n return pendingDeletedIds;\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { GraphQLFilterWithAlias } from "../EntityGraphQLFilter.cjs";
1
+ import { GraphQLFilterWithAlias } from "../queries/find/EntityGraphQLFilter.cjs";
2
+ import { FilterAndSettings, FindFilter } from "../queries/find/EntityFilter.cjs";
2
3
  import { EntityManager, FindCountFilterOptions, MaybeAbstractEntityConstructor } from "../EntityManager.cjs";
3
4
  import { Entity } from "../Entity.cjs";
4
- import { FilterAndSettings, FindFilter } from "../EntityFilter.cjs";
5
5
  //#region src/dataloaders/findCountDataLoader.d.ts
6
6
  declare const findCountOperation = "find-count";
7
7
  declare function findCountDataLoader<T extends Entity>(em: EntityManager, type: MaybeAbstractEntityConstructor<T>, filter: FilterAndSettings<T>): Promise<number>;
@@ -1,7 +1,7 @@
1
- import { GraphQLFilterWithAlias } from "../EntityGraphQLFilter.mjs";
1
+ import { GraphQLFilterWithAlias } from "../queries/find/EntityGraphQLFilter.mjs";
2
+ import { FilterAndSettings, FindFilter } from "../queries/find/EntityFilter.mjs";
2
3
  import { EntityManager, FindCountFilterOptions, MaybeAbstractEntityConstructor } from "../EntityManager.mjs";
3
4
  import { Entity } from "../Entity.mjs";
4
- import { FilterAndSettings, FindFilter } from "../EntityFilter.mjs";
5
5
  //#region src/dataloaders/findCountDataLoader.d.ts
6
6
  declare const findCountOperation = "find-count";
7
7
  declare function findCountDataLoader<T extends Entity>(em: EntityManager, type: MaybeAbstractEntityConstructor<T>, filter: FilterAndSettings<T>): Promise<number>;
@@ -1,14 +1,11 @@
1
- import { isScope, isSelectAllFilter, resolveScope } from "../scopes.js";
2
- import "../EntityFilter.js";
3
- import "../EntityGraphQLFilter.js";
4
- import { kq } from "../keywords.js";
5
- import { getMetadata } from "../EntityMetadata.js";
1
+ import { kq } from "../queries/sql/keywords.js";
2
+ import { isScope, isSelectAllFilter, resolveScope } from "../queries/find/scopes.js";
3
+ import { parseFindQuery } from "../queries/find/QueryParser.js";
6
4
  import { fail } from "../utils.js";
5
+ import { getMetadata } from "../EntityMetadata.js";
7
6
  import { buildUnnestCte } from "../unnest.js";
8
7
  import { collectAndReplaceArgs, collectValues, createColumnValuesFromPrepared, getBatchKeyFromGenericStructure, queryFilterHash } from "./findDataLoader.js";
9
8
  import { getEmInternalApi } from "../EntityManager.js";
10
- import "../Entity.js";
11
- import { parseFindQuery } from "../QueryParser.js";
12
9
  //#region src/dataloaders/findCountDataLoader.ts
13
10
  const findCountOperation = "find-count";
14
11
  function findCountDataLoader(em, type, filter) {
@@ -1 +1 @@
1
- {"version":3,"file":"findCountDataLoader.js","names":[],"sources":["../../src/dataloaders/findCountDataLoader.ts"],"sourcesContent":["import { type Entity, type IdType } from \"../Entity.ts\";\nimport { type FilterAndSettings, type FindFilter } from \"../EntityFilter.ts\";\nimport { type GraphQLFilterWithAlias } from \"../EntityGraphQLFilter.ts\";\nimport {\n type EntityManager,\n type FindCountFilterOptions,\n type MaybeAbstractEntityConstructor,\n getEmInternalApi,\n} from \"../EntityManager.ts\";\nimport { getMetadata } from \"../EntityMetadata.ts\";\nimport { kq } from \"../keywords.ts\";\nimport { type ParsedFindQuery, parseFindQuery } from \"../QueryParser.ts\";\nimport { isScope, isSelectAllFilter, resolveScope } from \"../scopes.ts\";\nimport { buildUnnestCte } from \"../unnest.ts\";\nimport { fail } from \"../utils.ts\";\nimport {\n collectAndReplaceArgs,\n collectValues,\n createColumnValuesFromPrepared,\n getBatchKeyFromGenericStructure,\n queryFilterHash,\n} from \"./findDataLoader.ts\";\n\nexport const findCountOperation = \"find-count\";\n\nexport function findCountDataLoader<T extends Entity>(\n em: EntityManager,\n type: MaybeAbstractEntityConstructor<T>,\n filter: FilterAndSettings<T>,\n): Promise<number> {\n const { where, ...opts } = filter;\n if (opts.limit || opts.offset) {\n throw new Error(\"Cannot use limit/offset with findCountDataLoader\");\n }\n\n const meta = getMetadata(type);\n const query = parseFindQuery(meta, where, opts);\n const pendingDeletedIds = appendPendingDeletedIds(em, type, query, meta.idDbType, where, opts);\n const { findSettings } = em[\"prepareFind\"](meta, findCountOperation, query, { ...opts, checkLimit: false });\n const bindings: any[] = [];\n collectValues(bindings, query);\n const prepared = { filter, pendingDeletedIds, query, bindings, findSettings };\n const batchKey = getBatchKeyFromGenericStructure(meta, query);\n\n return em\n .getLoader<typeof prepared, number>(\n findCountOperation,\n batchKey,\n async (entries) => {\n // We're guaranteed that these queries all have the same structure\n\n // Don't bother with the CTE if there's only 1 query (or each query has exactly the same filter values)\n if (entries.length === 1) {\n const { query, findSettings } = entries[0];\n const primary = query.tables.find((t) => t.join === \"primary\") ?? fail(\"No primary\");\n query.selects = [`count(distinct ${kq(primary.alias)}.id) as count`];\n query.orderBys = [];\n const rows = await em[\"executePreparedFind\"](meta, findCountOperation, query, findSettings, false);\n return [Number(rows[0].count)];\n }\n\n // WITH _find (tag, arg1, arg2) AS (\n // SELECT unnest($0::int[]), unnest($0::varchar[]), unnest($0::varchar[])\n // )\n // SELECT _find.tag, _data.count\n // FROM _find\n // CROSS JOIN LATERAL (\n // SELECT count(*) as count\n // FROM author a WHERE a.first_name = _find.arg1 OR a.last_name = _find.arg2\n // ) _data\n\n // Build the list of 'arg1', 'arg2', ... strings\n const { query, findSettings } = entries[0];\n const args = collectAndReplaceArgs(query, entries);\n const argsColumns = [{ columnName: \"tag\", dbType: \"int\" }, ...args.map((a) => a.column)];\n\n // We're not returning the entities, just counting them...\n const primary = query.tables.find((t) => t.join === \"primary\") ?? fail(\"No primary\");\n query.selects = [`count(distinct ${kq(primary.alias)}.id) as count`];\n query.orderBys = [];\n\n const query2: ParsedFindQuery = {\n selects: [\"_find.tag as tag\", \"_data.count as count\"],\n tables: [\n { join: \"primary\", table: \"_find\", alias: \"_find\" },\n // Not sure what fromAlias is for/that it matters...\n { join: \"lateral\", query: query, table: meta.tableName, alias: \"_data\", fromAlias: \"_f\" },\n ],\n // For each unique query, capture its filter values in `bindings` to populate the CTE _find table\n ctes: [buildUnnestCte(\"_find\", argsColumns, createColumnValuesFromPrepared(args, entries))],\n orderBys: [],\n };\n\n const rows = await em[\"executePreparedFind\"](meta, findCountOperation, query2, findSettings, false);\n\n // Make an empty array for each batched query, per the dataloader contract\n const results = entries.map(() => 0);\n // Then put each row into the tagged query it matched\n for (const row of rows) {\n results[row.tag] = Number(row.count);\n }\n return results;\n },\n // Our filter/order tuple is a complex object, so use a stable cache key to ensure caching works.\n { cacheKeyFn: (entry) => queryFilterHash(entry) },\n )\n .load(prepared);\n}\n\n/** Merges root-scope count/id settings with caller options, dropping pagination-only settings. */\nexport function mergeCountOptions<T extends Entity>(\n where: FindFilter<T>,\n options: FindCountFilterOptions<T>,\n): { where: FindFilter<T>; options: FindCountFilterOptions<T> };\nexport function mergeCountOptions<T extends Entity>(\n where: FindFilter<T> | GraphQLFilterWithAlias<T>,\n options: FindCountFilterOptions<T>,\n): { where: FindFilter<T> | GraphQLFilterWithAlias<T>; options: FindCountFilterOptions<T> };\nexport function mergeCountOptions<T extends Entity>(\n where: FindFilter<T> | GraphQLFilterWithAlias<T>,\n options: FindCountFilterOptions<T>,\n): { where: FindFilter<T> | GraphQLFilterWithAlias<T>; options: FindCountFilterOptions<T> } {\n if (!isScope<T>(where)) return { where, options };\n\n const resolved = resolveScope(where);\n const scopeOptions: FindCountFilterOptions<T> = {};\n if (resolved.softDeletes !== undefined) scopeOptions.softDeletes = resolved.softDeletes;\n return { where, options: { ...scopeOptions, ...options } };\n}\n\n/** Adds `id not in pendingDeletedIds` to the count query so pending deletes are excluded in SQL. */\nfunction appendPendingDeletedIds<T extends Entity>(\n em: EntityManager,\n type: MaybeAbstractEntityConstructor<T>,\n query: ParsedFindQuery,\n idDbType: \"bigint\" | \"int\" | \"uuid\" | \"text\",\n where: FilterAndSettings<T>[\"where\"],\n opts: Omit<FilterAndSettings<T>, \"where\">,\n): readonly IdType[] {\n const pendingDeletedIds = isSelectAllFilter(where, opts.conditions)\n ? []\n : getEmInternalApi(em).pendingDeleteIds(type);\n if (pendingDeletedIds.length === 0) return pendingDeletedIds;\n\n const primary = query.tables.find((t) => t.join === \"primary\") ?? fail(\"No primary\");\n const condition = {\n kind: \"column\" as const,\n alias: primary.alias,\n column: \"id\",\n dbType: idDbType,\n cond: { kind: \"nin\" as const, value: pendingDeletedIds },\n pruneable: true,\n };\n\n if (!query.condition) {\n query.condition = { kind: \"exp\", op: \"and\", conditions: [condition] };\n } else if (query.condition.op === \"and\") {\n query.condition.conditions.push(condition);\n } else {\n query.condition = { kind: \"exp\", op: \"and\", conditions: [query.condition, condition] };\n }\n return pendingDeletedIds;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"findCountDataLoader.js","names":[],"sources":["../../src/dataloaders/findCountDataLoader.ts"],"sourcesContent":["import type { Entity, IdType } from \"../Entity.ts\";\nimport {\n type EntityManager,\n type FindCountFilterOptions,\n type MaybeAbstractEntityConstructor,\n getEmInternalApi,\n} from \"../EntityManager.ts\";\nimport { getMetadata } from \"../EntityMetadata.ts\";\nimport type { FilterAndSettings, FindFilter } from \"../queries/find/EntityFilter.ts\";\nimport type { GraphQLFilterWithAlias } from \"../queries/find/EntityGraphQLFilter.ts\";\nimport { type ParsedFindQuery, parseFindQuery } from \"../queries/find/QueryParser.ts\";\nimport { isScope, isSelectAllFilter, resolveScope } from \"../queries/find/scopes.ts\";\nimport { kq } from \"../queries/sql/keywords.ts\";\nimport { buildUnnestCte } from \"../unnest.ts\";\nimport { fail } from \"../utils.ts\";\nimport {\n collectAndReplaceArgs,\n collectValues,\n createColumnValuesFromPrepared,\n getBatchKeyFromGenericStructure,\n queryFilterHash,\n} from \"./findDataLoader.ts\";\n\nexport const findCountOperation = \"find-count\";\n\nexport function findCountDataLoader<T extends Entity>(\n em: EntityManager,\n type: MaybeAbstractEntityConstructor<T>,\n filter: FilterAndSettings<T>,\n): Promise<number> {\n const { where, ...opts } = filter;\n if (opts.limit || opts.offset) {\n throw new Error(\"Cannot use limit/offset with findCountDataLoader\");\n }\n\n const meta = getMetadata(type);\n const query = parseFindQuery(meta, where, opts);\n const pendingDeletedIds = appendPendingDeletedIds(em, type, query, meta.idDbType, where, opts);\n const { findSettings } = em[\"prepareFind\"](meta, findCountOperation, query, { ...opts, checkLimit: false });\n const bindings: any[] = [];\n collectValues(bindings, query);\n const prepared = { filter, pendingDeletedIds, query, bindings, findSettings };\n const batchKey = getBatchKeyFromGenericStructure(meta, query);\n\n return em\n .getLoader<typeof prepared, number>(\n findCountOperation,\n batchKey,\n async (entries) => {\n // We're guaranteed that these queries all have the same structure\n\n // Don't bother with the CTE if there's only 1 query (or each query has exactly the same filter values)\n if (entries.length === 1) {\n const { query, findSettings } = entries[0];\n const primary = query.tables.find((t) => t.join === \"primary\") ?? fail(\"No primary\");\n query.selects = [`count(distinct ${kq(primary.alias)}.id) as count`];\n query.orderBys = [];\n const rows = await em[\"executePreparedFind\"](meta, findCountOperation, query, findSettings, false);\n return [Number(rows[0].count)];\n }\n\n // WITH _find (tag, arg1, arg2) AS (\n // SELECT unnest($0::int[]), unnest($0::varchar[]), unnest($0::varchar[])\n // )\n // SELECT _find.tag, _data.count\n // FROM _find\n // CROSS JOIN LATERAL (\n // SELECT count(*) as count\n // FROM author a WHERE a.first_name = _find.arg1 OR a.last_name = _find.arg2\n // ) _data\n\n // Build the list of 'arg1', 'arg2', ... strings\n const { query, findSettings } = entries[0];\n const args = collectAndReplaceArgs(query, entries);\n const argsColumns = [{ columnName: \"tag\", dbType: \"int\" }, ...args.map((a) => a.column)];\n\n // We're not returning the entities, just counting them...\n const primary = query.tables.find((t) => t.join === \"primary\") ?? fail(\"No primary\");\n query.selects = [`count(distinct ${kq(primary.alias)}.id) as count`];\n query.orderBys = [];\n\n const query2: ParsedFindQuery = {\n selects: [\"_find.tag as tag\", \"_data.count as count\"],\n tables: [\n { join: \"primary\", table: \"_find\", alias: \"_find\" },\n // Not sure what fromAlias is for/that it matters...\n { join: \"lateral\", query: query, table: meta.tableName, alias: \"_data\", fromAlias: \"_f\" },\n ],\n // For each unique query, capture its filter values in `bindings` to populate the CTE _find table\n ctes: [buildUnnestCte(\"_find\", argsColumns, createColumnValuesFromPrepared(args, entries))],\n orderBys: [],\n };\n\n const rows = await em[\"executePreparedFind\"](meta, findCountOperation, query2, findSettings, false);\n\n // Make an empty array for each batched query, per the dataloader contract\n const results = entries.map(() => 0);\n // Then put each row into the tagged query it matched\n for (const row of rows) {\n results[row.tag] = Number(row.count);\n }\n return results;\n },\n // Our filter/order tuple is a complex object, so use a stable cache key to ensure caching works.\n { cacheKeyFn: (entry) => queryFilterHash(entry) },\n )\n .load(prepared);\n}\n\n/** Merges root-scope count/id settings with caller options, dropping pagination-only settings. */\nexport function mergeCountOptions<T extends Entity>(\n where: FindFilter<T>,\n options: FindCountFilterOptions<T>,\n): { where: FindFilter<T>; options: FindCountFilterOptions<T> };\nexport function mergeCountOptions<T extends Entity>(\n where: FindFilter<T> | GraphQLFilterWithAlias<T>,\n options: FindCountFilterOptions<T>,\n): { where: FindFilter<T> | GraphQLFilterWithAlias<T>; options: FindCountFilterOptions<T> };\nexport function mergeCountOptions<T extends Entity>(\n where: FindFilter<T> | GraphQLFilterWithAlias<T>,\n options: FindCountFilterOptions<T>,\n): { where: FindFilter<T> | GraphQLFilterWithAlias<T>; options: FindCountFilterOptions<T> } {\n if (!isScope<T>(where)) return { where, options };\n\n const resolved = resolveScope(where);\n const scopeOptions: FindCountFilterOptions<T> = {};\n if (resolved.softDeletes !== undefined) scopeOptions.softDeletes = resolved.softDeletes;\n return { where, options: { ...scopeOptions, ...options } };\n}\n\n/** Adds `id not in pendingDeletedIds` to the count query so pending deletes are excluded in SQL. */\nfunction appendPendingDeletedIds<T extends Entity>(\n em: EntityManager,\n type: MaybeAbstractEntityConstructor<T>,\n query: ParsedFindQuery,\n idDbType: \"bigint\" | \"int\" | \"uuid\" | \"text\",\n where: FilterAndSettings<T>[\"where\"],\n opts: Omit<FilterAndSettings<T>, \"where\">,\n): readonly IdType[] {\n const pendingDeletedIds = isSelectAllFilter(where, opts.conditions)\n ? []\n : getEmInternalApi(em).pendingDeleteIds(type);\n if (pendingDeletedIds.length === 0) return pendingDeletedIds;\n\n const primary = query.tables.find((t) => t.join === \"primary\") ?? fail(\"No primary\");\n const condition = {\n kind: \"column\" as const,\n alias: primary.alias,\n column: \"id\",\n dbType: idDbType,\n cond: { kind: \"nin\" as const, value: pendingDeletedIds },\n pruneable: true,\n };\n\n if (!query.condition) {\n query.condition = { kind: \"exp\", op: \"and\", conditions: [condition] };\n } else if (query.condition.op === \"and\") {\n query.condition.conditions.push(condition);\n } else {\n query.condition = { kind: \"exp\", op: \"and\", conditions: [query.condition, condition] };\n }\n return pendingDeletedIds;\n}\n"],"mappings":";;;;;;;;;AAuBA,MAAa,qBAAqB;AAElC,SAAgB,oBACd,IACA,MACA,QACiB;CACjB,MAAM,EAAE,OAAO,GAAG,SAAS;CAC3B,IAAI,KAAK,SAAS,KAAK,QACrB,MAAM,IAAI,MAAM,kDAAkD;CAGpE,MAAM,OAAO,YAAY,IAAI;CAC7B,MAAM,QAAQ,eAAe,MAAM,OAAO,IAAI;CAC9C,MAAM,oBAAoB,wBAAwB,IAAI,MAAM,OAAO,KAAK,UAAU,OAAO,IAAI;CAC7F,MAAM,EAAE,iBAAiB,GAAG,cAAc,CAAC,MAAM,oBAAoB,OAAO;EAAE,GAAG;EAAM,YAAY;CAAM,CAAC;CAC1G,MAAM,WAAkB,CAAC;CACzB,cAAc,UAAU,KAAK;CAC7B,MAAM,WAAW;EAAE;EAAQ;EAAmB;EAAO;EAAU;CAAa;CAC5E,MAAM,WAAW,gCAAgC,MAAM,KAAK;CAE5D,OAAO,GACJ,UACC,oBACA,UACA,OAAO,YAAY;EAIjB,IAAI,QAAQ,WAAW,GAAG;GACxB,MAAM,EAAE,OAAO,iBAAiB,QAAQ;GACxC,MAAM,UAAU,MAAM,OAAO,MAAM,MAAM,EAAE,SAAS,SAAS,KAAK,KAAK,YAAY;GACnF,MAAM,UAAU,CAAC,kBAAkB,GAAG,QAAQ,KAAK,EAAE,cAAc;GACnE,MAAM,WAAW,CAAC;GAClB,MAAM,OAAO,MAAM,GAAG,sBAAsB,CAAC,MAAM,oBAAoB,OAAO,cAAc,KAAK;GACjG,OAAO,CAAC,OAAO,KAAK,EAAE,CAAC,KAAK,CAAC;EAC/B;EAaA,MAAM,EAAE,OAAO,iBAAiB,QAAQ;EACxC,MAAM,OAAO,sBAAsB,OAAO,OAAO;EACjD,MAAM,cAAc,CAAC;GAAE,YAAY;GAAO,QAAQ;EAAM,GAAG,GAAG,KAAK,KAAK,MAAM,EAAE,MAAM,CAAC;EAGvF,MAAM,UAAU,MAAM,OAAO,MAAM,MAAM,EAAE,SAAS,SAAS,KAAK,KAAK,YAAY;EACnF,MAAM,UAAU,CAAC,kBAAkB,GAAG,QAAQ,KAAK,EAAE,cAAc;EACnE,MAAM,WAAW,CAAC;EAElB,MAAM,SAA0B;GAC9B,SAAS,CAAC,oBAAoB,sBAAsB;GACpD,QAAQ,CACN;IAAE,MAAM;IAAW,OAAO;IAAS,OAAO;GAAQ,GAElD;IAAE,MAAM;IAAkB;IAAO,OAAO,KAAK;IAAW,OAAO;IAAS,WAAW;GAAK,CAC1F;GAEA,MAAM,CAAC,eAAe,SAAS,aAAa,+BAA+B,MAAM,OAAO,CAAC,CAAC;GAC1F,UAAU,CAAC;EACb;EAEA,MAAM,OAAO,MAAM,GAAG,sBAAsB,CAAC,MAAM,oBAAoB,QAAQ,cAAc,KAAK;EAGlG,MAAM,UAAU,QAAQ,UAAU,CAAC;EAEnC,KAAK,MAAM,OAAO,MAChB,QAAQ,IAAI,OAAO,OAAO,IAAI,KAAK;EAErC,OAAO;CACT,GAEA,EAAE,aAAa,UAAU,gBAAgB,KAAK,EAAE,CAClD,CAAC,CACA,KAAK,QAAQ;AAClB;AAWA,SAAgB,kBACd,OACA,SAC0F;CAC1F,IAAI,CAAC,QAAW,KAAK,GAAG,OAAO;EAAE;EAAO;CAAQ;CAEhD,MAAM,WAAW,aAAa,KAAK;CACnC,MAAM,eAA0C,CAAC;CACjD,IAAI,SAAS,gBAAgB,KAAA,GAAW,aAAa,cAAc,SAAS;CAC5E,OAAO;EAAE;EAAO,SAAS;GAAE,GAAG;GAAc,GAAG;EAAQ;CAAE;AAC3D;;AAGA,SAAS,wBACP,IACA,MACA,OACA,UACA,OACA,MACmB;CACnB,MAAM,oBAAoB,kBAAkB,OAAO,KAAK,UAAU,IAC9D,CAAC,IACD,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,IAAI;CAC9C,IAAI,kBAAkB,WAAW,GAAG,OAAO;CAG3C,MAAM,YAAY;EAChB,MAAM;EACN,QAHc,MAAM,OAAO,MAAM,MAAM,EAAE,SAAS,SAAS,KAAK,KAAK,YAAY,EAAA,CAGlE;EACf,QAAQ;EACR,QAAQ;EACR,MAAM;GAAE,MAAM;GAAgB,OAAO;EAAkB;EACvD,WAAW;CACb;CAEA,IAAI,CAAC,MAAM,WACT,MAAM,YAAY;EAAE,MAAM;EAAO,IAAI;EAAO,YAAY,CAAC,SAAS;CAAE;MAC/D,IAAI,MAAM,UAAU,OAAO,OAChC,MAAM,UAAU,WAAW,KAAK,SAAS;MAEzC,MAAM,YAAY;EAAE,MAAM;EAAO,IAAI;EAAO,YAAY,CAAC,MAAM,WAAW,SAAS;CAAE;CAEvF,OAAO;AACT"}
@@ -1,27 +1,23 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- require("../EntityFilter.cjs");
3
- const require_EntityGraphQLFilter = require("../EntityGraphQLFilter.cjs");
4
- const require_keywords = require("../keywords.cjs");
5
- const require_EntityMetadata = require("../EntityMetadata.cjs");
6
2
  const require_fields = require("../fields.cjs");
3
+ const require_queries_sql_keywords = require("../queries/sql/keywords.cjs");
4
+ const require_queries_find_QueryVisitor = require("../queries/find/QueryVisitor.cjs");
5
+ const require_queries_find_QueryParser = require("../queries/find/QueryParser.cjs");
7
6
  const require_normalizeHints = require("../normalizeHints.cjs");
8
- require("../loadHints.cjs");
9
7
  const require_utils = require("../utils.cjs");
10
- const require_QueryVisitor = require("../QueryVisitor.cjs");
11
- require("../drivers/EntityWriter.cjs");
8
+ const require_EntityMetadata = require("../EntityMetadata.cjs");
9
+ const require_queries_find_EntityGraphQLFilter = require("../queries/find/EntityGraphQLFilter.cjs");
12
10
  const require_HintTree = require("../HintTree.cjs");
13
11
  const require_unnest = require("../unnest.cjs");
14
12
  const require_dataloaders_fastWhereFilterHash = require("./fastWhereFilterHash.cjs");
15
13
  const require_EntityManager = require("../EntityManager.cjs");
16
- require("../Entity.cjs");
17
- const require_QueryParser = require("../QueryParser.cjs");
18
14
  //#region src/dataloaders/findDataLoader.ts
19
15
  const findOperation = "find";
20
16
  function findDataLoader(em, type, filter, hint) {
21
17
  const { where, ...opts } = filter;
22
18
  if ("limit" in opts || "offset" in opts) throw new Error("Cannot use limit/offset with findDataLoader");
23
19
  const meta = require_EntityMetadata.getMetadata(type);
24
- const query = require_QueryParser.parseFindQuery(meta, where, opts);
20
+ const query = require_queries_find_QueryParser.parseFindQuery(meta, where, opts);
25
21
  const { checkLimit, findSettings } = em["prepareFind"](meta, findOperation, query, {
26
22
  ...opts,
27
23
  limit: em.entityLimit
@@ -68,7 +64,7 @@ function findDataLoader(em, type, filter, hint) {
68
64
  query2.tables.push(...preloadJoins.map((j) => j.join));
69
65
  }
70
66
  query2.groupBys = buildGroupBys(query2.selects);
71
- const [primary] = require_QueryParser.getTables(query2);
67
+ const [primary] = require_queries_find_QueryParser.getTables(query2);
72
68
  for (const { alias, column } of query2.orderBys) if (alias !== primary.alias) query2.groupBys.push({
73
69
  alias,
74
70
  column
@@ -141,7 +137,7 @@ function collectAndReplaceArgs(query, entries) {
141
137
  const argsIndex = new ArgCounter();
142
138
  const constant = computeConstantBindings(entries);
143
139
  let bindingIndex = 0;
144
- require_QueryVisitor.visitConditions(query, { visitCond(c) {
140
+ require_queries_find_QueryVisitor.visitConditions(query, { visitCond(c) {
145
141
  if ("value" in c.cond) {
146
142
  const { kind } = c.cond;
147
143
  const consumed = kind === "between" ? 2 : 1;
@@ -188,7 +184,7 @@ function rewriteToRawCondition(c, argsIndex) {
188
184
  return {
189
185
  kind: "raw",
190
186
  aliases: [c.alias],
191
- condition: `${negate ? "NOT " : ""}${require_keywords.kqDot(c.alias, c.column)} ${op}`,
187
+ condition: `${negate ? "NOT " : ""}${require_queries_sql_keywords.kqDot(c.alias, c.column)} ${op}`,
192
188
  pruneable: c.pruneable ?? false,
193
189
  bindings: []
194
190
  };
@@ -210,7 +206,7 @@ function createColumnValuesFromPrepared(args, entries) {
210
206
  }
211
207
  /** Pushes the arg values of a given query in the cross-query `bindings` array. */
212
208
  function collectValues(bindings, query) {
213
- require_QueryVisitor.visitConditions(query, { visitCond(c) {
209
+ require_queries_find_QueryVisitor.visitConditions(query, { visitCond(c) {
214
210
  if ("value" in c.cond) {
215
211
  if (c.cond.kind === "between") {
216
212
  bindings.push(c.cond.value[0]);
@@ -226,7 +222,7 @@ function isAggregateSelect(select) {
226
222
  /** Builds GROUP BYs for selected values, accounting for whole-row selects that are grouped by primary key. */
227
223
  function buildGroupBys(selects) {
228
224
  const sqlSelects = selects.map(selectSqlForGroupBy);
229
- const wholeRowAliases = new Set(sqlSelects.filter((select) => !isAggregateSelect(select) && stripSelectAlias(select).endsWith(".*")).map(require_QueryParser.parseAlias));
225
+ const wholeRowAliases = new Set(sqlSelects.filter((select) => !isAggregateSelect(select) && stripSelectAlias(select).endsWith(".*")).map(require_queries_find_QueryParser.parseAlias));
230
226
  return sqlSelects.filter((select) => !isAggregateSelect(select)).filter((select) => !isCoveredByWholeRowGroupBy(select, wholeRowAliases)).map((select) => groupBySelect(select));
231
227
  }
232
228
  /** Returns a SQL string for group-by analysis, until we support bindings in ParsedGroupBy. */
@@ -238,7 +234,7 @@ function selectSqlForGroupBy(select) {
238
234
  function groupBySelect(select) {
239
235
  const expression = stripSelectAlias(select);
240
236
  if (expression.endsWith(".*")) return {
241
- alias: require_QueryParser.parseAlias(expression),
237
+ alias: require_queries_find_QueryParser.parseAlias(expression),
242
238
  column: "id"
243
239
  };
244
240
  return { expression };
@@ -281,9 +277,9 @@ function makeOp(cond, argsIndex) {
281
277
  case "jsonPathPredicate":
282
278
  case "contains":
283
279
  case "overlaps":
284
- case "containedBy": return [`${require_EntityGraphQLFilter.opToFn[cond.kind] ?? require_utils.fail(`Invalid operator ${cond.kind}`)} _find.arg${argsIndex.next()}`, false];
280
+ case "containedBy": return [`${require_queries_find_EntityGraphQLFilter.opToFn[cond.kind] ?? require_utils.fail(`Invalid operator ${cond.kind}`)} _find.arg${argsIndex.next()}`, false];
285
281
  case "noverlaps":
286
- case "ncontains": return [`${require_EntityGraphQLFilter.opToFn[cond.kind.substring(1)] ?? require_utils.fail(`Invalid operator ${cond.kind}`)} _find.arg${argsIndex.next()}`, true];
282
+ case "ncontains": return [`${require_queries_find_EntityGraphQLFilter.opToFn[cond.kind.substring(1)] ?? require_utils.fail(`Invalid operator ${cond.kind}`)} _find.arg${argsIndex.next()}`, true];
287
283
  case "is-null": return [`IS NULL`, false];
288
284
  case "not-null": return [`IS NOT NULL`, false];
289
285
  case "in": return [`= ANY(_find.arg${argsIndex.next()})`, false];
@@ -342,7 +338,7 @@ function argsEqual(a, b) {
342
338
  }
343
339
  function getBatchKeyFromGenericStructure(meta, query) {
344
340
  const saved = /* @__PURE__ */ new Map();
345
- require_QueryVisitor.visitConditions(query, { visitCond(c) {
341
+ require_queries_find_QueryVisitor.visitConditions(query, { visitCond(c) {
346
342
  const { cond } = c;
347
343
  if ("value" in cond && !saved.has(cond)) {
348
344
  saved.set(cond, cond.value);