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,84 @@
1
+ /**
2
+ * Static ReDoS heuristic for literal regex arguments of the matches() family.
3
+ * A synchronous JS engine cannot time out a running RegExp, so catastrophic
4
+ * backtracking is flagged before it runs instead: the classic exponential
5
+ * shape is an unbounded quantifier applied to a group that itself contains an
6
+ * unbounded quantifier — `(a+)+`, `(\d*)*`, `(x|y+)*`. That is what this
7
+ * detects; overlapping-alternation cases like `(a|ab)+` are out of scope.
8
+ */
9
+ export function hasNestedUnboundedQuantifier(pattern) {
10
+ // Each open group tracks whether an unbounded quantifier appeared inside it.
11
+ const groups = [];
12
+ let currentHasUnbounded = false;
13
+ let index = 0;
14
+ while (index < pattern.length) {
15
+ const char = pattern[index];
16
+ if (char === '\\') {
17
+ index += 2;
18
+ continue;
19
+ }
20
+ if (char === '[') {
21
+ // Character classes repeat single characters; quantifiers inside are literals.
22
+ index += 1;
23
+ while (index < pattern.length && pattern[index] !== ']') {
24
+ index += pattern[index] === '\\' ? 2 : 1;
25
+ }
26
+ index += 1;
27
+ continue;
28
+ }
29
+ if (char === '(') {
30
+ groups.push(currentHasUnbounded);
31
+ currentHasUnbounded = false;
32
+ index += 1;
33
+ continue;
34
+ }
35
+ if (char === ')') {
36
+ const groupHadUnbounded = currentHasUnbounded;
37
+ currentHasUnbounded = groups.pop() ?? false;
38
+ index += 1;
39
+ const quantifier = readQuantifier(pattern, index);
40
+ if (quantifier !== undefined) {
41
+ if (groupHadUnbounded && quantifier.unbounded) {
42
+ return true;
43
+ }
44
+ currentHasUnbounded ||= quantifier.unbounded;
45
+ index = quantifier.end;
46
+ continue;
47
+ }
48
+ currentHasUnbounded ||= groupHadUnbounded;
49
+ continue;
50
+ }
51
+ const quantifier = readQuantifier(pattern, index);
52
+ if (quantifier !== undefined && index > 0) {
53
+ currentHasUnbounded ||= quantifier.unbounded;
54
+ index = quantifier.end;
55
+ continue;
56
+ }
57
+ index += 1;
58
+ }
59
+ return false;
60
+ }
61
+ /** The quantifier at `index` (`*`, `+`, `{m,}`, `{m,n}`, with lazy `?`), or undefined. */
62
+ function readQuantifier(pattern, index) {
63
+ const char = pattern[index];
64
+ if (char === '*' || char === '+') {
65
+ return { unbounded: true, end: skipLazy(pattern, index + 1) };
66
+ }
67
+ if (char === '?') {
68
+ return { unbounded: false, end: skipLazy(pattern, index + 1) };
69
+ }
70
+ if (char === '{') {
71
+ const match = /^\{(\d+)(,(\d*)?)?\}/.exec(pattern.slice(index));
72
+ if (match === null) {
73
+ return undefined;
74
+ }
75
+ // {m} and {m,n} are bounded; {m,} is unbounded.
76
+ const unbounded = match[2] !== undefined && (match[3] === undefined || match[3] === '');
77
+ return { unbounded, end: skipLazy(pattern, index + match[0].length) };
78
+ }
79
+ return undefined;
80
+ }
81
+ function skipLazy(pattern, index) {
82
+ return pattern[index] === '?' ? index + 1 : index;
83
+ }
84
+ //# sourceMappingURL=regex-safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-safety.js","sourceRoot":"","sources":["../../src/analyzer/regex-safety.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import type { ValueKind } from '../values/type-compat.ts';
2
+ interface StaticStateLike {
3
+ types: string[] | undefined;
4
+ /** True: at most one item. False: may hold several. Undefined: cardinality unknown. */
5
+ single: boolean | undefined;
6
+ /** Canonical resource types a Reference state may point to — resolve()'s result. */
7
+ targets?: string[];
8
+ }
9
+ /** Cardinality of a value combined from two parts: single only when both are. */
10
+ export declare function singleAnd(a: boolean | undefined, b: boolean | undefined): boolean | undefined;
11
+ /** Describes whether an argument is a lambda, condition, sort key, type name, or eager value. */
12
+ export type ArgSpec = 'expression' | 'condition' | 'sort-key' | 'type-name' | 'any' | ValueKind;
13
+ /**
14
+ * The argument shapes a host function can declare. Host functions always
15
+ * receive eagerly evaluated values (HostFunction.fn), so only the eager specs
16
+ * are offered — declaring a lambda spec like `expression` would make the
17
+ * analyzer check semantics the runtime does not implement.
18
+ */
19
+ export type ValueArgSpec = 'any' | ValueKind;
20
+ /**
21
+ * Accepted focus kind, cardinality, and model types. DTO functions may set
22
+ * `types`; built-ins must not because specification functions accept many types.
23
+ */
24
+ export interface InputSpec {
25
+ kind?: ValueKind;
26
+ singleton?: boolean;
27
+ /** Canonical or local model type names ('CodeableConcept', 'System.String'). */
28
+ types?: string[];
29
+ }
30
+ /**
31
+ * The declared analyzer signature of a host-supplied function (HAPI's
32
+ * checkFunction): what input it accepts, how its arguments are treated, and
33
+ * what it returns. Result `types` use model or System names ('Patient',
34
+ * 'System.String'); omitting them keeps the result an unknown region.
35
+ */
36
+ export interface CustomFunctionSignature {
37
+ input?: InputSpec;
38
+ args?: ValueArgSpec[];
39
+ result?: {
40
+ types?: string[];
41
+ single?: boolean;
42
+ };
43
+ }
44
+ export interface FunctionSignature {
45
+ input?: InputSpec;
46
+ args?: ArgSpec[];
47
+ /**
48
+ * Result state from the input state and the analyzed argument states
49
+ * (undefined for `type-name` positions and missing optional arguments).
50
+ */
51
+ result: (input: StaticStateLike, args: readonly (StaticStateLike | undefined)[]) => StaticStateLike;
52
+ }
53
+ /**
54
+ * The input's candidate types and reference targets at a different cardinality
55
+ * — the composition every selection/projection result goes through, so target
56
+ * metadata survives by construction instead of by per-function special cases.
57
+ */
58
+ export declare function withSingle(input: StaticStateLike, single: boolean | undefined): StaticStateLike;
59
+ /**
60
+ * The union of several alternative states (iif branches, coalesce arguments,
61
+ * merged collections): all candidate types, single only when every alternative
62
+ * is, and reference targets preserved when every non-empty alternative
63
+ * declares them (a statically empty side contributes nothing).
64
+ */
65
+ export declare function unionStates(states: (StaticStateLike | undefined)[]): StaticStateLike;
66
+ /**
67
+ * What the analyzer knows about each function. Functions missing here still get
68
+ * arity checks from the runtime registry; their results become unknown.
69
+ */
70
+ export declare const FUNCTION_SIGNATURES: Readonly<Record<string, FunctionSignature>>;
71
+ export {};
72
+ //# sourceMappingURL=signatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signatures.d.ts","sourceRoot":"","sources":["../../src/analyzer/signatures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEzD,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC3B,uFAAuF;IACvF,MAAM,EAAE,OAAO,GAAG,SAAS,CAAA;IAC3B,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAK7F;AAED,iGAAiG;AACjG,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,KAAK,GAAG,SAAS,CAAA;AAE/F;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,SAAS,CAAA;AAE5C;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,IAAI,CAAC,EAAE,YAAY,EAAE,CAAA;IACrB,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAChD;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;IAChB;;;OAGG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,EAAE,KAAK,eAAe,CAAA;CACpG;AASD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,eAAe,CAI/F;AAID;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,CAAC,eAAe,GAAG,SAAS,CAAC,EAAE,GAAG,eAAe,CAapF;AAKD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAqJ3E,CAAA"}
@@ -0,0 +1,195 @@
1
+ /** Cardinality of a value combined from two parts: single only when both are. */
2
+ export function singleAnd(a, b) {
3
+ if (a === false || b === false) {
4
+ return false;
5
+ }
6
+ return a === true && b === true ? true : undefined;
7
+ }
8
+ const BOOLEAN = () => ({ types: ['System.Boolean'], single: true });
9
+ const INTEGER = () => ({ types: ['System.Integer'], single: true });
10
+ const STRING = () => ({ types: ['System.String'], single: true });
11
+ const DECIMAL = () => ({ types: ['System.Decimal'], single: true });
12
+ const UNKNOWN = () => ({ types: undefined, single: undefined });
13
+ const SAME = (input) => input;
14
+ /**
15
+ * The input's candidate types and reference targets at a different cardinality
16
+ * — the composition every selection/projection result goes through, so target
17
+ * metadata survives by construction instead of by per-function special cases.
18
+ */
19
+ export function withSingle(input, single) {
20
+ return input.targets === undefined
21
+ ? { types: input.types, single }
22
+ : { types: input.types, single, targets: input.targets };
23
+ }
24
+ const ITEM = (input) => withSingle(input, true);
25
+ /**
26
+ * The union of several alternative states (iif branches, coalesce arguments,
27
+ * merged collections): all candidate types, single only when every alternative
28
+ * is, and reference targets preserved when every non-empty alternative
29
+ * declares them (a statically empty side contributes nothing).
30
+ */
31
+ export function unionStates(states) {
32
+ const present = states.filter((state) => state !== undefined);
33
+ const single = present.length > 0 ? present.map(state => state.single).reduce(singleAnd, true) : undefined;
34
+ const contributing = present.filter(state => state.types === undefined || state.types.length > 0);
35
+ const targets = contributing.length > 0 && contributing.every(state => state.targets !== undefined)
36
+ ? [...new Set(contributing.flatMap(state => state.targets))]
37
+ : undefined;
38
+ const types = present.length === 0 || present.some(state => state.types === undefined)
39
+ ? undefined
40
+ : [...new Set(present.flatMap(state => state.types))];
41
+ return targets === undefined ? { types, single } : { types, single, targets };
42
+ }
43
+ const STRING_FN = { input: { kind: 'String', singleton: true }, args: ['String'], result: STRING };
44
+ const MATH_FN = { input: { kind: 'Numeric', singleton: true }, result: DECIMAL };
45
+ /**
46
+ * What the analyzer knows about each function. Functions missing here still get
47
+ * arity checks from the runtime registry; their results become unknown.
48
+ */
49
+ export const FUNCTION_SIGNATURES = {
50
+ empty: { result: BOOLEAN },
51
+ exists: { args: ['expression'], result: BOOLEAN },
52
+ all: { args: ['expression'], result: BOOLEAN },
53
+ allTrue: { input: { kind: 'Boolean' }, result: BOOLEAN },
54
+ anyTrue: { input: { kind: 'Boolean' }, result: BOOLEAN },
55
+ allFalse: { input: { kind: 'Boolean' }, result: BOOLEAN },
56
+ anyFalse: { input: { kind: 'Boolean' }, result: BOOLEAN },
57
+ count: { result: INTEGER },
58
+ distinct: { result: SAME },
59
+ isDistinct: { result: BOOLEAN },
60
+ subsetOf: { args: ['any'], result: BOOLEAN },
61
+ supersetOf: { args: ['any'], result: BOOLEAN },
62
+ // Filters cannot grow their input, so cardinality is preserved: filtering a
63
+ // single item yields at most one item.
64
+ where: { args: ['expression'], result: SAME },
65
+ select: {
66
+ args: ['expression'],
67
+ // The projection's analyzed state, collection-ized: single only when both
68
+ // the input and the projection body are single.
69
+ result: (input, args) => withSingle(args[0] ?? UNKNOWN(), singleAnd(input.single, args[0]?.single)),
70
+ },
71
+ repeat: { args: ['expression'], result: UNKNOWN },
72
+ // ofType/as results narrow to the named type; the analyzer computes that with
73
+ // the model (walkCall), so their table results are never consulted.
74
+ ofType: { args: ['type-name'], result: UNKNOWN },
75
+ is: { input: { singleton: true }, args: ['type-name'], result: BOOLEAN },
76
+ as: { input: { singleton: true }, args: ['type-name'], result: UNKNOWN },
77
+ single: { result: ITEM },
78
+ first: { result: ITEM },
79
+ last: { result: ITEM },
80
+ tail: { result: SAME },
81
+ skip: { args: ['Numeric'], result: SAME },
82
+ take: { args: ['Numeric'], result: SAME },
83
+ intersect: { args: ['any'], result: SAME },
84
+ exclude: { args: ['any'], result: SAME },
85
+ union: { args: ['any'], result: (input, args) => withSingle(unionStates([input, args[0]]), false) },
86
+ combine: { args: ['any'], result: (input, args) => withSingle(unionStates([input, args[0]]), false) },
87
+ iif: {
88
+ args: ['condition', 'expression', 'expression'],
89
+ // The union of the branch states; a missing else-branch contributes empty.
90
+ result: (_input, args) => unionStates([args[1], args[2] ?? { types: [], single: true }]),
91
+ },
92
+ // not() takes anything a Boolean test accepts (0/1, single items), so no kind pin.
93
+ not: { input: { singleton: true }, result: BOOLEAN },
94
+ trace: { args: ['String', 'expression'], result: SAME },
95
+ children: { result: UNKNOWN },
96
+ descendants: { result: UNKNOWN },
97
+ // A reference resolves to its declared target types (Reference.targetProfile,
98
+ // HAPI's TypeDetails.targets); an unconstrained reference stays unknown.
99
+ resolve: { result: input => ({ types: input.targets, single: input.single }) },
100
+ extension: { args: ['String'], result: UNKNOWN },
101
+ hasValue: { input: { singleton: true }, result: BOOLEAN },
102
+ getValue: { input: { singleton: true }, result: UNKNOWN },
103
+ htmlChecks: { input: { singleton: true }, result: BOOLEAN },
104
+ comparable: { input: { kind: 'Quantity', singleton: true }, args: ['Quantity'], result: BOOLEAN },
105
+ conformsTo: { input: { singleton: true }, args: ['String'], result: BOOLEAN },
106
+ length: { input: { kind: 'String', singleton: true }, result: INTEGER },
107
+ indexOf: { ...STRING_FN, result: INTEGER },
108
+ lastIndexOf: { ...STRING_FN, result: INTEGER },
109
+ substring: { input: { kind: 'String', singleton: true }, args: ['Numeric', 'Numeric'], result: STRING },
110
+ startsWith: { ...STRING_FN, result: BOOLEAN },
111
+ endsWith: { ...STRING_FN, result: BOOLEAN },
112
+ contains: { ...STRING_FN, result: BOOLEAN },
113
+ upper: { input: { kind: 'String', singleton: true }, result: STRING },
114
+ lower: { input: { kind: 'String', singleton: true }, result: STRING },
115
+ replace: { input: { kind: 'String', singleton: true }, args: ['String', 'String'], result: STRING },
116
+ matches: { ...STRING_FN, result: BOOLEAN },
117
+ matchesFull: { ...STRING_FN, result: BOOLEAN },
118
+ replaceMatches: { input: { kind: 'String', singleton: true }, args: ['String', 'String'], result: STRING },
119
+ toChars: {
120
+ input: { kind: 'String', singleton: true },
121
+ result: () => ({ types: ['System.String'], single: false }),
122
+ },
123
+ trim: { input: { kind: 'String', singleton: true }, result: STRING },
124
+ split: {
125
+ input: { kind: 'String', singleton: true },
126
+ args: ['String'],
127
+ result: () => ({ types: ['System.String'], single: false }),
128
+ },
129
+ join: { input: { kind: 'String' }, args: ['String'], result: STRING },
130
+ encode: STRING_FN,
131
+ decode: STRING_FN,
132
+ escape: STRING_FN,
133
+ unescape: STRING_FN,
134
+ abs: { input: { singleton: true }, result: UNKNOWN },
135
+ ceiling: { input: { kind: 'Numeric', singleton: true }, result: INTEGER },
136
+ floor: { input: { kind: 'Numeric', singleton: true }, result: INTEGER },
137
+ truncate: { input: { kind: 'Numeric', singleton: true }, result: INTEGER },
138
+ round: { input: { kind: 'Numeric', singleton: true }, args: ['Numeric'], result: DECIMAL },
139
+ exp: MATH_FN,
140
+ ln: MATH_FN,
141
+ sqrt: MATH_FN,
142
+ log: { input: { kind: 'Numeric', singleton: true }, args: ['Numeric'], result: DECIMAL },
143
+ power: { input: { kind: 'Numeric', singleton: true }, args: ['Numeric'], result: UNKNOWN },
144
+ aggregate: { args: ['expression', 'any'], result: UNKNOWN },
145
+ sum: { input: { kind: 'Numeric' }, result: UNKNOWN },
146
+ min: { input: { kind: 'Numeric' }, result: UNKNOWN },
147
+ max: { input: { kind: 'Numeric' }, result: UNKNOWN },
148
+ avg: { input: { kind: 'Numeric' }, result: DECIMAL },
149
+ sort: { args: ['sort-key'], result: SAME },
150
+ toBoolean: { input: { singleton: true }, result: BOOLEAN },
151
+ toInteger: { input: { singleton: true }, result: INTEGER },
152
+ toLong: { input: { singleton: true }, result: () => ({ types: ['System.Long'], single: true }) },
153
+ toDecimal: { input: { singleton: true }, result: DECIMAL },
154
+ toString: { input: { singleton: true }, result: STRING },
155
+ toDate: { input: { singleton: true }, result: () => ({ types: ['System.Date'], single: true }) },
156
+ toDateTime: { input: { singleton: true }, result: () => ({ types: ['System.DateTime'], single: true }) },
157
+ toTime: { input: { singleton: true }, result: () => ({ types: ['System.Time'], single: true }) },
158
+ toQuantity: {
159
+ input: { singleton: true },
160
+ args: ['String'],
161
+ result: () => ({ types: ['System.Quantity'], single: true }),
162
+ },
163
+ convertsToBoolean: { input: { singleton: true }, result: BOOLEAN },
164
+ convertsToInteger: { input: { singleton: true }, result: BOOLEAN },
165
+ convertsToLong: { input: { singleton: true }, result: BOOLEAN },
166
+ convertsToDecimal: { input: { singleton: true }, result: BOOLEAN },
167
+ convertsToString: { input: { singleton: true }, result: BOOLEAN },
168
+ convertsToDate: { input: { singleton: true }, result: BOOLEAN },
169
+ convertsToDateTime: { input: { singleton: true }, result: BOOLEAN },
170
+ convertsToTime: { input: { singleton: true }, result: BOOLEAN },
171
+ convertsToQuantity: { input: { singleton: true }, args: ['String'], result: BOOLEAN },
172
+ now: { result: () => ({ types: ['System.DateTime'], single: true }) },
173
+ today: { result: () => ({ types: ['System.Date'], single: true }) },
174
+ timeOfDay: { result: () => ({ types: ['System.Time'], single: true }) },
175
+ yearOf: { input: { kind: 'Temporal', singleton: true }, result: INTEGER },
176
+ monthOf: { input: { kind: 'Temporal', singleton: true }, result: INTEGER },
177
+ dayOf: { input: { kind: 'Temporal', singleton: true }, result: INTEGER },
178
+ hourOf: { input: { kind: 'Temporal', singleton: true }, result: INTEGER },
179
+ minuteOf: { input: { kind: 'Temporal', singleton: true }, result: INTEGER },
180
+ secondOf: { input: { kind: 'Temporal', singleton: true }, result: INTEGER },
181
+ millisecondOf: { input: { kind: 'Temporal', singleton: true }, result: INTEGER },
182
+ timezoneOffsetOf: { input: { kind: 'Temporal', singleton: true }, result: DECIMAL },
183
+ dateOf: { input: { kind: 'Temporal', singleton: true }, result: () => ({ types: ['System.Date'], single: true }) },
184
+ timeOf: { input: { kind: 'Temporal', singleton: true }, result: () => ({ types: ['System.Time'], single: true }) },
185
+ lowBoundary: { input: { singleton: true }, args: ['Numeric'], result: UNKNOWN },
186
+ highBoundary: { input: { singleton: true }, args: ['Numeric'], result: UNKNOWN },
187
+ precision: { input: { singleton: true }, result: INTEGER },
188
+ defineVariable: { args: ['String', 'expression'], result: SAME },
189
+ // Variadic: the analyzer repeats the last arg spec for every position, so one
190
+ // 'expression' entry covers all of coalesce's arguments. The result is the
191
+ // first non-empty argument, hence the union of all of them.
192
+ coalesce: { args: ['expression'], result: (_input, args) => unionStates([...args]) },
193
+ type: { result: UNKNOWN },
194
+ };
195
+ //# sourceMappingURL=signatures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signatures.js","sourceRoot":"","sources":["../../src/analyzer/signatures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { ModelProvider } from '../model/provider.ts';
2
+ import type { AstNode } from '../parser/ast.ts';
3
+ /** The subset of a FHIR Bundle the engine needs in order to unwrap it. */
4
+ export interface BundleLike {
5
+ resourceType: 'Bundle';
6
+ entry?: {
7
+ resource?: unknown;
8
+ }[];
9
+ }
10
+ export declare function isBundle(value: unknown): value is BundleLike;
11
+ /** One unit of work for the per-resource engine methods (`filter`, `project`, `checkConstraints`). */
12
+ export interface Subject {
13
+ value: unknown;
14
+ /** Position in the input array or in `Bundle.entry`; absent for a single resource. */
15
+ index?: number;
16
+ }
17
+ /**
18
+ * The per-resource view of an engine input: array items, a Bundle's entry
19
+ * resources (original entry positions kept, entries without a resource
20
+ * skipped), or the value itself.
21
+ */
22
+ export declare function toSubjects(input: unknown): Subject[];
23
+ /**
24
+ * Bundle in, entry resources out — unless the expression addresses the Bundle
25
+ * itself (a `Bundle` root). An expression whose root is a bare Bundle element
26
+ * (`entry.count()`, `type`) could mean either and throws instead of guessing.
27
+ */
28
+ export declare function normalizeInput(input: unknown, ast: AstNode, model: ModelProvider | undefined): unknown;
29
+ //# sourceMappingURL=bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/api/bundle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE/C,0EAA0E;AAC1E,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,QAAQ,CAAA;IACtB,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;CACjC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAE5D;AAED,sGAAsG;AACtG,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,OAAO,CAAA;IACd,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAUpD;AA0ED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,CAgBtG"}
@@ -0,0 +1,108 @@
1
+ import { FhirPathRuntimeError } from "../errors.js";
2
+ export function isBundle(value) {
3
+ return typeof value === 'object' && value !== null && value.resourceType === 'Bundle';
4
+ }
5
+ /**
6
+ * The per-resource view of an engine input: array items, a Bundle's entry
7
+ * resources (original entry positions kept, entries without a resource
8
+ * skipped), or the value itself.
9
+ */
10
+ export function toSubjects(input) {
11
+ if (Array.isArray(input)) {
12
+ return input.map((value, index) => ({ value, index }));
13
+ }
14
+ if (isBundle(input)) {
15
+ return (Array.isArray(input.entry) ? input.entry : [])
16
+ .map((entry, index) => ({ value: entry.resource, index }))
17
+ .filter(subject => subject.value != null);
18
+ }
19
+ return [{ value: input }];
20
+ }
21
+ const rootIdentifiersCache = new WeakMap();
22
+ /** Identifiers in root (path-head) position — the names that resolve against the input. */
23
+ function rootIdentifiers(ast) {
24
+ let heads = rootIdentifiersCache.get(ast);
25
+ if (!heads) {
26
+ const collected = new Set();
27
+ collectRootIdentifiers(ast, collected);
28
+ rootIdentifiersCache.set(ast, collected);
29
+ heads = collected;
30
+ }
31
+ return heads;
32
+ }
33
+ function collectRootIdentifiers(node, heads) {
34
+ switch (node.kind) {
35
+ case 'identifier':
36
+ heads.add(node.name);
37
+ return;
38
+ case 'dot':
39
+ // Only the head of a dotted path is a root; the right side is an element name,
40
+ // and arguments of dotted-in functions resolve against $this, not the input.
41
+ collectRootIdentifiers(node.left, heads);
42
+ return;
43
+ case 'indexer':
44
+ collectRootIdentifiers(node.target, heads);
45
+ collectRootIdentifiers(node.index, heads);
46
+ return;
47
+ case 'call':
48
+ for (const arg of node.args) {
49
+ collectRootIdentifiers(arg, heads);
50
+ }
51
+ return;
52
+ case 'unary':
53
+ collectRootIdentifiers(node.operand, heads);
54
+ return;
55
+ case 'binary':
56
+ collectRootIdentifiers(node.left, heads);
57
+ collectRootIdentifiers(node.right, heads);
58
+ return;
59
+ case 'typeOp':
60
+ collectRootIdentifiers(node.operand, heads);
61
+ return;
62
+ default:
63
+ return;
64
+ }
65
+ }
66
+ /** Bundle element names (R4/R5 plus the Resource base), the fallback when no model is bound. */
67
+ const BUNDLE_ELEMENTS = new Set([
68
+ 'id',
69
+ 'meta',
70
+ 'implicitRules',
71
+ 'language',
72
+ 'identifier',
73
+ 'type',
74
+ 'timestamp',
75
+ 'total',
76
+ 'link',
77
+ 'entry',
78
+ 'signature',
79
+ 'issues',
80
+ ]);
81
+ function isBundleElement(name, model) {
82
+ const bundleType = model?.resolveType('Bundle');
83
+ if (model && bundleType !== undefined) {
84
+ return model.getElement(bundleType, name) !== undefined;
85
+ }
86
+ return BUNDLE_ELEMENTS.has(name);
87
+ }
88
+ /**
89
+ * Bundle in, entry resources out — unless the expression addresses the Bundle
90
+ * itself (a `Bundle` root). An expression whose root is a bare Bundle element
91
+ * (`entry.count()`, `type`) could mean either and throws instead of guessing.
92
+ */
93
+ export function normalizeInput(input, ast, model) {
94
+ if (!isBundle(input)) {
95
+ return input;
96
+ }
97
+ const heads = rootIdentifiers(ast);
98
+ if (heads.has('Bundle')) {
99
+ return input;
100
+ }
101
+ for (const head of heads) {
102
+ if (isBundleElement(head, model)) {
103
+ throw new FhirPathRuntimeError(`Ambiguous expression for a Bundle input: '${head}' is a Bundle element, but a bare Bundle evaluates against its entry resources. Start the expression at Bundle to address the bundle, or wrap the input in an array to treat it as one resource.`);
104
+ }
105
+ }
106
+ return toSubjects(input).map(subject => subject.value);
107
+ }
108
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/api/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** Small LRU built on Map insertion order; get() refreshes recency. */
2
+ export declare class LruCache<V> {
3
+ private readonly capacity;
4
+ private readonly entries;
5
+ constructor(capacity: number);
6
+ get(key: string): V | undefined;
7
+ set(key: string, value: V): void;
8
+ get size(): number;
9
+ }
10
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/api/cache.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;gBAEnC,QAAQ,EAAE,MAAM;IAO5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAS/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAehC,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,38 @@
1
+ /** Small LRU built on Map insertion order; get() refreshes recency. */
2
+ export class LruCache {
3
+ capacity;
4
+ entries = new Map();
5
+ constructor(capacity) {
6
+ if (!Number.isInteger(capacity) || capacity < 0) {
7
+ throw new RangeError(`LruCache capacity must be a non-negative integer, got ${capacity}`);
8
+ }
9
+ this.capacity = capacity;
10
+ }
11
+ get(key) {
12
+ const value = this.entries.get(key);
13
+ if (value !== undefined) {
14
+ this.entries.delete(key);
15
+ this.entries.set(key, value);
16
+ }
17
+ return value;
18
+ }
19
+ set(key, value) {
20
+ if (this.capacity === 0) {
21
+ return;
22
+ }
23
+ if (this.entries.has(key)) {
24
+ this.entries.delete(key);
25
+ }
26
+ else if (this.entries.size >= this.capacity) {
27
+ const oldest = this.entries.keys().next().value;
28
+ if (oldest !== undefined) {
29
+ this.entries.delete(oldest);
30
+ }
31
+ }
32
+ this.entries.set(key, value);
33
+ }
34
+ get size() {
35
+ return this.entries.size;
36
+ }
37
+ }
38
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/api/cache.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,OAAO,QAAQ;IACF,QAAQ,CAAQ;IAChB,OAAO,GAAG,IAAI,GAAG,EAAa,CAAA;IAE/C,YAAY,QAAgB;QAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,UAAU,CAAC,yDAAyD,QAAQ,EAAE,CAAC,CAAA;QAC3F,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxB,OAAM;QACR,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;YAC/C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;IAC1B,CAAC;CACF"}