fhirpath-ts 0.0.0-bootstrap.0

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 (414) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +391 -0
  3. package/THIRD-PARTY-NOTICES.md +296 -0
  4. package/dist/analyzer/analyze-dto.d.ts +45 -0
  5. package/dist/analyzer/analyze-dto.d.ts.map +1 -0
  6. package/dist/analyzer/analyze-dto.js +147 -0
  7. package/dist/analyzer/analyze-dto.js.map +1 -0
  8. package/dist/analyzer/analyze.d.ts +98 -0
  9. package/dist/analyzer/analyze.d.ts.map +1 -0
  10. package/dist/analyzer/analyze.js +925 -0
  11. package/dist/analyzer/analyze.js.map +1 -0
  12. package/dist/analyzer/expression-policy.d.ts +210 -0
  13. package/dist/analyzer/expression-policy.d.ts.map +1 -0
  14. package/dist/analyzer/expression-policy.js +254 -0
  15. package/dist/analyzer/expression-policy.js.map +1 -0
  16. package/dist/analyzer/index.d.ts +3 -0
  17. package/dist/analyzer/index.d.ts.map +1 -0
  18. package/dist/analyzer/index.js +6 -0
  19. package/dist/analyzer/index.js.map +1 -0
  20. package/dist/analyzer/regex-safety.d.ts +10 -0
  21. package/dist/analyzer/regex-safety.d.ts.map +1 -0
  22. package/dist/analyzer/regex-safety.js +84 -0
  23. package/dist/analyzer/regex-safety.js.map +1 -0
  24. package/dist/analyzer/signatures.d.ts +72 -0
  25. package/dist/analyzer/signatures.d.ts.map +1 -0
  26. package/dist/analyzer/signatures.js +195 -0
  27. package/dist/analyzer/signatures.js.map +1 -0
  28. package/dist/api/bundle.d.ts +29 -0
  29. package/dist/api/bundle.d.ts.map +1 -0
  30. package/dist/api/bundle.js +108 -0
  31. package/dist/api/bundle.js.map +1 -0
  32. package/dist/api/cache.d.ts +10 -0
  33. package/dist/api/cache.d.ts.map +1 -0
  34. package/dist/api/cache.js +38 -0
  35. package/dist/api/cache.js.map +1 -0
  36. package/dist/api/column-signature.d.ts +53 -0
  37. package/dist/api/column-signature.d.ts.map +1 -0
  38. package/dist/api/column-signature.js +43 -0
  39. package/dist/api/column-signature.js.map +1 -0
  40. package/dist/api/compile.d.ts +120 -0
  41. package/dist/api/compile.d.ts.map +1 -0
  42. package/dist/api/compile.js +167 -0
  43. package/dist/api/compile.js.map +1 -0
  44. package/dist/api/constraints.d.ts +48 -0
  45. package/dist/api/constraints.d.ts.map +1 -0
  46. package/dist/api/constraints.js +52 -0
  47. package/dist/api/constraints.js.map +1 -0
  48. package/dist/api/dto.d.ts +134 -0
  49. package/dist/api/dto.d.ts.map +1 -0
  50. package/dist/api/dto.js +295 -0
  51. package/dist/api/dto.js.map +1 -0
  52. package/dist/api/engine.d.ts +136 -0
  53. package/dist/api/engine.d.ts.map +1 -0
  54. package/dist/api/engine.js +183 -0
  55. package/dist/api/engine.js.map +1 -0
  56. package/dist/api/evaluate.d.ts +7 -0
  57. package/dist/api/evaluate.d.ts.map +1 -0
  58. package/dist/api/evaluate.js +10 -0
  59. package/dist/api/evaluate.js.map +1 -0
  60. package/dist/api/project.d.ts +89 -0
  61. package/dist/api/project.d.ts.map +1 -0
  62. package/dist/api/project.js +150 -0
  63. package/dist/api/project.js.map +1 -0
  64. package/dist/api/tagged.d.ts +14 -0
  65. package/dist/api/tagged.d.ts.map +1 -0
  66. package/dist/api/tagged.js +13 -0
  67. package/dist/api/tagged.js.map +1 -0
  68. package/dist/cli/dto-check.d.ts +25 -0
  69. package/dist/cli/dto-check.d.ts.map +1 -0
  70. package/dist/cli/dto-check.js +77 -0
  71. package/dist/cli/dto-check.js.map +1 -0
  72. package/dist/cli/fhirpath-check.d.ts +3 -0
  73. package/dist/cli/fhirpath-check.d.ts.map +1 -0
  74. package/dist/cli/fhirpath-check.js +149 -0
  75. package/dist/cli/fhirpath-check.js.map +1 -0
  76. package/dist/cli/ts-loader.d.mts +3 -0
  77. package/dist/cli/ts-loader.d.mts.map +1 -0
  78. package/dist/cli/ts-loader.mjs +48 -0
  79. package/dist/cli/ts-loader.mjs.map +1 -0
  80. package/dist/engine/context.d.ts +173 -0
  81. package/dist/engine/context.d.ts.map +1 -0
  82. package/dist/engine/context.js +118 -0
  83. package/dist/engine/context.js.map +1 -0
  84. package/dist/engine/evaluator.d.ts +7 -0
  85. package/dist/engine/evaluator.d.ts.map +1 -0
  86. package/dist/engine/evaluator.js +196 -0
  87. package/dist/engine/evaluator.js.map +1 -0
  88. package/dist/engine/navigation.d.ts +11 -0
  89. package/dist/engine/navigation.d.ts.map +1 -0
  90. package/dist/engine/navigation.js +102 -0
  91. package/dist/engine/navigation.js.map +1 -0
  92. package/dist/engine/operators/collections.d.ts +12 -0
  93. package/dist/engine/operators/collections.d.ts.map +1 -0
  94. package/dist/engine/operators/collections.js +31 -0
  95. package/dist/engine/operators/collections.js.map +1 -0
  96. package/dist/engine/operators/comparison.d.ts +13 -0
  97. package/dist/engine/operators/comparison.d.ts.map +1 -0
  98. package/dist/engine/operators/comparison.js +77 -0
  99. package/dist/engine/operators/comparison.js.map +1 -0
  100. package/dist/engine/operators/equality.d.ts +19 -0
  101. package/dist/engine/operators/equality.d.ts.map +1 -0
  102. package/dist/engine/operators/equality.js +203 -0
  103. package/dist/engine/operators/equality.js.map +1 -0
  104. package/dist/engine/operators/index.d.ts +18 -0
  105. package/dist/engine/operators/index.d.ts.map +1 -0
  106. package/dist/engine/operators/index.js +30 -0
  107. package/dist/engine/operators/index.js.map +1 -0
  108. package/dist/engine/operators/logic.d.ts +8 -0
  109. package/dist/engine/operators/logic.d.ts.map +1 -0
  110. package/dist/engine/operators/logic.js +38 -0
  111. package/dist/engine/operators/logic.js.map +1 -0
  112. package/dist/engine/operators/math.d.ts +13 -0
  113. package/dist/engine/operators/math.d.ts.map +1 -0
  114. package/dist/engine/operators/math.js +198 -0
  115. package/dist/engine/operators/math.js.map +1 -0
  116. package/dist/engine/operators/strings.d.ts +8 -0
  117. package/dist/engine/operators/strings.d.ts.map +1 -0
  118. package/dist/engine/operators/strings.js +22 -0
  119. package/dist/engine/operators/strings.js.map +1 -0
  120. package/dist/engine/operators/types.d.ts +3 -0
  121. package/dist/engine/operators/types.d.ts.map +1 -0
  122. package/dist/engine/operators/types.js +15 -0
  123. package/dist/engine/operators/types.js.map +1 -0
  124. package/dist/engine/type-matching.d.ts +20 -0
  125. package/dist/engine/type-matching.d.ts.map +1 -0
  126. package/dist/engine/type-matching.js +122 -0
  127. package/dist/engine/type-matching.js.map +1 -0
  128. package/dist/errors.d.ts +25 -0
  129. package/dist/errors.d.ts.map +1 -0
  130. package/dist/errors.js +21 -0
  131. package/dist/errors.js.map +1 -0
  132. package/dist/eslint/index.d.ts +12 -0
  133. package/dist/eslint/index.d.ts.map +1 -0
  134. package/dist/eslint/index.js +316 -0
  135. package/dist/eslint/index.js.map +1 -0
  136. package/dist/fhir/html-checks.d.ts +7 -0
  137. package/dist/fhir/html-checks.d.ts.map +1 -0
  138. package/dist/fhir/html-checks.js +256 -0
  139. package/dist/fhir/html-checks.js.map +1 -0
  140. package/dist/fhir/model-navigation.d.ts +11 -0
  141. package/dist/fhir/model-navigation.d.ts.map +1 -0
  142. package/dist/fhir/model-navigation.js +142 -0
  143. package/dist/fhir/model-navigation.js.map +1 -0
  144. package/dist/functions/aggregate.d.ts +2 -0
  145. package/dist/functions/aggregate.d.ts.map +1 -0
  146. package/dist/functions/aggregate.js +127 -0
  147. package/dist/functions/aggregate.js.map +1 -0
  148. package/dist/functions/boundary.d.ts +2 -0
  149. package/dist/functions/boundary.d.ts.map +1 -0
  150. package/dist/functions/boundary.js +189 -0
  151. package/dist/functions/boundary.js.map +1 -0
  152. package/dist/functions/combining.d.ts +2 -0
  153. package/dist/functions/combining.d.ts.map +1 -0
  154. package/dist/functions/combining.js +13 -0
  155. package/dist/functions/combining.js.map +1 -0
  156. package/dist/functions/control.d.ts +2 -0
  157. package/dist/functions/control.d.ts.map +1 -0
  158. package/dist/functions/control.js +25 -0
  159. package/dist/functions/control.js.map +1 -0
  160. package/dist/functions/conversion.d.ts +3 -0
  161. package/dist/functions/conversion.d.ts.map +1 -0
  162. package/dist/functions/conversion.js +316 -0
  163. package/dist/functions/conversion.js.map +1 -0
  164. package/dist/functions/date-components.d.ts +2 -0
  165. package/dist/functions/date-components.d.ts.map +1 -0
  166. package/dist/functions/date-components.js +81 -0
  167. package/dist/functions/date-components.js.map +1 -0
  168. package/dist/functions/existence.d.ts +4 -0
  169. package/dist/functions/existence.d.ts.map +1 -0
  170. package/dist/functions/existence.js +97 -0
  171. package/dist/functions/existence.js.map +1 -0
  172. package/dist/functions/fhir.d.ts +2 -0
  173. package/dist/functions/fhir.d.ts.map +1 -0
  174. package/dist/functions/fhir.js +222 -0
  175. package/dist/functions/fhir.js.map +1 -0
  176. package/dist/functions/filtering.d.ts +2 -0
  177. package/dist/functions/filtering.d.ts.map +1 -0
  178. package/dist/functions/filtering.js +112 -0
  179. package/dist/functions/filtering.js.map +1 -0
  180. package/dist/functions/install.d.ts +18 -0
  181. package/dist/functions/install.d.ts.map +1 -0
  182. package/dist/functions/install.js +20 -0
  183. package/dist/functions/install.js.map +1 -0
  184. package/dist/functions/iteration.d.ts +7 -0
  185. package/dist/functions/iteration.d.ts.map +1 -0
  186. package/dist/functions/iteration.js +9 -0
  187. package/dist/functions/iteration.js.map +1 -0
  188. package/dist/functions/math.d.ts +2 -0
  189. package/dist/functions/math.d.ts.map +1 -0
  190. package/dist/functions/math.js +152 -0
  191. package/dist/functions/math.js.map +1 -0
  192. package/dist/functions/reflection.d.ts +2 -0
  193. package/dist/functions/reflection.d.ts.map +1 -0
  194. package/dist/functions/reflection.js +23 -0
  195. package/dist/functions/reflection.js.map +1 -0
  196. package/dist/functions/registry.d.ts +28 -0
  197. package/dist/functions/registry.d.ts.map +1 -0
  198. package/dist/functions/registry.js +46 -0
  199. package/dist/functions/registry.js.map +1 -0
  200. package/dist/functions/sort.d.ts +2 -0
  201. package/dist/functions/sort.d.ts.map +1 -0
  202. package/dist/functions/sort.js +48 -0
  203. package/dist/functions/sort.js.map +1 -0
  204. package/dist/functions/string.d.ts +2 -0
  205. package/dist/functions/string.d.ts.map +1 -0
  206. package/dist/functions/string.js +353 -0
  207. package/dist/functions/string.js.map +1 -0
  208. package/dist/functions/subsetting.d.ts +2 -0
  209. package/dist/functions/subsetting.d.ts.map +1 -0
  210. package/dist/functions/subsetting.js +72 -0
  211. package/dist/functions/subsetting.js.map +1 -0
  212. package/dist/functions/tree.d.ts +8 -0
  213. package/dist/functions/tree.d.ts.map +1 -0
  214. package/dist/functions/tree.js +109 -0
  215. package/dist/functions/tree.js.map +1 -0
  216. package/dist/functions/type-specifier.d.ts +8 -0
  217. package/dist/functions/type-specifier.d.ts.map +1 -0
  218. package/dist/functions/type-specifier.js +27 -0
  219. package/dist/functions/type-specifier.js.map +1 -0
  220. package/dist/functions/utility.d.ts +2 -0
  221. package/dist/functions/utility.d.ts.map +1 -0
  222. package/dist/functions/utility.js +76 -0
  223. package/dist/functions/utility.js.map +1 -0
  224. package/dist/functions/variables.d.ts +2 -0
  225. package/dist/functions/variables.d.ts.map +1 -0
  226. package/dist/functions/variables.js +35 -0
  227. package/dist/functions/variables.js.map +1 -0
  228. package/dist/index.d.ts +25 -0
  229. package/dist/index.d.ts.map +1 -0
  230. package/dist/index.js +11 -0
  231. package/dist/index.js.map +1 -0
  232. package/dist/lexer/lexer.d.ts +4 -0
  233. package/dist/lexer/lexer.d.ts.map +1 -0
  234. package/dist/lexer/lexer.js +318 -0
  235. package/dist/lexer/lexer.js.map +1 -0
  236. package/dist/lexer/tokens.d.ts +23 -0
  237. package/dist/lexer/tokens.d.ts.map +1 -0
  238. package/dist/lexer/tokens.js +40 -0
  239. package/dist/lexer/tokens.js.map +1 -0
  240. package/dist/model/provider.d.ts +36 -0
  241. package/dist/model/provider.d.ts.map +1 -0
  242. package/dist/model/provider.js +2 -0
  243. package/dist/model/provider.js.map +1 -0
  244. package/dist/parser/ast.d.ts +104 -0
  245. package/dist/parser/ast.d.ts.map +1 -0
  246. package/dist/parser/ast.js +2 -0
  247. package/dist/parser/ast.js.map +1 -0
  248. package/dist/parser/parser.d.ts +4 -0
  249. package/dist/parser/parser.d.ts.map +1 -0
  250. package/dist/parser/parser.js +299 -0
  251. package/dist/parser/parser.js.map +1 -0
  252. package/dist/parser/precedence.d.ts +24 -0
  253. package/dist/parser/precedence.d.ts.map +1 -0
  254. package/dist/parser/precedence.js +52 -0
  255. package/dist/parser/precedence.js.map +1 -0
  256. package/dist/parser/printer.d.ts +4 -0
  257. package/dist/parser/printer.d.ts.map +1 -0
  258. package/dist/parser/printer.js +112 -0
  259. package/dist/parser/printer.js.map +1 -0
  260. package/dist/r4/generated/resources-data.d.ts +3 -0
  261. package/dist/r4/generated/resources-data.d.ts.map +1 -0
  262. package/dist/r4/generated/resources-data.js +28628 -0
  263. package/dist/r4/generated/resources-data.js.map +1 -0
  264. package/dist/r4/generated/type-maps.d.ts +43153 -0
  265. package/dist/r4/generated/type-maps.d.ts.map +1 -0
  266. package/dist/r4/generated/type-maps.js +4 -0
  267. package/dist/r4/generated/type-maps.js.map +1 -0
  268. package/dist/r4/generated/types-data.d.ts +3 -0
  269. package/dist/r4/generated/types-data.d.ts.map +1 -0
  270. package/dist/r4/generated/types-data.js +2205 -0
  271. package/dist/r4/generated/types-data.js.map +1 -0
  272. package/dist/r4/index.d.ts +9 -0
  273. package/dist/r4/index.d.ts.map +1 -0
  274. package/dist/r4/index.js +94 -0
  275. package/dist/r4/index.js.map +1 -0
  276. package/dist/r4/model-data.d.ts +17 -0
  277. package/dist/r4/model-data.d.ts.map +1 -0
  278. package/dist/r4/model-data.js +2 -0
  279. package/dist/r4/model-data.js.map +1 -0
  280. package/dist/sites/index.d.ts +31 -0
  281. package/dist/sites/index.d.ts.map +1 -0
  282. package/dist/sites/index.js +205 -0
  283. package/dist/sites/index.js.map +1 -0
  284. package/dist/typed/infer.d.ts +234 -0
  285. package/dist/typed/infer.d.ts.map +1 -0
  286. package/dist/typed/infer.js +85 -0
  287. package/dist/typed/infer.js.map +1 -0
  288. package/dist/typed/perf-fixture.types.d.ts +136 -0
  289. package/dist/typed/perf-fixture.types.d.ts.map +1 -0
  290. package/dist/typed/perf-fixture.types.js +2 -0
  291. package/dist/typed/perf-fixture.types.js.map +1 -0
  292. package/dist/values/collection.d.ts +24 -0
  293. package/dist/values/collection.d.ts.map +1 -0
  294. package/dist/values/collection.js +51 -0
  295. package/dist/values/collection.js.map +1 -0
  296. package/dist/values/datetime.d.ts +54 -0
  297. package/dist/values/datetime.d.ts.map +1 -0
  298. package/dist/values/datetime.js +226 -0
  299. package/dist/values/datetime.js.map +1 -0
  300. package/dist/values/decimal.d.ts +48 -0
  301. package/dist/values/decimal.d.ts.map +1 -0
  302. package/dist/values/decimal.js +188 -0
  303. package/dist/values/decimal.js.map +1 -0
  304. package/dist/values/numeric.d.ts +24 -0
  305. package/dist/values/numeric.d.ts.map +1 -0
  306. package/dist/values/numeric.js +53 -0
  307. package/dist/values/numeric.js.map +1 -0
  308. package/dist/values/quantity.d.ts +49 -0
  309. package/dist/values/quantity.d.ts.map +1 -0
  310. package/dist/values/quantity.js +297 -0
  311. package/dist/values/quantity.js.map +1 -0
  312. package/dist/values/temporal-arithmetic.d.ts +17 -0
  313. package/dist/values/temporal-arithmetic.d.ts.map +1 -0
  314. package/dist/values/temporal-arithmetic.js +183 -0
  315. package/dist/values/temporal-arithmetic.js.map +1 -0
  316. package/dist/values/temporal-compare.d.ts +9 -0
  317. package/dist/values/temporal-compare.d.ts.map +1 -0
  318. package/dist/values/temporal-compare.js +59 -0
  319. package/dist/values/temporal-compare.js.map +1 -0
  320. package/dist/values/type-compat.d.ts +47 -0
  321. package/dist/values/type-compat.d.ts.map +1 -0
  322. package/dist/values/type-compat.js +100 -0
  323. package/dist/values/type-compat.js.map +1 -0
  324. package/dist/values/typed-value.d.ts +48 -0
  325. package/dist/values/typed-value.d.ts.map +1 -0
  326. package/dist/values/typed-value.js +117 -0
  327. package/dist/values/typed-value.js.map +1 -0
  328. package/dist/values/ucum.d.ts +14 -0
  329. package/dist/values/ucum.d.ts.map +1 -0
  330. package/dist/values/ucum.js +146 -0
  331. package/dist/values/ucum.js.map +1 -0
  332. package/package.json +137 -0
  333. package/src/analyzer/analyze-dto.ts +195 -0
  334. package/src/analyzer/analyze.ts +1181 -0
  335. package/src/analyzer/expression-policy.ts +434 -0
  336. package/src/analyzer/index.ts +23 -0
  337. package/src/analyzer/regex-safety.ts +85 -0
  338. package/src/analyzer/signatures.ts +260 -0
  339. package/src/api/bundle.ts +132 -0
  340. package/src/api/cache.ts +40 -0
  341. package/src/api/column-signature.ts +71 -0
  342. package/src/api/compile.ts +308 -0
  343. package/src/api/constraints.ts +104 -0
  344. package/src/api/dto.ts +445 -0
  345. package/src/api/engine.ts +328 -0
  346. package/src/api/evaluate.ts +11 -0
  347. package/src/api/project.ts +255 -0
  348. package/src/api/tagged.ts +35 -0
  349. package/src/cli/dto-check.ts +94 -0
  350. package/src/cli/fhirpath-check.ts +168 -0
  351. package/src/cli/ts-loader.mjs +49 -0
  352. package/src/engine/context.ts +282 -0
  353. package/src/engine/evaluator.ts +246 -0
  354. package/src/engine/navigation.ts +106 -0
  355. package/src/engine/operators/collections.ts +34 -0
  356. package/src/engine/operators/comparison.ts +82 -0
  357. package/src/engine/operators/equality.ts +232 -0
  358. package/src/engine/operators/index.ts +65 -0
  359. package/src/engine/operators/logic.ts +53 -0
  360. package/src/engine/operators/math.ts +225 -0
  361. package/src/engine/operators/strings.ts +25 -0
  362. package/src/engine/operators/types.ts +16 -0
  363. package/src/engine/type-matching.ts +148 -0
  364. package/src/errors.ts +33 -0
  365. package/src/eslint/index.ts +388 -0
  366. package/src/fhir/html-checks.ts +266 -0
  367. package/src/fhir/model-navigation.ts +148 -0
  368. package/src/functions/aggregate.ts +136 -0
  369. package/src/functions/boundary.ts +209 -0
  370. package/src/functions/combining.ts +15 -0
  371. package/src/functions/control.ts +25 -0
  372. package/src/functions/conversion.ts +349 -0
  373. package/src/functions/date-components.ts +88 -0
  374. package/src/functions/existence.ts +107 -0
  375. package/src/functions/fhir.ts +247 -0
  376. package/src/functions/filtering.ts +120 -0
  377. package/src/functions/install.ts +19 -0
  378. package/src/functions/iteration.ts +21 -0
  379. package/src/functions/math.ts +167 -0
  380. package/src/functions/reflection.ts +24 -0
  381. package/src/functions/registry.ts +72 -0
  382. package/src/functions/sort.ts +68 -0
  383. package/src/functions/string.ts +413 -0
  384. package/src/functions/subsetting.ts +89 -0
  385. package/src/functions/tree.ts +112 -0
  386. package/src/functions/type-specifier.ts +29 -0
  387. package/src/functions/utility.ts +82 -0
  388. package/src/functions/variables.ts +36 -0
  389. package/src/index.ts +30 -0
  390. package/src/lexer/lexer.ts +341 -0
  391. package/src/lexer/tokens.ts +69 -0
  392. package/src/model/provider.ts +36 -0
  393. package/src/parser/ast.ts +164 -0
  394. package/src/parser/parser.ts +321 -0
  395. package/src/parser/precedence.ts +52 -0
  396. package/src/parser/printer.ts +114 -0
  397. package/src/r4/generated/resources-data.ts +28631 -0
  398. package/src/r4/generated/type-maps.ts +22145 -0
  399. package/src/r4/generated/types-data.ts +2208 -0
  400. package/src/r4/index.ts +107 -0
  401. package/src/r4/model-data.ts +17 -0
  402. package/src/sites/index.ts +285 -0
  403. package/src/typed/infer.ts +433 -0
  404. package/src/typed/perf-fixture.types.ts +143 -0
  405. package/src/values/collection.ts +57 -0
  406. package/src/values/datetime.ts +285 -0
  407. package/src/values/decimal.ts +213 -0
  408. package/src/values/numeric.ts +63 -0
  409. package/src/values/quantity.ts +358 -0
  410. package/src/values/temporal-arithmetic.ts +231 -0
  411. package/src/values/temporal-compare.ts +65 -0
  412. package/src/values/type-compat.ts +133 -0
  413. package/src/values/typed-value.ts +151 -0
  414. package/src/values/ucum.ts +181 -0
@@ -0,0 +1,183 @@
1
+ import { mergeEnvKeys } from "../engine/context.js";
2
+ import { criteriaBoolean } from "../values/collection.js";
3
+ import { isBundle, normalizeInput, toSubjects } from "./bundle.js";
4
+ import { CompiledExpression, createCachedCompiler, } from "./compile.js";
5
+ import { evaluateConstraints } from "./constraints.js";
6
+ import { assertInputMatchesDto, dtoCallOptions, dtoDefinition, withDtos } from "./dto.js";
7
+ import { projectRows } from "./project.js";
8
+ /** Engines created during the current recording session. */
9
+ let session;
10
+ /**
11
+ * Records engines created while project modules are imported. Call the returned
12
+ * function to close the session and read its engines. Only one session is active
13
+ * at a time, and closing it releases the recorded engine references.
14
+ */
15
+ export function recordEngines() {
16
+ const open = [];
17
+ session = open;
18
+ return () => {
19
+ if (session === open) {
20
+ session = undefined;
21
+ }
22
+ return open;
23
+ };
24
+ }
25
+ function recordEngine(engine) {
26
+ session?.push(engine);
27
+ }
28
+ /**
29
+ * A FHIRPath engine with shared model and evaluation defaults. Per-call values
30
+ * replace defaults, while `env`, `vars`, and `functions` merge by name. Keep an
31
+ * engine for reuse because its parse cache is private to that instance.
32
+ */
33
+ export class FhirPathEngine {
34
+ /** The per-call options bound at construction; engine-only settings are not part of them. */
35
+ defaults;
36
+ /**
37
+ * The DTO classes registered at construction (EngineOptions.resourceDtos), in
38
+ * order. Kept so tooling can check them against this engine's own model,
39
+ * functions and env — see `analyzeEngineDtos` in `fhirpath-ts/analyzer`.
40
+ */
41
+ dtos;
42
+ compileCached;
43
+ constructor({ cacheSize, resourceDtos, ...defaults } = {}) {
44
+ this.compileCached = createCachedCompiler(cacheSize);
45
+ this.dtos = resourceDtos ?? [];
46
+ this.defaults = this.precompiled(withDtos(defaults, this.dtos, this.compileCached));
47
+ recordEngine(this);
48
+ }
49
+ evaluate(expression, input, options) {
50
+ const compiled = this.compileCached(expression);
51
+ const merged = this.merged(options);
52
+ return compiled.evaluate(normalizeInput(input, compiled.ast, merged.model), merged);
53
+ }
54
+ /** Like `evaluate()`, keeping the internal typed representation (types, Decimal, Temporal). */
55
+ evaluateTyped(expression, input, options) {
56
+ const compiled = this.compileCached(expression);
57
+ const merged = this.merged(options);
58
+ return compiled.evaluateTyped(normalizeInput(input, compiled.ast, merged.model), merged);
59
+ }
60
+ /** Parse once for reuse, with this engine's defaults bound. Does not touch the parse cache. */
61
+ compile(expression) {
62
+ return new BoundExpression(this, new CompiledExpression(expression));
63
+ }
64
+ first(expression, input, options) {
65
+ return this.evaluate(expression, input, options)[0];
66
+ }
67
+ /**
68
+ * Boolean criteria evaluation, the semantics FHIR invariants, Subscription
69
+ * criteria, and `enableWhen` share. A single boolean returns itself, a single
70
+ * non-boolean item returns true, and more than one item is an error, which is
71
+ * spec §4.5 singleton evaluation. Empty returns false, which is the criteria
72
+ * convention layered on top of it; see `criteriaBoolean`.
73
+ */
74
+ test(input, expression, options) {
75
+ return criteriaBoolean(this.evaluateTyped(expression, input, options));
76
+ }
77
+ filter(input, expression, options) {
78
+ const compiled = this.compileCached(expression);
79
+ const merged = this.merged(options);
80
+ return toSubjects(input)
81
+ .map(subject => subject.value)
82
+ .filter(value => criteriaBoolean(compiled.evaluateTyped(value, merged)));
83
+ }
84
+ project(input, columns, options) {
85
+ if (typeof columns === 'function') {
86
+ assertInputMatchesDto(input, columns);
87
+ }
88
+ const rows = typeof columns === 'function'
89
+ ? projectRows(input, dtoDefinition(columns).columns, this.merged(dtoCallOptions(columns, options)), this.compileCached)
90
+ // Materialize each row as a class instance, so the DTO's own methods
91
+ // and getters see the projected values.
92
+ .map(row => Object.assign(new columns(), row))
93
+ : projectRows(input, columns, this.merged(options), this.compileCached);
94
+ return Array.isArray(input) || isBundle(input) ? rows : rows[0];
95
+ }
96
+ /**
97
+ * Evaluates FHIR constraint expressions. Arrays and Bundles add the resource
98
+ * index to each issue. Expression errors become failed issues. This is not full
99
+ * profile validation.
100
+ */
101
+ checkConstraints(input, constraints, options) {
102
+ return evaluateConstraints(input, constraints, this.merged(options), this.compileCached);
103
+ }
104
+ /**
105
+ * Replaces scalar defaults and merges `env`, `vars`, and `functions` by name.
106
+ * Per-call entries win. Environment keys are normalized with or without `%`.
107
+ */
108
+ merged(options) {
109
+ if (!options) {
110
+ return this.defaults;
111
+ }
112
+ const precompiled = this.precompiled(options);
113
+ const merged = { ...this.defaults, ...precompiled };
114
+ if (this.defaults.env && precompiled.env) {
115
+ merged.env = mergeEnvKeys(this.defaults.env, precompiled.env);
116
+ }
117
+ if (this.defaults.vars && precompiled.vars) {
118
+ merged.vars = mergeEnvKeys(this.defaults.vars, precompiled.vars);
119
+ }
120
+ if (this.defaults.functions && precompiled.functions) {
121
+ merged.functions = { ...this.defaults.functions, ...precompiled.functions };
122
+ }
123
+ return merged;
124
+ }
125
+ /**
126
+ * `vars` expressions and expression-function bodies given as strings parse
127
+ * through this engine's LRU here, once per call at most — so per-row
128
+ * evaluation inside project() never re-parses them.
129
+ */
130
+ precompiled(options) {
131
+ const out = { ...options };
132
+ if (options.vars) {
133
+ out.vars = Object.fromEntries(Object.entries(options.vars).map(([name, value]) => [
134
+ name,
135
+ typeof value === 'string' ? this.compileCached(value) : value,
136
+ ]));
137
+ }
138
+ if (options.functions) {
139
+ out.functions = Object.fromEntries(Object.entries(options.functions).map(([name, fn]) => [name, this.precompiledFunction(fn)]));
140
+ }
141
+ return out;
142
+ }
143
+ /** One entry of `functions`, with any string body parsed — reaching into an overload set for each member. */
144
+ precompiledFunction(fn) {
145
+ return 'overloads' in fn
146
+ ? { overloads: fn.overloads.map(overload => this.precompiledBody(overload)) }
147
+ : this.precompiledBody(fn);
148
+ }
149
+ precompiledBody(fn) {
150
+ return 'expression' in fn && typeof fn.expression === 'string'
151
+ ? { ...fn, expression: this.compileCached(fn.expression) }
152
+ : fn;
153
+ }
154
+ }
155
+ /** A compiled expression carrying an engine's defaults, so `evaluate(input)` needs nothing else. */
156
+ export class BoundExpression {
157
+ expression;
158
+ engine;
159
+ constructor(engine, expression) {
160
+ this.engine = engine;
161
+ this.expression = expression;
162
+ }
163
+ get source() {
164
+ return this.expression.source;
165
+ }
166
+ evaluate(input, options) {
167
+ return this.engine.evaluate(this.expression, input, options);
168
+ }
169
+ evaluateTyped(input, options) {
170
+ return this.engine.evaluateTyped(this.expression, input, options);
171
+ }
172
+ first(input, options) {
173
+ return this.engine.first(this.expression, input, options);
174
+ }
175
+ test(input, options) {
176
+ return this.engine.test(input, this.expression, options);
177
+ }
178
+ /** The canonical form of the expression. */
179
+ toString() {
180
+ return this.expression.toString();
181
+ }
182
+ }
183
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/api/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type AnyExpression, type EvaluateOptions } from './compile.ts';
2
+ /**
3
+ * Evaluate a FHIRPath expression against an input and return plain JS values.
4
+ * Parsed expressions are kept in a module-level LRU keyed by the expression text.
5
+ */
6
+ export declare function evaluate(expression: AnyExpression, input?: unknown, options?: EvaluateOptions): unknown[];
7
+ //# sourceMappingURL=evaluate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/api/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAwB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAI7F;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,EAAE,CAEzG"}
@@ -0,0 +1,10 @@
1
+ import { createCachedCompiler } from "./compile.js";
2
+ const compileCached = createCachedCompiler();
3
+ /**
4
+ * Evaluate a FHIRPath expression against an input and return plain JS values.
5
+ * Parsed expressions are kept in a module-level LRU keyed by the expression text.
6
+ */
7
+ export function evaluate(expression, input, options) {
8
+ return compileCached(expression).evaluate(input, options);
9
+ }
10
+ //# sourceMappingURL=evaluate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/api/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,oBAAoB,EAAwB,MAAM,cAAc,CAAA;AAE7F,MAAM,aAAa,GAAG,oBAAoB,EAAE,CAAA;AAE5C;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,UAAyB,EAAE,KAAe,EAAE,OAAyB;IAC5F,OAAO,aAAa,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC3D,CAAC"}
@@ -0,0 +1,89 @@
1
+ import type { R4TypeOf } from '../r4/generated/type-maps.ts';
2
+ import type { FhirpathResultIn } from '../typed/infer.ts';
3
+ import { type Compiler, type EvaluateOptions } from './compile.ts';
4
+ /**
5
+ * One `project()` column. A string or `{ path }` returns one optional value.
6
+ * `collection` keeps every value, `default` fills an empty result, and `test`
7
+ * returns one criteria boolean. `as`, `choices`, and `enum` are alternative
8
+ * value conversions. `type` declares a result type for TypeScript and is not
9
+ * checked at runtime. See `docs/api.md#project` for all options.
10
+ */
11
+ export type ProjectionColumn = string | ({
12
+ path: string;
13
+ } & ColumnOptions) | {
14
+ test: string;
15
+ };
16
+ /** Options shared by plain project columns and DTO `@column` fields. */
17
+ export type ColumnOptions = {
18
+ collection?: boolean;
19
+ type?: keyof R4TypeOf;
20
+ default?: unknown;
21
+ } & ({
22
+ as?: 'Date' | ((value: unknown) => unknown);
23
+ choices?: never;
24
+ pick?: never;
25
+ enum?: never;
26
+ } | {
27
+ choices: Readonly<Record<string, unknown>>;
28
+ as?: never;
29
+ pick?: never;
30
+ enum?: never;
31
+ } | {
32
+ choices: readonly {
33
+ code: string;
34
+ }[];
35
+ pick?: string;
36
+ as?: never;
37
+ enum?: never;
38
+ } | {
39
+ enum: readonly string[];
40
+ as?: never;
41
+ choices?: never;
42
+ pick?: never;
43
+ });
44
+ export type ProjectionColumns = Record<string, ProjectionColumn>;
45
+ type ColumnPath<Column> = Column extends string ? Column : Column extends {
46
+ path: infer Path extends string;
47
+ } ? Path : never;
48
+ /** Infers the values after the selected conversion, or from the path when no conversion is set. */
49
+ type ColumnValues<Column, Root extends string> = Column extends {
50
+ as: (value: never) => infer R;
51
+ } ? R[] : Column extends {
52
+ as: 'Date';
53
+ } ? Date[] : Column extends {
54
+ choices: readonly (infer Row extends {
55
+ code: string;
56
+ })[];
57
+ } ? Column extends {
58
+ pick: infer Key extends keyof Row;
59
+ } ? Row[Key][] : Row[] : Column extends {
60
+ choices: infer M extends Readonly<Record<string, unknown>>;
61
+ } ? M[keyof M][] : Column extends {
62
+ enum: readonly (infer V extends string)[];
63
+ } ? V[] : Column extends {
64
+ type: infer T extends keyof R4TypeOf;
65
+ } ? R4TypeOf[T][] : FhirpathResultIn<ColumnPath<Column>, Root>;
66
+ /** A column's output type. A default replaces `undefined`; a collection returns every value. */
67
+ export type ColumnResult<Column extends string | {
68
+ path: string;
69
+ } | {
70
+ test: string;
71
+ }, Root extends string = 'opaque'> = Column extends {
72
+ test: string;
73
+ } ? boolean : Column extends {
74
+ collection: true;
75
+ } ? ColumnValues<Column, Root> : Column extends {
76
+ default: infer D;
77
+ } ? ColumnValues<Column, Root>[number] | D : ColumnValues<Column, Root>[number] | undefined;
78
+ /** The row shape `project()` produces: each column's type inferred from its expression. */
79
+ export type Projection<Columns extends ProjectionColumns, Root extends string = 'opaque'> = {
80
+ -readonly [K in keyof Columns]: ColumnResult<Columns[K], Root>;
81
+ };
82
+ /**
83
+ * Projects one row per input subject. Each row gets one shared context, so
84
+ * variables bind once and every column reads the same values. Runtime
85
+ * `%rowIndex` and `%rowTotal` replace matching environment entries.
86
+ */
87
+ export declare function projectRows(input: unknown, columns: ProjectionColumns, options: EvaluateOptions, compile: Compiler): Record<string, unknown>[];
88
+ export {};
89
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/api/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ import { forkVariables } from "../engine/context.js";
2
+ import { evaluateNode } from "../engine/evaluator.js";
3
+ import { FhirPathRuntimeError } from "../errors.js";
4
+ import { criteriaBoolean } from "../values/collection.js";
5
+ import { toCollection, unwrap } from "../values/typed-value.js";
6
+ import { toSubjects } from "./bundle.js";
7
+ import { contextFactory } from "./compile.js";
8
+ /** The `as: 'Date'` coercion; a value that is not a parseable date string becomes empty. */
9
+ function toJsDates(values) {
10
+ return values.flatMap(value => {
11
+ if (typeof value !== 'string') {
12
+ return [];
13
+ }
14
+ const date = new Date(value);
15
+ return Number.isNaN(date.getTime()) ? [] : [date];
16
+ });
17
+ }
18
+ /** The string key `choices` looks up: primitives via String(), anything else never matches. */
19
+ function mapKey(value) {
20
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'
21
+ ? String(value)
22
+ : undefined;
23
+ }
24
+ /** The `choices` lookup over a plain Record: own keys only; a miss becomes empty. */
25
+ function recordLookup(choices) {
26
+ return values => values.flatMap(value => {
27
+ const key = mapKey(value);
28
+ return key !== undefined && Object.hasOwn(choices, key) ? [choices[key]] : [];
29
+ });
30
+ }
31
+ /** Looks up display rows by `code`. The first row wins; a missing row or field returns empty. */
32
+ function tableLookup(rows, pick) {
33
+ const byCode = new Map();
34
+ for (const row of rows) {
35
+ if (!byCode.has(row.code)) {
36
+ byCode.set(row.code, row);
37
+ }
38
+ }
39
+ return values => values.flatMap(value => {
40
+ const key = mapKey(value);
41
+ const row = key === undefined ? undefined : byCode.get(key);
42
+ if (row === undefined) {
43
+ return [];
44
+ }
45
+ if (pick === undefined) {
46
+ return [row];
47
+ }
48
+ const field = row[pick];
49
+ return field === undefined ? [] : [field];
50
+ });
51
+ }
52
+ /** The `enum` check: values outside the listed strings become empty. */
53
+ function enumLookup(allowed) {
54
+ const members = new Set(allowed);
55
+ return values => values.filter(value => members.has(value));
56
+ }
57
+ /** The table form of `choices`; Array.isArray alone cannot exclude the Record form for the checker. */
58
+ function isTable(choices) {
59
+ return Array.isArray(choices);
60
+ }
61
+ /** Resolve a column's `as`/`choices`/`enum` option into its values mapping. */
62
+ function coercion(spec) {
63
+ if (spec.choices !== undefined) {
64
+ return isTable(spec.choices) ? tableLookup(spec.choices, spec.pick) : recordLookup(spec.choices);
65
+ }
66
+ if (spec.enum !== undefined) {
67
+ return enumLookup(spec.enum);
68
+ }
69
+ if (spec.as === 'Date') {
70
+ return toJsDates;
71
+ }
72
+ if (typeof spec.as === 'function') {
73
+ const as = spec.as;
74
+ return values => values.map(as);
75
+ }
76
+ return values => values;
77
+ }
78
+ /** Checks conversion options for JavaScript callers and transpile-only code. */
79
+ function assertShaperOptions(name, spec) {
80
+ const shapers = [spec.as, spec.choices, spec.enum].filter(option => option !== undefined).length;
81
+ if (shapers > 1) {
82
+ throw new FhirPathRuntimeError(`project(): column '${name}' declares more than one of 'as', 'choices', 'enum'; use one`);
83
+ }
84
+ if (spec.pick !== undefined && !Array.isArray(spec.choices)) {
85
+ throw new FhirPathRuntimeError(`project(): column '${name}' has 'pick' without a table 'choices' (an array of { code, … } rows)`);
86
+ }
87
+ if (spec.pick !== undefined && Array.isArray(spec.choices) && spec.choices.length > 0) {
88
+ const pick = spec.pick;
89
+ // A field no row carries is a typo, not a sparse table — fail at plan time.
90
+ if (!spec.choices.some(row => Object.hasOwn(row, pick))) {
91
+ throw new FhirPathRuntimeError(`project(): column '${name}' picks '${pick}', which no row of its table has`);
92
+ }
93
+ }
94
+ }
95
+ /**
96
+ * Which row an error came from, when there is more than one to choose between.
97
+ * A single-resource projection has no position worth reporting, so it says
98
+ * nothing rather than "row 0".
99
+ */
100
+ function inRow({ index, total }) {
101
+ return total > 1 ? ` in row ${index}` : '';
102
+ }
103
+ /** Take the column union apart once, at plan time; rows only run the result. */
104
+ function planColumn(name, column, compile) {
105
+ if (typeof column !== 'string' && 'test' in column) {
106
+ const criteria = compile(column.test);
107
+ return (root, context) => criteriaBoolean(evaluateNode(criteria.ast, forkVariables(context), root));
108
+ }
109
+ const spec = typeof column === 'string' ? { path: column } : column;
110
+ assertShaperOptions(name, spec);
111
+ const expression = compile(spec.path);
112
+ const applyAs = coercion(spec);
113
+ const empty = 'default' in spec ? spec.default : undefined;
114
+ return (root, context, at) => {
115
+ const values = evaluateNode(expression.ast, forkVariables(context), root).map(unwrap);
116
+ if (spec.collection === true) {
117
+ return applyAs(values);
118
+ }
119
+ // The scalar-column rule counts the expression's values, before any `as`
120
+ // coercion or `choices` miss drops them. One row of a batch can be the only
121
+ // one that breaks it, so the message says which — `%rowIndex` numbering,
122
+ // the same the columns see.
123
+ if (values.length > 1) {
124
+ throw new FhirPathRuntimeError(`project(): column '${name}' yielded ${values.length} values${inRow(at)}; append first() or set collection: true`);
125
+ }
126
+ const coerced = applyAs(values);
127
+ return coerced.length > 0 ? coerced[0] : empty;
128
+ };
129
+ }
130
+ /**
131
+ * Projects one row per input subject. Each row gets one shared context, so
132
+ * variables bind once and every column reads the same values. Runtime
133
+ * `%rowIndex` and `%rowTotal` replace matching environment entries.
134
+ */
135
+ export function projectRows(input, columns, options, compile) {
136
+ const readers = Object.entries(columns).map(([name, column]) => [name, planColumn(name, column, compile)]);
137
+ const makeContext = contextFactory(options);
138
+ const subjects = toSubjects(input);
139
+ return subjects.map((subject, index) => {
140
+ const root = toCollection(subject.value);
141
+ const at = { index, total: subjects.length };
142
+ const context = makeContext(root, { rowIndex: index, rowTotal: subjects.length });
143
+ const row = {};
144
+ for (const [name, read] of readers) {
145
+ row[name] = read(root, context, at);
146
+ }
147
+ return row;
148
+ });
149
+ }
150
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/api/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { R4TypeOf } from '../r4/generated/type-maps.ts';
2
+ import type { FhirpathInput, FhirpathResult, FhirpathResultIn, FhirTypeName } from '../typed/infer.ts';
3
+ import { CompiledExpression } from './compile.ts';
4
+ /**
5
+ * Compiles a FHIRPath expression. The call form infers supported literal
6
+ * expressions. Its optional input type gives relative paths a type context for
7
+ * inference and source checks. The tagged form returns `unknown[]` because
8
+ * TypeScript does not preserve the literal type. Tags reject interpolation; use
9
+ * environment variables for data.
10
+ */
11
+ export declare function fhirpath<const Expr extends string, const Root extends FhirTypeName, TResult extends unknown[] = FhirpathResultIn<Expr, Root>>(expression: Expr, inputType: Root): CompiledExpression<Expr, R4TypeOf[Root], TResult>;
12
+ export declare function fhirpath<const Expr extends string, TInput = FhirpathInput<Expr>, TResult extends unknown[] = FhirpathResult<Expr>>(expression: Expr): CompiledExpression<Expr, TInput, TResult>;
13
+ export declare function fhirpath(strings: TemplateStringsArray, ...substitutions: never[]): CompiledExpression;
14
+ //# sourceMappingURL=tagged.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tagged.d.ts","sourceRoot":"","sources":["../../src/api/tagged.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACtG,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,KAAK,CAAC,IAAI,SAAS,MAAM,EACzB,KAAK,CAAC,IAAI,SAAS,YAAY,EAC/B,OAAO,SAAS,OAAO,EAAE,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,EACxD,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAA;AACvF,wBAAgB,QAAQ,CACtB,KAAK,CAAC,IAAI,SAAS,MAAM,EACzB,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,EAC5B,OAAO,SAAS,OAAO,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,EAChD,UAAU,EAAE,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AAC9D,wBAAgB,QAAQ,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,aAAa,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { FhirPathError } from "../errors.js";
2
+ import { CompiledExpression } from "./compile.js";
3
+ export function fhirpath(input, ...rest) {
4
+ if (typeof input === 'string') {
5
+ // The optional input type is used by TypeScript and source checks only.
6
+ return new CompiledExpression(input);
7
+ }
8
+ if (rest.length > 0) {
9
+ throw new FhirPathError('fhirpath`...` does not support interpolation; pass values as environment variables instead');
10
+ }
11
+ return new CompiledExpression(input[0]);
12
+ }
13
+ //# sourceMappingURL=tagged.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tagged.js","sourceRoot":"","sources":["../../src/api/tagged.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAG5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAoBjD,MAAM,UAAU,QAAQ,CAAC,KAAoC,EAAE,GAAG,IAAe;IAC/E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,wEAAwE;QACxE,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,aAAa,CACrB,4FAA4F,CAC7F,CAAA;IACH,CAAC;IACD,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC,CAAA;AACnD,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type DtoDiagnostic } from '../analyzer/analyze-dto.ts';
2
+ /** Where DTO classes live unless `--dtos` says otherwise. */
3
+ export declare const DEFAULT_DTO_GLOB = "**/*.dto.ts";
4
+ /** One finding, with the DTO and file it belongs to and the expression that produced it. */
5
+ export interface DtoFinding extends DtoDiagnostic {
6
+ /** The DTO class name. */
7
+ dto: string;
8
+ /** The module the DTO was imported from, relative to the working directory. */
9
+ file: string;
10
+ }
11
+ export interface DtoCheckResult {
12
+ findings: DtoFinding[];
13
+ /** Modules that matched and were imported, relative to the working directory. */
14
+ files: string[];
15
+ /** How many engines the imported modules constructed. */
16
+ engines: number;
17
+ /** Every DTO analyzed, by module. */
18
+ dtos: {
19
+ file: string;
20
+ dto: string;
21
+ }[];
22
+ }
23
+ /** Imports matching modules and checks their exported DTOs against recorded engines. */
24
+ export declare function checkDtoModules(patterns: readonly string[], cwd: string): Promise<DtoCheckResult>;
25
+ //# sourceMappingURL=dto-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dto-check.d.ts","sourceRoot":"","sources":["../../src/cli/dto-check.ts"],"names":[],"mappings":"AAWA,OAAO,EAAoC,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAIjG,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB,gBAAgB,CAAA;AAI7C,4FAA4F;AAC5F,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,iFAAiF;IACjF,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAA;IACf,qCAAqC;IACrC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACtC;AAED,wFAAwF;AACxF,wBAAsB,eAAe,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAoBvG"}
@@ -0,0 +1,77 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ /**
10
+ * Imports DTO modules, records the engines they create, and checks each exported
11
+ * DTO with loaded runtime context. The default module pattern is `*.dto.ts`.
12
+ * Importing runs module initialization; `--no-import` skips this pass.
13
+ */
14
+ /* v8 ignore file -- covered end-to-end as a subprocess in fhirpath-check.test.ts, which is the only way to exercise a module loader and engine discovery in a fresh process */
15
+ import { glob } from 'node:fs/promises';
16
+ import { register } from 'node:module';
17
+ import { relative } from 'node:path';
18
+ import { pathToFileURL } from 'node:url';
19
+ import { analyzeDto } from "../analyzer/analyze-dto.js";
20
+ import { isDtoClass } from "../api/dto.js";
21
+ import { recordEngines } from "../api/engine.js";
22
+ /** Where DTO classes live unless `--dtos` says otherwise. */
23
+ export const DEFAULT_DTO_GLOB = '**/*.dto.ts';
24
+ const IGNORED = ['**/node_modules/**', '**/dist/**', '**/build/**', '**/coverage/**'];
25
+ /** Imports matching modules and checks their exported DTOs against recorded engines. */
26
+ export async function checkDtoModules(patterns, cwd) {
27
+ const recorded = recordEngines();
28
+ register(new URL('ts-loader.mjs', import.meta.url));
29
+ const files = [];
30
+ const dtos = [];
31
+ for await (const match of glob(patterns.length > 0 ? [...patterns] : [DEFAULT_DTO_GLOB], { cwd, exclude: IGNORED })) {
32
+ const file = relative(cwd, new URL(match, pathToFileURL(`${cwd}/`)).pathname);
33
+ files.push(file);
34
+ const module = await import(__rewriteRelativeImportExtension(pathToFileURL(`${cwd}/${match}`).href));
35
+ for (const [name, value] of Object.entries(module)) {
36
+ if (isDtoClass(value)) {
37
+ dtos.push({ file, dto: value.name || name, cls: value });
38
+ }
39
+ }
40
+ }
41
+ const engines = recorded();
42
+ const findings = dtos.flatMap(({ file, dto, cls }) => analyzeFor(cls, engines).map(finding => ({ ...finding, dto, file })));
43
+ return { findings, files, engines: engines.length, dtos: dtos.map(({ file, dto }) => ({ file, dto })) };
44
+ }
45
+ /**
46
+ * A DTO against the engine that registered it, or — when no engine claims it, as
47
+ * for a row shape that is only ever projected — against everything the project's
48
+ * engines make available. A DTO checked against one engine of several would
49
+ * report calls that resolve perfectly well in the engine it actually runs on, and
50
+ * "some engine in this project declares this" is the most that can be said
51
+ * without being told which. Merging says exactly that, once, in engine order.
52
+ */
53
+ function analyzeFor(dto, engines) {
54
+ const owner = engines.find(engine => engine.dtos.includes(dto));
55
+ if (owner !== undefined) {
56
+ return analyzeDto(dto, { engine: owner });
57
+ }
58
+ if (engines.length === 0) {
59
+ return analyzeDto(dto);
60
+ }
61
+ return analyzeDto(dto, { engine: merged(engines) });
62
+ }
63
+ /**
64
+ * Every engine's context as one: the union of their registered functions and env
65
+ * names. The first engine's `model` stands for all of them — a project binds one
66
+ * FHIR version, and an unregistered DTO names no engine that could pick another.
67
+ */
68
+ function merged(engines) {
69
+ return {
70
+ defaults: {
71
+ ...engines[0]?.defaults,
72
+ functions: Object.assign({}, ...engines.map(engine => engine.defaults.functions)),
73
+ env: Object.assign({}, ...engines.map(engine => engine.defaults.env)),
74
+ },
75
+ };
76
+ }
77
+ //# sourceMappingURL=dto-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dto-check.js","sourceRoot":"","sources":["../../src/cli/dto-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=fhirpath-check.d.ts.map