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,49 @@
1
+ import { Decimal } from './decimal.ts';
2
+ import { type QuantityValue, type TypedValue } from './typed-value.ts';
3
+ /** Read a TypedValue as a quantity: System.Quantity directly, FHIR Quantity objects by value+code/unit. */
4
+ export declare function coerceQuantity(item: TypedValue): QuantityValue | undefined;
5
+ /** A quantity as-is, or a number implicitly converted to a unity quantity (spec §5.5). */
6
+ export declare function promoteQuantity(item: TypedValue): QuantityValue | undefined;
7
+ /**
8
+ * Coerce a pair of operands for quantity operations. Integers, Longs, and
9
+ * Decimals implicitly convert to unity quantities (spec §5.5) when the other
10
+ * side is a quantity: `9 = 9 '1'` and `2 * 4 'kg'` both work.
11
+ */
12
+ export declare function coerceQuantityPair(a: TypedValue, b: TypedValue): [QuantityValue, QuantityValue] | undefined;
13
+ /** `4 days` and `1 day` use the same unit; plurals normalize to the singular word. */
14
+ export declare function normalizeCalendarUnit(unit: string): string;
15
+ /**
16
+ * Compare two quantities. Undefined when the units are not comparable: different
17
+ * dimensions, opaque units with different spellings, or calendar words above
18
+ * seconds against UCUM time units (those are only equivalent, spec §6.1).
19
+ */
20
+ export declare function compareQuantities(a: QuantityValue, b: QuantityValue): -1 | 0 | 1 | undefined;
21
+ /**
22
+ * Equivalence: calendar durations match their UCUM twins (`1 year ~ 1 'a'`), and
23
+ * values compare after conversion, rounded to the least precise operand
24
+ * (`4 'g' ~ 4040 'mg'` is true: 4.04 g rounds to 4 at scale 0).
25
+ */
26
+ export declare function quantitiesEquivalent(a: QuantityValue, b: QuantityValue): boolean;
27
+ /** A calendar duration as its loose UCUM twin (`1 year` → `1 'a'`); UCUM passes through. */
28
+ export declare function calendarToUcumLoose(quantity: QuantityValue): QuantityValue;
29
+ /**
30
+ * Convert to another unit. UCUM↔UCUM converts through base dimensions; calendar
31
+ * words convert within their family (`12 months` → `1 year`, `1 week` → `7 days`),
32
+ * and week-and-below calendar words cross into UCUM through their exact twins
33
+ * (`1 'wk'` → `7 days`). Year and month never convert to definite UCUM durations.
34
+ * Undefined when no exact conversion exists.
35
+ */
36
+ export declare function convertQuantity(quantity: QuantityValue, targetUnit: string): QuantityValue | undefined;
37
+ /**
38
+ * Bring two quantities to a shared unit for + and -; the spec picks the more
39
+ * granular (smaller) unit of the two. Undefined when they cannot be converted.
40
+ */
41
+ export declare function alignQuantities(a: QuantityValue, b: QuantityValue): {
42
+ left: Decimal;
43
+ right: Decimal;
44
+ unit: string;
45
+ calendar: boolean;
46
+ } | undefined;
47
+ /** Compose the result unit of quantity multiplication or division. */
48
+ export declare function composeUnits(operator: '*' | '/', a: string, b: string): string;
49
+ //# sourceMappingURL=quantity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quantity.d.ts","sourceRoot":"","sources":["../../src/values/quantity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,KAAK,aAAa,EAAmB,KAAK,UAAU,EAAiB,MAAM,kBAAkB,CAAA;AA+EtG,2GAA2G;AAC3G,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAoB1E;AAED,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,SAAS,CAO3E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,SAAS,CAe3G;AAED,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAgBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAmB5F;AAcD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAShF;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,CAE1E;AAoBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAetG;AAuCD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,aAAa,EAChB,CAAC,EAAE,aAAa,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CA2ChF;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAW9E"}
@@ -0,0 +1,297 @@
1
+ import { Decimal } from "./decimal.js";
2
+ import { asNumeric } from "./numeric.js";
3
+ import { SYSTEM_QUANTITY, typeLocalName } from "./typed-value.js";
4
+ import { canonicalizeUnit, sameDimensions } from "./ucum.js";
5
+ /** FHIR Quantity and its specializations coerce to System.Quantity for comparison. */
6
+ const FHIR_QUANTITY_TYPES = new Set([
7
+ 'Quantity',
8
+ 'Age',
9
+ 'Distance',
10
+ 'Duration',
11
+ 'Count',
12
+ 'SimpleQuantity',
13
+ 'MoneyQuantity',
14
+ ]);
15
+ const CALENDAR_UNITS = {
16
+ year: { plural: 'years', family: 'month', factor: '12', ucum: 'a', exact: false },
17
+ month: { plural: 'months', family: 'month', factor: '1', ucum: 'mo', exact: false },
18
+ week: { plural: 'weeks', family: 'second', factor: '604800', ucum: 'wk', exact: true },
19
+ day: { plural: 'days', family: 'second', factor: '86400', ucum: 'd', exact: true },
20
+ hour: { plural: 'hours', family: 'second', factor: '3600', ucum: 'h', exact: true },
21
+ minute: { plural: 'minutes', family: 'second', factor: '60', ucum: 'min', exact: true },
22
+ second: { plural: 'seconds', family: 'second', factor: '1', ucum: 's', exact: true },
23
+ millisecond: { plural: 'milliseconds', family: 'second', factor: '0.001', ucum: 'ms', exact: true },
24
+ };
25
+ const CALENDAR_UNIT_ENTRIES = Object.entries(CALENDAR_UNITS);
26
+ /** Plural keyword → singular (`years` → `year`). */
27
+ const SINGULAR_CALENDAR_UNITS = Object.fromEntries(CALENDAR_UNIT_ENTRIES.map(([singular, unit]) => [unit.plural, singular]));
28
+ /** Year/month family, factor in months. */
29
+ const MONTH_FAMILY = Object.fromEntries(CALENDAR_UNIT_ENTRIES.filter(([, unit]) => unit.family === 'month').map(([singular, unit]) => [singular, unit.factor]));
30
+ /** Week-and-below family, factor in seconds (all exact). */
31
+ const SECOND_FAMILY = Object.fromEntries(CALENDAR_UNIT_ENTRIES.filter(([, unit]) => unit.family === 'second').map(([singular, unit]) => [
32
+ singular,
33
+ unit.factor,
34
+ ]));
35
+ /** Calendar words that equal their UCUM twin (week and below). */
36
+ const CALENDAR_TO_UCUM_EXACT = Object.fromEntries(CALENDAR_UNIT_ENTRIES.filter(([, unit]) => unit.exact).map(([singular, unit]) => [singular, unit.ucum]));
37
+ /** Every calendar word to its UCUM twin (equivalence-only for year/month). */
38
+ const CALENDAR_TO_UCUM_LOOSE = Object.fromEntries(CALENDAR_UNIT_ENTRIES.map(([singular, unit]) => [singular, unit.ucum]));
39
+ /**
40
+ * FHIR Quantities with UCUM time-valued codes convert to calendar duration
41
+ * keywords (FHIR fhirpath page, "Use of FHIR Quantity"): a Duration of 1 'a'
42
+ * behaves as `1 year`.
43
+ */
44
+ const UCUM_TIME_TO_CALENDAR = Object.fromEntries(CALENDAR_UNIT_ENTRIES.map(([singular, unit]) => [unit.ucum, singular]));
45
+ const UCUM_SYSTEM = 'http://unitsofmeasure.org';
46
+ /** Read a TypedValue as a quantity: System.Quantity directly, FHIR Quantity objects by value+code/unit. */
47
+ export function coerceQuantity(item) {
48
+ if (item.type === SYSTEM_QUANTITY) {
49
+ return item.value;
50
+ }
51
+ if (!(item.type.startsWith('FHIR.') && FHIR_QUANTITY_TYPES.has(typeLocalName(item.type)))) {
52
+ return undefined;
53
+ }
54
+ const raw = item.value;
55
+ if (typeof raw !== 'object' || raw === null || typeof raw.value !== 'number') {
56
+ return undefined;
57
+ }
58
+ const value = Decimal.fromNumber(raw.value);
59
+ if (!value) {
60
+ return undefined;
61
+ }
62
+ if (raw.system === UCUM_SYSTEM && typeof raw.code === 'string' && UCUM_TIME_TO_CALENDAR[raw.code] !== undefined) {
63
+ return { value, unit: UCUM_TIME_TO_CALENDAR[raw.code], calendar: true };
64
+ }
65
+ const unit = typeof raw.code === 'string' ? raw.code : typeof raw.unit === 'string' ? raw.unit : '1';
66
+ return { value, unit, calendar: false };
67
+ }
68
+ /** A quantity as-is, or a number implicitly converted to a unity quantity (spec §5.5). */
69
+ export function promoteQuantity(item) {
70
+ const coerced = coerceQuantity(item);
71
+ if (coerced) {
72
+ return coerced;
73
+ }
74
+ const numeric = asNumeric(item);
75
+ return numeric === undefined ? undefined : { value: numeric.value, unit: '1', calendar: false };
76
+ }
77
+ /**
78
+ * Coerce a pair of operands for quantity operations. Integers, Longs, and
79
+ * Decimals implicitly convert to unity quantities (spec §5.5) when the other
80
+ * side is a quantity: `9 = 9 '1'` and `2 * 4 'kg'` both work.
81
+ */
82
+ export function coerceQuantityPair(a, b) {
83
+ const quantityA = coerceQuantity(a);
84
+ const quantityB = coerceQuantity(b);
85
+ if (quantityA && quantityB) {
86
+ return [quantityA, quantityB];
87
+ }
88
+ if (quantityA) {
89
+ const numeric = asNumeric(b);
90
+ return numeric ? [quantityA, { value: numeric.value, unit: '1', calendar: false }] : undefined;
91
+ }
92
+ if (quantityB) {
93
+ const numeric = asNumeric(a);
94
+ return numeric ? [{ value: numeric.value, unit: '1', calendar: false }, quantityB] : undefined;
95
+ }
96
+ return undefined;
97
+ }
98
+ /** `4 days` and `1 day` use the same unit; plurals normalize to the singular word. */
99
+ export function normalizeCalendarUnit(unit) {
100
+ return SINGULAR_CALENDAR_UNITS[unit] ?? unit;
101
+ }
102
+ function calendarFamily(unit) {
103
+ const singular = normalizeCalendarUnit(unit);
104
+ const monthFactor = MONTH_FAMILY[singular];
105
+ if (monthFactor !== undefined) {
106
+ return { family: 'month', factor: Decimal.fromString(monthFactor) };
107
+ }
108
+ const secondFactor = SECOND_FAMILY[singular];
109
+ if (secondFactor !== undefined) {
110
+ return { family: 'second', factor: Decimal.fromString(secondFactor) };
111
+ }
112
+ /* v8 ignore next 2 -- the lexer only produces the units above */
113
+ return undefined;
114
+ }
115
+ /**
116
+ * Compare two quantities. Undefined when the units are not comparable: different
117
+ * dimensions, opaque units with different spellings, or calendar words above
118
+ * seconds against UCUM time units (those are only equivalent, spec §6.1).
119
+ */
120
+ export function compareQuantities(a, b) {
121
+ if (a.calendar && b.calendar) {
122
+ const familyA = calendarFamily(a.unit);
123
+ const familyB = calendarFamily(b.unit);
124
+ if (!(familyA && familyB) || familyA.family !== familyB.family) {
125
+ return undefined;
126
+ }
127
+ return a.value.multiply(familyA.factor).compare(b.value.multiply(familyB.factor));
128
+ }
129
+ if (a.calendar || b.calendar) {
130
+ const [calendar, ucum] = a.calendar ? [a, b] : [b, a];
131
+ const exactTwin = CALENDAR_TO_UCUM_EXACT[normalizeCalendarUnit(calendar.unit)];
132
+ if (exactTwin === undefined) {
133
+ return undefined;
134
+ }
135
+ const comparison = compareUcum({ ...calendar, unit: exactTwin, calendar: false }, ucum);
136
+ return comparison === undefined ? undefined : a.calendar ? comparison : -comparison;
137
+ }
138
+ return compareUcum(a, b);
139
+ }
140
+ function compareUcum(a, b) {
141
+ if (a.unit === b.unit) {
142
+ return a.value.compare(b.value);
143
+ }
144
+ const canonicalA = canonicalizeUnit(a.unit);
145
+ const canonicalB = canonicalizeUnit(b.unit);
146
+ if (!(canonicalA && canonicalB && sameDimensions(canonicalA, canonicalB))) {
147
+ return undefined;
148
+ }
149
+ return a.value.multiply(canonicalA.factor).compare(b.value.multiply(canonicalB.factor));
150
+ }
151
+ /**
152
+ * Equivalence: calendar durations match their UCUM twins (`1 year ~ 1 'a'`), and
153
+ * values compare after conversion, rounded to the least precise operand
154
+ * (`4 'g' ~ 4040 'mg'` is true: 4.04 g rounds to 4 at scale 0).
155
+ */
156
+ export function quantitiesEquivalent(a, b) {
157
+ const ucumA = asUcum(a);
158
+ const ucumB = asUcum(b);
159
+ const scale = Math.max(Math.min(a.value.scale, b.value.scale), 0);
160
+ const converted = convertQuantity(ucumB, ucumA.unit);
161
+ if (converted !== undefined) {
162
+ return ucumA.value.round(scale).equals(converted.value.round(scale));
163
+ }
164
+ return compareUcum({ ...ucumA, value: ucumA.value.round(scale) }, { ...ucumB, value: ucumB.value.round(scale) }) === 0;
165
+ }
166
+ /** A calendar duration as its loose UCUM twin (`1 year` → `1 'a'`); UCUM passes through. */
167
+ export function calendarToUcumLoose(quantity) {
168
+ return asUcum(quantity);
169
+ }
170
+ function asUcum(quantity) {
171
+ if (!quantity.calendar) {
172
+ return quantity;
173
+ }
174
+ const twin = CALENDAR_TO_UCUM_LOOSE[normalizeCalendarUnit(quantity.unit)];
175
+ /* v8 ignore next 3 -- every calendar word has a loose twin */
176
+ if (twin === undefined) {
177
+ return quantity;
178
+ }
179
+ return { ...quantity, unit: twin, calendar: false };
180
+ }
181
+ /** True for `year`/`days`/... — never for UCUM codes like `wk` or `mo`. */
182
+ function isCalendarWord(unit) {
183
+ const singular = normalizeCalendarUnit(unit);
184
+ return MONTH_FAMILY[singular] !== undefined || SECOND_FAMILY[singular] !== undefined;
185
+ }
186
+ /**
187
+ * Convert to another unit. UCUM↔UCUM converts through base dimensions; calendar
188
+ * words convert within their family (`12 months` → `1 year`, `1 week` → `7 days`),
189
+ * and week-and-below calendar words cross into UCUM through their exact twins
190
+ * (`1 'wk'` → `7 days`). Year and month never convert to definite UCUM durations.
191
+ * Undefined when no exact conversion exists.
192
+ */
193
+ export function convertQuantity(quantity, targetUnit) {
194
+ if (quantity.unit === targetUnit && !quantity.calendar === !isCalendarWord(targetUnit)) {
195
+ return quantity;
196
+ }
197
+ const targetIsCalendar = isCalendarWord(targetUnit);
198
+ if (quantity.calendar || targetIsCalendar) {
199
+ return convertCalendar(quantity, targetUnit, targetIsCalendar);
200
+ }
201
+ const source = canonicalizeUnit(quantity.unit);
202
+ const target = canonicalizeUnit(targetUnit);
203
+ if (!(source && target && sameDimensions(source, target))) {
204
+ return undefined;
205
+ }
206
+ const converted = quantity.value.multiply(source.factor).divide(target.factor);
207
+ return converted === undefined ? undefined : { value: converted, unit: targetUnit, calendar: false };
208
+ }
209
+ function convertCalendar(quantity, targetUnit, targetIsCalendar) {
210
+ const sourceFamily = quantity.calendar ? calendarFamily(quantity.unit) : undefined;
211
+ const targetFamily = targetIsCalendar ? calendarFamily(normalizeCalendarUnit(targetUnit)) : undefined;
212
+ if (quantity.calendar && targetIsCalendar) {
213
+ if (!(sourceFamily && targetFamily) || sourceFamily.family !== targetFamily.family) {
214
+ return undefined;
215
+ }
216
+ const converted = quantity.value.multiply(sourceFamily.factor).divide(targetFamily.factor);
217
+ return converted === undefined ? undefined : { value: converted, unit: targetUnit, calendar: true };
218
+ }
219
+ if (quantity.calendar) {
220
+ // Calendar → UCUM: only week-and-below are definite; year/month stay calendar-only.
221
+ if (sourceFamily?.family !== 'second') {
222
+ return undefined;
223
+ }
224
+ const twin = CALENDAR_TO_UCUM_EXACT[normalizeCalendarUnit(quantity.unit)];
225
+ return convertQuantity({ value: quantity.value, unit: twin, calendar: false }, targetUnit);
226
+ }
227
+ // UCUM → calendar word: cross through seconds; year/month targets are indefinite.
228
+ if (targetFamily?.family !== 'second') {
229
+ return undefined;
230
+ }
231
+ const source = canonicalizeUnit(quantity.unit);
232
+ const secondsPerTarget = canonicalizeUnit(CALENDAR_TO_UCUM_EXACT[normalizeCalendarUnit(targetUnit)]);
233
+ if (!(source && sameDimensions(source, secondsPerTarget))) {
234
+ return undefined;
235
+ }
236
+ const converted = quantity.value.multiply(source.factor).divide(secondsPerTarget.factor);
237
+ return converted === undefined ? undefined : { value: converted, unit: targetUnit, calendar: true };
238
+ }
239
+ /**
240
+ * Bring two quantities to a shared unit for + and -; the spec picks the more
241
+ * granular (smaller) unit of the two. Undefined when they cannot be converted.
242
+ */
243
+ export function alignQuantities(a, b) {
244
+ if (a.unit === b.unit && a.calendar === b.calendar) {
245
+ return { left: a.value, right: b.value, unit: a.unit, calendar: a.calendar };
246
+ }
247
+ if (a.calendar && b.calendar) {
248
+ const familyA = calendarFamily(a.unit);
249
+ const familyB = calendarFamily(b.unit);
250
+ if (!(familyA && familyB) || familyA.family !== familyB.family) {
251
+ return undefined;
252
+ }
253
+ const smaller = familyA.factor.compare(familyB.factor) <= 0 ? a : b;
254
+ const factor = calendarFamily(smaller.unit)?.factor;
255
+ return {
256
+ left: a.value.multiply(familyA.factor).divide(factor),
257
+ right: b.value.multiply(familyB.factor).divide(factor),
258
+ unit: normalizeCalendarUnit(smaller.unit),
259
+ calendar: true,
260
+ };
261
+ }
262
+ if (a.calendar || b.calendar) {
263
+ const exactA = a.calendar ? CALENDAR_TO_UCUM_EXACT[normalizeCalendarUnit(a.unit)] : a.unit;
264
+ const exactB = b.calendar ? CALENDAR_TO_UCUM_EXACT[normalizeCalendarUnit(b.unit)] : b.unit;
265
+ if (exactA === undefined || exactB === undefined) {
266
+ return undefined;
267
+ }
268
+ return alignQuantities({ value: a.value, unit: exactA, calendar: false }, { value: b.value, unit: exactB, calendar: false });
269
+ }
270
+ const canonicalA = canonicalizeUnit(a.unit);
271
+ const canonicalB = canonicalizeUnit(b.unit);
272
+ if (!(canonicalA && canonicalB && sameDimensions(canonicalA, canonicalB))) {
273
+ return undefined;
274
+ }
275
+ const targetUnit = canonicalA.factor.compare(canonicalB.factor) <= 0 ? a.unit : b.unit;
276
+ const left = convertQuantity(a, targetUnit);
277
+ const right = convertQuantity(b, targetUnit);
278
+ /* v8 ignore next 3 -- both conversions share the dimensions checked above */
279
+ if (!(left && right)) {
280
+ return undefined;
281
+ }
282
+ return { left: left.value, right: right.value, unit: targetUnit, calendar: false };
283
+ }
284
+ /** Compose the result unit of quantity multiplication or division. */
285
+ export function composeUnits(operator, a, b) {
286
+ if (operator === '*') {
287
+ if (a === '1') {
288
+ return b;
289
+ }
290
+ return b === '1' ? a : `${a}.${b}`;
291
+ }
292
+ if (a === b) {
293
+ return '1';
294
+ }
295
+ return b === '1' ? a : `${a}/${b}`;
296
+ }
297
+ //# sourceMappingURL=quantity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quantity.js","sourceRoot":"","sources":["../../src/values/quantity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Temporal } from './datetime.ts';
2
+ import type { QuantityValue } from './typed-value.ts';
3
+ interface Duration {
4
+ /** Component level the duration applies to (0=year ... 6=millisecond). */
5
+ level: number;
6
+ /** Amount in that component's unit; may be fractional only at the seconds level. */
7
+ amount: number;
8
+ }
9
+ /**
10
+ * `temporal ± quantity` (spec §6.6.7): the duration converts down to the value's
11
+ * precision with truncation (`@2014 + 23 months` adds 1 year), calendar components
12
+ * roll over, and day-of-month clamps (`@2020-01-31 + 1 month` → `@2020-02-29`).
13
+ * Undefined when the resulting year leaves 0001–9999.
14
+ */
15
+ export declare function addDuration(temporal: Temporal, quantity: QuantityValue, sign: 1 | -1): Temporal | undefined;
16
+ export type { Duration };
17
+ //# sourceMappingURL=temporal-arithmetic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-arithmetic.d.ts","sourceRoot":"","sources":["../../src/values/temporal-arithmetic.ts"],"names":[],"mappings":"AACA,OAAO,EAA0C,QAAQ,EAA0B,MAAM,eAAe,CAAA;AAExG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAiCrD,UAAU,QAAQ;IAChB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,oFAAoF;IACpF,MAAM,EAAE,MAAM,CAAA;CACf;AAoCD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAoC3G;AA+GD,YAAY,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,183 @@
1
+ import { FhirPathRuntimeError } from "../errors.js";
2
+ import { daysInMonth, GREGORIAN_UTC_YEAR_OFFSET, Temporal } from "./datetime.js";
3
+ import { normalizeCalendarUnit } from "./quantity.js";
4
+ /** Position of each precision on the component ladder used for duration conversion. */
5
+ const COMPONENT_LEVELS = {
6
+ year: 0,
7
+ month: 1,
8
+ day: 2,
9
+ hour: 3,
10
+ minute: 4,
11
+ second: 5,
12
+ millisecond: 6,
13
+ };
14
+ /** Truncated-division factors for converting a duration one level up (day→month uses 30). */
15
+ const UP_CONVERSION_FACTORS = [12, 30, 24, 60, 60, 1000];
16
+ const UCUM_TIME_UNITS = {
17
+ wk: { level: 2, multiplier: 7 },
18
+ d: { level: 2, multiplier: 1 },
19
+ h: { level: 3, multiplier: 1 },
20
+ min: { level: 4, multiplier: 1 },
21
+ s: { level: 5, multiplier: 1 },
22
+ ms: { level: 6, multiplier: 1 },
23
+ };
24
+ const MS_PER_LEVEL = {
25
+ 2: 86400000,
26
+ 3: 3600000,
27
+ 4: 60000,
28
+ 5: 1000,
29
+ 6: 1,
30
+ };
31
+ function resolveDuration(quantity) {
32
+ // The decimal portion of units above seconds is ignored (spec §6.6.7, official
33
+ // testPlusDate2: 7.7 days adds 7) — truncate before any week/day expansion.
34
+ const value = quantity.value.toNumber();
35
+ const wholeAmount = Math.trunc(value);
36
+ const unit = normalizeCalendarUnit(quantity.unit);
37
+ if (COMPONENT_LEVELS[unit] !== undefined || unit === 'week') {
38
+ if (unit === 'week') {
39
+ return { level: 2, amount: wholeAmount * 7 };
40
+ }
41
+ const level = COMPONENT_LEVELS[unit];
42
+ return { level, amount: level >= 5 ? value : wholeAmount };
43
+ }
44
+ if (quantity.calendar) {
45
+ /* v8 ignore next 2 -- the lexer only produces the calendar words above */
46
+ throw new FhirPathRuntimeError(`Unknown calendar duration unit '${quantity.unit}'`);
47
+ }
48
+ const ucum = UCUM_TIME_UNITS[quantity.unit];
49
+ if (!ucum) {
50
+ // The spec reserves UCUM 'a' and 'mo' (definite 365/30-day durations) as errors
51
+ // for calendar arithmetic; calendar words must be used instead.
52
+ throw new FhirPathRuntimeError(`Cannot use UCUM unit '${quantity.unit}' for date/time arithmetic; use a calendar duration keyword`);
53
+ }
54
+ const amount = ucum.level >= 5 ? value * ucum.multiplier : wholeAmount * ucum.multiplier;
55
+ return { level: ucum.level, amount };
56
+ }
57
+ /** Week is not a real component; it resolves to days before this table is consulted. */
58
+ function precisionLevel(precision) {
59
+ return COMPONENT_LEVELS[precision];
60
+ }
61
+ /**
62
+ * `temporal ± quantity` (spec §6.6.7): the duration converts down to the value's
63
+ * precision with truncation (`@2014 + 23 months` adds 1 year), calendar components
64
+ * roll over, and day-of-month clamps (`@2020-01-31 + 1 month` → `@2020-02-29`).
65
+ * Undefined when the resulting year leaves 0001–9999.
66
+ */
67
+ export function addDuration(temporal, quantity, sign) {
68
+ const duration = resolveDuration(quantity);
69
+ // Times have no year/month/day components to add to.
70
+ const dayLevel = 2;
71
+ if (temporal.kind === 'time' && duration.level <= dayLevel) {
72
+ throw new FhirPathRuntimeError(`Cannot add a quantity of '${quantity.unit}' to a Time value`);
73
+ }
74
+ let level = duration.level;
75
+ let amount = duration.amount * sign;
76
+ let targetLevel = Math.min(precisionLevel(temporal.precision), temporal.kind === 'date' ? 2 : 6);
77
+ // Fractional seconds add as milliseconds (R5); millisecond-level additions
78
+ // extend a second-precision value to milliseconds instead of truncating.
79
+ if (level === 5 && !Number.isInteger(amount)) {
80
+ level = 6;
81
+ amount = Math.round(amount * 1000);
82
+ }
83
+ if (level === 6 && targetLevel === 5) {
84
+ targetLevel = 6;
85
+ }
86
+ while (level > targetLevel) {
87
+ if (level === 2 && targetLevel === 0) {
88
+ // Days convert straight to years; going through 30-day months undercounts.
89
+ amount = Math.trunc(amount / 365);
90
+ level = 0;
91
+ break;
92
+ }
93
+ amount = Math.trunc(amount / UP_CONVERSION_FACTORS[level - 1]);
94
+ level -= 1;
95
+ }
96
+ if (amount === 0) {
97
+ return temporal;
98
+ }
99
+ if (level <= 1) {
100
+ return addCalendarComponent(temporal, level, amount);
101
+ }
102
+ return addMilliseconds(temporal, amount * MS_PER_LEVEL[level]);
103
+ }
104
+ function addCalendarComponent(temporal, level, amount) {
105
+ let year = temporal.year;
106
+ let month = temporal.month;
107
+ if (level === 0) {
108
+ year += amount;
109
+ }
110
+ else {
111
+ const zeroBased = (month ?? 1) - 1 + amount;
112
+ year += Math.floor(zeroBased / 12);
113
+ month = (((zeroBased % 12) + 12) % 12) + 1;
114
+ }
115
+ if (year < 1 || year > 9999) {
116
+ return undefined;
117
+ }
118
+ let day = temporal.day;
119
+ if (day !== undefined && month !== undefined) {
120
+ day = Math.min(day, daysInMonth(year, month));
121
+ }
122
+ return rebuild(temporal, { year, month, day });
123
+ }
124
+ function addMilliseconds(temporal, deltaMs) {
125
+ if (temporal.kind === 'time') {
126
+ const baseMs = (temporal.hour ?? 0) * 3600000 +
127
+ (temporal.minute ?? 0) * 60000 +
128
+ Math.round(((temporal.second ?? 0) + fractionOf(temporal)) * 1000);
129
+ // Time arithmetic wraps around the day.
130
+ const dayMs = 86400000;
131
+ const total = (((baseMs + deltaMs) % dayMs) + dayMs) % dayMs;
132
+ return rebuild(temporal, componentsFromDayMs(total, temporal));
133
+ }
134
+ const shifted = new Date(Date.UTC(temporal.year + GREGORIAN_UTC_YEAR_OFFSET, (temporal.month ?? 1) - 1, temporal.day ?? 1, temporal.hour ?? 0, temporal.minute ?? 0, 0, Math.round(((temporal.second ?? 0) + fractionOf(temporal)) * 1000) + deltaMs));
135
+ const year = shifted.getUTCFullYear() - 400;
136
+ if (year < 1 || year > 9999) {
137
+ return undefined;
138
+ }
139
+ return rebuild(temporal, {
140
+ year,
141
+ month: temporal.month === undefined ? undefined : shifted.getUTCMonth() + 1,
142
+ day: temporal.day === undefined ? undefined : shifted.getUTCDate(),
143
+ hour: temporal.hour === undefined ? undefined : shifted.getUTCHours(),
144
+ minute: temporal.minute === undefined ? undefined : shifted.getUTCMinutes(),
145
+ second: temporal.second === undefined ? undefined : shifted.getUTCSeconds(),
146
+ fraction: temporal.fraction === undefined && shifted.getUTCMilliseconds() === 0
147
+ ? undefined
148
+ : String(shifted.getUTCMilliseconds()).padStart(3, '0'),
149
+ });
150
+ }
151
+ function componentsFromDayMs(totalMs, temporal) {
152
+ const hour = Math.floor(totalMs / 3600000);
153
+ const minute = Math.floor((totalMs % 3600000) / 60000);
154
+ const second = Math.floor((totalMs % 60000) / 1000);
155
+ const ms = totalMs % 1000;
156
+ return {
157
+ hour,
158
+ minute: temporal.minute === undefined ? undefined : minute,
159
+ second: temporal.second === undefined ? undefined : second,
160
+ fraction: temporal.fraction === undefined && ms === 0 ? undefined : String(ms).padStart(3, '0'),
161
+ };
162
+ }
163
+ function fractionOf(temporal) {
164
+ return temporal.fraction === undefined ? 0 : Number.parseFloat(`0.${temporal.fraction}`);
165
+ }
166
+ function rebuild(temporal, overrides) {
167
+ const rebuilt = Temporal.fromFields(temporal.kind, {
168
+ year: 'year' in overrides ? overrides.year : temporal.year,
169
+ month: 'month' in overrides ? overrides.month : temporal.month,
170
+ day: 'day' in overrides ? overrides.day : temporal.day,
171
+ hour: 'hour' in overrides ? overrides.hour : temporal.hour,
172
+ minute: 'minute' in overrides ? overrides.minute : temporal.minute,
173
+ second: 'second' in overrides ? overrides.second : temporal.second,
174
+ fraction: 'fraction' in overrides ? overrides.fraction : temporal.fraction,
175
+ timezoneOffsetMinutes: temporal.timezoneOffsetMinutes,
176
+ });
177
+ /* v8 ignore next 3 -- arithmetic always produces in-range components */
178
+ if (!rebuilt) {
179
+ throw new FhirPathRuntimeError('Date/time arithmetic produced an invalid value');
180
+ }
181
+ return rebuilt;
182
+ }
183
+ //# sourceMappingURL=temporal-arithmetic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-arithmetic.js","sourceRoot":"","sources":["../../src/values/temporal-arithmetic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type Temporal } from './datetime.ts';
2
+ export type TemporalComparison = -1 | 0 | 1 | 'differentPrecision' | 'incompatible';
3
+ /**
4
+ * Compare two temporal values per spec §6.1/§6.4: equal at the shared precision but
5
+ * with different precisions → 'differentPrecision' (empty for `=` and `<`); a time
6
+ * never compares with a date/dateTime. Values without a timezone are treated as UTC.
7
+ */
8
+ export declare function compareTemporal(a: Temporal, b: Temporal): TemporalComparison;
9
+ //# sourceMappingURL=temporal-compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-compare.d.ts","sourceRoot":"","sources":["../../src/values/temporal-compare.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AAUxE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,oBAAoB,GAAG,cAAc,CAAA;AAEnF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,kBAAkB,CAoB5E"}