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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (687) hide show
  1. package/build/EntityManager.cjs +36 -39
  2. package/build/EntityManager.cjs.map +1 -1
  3. package/build/EntityManager.d.cts +4 -4
  4. package/build/EntityManager.d.mts +4 -4
  5. package/build/EntityManager.js +29 -32
  6. package/build/EntityManager.js.map +1 -1
  7. package/build/EntityMetadata.cjs +3 -3
  8. package/build/EntityMetadata.js +3 -3
  9. package/build/IndexManager.cjs +1 -1
  10. package/build/IndexManager.js +1 -1
  11. package/build/InstanceData.cjs +1 -1
  12. package/build/InstanceData.js +1 -1
  13. package/build/JoinRows.cjs +1 -1
  14. package/build/JoinRows.js +1 -1
  15. package/build/PluginManager.cjs +0 -1
  16. package/build/PluginManager.cjs.map +1 -1
  17. package/build/PluginManager.d.cts +1 -1
  18. package/build/PluginManager.d.mts +1 -1
  19. package/build/PluginManager.js +0 -1
  20. package/build/PluginManager.js.map +1 -1
  21. package/build/ReactionsManager.cjs +2 -2
  22. package/build/ReactionsManager.js +2 -2
  23. package/build/Todo.cjs +1 -1
  24. package/build/Todo.js +1 -1
  25. package/build/batchloaders/enumCollectionBatchLoader.cjs +1 -1
  26. package/build/batchloaders/enumCollectionBatchLoader.js +1 -1
  27. package/build/batchloaders/loadBatchLoader.cjs +6 -5
  28. package/build/batchloaders/loadBatchLoader.cjs.map +1 -1
  29. package/build/batchloaders/loadBatchLoader.d.cts.map +1 -1
  30. package/build/batchloaders/loadBatchLoader.d.mts.map +1 -1
  31. package/build/batchloaders/loadBatchLoader.js +4 -3
  32. package/build/batchloaders/loadBatchLoader.js.map +1 -1
  33. package/build/batchloaders/manyToManyBatchLoader.cjs +1 -1
  34. package/build/batchloaders/manyToManyBatchLoader.js +1 -1
  35. package/build/batchloaders/oneToManyBatchLoader.cjs +3 -3
  36. package/build/batchloaders/oneToManyBatchLoader.cjs.map +1 -1
  37. package/build/batchloaders/oneToManyBatchLoader.js +2 -2
  38. package/build/batchloaders/oneToOneBatchLoader.cjs +4 -4
  39. package/build/batchloaders/oneToOneBatchLoader.cjs.map +1 -1
  40. package/build/batchloaders/oneToOneBatchLoader.js +3 -3
  41. package/build/batchloaders/populateBatchLoader.cjs +11 -11
  42. package/build/batchloaders/populateBatchLoader.cjs.map +1 -1
  43. package/build/batchloaders/populateBatchLoader.js +8 -8
  44. package/build/batchloaders/recursiveChildrenBatchLoader.cjs +8 -8
  45. package/build/batchloaders/recursiveChildrenBatchLoader.cjs.map +1 -1
  46. package/build/batchloaders/recursiveChildrenBatchLoader.js +5 -5
  47. package/build/batchloaders/recursiveM2mBatchLoader.cjs +5 -5
  48. package/build/batchloaders/recursiveM2mBatchLoader.cjs.map +1 -1
  49. package/build/batchloaders/recursiveM2mBatchLoader.js +2 -2
  50. package/build/batchloaders/recursiveParentsBatchLoader.cjs +8 -8
  51. package/build/batchloaders/recursiveParentsBatchLoader.cjs.map +1 -1
  52. package/build/batchloaders/recursiveParentsBatchLoader.js +5 -5
  53. package/build/changes.cjs +4 -4
  54. package/build/changes.js +4 -4
  55. package/build/config.cjs +3 -3
  56. package/build/config.js +3 -3
  57. package/build/configure.cjs +6 -6
  58. package/build/configure.js +6 -6
  59. package/build/dataloaders/fastWhereFilterHash.cjs +3 -3
  60. package/build/dataloaders/fastWhereFilterHash.cjs.map +1 -1
  61. package/build/dataloaders/fastWhereFilterHash.js +2 -2
  62. package/build/dataloaders/fastWhereFilterHash.js.map +1 -1
  63. package/build/dataloaders/findByUniqueDataLoader.cjs +5 -6
  64. package/build/dataloaders/findByUniqueDataLoader.cjs.map +1 -1
  65. package/build/dataloaders/findByUniqueDataLoader.d.cts.map +1 -1
  66. package/build/dataloaders/findByUniqueDataLoader.d.mts.map +1 -1
  67. package/build/dataloaders/findByUniqueDataLoader.js +3 -4
  68. package/build/dataloaders/findByUniqueDataLoader.js.map +1 -1
  69. package/build/dataloaders/findCountDataLoader.cjs +10 -13
  70. package/build/dataloaders/findCountDataLoader.cjs.map +1 -1
  71. package/build/dataloaders/findCountDataLoader.d.cts +2 -2
  72. package/build/dataloaders/findCountDataLoader.d.mts +2 -2
  73. package/build/dataloaders/findCountDataLoader.js +4 -7
  74. package/build/dataloaders/findCountDataLoader.js.map +1 -1
  75. package/build/dataloaders/findDataLoader.cjs +15 -19
  76. package/build/dataloaders/findDataLoader.cjs.map +1 -1
  77. package/build/dataloaders/findDataLoader.d.cts +2 -2
  78. package/build/dataloaders/findDataLoader.d.cts.map +1 -1
  79. package/build/dataloaders/findDataLoader.d.mts +2 -2
  80. package/build/dataloaders/findDataLoader.d.mts.map +1 -1
  81. package/build/dataloaders/findDataLoader.js +5 -9
  82. package/build/dataloaders/findDataLoader.js.map +1 -1
  83. package/build/dataloaders/findIdsDataLoader.cjs +6 -9
  84. package/build/dataloaders/findIdsDataLoader.cjs.map +1 -1
  85. package/build/dataloaders/findIdsDataLoader.d.cts +1 -1
  86. package/build/dataloaders/findIdsDataLoader.d.mts +1 -1
  87. package/build/dataloaders/findIdsDataLoader.js +3 -6
  88. package/build/dataloaders/findIdsDataLoader.js.map +1 -1
  89. package/build/dataloaders/findOrCreateDataLoader.cjs +1 -2
  90. package/build/dataloaders/findOrCreateDataLoader.cjs.map +1 -1
  91. package/build/dataloaders/findOrCreateDataLoader.js +1 -2
  92. package/build/dataloaders/findOrCreateDataLoader.js.map +1 -1
  93. package/build/dataloaders/findPaginatedDataLoader.cjs +3 -6
  94. package/build/dataloaders/findPaginatedDataLoader.cjs.map +1 -1
  95. package/build/dataloaders/findPaginatedDataLoader.d.cts +1 -1
  96. package/build/dataloaders/findPaginatedDataLoader.d.mts +1 -1
  97. package/build/dataloaders/findPaginatedDataLoader.js +2 -5
  98. package/build/dataloaders/findPaginatedDataLoader.js.map +1 -1
  99. package/build/dataloaders/lensDataLoader.cjs +4 -4
  100. package/build/dataloaders/lensDataLoader.cjs.map +1 -1
  101. package/build/dataloaders/lensDataLoader.js +2 -2
  102. package/build/dataloaders/lensDataLoader.js.map +1 -1
  103. package/build/dataloaders/manyToManyFindDataLoader.cjs +1 -4
  104. package/build/dataloaders/manyToManyFindDataLoader.cjs.map +1 -1
  105. package/build/dataloaders/manyToManyFindDataLoader.d.cts +0 -1
  106. package/build/dataloaders/manyToManyFindDataLoader.d.cts.map +1 -1
  107. package/build/dataloaders/manyToManyFindDataLoader.d.mts +0 -1
  108. package/build/dataloaders/manyToManyFindDataLoader.d.mts.map +1 -1
  109. package/build/dataloaders/manyToManyFindDataLoader.js +1 -4
  110. package/build/dataloaders/manyToManyFindDataLoader.js.map +1 -1
  111. package/build/dataloaders/oneToManyFindDataLoader.cjs +3 -6
  112. package/build/dataloaders/oneToManyFindDataLoader.cjs.map +1 -1
  113. package/build/dataloaders/oneToManyFindDataLoader.d.cts +0 -1
  114. package/build/dataloaders/oneToManyFindDataLoader.d.cts.map +1 -1
  115. package/build/dataloaders/oneToManyFindDataLoader.d.mts +0 -1
  116. package/build/dataloaders/oneToManyFindDataLoader.d.mts.map +1 -1
  117. package/build/dataloaders/oneToManyFindDataLoader.js +2 -5
  118. package/build/dataloaders/oneToManyFindDataLoader.js.map +1 -1
  119. package/build/defaults.cjs +4 -4
  120. package/build/defaults.js +4 -4
  121. package/build/driverApi.cjs +4 -5
  122. package/build/driverApi.cjs.map +1 -1
  123. package/build/driverApi.d.cts +1 -1
  124. package/build/driverApi.d.mts +1 -1
  125. package/build/driverApi.js +2 -2
  126. package/build/driverApi.js.map +1 -1
  127. package/build/drivers/Driver.cjs +0 -1
  128. package/build/drivers/Driver.d.cts +1 -1
  129. package/build/drivers/Driver.d.mts +1 -1
  130. package/build/drivers/Driver.js +0 -1
  131. package/build/drivers/EntityWriter.cjs +2 -2
  132. package/build/drivers/EntityWriter.js +2 -2
  133. package/build/drivers/index.cjs +0 -6
  134. package/build/drivers/index.d.cts +1 -3
  135. package/build/drivers/index.d.mts +1 -3
  136. package/build/drivers/index.js +1 -3
  137. package/build/fieldSerde.cjs +2 -2
  138. package/build/fieldSerde.js +2 -2
  139. package/build/fields.cjs +2 -2
  140. package/build/fields.js +2 -2
  141. package/build/getProperties.cjs +1 -1
  142. package/build/getProperties.js +1 -1
  143. package/build/index.cjs +109 -107
  144. package/build/index.cjs.map +1 -1
  145. package/build/index.d.cts +27 -24
  146. package/build/index.d.cts.map +1 -1
  147. package/build/index.d.mts +27 -24
  148. package/build/index.d.mts.map +1 -1
  149. package/build/index.js +51 -49
  150. package/build/index.js.map +1 -1
  151. package/build/json.cjs +3 -3
  152. package/build/json.js +3 -3
  153. package/build/keys.cjs +1 -1
  154. package/build/keys.js +1 -1
  155. package/build/loadHints.cjs +1 -1
  156. package/build/loadHints.js +1 -1
  157. package/build/loadLens.cjs +1 -1
  158. package/build/loadLens.js +1 -1
  159. package/build/logging/FactoryLogger.cjs +1 -1
  160. package/build/logging/FactoryLogger.js +1 -1
  161. package/build/logging/FieldLogger.cjs +1 -1
  162. package/build/logging/FieldLogger.js +1 -1
  163. package/build/logging/ReactionLogger.cjs +1 -1
  164. package/build/logging/ReactionLogger.js +1 -1
  165. package/build/newEntity.cjs +1 -1
  166. package/build/newEntity.js +1 -1
  167. package/build/newTestInstance.cjs +3 -3
  168. package/build/newTestInstance.js +3 -3
  169. package/build/plugins/PreloadPlugin.cjs +1 -2
  170. package/build/plugins/PreloadPlugin.d.cts +1 -1
  171. package/build/plugins/PreloadPlugin.d.mts +1 -1
  172. package/build/plugins/PreloadPlugin.js +1 -2
  173. package/build/preloading/JsonAggregatePreloader.cjs +31 -31
  174. package/build/preloading/JsonAggregatePreloader.cjs.map +1 -1
  175. package/build/preloading/JsonAggregatePreloader.d.cts +1 -1
  176. package/build/preloading/JsonAggregatePreloader.d.mts +1 -1
  177. package/build/preloading/JsonAggregatePreloader.js +6 -6
  178. package/build/preloading/JsonAggregatePreloader.js.map +1 -1
  179. package/build/preloading/partitionHint.cjs +3 -3
  180. package/build/preloading/partitionHint.js +3 -3
  181. package/build/{ConditionBuilder.cjs → queries/ConditionBuilder.cjs} +7 -8
  182. package/build/queries/ConditionBuilder.cjs.map +1 -0
  183. package/build/{ConditionBuilder.d.cts → queries/ConditionBuilder.d.cts} +3 -3
  184. package/build/queries/ConditionBuilder.d.cts.map +1 -0
  185. package/build/{ConditionBuilder.d.mts → queries/ConditionBuilder.d.mts} +3 -3
  186. package/build/queries/ConditionBuilder.d.mts.map +1 -0
  187. package/build/{ConditionBuilder.js → queries/ConditionBuilder.js} +4 -5
  188. package/build/queries/ConditionBuilder.js.map +1 -0
  189. package/build/{conditions.cjs → queries/conditions.cjs} +1 -2
  190. package/build/queries/conditions.cjs.map +1 -0
  191. package/build/{conditions.d.cts → queries/conditions.d.cts} +2 -2
  192. package/build/queries/conditions.d.cts.map +1 -0
  193. package/build/{conditions.d.mts → queries/conditions.d.mts} +2 -2
  194. package/build/queries/conditions.d.mts.map +1 -0
  195. package/build/{conditions.js → queries/conditions.js} +1 -2
  196. package/build/queries/conditions.js.map +1 -0
  197. package/build/queries/entityQueryUtils.cjs +60 -0
  198. package/build/queries/entityQueryUtils.cjs.map +1 -0
  199. package/build/queries/entityQueryUtils.d.cts +19 -0
  200. package/build/queries/entityQueryUtils.d.cts.map +1 -0
  201. package/build/queries/entityQueryUtils.d.mts +19 -0
  202. package/build/queries/entityQueryUtils.d.mts.map +1 -0
  203. package/build/queries/entityQueryUtils.js +56 -0
  204. package/build/queries/entityQueryUtils.js.map +1 -0
  205. package/build/{Aliases.cjs → queries/find/Aliases.cjs} +23 -28
  206. package/build/queries/find/Aliases.cjs.map +1 -0
  207. package/build/{Aliases.d.cts → queries/find/Aliases.d.cts} +7 -7
  208. package/build/queries/find/Aliases.d.cts.map +1 -0
  209. package/build/{Aliases.d.mts → queries/find/Aliases.d.mts} +7 -7
  210. package/build/queries/find/Aliases.d.mts.map +1 -0
  211. package/build/{Aliases.js → queries/find/Aliases.js} +7 -12
  212. package/build/queries/find/Aliases.js.map +1 -0
  213. package/build/{DeferredAlias.cjs → queries/find/DeferredAlias.cjs} +3 -6
  214. package/build/queries/find/DeferredAlias.cjs.map +1 -0
  215. package/build/{DeferredAlias.d.cts → queries/find/DeferredAlias.d.cts} +4 -4
  216. package/build/queries/find/DeferredAlias.d.cts.map +1 -0
  217. package/build/{DeferredAlias.d.mts → queries/find/DeferredAlias.d.mts} +4 -4
  218. package/build/queries/find/DeferredAlias.d.mts.map +1 -0
  219. package/build/{DeferredAlias.js → queries/find/DeferredAlias.js} +2 -5
  220. package/build/queries/find/DeferredAlias.js.map +1 -0
  221. package/build/{EntityFilter.cjs → queries/find/EntityFilter.cjs} +4 -9
  222. package/build/queries/find/EntityFilter.cjs.map +1 -0
  223. package/build/{EntityFilter.d.cts → queries/find/EntityFilter.d.cts} +6 -6
  224. package/build/queries/find/EntityFilter.d.cts.map +1 -0
  225. package/build/{EntityFilter.d.mts → queries/find/EntityFilter.d.mts} +6 -6
  226. package/build/queries/find/EntityFilter.d.mts.map +1 -0
  227. package/build/{EntityFilter.js → queries/find/EntityFilter.js} +1 -6
  228. package/build/queries/find/EntityFilter.js.map +1 -0
  229. package/build/{EntityGraphQLFilter.cjs → queries/find/EntityGraphQLFilter.cjs} +1 -5
  230. package/build/queries/find/EntityGraphQLFilter.cjs.map +1 -0
  231. package/build/{EntityGraphQLFilter.d.cts → queries/find/EntityGraphQLFilter.d.cts} +3 -3
  232. package/build/queries/find/EntityGraphQLFilter.d.cts.map +1 -0
  233. package/build/{EntityGraphQLFilter.d.mts → queries/find/EntityGraphQLFilter.d.mts} +3 -3
  234. package/build/queries/find/EntityGraphQLFilter.d.mts.map +1 -0
  235. package/build/{EntityGraphQLFilter.js → queries/find/EntityGraphQLFilter.js} +1 -5
  236. package/build/queries/find/EntityGraphQLFilter.js.map +1 -0
  237. package/build/{QueryParser.cjs → queries/find/QueryParser.cjs} +68 -356
  238. package/build/queries/find/QueryParser.cjs.map +1 -0
  239. package/build/{QueryParser.collectionJoins.cjs → queries/find/QueryParser.collectionJoins.cjs} +8 -8
  240. package/build/queries/find/QueryParser.collectionJoins.cjs.map +1 -0
  241. package/build/{QueryParser.collectionJoins.d.cts → queries/find/QueryParser.collectionJoins.d.cts} +1 -1
  242. package/build/queries/find/QueryParser.collectionJoins.d.cts.map +1 -0
  243. package/build/{QueryParser.collectionJoins.d.mts → queries/find/QueryParser.collectionJoins.d.mts} +1 -1
  244. package/build/queries/find/QueryParser.collectionJoins.d.mts.map +1 -0
  245. package/build/{QueryParser.collectionJoins.js → queries/find/QueryParser.collectionJoins.js} +2 -2
  246. package/build/queries/find/QueryParser.collectionJoins.js.map +1 -0
  247. package/build/{QueryParser.d.cts → queries/find/QueryParser.d.cts} +5 -159
  248. package/build/queries/find/QueryParser.d.cts.map +1 -0
  249. package/build/{QueryParser.d.mts → queries/find/QueryParser.d.mts} +5 -159
  250. package/build/queries/find/QueryParser.d.mts.map +1 -0
  251. package/build/{QueryParser.js → queries/find/QueryParser.js} +15 -295
  252. package/build/queries/find/QueryParser.js.map +1 -0
  253. package/build/{QueryParser.pruning.cjs → queries/find/QueryParser.pruning.cjs} +6 -20
  254. package/build/queries/find/QueryParser.pruning.cjs.map +1 -0
  255. package/build/queries/find/QueryParser.pruning.d.cts +8 -0
  256. package/build/queries/find/QueryParser.pruning.d.cts.map +1 -0
  257. package/build/queries/find/QueryParser.pruning.d.mts +8 -0
  258. package/build/queries/find/QueryParser.pruning.d.mts.map +1 -0
  259. package/build/{QueryParser.pruning.js → queries/find/QueryParser.pruning.js} +4 -17
  260. package/build/queries/find/QueryParser.pruning.js.map +1 -0
  261. package/build/{QueryVisitor.cjs → queries/find/QueryVisitor.cjs} +2 -3
  262. package/build/queries/find/QueryVisitor.cjs.map +1 -0
  263. package/build/{QueryVisitor.d.cts → queries/find/QueryVisitor.d.cts} +3 -2
  264. package/build/queries/find/QueryVisitor.d.cts.map +1 -0
  265. package/build/{QueryVisitor.d.mts → queries/find/QueryVisitor.d.mts} +3 -2
  266. package/build/queries/find/QueryVisitor.d.mts.map +1 -0
  267. package/build/{QueryVisitor.js → queries/find/QueryVisitor.js} +2 -3
  268. package/build/queries/find/QueryVisitor.js.map +1 -0
  269. package/build/{drivers/buildRawQuery.cjs → queries/find/buildFindQuery.cjs} +14 -15
  270. package/build/queries/find/buildFindQuery.cjs.map +1 -0
  271. package/build/{drivers/buildRawQuery.d.cts → queries/find/buildFindQuery.d.cts} +3 -3
  272. package/build/queries/find/buildFindQuery.d.cts.map +1 -0
  273. package/build/{drivers/buildRawQuery.d.mts → queries/find/buildFindQuery.d.mts} +3 -3
  274. package/build/queries/find/buildFindQuery.d.mts.map +1 -0
  275. package/build/{drivers/buildRawQuery.js → queries/find/buildFindQuery.js} +5 -6
  276. package/build/queries/find/buildFindQuery.js.map +1 -0
  277. package/build/{scopes.cjs → queries/find/scopes.cjs} +2 -3
  278. package/build/queries/find/scopes.cjs.map +1 -0
  279. package/build/{scopes.d.cts → queries/find/scopes.d.cts} +6 -6
  280. package/build/queries/find/scopes.d.cts.map +1 -0
  281. package/build/{scopes.d.mts → queries/find/scopes.d.mts} +6 -6
  282. package/build/queries/find/scopes.d.mts.map +1 -0
  283. package/build/{scopes.js → queries/find/scopes.js} +2 -3
  284. package/build/queries/find/scopes.js.map +1 -0
  285. package/build/queries/parsedConditions.cjs +21 -0
  286. package/build/queries/parsedConditions.cjs.map +1 -0
  287. package/build/queries/parsedConditions.d.cts +127 -0
  288. package/build/queries/parsedConditions.d.cts.map +1 -0
  289. package/build/queries/parsedConditions.d.mts +127 -0
  290. package/build/queries/parsedConditions.d.mts.map +1 -0
  291. package/build/queries/parsedConditions.js +20 -0
  292. package/build/queries/parsedConditions.js.map +1 -0
  293. package/build/{drivers/buildUtils.cjs → queries/renderConditions.cjs} +7 -8
  294. package/build/queries/renderConditions.cjs.map +1 -0
  295. package/build/{drivers/buildUtils.d.mts → queries/renderConditions.d.cts} +5 -4
  296. package/build/queries/renderConditions.d.cts.map +1 -0
  297. package/build/{drivers/buildUtils.d.cts → queries/renderConditions.d.mts} +5 -4
  298. package/build/queries/renderConditions.d.mts.map +1 -0
  299. package/build/{drivers/buildUtils.js → queries/renderConditions.js} +4 -5
  300. package/build/queries/renderConditions.js.map +1 -0
  301. package/build/{skipCondition.cjs → queries/skipCondition.cjs} +1 -2
  302. package/build/queries/skipCondition.cjs.map +1 -0
  303. package/build/{skipCondition.d.cts → queries/skipCondition.d.cts} +2 -2
  304. package/build/{skipCondition.d.cts.map → queries/skipCondition.d.cts.map} +1 -1
  305. package/build/{skipCondition.d.mts → queries/skipCondition.d.mts} +2 -2
  306. package/build/{skipCondition.d.mts.map → queries/skipCondition.d.mts.map} +1 -1
  307. package/build/{skipCondition.js → queries/skipCondition.js} +1 -2
  308. package/build/queries/skipCondition.js.map +1 -0
  309. package/build/{AliasAssigner.cjs → queries/sql/AliasAssigner.cjs} +2 -3
  310. package/build/queries/sql/AliasAssigner.cjs.map +1 -0
  311. package/build/{AliasAssigner.d.cts → queries/sql/AliasAssigner.d.cts} +2 -2
  312. package/build/queries/sql/AliasAssigner.d.cts.map +1 -0
  313. package/build/{AliasAssigner.d.mts → queries/sql/AliasAssigner.d.mts} +2 -2
  314. package/build/queries/sql/AliasAssigner.d.mts.map +1 -0
  315. package/build/{AliasAssigner.js → queries/sql/AliasAssigner.js} +2 -3
  316. package/build/queries/sql/AliasAssigner.js.map +1 -0
  317. package/build/{Expr.cjs → queries/sql/Expr.cjs} +9 -9
  318. package/build/queries/sql/Expr.cjs.map +1 -0
  319. package/build/{Expr.d.cts → queries/sql/Expr.d.cts} +4 -4
  320. package/build/queries/sql/Expr.d.cts.map +1 -0
  321. package/build/{Expr.d.mts → queries/sql/Expr.d.mts} +4 -4
  322. package/build/queries/sql/Expr.d.mts.map +1 -0
  323. package/build/{Expr.js → queries/sql/Expr.js} +4 -4
  324. package/build/queries/sql/Expr.js.map +1 -0
  325. package/build/{Tables.cjs → queries/sql/Tables.cjs} +63 -67
  326. package/build/queries/sql/Tables.cjs.map +1 -0
  327. package/build/{Tables.d.cts → queries/sql/Tables.d.cts} +6 -7
  328. package/build/queries/sql/Tables.d.cts.map +1 -0
  329. package/build/{Tables.d.mts → queries/sql/Tables.d.mts} +6 -7
  330. package/build/queries/sql/Tables.d.mts.map +1 -0
  331. package/build/{Tables.js → queries/sql/Tables.js} +9 -13
  332. package/build/queries/sql/Tables.js.map +1 -0
  333. package/build/{execute.cjs → queries/sql/execute.cjs} +32 -37
  334. package/build/queries/sql/execute.cjs.map +1 -0
  335. package/build/{execute.d.cts → queries/sql/execute.d.cts} +6 -6
  336. package/build/queries/sql/execute.d.cts.map +1 -0
  337. package/build/{execute.d.mts → queries/sql/execute.d.mts} +6 -6
  338. package/build/queries/sql/execute.d.mts.map +1 -0
  339. package/build/{execute.js → queries/sql/execute.js} +5 -10
  340. package/build/queries/sql/execute.js.map +1 -0
  341. package/build/{expressions → queries/sql/expressions}/arrayAgg.cjs +12 -12
  342. package/build/queries/sql/expressions/arrayAgg.cjs.map +1 -0
  343. package/build/{expressions → queries/sql/expressions}/arrayAgg.d.cts +1 -1
  344. package/build/queries/sql/expressions/arrayAgg.d.cts.map +1 -0
  345. package/build/{expressions → queries/sql/expressions}/arrayAgg.d.mts +1 -1
  346. package/build/queries/sql/expressions/arrayAgg.d.mts.map +1 -0
  347. package/build/{expressions → queries/sql/expressions}/arrayAgg.js +1 -1
  348. package/build/queries/sql/expressions/arrayAgg.js.map +1 -0
  349. package/build/{expressions → queries/sql/expressions}/case.cjs +14 -14
  350. package/build/queries/sql/expressions/case.cjs.map +1 -0
  351. package/build/{expressions → queries/sql/expressions}/case.d.cts +1 -1
  352. package/build/queries/sql/expressions/case.d.cts.map +1 -0
  353. package/build/{expressions → queries/sql/expressions}/case.d.mts +1 -1
  354. package/build/queries/sql/expressions/case.d.mts.map +1 -0
  355. package/build/{expressions → queries/sql/expressions}/case.js +1 -1
  356. package/build/queries/sql/expressions/case.js.map +1 -0
  357. package/build/queries/sql/expressions/coalesce.cjs +25 -0
  358. package/build/queries/sql/expressions/coalesce.cjs.map +1 -0
  359. package/build/{expressions → queries/sql/expressions}/coalesce.d.cts +1 -1
  360. package/build/queries/sql/expressions/coalesce.d.cts.map +1 -0
  361. package/build/{expressions → queries/sql/expressions}/coalesce.d.mts +1 -1
  362. package/build/queries/sql/expressions/coalesce.d.mts.map +1 -0
  363. package/build/{expressions → queries/sql/expressions}/coalesce.js +1 -1
  364. package/build/queries/sql/expressions/coalesce.js.map +1 -0
  365. package/build/{expressions → queries/sql/expressions}/codecs.cjs +5 -5
  366. package/build/queries/sql/expressions/codecs.cjs.map +1 -0
  367. package/build/{expressions → queries/sql/expressions}/codecs.d.cts +1 -1
  368. package/build/queries/sql/expressions/codecs.d.cts.map +1 -0
  369. package/build/{expressions → queries/sql/expressions}/codecs.d.mts +1 -1
  370. package/build/queries/sql/expressions/codecs.d.mts.map +1 -0
  371. package/build/{expressions → queries/sql/expressions}/codecs.js +3 -3
  372. package/build/queries/sql/expressions/codecs.js.map +1 -0
  373. package/build/queries/sql/expressions/expression.cjs +102 -0
  374. package/build/queries/sql/expressions/expression.cjs.map +1 -0
  375. package/build/{expressions → queries/sql/expressions}/expression.d.cts +1 -1
  376. package/build/queries/sql/expressions/expression.d.cts.map +1 -0
  377. package/build/{expressions → queries/sql/expressions}/expression.d.mts +1 -1
  378. package/build/queries/sql/expressions/expression.d.mts.map +1 -0
  379. package/build/{expressions → queries/sql/expressions}/expression.js +2 -2
  380. package/build/queries/sql/expressions/expression.js.map +1 -0
  381. package/build/queries/sql/expressions/greatest.cjs +25 -0
  382. package/build/queries/sql/expressions/greatest.cjs.map +1 -0
  383. package/build/{expressions → queries/sql/expressions}/greatest.d.cts +1 -1
  384. package/build/queries/sql/expressions/greatest.d.cts.map +1 -0
  385. package/build/{expressions → queries/sql/expressions}/greatest.d.mts +1 -1
  386. package/build/queries/sql/expressions/greatest.d.mts.map +1 -0
  387. package/build/{expressions → queries/sql/expressions}/greatest.js +1 -1
  388. package/build/queries/sql/expressions/greatest.js.map +1 -0
  389. package/build/queries/sql/expressions/least.cjs +25 -0
  390. package/build/queries/sql/expressions/least.cjs.map +1 -0
  391. package/build/{expressions → queries/sql/expressions}/least.d.cts +1 -1
  392. package/build/queries/sql/expressions/least.d.cts.map +1 -0
  393. package/build/{expressions → queries/sql/expressions}/least.d.mts +1 -1
  394. package/build/queries/sql/expressions/least.d.mts.map +1 -0
  395. package/build/{expressions → queries/sql/expressions}/least.js +1 -1
  396. package/build/queries/sql/expressions/least.js.map +1 -0
  397. package/build/{expressions → queries/sql/expressions}/nullIf.cjs +6 -6
  398. package/build/queries/sql/expressions/nullIf.cjs.map +1 -0
  399. package/build/{expressions → queries/sql/expressions}/nullIf.d.cts +1 -1
  400. package/build/queries/sql/expressions/nullIf.d.cts.map +1 -0
  401. package/build/{expressions → queries/sql/expressions}/nullIf.d.mts +1 -1
  402. package/build/queries/sql/expressions/nullIf.d.mts.map +1 -0
  403. package/build/{expressions → queries/sql/expressions}/nullIf.js +1 -1
  404. package/build/queries/sql/expressions/nullIf.js.map +1 -0
  405. package/build/{expressions → queries/sql/expressions}/parseExpression.cjs +16 -16
  406. package/build/queries/sql/expressions/parseExpression.cjs.map +1 -0
  407. package/build/{expressions → queries/sql/expressions}/parseExpression.d.cts +1 -1
  408. package/build/queries/sql/expressions/parseExpression.d.cts.map +1 -0
  409. package/build/{expressions → queries/sql/expressions}/parseExpression.d.mts +1 -1
  410. package/build/queries/sql/expressions/parseExpression.d.mts.map +1 -0
  411. package/build/{expressions → queries/sql/expressions}/parseExpression.js +2 -2
  412. package/build/queries/sql/expressions/parseExpression.js.map +1 -0
  413. package/build/{expressions → queries/sql/expressions}/types.d.cts +1 -1
  414. package/build/queries/sql/expressions/types.d.cts.map +1 -0
  415. package/build/{expressions → queries/sql/expressions}/types.d.mts +1 -1
  416. package/build/queries/sql/expressions/types.d.mts.map +1 -0
  417. package/build/{keywords.cjs → queries/sql/keywords.cjs} +1 -1
  418. package/build/queries/sql/keywords.cjs.map +1 -0
  419. package/build/{keywords.d.cts → queries/sql/keywords.d.cts} +1 -1
  420. package/build/queries/sql/keywords.d.cts.map +1 -0
  421. package/build/{keywords.d.mts → queries/sql/keywords.d.mts} +1 -1
  422. package/build/queries/sql/keywords.d.mts.map +1 -0
  423. package/build/{keywords.js → queries/sql/keywords.js} +1 -1
  424. package/build/queries/sql/keywords.js.map +1 -0
  425. package/build/{query.cjs → queries/sql/query.cjs} +83 -84
  426. package/build/queries/sql/query.cjs.map +1 -0
  427. package/build/{query.d.cts → queries/sql/query.d.cts} +7 -7
  428. package/build/queries/sql/query.d.cts.map +1 -0
  429. package/build/{query.d.mts → queries/sql/query.d.mts} +7 -7
  430. package/build/queries/sql/query.d.mts.map +1 -0
  431. package/build/{query.js → queries/sql/query.js} +11 -12
  432. package/build/queries/sql/query.js.map +1 -0
  433. package/build/queries/valueFilters.cjs +248 -0
  434. package/build/queries/valueFilters.cjs.map +1 -0
  435. package/build/queries/valueFilters.d.cts +28 -0
  436. package/build/queries/valueFilters.d.cts.map +1 -0
  437. package/build/queries/valueFilters.d.mts +28 -0
  438. package/build/queries/valueFilters.d.mts.map +1 -0
  439. package/build/queries/valueFilters.js +243 -0
  440. package/build/queries/valueFilters.js.map +1 -0
  441. package/build/reactiveHints.cjs +5 -5
  442. package/build/reactiveHints.js +5 -5
  443. package/build/relations/AbstractRelationImpl.cjs +0 -5
  444. package/build/relations/AbstractRelationImpl.cjs.map +1 -1
  445. package/build/relations/AbstractRelationImpl.d.cts +1 -2
  446. package/build/relations/AbstractRelationImpl.d.cts.map +1 -1
  447. package/build/relations/AbstractRelationImpl.d.mts +1 -2
  448. package/build/relations/AbstractRelationImpl.d.mts.map +1 -1
  449. package/build/relations/AbstractRelationImpl.js +1 -5
  450. package/build/relations/AbstractRelationImpl.js.map +1 -1
  451. package/build/relations/AsyncProperty.cjs +1 -1
  452. package/build/relations/AsyncProperty.js +1 -1
  453. package/build/relations/AsyncReactiveField.cjs +3 -3
  454. package/build/relations/AsyncReactiveField.js +3 -3
  455. package/build/relations/Collection.cjs +1 -1
  456. package/build/relations/Collection.js +1 -1
  457. package/build/relations/CustomCollection.cjs +1 -1
  458. package/build/relations/CustomCollection.js +1 -1
  459. package/build/relations/CustomReference.cjs +3 -3
  460. package/build/relations/CustomReference.js +3 -3
  461. package/build/relations/EnumCollection.cjs +2 -2
  462. package/build/relations/EnumCollection.js +2 -2
  463. package/build/relations/LazyField.cjs +6 -7
  464. package/build/relations/LazyField.cjs.map +1 -1
  465. package/build/relations/LazyField.js +5 -6
  466. package/build/relations/LazyField.js.map +1 -1
  467. package/build/relations/ManyToManyCollection.cjs +4 -3
  468. package/build/relations/ManyToManyCollection.cjs.map +1 -1
  469. package/build/relations/ManyToManyCollection.d.cts.map +1 -1
  470. package/build/relations/ManyToManyCollection.d.mts.map +1 -1
  471. package/build/relations/ManyToManyCollection.js +4 -3
  472. package/build/relations/ManyToManyCollection.js.map +1 -1
  473. package/build/relations/ManyToManyLargeCollection.cjs +2 -2
  474. package/build/relations/ManyToManyLargeCollection.js +2 -2
  475. package/build/relations/ManyToOneReference.cjs +7 -6
  476. package/build/relations/ManyToOneReference.cjs.map +1 -1
  477. package/build/relations/ManyToOneReference.d.cts.map +1 -1
  478. package/build/relations/ManyToOneReference.d.mts.map +1 -1
  479. package/build/relations/ManyToOneReference.js +7 -6
  480. package/build/relations/ManyToOneReference.js.map +1 -1
  481. package/build/relations/OneToManyCollection.cjs +6 -5
  482. package/build/relations/OneToManyCollection.cjs.map +1 -1
  483. package/build/relations/OneToManyCollection.d.cts.map +1 -1
  484. package/build/relations/OneToManyCollection.d.mts.map +1 -1
  485. package/build/relations/OneToManyCollection.js +4 -3
  486. package/build/relations/OneToManyCollection.js.map +1 -1
  487. package/build/relations/OneToManyLargeCollection.cjs +3 -3
  488. package/build/relations/OneToManyLargeCollection.js +3 -3
  489. package/build/relations/OneToOneReference.cjs +6 -5
  490. package/build/relations/OneToOneReference.cjs.map +1 -1
  491. package/build/relations/OneToOneReference.d.cts.map +1 -1
  492. package/build/relations/OneToOneReference.d.mts.map +1 -1
  493. package/build/relations/OneToOneReference.js +6 -5
  494. package/build/relations/OneToOneReference.js.map +1 -1
  495. package/build/relations/PolymorphicReference.cjs +7 -6
  496. package/build/relations/PolymorphicReference.cjs.map +1 -1
  497. package/build/relations/PolymorphicReference.d.cts.map +1 -1
  498. package/build/relations/PolymorphicReference.d.mts.map +1 -1
  499. package/build/relations/PolymorphicReference.js +7 -6
  500. package/build/relations/PolymorphicReference.js.map +1 -1
  501. package/build/relations/ReactiveField.cjs +3 -3
  502. package/build/relations/ReactiveField.js +3 -3
  503. package/build/relations/ReactiveGetter.cjs +1 -1
  504. package/build/relations/ReactiveGetter.js +1 -1
  505. package/build/relations/ReactiveManyToMany.cjs +5 -4
  506. package/build/relations/ReactiveManyToMany.cjs.map +1 -1
  507. package/build/relations/ReactiveManyToMany.d.cts.map +1 -1
  508. package/build/relations/ReactiveManyToMany.d.mts.map +1 -1
  509. package/build/relations/ReactiveManyToMany.js +5 -4
  510. package/build/relations/ReactiveManyToMany.js.map +1 -1
  511. package/build/relations/ReactiveManyToManyOtherSide.cjs +3 -3
  512. package/build/relations/ReactiveManyToManyOtherSide.js +3 -3
  513. package/build/relations/ReactiveReference.cjs +8 -7
  514. package/build/relations/ReactiveReference.cjs.map +1 -1
  515. package/build/relations/ReactiveReference.d.cts.map +1 -1
  516. package/build/relations/ReactiveReference.d.mts.map +1 -1
  517. package/build/relations/ReactiveReference.js +8 -7
  518. package/build/relations/ReactiveReference.js.map +1 -1
  519. package/build/relations/RecursiveCollection.cjs +3 -3
  520. package/build/relations/RecursiveCollection.js +3 -3
  521. package/build/relations/Reference.cjs +1 -1
  522. package/build/relations/Reference.js +1 -1
  523. package/build/relations/hasAsyncMethod.cjs +1 -1
  524. package/build/relations/hasAsyncMethod.js +1 -1
  525. package/build/relations/hasManyDerived.cjs +1 -1
  526. package/build/relations/hasManyDerived.js +1 -1
  527. package/build/relations/hasOneDerived.cjs +2 -2
  528. package/build/relations/hasOneDerived.js +2 -2
  529. package/build/relations/hasProperty.cjs +2 -2
  530. package/build/relations/hasProperty.js +2 -2
  531. package/build/relations/index.cjs +13 -13
  532. package/build/relations/index.js +13 -13
  533. package/build/relations/isCascadeDelete.cjs +11 -0
  534. package/build/relations/isCascadeDelete.cjs.map +1 -0
  535. package/build/relations/isCascadeDelete.d.cts +7 -0
  536. package/build/relations/isCascadeDelete.d.cts.map +1 -0
  537. package/build/relations/isCascadeDelete.d.mts +7 -0
  538. package/build/relations/isCascadeDelete.d.mts.map +1 -0
  539. package/build/relations/isCascadeDelete.js +10 -0
  540. package/build/relations/isCascadeDelete.js.map +1 -0
  541. package/build/resurrection.cjs +1 -1
  542. package/build/resurrection.js +1 -1
  543. package/build/rules.cjs +4 -4
  544. package/build/rules.js +4 -4
  545. package/build/serde.cjs +1 -1
  546. package/build/serde.js +1 -1
  547. package/build/unnest.cjs +0 -1
  548. package/build/unnest.cjs.map +1 -1
  549. package/build/unnest.d.cts +1 -1
  550. package/build/unnest.d.mts +1 -1
  551. package/build/unnest.js +0 -1
  552. package/build/unnest.js.map +1 -1
  553. package/build/upsert.cjs +3 -3
  554. package/build/upsert.js +3 -3
  555. package/build/utils.cjs +1 -2
  556. package/build/utils.cjs.map +1 -1
  557. package/build/utils.d.cts +1 -1
  558. package/build/utils.d.mts +1 -1
  559. package/build/utils.js +1 -2
  560. package/build/utils.js.map +1 -1
  561. package/build/withLoaded.cjs +3 -3
  562. package/build/withLoaded.js +3 -3
  563. package/package.json +2 -2
  564. package/build/AliasAssigner.cjs.map +0 -1
  565. package/build/AliasAssigner.d.cts.map +0 -1
  566. package/build/AliasAssigner.d.mts.map +0 -1
  567. package/build/AliasAssigner.js.map +0 -1
  568. package/build/Aliases.cjs.map +0 -1
  569. package/build/Aliases.d.cts.map +0 -1
  570. package/build/Aliases.d.mts.map +0 -1
  571. package/build/Aliases.js.map +0 -1
  572. package/build/ConditionBuilder.cjs.map +0 -1
  573. package/build/ConditionBuilder.d.cts.map +0 -1
  574. package/build/ConditionBuilder.d.mts.map +0 -1
  575. package/build/ConditionBuilder.js.map +0 -1
  576. package/build/DeferredAlias.cjs.map +0 -1
  577. package/build/DeferredAlias.d.cts.map +0 -1
  578. package/build/DeferredAlias.d.mts.map +0 -1
  579. package/build/DeferredAlias.js.map +0 -1
  580. package/build/EntityFilter.cjs.map +0 -1
  581. package/build/EntityFilter.d.cts.map +0 -1
  582. package/build/EntityFilter.d.mts.map +0 -1
  583. package/build/EntityFilter.js.map +0 -1
  584. package/build/EntityGraphQLFilter.cjs.map +0 -1
  585. package/build/EntityGraphQLFilter.d.cts.map +0 -1
  586. package/build/EntityGraphQLFilter.d.mts.map +0 -1
  587. package/build/EntityGraphQLFilter.js.map +0 -1
  588. package/build/Expr.cjs.map +0 -1
  589. package/build/Expr.d.cts.map +0 -1
  590. package/build/Expr.d.mts.map +0 -1
  591. package/build/Expr.js.map +0 -1
  592. package/build/QueryParser.cjs.map +0 -1
  593. package/build/QueryParser.collectionJoins.cjs.map +0 -1
  594. package/build/QueryParser.collectionJoins.d.cts.map +0 -1
  595. package/build/QueryParser.collectionJoins.d.mts.map +0 -1
  596. package/build/QueryParser.collectionJoins.js.map +0 -1
  597. package/build/QueryParser.d.cts.map +0 -1
  598. package/build/QueryParser.d.mts.map +0 -1
  599. package/build/QueryParser.js.map +0 -1
  600. package/build/QueryParser.pruning.cjs.map +0 -1
  601. package/build/QueryParser.pruning.d.cts +0 -10
  602. package/build/QueryParser.pruning.d.cts.map +0 -1
  603. package/build/QueryParser.pruning.d.mts +0 -10
  604. package/build/QueryParser.pruning.d.mts.map +0 -1
  605. package/build/QueryParser.pruning.js.map +0 -1
  606. package/build/QueryVisitor.cjs.map +0 -1
  607. package/build/QueryVisitor.d.cts.map +0 -1
  608. package/build/QueryVisitor.d.mts.map +0 -1
  609. package/build/QueryVisitor.js.map +0 -1
  610. package/build/Tables.cjs.map +0 -1
  611. package/build/Tables.d.cts.map +0 -1
  612. package/build/Tables.d.mts.map +0 -1
  613. package/build/Tables.js.map +0 -1
  614. package/build/conditions.cjs.map +0 -1
  615. package/build/conditions.d.cts.map +0 -1
  616. package/build/conditions.d.mts.map +0 -1
  617. package/build/conditions.js.map +0 -1
  618. package/build/drivers/buildRawQuery.cjs.map +0 -1
  619. package/build/drivers/buildRawQuery.d.cts.map +0 -1
  620. package/build/drivers/buildRawQuery.d.mts.map +0 -1
  621. package/build/drivers/buildRawQuery.js.map +0 -1
  622. package/build/drivers/buildUtils.cjs.map +0 -1
  623. package/build/drivers/buildUtils.d.cts.map +0 -1
  624. package/build/drivers/buildUtils.d.mts.map +0 -1
  625. package/build/drivers/buildUtils.js.map +0 -1
  626. package/build/execute.cjs.map +0 -1
  627. package/build/execute.d.cts.map +0 -1
  628. package/build/execute.d.mts.map +0 -1
  629. package/build/execute.js.map +0 -1
  630. package/build/expressions/arrayAgg.cjs.map +0 -1
  631. package/build/expressions/arrayAgg.d.cts.map +0 -1
  632. package/build/expressions/arrayAgg.d.mts.map +0 -1
  633. package/build/expressions/arrayAgg.js.map +0 -1
  634. package/build/expressions/case.cjs.map +0 -1
  635. package/build/expressions/case.d.cts.map +0 -1
  636. package/build/expressions/case.d.mts.map +0 -1
  637. package/build/expressions/case.js.map +0 -1
  638. package/build/expressions/coalesce.cjs +0 -25
  639. package/build/expressions/coalesce.cjs.map +0 -1
  640. package/build/expressions/coalesce.d.cts.map +0 -1
  641. package/build/expressions/coalesce.d.mts.map +0 -1
  642. package/build/expressions/coalesce.js.map +0 -1
  643. package/build/expressions/codecs.cjs.map +0 -1
  644. package/build/expressions/codecs.d.cts.map +0 -1
  645. package/build/expressions/codecs.d.mts.map +0 -1
  646. package/build/expressions/codecs.js.map +0 -1
  647. package/build/expressions/expression.cjs +0 -102
  648. package/build/expressions/expression.cjs.map +0 -1
  649. package/build/expressions/expression.d.cts.map +0 -1
  650. package/build/expressions/expression.d.mts.map +0 -1
  651. package/build/expressions/expression.js.map +0 -1
  652. package/build/expressions/greatest.cjs +0 -25
  653. package/build/expressions/greatest.cjs.map +0 -1
  654. package/build/expressions/greatest.d.cts.map +0 -1
  655. package/build/expressions/greatest.d.mts.map +0 -1
  656. package/build/expressions/greatest.js.map +0 -1
  657. package/build/expressions/least.cjs +0 -25
  658. package/build/expressions/least.cjs.map +0 -1
  659. package/build/expressions/least.d.cts.map +0 -1
  660. package/build/expressions/least.d.mts.map +0 -1
  661. package/build/expressions/least.js.map +0 -1
  662. package/build/expressions/nullIf.cjs.map +0 -1
  663. package/build/expressions/nullIf.d.cts.map +0 -1
  664. package/build/expressions/nullIf.d.mts.map +0 -1
  665. package/build/expressions/nullIf.js.map +0 -1
  666. package/build/expressions/parseExpression.cjs.map +0 -1
  667. package/build/expressions/parseExpression.d.cts.map +0 -1
  668. package/build/expressions/parseExpression.d.mts.map +0 -1
  669. package/build/expressions/parseExpression.js.map +0 -1
  670. package/build/expressions/types.d.cts.map +0 -1
  671. package/build/expressions/types.d.mts.map +0 -1
  672. package/build/keywords.cjs.map +0 -1
  673. package/build/keywords.d.cts.map +0 -1
  674. package/build/keywords.d.mts.map +0 -1
  675. package/build/keywords.js.map +0 -1
  676. package/build/query.cjs.map +0 -1
  677. package/build/query.d.cts.map +0 -1
  678. package/build/query.d.mts.map +0 -1
  679. package/build/query.js.map +0 -1
  680. package/build/scopes.cjs.map +0 -1
  681. package/build/scopes.d.cts.map +0 -1
  682. package/build/scopes.d.mts.map +0 -1
  683. package/build/scopes.js.map +0 -1
  684. package/build/skipCondition.cjs.map +0 -1
  685. package/build/skipCondition.js.map +0 -1
  686. /package/build/{expressions → queries/sql/expressions}/types.cjs +0 -0
  687. /package/build/{expressions → queries/sql/expressions}/types.js +0 -0
@@ -1,25 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_expressions_parseExpression = require("./parseExpression.cjs");
3
- const require_expressions_expression = require("./expression.cjs");
4
- //#region src/expressions/coalesce.ts
5
- /** Parses COALESCE candidates and requires at least one value. */
6
- function parseCoalesceExpression(input) {
7
- return {
8
- kind: "coalesce",
9
- candidates: require_expressions_parseExpression.parseNonEmptyOperands(input, "COALESCE")
10
- };
11
- }
12
- /** Renders COALESCE candidates in their original order. */
13
- function coalesceToSql(parsed, ctx, codec) {
14
- return require_expressions_expression.functionToSql("COALESCE", parsed.candidates, ctx, codec);
15
- }
16
- /** One non-null candidate guarantees a non-null COALESCE result. */
17
- function coalesceNullable(parsed) {
18
- return parsed.candidates.some((candidate) => require_expressions_expression.expressionNullable(candidate) === false) ? false : void 0;
19
- }
20
- //#endregion
21
- exports.coalesceNullable = coalesceNullable;
22
- exports.coalesceToSql = coalesceToSql;
23
- exports.parseCoalesceExpression = parseCoalesceExpression;
24
-
25
- //# sourceMappingURL=coalesce.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coalesce.cjs","names":["parseNonEmptyOperands","functionToSql","expressionNullable"],"sources":["../../src/expressions/coalesce.ts"],"sourcesContent":["import type { ExprContext, SqlFragment } from \"../Expr.ts\";\nimport { expressionNullable, functionToSql } from \"./expression.ts\";\nimport { parseNonEmptyOperands } from \"./parseExpression.ts\";\nimport type { ParsedExpression, ResultCodec } from \"./types.ts\";\n\n/** Candidates in order of preference; COALESCE returns the first non-null value. */\nexport interface CoalesceInput {\n readonly coalesce: readonly unknown[];\n}\n\n/** A COALESCE with at least one candidate, in SQL evaluation order. */\nexport interface ParsedCoalesceExpression {\n kind: \"coalesce\";\n candidates: [ParsedExpression, ...ParsedExpression[]];\n}\n\n/** Parses COALESCE candidates and requires at least one value. */\nexport function parseCoalesceExpression(input: unknown): ParsedCoalesceExpression {\n return { kind: \"coalesce\", candidates: parseNonEmptyOperands(input, \"COALESCE\") };\n}\n\n/** Renders COALESCE candidates in their original order. */\nexport function coalesceToSql(parsed: ParsedCoalesceExpression, ctx: ExprContext, codec: ResultCodec): SqlFragment {\n return functionToSql(\"COALESCE\", parsed.candidates, ctx, codec);\n}\n\n/** One non-null candidate guarantees a non-null COALESCE result. */\nexport function coalesceNullable(parsed: ParsedCoalesceExpression): boolean | undefined {\n return parsed.candidates.some((candidate) => expressionNullable(candidate) === false) ? false : undefined;\n}\n"],"mappings":";;;;;AAiBA,SAAgB,wBAAwB,OAA0C;CAChF,OAAO;EAAE,MAAM;EAAY,YAAYA,oCAAAA,sBAAsB,OAAO,UAAU;CAAE;AAClF;;AAGA,SAAgB,cAAc,QAAkC,KAAkB,OAAiC;CACjH,OAAOC,+BAAAA,cAAc,YAAY,OAAO,YAAY,KAAK,KAAK;AAChE;;AAGA,SAAgB,iBAAiB,QAAuD;CACtF,OAAO,OAAO,WAAW,MAAM,cAAcC,+BAAAA,mBAAmB,SAAS,MAAM,KAAK,IAAI,QAAQ,KAAA;AAClG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"coalesce.d.cts","names":[],"sources":["../../src/expressions/coalesce.ts"],"mappings":";;;;UAMiB;WACN;;;UAIM;EACf;EACA,aAAa,qBAAqB;;;iBAIpB,wBAAwB,iBAAiB;;iBAKzC,cAAc,QAAQ,0BAA0B,KAAK,aAAa,OAAO,cAAc;;iBAKvF,iBAAiB,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"coalesce.d.mts","names":[],"sources":["../../src/expressions/coalesce.ts"],"mappings":";;;;UAMiB;WACN;;;UAIM;EACf;EACA,aAAa,qBAAqB;;;iBAIpB,wBAAwB,iBAAiB;;iBAKzC,cAAc,QAAQ,0BAA0B,KAAK,aAAa,OAAO,cAAc;;iBAKvF,iBAAiB,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"coalesce.js","names":[],"sources":["../../src/expressions/coalesce.ts"],"sourcesContent":["import type { ExprContext, SqlFragment } from \"../Expr.ts\";\nimport { expressionNullable, functionToSql } from \"./expression.ts\";\nimport { parseNonEmptyOperands } from \"./parseExpression.ts\";\nimport type { ParsedExpression, ResultCodec } from \"./types.ts\";\n\n/** Candidates in order of preference; COALESCE returns the first non-null value. */\nexport interface CoalesceInput {\n readonly coalesce: readonly unknown[];\n}\n\n/** A COALESCE with at least one candidate, in SQL evaluation order. */\nexport interface ParsedCoalesceExpression {\n kind: \"coalesce\";\n candidates: [ParsedExpression, ...ParsedExpression[]];\n}\n\n/** Parses COALESCE candidates and requires at least one value. */\nexport function parseCoalesceExpression(input: unknown): ParsedCoalesceExpression {\n return { kind: \"coalesce\", candidates: parseNonEmptyOperands(input, \"COALESCE\") };\n}\n\n/** Renders COALESCE candidates in their original order. */\nexport function coalesceToSql(parsed: ParsedCoalesceExpression, ctx: ExprContext, codec: ResultCodec): SqlFragment {\n return functionToSql(\"COALESCE\", parsed.candidates, ctx, codec);\n}\n\n/** One non-null candidate guarantees a non-null COALESCE result. */\nexport function coalesceNullable(parsed: ParsedCoalesceExpression): boolean | undefined {\n return parsed.candidates.some((candidate) => expressionNullable(candidate) === false) ? false : undefined;\n}\n"],"mappings":";;;;AAiBA,SAAgB,wBAAwB,OAA0C;CAChF,OAAO;EAAE,MAAM;EAAY,YAAY,sBAAsB,OAAO,UAAU;CAAE;AAClF;;AAGA,SAAgB,cAAc,QAAkC,KAAkB,OAAiC;CACjH,OAAO,cAAc,YAAY,OAAO,YAAY,KAAK,KAAK;AAChE;;AAGA,SAAgB,iBAAiB,QAAuD;CACtF,OAAO,OAAO,WAAW,MAAM,cAAc,mBAAmB,SAAS,MAAM,KAAK,IAAI,QAAQ,KAAA;AAClG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"codecs.cjs","names":["BaseExpr","arrayOutputType","assertNever","inspect"],"sources":["../../src/expressions/codecs.ts"],"sourcesContent":["import { inspect } from \"node:util\";\n\nimport { BaseExpr } from \"../Expr.ts\";\nimport { type TypeInfo, arrayOutputType } from \"../TypeInfo.ts\";\nimport { assertNever } from \"../utils.ts\";\nimport type { ParsedExpression, ParsedLiteralExpression, ResultCodec } from \"./types.ts\";\n\n/**\n * Chooses one decoder for all possible result values. Columns must agree on a compatible SQL type and domain;\n * literals use that column's encoder. This is conservative: PostgreSQL may accept other combinations,\n * but Joist cannot safely choose their decoder. I.e. Author.id and Book.id both store integers but use different tags.\n */\nexport function chooseExpressionCodec(parsed: ParsedExpression): ResultCodec {\n const leaves = expressionLeaves(parsed);\n const expressions = leaves.flatMap((leaf) => (\"codec\" in leaf ? [leaf.codec] : []));\n const first = expressions[0];\n if (first) {\n for (const other of expressions.slice(1)) {\n if (other === first) continue;\n const a = first.outputType;\n const b = other.outputType;\n if (!a || !b || !compatibleDbTypes(a.dbType, b.dbType) || a.domain !== b.domain || a.idMeta !== b.idMeta) {\n const mismatches =\n !a || !b\n ? [\"unknown codec\"]\n : [\n ...(!compatibleDbTypes(a.dbType, b.dbType) ? [\"SQL type\"] : []),\n ...(a.domain !== b.domain ? [\"domain\"] : []),\n ...(a.idMeta !== b.idMeta ? [\"ID target\"] : []),\n ];\n throw new Error(\n `Expression operands need matching SQL types and codecs: ${describeType(a)} vs ${describeType(b)}; mismatched ${mismatches.join(\", \")}`,\n );\n }\n }\n for (const leaf of leaves) if (\"literal\" in leaf) checkLiteral(leaf.literal.value, first.outputType);\n return first;\n }\n const literals = leaves.flatMap((leaf) => (\"literal\" in leaf ? [leaf.literal] : []));\n const types = literals.map((v) => literalType(v.value)).filter((v) => v !== undefined);\n for (const literal of literals) checkLiteral(literal.value, types[0]);\n return new LiteralCodec(types[0] ?? { dbType: \"text\", domain: String });\n}\n\n/** Gives literal-only expressions a SQL type so PostgreSQL does not return numbers as text. */\nclass LiteralCodec {\n constructor(readonly outputType: TypeInfo) {}\n\n encode(value: unknown): unknown {\n return value;\n }\n\n decode(value: unknown): unknown {\n return this.outputType.domain === BigInt ? BigInt(value as string) : value;\n }\n}\n\n/**\n * Finds parsed operands that share a codec, including NULLIF's comparison operand but not CASE conditions.\n * Each kind selects its own value fields; only CASE's THEN and ELSE expressions contribute a result codec.\n */\nfunction expressionLeaves(parsed: ParsedExpression): CodecLeaf[] {\n if (parsed instanceof BaseExpr) return [{ codec: parsed }];\n switch (parsed.kind) {\n case \"literal\":\n return [{ literal: parsed }];\n case \"arrayAgg\": {\n const valueCodec = chooseExpressionCodec(parsed.value);\n return [\n {\n codec: {\n outputType: arrayOutputType(valueCodec.outputType),\n encode: (value) => (Array.isArray(value) ? value.map((element) => valueCodec.encode(element)) : value),\n decode: (value) => (Array.isArray(value) ? value.map((element) => valueCodec.decode(element)) : value),\n },\n },\n ];\n }\n case \"coalesce\":\n return parsed.candidates.flatMap((candidate) => expressionLeaves(candidate));\n case \"nullIf\":\n return [...expressionLeaves(parsed.value), ...expressionLeaves(parsed.equals)];\n case \"greatest\":\n case \"least\":\n return parsed.values.flatMap((value) => expressionLeaves(value));\n case \"case\":\n return [\n ...parsed.whens.flatMap((entry) => expressionLeaves(entry.then)),\n ...(parsed.else ? expressionLeaves(parsed.else) : []),\n ];\n default:\n return assertNever(parsed);\n }\n}\n\n/** One result codec or one literal that will adopt a sibling codec. */\ntype CodecLeaf = { codec: ResultCodec } | { literal: ParsedLiteralExpression };\n\n/** Supplies predictable PostgreSQL types for standalone primitive literals. */\nfunction literalType(value: unknown): TypeInfo | undefined {\n if (value === null) return undefined;\n if (typeof value === \"string\") return { dbType: \"text\", domain: String, arrayElementSafe: true };\n if (typeof value === \"number\") return { dbType: \"float8\", domain: Number, arrayElementSafe: true };\n if (typeof value === \"boolean\") return { dbType: \"bool\", domain: Boolean, arrayElementSafe: true };\n if (typeof value === \"bigint\") return { dbType: \"int8\", domain: BigInt };\n if (value instanceof Date) return { dbType: \"timestamptz\", domain: Date };\n throw new Error(\"Object and array literals need an expression with a matching codec\");\n}\n\n/** Rejects primitive literals that disagree with the column; custom values are checked by their encoder. */\nfunction checkLiteral(value: unknown, type: TypeInfo | undefined): void {\n if (value === null || !type) return;\n const domain = type.domain;\n if (\n (domain === String && typeof value !== \"string\") ||\n (domain === Number && typeof value !== \"number\") ||\n (domain === Boolean && typeof value !== \"boolean\") ||\n (domain === BigInt && typeof value !== \"bigint\") ||\n (domain === Date && !(value instanceof Date))\n ) {\n throw new Error(\n `Expression values must have compatible types: expected ${describeType(type)}, got ${inspect(value)} (${typeof value})`,\n );\n }\n}\n\n/** Names the storage type, conversion domain, and entity tag involved in a codec mismatch. */\nfunction describeType(type: TypeInfo | undefined): string {\n if (!type) return \"unknown codec\";\n const domain = typeof type.domain === \"function\" ? type.domain.name : inspect(type.domain, { depth: 0 });\n return `${type.dbType} (domain ${domain}${type.idMeta ? `, ID target ${type.idMeta.type}` : \"\"})`;\n}\n\nconst compatibleStringDbTypes = new Set([\"text\", \"varchar\"]);\n\n/** Allows PostgreSQL scalar string types that resolve to a common string result. */\nfunction compatibleDbTypes(a: string, b: string): boolean {\n return a === b || (compatibleStringDbTypes.has(a) && compatibleStringDbTypes.has(b));\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"codecs.d.cts","names":[],"sources":["../../src/expressions/codecs.ts"],"mappings":";;;;;;;iBAYgB,sBAAsB,QAAQ,mBAAmB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"codecs.d.mts","names":[],"sources":["../../src/expressions/codecs.ts"],"mappings":";;;;;;;iBAYgB,sBAAsB,QAAQ,mBAAmB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"codecs.js","names":[],"sources":["../../src/expressions/codecs.ts"],"sourcesContent":["import { inspect } from \"node:util\";\n\nimport { BaseExpr } from \"../Expr.ts\";\nimport { type TypeInfo, arrayOutputType } from \"../TypeInfo.ts\";\nimport { assertNever } from \"../utils.ts\";\nimport type { ParsedExpression, ParsedLiteralExpression, ResultCodec } from \"./types.ts\";\n\n/**\n * Chooses one decoder for all possible result values. Columns must agree on a compatible SQL type and domain;\n * literals use that column's encoder. This is conservative: PostgreSQL may accept other combinations,\n * but Joist cannot safely choose their decoder. I.e. Author.id and Book.id both store integers but use different tags.\n */\nexport function chooseExpressionCodec(parsed: ParsedExpression): ResultCodec {\n const leaves = expressionLeaves(parsed);\n const expressions = leaves.flatMap((leaf) => (\"codec\" in leaf ? [leaf.codec] : []));\n const first = expressions[0];\n if (first) {\n for (const other of expressions.slice(1)) {\n if (other === first) continue;\n const a = first.outputType;\n const b = other.outputType;\n if (!a || !b || !compatibleDbTypes(a.dbType, b.dbType) || a.domain !== b.domain || a.idMeta !== b.idMeta) {\n const mismatches =\n !a || !b\n ? [\"unknown codec\"]\n : [\n ...(!compatibleDbTypes(a.dbType, b.dbType) ? [\"SQL type\"] : []),\n ...(a.domain !== b.domain ? [\"domain\"] : []),\n ...(a.idMeta !== b.idMeta ? [\"ID target\"] : []),\n ];\n throw new Error(\n `Expression operands need matching SQL types and codecs: ${describeType(a)} vs ${describeType(b)}; mismatched ${mismatches.join(\", \")}`,\n );\n }\n }\n for (const leaf of leaves) if (\"literal\" in leaf) checkLiteral(leaf.literal.value, first.outputType);\n return first;\n }\n const literals = leaves.flatMap((leaf) => (\"literal\" in leaf ? [leaf.literal] : []));\n const types = literals.map((v) => literalType(v.value)).filter((v) => v !== undefined);\n for (const literal of literals) checkLiteral(literal.value, types[0]);\n return new LiteralCodec(types[0] ?? { dbType: \"text\", domain: String });\n}\n\n/** Gives literal-only expressions a SQL type so PostgreSQL does not return numbers as text. */\nclass LiteralCodec {\n constructor(readonly outputType: TypeInfo) {}\n\n encode(value: unknown): unknown {\n return value;\n }\n\n decode(value: unknown): unknown {\n return this.outputType.domain === BigInt ? BigInt(value as string) : value;\n }\n}\n\n/**\n * Finds parsed operands that share a codec, including NULLIF's comparison operand but not CASE conditions.\n * Each kind selects its own value fields; only CASE's THEN and ELSE expressions contribute a result codec.\n */\nfunction expressionLeaves(parsed: ParsedExpression): CodecLeaf[] {\n if (parsed instanceof BaseExpr) return [{ codec: parsed }];\n switch (parsed.kind) {\n case \"literal\":\n return [{ literal: parsed }];\n case \"arrayAgg\": {\n const valueCodec = chooseExpressionCodec(parsed.value);\n return [\n {\n codec: {\n outputType: arrayOutputType(valueCodec.outputType),\n encode: (value) => (Array.isArray(value) ? value.map((element) => valueCodec.encode(element)) : value),\n decode: (value) => (Array.isArray(value) ? value.map((element) => valueCodec.decode(element)) : value),\n },\n },\n ];\n }\n case \"coalesce\":\n return parsed.candidates.flatMap((candidate) => expressionLeaves(candidate));\n case \"nullIf\":\n return [...expressionLeaves(parsed.value), ...expressionLeaves(parsed.equals)];\n case \"greatest\":\n case \"least\":\n return parsed.values.flatMap((value) => expressionLeaves(value));\n case \"case\":\n return [\n ...parsed.whens.flatMap((entry) => expressionLeaves(entry.then)),\n ...(parsed.else ? expressionLeaves(parsed.else) : []),\n ];\n default:\n return assertNever(parsed);\n }\n}\n\n/** One result codec or one literal that will adopt a sibling codec. */\ntype CodecLeaf = { codec: ResultCodec } | { literal: ParsedLiteralExpression };\n\n/** Supplies predictable PostgreSQL types for standalone primitive literals. */\nfunction literalType(value: unknown): TypeInfo | undefined {\n if (value === null) return undefined;\n if (typeof value === \"string\") return { dbType: \"text\", domain: String, arrayElementSafe: true };\n if (typeof value === \"number\") return { dbType: \"float8\", domain: Number, arrayElementSafe: true };\n if (typeof value === \"boolean\") return { dbType: \"bool\", domain: Boolean, arrayElementSafe: true };\n if (typeof value === \"bigint\") return { dbType: \"int8\", domain: BigInt };\n if (value instanceof Date) return { dbType: \"timestamptz\", domain: Date };\n throw new Error(\"Object and array literals need an expression with a matching codec\");\n}\n\n/** Rejects primitive literals that disagree with the column; custom values are checked by their encoder. */\nfunction checkLiteral(value: unknown, type: TypeInfo | undefined): void {\n if (value === null || !type) return;\n const domain = type.domain;\n if (\n (domain === String && typeof value !== \"string\") ||\n (domain === Number && typeof value !== \"number\") ||\n (domain === Boolean && typeof value !== \"boolean\") ||\n (domain === BigInt && typeof value !== \"bigint\") ||\n (domain === Date && !(value instanceof Date))\n ) {\n throw new Error(\n `Expression values must have compatible types: expected ${describeType(type)}, got ${inspect(value)} (${typeof value})`,\n );\n }\n}\n\n/** Names the storage type, conversion domain, and entity tag involved in a codec mismatch. */\nfunction describeType(type: TypeInfo | undefined): string {\n if (!type) return \"unknown codec\";\n const domain = typeof type.domain === \"function\" ? type.domain.name : inspect(type.domain, { depth: 0 });\n return `${type.dbType} (domain ${domain}${type.idMeta ? `, ID target ${type.idMeta.type}` : \"\"})`;\n}\n\nconst compatibleStringDbTypes = new Set([\"text\", \"varchar\"]);\n\n/** Allows PostgreSQL scalar string types that resolve to a common string result. */\nfunction compatibleDbTypes(a: string, b: string): boolean {\n return a === b || (compatibleStringDbTypes.has(a) && compatibleStringDbTypes.has(b));\n}\n"],"mappings":"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"}
@@ -1,102 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_utils = require("../utils.cjs");
3
- const require_Expr = require("../Expr.cjs");
4
- const require_expressions_case = require("./case.cjs");
5
- const require_expressions_coalesce = require("./coalesce.cjs");
6
- const require_expressions_greatest = require("./greatest.cjs");
7
- const require_expressions_least = require("./least.cjs");
8
- const require_expressions_nullIf = require("./nullIf.cjs");
9
- const require_expressions_parseExpression = require("./parseExpression.cjs");
10
- const require_expressions_arrayAgg = require("./arrayAgg.cjs");
11
- const require_expressions_codecs = require("./codecs.cjs");
12
- //#region src/expressions/expression.ts
13
- /** Builds a reusable SQL value expression, binding literal values as parameters. */
14
- function expr(input) {
15
- return buildExpr(input);
16
- }
17
- /** Parses explicit and inline inputs into a ParsedExpression, then wraps it in an Expr with a result codec. */
18
- function buildExpr(input) {
19
- return new ObjectExpr(require_expressions_parseExpression.parseExpressionInput(input));
20
- }
21
- /** Exposes a ParsedExpression through the Expr methods, SQL rendering, and shared result codec. */
22
- var ObjectExpr = class extends require_Expr.BaseExpr {
23
- parsed;
24
- codec;
25
- constructor(parsed) {
26
- super();
27
- this.parsed = parsed;
28
- this.codec = require_expressions_codecs.chooseExpressionCodec(parsed);
29
- }
30
- get outputType() {
31
- return this.codec.outputType;
32
- }
33
- get sqlNullable() {
34
- return expressionNullable(this.parsed);
35
- }
36
- toSql(ctx) {
37
- return expressionToSql(this.parsed, ctx, this.codec);
38
- }
39
- decode(value) {
40
- return value == null ? value : this.codec.decode(value);
41
- }
42
- encode(value) {
43
- return value == null ? value : this.codec.encode(value);
44
- }
45
- };
46
- /**
47
- * Reports nullability from the fields of each parsed expression kind.
48
- * A direct column can become null through a LEFT join, so only independent values prove NOT NULL here.
49
- */
50
- function expressionNullable(parsed) {
51
- if (parsed instanceof require_Expr.BaseExpr) return parsed.sqlSource ? void 0 : parsed.sqlNullable;
52
- switch (parsed.kind) {
53
- case "literal": return parsed.value === null;
54
- case "arrayAgg": return true;
55
- case "nullIf": return require_expressions_nullIf.nullIfNullable();
56
- case "coalesce": return require_expressions_coalesce.coalesceNullable(parsed);
57
- case "greatest": return require_expressions_greatest.greatestNullable(parsed);
58
- case "least": return require_expressions_least.leastNullable(parsed);
59
- case "case": return require_expressions_case.caseNullable(parsed);
60
- default: return require_utils.assertNever(parsed);
61
- }
62
- }
63
- /**
64
- * Renders a ParsedExpression in SQL binding order, resolving CASE conditions and collecting references for join pruning.
65
- * An omitted CASE condition removes its value as well. I.e. an unused Book.title branch must not keep the Book join.
66
- */
67
- function expressionToSql(parsed, ctx, codec) {
68
- if (parsed instanceof require_Expr.BaseExpr) return parsed.toSql(ctx);
69
- switch (parsed.kind) {
70
- case "literal": {
71
- const dbType = codec.outputType?.dbType;
72
- return {
73
- sql: dbType ? `?::${dbType}` : "?",
74
- bindings: [parsed.value === null ? null : codec.encode(parsed.value)],
75
- refs: []
76
- };
77
- }
78
- case "arrayAgg": return require_expressions_arrayAgg.arrayAggToSql(parsed, ctx, require_expressions_codecs.chooseExpressionCodec(parsed.value));
79
- case "coalesce": return require_expressions_coalesce.coalesceToSql(parsed, ctx, codec);
80
- case "nullIf": return require_expressions_nullIf.nullIfToSql(parsed, ctx, codec);
81
- case "greatest": return require_expressions_greatest.greatestToSql(parsed, ctx, codec);
82
- case "least": return require_expressions_least.leastToSql(parsed, ctx, codec);
83
- case "case": return require_expressions_case.caseToSql(parsed, ctx, codec);
84
- default: return require_utils.assertNever(parsed);
85
- }
86
- }
87
- /** Renders a function call after its parsed kind has supplied the arguments in SQL order. */
88
- function functionToSql(name, args, ctx, codec) {
89
- const parts = require_Expr.joinFragments(args.map((arg) => expressionToSql(arg, ctx, codec)), ", ");
90
- return {
91
- ...parts,
92
- sql: `${name}(${parts.sql})`
93
- };
94
- }
95
- //#endregion
96
- exports.buildExpr = buildExpr;
97
- exports.expr = expr;
98
- exports.expressionNullable = expressionNullable;
99
- exports.expressionToSql = expressionToSql;
100
- exports.functionToSql = functionToSql;
101
-
102
- //# sourceMappingURL=expression.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expression.cjs","names":["parseExpressionInput","BaseExpr","chooseExpressionCodec","nullIfNullable","coalesceNullable","greatestNullable","leastNullable","caseNullable","assertNever","arrayAggToSql","coalesceToSql","nullIfToSql","greatestToSql","leastToSql","caseToSql","joinFragments"],"sources":["../../src/expressions/expression.ts"],"sourcesContent":["import { BaseExpr, type ExprContext, type SqlFragment, joinFragments } from \"../Expr.ts\";\nimport type { TypeInfo } from \"../TypeInfo.ts\";\nimport { assertNever } from \"../utils.ts\";\nimport { arrayAggToSql } from \"./arrayAgg.ts\";\nimport { caseNullable, caseToSql } from \"./case.ts\";\nimport { coalesceNullable, coalesceToSql } from \"./coalesce.ts\";\nimport { chooseExpressionCodec } from \"./codecs.ts\";\nimport { greatestNullable, greatestToSql } from \"./greatest.ts\";\nimport { leastNullable, leastToSql } from \"./least.ts\";\nimport { nullIfNullable, nullIfToSql } from \"./nullIf.ts\";\nimport { parseExpressionInput } from \"./parseExpression.ts\";\nimport type { CheckInput, ExprFromInput, ExprInput, ParsedExpression, ResultCodec } from \"./types.ts\";\n\nexport type { CaseElse, CaseWhen } from \"./case.ts\";\nexport type { CheckInput, ExprFromInput, ExprInput, ExpressionSources, ExpressionValue } from \"./types.ts\";\n\n/** Builds a reusable SQL value expression, binding literal values as parameters. */\nexport function expr<const I extends ExprInput>(input: I & CheckInput<NoInfer<I>>): ExprFromInput<I> {\n return buildExpr(input) as unknown as ExprFromInput<I>;\n}\n\n/** Parses explicit and inline inputs into a ParsedExpression, then wraps it in an Expr with a result codec. */\nexport function buildExpr(input: unknown): BaseExpr {\n return new ObjectExpr(parseExpressionInput(input));\n}\n\n/** Exposes a ParsedExpression through the Expr methods, SQL rendering, and shared result codec. */\nclass ObjectExpr extends BaseExpr {\n private readonly codec: ResultCodec;\n\n constructor(private readonly parsed: ParsedExpression) {\n super();\n this.codec = chooseExpressionCodec(parsed);\n }\n\n get outputType(): TypeInfo | undefined {\n return this.codec.outputType;\n }\n\n get sqlNullable(): boolean | undefined {\n return expressionNullable(this.parsed);\n }\n\n toSql(ctx: ExprContext): SqlFragment {\n return expressionToSql(this.parsed, ctx, this.codec);\n }\n\n decode(value: unknown): unknown {\n return value == null ? value : this.codec.decode(value);\n }\n\n encode(value: unknown): unknown {\n return value == null ? value : this.codec.encode(value);\n }\n}\n\n/**\n * Reports nullability from the fields of each parsed expression kind.\n * A direct column can become null through a LEFT join, so only independent values prove NOT NULL here.\n */\nexport function expressionNullable(parsed: ParsedExpression): boolean | undefined {\n if (parsed instanceof BaseExpr) return parsed.sqlSource ? undefined : parsed.sqlNullable;\n switch (parsed.kind) {\n case \"literal\":\n return parsed.value === null;\n case \"arrayAgg\":\n return true;\n case \"nullIf\":\n return nullIfNullable();\n case \"coalesce\":\n return coalesceNullable(parsed);\n case \"greatest\":\n return greatestNullable(parsed);\n case \"least\":\n return leastNullable(parsed);\n case \"case\":\n return caseNullable(parsed);\n default:\n return assertNever(parsed);\n }\n}\n\n/**\n * Renders a ParsedExpression in SQL binding order, resolving CASE conditions and collecting references for join pruning.\n * An omitted CASE condition removes its value as well. I.e. an unused Book.title branch must not keep the Book join.\n */\nexport function expressionToSql(parsed: ParsedExpression, ctx: ExprContext, codec: ResultCodec): SqlFragment {\n if (parsed instanceof BaseExpr) return parsed.toSql(ctx);\n switch (parsed.kind) {\n case \"literal\": {\n const dbType = codec.outputType?.dbType;\n return {\n sql: dbType ? `?::${dbType}` : \"?\",\n bindings: [parsed.value === null ? null : codec.encode(parsed.value)],\n refs: [],\n };\n }\n case \"arrayAgg\":\n return arrayAggToSql(parsed, ctx, chooseExpressionCodec(parsed.value));\n case \"coalesce\":\n return coalesceToSql(parsed, ctx, codec);\n case \"nullIf\":\n return nullIfToSql(parsed, ctx, codec);\n case \"greatest\":\n return greatestToSql(parsed, ctx, codec);\n case \"least\":\n return leastToSql(parsed, ctx, codec);\n case \"case\":\n return caseToSql(parsed, ctx, codec);\n default:\n return assertNever(parsed);\n }\n}\n\n/** Renders a function call after its parsed kind has supplied the arguments in SQL order. */\nexport function functionToSql(\n name: string,\n args: readonly ParsedExpression[],\n ctx: ExprContext,\n codec: ResultCodec,\n): SqlFragment {\n const parts = joinFragments(\n args.map((arg) => expressionToSql(arg, ctx, codec)),\n \", \",\n );\n return { ...parts, sql: `${name}(${parts.sql})` };\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,SAAgB,KAAgC,OAAqD;CACnG,OAAO,UAAU,KAAK;AACxB;;AAGA,SAAgB,UAAU,OAA0B;CAClD,OAAO,IAAI,WAAWA,oCAAAA,qBAAqB,KAAK,CAAC;AACnD;;AAGA,IAAM,aAAN,cAAyBC,aAAAA,SAAS;CAGH;CAF7B;CAEA,YAAY,QAA2C;EACrD,MAAM;EADqB,KAAA,SAAA;EAE3B,KAAK,QAAQC,2BAAAA,sBAAsB,MAAM;CAC3C;CAEA,IAAI,aAAmC;EACrC,OAAO,KAAK,MAAM;CACpB;CAEA,IAAI,cAAmC;EACrC,OAAO,mBAAmB,KAAK,MAAM;CACvC;CAEA,MAAM,KAA+B;EACnC,OAAO,gBAAgB,KAAK,QAAQ,KAAK,KAAK,KAAK;CACrD;CAEA,OAAO,OAAyB;EAC9B,OAAO,SAAS,OAAO,QAAQ,KAAK,MAAM,OAAO,KAAK;CACxD;CAEA,OAAO,OAAyB;EAC9B,OAAO,SAAS,OAAO,QAAQ,KAAK,MAAM,OAAO,KAAK;CACxD;AACF;;;;;AAMA,SAAgB,mBAAmB,QAA+C;CAChF,IAAI,kBAAkBD,aAAAA,UAAU,OAAO,OAAO,YAAY,KAAA,IAAY,OAAO;CAC7E,QAAQ,OAAO,MAAf;EACE,KAAK,WACH,OAAO,OAAO,UAAU;EAC1B,KAAK,YACH,OAAO;EACT,KAAK,UACH,OAAOE,2BAAAA,eAAe;EACxB,KAAK,YACH,OAAOC,6BAAAA,iBAAiB,MAAM;EAChC,KAAK,YACH,OAAOC,6BAAAA,iBAAiB,MAAM;EAChC,KAAK,SACH,OAAOC,0BAAAA,cAAc,MAAM;EAC7B,KAAK,QACH,OAAOC,yBAAAA,aAAa,MAAM;EAC5B,SACE,OAAOC,cAAAA,YAAY,MAAM;CAC7B;AACF;;;;;AAMA,SAAgB,gBAAgB,QAA0B,KAAkB,OAAiC;CAC3G,IAAI,kBAAkBP,aAAAA,UAAU,OAAO,OAAO,MAAM,GAAG;CACvD,QAAQ,OAAO,MAAf;EACE,KAAK,WAAW;GACd,MAAM,SAAS,MAAM,YAAY;GACjC,OAAO;IACL,KAAK,SAAS,MAAM,WAAW;IAC/B,UAAU,CAAC,OAAO,UAAU,OAAO,OAAO,MAAM,OAAO,OAAO,KAAK,CAAC;IACpE,MAAM,CAAC;GACT;EACF;EACA,KAAK,YACH,OAAOQ,6BAAAA,cAAc,QAAQ,KAAKP,2BAAAA,sBAAsB,OAAO,KAAK,CAAC;EACvE,KAAK,YACH,OAAOQ,6BAAAA,cAAc,QAAQ,KAAK,KAAK;EACzC,KAAK,UACH,OAAOC,2BAAAA,YAAY,QAAQ,KAAK,KAAK;EACvC,KAAK,YACH,OAAOC,6BAAAA,cAAc,QAAQ,KAAK,KAAK;EACzC,KAAK,SACH,OAAOC,0BAAAA,WAAW,QAAQ,KAAK,KAAK;EACtC,KAAK,QACH,OAAOC,yBAAAA,UAAU,QAAQ,KAAK,KAAK;EACrC,SACE,OAAON,cAAAA,YAAY,MAAM;CAC7B;AACF;;AAGA,SAAgB,cACd,MACA,MACA,KACA,OACa;CACb,MAAM,QAAQO,aAAAA,cACZ,KAAK,KAAK,QAAQ,gBAAgB,KAAK,KAAK,KAAK,CAAC,GAClD,IACF;CACA,OAAO;EAAE,GAAG;EAAO,KAAK,GAAG,KAAK,GAAG,MAAM,IAAI;CAAG;AAClD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"expression.d.cts","names":[],"sources":["../../src/expressions/expression.ts"],"mappings":";;;;;iBAiBgB,WAAW,UAAU,WAAW,OAAO,IAAI,WAAW,QAAQ,MAAM,cAAc;;iBAKlF,UAAU,iBAAiB;;;;;iBAsC3B,mBAAmB,QAAQ;;;;;iBA0B3B,gBAAgB,QAAQ,kBAAkB,KAAK,aAAa,OAAO,cAAc;;iBA6BjF,cACd,cACA,eAAe,oBACf,KAAK,aACL,OAAO,cACN"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"expression.d.mts","names":[],"sources":["../../src/expressions/expression.ts"],"mappings":";;;;;iBAiBgB,WAAW,UAAU,WAAW,OAAO,IAAI,WAAW,QAAQ,MAAM,cAAc;;iBAKlF,UAAU,iBAAiB;;;;;iBAsC3B,mBAAmB,QAAQ;;;;;iBA0B3B,gBAAgB,QAAQ,kBAAkB,KAAK,aAAa,OAAO,cAAc;;iBA6BjF,cACd,cACA,eAAe,oBACf,KAAK,aACL,OAAO,cACN"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"expression.js","names":[],"sources":["../../src/expressions/expression.ts"],"sourcesContent":["import { BaseExpr, type ExprContext, type SqlFragment, joinFragments } from \"../Expr.ts\";\nimport type { TypeInfo } from \"../TypeInfo.ts\";\nimport { assertNever } from \"../utils.ts\";\nimport { arrayAggToSql } from \"./arrayAgg.ts\";\nimport { caseNullable, caseToSql } from \"./case.ts\";\nimport { coalesceNullable, coalesceToSql } from \"./coalesce.ts\";\nimport { chooseExpressionCodec } from \"./codecs.ts\";\nimport { greatestNullable, greatestToSql } from \"./greatest.ts\";\nimport { leastNullable, leastToSql } from \"./least.ts\";\nimport { nullIfNullable, nullIfToSql } from \"./nullIf.ts\";\nimport { parseExpressionInput } from \"./parseExpression.ts\";\nimport type { CheckInput, ExprFromInput, ExprInput, ParsedExpression, ResultCodec } from \"./types.ts\";\n\nexport type { CaseElse, CaseWhen } from \"./case.ts\";\nexport type { CheckInput, ExprFromInput, ExprInput, ExpressionSources, ExpressionValue } from \"./types.ts\";\n\n/** Builds a reusable SQL value expression, binding literal values as parameters. */\nexport function expr<const I extends ExprInput>(input: I & CheckInput<NoInfer<I>>): ExprFromInput<I> {\n return buildExpr(input) as unknown as ExprFromInput<I>;\n}\n\n/** Parses explicit and inline inputs into a ParsedExpression, then wraps it in an Expr with a result codec. */\nexport function buildExpr(input: unknown): BaseExpr {\n return new ObjectExpr(parseExpressionInput(input));\n}\n\n/** Exposes a ParsedExpression through the Expr methods, SQL rendering, and shared result codec. */\nclass ObjectExpr extends BaseExpr {\n private readonly codec: ResultCodec;\n\n constructor(private readonly parsed: ParsedExpression) {\n super();\n this.codec = chooseExpressionCodec(parsed);\n }\n\n get outputType(): TypeInfo | undefined {\n return this.codec.outputType;\n }\n\n get sqlNullable(): boolean | undefined {\n return expressionNullable(this.parsed);\n }\n\n toSql(ctx: ExprContext): SqlFragment {\n return expressionToSql(this.parsed, ctx, this.codec);\n }\n\n decode(value: unknown): unknown {\n return value == null ? value : this.codec.decode(value);\n }\n\n encode(value: unknown): unknown {\n return value == null ? value : this.codec.encode(value);\n }\n}\n\n/**\n * Reports nullability from the fields of each parsed expression kind.\n * A direct column can become null through a LEFT join, so only independent values prove NOT NULL here.\n */\nexport function expressionNullable(parsed: ParsedExpression): boolean | undefined {\n if (parsed instanceof BaseExpr) return parsed.sqlSource ? undefined : parsed.sqlNullable;\n switch (parsed.kind) {\n case \"literal\":\n return parsed.value === null;\n case \"arrayAgg\":\n return true;\n case \"nullIf\":\n return nullIfNullable();\n case \"coalesce\":\n return coalesceNullable(parsed);\n case \"greatest\":\n return greatestNullable(parsed);\n case \"least\":\n return leastNullable(parsed);\n case \"case\":\n return caseNullable(parsed);\n default:\n return assertNever(parsed);\n }\n}\n\n/**\n * Renders a ParsedExpression in SQL binding order, resolving CASE conditions and collecting references for join pruning.\n * An omitted CASE condition removes its value as well. I.e. an unused Book.title branch must not keep the Book join.\n */\nexport function expressionToSql(parsed: ParsedExpression, ctx: ExprContext, codec: ResultCodec): SqlFragment {\n if (parsed instanceof BaseExpr) return parsed.toSql(ctx);\n switch (parsed.kind) {\n case \"literal\": {\n const dbType = codec.outputType?.dbType;\n return {\n sql: dbType ? `?::${dbType}` : \"?\",\n bindings: [parsed.value === null ? null : codec.encode(parsed.value)],\n refs: [],\n };\n }\n case \"arrayAgg\":\n return arrayAggToSql(parsed, ctx, chooseExpressionCodec(parsed.value));\n case \"coalesce\":\n return coalesceToSql(parsed, ctx, codec);\n case \"nullIf\":\n return nullIfToSql(parsed, ctx, codec);\n case \"greatest\":\n return greatestToSql(parsed, ctx, codec);\n case \"least\":\n return leastToSql(parsed, ctx, codec);\n case \"case\":\n return caseToSql(parsed, ctx, codec);\n default:\n return assertNever(parsed);\n }\n}\n\n/** Renders a function call after its parsed kind has supplied the arguments in SQL order. */\nexport function functionToSql(\n name: string,\n args: readonly ParsedExpression[],\n ctx: ExprContext,\n codec: ResultCodec,\n): SqlFragment {\n const parts = joinFragments(\n args.map((arg) => expressionToSql(arg, ctx, codec)),\n \", \",\n );\n return { ...parts, sql: `${name}(${parts.sql})` };\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,SAAgB,KAAgC,OAAqD;CACnG,OAAO,UAAU,KAAK;AACxB;;AAGA,SAAgB,UAAU,OAA0B;CAClD,OAAO,IAAI,WAAW,qBAAqB,KAAK,CAAC;AACnD;;AAGA,IAAM,aAAN,cAAyB,SAAS;CAGH;CAF7B;CAEA,YAAY,QAA2C;EACrD,MAAM;EADqB,KAAA,SAAA;EAE3B,KAAK,QAAQ,sBAAsB,MAAM;CAC3C;CAEA,IAAI,aAAmC;EACrC,OAAO,KAAK,MAAM;CACpB;CAEA,IAAI,cAAmC;EACrC,OAAO,mBAAmB,KAAK,MAAM;CACvC;CAEA,MAAM,KAA+B;EACnC,OAAO,gBAAgB,KAAK,QAAQ,KAAK,KAAK,KAAK;CACrD;CAEA,OAAO,OAAyB;EAC9B,OAAO,SAAS,OAAO,QAAQ,KAAK,MAAM,OAAO,KAAK;CACxD;CAEA,OAAO,OAAyB;EAC9B,OAAO,SAAS,OAAO,QAAQ,KAAK,MAAM,OAAO,KAAK;CACxD;AACF;;;;;AAMA,SAAgB,mBAAmB,QAA+C;CAChF,IAAI,kBAAkB,UAAU,OAAO,OAAO,YAAY,KAAA,IAAY,OAAO;CAC7E,QAAQ,OAAO,MAAf;EACE,KAAK,WACH,OAAO,OAAO,UAAU;EAC1B,KAAK,YACH,OAAO;EACT,KAAK,UACH,OAAO,eAAe;EACxB,KAAK,YACH,OAAO,iBAAiB,MAAM;EAChC,KAAK,YACH,OAAO,iBAAiB,MAAM;EAChC,KAAK,SACH,OAAO,cAAc,MAAM;EAC7B,KAAK,QACH,OAAO,aAAa,MAAM;EAC5B,SACE,OAAO,YAAY,MAAM;CAC7B;AACF;;;;;AAMA,SAAgB,gBAAgB,QAA0B,KAAkB,OAAiC;CAC3G,IAAI,kBAAkB,UAAU,OAAO,OAAO,MAAM,GAAG;CACvD,QAAQ,OAAO,MAAf;EACE,KAAK,WAAW;GACd,MAAM,SAAS,MAAM,YAAY;GACjC,OAAO;IACL,KAAK,SAAS,MAAM,WAAW;IAC/B,UAAU,CAAC,OAAO,UAAU,OAAO,OAAO,MAAM,OAAO,OAAO,KAAK,CAAC;IACpE,MAAM,CAAC;GACT;EACF;EACA,KAAK,YACH,OAAO,cAAc,QAAQ,KAAK,sBAAsB,OAAO,KAAK,CAAC;EACvE,KAAK,YACH,OAAO,cAAc,QAAQ,KAAK,KAAK;EACzC,KAAK,UACH,OAAO,YAAY,QAAQ,KAAK,KAAK;EACvC,KAAK,YACH,OAAO,cAAc,QAAQ,KAAK,KAAK;EACzC,KAAK,SACH,OAAO,WAAW,QAAQ,KAAK,KAAK;EACtC,KAAK,QACH,OAAO,UAAU,QAAQ,KAAK,KAAK;EACrC,SACE,OAAO,YAAY,MAAM;CAC7B;AACF;;AAGA,SAAgB,cACd,MACA,MACA,KACA,OACa;CACb,MAAM,QAAQ,cACZ,KAAK,KAAK,QAAQ,gBAAgB,KAAK,KAAK,KAAK,CAAC,GAClD,IACF;CACA,OAAO;EAAE,GAAG;EAAO,KAAK,GAAG,KAAK,GAAG,MAAM,IAAI;CAAG;AAClD"}
@@ -1,25 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_expressions_parseExpression = require("./parseExpression.cjs");
3
- const require_expressions_expression = require("./expression.cjs");
4
- //#region src/expressions/greatest.ts
5
- /** Parses GREATEST values and requires at least one operand. */
6
- function parseGreatestExpression(input) {
7
- return {
8
- kind: "greatest",
9
- values: require_expressions_parseExpression.parseNonEmptyOperands(input, "GREATEST")
10
- };
11
- }
12
- /** Renders the values compared by GREATEST. */
13
- function greatestToSql(parsed, ctx, codec) {
14
- return require_expressions_expression.functionToSql("GREATEST", parsed.values, ctx, codec);
15
- }
16
- /** GREATEST ignores nulls, so one non-null value guarantees a non-null result. */
17
- function greatestNullable(parsed) {
18
- return parsed.values.some((value) => require_expressions_expression.expressionNullable(value) === false) ? false : void 0;
19
- }
20
- //#endregion
21
- exports.greatestNullable = greatestNullable;
22
- exports.greatestToSql = greatestToSql;
23
- exports.parseGreatestExpression = parseGreatestExpression;
24
-
25
- //# sourceMappingURL=greatest.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"greatest.cjs","names":["parseNonEmptyOperands","functionToSql","expressionNullable"],"sources":["../../src/expressions/greatest.ts"],"sourcesContent":["import type { ExprContext, SqlFragment } from \"../Expr.ts\";\nimport { expressionNullable, functionToSql } from \"./expression.ts\";\nimport { parseNonEmptyOperands } from \"./parseExpression.ts\";\nimport type { ParsedExpression, ResultCodec } from \"./types.ts\";\n\n/** Values whose largest non-null member is selected by PostgreSQL. */\nexport interface GreatestInput {\n readonly greatest: readonly unknown[];\n}\n\n/** A GREATEST comparison with at least one value. */\nexport interface ParsedGreatestExpression {\n kind: \"greatest\";\n values: [ParsedExpression, ...ParsedExpression[]];\n}\n\n/** Parses GREATEST values and requires at least one operand. */\nexport function parseGreatestExpression(input: unknown): ParsedGreatestExpression {\n return { kind: \"greatest\", values: parseNonEmptyOperands(input, \"GREATEST\") };\n}\n\n/** Renders the values compared by GREATEST. */\nexport function greatestToSql(parsed: ParsedGreatestExpression, ctx: ExprContext, codec: ResultCodec): SqlFragment {\n return functionToSql(\"GREATEST\", parsed.values, ctx, codec);\n}\n\n/** GREATEST ignores nulls, so one non-null value guarantees a non-null result. */\nexport function greatestNullable(parsed: ParsedGreatestExpression): boolean | undefined {\n return parsed.values.some((value) => expressionNullable(value) === false) ? false : undefined;\n}\n"],"mappings":";;;;;AAiBA,SAAgB,wBAAwB,OAA0C;CAChF,OAAO;EAAE,MAAM;EAAY,QAAQA,oCAAAA,sBAAsB,OAAO,UAAU;CAAE;AAC9E;;AAGA,SAAgB,cAAc,QAAkC,KAAkB,OAAiC;CACjH,OAAOC,+BAAAA,cAAc,YAAY,OAAO,QAAQ,KAAK,KAAK;AAC5D;;AAGA,SAAgB,iBAAiB,QAAuD;CACtF,OAAO,OAAO,OAAO,MAAM,UAAUC,+BAAAA,mBAAmB,KAAK,MAAM,KAAK,IAAI,QAAQ,KAAA;AACtF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"greatest.d.cts","names":[],"sources":["../../src/expressions/greatest.ts"],"mappings":";;;;UAMiB;WACN;;;UAIM;EACf;EACA,SAAS,qBAAqB;;;iBAIhB,wBAAwB,iBAAiB;;iBAKzC,cAAc,QAAQ,0BAA0B,KAAK,aAAa,OAAO,cAAc;;iBAKvF,iBAAiB,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"greatest.d.mts","names":[],"sources":["../../src/expressions/greatest.ts"],"mappings":";;;;UAMiB;WACN;;;UAIM;EACf;EACA,SAAS,qBAAqB;;;iBAIhB,wBAAwB,iBAAiB;;iBAKzC,cAAc,QAAQ,0BAA0B,KAAK,aAAa,OAAO,cAAc;;iBAKvF,iBAAiB,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"greatest.js","names":[],"sources":["../../src/expressions/greatest.ts"],"sourcesContent":["import type { ExprContext, SqlFragment } from \"../Expr.ts\";\nimport { expressionNullable, functionToSql } from \"./expression.ts\";\nimport { parseNonEmptyOperands } from \"./parseExpression.ts\";\nimport type { ParsedExpression, ResultCodec } from \"./types.ts\";\n\n/** Values whose largest non-null member is selected by PostgreSQL. */\nexport interface GreatestInput {\n readonly greatest: readonly unknown[];\n}\n\n/** A GREATEST comparison with at least one value. */\nexport interface ParsedGreatestExpression {\n kind: \"greatest\";\n values: [ParsedExpression, ...ParsedExpression[]];\n}\n\n/** Parses GREATEST values and requires at least one operand. */\nexport function parseGreatestExpression(input: unknown): ParsedGreatestExpression {\n return { kind: \"greatest\", values: parseNonEmptyOperands(input, \"GREATEST\") };\n}\n\n/** Renders the values compared by GREATEST. */\nexport function greatestToSql(parsed: ParsedGreatestExpression, ctx: ExprContext, codec: ResultCodec): SqlFragment {\n return functionToSql(\"GREATEST\", parsed.values, ctx, codec);\n}\n\n/** GREATEST ignores nulls, so one non-null value guarantees a non-null result. */\nexport function greatestNullable(parsed: ParsedGreatestExpression): boolean | undefined {\n return parsed.values.some((value) => expressionNullable(value) === false) ? false : undefined;\n}\n"],"mappings":";;;;AAiBA,SAAgB,wBAAwB,OAA0C;CAChF,OAAO;EAAE,MAAM;EAAY,QAAQ,sBAAsB,OAAO,UAAU;CAAE;AAC9E;;AAGA,SAAgB,cAAc,QAAkC,KAAkB,OAAiC;CACjH,OAAO,cAAc,YAAY,OAAO,QAAQ,KAAK,KAAK;AAC5D;;AAGA,SAAgB,iBAAiB,QAAuD;CACtF,OAAO,OAAO,OAAO,MAAM,UAAU,mBAAmB,KAAK,MAAM,KAAK,IAAI,QAAQ,KAAA;AACtF"}
@@ -1,25 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_expressions_parseExpression = require("./parseExpression.cjs");
3
- const require_expressions_expression = require("./expression.cjs");
4
- //#region src/expressions/least.ts
5
- /** Parses LEAST values and requires at least one operand. */
6
- function parseLeastExpression(input) {
7
- return {
8
- kind: "least",
9
- values: require_expressions_parseExpression.parseNonEmptyOperands(input, "LEAST")
10
- };
11
- }
12
- /** Renders the values compared by LEAST. */
13
- function leastToSql(parsed, ctx, codec) {
14
- return require_expressions_expression.functionToSql("LEAST", parsed.values, ctx, codec);
15
- }
16
- /** LEAST ignores nulls, so one non-null value guarantees a non-null result. */
17
- function leastNullable(parsed) {
18
- return parsed.values.some((value) => require_expressions_expression.expressionNullable(value) === false) ? false : void 0;
19
- }
20
- //#endregion
21
- exports.leastNullable = leastNullable;
22
- exports.leastToSql = leastToSql;
23
- exports.parseLeastExpression = parseLeastExpression;
24
-
25
- //# sourceMappingURL=least.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"least.cjs","names":["parseNonEmptyOperands","functionToSql","expressionNullable"],"sources":["../../src/expressions/least.ts"],"sourcesContent":["import type { ExprContext, SqlFragment } from \"../Expr.ts\";\nimport { expressionNullable, functionToSql } from \"./expression.ts\";\nimport { parseNonEmptyOperands } from \"./parseExpression.ts\";\nimport type { ParsedExpression, ResultCodec } from \"./types.ts\";\n\n/** Values whose smallest non-null member is selected by PostgreSQL. */\nexport interface LeastInput {\n readonly least: readonly unknown[];\n}\n\n/** A LEAST comparison with at least one value. */\nexport interface ParsedLeastExpression {\n kind: \"least\";\n values: [ParsedExpression, ...ParsedExpression[]];\n}\n\n/** Parses LEAST values and requires at least one operand. */\nexport function parseLeastExpression(input: unknown): ParsedLeastExpression {\n return { kind: \"least\", values: parseNonEmptyOperands(input, \"LEAST\") };\n}\n\n/** Renders the values compared by LEAST. */\nexport function leastToSql(parsed: ParsedLeastExpression, ctx: ExprContext, codec: ResultCodec): SqlFragment {\n return functionToSql(\"LEAST\", parsed.values, ctx, codec);\n}\n\n/** LEAST ignores nulls, so one non-null value guarantees a non-null result. */\nexport function leastNullable(parsed: ParsedLeastExpression): boolean | undefined {\n return parsed.values.some((value) => expressionNullable(value) === false) ? false : undefined;\n}\n"],"mappings":";;;;;AAiBA,SAAgB,qBAAqB,OAAuC;CAC1E,OAAO;EAAE,MAAM;EAAS,QAAQA,oCAAAA,sBAAsB,OAAO,OAAO;CAAE;AACxE;;AAGA,SAAgB,WAAW,QAA+B,KAAkB,OAAiC;CAC3G,OAAOC,+BAAAA,cAAc,SAAS,OAAO,QAAQ,KAAK,KAAK;AACzD;;AAGA,SAAgB,cAAc,QAAoD;CAChF,OAAO,OAAO,OAAO,MAAM,UAAUC,+BAAAA,mBAAmB,KAAK,MAAM,KAAK,IAAI,QAAQ,KAAA;AACtF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"least.d.cts","names":[],"sources":["../../src/expressions/least.ts"],"mappings":";;;;UAMiB;WACN;;;UAIM;EACf;EACA,SAAS,qBAAqB;;;iBAIhB,qBAAqB,iBAAiB;;iBAKtC,WAAW,QAAQ,uBAAuB,KAAK,aAAa,OAAO,cAAc;;iBAKjF,cAAc,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"least.d.mts","names":[],"sources":["../../src/expressions/least.ts"],"mappings":";;;;UAMiB;WACN;;;UAIM;EACf;EACA,SAAS,qBAAqB;;;iBAIhB,qBAAqB,iBAAiB;;iBAKtC,WAAW,QAAQ,uBAAuB,KAAK,aAAa,OAAO,cAAc;;iBAKjF,cAAc,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"least.js","names":[],"sources":["../../src/expressions/least.ts"],"sourcesContent":["import type { ExprContext, SqlFragment } from \"../Expr.ts\";\nimport { expressionNullable, functionToSql } from \"./expression.ts\";\nimport { parseNonEmptyOperands } from \"./parseExpression.ts\";\nimport type { ParsedExpression, ResultCodec } from \"./types.ts\";\n\n/** Values whose smallest non-null member is selected by PostgreSQL. */\nexport interface LeastInput {\n readonly least: readonly unknown[];\n}\n\n/** A LEAST comparison with at least one value. */\nexport interface ParsedLeastExpression {\n kind: \"least\";\n values: [ParsedExpression, ...ParsedExpression[]];\n}\n\n/** Parses LEAST values and requires at least one operand. */\nexport function parseLeastExpression(input: unknown): ParsedLeastExpression {\n return { kind: \"least\", values: parseNonEmptyOperands(input, \"LEAST\") };\n}\n\n/** Renders the values compared by LEAST. */\nexport function leastToSql(parsed: ParsedLeastExpression, ctx: ExprContext, codec: ResultCodec): SqlFragment {\n return functionToSql(\"LEAST\", parsed.values, ctx, codec);\n}\n\n/** LEAST ignores nulls, so one non-null value guarantees a non-null result. */\nexport function leastNullable(parsed: ParsedLeastExpression): boolean | undefined {\n return parsed.values.some((value) => expressionNullable(value) === false) ? false : undefined;\n}\n"],"mappings":";;;;AAiBA,SAAgB,qBAAqB,OAAuC;CAC1E,OAAO;EAAE,MAAM;EAAS,QAAQ,sBAAsB,OAAO,OAAO;CAAE;AACxE;;AAGA,SAAgB,WAAW,QAA+B,KAAkB,OAAiC;CAC3G,OAAO,cAAc,SAAS,OAAO,QAAQ,KAAK,KAAK;AACzD;;AAGA,SAAgB,cAAc,QAAoD;CAChF,OAAO,OAAO,OAAO,MAAM,UAAU,mBAAmB,KAAK,MAAM,KAAK,IAAI,QAAQ,KAAA;AACtF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"nullIf.cjs","names":["parseExpression","functionToSql"],"sources":["../../src/expressions/nullIf.ts"],"sourcesContent":["import type { ExprContext, SqlFragment } from \"../Expr.ts\";\nimport { functionToSql } from \"./expression.ts\";\nimport { parseExpression } from \"./parseExpression.ts\";\nimport type { ParsedExpression, ResultCodec } from \"./types.ts\";\n\n/** A value and the value it must equal for NULLIF to return SQL NULL. */\nexport interface NullIfInput {\n readonly nullIf: readonly unknown[];\n}\n\n/** NULLIF returns value unless it matches equals. */\nexport interface ParsedNullIfExpression {\n kind: \"nullIf\";\n value: ParsedExpression;\n equals: ParsedExpression;\n}\n\n/** Parses exactly two NULLIF operands into their distinct roles. */\nexport function parseNullIfExpression(input: unknown): ParsedNullIfExpression {\n if (!Array.isArray(input) || input.length !== 2) throw new Error(\"NULLIF needs exactly two values\");\n return { kind: \"nullIf\", value: parseExpression(input[0]), equals: parseExpression(input[1]) };\n}\n\n/** Renders the returned value before its equality comparison operand. */\nexport function nullIfToSql(parsed: ParsedNullIfExpression, ctx: ExprContext, codec: ResultCodec): SqlFragment {\n return functionToSql(\"NULLIF\", [parsed.value, parsed.equals], ctx, codec);\n}\n\n/** NULLIF can return SQL NULL when its operands match. */\nexport function nullIfNullable(): true {\n return true;\n}\n"],"mappings":";;;;;AAkBA,SAAgB,sBAAsB,OAAwC;CAC5E,IAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG,MAAM,IAAI,MAAM,iCAAiC;CAClG,OAAO;EAAE,MAAM;EAAU,OAAOA,oCAAAA,gBAAgB,MAAM,EAAE;EAAG,QAAQA,oCAAAA,gBAAgB,MAAM,EAAE;CAAE;AAC/F;;AAGA,SAAgB,YAAY,QAAgC,KAAkB,OAAiC;CAC7G,OAAOC,+BAAAA,cAAc,UAAU,CAAC,OAAO,OAAO,OAAO,MAAM,GAAG,KAAK,KAAK;AAC1E;;AAGA,SAAgB,iBAAuB;CACrC,OAAO;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"nullIf.d.cts","names":[],"sources":["../../src/expressions/nullIf.ts"],"mappings":";;;;UAMiB;WACN;;;UAIM;EACf;EACA,OAAO;EACP,QAAQ;;;iBAIM,sBAAsB,iBAAiB;;iBAMvC,YAAY,QAAQ,wBAAwB,KAAK,aAAa,OAAO,cAAc;;iBAKnF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"nullIf.d.mts","names":[],"sources":["../../src/expressions/nullIf.ts"],"mappings":";;;;UAMiB;WACN;;;UAIM;EACf;EACA,OAAO;EACP,QAAQ;;;iBAIM,sBAAsB,iBAAiB;;iBAMvC,YAAY,QAAQ,wBAAwB,KAAK,aAAa,OAAO,cAAc;;iBAKnF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"nullIf.js","names":[],"sources":["../../src/expressions/nullIf.ts"],"sourcesContent":["import type { ExprContext, SqlFragment } from \"../Expr.ts\";\nimport { functionToSql } from \"./expression.ts\";\nimport { parseExpression } from \"./parseExpression.ts\";\nimport type { ParsedExpression, ResultCodec } from \"./types.ts\";\n\n/** A value and the value it must equal for NULLIF to return SQL NULL. */\nexport interface NullIfInput {\n readonly nullIf: readonly unknown[];\n}\n\n/** NULLIF returns value unless it matches equals. */\nexport interface ParsedNullIfExpression {\n kind: \"nullIf\";\n value: ParsedExpression;\n equals: ParsedExpression;\n}\n\n/** Parses exactly two NULLIF operands into their distinct roles. */\nexport function parseNullIfExpression(input: unknown): ParsedNullIfExpression {\n if (!Array.isArray(input) || input.length !== 2) throw new Error(\"NULLIF needs exactly two values\");\n return { kind: \"nullIf\", value: parseExpression(input[0]), equals: parseExpression(input[1]) };\n}\n\n/** Renders the returned value before its equality comparison operand. */\nexport function nullIfToSql(parsed: ParsedNullIfExpression, ctx: ExprContext, codec: ResultCodec): SqlFragment {\n return functionToSql(\"NULLIF\", [parsed.value, parsed.equals], ctx, codec);\n}\n\n/** NULLIF can return SQL NULL when its operands match. */\nexport function nullIfNullable(): true {\n return true;\n}\n"],"mappings":";;;;AAkBA,SAAgB,sBAAsB,OAAwC;CAC5E,IAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG,MAAM,IAAI,MAAM,iCAAiC;CAClG,OAAO;EAAE,MAAM;EAAU,OAAO,gBAAgB,MAAM,EAAE;EAAG,QAAQ,gBAAgB,MAAM,EAAE;CAAE;AAC/F;;AAGA,SAAgB,YAAY,QAAgC,KAAkB,OAAiC;CAC7G,OAAO,cAAc,UAAU,CAAC,OAAO,OAAO,OAAO,MAAM,GAAG,KAAK,KAAK;AAC1E;;AAGA,SAAgB,iBAAuB;CACrC,OAAO;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseExpression.cjs","names":["BaseExpr","parseCoalesceExpression","parseNullIfExpression","parseGreatestExpression","parseLeastExpression","assertNever","parseArrayAggExpression","parseCaseExpression"],"sources":["../../src/expressions/parseExpression.ts"],"sourcesContent":["import { BaseExpr } from \"../Expr.ts\";\nimport { assertNever } from \"../utils.ts\";\nimport { parseArrayAggExpression } from \"./arrayAgg.ts\";\nimport { parseCaseExpression } from \"./case.ts\";\nimport { parseCoalesceExpression } from \"./coalesce.ts\";\nimport { parseGreatestExpression } from \"./greatest.ts\";\nimport { parseLeastExpression } from \"./least.ts\";\nimport { parseNullIfExpression } from \"./nullIf.ts\";\nimport type { ExprName, ParsedExpression } from \"./types.ts\";\n\n// These expressions take operand arrays; CASE uses WHEN/THEN entries instead.\nconst exprNames = [\"coalesce\", \"nullIf\", \"greatest\", \"least\"] as const satisfies readonly ExprName[];\n\n/** Requires an expression object at the root before parsing its nested operands. */\nexport function parseExpressionInput(input: unknown): ParsedExpression {\n if (!isObject(input) || (!(\"case\" in input) && !(\"arrayAgg\" in input) && !exprNames.some((name) => name in input))) {\n throw new Error(\"expr expects an object with arrayAgg, case, coalesce, nullIf, greatest, or least\");\n }\n return parseExpression(input);\n}\n\n/**\n * Parses expression inputs into a ParsedExpression, validating their shape and copying operand arrays.\n * Nested expressions stay together so their literals can use a column's codec from another branch.\n * I.e. COALESCE(Book.id, CASE ... THEN \"b:9\" END) must encode \"b:9\" as an integer.\n */\nexport function parseExpression(input: unknown): ParsedExpression {\n if (input instanceof BaseExpr) return input;\n if (input === undefined) throw new Error(\"Use null for a SQL NULL value\");\n const name = isObject(input) ? exprNames.find((name) => name in input) : undefined;\n if (name && isObject(input)) {\n checkKeys(input, [name]);\n switch (name) {\n case \"coalesce\":\n return parseCoalesceExpression(input.coalesce);\n case \"nullIf\":\n return parseNullIfExpression(input.nullIf);\n case \"greatest\":\n return parseGreatestExpression(input.greatest);\n case \"least\":\n return parseLeastExpression(input.least);\n default:\n return assertNever(name);\n }\n }\n if (isObject(input) && \"arrayAgg\" in input) {\n checkKeys(input, [\"arrayAgg\"]);\n return parseArrayAggExpression(input.arrayAgg);\n }\n if (isObject(input) && \"case\" in input) {\n checkKeys(input, [\"case\"]);\n return parseCaseExpression(input.case);\n }\n return { kind: \"literal\", value: input };\n}\n\n/** Validates and copies a nonempty operand array, preserving its first element in the parsed type. */\nexport function parseNonEmptyOperands(input: unknown, name: string): [ParsedExpression, ...ParsedExpression[]] {\n if (!Array.isArray(input) || input.length === 0) throw new Error(`${name} needs at least one value`);\n // Validation above guarantees a first operand; keep that guarantee in the parsed type.\n const [first, ...rest] = input;\n return [parseExpression(first), ...rest.map((operand) => parseExpression(operand))];\n}\n\n/** Rejects misspelled or mixed expression keys rather than silently ignoring them. */\nexport function checkKeys(value: object, allowed: string[]): void {\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== \"string\" || !allowed.includes(key)) throw new Error(`Unknown expression key '${String(key)}'`);\n }\n}\n\n/** Narrows expression input objects without treating null as an object. */\nexport function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n"],"mappings":";;;;;;;;;;AAWA,MAAM,YAAY;CAAC;CAAY;CAAU;CAAY;AAAO;;AAG5D,SAAgB,qBAAqB,OAAkC;CACrE,IAAI,CAAC,SAAS,KAAK,KAAM,EAAE,UAAU,UAAU,EAAE,cAAc,UAAU,CAAC,UAAU,MAAM,SAAS,QAAQ,KAAK,GAC9G,MAAM,IAAI,MAAM,kFAAkF;CAEpG,OAAO,gBAAgB,KAAK;AAC9B;;;;;;AAOA,SAAgB,gBAAgB,OAAkC;CAChE,IAAI,iBAAiBA,aAAAA,UAAU,OAAO;CACtC,IAAI,UAAU,KAAA,GAAW,MAAM,IAAI,MAAM,+BAA+B;CACxE,MAAM,OAAO,SAAS,KAAK,IAAI,UAAU,MAAM,SAAS,QAAQ,KAAK,IAAI,KAAA;CACzE,IAAI,QAAQ,SAAS,KAAK,GAAG;EAC3B,UAAU,OAAO,CAAC,IAAI,CAAC;EACvB,QAAQ,MAAR;GACE,KAAK,YACH,OAAOC,6BAAAA,wBAAwB,MAAM,QAAQ;GAC/C,KAAK,UACH,OAAOC,2BAAAA,sBAAsB,MAAM,MAAM;GAC3C,KAAK,YACH,OAAOC,6BAAAA,wBAAwB,MAAM,QAAQ;GAC/C,KAAK,SACH,OAAOC,0BAAAA,qBAAqB,MAAM,KAAK;GACzC,SACE,OAAOC,cAAAA,YAAY,IAAI;EAC3B;CACF;CACA,IAAI,SAAS,KAAK,KAAK,cAAc,OAAO;EAC1C,UAAU,OAAO,CAAC,UAAU,CAAC;EAC7B,OAAOC,6BAAAA,wBAAwB,MAAM,QAAQ;CAC/C;CACA,IAAI,SAAS,KAAK,KAAK,UAAU,OAAO;EACtC,UAAU,OAAO,CAAC,MAAM,CAAC;EACzB,OAAOC,yBAAAA,oBAAoB,MAAM,IAAI;CACvC;CACA,OAAO;EAAE,MAAM;EAAW,OAAO;CAAM;AACzC;;AAGA,SAAgB,sBAAsB,OAAgB,MAAyD;CAC7G,IAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG,MAAM,IAAI,MAAM,GAAG,KAAK,0BAA0B;CAEnG,MAAM,CAAC,OAAO,GAAG,QAAQ;CACzB,OAAO,CAAC,gBAAgB,KAAK,GAAG,GAAG,KAAK,KAAK,YAAY,gBAAgB,OAAO,CAAC,CAAC;AACpF;;AAGA,SAAgB,UAAU,OAAe,SAAyB;CAChE,KAAK,MAAM,OAAO,QAAQ,QAAQ,KAAK,GACrC,IAAI,OAAO,QAAQ,YAAY,CAAC,QAAQ,SAAS,GAAG,GAAG,MAAM,IAAI,MAAM,2BAA2B,OAAO,GAAG,EAAE,EAAE;AAEpH;;AAGA,SAAgB,SAAS,OAAkD;CACzE,OAAO,OAAO,UAAU,YAAY,UAAU;AAChD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseExpression.d.cts","names":[],"sources":["../../src/expressions/parseExpression.ts"],"mappings":";;;iBAcgB,qBAAqB,iBAAiB;;;;;;iBAYtC,gBAAgB,iBAAiB;;iBA+BjC,sBAAsB,gBAAgB,gBAAgB,qBAAqB;;iBAQ3E,UAAU,eAAe;;iBAOzB,SAAS,iBAAiB,SAAS"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseExpression.d.mts","names":[],"sources":["../../src/expressions/parseExpression.ts"],"mappings":";;;iBAcgB,qBAAqB,iBAAiB;;;;;;iBAYtC,gBAAgB,iBAAiB;;iBA+BjC,sBAAsB,gBAAgB,gBAAgB,qBAAqB;;iBAQ3E,UAAU,eAAe;;iBAOzB,SAAS,iBAAiB,SAAS"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseExpression.js","names":[],"sources":["../../src/expressions/parseExpression.ts"],"sourcesContent":["import { BaseExpr } from \"../Expr.ts\";\nimport { assertNever } from \"../utils.ts\";\nimport { parseArrayAggExpression } from \"./arrayAgg.ts\";\nimport { parseCaseExpression } from \"./case.ts\";\nimport { parseCoalesceExpression } from \"./coalesce.ts\";\nimport { parseGreatestExpression } from \"./greatest.ts\";\nimport { parseLeastExpression } from \"./least.ts\";\nimport { parseNullIfExpression } from \"./nullIf.ts\";\nimport type { ExprName, ParsedExpression } from \"./types.ts\";\n\n// These expressions take operand arrays; CASE uses WHEN/THEN entries instead.\nconst exprNames = [\"coalesce\", \"nullIf\", \"greatest\", \"least\"] as const satisfies readonly ExprName[];\n\n/** Requires an expression object at the root before parsing its nested operands. */\nexport function parseExpressionInput(input: unknown): ParsedExpression {\n if (!isObject(input) || (!(\"case\" in input) && !(\"arrayAgg\" in input) && !exprNames.some((name) => name in input))) {\n throw new Error(\"expr expects an object with arrayAgg, case, coalesce, nullIf, greatest, or least\");\n }\n return parseExpression(input);\n}\n\n/**\n * Parses expression inputs into a ParsedExpression, validating their shape and copying operand arrays.\n * Nested expressions stay together so their literals can use a column's codec from another branch.\n * I.e. COALESCE(Book.id, CASE ... THEN \"b:9\" END) must encode \"b:9\" as an integer.\n */\nexport function parseExpression(input: unknown): ParsedExpression {\n if (input instanceof BaseExpr) return input;\n if (input === undefined) throw new Error(\"Use null for a SQL NULL value\");\n const name = isObject(input) ? exprNames.find((name) => name in input) : undefined;\n if (name && isObject(input)) {\n checkKeys(input, [name]);\n switch (name) {\n case \"coalesce\":\n return parseCoalesceExpression(input.coalesce);\n case \"nullIf\":\n return parseNullIfExpression(input.nullIf);\n case \"greatest\":\n return parseGreatestExpression(input.greatest);\n case \"least\":\n return parseLeastExpression(input.least);\n default:\n return assertNever(name);\n }\n }\n if (isObject(input) && \"arrayAgg\" in input) {\n checkKeys(input, [\"arrayAgg\"]);\n return parseArrayAggExpression(input.arrayAgg);\n }\n if (isObject(input) && \"case\" in input) {\n checkKeys(input, [\"case\"]);\n return parseCaseExpression(input.case);\n }\n return { kind: \"literal\", value: input };\n}\n\n/** Validates and copies a nonempty operand array, preserving its first element in the parsed type. */\nexport function parseNonEmptyOperands(input: unknown, name: string): [ParsedExpression, ...ParsedExpression[]] {\n if (!Array.isArray(input) || input.length === 0) throw new Error(`${name} needs at least one value`);\n // Validation above guarantees a first operand; keep that guarantee in the parsed type.\n const [first, ...rest] = input;\n return [parseExpression(first), ...rest.map((operand) => parseExpression(operand))];\n}\n\n/** Rejects misspelled or mixed expression keys rather than silently ignoring them. */\nexport function checkKeys(value: object, allowed: string[]): void {\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== \"string\" || !allowed.includes(key)) throw new Error(`Unknown expression key '${String(key)}'`);\n }\n}\n\n/** Narrows expression input objects without treating null as an object. */\nexport function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n"],"mappings":";;;;;;;;;AAWA,MAAM,YAAY;CAAC;CAAY;CAAU;CAAY;AAAO;;AAG5D,SAAgB,qBAAqB,OAAkC;CACrE,IAAI,CAAC,SAAS,KAAK,KAAM,EAAE,UAAU,UAAU,EAAE,cAAc,UAAU,CAAC,UAAU,MAAM,SAAS,QAAQ,KAAK,GAC9G,MAAM,IAAI,MAAM,kFAAkF;CAEpG,OAAO,gBAAgB,KAAK;AAC9B;;;;;;AAOA,SAAgB,gBAAgB,OAAkC;CAChE,IAAI,iBAAiB,UAAU,OAAO;CACtC,IAAI,UAAU,KAAA,GAAW,MAAM,IAAI,MAAM,+BAA+B;CACxE,MAAM,OAAO,SAAS,KAAK,IAAI,UAAU,MAAM,SAAS,QAAQ,KAAK,IAAI,KAAA;CACzE,IAAI,QAAQ,SAAS,KAAK,GAAG;EAC3B,UAAU,OAAO,CAAC,IAAI,CAAC;EACvB,QAAQ,MAAR;GACE,KAAK,YACH,OAAO,wBAAwB,MAAM,QAAQ;GAC/C,KAAK,UACH,OAAO,sBAAsB,MAAM,MAAM;GAC3C,KAAK,YACH,OAAO,wBAAwB,MAAM,QAAQ;GAC/C,KAAK,SACH,OAAO,qBAAqB,MAAM,KAAK;GACzC,SACE,OAAO,YAAY,IAAI;EAC3B;CACF;CACA,IAAI,SAAS,KAAK,KAAK,cAAc,OAAO;EAC1C,UAAU,OAAO,CAAC,UAAU,CAAC;EAC7B,OAAO,wBAAwB,MAAM,QAAQ;CAC/C;CACA,IAAI,SAAS,KAAK,KAAK,UAAU,OAAO;EACtC,UAAU,OAAO,CAAC,MAAM,CAAC;EACzB,OAAO,oBAAoB,MAAM,IAAI;CACvC;CACA,OAAO;EAAE,MAAM;EAAW,OAAO;CAAM;AACzC;;AAGA,SAAgB,sBAAsB,OAAgB,MAAyD;CAC7G,IAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,GAAG,MAAM,IAAI,MAAM,GAAG,KAAK,0BAA0B;CAEnG,MAAM,CAAC,OAAO,GAAG,QAAQ;CACzB,OAAO,CAAC,gBAAgB,KAAK,GAAG,GAAG,KAAK,KAAK,YAAY,gBAAgB,OAAO,CAAC,CAAC;AACpF;;AAGA,SAAgB,UAAU,OAAe,SAAyB;CAChE,KAAK,MAAM,OAAO,QAAQ,QAAQ,KAAK,GACrC,IAAI,OAAO,QAAQ,YAAY,CAAC,QAAQ,SAAS,GAAG,GAAG,MAAM,IAAI,MAAM,2BAA2B,OAAO,GAAG,EAAE,EAAE;AAEpH;;AAGA,SAAgB,SAAS,OAAkD;CACzE,OAAO,OAAO,UAAU,YAAY,UAAU;AAChD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../src/expressions/types.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.mts","names":[],"sources":["../../src/expressions/types.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"keywords.cjs","names":[],"sources":["../src/keywords.ts"],"sourcesContent":["// select word from pg_get_keywords() where catdesc = 'reserved' order by word;\nconst keywords = [\n \"all\",\n \"alter\",\n \"analyse\",\n \"analyze\",\n \"and\",\n \"any\",\n \"array\",\n \"as\",\n \"asc\",\n \"avg\",\n \"between\",\n \"by\",\n \"asymmetric\",\n \"both\",\n \"case\",\n \"count\",\n \"cast\",\n \"check\",\n \"collate\",\n \"column\",\n \"constraint\",\n \"create\",\n \"delete\",\n \"current_catalog\",\n \"current_date\",\n \"current_role\",\n \"current_time\",\n \"current_timestamp\",\n \"current_user\",\n \"default\",\n \"deferrable\",\n \"desc\",\n \"distinct\",\n \"drop\",\n \"do\",\n \"else\",\n \"end\",\n \"from\",\n \"except\",\n \"false\",\n \"fetch\",\n \"for\",\n \"foreign\",\n \"from\",\n \"grant\",\n \"group\",\n \"having\",\n \"in\",\n \"inner\",\n \"insert\",\n \"initially\",\n \"intersect\",\n \"into\",\n \"is\",\n \"join\",\n \"left\",\n \"like\",\n \"max\",\n \"min\",\n \"lateral\",\n \"leading\",\n \"limit\",\n \"localtime\",\n \"localtimestamp\",\n \"not\",\n \"null\",\n \"offset\",\n \"on\",\n \"only\",\n \"or\",\n \"order\",\n \"outer\",\n \"right\",\n \"placing\",\n \"primary\",\n \"references\",\n \"returning\",\n \"select\",\n \"set\",\n \"sum\",\n \"session_user\",\n \"some\",\n \"symmetric\",\n \"table\",\n \"then\",\n \"to\",\n \"trailing\",\n \"true\",\n \"union\",\n \"update\",\n \"values\",\n \"unique\",\n \"user\",\n \"using\",\n \"variadic\",\n \"when\",\n \"where\",\n \"window\",\n \"with\",\n];\n\n// Cache all keywords => their escaped equivalent\nconst escapeMapped = new Map(keywords.map((k) => [k, `\"${k}\"`]));\nconst allLower = /^[a-z0-9_]+$/;\n\n/** Conditionally quotes `identifier` if it's a SQL keyword or not snake cased; for trusted idents only. */\nexport function kq(ident: string): string {\n // All camel-cased identifiers/column names need to be quoted\n if (!allLower.test(ident)) return `\"${ident}\"`;\n return escapeMapped.get(ident) ?? ident;\n}\n\n/**\n * Quotes a possibly-untrusted identifier, i.e. an em.query select key, subquery `as` name, or\n * `sql.ref` column.\n *\n * `kq`'s inputs are trusted metadata (codegen'd table/column names), and its quoting assumes that;\n * these idents are user strings, so embedded quotes are escaped like PG's own quote_ident, which\n * keeps display-name keys (`select: { \"Book Count\": ... }`) working. Names longer than PG's 63-byte\n * identifier limit are still rejected: PG would silently truncate them and break row decoding.\n */\nexport function safeKq(ident: string): string {\n if (ident.length > 63) throw new Error(`Identifier '${ident}' is longer than PG's 63-byte limit`);\n if (!ident.includes('\"')) return kq(ident);\n return `\"${ident.replaceAll('\"', '\"\"')}\"`;\n}\n\nexport function kqDot(alias: string, column: string): string {\n return `${kq(alias)}.${kq(column)}`;\n}\n\nexport function kqStar(alias: string): string {\n return `${kq(alias)}.*`;\n}\n"],"mappings":";;AAwGA,MAAM,eAAe,IAAI,IAAI;CAtG3B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAIkC,CAAC,CAAC,KAAK,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/D,MAAM,WAAW;;AAGjB,SAAgB,GAAG,OAAuB;CAExC,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO,IAAI,MAAM;CAC5C,OAAO,aAAa,IAAI,KAAK,KAAK;AACpC;;;;;;;;;;AAWA,SAAgB,OAAO,OAAuB;CAC5C,IAAI,MAAM,SAAS,IAAI,MAAM,IAAI,MAAM,eAAe,MAAM,oCAAoC;CAChG,IAAI,CAAC,MAAM,SAAS,IAAG,GAAG,OAAO,GAAG,KAAK;CACzC,OAAO,IAAI,MAAM,WAAW,MAAK,MAAI,EAAE;AACzC;AAEA,SAAgB,MAAM,OAAe,QAAwB;CAC3D,OAAO,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,MAAM;AAClC;AAEA,SAAgB,OAAO,OAAuB;CAC5C,OAAO,GAAG,GAAG,KAAK,EAAE;AACtB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"keywords.d.cts","names":[],"sources":["../src/keywords.ts"],"mappings":";;iBA4GgB,GAAG;;;;;;;;;;iBAeH,OAAO;iBAMP,MAAM,eAAe;iBAIrB,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"keywords.d.mts","names":[],"sources":["../src/keywords.ts"],"mappings":";;iBA4GgB,GAAG;;;;;;;;;;iBAeH,OAAO;iBAMP,MAAM,eAAe;iBAIrB,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"keywords.js","names":[],"sources":["../src/keywords.ts"],"sourcesContent":["// select word from pg_get_keywords() where catdesc = 'reserved' order by word;\nconst keywords = [\n \"all\",\n \"alter\",\n \"analyse\",\n \"analyze\",\n \"and\",\n \"any\",\n \"array\",\n \"as\",\n \"asc\",\n \"avg\",\n \"between\",\n \"by\",\n \"asymmetric\",\n \"both\",\n \"case\",\n \"count\",\n \"cast\",\n \"check\",\n \"collate\",\n \"column\",\n \"constraint\",\n \"create\",\n \"delete\",\n \"current_catalog\",\n \"current_date\",\n \"current_role\",\n \"current_time\",\n \"current_timestamp\",\n \"current_user\",\n \"default\",\n \"deferrable\",\n \"desc\",\n \"distinct\",\n \"drop\",\n \"do\",\n \"else\",\n \"end\",\n \"from\",\n \"except\",\n \"false\",\n \"fetch\",\n \"for\",\n \"foreign\",\n \"from\",\n \"grant\",\n \"group\",\n \"having\",\n \"in\",\n \"inner\",\n \"insert\",\n \"initially\",\n \"intersect\",\n \"into\",\n \"is\",\n \"join\",\n \"left\",\n \"like\",\n \"max\",\n \"min\",\n \"lateral\",\n \"leading\",\n \"limit\",\n \"localtime\",\n \"localtimestamp\",\n \"not\",\n \"null\",\n \"offset\",\n \"on\",\n \"only\",\n \"or\",\n \"order\",\n \"outer\",\n \"right\",\n \"placing\",\n \"primary\",\n \"references\",\n \"returning\",\n \"select\",\n \"set\",\n \"sum\",\n \"session_user\",\n \"some\",\n \"symmetric\",\n \"table\",\n \"then\",\n \"to\",\n \"trailing\",\n \"true\",\n \"union\",\n \"update\",\n \"values\",\n \"unique\",\n \"user\",\n \"using\",\n \"variadic\",\n \"when\",\n \"where\",\n \"window\",\n \"with\",\n];\n\n// Cache all keywords => their escaped equivalent\nconst escapeMapped = new Map(keywords.map((k) => [k, `\"${k}\"`]));\nconst allLower = /^[a-z0-9_]+$/;\n\n/** Conditionally quotes `identifier` if it's a SQL keyword or not snake cased; for trusted idents only. */\nexport function kq(ident: string): string {\n // All camel-cased identifiers/column names need to be quoted\n if (!allLower.test(ident)) return `\"${ident}\"`;\n return escapeMapped.get(ident) ?? ident;\n}\n\n/**\n * Quotes a possibly-untrusted identifier, i.e. an em.query select key, subquery `as` name, or\n * `sql.ref` column.\n *\n * `kq`'s inputs are trusted metadata (codegen'd table/column names), and its quoting assumes that;\n * these idents are user strings, so embedded quotes are escaped like PG's own quote_ident, which\n * keeps display-name keys (`select: { \"Book Count\": ... }`) working. Names longer than PG's 63-byte\n * identifier limit are still rejected: PG would silently truncate them and break row decoding.\n */\nexport function safeKq(ident: string): string {\n if (ident.length > 63) throw new Error(`Identifier '${ident}' is longer than PG's 63-byte limit`);\n if (!ident.includes('\"')) return kq(ident);\n return `\"${ident.replaceAll('\"', '\"\"')}\"`;\n}\n\nexport function kqDot(alias: string, column: string): string {\n return `${kq(alias)}.${kq(column)}`;\n}\n\nexport function kqStar(alias: string): string {\n return `${kq(alias)}.*`;\n}\n"],"mappings":";AAwGA,MAAM,eAAe,IAAI,IAAI;CAtG3B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAIkC,CAAC,CAAC,KAAK,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/D,MAAM,WAAW;;AAGjB,SAAgB,GAAG,OAAuB;CAExC,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO,IAAI,MAAM;CAC5C,OAAO,aAAa,IAAI,KAAK,KAAK;AACpC;;;;;;;;;;AAWA,SAAgB,OAAO,OAAuB;CAC5C,IAAI,MAAM,SAAS,IAAI,MAAM,IAAI,MAAM,eAAe,MAAM,oCAAoC;CAChG,IAAI,CAAC,MAAM,SAAS,IAAG,GAAG,OAAO,GAAG,KAAK;CACzC,OAAO,IAAI,MAAM,WAAW,MAAK,MAAI,EAAE;AACzC;AAEA,SAAgB,MAAM,OAAe,QAAwB;CAC3D,OAAO,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,MAAM;AAClC;AAEA,SAAgB,OAAO,OAAuB;CAC5C,OAAO,GAAG,GAAG,KAAK,EAAE;AACtB"}