solve-engine 1.2.0 → 2.0.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 (384) hide show
  1. package/README.md +12 -17
  2. package/dist/{BytecodeBuilder-Bp9xeTmX.d.cts → BytecodeBuilder-DGGeByAP.d.cts} +18 -0
  3. package/dist/{BytecodeBuilder-Bp9xeTmX.d.ts → BytecodeBuilder-DGGeByAP.d.ts} +18 -0
  4. package/dist/{Configuration-C9W8tJv_.d.cts → Configuration-B6W0-T67.d.cts} +17 -4
  5. package/dist/{Configuration-C9W8tJv_.d.ts → Configuration-B6W0-T67.d.ts} +17 -4
  6. package/dist/{EngineError-CNA_rHY-.d.cts → EngineError-Ce1lPkjZ.d.cts} +2 -0
  7. package/dist/{EngineError-CNA_rHY-.d.ts → EngineError-Ce1lPkjZ.d.ts} +2 -0
  8. package/dist/{PackageCompatibility-B6NX9IaN.d.cts → PackageCompatibility-Bn5jnBtA.d.cts} +2 -2
  9. package/dist/{PackageCompatibility-Ceg5XdAp.d.ts → PackageCompatibility-CIvq2MP5.d.ts} +2 -2
  10. package/dist/{PackageRegistry-DrCPQNyy.d.ts → PackageRegistry-DzeiWcv4.d.ts} +93 -172
  11. package/dist/{PackageRegistry-DnJYVw9G.d.cts → PackageRegistry-dpdurBVO.d.cts} +93 -172
  12. package/dist/{Parselet-Bhf7d0_W.d.ts → Parselet-B-zoPrTa.d.ts} +8 -5
  13. package/dist/{Parselet-Cv7S7KRt.d.cts → Parselet-C4Wu055_.d.cts} +8 -5
  14. package/dist/{ScopeManager-Bzq87GfA.d.ts → ScopeManager-C2LDOrDx.d.ts} +7 -16
  15. package/dist/{ScopeManager-DRDBVfan.d.cts → ScopeManager-D7uMXbhS.d.cts} +7 -16
  16. package/dist/{VMCheckpoints-C6c17Hbo.d.ts → VMCheckpoints-CGyFhivM.d.ts} +3 -3
  17. package/dist/{VMCheckpoints-dZxSMGHG.d.cts → VMCheckpoints-I9jg3jWR.d.cts} +3 -3
  18. package/dist/{Value-DZNQ_PU7.d.cts → Value-CCi_Eecs.d.cts} +40 -0
  19. package/dist/{Value-DZNQ_PU7.d.ts → Value-CCi_Eecs.d.ts} +40 -0
  20. package/dist/{WorkerError-Djd7GGGa.d.cts → WorkerError-B4p6PNfx.d.cts} +1 -1
  21. package/dist/{WorkerError-B7t7R2-m.d.ts → WorkerError-Dhj9BQ_A.d.ts} +1 -1
  22. package/dist/chunk-2JMFUQZH.js +2 -0
  23. package/dist/chunk-2JMFUQZH.js.map +1 -0
  24. package/dist/chunk-2RWAXT6O.js +0 -1
  25. package/dist/chunk-4BZIYU7S.cjs +3 -0
  26. package/dist/chunk-4BZIYU7S.cjs.map +1 -0
  27. package/dist/chunk-4J7XZSZJ.cjs +5 -0
  28. package/dist/chunk-4J7XZSZJ.cjs.map +1 -0
  29. package/dist/chunk-4QVBSG6B.cjs +2 -0
  30. package/dist/chunk-4QVBSG6B.cjs.map +1 -0
  31. package/dist/chunk-5IJD5L3O.cjs +2 -0
  32. package/dist/chunk-5IJD5L3O.cjs.map +1 -0
  33. package/dist/chunk-62LMTO4F.js +2 -0
  34. package/dist/chunk-62LMTO4F.js.map +1 -0
  35. package/dist/chunk-6CY44ZPG.js +2 -0
  36. package/dist/chunk-6CY44ZPG.js.map +1 -0
  37. package/dist/chunk-6G3PMEPA.js +2 -0
  38. package/dist/chunk-6G3PMEPA.js.map +1 -0
  39. package/dist/chunk-6INX773F.cjs +2 -0
  40. package/dist/chunk-6INX773F.cjs.map +1 -0
  41. package/dist/chunk-6KFVG6UY.cjs +2 -0
  42. package/dist/{chunk-YJHY7CMN.cjs.map → chunk-6KFVG6UY.cjs.map} +1 -1
  43. package/dist/chunk-76F3LCIL.js +4 -0
  44. package/dist/chunk-76F3LCIL.js.map +1 -0
  45. package/dist/chunk-7GK3XEZF.js +2 -0
  46. package/dist/chunk-7GK3XEZF.js.map +1 -0
  47. package/dist/chunk-APN442VD.cjs +2 -0
  48. package/dist/chunk-APN442VD.cjs.map +1 -0
  49. package/dist/chunk-AXMQG5TS.cjs +2 -0
  50. package/dist/chunk-AXMQG5TS.cjs.map +1 -0
  51. package/dist/chunk-CIQOK7Q4.cjs +2 -0
  52. package/dist/chunk-CIQOK7Q4.cjs.map +1 -0
  53. package/dist/chunk-E6Z4NQAS.js +2 -0
  54. package/dist/chunk-E6Z4NQAS.js.map +1 -0
  55. package/dist/chunk-EFJCC6FJ.cjs +2 -0
  56. package/dist/chunk-EFJCC6FJ.cjs.map +1 -0
  57. package/dist/chunk-ESUN2THE.cjs +2 -0
  58. package/dist/chunk-ESUN2THE.cjs.map +1 -0
  59. package/dist/chunk-EVAOPEO4.js +2 -0
  60. package/dist/chunk-EVAOPEO4.js.map +1 -0
  61. package/dist/chunk-EYRBENHC.js +3 -0
  62. package/dist/chunk-EYRBENHC.js.map +1 -0
  63. package/dist/chunk-FDE5HWDI.cjs +2 -0
  64. package/dist/chunk-FDE5HWDI.cjs.map +1 -0
  65. package/dist/chunk-FWW3M36J.cjs +2 -0
  66. package/dist/chunk-FWW3M36J.cjs.map +1 -0
  67. package/dist/chunk-GOIQYUWV.js +2 -0
  68. package/dist/chunk-GOIQYUWV.js.map +1 -0
  69. package/dist/chunk-HFKDWQUL.js +2 -0
  70. package/dist/chunk-HFKDWQUL.js.map +1 -0
  71. package/dist/chunk-HLBYHXQD.cjs +3 -0
  72. package/dist/chunk-HLBYHXQD.cjs.map +1 -0
  73. package/dist/chunk-IANAMBJQ.cjs +2 -0
  74. package/dist/chunk-IANAMBJQ.cjs.map +1 -0
  75. package/dist/chunk-IJMNVBIS.js +2 -0
  76. package/dist/chunk-IJMNVBIS.js.map +1 -0
  77. package/dist/chunk-J4LZD4ZY.js +3 -0
  78. package/dist/chunk-J4LZD4ZY.js.map +1 -0
  79. package/dist/chunk-JAK3RAFA.cjs +2 -0
  80. package/dist/chunk-JAK3RAFA.cjs.map +1 -0
  81. package/dist/chunk-JFAJN3C2.cjs +2 -0
  82. package/dist/chunk-JFAJN3C2.cjs.map +1 -0
  83. package/dist/chunk-JPFCXLJV.js +2 -0
  84. package/dist/chunk-JPFCXLJV.js.map +1 -0
  85. package/dist/chunk-JSPKKNPQ.js +3 -0
  86. package/dist/chunk-JSPKKNPQ.js.map +1 -0
  87. package/dist/chunk-L3FPQSGN.js +2 -0
  88. package/dist/chunk-L3FPQSGN.js.map +1 -0
  89. package/dist/chunk-LR4E4A4W.cjs +2 -0
  90. package/dist/chunk-LR4E4A4W.cjs.map +1 -0
  91. package/dist/chunk-MIQBJGGR.js +2 -0
  92. package/dist/chunk-MIQBJGGR.js.map +1 -0
  93. package/dist/chunk-MPB7KUN5.js +3 -0
  94. package/dist/chunk-MPB7KUN5.js.map +1 -0
  95. package/dist/chunk-MSYX32PF.cjs +2 -0
  96. package/dist/chunk-MSYX32PF.cjs.map +1 -0
  97. package/dist/chunk-MVZUTETT.js +2 -0
  98. package/dist/chunk-MVZUTETT.js.map +1 -0
  99. package/dist/chunk-N7N7MPMK.cjs +2 -0
  100. package/dist/chunk-N7N7MPMK.cjs.map +1 -0
  101. package/dist/chunk-NGBBNL4K.cjs +1 -3
  102. package/dist/chunk-P6WPEUAJ.cjs +2 -0
  103. package/dist/chunk-P6WPEUAJ.cjs.map +1 -0
  104. package/dist/chunk-PS272DZJ.cjs +2 -0
  105. package/dist/chunk-PS272DZJ.cjs.map +1 -0
  106. package/dist/chunk-QXQE7X4S.js +2 -0
  107. package/dist/chunk-QXQE7X4S.js.map +1 -0
  108. package/dist/chunk-R2ENWQ76.js +2 -0
  109. package/dist/chunk-R2ENWQ76.js.map +1 -0
  110. package/dist/chunk-R2SZFJTT.cjs +2 -0
  111. package/dist/chunk-R2SZFJTT.cjs.map +1 -0
  112. package/dist/chunk-RAF57WYO.js +2 -0
  113. package/dist/chunk-RAF57WYO.js.map +1 -0
  114. package/dist/chunk-RSF25YSJ.js +2 -0
  115. package/dist/chunk-RSF25YSJ.js.map +1 -0
  116. package/dist/chunk-SOMGSIO4.cjs +3 -0
  117. package/dist/chunk-SOMGSIO4.cjs.map +1 -0
  118. package/dist/chunk-SUXRZWH2.cjs +3 -0
  119. package/dist/chunk-SUXRZWH2.cjs.map +1 -0
  120. package/dist/chunk-SYYE3QAX.cjs +2 -0
  121. package/dist/chunk-SYYE3QAX.cjs.map +1 -0
  122. package/dist/chunk-SZGK6RIP.cjs +2 -0
  123. package/dist/chunk-SZGK6RIP.cjs.map +1 -0
  124. package/dist/chunk-TCZSPH4A.js +2 -0
  125. package/dist/chunk-TCZSPH4A.js.map +1 -0
  126. package/dist/chunk-TLG7VZRX.cjs +2 -0
  127. package/dist/chunk-TLG7VZRX.cjs.map +1 -0
  128. package/dist/chunk-TRBXW6HW.js +2 -0
  129. package/dist/{chunk-AQNHHJMJ.cjs.map → chunk-TRBXW6HW.js.map} +1 -1
  130. package/dist/chunk-TTFO4YDP.cjs +2 -0
  131. package/dist/chunk-TTFO4YDP.cjs.map +1 -0
  132. package/dist/chunk-TWC7K3ZX.js +2 -0
  133. package/dist/chunk-TWC7K3ZX.js.map +1 -0
  134. package/dist/chunk-UDQ57ZRX.cjs +2 -0
  135. package/dist/chunk-UDQ57ZRX.cjs.map +1 -0
  136. package/dist/chunk-UI6IFGBT.js +2 -0
  137. package/dist/chunk-UI6IFGBT.js.map +1 -0
  138. package/dist/chunk-UURM7P3P.cjs +4 -0
  139. package/dist/chunk-UURM7P3P.cjs.map +1 -0
  140. package/dist/chunk-W2JAR233.js +2 -0
  141. package/dist/chunk-W2JAR233.js.map +1 -0
  142. package/dist/chunk-WGZ3FNHI.js +2 -0
  143. package/dist/chunk-WGZ3FNHI.js.map +1 -0
  144. package/dist/chunk-WN5CMP4T.cjs +3 -0
  145. package/dist/chunk-WN5CMP4T.cjs.map +1 -0
  146. package/dist/chunk-XEIDV5JP.js +2 -0
  147. package/dist/chunk-XEIDV5JP.js.map +1 -0
  148. package/dist/chunk-XNIWQHXY.js +2 -0
  149. package/dist/chunk-XNIWQHXY.js.map +1 -0
  150. package/dist/chunk-XR7HEC7B.js +5 -0
  151. package/dist/chunk-XR7HEC7B.js.map +1 -0
  152. package/dist/chunk-Y7O4D3BJ.cjs +2 -0
  153. package/dist/chunk-Y7O4D3BJ.cjs.map +1 -0
  154. package/dist/chunk-YAYBVVG2.js +3 -0
  155. package/dist/chunk-YAYBVVG2.js.map +1 -0
  156. package/dist/chunk-YJ2OPULK.js +2 -0
  157. package/dist/chunk-YJ2OPULK.js.map +1 -0
  158. package/dist/chunk-YVKHEAFT.js +2 -0
  159. package/dist/chunk-YVKHEAFT.js.map +1 -0
  160. package/dist/chunk-ZCNBT44X.cjs +2 -0
  161. package/dist/chunk-ZCNBT44X.cjs.map +1 -0
  162. package/dist/chunk-ZLRJ7TDP.cjs +2 -0
  163. package/dist/chunk-ZLRJ7TDP.cjs.map +1 -0
  164. package/dist/constants.cjs +1 -21
  165. package/dist/constants.d.cts +1 -1
  166. package/dist/constants.d.ts +1 -1
  167. package/dist/constants.js +1 -4
  168. package/dist/engine.cjs +1 -94
  169. package/dist/engine.d.cts +10 -11
  170. package/dist/engine.d.ts +10 -11
  171. package/dist/engine.js +1 -37
  172. package/dist/errors.cjs +1 -105
  173. package/dist/errors.d.cts +3 -3
  174. package/dist/errors.d.ts +3 -3
  175. package/dist/errors.js +1 -4
  176. package/dist/format.cjs +1 -26
  177. package/dist/format.d.cts +2 -2
  178. package/dist/format.d.ts +2 -2
  179. package/dist/format.js +1 -9
  180. package/dist/index.cjs +1 -314
  181. package/dist/index.cjs.map +1 -1
  182. package/dist/index.d.cts +52 -20
  183. package/dist/index.d.ts +52 -20
  184. package/dist/index.js +1 -278
  185. package/dist/index.js.map +1 -1
  186. package/dist/language.cjs +1 -369
  187. package/dist/language.cjs.map +1 -1
  188. package/dist/language.d.cts +9 -10
  189. package/dist/language.d.ts +9 -10
  190. package/dist/language.js +1 -348
  191. package/dist/language.js.map +1 -1
  192. package/dist/lexer.cjs +1 -63
  193. package/dist/lexer.js +1 -10
  194. package/dist/normalizer.cjs +1 -39
  195. package/dist/normalizer.js +1 -10
  196. package/dist/packages.cjs +1 -132
  197. package/dist/packages.d.cts +8 -9
  198. package/dist/packages.d.ts +8 -9
  199. package/dist/packages.js +1 -23
  200. package/dist/parser.cjs +1 -54
  201. package/dist/parser.d.cts +8 -8
  202. package/dist/parser.d.ts +8 -8
  203. package/dist/parser.js +1 -9
  204. package/dist/{pipeline-D-PS9gVw.d.ts → pipeline-72QmQlGx.d.ts} +1 -1
  205. package/dist/{pipeline-DtSBJ8TS.d.cts → pipeline-DCQicwWX.d.cts} +1 -1
  206. package/dist/resolvers.cjs +1 -12
  207. package/dist/resolvers.d.cts +2 -2
  208. package/dist/resolvers.d.ts +2 -2
  209. package/dist/resolvers.js +1 -3
  210. package/dist/services.cjs +1 -20
  211. package/dist/services.js +1 -3
  212. package/dist/testing.cjs +3 -477
  213. package/dist/testing.cjs.map +1 -1
  214. package/dist/testing.d.cts +9 -10
  215. package/dist/testing.d.ts +9 -10
  216. package/dist/testing.js +3 -469
  217. package/dist/testing.js.map +1 -1
  218. package/dist/uom.cjs +1 -55
  219. package/dist/uom.d.cts +2 -2
  220. package/dist/uom.d.ts +2 -2
  221. package/dist/uom.js +1 -10
  222. package/dist/utilities.cjs +1 -36
  223. package/dist/utilities.js +1 -7
  224. package/dist/vm.cjs +1 -295
  225. package/dist/vm.cjs.map +1 -1
  226. package/dist/vm.d.cts +22 -10
  227. package/dist/vm.d.ts +22 -10
  228. package/dist/vm.js +1 -193
  229. package/dist/vm.js.map +1 -1
  230. package/dist/worker.cjs +2 -492
  231. package/dist/worker.cjs.map +1 -1
  232. package/dist/worker.d.cts +16 -17
  233. package/dist/worker.d.ts +16 -17
  234. package/dist/worker.js +2 -483
  235. package/dist/worker.js.map +1 -1
  236. package/package.json +1 -13
  237. package/dist/chunk-3BOK2LDK.js +0 -17
  238. package/dist/chunk-3BOK2LDK.js.map +0 -1
  239. package/dist/chunk-3VGDNEE3.js +0 -84
  240. package/dist/chunk-3VGDNEE3.js.map +0 -1
  241. package/dist/chunk-4K5W7EH2.cjs +0 -112
  242. package/dist/chunk-4K5W7EH2.cjs.map +0 -1
  243. package/dist/chunk-5EFKSKMA.js +0 -413
  244. package/dist/chunk-5EFKSKMA.js.map +0 -1
  245. package/dist/chunk-5HRB36DK.js +0 -405
  246. package/dist/chunk-5HRB36DK.js.map +0 -1
  247. package/dist/chunk-5ON7PUAZ.js +0 -12
  248. package/dist/chunk-5ON7PUAZ.js.map +0 -1
  249. package/dist/chunk-7AXJNQMF.cjs +0 -297
  250. package/dist/chunk-7AXJNQMF.cjs.map +0 -1
  251. package/dist/chunk-7JM3F4KL.js +0 -1795
  252. package/dist/chunk-7JM3F4KL.js.map +0 -1
  253. package/dist/chunk-7USV76HV.cjs +0 -341
  254. package/dist/chunk-7USV76HV.cjs.map +0 -1
  255. package/dist/chunk-A2DZ5BEJ.cjs +0 -1930
  256. package/dist/chunk-A2DZ5BEJ.cjs.map +0 -1
  257. package/dist/chunk-ADBA3XBE.cjs +0 -20
  258. package/dist/chunk-ADBA3XBE.cjs.map +0 -1
  259. package/dist/chunk-AKNGX4TZ.cjs +0 -236
  260. package/dist/chunk-AKNGX4TZ.cjs.map +0 -1
  261. package/dist/chunk-ALYRJ72W.cjs +0 -434
  262. package/dist/chunk-ALYRJ72W.cjs.map +0 -1
  263. package/dist/chunk-AMOJYLG2.cjs +0 -1692
  264. package/dist/chunk-AMOJYLG2.cjs.map +0 -1
  265. package/dist/chunk-AOH6UR2L.js +0 -825
  266. package/dist/chunk-AOH6UR2L.js.map +0 -1
  267. package/dist/chunk-AQNHHJMJ.cjs +0 -261
  268. package/dist/chunk-B7LXJ6LC.cjs +0 -36
  269. package/dist/chunk-B7LXJ6LC.cjs.map +0 -1
  270. package/dist/chunk-BESTLPRK.cjs +0 -6919
  271. package/dist/chunk-BESTLPRK.cjs.map +0 -1
  272. package/dist/chunk-BLI4NIQY.js +0 -98
  273. package/dist/chunk-BLI4NIQY.js.map +0 -1
  274. package/dist/chunk-BSPXMGIS.js +0 -455
  275. package/dist/chunk-BSPXMGIS.js.map +0 -1
  276. package/dist/chunk-C2OMO3WN.cjs +0 -2806
  277. package/dist/chunk-C2OMO3WN.cjs.map +0 -1
  278. package/dist/chunk-CSDQMDU2.js +0 -204
  279. package/dist/chunk-CSDQMDU2.js.map +0 -1
  280. package/dist/chunk-EJ3ILXX6.cjs +0 -223
  281. package/dist/chunk-EJ3ILXX6.cjs.map +0 -1
  282. package/dist/chunk-ENRIK36Q.cjs +0 -94
  283. package/dist/chunk-ENRIK36Q.cjs.map +0 -1
  284. package/dist/chunk-F4UB4XIL.js +0 -109
  285. package/dist/chunk-F4UB4XIL.js.map +0 -1
  286. package/dist/chunk-FD5ZZHEU.js +0 -92
  287. package/dist/chunk-FD5ZZHEU.js.map +0 -1
  288. package/dist/chunk-FE4RC37D.js +0 -2801
  289. package/dist/chunk-FE4RC37D.js.map +0 -1
  290. package/dist/chunk-FEAIOR7N.cjs +0 -91
  291. package/dist/chunk-FEAIOR7N.cjs.map +0 -1
  292. package/dist/chunk-FR7RNOPT.cjs +0 -3303
  293. package/dist/chunk-FR7RNOPT.cjs.map +0 -1
  294. package/dist/chunk-G2YPPLGX.cjs +0 -484
  295. package/dist/chunk-G2YPPLGX.cjs.map +0 -1
  296. package/dist/chunk-GCM5JHMX.js +0 -88
  297. package/dist/chunk-GCM5JHMX.js.map +0 -1
  298. package/dist/chunk-GDEU72RG.cjs +0 -829
  299. package/dist/chunk-GDEU72RG.cjs.map +0 -1
  300. package/dist/chunk-HKTQCQ4Z.cjs +0 -8383
  301. package/dist/chunk-HKTQCQ4Z.cjs.map +0 -1
  302. package/dist/chunk-HWHU642X.cjs +0 -316
  303. package/dist/chunk-HWHU642X.cjs.map +0 -1
  304. package/dist/chunk-ICEKS6YC.cjs +0 -507
  305. package/dist/chunk-ICEKS6YC.cjs.map +0 -1
  306. package/dist/chunk-IJGOFP2J.js +0 -6904
  307. package/dist/chunk-IJGOFP2J.js.map +0 -1
  308. package/dist/chunk-IQJGDZOP.js +0 -333
  309. package/dist/chunk-IQJGDZOP.js.map +0 -1
  310. package/dist/chunk-IT74O4BE.cjs +0 -456
  311. package/dist/chunk-IT74O4BE.cjs.map +0 -1
  312. package/dist/chunk-KXDQKVNX.cjs +0 -459
  313. package/dist/chunk-KXDQKVNX.cjs.map +0 -1
  314. package/dist/chunk-L2TE7PMO.cjs +0 -14
  315. package/dist/chunk-L2TE7PMO.cjs.map +0 -1
  316. package/dist/chunk-L5YHV6BQ.js +0 -499
  317. package/dist/chunk-L5YHV6BQ.js.map +0 -1
  318. package/dist/chunk-LO7HU5WB.cjs +0 -209
  319. package/dist/chunk-LO7HU5WB.cjs.map +0 -1
  320. package/dist/chunk-LSALB3IN.js +0 -292
  321. package/dist/chunk-LSALB3IN.js.map +0 -1
  322. package/dist/chunk-MI7OTUHL.cjs +0 -339
  323. package/dist/chunk-MI7OTUHL.cjs.map +0 -1
  324. package/dist/chunk-MIGXCBXT.cjs +0 -381
  325. package/dist/chunk-MIGXCBXT.cjs.map +0 -1
  326. package/dist/chunk-MVTOCRV2.js +0 -213
  327. package/dist/chunk-MVTOCRV2.js.map +0 -1
  328. package/dist/chunk-N7FNVFXW.cjs +0 -32
  329. package/dist/chunk-N7FNVFXW.cjs.map +0 -1
  330. package/dist/chunk-N7OA4WPJ.js +0 -362
  331. package/dist/chunk-N7OA4WPJ.js.map +0 -1
  332. package/dist/chunk-NAWZATKT.js +0 -478
  333. package/dist/chunk-NAWZATKT.js.map +0 -1
  334. package/dist/chunk-NLNDMWZC.js +0 -31
  335. package/dist/chunk-NLNDMWZC.js.map +0 -1
  336. package/dist/chunk-ORM7CHYZ.js +0 -1531
  337. package/dist/chunk-ORM7CHYZ.js.map +0 -1
  338. package/dist/chunk-OUHT5Z36.cjs +0 -393
  339. package/dist/chunk-OUHT5Z36.cjs.map +0 -1
  340. package/dist/chunk-PCZVMMWU.cjs +0 -74
  341. package/dist/chunk-PCZVMMWU.cjs.map +0 -1
  342. package/dist/chunk-RNKDIXDV.js +0 -336
  343. package/dist/chunk-RNKDIXDV.js.map +0 -1
  344. package/dist/chunk-SBUFNJVE.js +0 -258
  345. package/dist/chunk-SBUFNJVE.js.map +0 -1
  346. package/dist/chunk-TC6BTUSU.cjs +0 -1799
  347. package/dist/chunk-TC6BTUSU.cjs.map +0 -1
  348. package/dist/chunk-TPOK3UNI.js +0 -8355
  349. package/dist/chunk-TPOK3UNI.js.map +0 -1
  350. package/dist/chunk-UF6JG5SG.js +0 -312
  351. package/dist/chunk-UF6JG5SG.js.map +0 -1
  352. package/dist/chunk-UKQHXPGW.js +0 -30
  353. package/dist/chunk-UKQHXPGW.js.map +0 -1
  354. package/dist/chunk-V4XG5QF6.js +0 -1685
  355. package/dist/chunk-V4XG5QF6.js.map +0 -1
  356. package/dist/chunk-VEKIWQ3F.cjs +0 -39
  357. package/dist/chunk-VEKIWQ3F.cjs.map +0 -1
  358. package/dist/chunk-WMQRJTAO.js +0 -3266
  359. package/dist/chunk-WMQRJTAO.js.map +0 -1
  360. package/dist/chunk-X6K3HUOY.cjs +0 -86
  361. package/dist/chunk-X6K3HUOY.cjs.map +0 -1
  362. package/dist/chunk-XBTEO4OB.js +0 -391
  363. package/dist/chunk-XBTEO4OB.js.map +0 -1
  364. package/dist/chunk-XIYYHA65.cjs +0 -101
  365. package/dist/chunk-XIYYHA65.cjs.map +0 -1
  366. package/dist/chunk-YJHY7CMN.cjs +0 -1534
  367. package/dist/chunk-YLJ4XMA6.js +0 -33
  368. package/dist/chunk-YLJ4XMA6.js.map +0 -1
  369. package/dist/chunk-YNIWOYW6.js +0 -232
  370. package/dist/chunk-YNIWOYW6.js.map +0 -1
  371. package/dist/chunk-Z2XP767T.cjs +0 -35
  372. package/dist/chunk-Z2XP767T.cjs.map +0 -1
  373. package/dist/chunk-Z4X2RWOF.js +0 -37
  374. package/dist/chunk-Z4X2RWOF.js.map +0 -1
  375. package/dist/chunk-ZN6YYPIW.js +0 -67
  376. package/dist/chunk-ZN6YYPIW.js.map +0 -1
  377. package/dist/chunk-ZNFFTYWH.js +0 -1854
  378. package/dist/chunk-ZNFFTYWH.js.map +0 -1
  379. package/dist/variables.cjs +0 -17
  380. package/dist/variables.cjs.map +0 -1
  381. package/dist/variables.d.cts +0 -87
  382. package/dist/variables.d.ts +0 -87
  383. package/dist/variables.js +0 -4
  384. package/dist/variables.js.map +0 -1
@@ -393,6 +393,46 @@ declare class Value {
393
393
  isSymbolic(): this is Value & {
394
394
  value: SymbolicNode;
395
395
  };
396
+ /**
397
+ * An Error value: a fault carrying a code and message, propagated through the
398
+ * DAG when a plugin or opcode cannot produce a quantity.
399
+ *
400
+ * An Error reads as the number 0 through {@link toNumber}, so a numeric
401
+ * consumer that does not check this first cannot tell the fault apart from a
402
+ * real zero: exactly the silently-wrong result the engine guards against
403
+ * internally with {@link faultedOperand}. A host reading a live {@link Value}
404
+ * off a result should branch on this (or {@link isFault}) before trusting the
405
+ * number, and read {@link errorCode}/{@link errorMessage} for the detail.
406
+ */
407
+ isError(): boolean;
408
+ /**
409
+ * A Pending value: an async result that has not yet resolved, holding the
410
+ * query key it is waiting on. Reads as 0 through {@link toNumber}, the same
411
+ * caveat as {@link isError}: a settled value arrives on a later evaluation.
412
+ */
413
+ isPending(): boolean;
414
+ /**
415
+ * Either fault, an Error or a Pending: the single predicate to check before
416
+ * trusting {@link toNumber}. It mirrors the internal {@link faultedOperand}
417
+ * rule that every opcode applies to its operands, so a host reading a result
418
+ * makes the same distinction the engine does rather than computing with a
419
+ * zero it cannot tell from a real one.
420
+ */
421
+ isFault(): boolean;
422
+ /**
423
+ * The stable {@link ErrorFactory} code of an Error value, else `undefined`.
424
+ *
425
+ * The code is the machine-branchable identifier (the message is the
426
+ * human-facing text, {@link errorMessage}). It reads from the same slot
427
+ * {@link errorValue} writes, so it is defined for exactly the values
428
+ * {@link isError} accepts and `undefined` for every other type.
429
+ */
430
+ get errorCode(): string | undefined;
431
+ /**
432
+ * The human-facing message of an Error value, else `undefined`. Paired with
433
+ * {@link errorCode}, which carries the branchable identifier.
434
+ */
435
+ get errorMessage(): string | undefined;
396
436
  toNumber(): number;
397
437
  isNaN(): boolean;
398
438
  }
@@ -1,4 +1,4 @@
1
- import { c as ErrorCategory, S as SourceSpan, E as EngineError } from './EngineError-CNA_rHY-.cjs';
1
+ import { c as ErrorCategory, S as SourceSpan, E as EngineError } from './EngineError-Ce1lPkjZ.cjs';
2
2
 
3
3
  /**
4
4
  * Structured errors for the off-main-thread worker harness, and the pair of
@@ -1,4 +1,4 @@
1
- import { c as ErrorCategory, S as SourceSpan, E as EngineError } from './EngineError-CNA_rHY-.js';
1
+ import { c as ErrorCategory, S as SourceSpan, E as EngineError } from './EngineError-Ce1lPkjZ.js';
2
2
 
3
3
  /**
4
4
  * Structured errors for the off-main-thread worker harness, and the pair of
@@ -0,0 +1,2 @@
1
+ var o=`0|1|radian,radians,rad,rads,r;0|6.283185307179586|turn,turns;0|0.017453292519943295|degree,degrees,deg,degs,\xB0;0|0.015707963267948967|gradian,gradians,gon,gons,grad,grads,grade,grades;0|0.0002908882086657216|arcminute,arcminutes,minutes of arc,arcmin,arcmins;0|0.00000484813681109536|arcsecond,arcseconds,seconds of arc,arcsec,arcsecs;1|1|square meter,square meters,square metre,square metres,m\xB2,m2,centiare,centiares,ca;1|1e+30|square petameter,square petametre,square petameters,square petametres,Pm\xB2,Pm2;1|1e+24|square terameter,square terametre,square terameters,square terametres,Tm\xB2,Tm2;1|1000000000000000000|square gigameter,square gigametre,square gigameters,square gigametres,Gm\xB2,Gm2;1|1000000000000|square megameter,square megametre,square megameters,square megametres,Mm\xB2,Mm2;1|1000000|square kilometer,square kilometre,square kilometers,square kilometres,km\xB2,km2;1|10000|square hectometer,square hectometre,square hectometers,square hectometres,hm\xB2,hm2,hectare,hectares,ha;1|100|square decameter,square decametre,square decameters,square decametres,dam\xB2,dam2,are,ares;1|0.01|square decimeter,square decimetre,square decimeters,square decimetres,dm\xB2,dm2;1|0.0001|square centimeter,square centimetre,square centimeters,square centimetres,cm\xB2,cm2;1|0.000001|square millimeter,square millimetre,square millimeters,square millimetres,mm\xB2,mm2;1|1e-12|square micrometer,square micrometre,square micrometers,square micrometres,\u03BCm\xB2,\xB5m\xB2,\u03BCm2,\xB5m2;1|1e-18|square nanometer,square nanometre,square nanometers,square nanometres,nm\xB2,nm2;1|1e-24|square picometer,square picometre,square picometers,square picometres,pm\xB2,pm2;1|1e-30|square femtometer,square femtometre,square femtometers,square femtometres,fm\xB2,fm2;1|4046.8564224|acre,acres,ac;1|10|deciare,deciares,da;1|1000|decare,decares,daa;1|0.09290304|square foot,square feet,sq ft,ft\xB2,ft2;1|0.00064516|square inch,square inches,sq in,in\xB2,in2;1|0.83612736|square yard,square yards,sq yd,yd\xB2,yd2;1|2589988.110336|square mile,square miles,sq mi,mi\xB2,mi2;1|666.6666666666666|m\u01D4,mu;2|1|bit,bits,b;2|1125899906842624|pebibit,pebibits,Pib;2|1099511627776|tebibit,tebibits,Tib;2|1073741824|gibibit,gibibits,Gib;2|1048576|mebibit,mebibits,Mib;2|1024|kibibit,kibibits,Kib;2|1000|Kb,kilobit,kilobits,kb;2|8000|KB,kilobyte,kilobytes,kB;2|1000000000000000|petabit,petabits,Pb;2|1000000000000|terabit,terabits,Tb;2|1000000000|gigabit,gigabits,Gb;2|1000000|megabit,megabits,Mb;2|100|hectobit,hectobits,hb;2|10|decabit,decabits,dab;2|0.1|decibit,decibits,db;2|0.01|centibit,centibits,cb;2|0.001|millibit,millibits,mb;2|0.000001|microbit,microbits,\u03BCb,\xB5b;2|1e-9|nanobit,nanobits,nb;2|1e-12|picobit,picobits,pb;2|1e-15|femtobit,femtobits,fb;2|4|nibble,nibbles,semioctet,semioctets,halfbyte,halfbytes;2|8|byte,bytes,octect,octects,B;2|9007199254740992|pebibyte,pebibytes,PiB;2|8796093022208|tebibyte,tebibytes,TiB;2|8589934592|gibibyte,gibibytes,GiB;2|8388608|mebibyte,mebibytes,MiB;2|8192|kibibyte,kibibytes,KiB;2|8000000000000000|petabyte,petabytes,PB;2|8000000000000|terabyte,terabytes,TB;2|8000000000|gigabyte,gigabytes,GB;2|8000000|megabyte,megabytes,MB;2|800|hectobyte,hectobytes,hB;2|80|decabyte,decabytes,daB;2|0.8|decibyte,decibytes,dB;2|0.08|centibyte,centibytes,cB;2|0.008|millibyte,millibytes,mB;2|0.000008|microbyte,microbytes,\u03BCB,\xB5B;2|8e-9|nanobyte,nanobytes,nB;2|8e-12|picobyte,picobytes,pB;2|8e-15|femtobyte,femtobytes,fB;2|16|hextet,hextets;3|1|joule,joules,J;3|1000000000000000|petajoule,petajoules,PJ;3|1000000000000|terajoule,terajoules,TJ;3|1000000000|gigajoule,gigajoules,GJ;3|1000000|megajoule,megajoules,MJ;3|1000|kilojoule,kilojoules,kJ;3|100|hectojoule,hectojoules,hJ;3|10|decajoule,decajoules,daJ;3|0.1|decijoule,decijoules,dJ;3|0.01|centijoule,centijoules,cJ;3|0.001|millijoule,millijoules,mJ;3|0.000001|microjoule,microjoules,\u03BCJ,\xB5J;3|1e-9|nanojoule,nanojoules,nJ;3|1e-12|picojoule,picojoules,pJ;3|1e-15|femtojoule,femtojoules,fJ;3|3600|watt-hour,W\u22C5h,W h,Wh;3|3600000000000000000|petawatt-hour,petawatt-hours,PW\u22C5h,PW h,PWh;3|3600000000000000|terawatt-hour,terawatt-hours,TW\u22C5h,TW h,TWh;3|3600000000000|gigawatt-hour,gigawatt-hours,GW\u22C5h,GW h,GWh;3|3600000000|megawatt-hour,megawatt-hours,MW\u22C5h,MW h,MWh;3|3600000|kilowatt-hour,kilowatt-hours,kW\u22C5h,kW h,kWh;3|360000|hectowatt-hour,hectowatt-hours,hW\u22C5h,hW h,hWh;3|36000|decawatt-hour,decawatt-hours,daW\u22C5h,daW h,daWh;3|360|deciwatt-hour,deciwatt-hours,dW\u22C5h,dW h,dWh;3|36|centiwatt-hour,centiwatt-hours,cW\u22C5h,cW h,cWh;3|3.6|milliwatt-hour,milliwatt-hours,mW\u22C5h,mW h,mWh;3|0.0036|microwatt-hour,microwatt-hours,\u03BCW\u22C5h,\xB5W\u22C5h,\u03BCW h,\xB5W h,\u03BCWh,\xB5Wh;3|0.0000036|nanowatt-hour,nanowatt-hours,nW\u22C5h,nW h,nWh;3|3.6e-9|picowatt-hour,picowatt-hours,pW\u22C5h,pW h,pWh;3|3.6e-12|femtowatt-hour,femtowatt-hours,fW\u22C5h,fW h,fWh;4|1|newton,newtons,N;4|1000000000000000|petanewton,petanewtons,PN;4|1000000000000|teranewton,teranewtons,TN;4|1000000000|giganewton,giganewtons,GN;4|1000000|meganewton,meganewtons,MN;4|1000|kilonewton,kilonewtons,kN;4|100|hectonewton,hectonewtons,hN;4|10|decanewton,decanewtons,daN;4|0.1|decinewton,decinewtons,dN;4|0.01|centinewton,centinewtons,cN;4|0.001|millinewton,millinewtons,mN;4|0.000001|micronewton,micronewtons,\u03BCN,\xB5N;4|1e-9|nanonewton,nanonewtons,nN;4|1e-12|piconewton,piconewtons,pN;4|1e-15|femtonewton,femtonewtons,fN;4|0.00001|dyne,dynes,dyn;4|4.448222|pound of force,pound-force,lbf;4|4448.2216|kip,klb,kipf,klbf;4|0.138255|poundal,poundals,pdl;4|9.80665|kilogram-force,kilopond,kiloponds,kgf,kp;4|9806.65|tonne-force,metric ton-force,megagram-force,megapond,tf,Mp;5|1|hertz,Hz;5|1000000000000000|petahertz,PHz;5|1000000000000|terahertz,THz;5|1000000000|gigahertz,GHz;5|1000000|megahertz,MHz;5|1000|kilohertz,kHz;5|100|hectohertz,hHz;5|10|decahertz,daHz;5|0.1|decihertz,dHz;5|0.01|centihertz,cHz;5|0.001|millihertz,mHz;5|0.000001|microhertz,\u03BCHz,\xB5Hz;5|1e-9|nanohertz,nHz;5|1e-12|picohertz,pHz;5|1e-15|femtohertz,fHz;6|1|lux,lx,lumen per square meter,lm/m2,lm/m\xB2;6|1000000000000000|petalux,Plx;6|1000000000000|teralux,Tlx;6|1000000000|gigalux,Glx;6|1000000|megalux,Mlx;6|1000|kilolux,klx;6|100|hectolux,hlx;6|10|decalux,dalx;6|0.1|decilux,dlx;6|0.01|centilux,clx;6|0.001|millilux,mlx;6|0.000001|microlux,\u03BClx,\xB5lx;6|1e-9|nanolux,nlx;6|1e-12|picolux,plx;6|1e-15|femtolux,flx;6|10.764|foot-candle,foot candle,fc,ft-c;6|10000|phot,ph;7|1|meter,meters,metre,metres,m;7|1000000000000000|petameter,petametre,petameters,petametres,Pm;7|1000000000000|terameter,terametre,terameters,terametres,Tm;7|1000000000|gigameter,gigametre,gigameters,gigametres,Gm;7|1000000|megameter,megametre,megameters,megametres,Mm;7|1000|kilometer,kilometre,kilometers,kilometres,km;7|100|hectometer,hectometre,hectometers,hectometres,hm;7|10|decameter,decametre,decameters,decametres,dam;7|0.1|decimeter,decimetre,decimeters,decimetres,dm;7|0.01|centimeter,centimetre,centimeters,centimetres,cm;7|0.001|millimeter,millimetre,millimeters,millimetres,mm;7|0.000001|micrometer,micrometre,micrometers,micrometres,\u03BCm,\xB5m;7|1e-9|nanometer,nanometre,nanometers,nanometres,nm;7|1e-12|picometer,picometre,picometers,picometres,pm;7|1e-15|femtometer,femtometre,femtometers,femtometres,fm;7|0.3048|foot,feet,ft,';7|0.3048006096012192|US survey foot,US survey feet,U.S. survey foot,U.S. survey feet;7|0.0254|inch,inches,in,";7|0.9144|yard,yards,yd;7|1609.344|mile,miles,mi;7|1852|nautical mile,nautical miles,M,NM,nmi;7|9460730472580800|light-year,light-years,ly;7|30856775814913670|parsec,parsecs,pc;7|0.0042333|pica,picas;7|0.0003528|point,points;8|1|candela per square meter,candelas per square meter,candela per square metre,candelas per square metre,cd/m2,cd/m\xB2,nit,nits,nt;8|1000000000000000|petacandela per square meter,petacandelas per square meter,petacandela per square metre,petacandelas per square metre,Pcd/m2,Pcd/m\xB2;8|1000000000000|teracandela per square meter,teracandelas per square meter,teracandela per square metre,teracandelas per square metre,Tcd/m2,Tcd/m\xB2;8|1000000000|gigacandela per square meter,gigacandelas per square meter,gigacandela per square metre,gigacandelas per square metre,Gcd/m2,Gcd/m\xB2;8|1000000|megacandela per square meter,megacandelas per square meter,megacandela per square metre,megacandelas per square metre,Mcd/m2,Mcd/m\xB2;8|1000|kilocandela per square meter,kilocandelas per square meter,kilocandela per square metre,kilocandelas per square metre,kcd/m2,kcd/m\xB2;8|100|hectocandela per square meter,hectocandelas per square meter,hectocandela per square metre,hectocandelas per square metre,hcd/m2,hcd/m\xB2;8|10|decacandela per square meter,decacandelas per square meter,decacandela per square metre,decacandelas per square metre,dacd/m2,dacd/m\xB2;8|0.1|decicandela per square meter,decicandelas per square meter,decicandela per square metre,decicandelas per square metre,dcd/m2,dcd/m\xB2;8|0.01|centicandela per square meter,centicandelas per square meter,centicandela per square metre,centicandelas per square metre,ccd/m2,ccd/m\xB2;8|0.001|millicandela per square meter,millicandelas per square meter,millicandela per square metre,millicandelas per square metre,mcd/m2,mcd/m\xB2;8|0.000001|microcandela per square meter,microcandelas per square meter,microcandela per square metre,microcandelas per square metre,\u03BCcd/m2,\xB5cd/m2,\u03BCcd/m\xB2,\xB5cd/m\xB2;8|1e-9|nanocandela per square meter,nanocandelas per square meter,nanocandela per square metre,nanocandelas per square metre,ncd/m2,ncd/m\xB2;8|1e-12|picocandela per square meter,picocandelas per square meter,picocandela per square metre,picocandelas per square metre,pcd/m2,pcd/m\xB2;8|1e-15|femtocandela per square meter,femtocandelas per square meter,femtocandela per square metre,femtocandelas per square metre,fcd/m2,fcd/m\xB2;9|1|candela,cd,candlepower,cp,CP;9|1000000000000000|petacandela,Pcd;9|1000000000000|teracandela,Tcd;9|1000000000|gigacandela,Gcd;9|1000000|megacandela,Mcd;9|1000|kilocandela,kcd;9|100|hectocandela,hcd;9|10|decacandela,dacd;9|0.1|decicandela,dcd;9|0.01|centicandela,ccd;9|0.001|millicandela,mcd;9|0.000001|microcandela,\u03BCcd,\xB5cd;9|1e-9|nanocandela,ncd;9|1e-12|picocandela,pcd;9|1e-15|femtocandela,fcd;9|0.92|hefnerkerze,HK;10|1|gram,grams,g;10|1000000000000000|petagram,petagrams,Pg,gigatonne,gigatonnes,Gt;10|1000000000000|teragram,teragrams,Tg,megatonne,megatonnes,Mt;10|1000000000|gigagram,gigagrams,Gg,kilotonne,kilotonnes,kt;10|1000000|megagram,megagrams,Mg,tonne,tonnes,metric ton,metric tons,t;10|1000|kilogram,kilograms,kg;10|100|hectogram,hectograms,hg;10|10|decagram,decagrams,dag;10|0.1|decigram,decigrams,dg;10|0.01|centigram,centigrams,cg;10|0.001|milligram,milligrams,mg;10|0.000001|microgram,micrograms,\u03BCg,\xB5g,mcg;10|1e-9|nanogram,nanograms,ng;10|1e-12|picogram,picograms,pg;10|1e-15|femtogram,femtograms,fg;10|453.59237|pound,pounds,lb,lbs;10|0.06479891|grain,grains,gr;10|6350.29318|stone,stones,st;10|28.349523125|ounce,ounces,oz;10|45360|short hundredweight,cental;10|50800|long hundredweight,imperial hundredweight,cwt;10|907184.74|short ton,short tons,US ton,US tons;10|1016046.9088|long ton,long tons,imperial ton,imperial tons,displacement ton,displacement tons;10|31.1034768|troy ounce,oz t,toz;11|1|watt,watts,W;11|1000000000000000|petawatt,petawatts,PW;11|1000000000000|terawatt,terawatts,TW;11|1000000000|gigawatt,gigawatts,GW;11|1000000|megawatt,megawatts,MW;11|1000|kilowatt,kilowatts,kW;11|100|hectowatt,hectowatts,hW;11|10|decawatt,decawatts,daW;11|0.1|deciwatt,deciwatts,dW;11|0.01|centiwatt,centiwatts,cW;11|0.001|milliwatt,milliwatts,mW;11|0.000001|microwatt,microwatts,\u03BCW,\xB5W;11|1e-9|nanowatt,nanowatts,nW;11|1e-12|picowatt,picowatts,pW;11|1e-15|femtowatt,femtowatts,fW;11|745.699872|horsepower,mechanical horsepower,hp;12|1|pascal,pascals,Pa;12|1000000000000000|petapascal,petapascals,PPa;12|1000000000000|terapascal,terapascals,TPa;12|1000000000|gigapascal,gigapascals,GPa;12|1000000|megapascal,megapascals,MPa,decabar,decabars,dabar;12|1000|kilopascal,kilopascals,kPa,centibar,centibars,cbar;12|100|hectopascal,hectopascals,hPa,millibar,millibars,mbar;12|10|decapascal,decapascals,daPa;12|0.1|decipascal,decipascals,dPa,microbar,microbars,\u03BCbar,\xB5bar;12|0.01|centipascal,centipascals,cPa;12|0.001|millipascal,millipascals,mPa;12|0.000001|micropascal,micropascals,\u03BCPa,\xB5Pa;12|1e-9|nanopascal,nanopascals,nPa;12|1e-12|picopascal,picopascals,pPa;12|1e-15|femtopascal,femtopascals,fPa;12|100000|bar,bars;12|100000000000000000000|petabar,petabars,Pbar;12|100000000000000000|terabar,terabars,Tbar;12|100000000000000|gigabar,gigabars,Gbar;12|100000000000|megabar,megabars,Mbar;12|100000000|kilobar,kilobars,kbar;12|10000000|hectobar,hectobars,hbar;12|10000|decibar,decibars,dbar;12|0.0001|nanobar,nanobars,nbar;12|1e-7|picobar,picobars,pbar;12|1e-10|femtobar,femtobars,fbar;12|133.32236842105263|torr,torrs,Torr;12|0.13332236842105263|millitorr,mTorr;12|101325|atmosphere,atmospheres,atm;12|6894.757|pound per square inch,pounds per square inch,psi,lbf/in2,lbf/in\xB2;12|249.0889|inch of water,inches of water,inAq,Aq;12|3386.389|inch of mercury,inches of mercury,inHg,Hg;13|1|kelvin,kelvins,K,celsius,C,\xB0C;13|1000000000000000|petakelvin,petakelvins,PK;13|1000000000000|terakelvin,terakelvins,TK;13|1000000000|gigakelvin,gigakelvins,GK;13|1000000|megakelvin,megakelvins,MK;13|1000|kilokelvin,kilokelvins,kK;13|100|hectokelvin,hectokelvins,hK;13|10|decakelvin,decakelvins,daK;13|0.1|decikelvin,decikelvins,dK;13|0.01|centikelvin,centikelvins,cK;13|0.001|millikelvin,millikelvins,mK;13|0.000001|microkelvin,microkelvins,\u03BCK,\xB5K;13|1e-9|nanokelvin,nanokelvins,nK;13|1e-12|picokelvin,picokelvins,pK;13|1e-15|femtokelvin,femtokelvins,fK;13|0.5555555555555556|fahrenheit,F,\xB0F,rankine,R;14|1|second,seconds,s;14|1000000000000000|petasecond,petaseconds,Ps;14|1000000000000|terasecond,teraseconds,Ts;14|1000000000|gigasecond,gigaseconds,Gs;14|1000000|megasecond,megaseconds,Ms;14|1000|kilosecond,kiloseconds,ks;14|100|hectosecond,hectoseconds,hs;14|10|decasecond,decaseconds,das;14|0.1|decisecond,deciseconds,ds;14|0.01|centisecond,centiseconds,cs;14|0.001|millisecond,milliseconds,ms;14|0.000001|microsecond,microseconds,\u03BCs,\xB5s;14|1e-9|nanosecond,nanoseconds,ns;14|1e-12|picosecond,picoseconds,ps;14|1e-15|femtosecond,femtoseconds,fs;14|60|minute,minutes,min;14|3600|hour,hours,h;14|86.4|milliday,millidays,md;14|86400|day,days,d;14|604800|week,weeks,wk;14|1209600|fortnight,fortnights,fn;14|2592000|month,months,mo;14|31536000|year,years,a,y,yr;14|315360000|decade,decades,dec;14|3153600000|century,centuries;14|31536000000|millennium,millennia;14|90|moment,moments;14|1e-8|shake,shakes;14|0.001024|time unit,TU;14|1e-13|svedberg,svedbergs,S;15|1|cubic meter,cubic meters,cubic metre,cubic metres,stere,steres,m\xB3,m3,kiloliter,kiloliters,kilolitre,kilolitres,kl,kL;15|1e+45|cubic petameter,cubic petameters,Pm3,Pm\xB3;15|1e+36|cubic terameter,cubic terameters,Tm3,Tm\xB3;15|1e+27|cubic gigameter,cubic gigameters,Gm3,Gm\xB3;15|1000000000000000000|cubic megameter,cubic megameters,Mm3,Mm\xB3;15|1000000000|cubic kilometer,cubic kilometers,km3,km\xB3,teraliter,teraliters,teralitre,teralitres,Tl,TL;15|1000000|cubic hectometer,cubic hectometers,hm3,hm\xB3,gigaliter,gigaliters,gigalitre,gigalitres,Gl,GL;15|1000|cubic decameter,cubic decameters,dam3,dam\xB3,megaliter,megaliters,megalitre,megalitres,Ml,ML;15|0.001|cubic decimeter,cubic decimeters,dm3,dm\xB3,liter,liters,litre,litres,l,L;15|0.000001|cubic centimeter,cubic centimeters,cm3,cm\xB3,milliliter,milliliters,millilitre,millilitres,ml,mL;15|1e-9|cubic millimeter,cubic millimeters,mm3,mm\xB3,microliter,microliters,microlitre,microlitres,\u03BCl,\xB5l,\u03BCL,\xB5L;15|1e-18|cubic micrometer,cubic micrometers,\u03BCm3,\xB5m3,\u03BCm\xB3,\xB5m\xB3,femtoliter,femtoliters,femtolitre,femtolitres,fl,fL;15|1e-27|cubic nanometer,cubic nanometers,nm3,nm\xB3;15|1e-36|cubic picometer,cubic picometers,pm3,pm\xB3;15|1e-45|cubic femtometer,cubic femtometers,fm3,fm\xB3;15|1000000000000|petaliter,petaliters,petalitre,petalitres,Pl,PL;15|0.1|hectoliter,hectoliters,hectolitre,hectolitres,hl,hL;15|0.01|decaliter,decaliters,decalitre,decalitres,dal,daL;15|0.0001|deciliter,deciliters,decilitre,decilitres,dl,dL;15|0.00001|centiliter,centiliters,centilitre,centilitres,cl,cL;15|1e-12|nanoliter,nanoliters,nanolitre,nanolitres,nl,nL;15|1e-15|picoliter,picoliters,picolitre,picolitres,pl,pL;15|4168181825.4405794|cubic mile,cubic miles,cu mi,mi3,mi\xB3;15|1233.48183754752|acre-foot,acre-feet,ac\u22C5ft,ac ft;15|0.764554857984|cubic yard,cubic yards,cu yd,yd3,yd\xB3;15|0.028316846592|cubic foot,cubic feet,cu ft,ft3,ft\xB3;15|0.002359737|board foot,board feet;15|0.000016387064|cubic inch,cubic inches,cu in,in3,in\xB3;15|1.133|measurement ton,measurement tons,MTON;15|0.16365924|imperial barrel,imperial barrels,imp bbl;15|0.03636872|imperial bushel,imperial bushels,imp bsh,imp bu;15|0.00909218|imperial peck,imperial pecks,pk,imp pk;15|0.00454609|imperial gallon,imperial gallons,imp gal;15|0.0011365225|imperial quart,imperial quarts,imp qt;15|0.00056826125|imperial pint,imperial pints,imp pt;15|0.0000284130625|imperial fluid ounce,imperial fluid ounces,imp fl oz;15|0.00000492892159375|teaspoon,teaspoons,US teaspoon,US teaspoons,tsp;15|0.00001478676478125|tablespoon,tablespoons,US tablespoon,US tablespoons,tbsp;15|0.0000295735295625|US fluid ounce,US fluid ounces,fl oz,fl. oz.,oz. fl.;15|0.0002365882365|cup,cups,c;15|0.00024|US legal cup,US legal cups,US lc;15|0.000473176473|pint,pints,US liquid pint,US liquid pints,pt,p;15|0.000946352946|quart,quarts,US liquid quart,US liquid quarts,qt;15|0.003785411784|gallon,gallons,US liquid gallon,US liquid gallons,gal;15|0.03523907016688|US bushel,US bushels,US bsh,US bu;15|0.00880976754172|US peck,US pk;15|0.00440488377086|US dry gallon,US dry gal;15|0.1156|US dry barrel,US dry barrels,US dry bbl;15|0.001101220942715|US dry quart,US dry qt;15|0.0005506104713575|US dry pint,US dry pt`;function l(m){let t={};for(let e of m.split(";")){let a=e.indexOf("|"),r=e.indexOf("|",a+1),s=Number(e.slice(0,a)),i=Number(e.slice(a+1,r)),c=[s,i];for(let n of e.slice(r+1).split(","))t[n]=c;}return t}var d=l(o),u={fahrenheit:459.67,F:459.67,"\xB0F":459.67,celsius:273.15,C:273.15,"\xB0C":273.15},p={0:[["deg",1]],1:[["mm2",1],["cm2",100],["m2",1e6],["km2",1e12]],2:[["bits",1],["B",8],["KB",8e3],["MB",8e6],["GB",8e9],["TB",8e12],["PB",8e15]],3:[["J",1],["Wh",3600],["kWh",36e5],["MWh",36e8],["GWh",36e11]],4:[["N",1]],5:[["Hz",1],["kHz",1e3],["MHz",1e6],["GHz",1e9],["THz",1e12],["PHz",1e15]],6:[["lux",1],["klx",1e3]],7:[["mm",1],["cm",10],["m",1e3],["km",1e6]],8:[["cd/m\xB2",1]],9:[["cd",1]],10:[["mg",1],["g",1e3],["kg",1e6]],11:[["W",1],["kW",1e3],["MW",1e6],["GW",1e9],["TW",1e12],["PW",1e15]],12:[["Pa",1]],13:[["C",1]],14:[["fs",1],["ps",1e3],["ns",1e6],["\xB5s",1e9],["ms",1e12],["s",1e15],["min",6e16],["h",36e17],["d",864e17],["y",31536e18]],15:[["mL",1],["L",1e3]]},h={0:["rad","rads","r","deg","degs","\xB0","gon","gons","grad","grads","grade","grades","arcmin","arcmins","arcsec","arcsecs"],1:["m\xB2","m2","Pm\xB2","Pm2","Tm\xB2","Tm2","Gm\xB2","Gm2","Mm\xB2","Mm2","km\xB2","km2","hm\xB2","hm2","dam\xB2","dam2","dm\xB2","dm2","cm\xB2","cm2","mm\xB2","mm2","\u03BCm\xB2","\xB5m\xB2","\u03BCm2","\xB5m2","nm\xB2","nm2","pm\xB2","pm2","fm\xB2","fm2","ac","ca","da","daa","ha","sq ft","ft\xB2","ft2","sq in","in\xB2","in2","sq yd","yd\xB2","yd2","sq mi","mi\xB2","mi2"],2:["b","Pib","Tib","Gib","Mib","Kib","Kb","KB","Pb","Tb","Gb","Mb","kb","hb","dab","db","cb","mb","\u03BCb","\xB5b","nb","pb","fb","B","PiB","TiB","GiB","MiB","KiB","PB","TB","GB","MB","kB","hB","daB","dB","cB","mB","\u03BCB","\xB5B","nB","pB","fB"],3:["J","PJ","TJ","GJ","MJ","kJ","hJ","daJ","dJ","cJ","mJ","\u03BCJ","\xB5J","nJ","pJ","fJ","W\u22C5h","W h","Wh","PW\u22C5h","PW h","PWh","TW\u22C5h","TW h","TWh","GW\u22C5h","GW h","GWh","MW\u22C5h","MW h","MWh","kW\u22C5h","kW h","kWh","hW\u22C5h","hW h","hWh","daW\u22C5h","daW h","daWh","dW\u22C5h","dW h","dWh","cW\u22C5h","cW h","cWh","mW\u22C5h","mW h","mWh","\u03BCW\u22C5h","\xB5W\u22C5h","\u03BCW h","\xB5W h","\u03BCWh","\xB5Wh","nW\u22C5h","nW h","nWh","pW\u22C5h","pW h","pWh","fW\u22C5h","fW h","fWh"],4:["N","PN","TN","GN","MN","kN","hN","daN","dN","cN","mN","\u03BCN","\xB5N","nN","pN","fN","dyn","lbf","klb","kipf","klbf","pdl","kgf","kp","tf","Mp"],5:["Hz","PHz","THz","GHz","MHz","kHz","hHz","daHz","dHz","cHz","mHz","\u03BCHz","\xB5Hz","nHz","pHz","fHz"],6:["lx","Plx","Tlx","Glx","Mlx","klx","hlx","dalx","dlx","clx","mlx","\u03BClx","\xB5lx","nlx","plx","flx","lm/m2","lm/m\xB2","fc","ft-c","ph"],7:["m","Pm","Tm","Gm","Mm","km","hm","dam","dm","cm","mm","\u03BCm","\xB5m","nm","pm","fm","ft","'","in",'"',"yd","mi","M","NM","nmi","ly","pc"],8:["cd/m2","cd/m\xB2","Pcd/m2","Pcd/m\xB2","Tcd/m2","Tcd/m\xB2","Gcd/m2","Gcd/m\xB2","Mcd/m2","Mcd/m\xB2","kcd/m2","kcd/m\xB2","hcd/m2","hcd/m\xB2","dacd/m2","dacd/m\xB2","dcd/m2","dcd/m\xB2","ccd/m2","ccd/m\xB2","mcd/m2","mcd/m\xB2","\u03BCcd/m2","\xB5cd/m2","\u03BCcd/m\xB2","\xB5cd/m\xB2","ncd/m2","ncd/m\xB2","pcd/m2","pcd/m\xB2","fcd/m2","fcd/m\xB2","nt"],9:["cd","Pcd","Tcd","Gcd","Mcd","kcd","hcd","dacd","dcd","ccd","mcd","\u03BCcd","\xB5cd","ncd","pcd","fcd","cp","CP","HK"],10:["g","Pg","Tg","Gg","Mg","kg","hg","dag","dg","cg","mg","\u03BCg","\xB5g","ng","pg","fg","mcg","t","kt","Mt","Gt","lb","lbs","gr","st","oz","cwt","oz t","toz"],11:["W","PW","TW","GW","MW","kW","hW","daW","dW","cW","mW","\u03BCW","\xB5W","nW","pW","fW","hp"],12:["Pa","PPa","TPa","GPa","MPa","kPa","hPa","daPa","dPa","cPa","mPa","\u03BCPa","\xB5Pa","nPa","pPa","fPa","bar","Pbar","Tbar","Gbar","Mbar","kbar","hbar","dabar","dbar","cbar","mbar","\u03BCbar","\xB5bar","nbar","pbar","fbar","Torr","mTorr","atm","psi","lbf/in2","lbf/in\xB2","inAq","Aq","inHg","Hg"],13:["K","PK","TK","GK","MK","kK","hK","daK","dK","cK","mK","\u03BCK","\xB5K","nK","pK","fK","F","\xB0F","C","\xB0C","R"],14:["s","Ps","Ts","Gs","Ms","ks","hs","das","ds","cs","ms","\u03BCs","\xB5s","ns","ps","fs","min","h","md","d","wk","fn","mo","a","y","yr","dec","TU","S"],15:["m\xB3","m3","Pm3","Pm\xB3","Tm3","Tm\xB3","Gm3","Gm\xB3","Mm3","Mm\xB3","km3","km\xB3","hm3","hm\xB3","dam3","dam\xB3","dm3","dm\xB3","cm3","cm\xB3","mm3","mm\xB3","\u03BCm3","\xB5m3","\u03BCm\xB3","\xB5m\xB3","nm3","nm\xB3","pm3","pm\xB3","fm3","fm\xB3","l","L","Pl","PL","Tl","TL","Gl","GL","Ml","ML","kl","kL","hl","hL","dal","daL","dl","dL","cl","cL","ml","mL","\u03BCl","\xB5l","\u03BCL","\xB5L","nl","nL","pl","pL","fl","fL","cu mi","mi3","mi\xB3","ac\u22C5ft","ac ft","cu yd","yd3","yd\xB3","cu ft","ft3","ft\xB3","cu in","in3","in\xB3","MTON","imp bbl","imp bsh","imp bu","pk","imp pk","imp gal","imp qt","imp pt","imp fl oz","tsp","tbsp","fl oz","fl. oz.","oz. fl.","c","US lc","pt","p","qt","gal","US bsh","US bu","US pk","US dry gal","US dry bbl","US dry qt","US dry pt"]},b={0:"angle",1:"area",2:"data",3:"energy",4:"force",5:"frequency",6:"illuminance",7:"length",8:"luminance",9:"luminousIntensity",10:"mass",11:"power",12:"pressure",13:"temperature",14:"time",15:"volume"};var f={mps:{measure:"speed",toBase:1},kph:{measure:"speed",toBase:.2777777777777778},mph:{measure:"speed",toBase:.44704},kn:{measure:"speed",toBase:.5144444444444445},ft_s:{measure:"speed",toBase:.3048},min_km:{measure:"pace",toBase:.06},min_mi:{measure:"pace",toBase:.03728227153424004},mV:{measure:"voltage",toBase:.001},kV:{measure:"voltage",toBase:1e3},mA:{measure:"current",toBase:.001},A:{measure:"current",toBase:1},kA:{measure:"current",toBase:1e3},VA:{measure:"apparentPower",toBase:1},kVA:{measure:"apparentPower",toBase:1e3},MVA:{measure:"apparentPower",toBase:1e6},kvar:{measure:"reactivePower",toBase:1e3},Mvar:{measure:"reactivePower",toBase:1e6},varh:{measure:"reactiveEnergy",toBase:1},kvarh:{measure:"reactiveEnergy",toBase:1e3},Mvarh:{measure:"reactiveEnergy",toBase:1e6},m3s:{measure:"volumeFlowRate",toBase:1},m3h:{measure:"volumeFlowRate",toBase:.0002777777777777778},lps:{measure:"volumeFlowRate",toBase:.001},lpm:{measure:"volumeFlowRate",toBase:16666666666666667e-21},gpm:{measure:"volumeFlowRate",toBase:630901964e-13},cfs:{measure:"volumeFlowRate",toBase:.028316846592},ppm:{measure:"partsPer",toBase:1e-6},ppb:{measure:"partsPer",toBase:1e-9},ppt:{measure:"partsPer",toBase:1e-12},permille:{measure:"partsPer",toBase:.001},mil:{measure:"length",toBase:254e-7},mils:{measure:"length",toBase:254e-7},hand:{measure:"length",toBase:.1016},hands:{measure:"length",toBase:.1016},rod:{measure:"length",toBase:5.0292},rods:{measure:"length",toBase:5.0292},chain:{measure:"length",toBase:20.1168},chains:{measure:"length",toBase:20.1168},furlong:{measure:"length",toBase:201.168},furlongs:{measure:"length",toBase:201.168},cable:{measure:"length",toBase:185.2},cables:{measure:"length",toBase:185.2},league:{measure:"length",toBase:4828.032},leagues:{measure:"length",toBase:4828.032},carat:{measure:"mass",toBase:.2},carats:{measure:"mass",toBase:.2},centner:{measure:"mass",toBase:1e5},centners:{measure:"mass",toBase:1e5}};export{d as a,u as b,p as c,h as d,b as e,f};//# sourceMappingURL=chunk-2JMFUQZH.js.map
2
+ //# sourceMappingURL=chunk-2JMFUQZH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/uom/generated/UnitTable.generated.ts","../src/uom/ExtendedUnits.ts"],"names":["PACKED_UNIT_TABLE","unpackUnitTable","packed","table","record","firstBar","secondBar","kind","ratio","entry","alias","UNIT_TABLE","UNIT_DIFFERENCES","BEST_UNITS_METRIC","MEASURE_SYMBOLS","MEASURE_KIND_NAMES","EXTENDED_UNITS"],"mappings":"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","file":"chunk-2JMFUQZH.js","sourcesContent":["/**\n * Unit conversion tables, ported from the `convert` npm package v7.0.2.\n *\n * DO NOT EDIT BY HAND. Regenerate with:\n * node scripts/generate-unit-table.mjs\n *\n * Ported rather than depended on so the engine ships with no runtime\n * dependencies. See scripts/generate-unit-table.mjs for why the tables are\n * mirrored verbatim rather than hand-authored or recomputed from SI\n * definitions, and THIRD-PARTY-NOTICES.md for the upstream licence.\n *\n * Mirrored verbatim EXCEPT where upstream is arithmetically wrong. Those few\n * entries are marked \"corrected\" below and each one is justified in\n * UPSTREAM_UNIT_CORRECTIONS / UPSTREAM_BEST_UNIT_CORRECTIONS in the generator.\n * They are corrections of an upstream error, never a local preference.\n *\n * Upstream: https://github.com/citycide/convert (MIT, Copyright (c) Jonah Snider)\n */\n\n/** A unit's measure kind and its ratio to that measure's base unit. */\nexport type UnitEntry = readonly [kind: number, ratio: number];\n\n/**\n * Source for {@link UNIT_TABLE}, packed. Each `;`-separated record is\n * `kind|ratio|alias1,alias2,...`, so the 378 distinct `[kind, ratio]` pairs\n * spell each ratio once rather than once per alias. See {@link UNIT_TABLE}.\n *\n * Corrected vs upstream: \"dm2\", \"dm²\", \"square decimeter\", \"square decimeters\", \"square decimetre\", \"square decimetres\".\n */\nconst PACKED_UNIT_TABLE =\n \"0|1|radian,radians,rad,rads,r;0|6.283185307179586|turn,turns;0|0.017453292519943295|degree,degrees,deg,degs,°;0|0.015707963267948967|gradian,gradians,gon,gons,grad,grads,grade,grades;0|0.0002908882086657216|arcminute,arcminutes,minutes of arc,arcmin,arcmins;0|0.00000484813681109536|arcsecond,arcseconds,seconds of arc,arcsec,arcsecs;1|1|square meter,square meters,square metre,square metres,m²,m2,centiare,centiares,ca;1|1e+30|square petameter,square petametre,square petameters,square petametres,Pm²,Pm2;1|1e+24|square terameter,square terametre,square terameters,square terametres,Tm²,Tm2;1|1000000000000000000|square gigameter,square gigametre,square gigameters,square gigametres,Gm²,Gm2;1|1000000000000|square megameter,square megametre,square megameters,square megametres,Mm²,Mm2;1|1000000|square kilometer,square kilometre,square kilometers,square kilometres,km²,km2;1|10000|square hectometer,square hectometre,square hectometers,square hectometres,hm²,hm2,hectare,hectares,ha;1|100|square decameter,square decametre,square decameters,square decametres,dam²,dam2,are,ares;1|0.01|square decimeter,square decimetre,square decimeters,square decimetres,dm²,dm2;1|0.0001|square centimeter,square centimetre,square centimeters,square centimetres,cm²,cm2;1|0.000001|square millimeter,square millimetre,square millimeters,square millimetres,mm²,mm2;1|1e-12|square micrometer,square micrometre,square micrometers,square micrometres,μm²,µm²,μm2,µm2;1|1e-18|square nanometer,square nanometre,square nanometers,square nanometres,nm²,nm2;1|1e-24|square picometer,square picometre,square picometers,square picometres,pm²,pm2;1|1e-30|square femtometer,square femtometre,square femtometers,square femtometres,fm²,fm2;1|4046.8564224|acre,acres,ac;1|10|deciare,deciares,da;1|1000|decare,decares,daa;1|0.09290304|square foot,square feet,sq ft,ft²,ft2;1|0.00064516|square inch,square inches,sq in,in²,in2;1|0.83612736|square yard,square yards,sq yd,yd²,yd2;1|2589988.110336|square mile,square miles,sq mi,mi²,mi2;1|666.6666666666666|mǔ,mu;2|1|bit,bits,b;2|1125899906842624|pebibit,pebibits,Pib;2|1099511627776|tebibit,tebibits,Tib;2|1073741824|gibibit,gibibits,Gib;2|1048576|mebibit,mebibits,Mib;2|1024|kibibit,kibibits,Kib;2|1000|Kb,kilobit,kilobits,kb;2|8000|KB,kilobyte,kilobytes,kB;2|1000000000000000|petabit,petabits,Pb;2|1000000000000|terabit,terabits,Tb;2|1000000000|gigabit,gigabits,Gb;2|1000000|megabit,megabits,Mb;2|100|hectobit,hectobits,hb;2|10|decabit,decabits,dab;2|0.1|decibit,decibits,db;2|0.01|centibit,centibits,cb;2|0.001|millibit,millibits,mb;2|0.000001|microbit,microbits,μb,µb;2|1e-9|nanobit,nanobits,nb;2|1e-12|picobit,picobits,pb;2|1e-15|femtobit,femtobits,fb;2|4|nibble,nibbles,semioctet,semioctets,halfbyte,halfbytes;2|8|byte,bytes,octect,octects,B;2|9007199254740992|pebibyte,pebibytes,PiB;2|8796093022208|tebibyte,tebibytes,TiB;2|8589934592|gibibyte,gibibytes,GiB;2|8388608|mebibyte,mebibytes,MiB;2|8192|kibibyte,kibibytes,KiB;2|8000000000000000|petabyte,petabytes,PB;2|8000000000000|terabyte,terabytes,TB;2|8000000000|gigabyte,gigabytes,GB;2|8000000|megabyte,megabytes,MB;2|800|hectobyte,hectobytes,hB;2|80|decabyte,decabytes,daB;2|0.8|decibyte,decibytes,dB;2|0.08|centibyte,centibytes,cB;2|0.008|millibyte,millibytes,mB;2|0.000008|microbyte,microbytes,μB,µB;2|8e-9|nanobyte,nanobytes,nB;2|8e-12|picobyte,picobytes,pB;2|8e-15|femtobyte,femtobytes,fB;2|16|hextet,hextets;3|1|joule,joules,J;3|1000000000000000|petajoule,petajoules,PJ;3|1000000000000|terajoule,terajoules,TJ;3|1000000000|gigajoule,gigajoules,GJ;3|1000000|megajoule,megajoules,MJ;3|1000|kilojoule,kilojoules,kJ;3|100|hectojoule,hectojoules,hJ;3|10|decajoule,decajoules,daJ;3|0.1|decijoule,decijoules,dJ;3|0.01|centijoule,centijoules,cJ;3|0.001|millijoule,millijoules,mJ;3|0.000001|microjoule,microjoules,μJ,µJ;3|1e-9|nanojoule,nanojoules,nJ;3|1e-12|picojoule,picojoules,pJ;3|1e-15|femtojoule,femtojoules,fJ;3|3600|watt-hour,W⋅h,W h,Wh;3|3600000000000000000|petawatt-hour,petawatt-hours,PW⋅h,PW h,PWh;3|3600000000000000|terawatt-hour,terawatt-hours,TW⋅h,TW h,TWh;3|3600000000000|gigawatt-hour,gigawatt-hours,GW⋅h,GW h,GWh;3|3600000000|megawatt-hour,megawatt-hours,MW⋅h,MW h,MWh;3|3600000|kilowatt-hour,kilowatt-hours,kW⋅h,kW h,kWh;3|360000|hectowatt-hour,hectowatt-hours,hW⋅h,hW h,hWh;3|36000|decawatt-hour,decawatt-hours,daW⋅h,daW h,daWh;3|360|deciwatt-hour,deciwatt-hours,dW⋅h,dW h,dWh;3|36|centiwatt-hour,centiwatt-hours,cW⋅h,cW h,cWh;3|3.6|milliwatt-hour,milliwatt-hours,mW⋅h,mW h,mWh;3|0.0036|microwatt-hour,microwatt-hours,μW⋅h,µW⋅h,μW h,µW h,μWh,µWh;3|0.0000036|nanowatt-hour,nanowatt-hours,nW⋅h,nW h,nWh;3|3.6e-9|picowatt-hour,picowatt-hours,pW⋅h,pW h,pWh;3|3.6e-12|femtowatt-hour,femtowatt-hours,fW⋅h,fW h,fWh;4|1|newton,newtons,N;4|1000000000000000|petanewton,petanewtons,PN;4|1000000000000|teranewton,teranewtons,TN;4|1000000000|giganewton,giganewtons,GN;4|1000000|meganewton,meganewtons,MN;4|1000|kilonewton,kilonewtons,kN;4|100|hectonewton,hectonewtons,hN;4|10|decanewton,decanewtons,daN;4|0.1|decinewton,decinewtons,dN;4|0.01|centinewton,centinewtons,cN;4|0.001|millinewton,millinewtons,mN;4|0.000001|micronewton,micronewtons,μN,µN;4|1e-9|nanonewton,nanonewtons,nN;4|1e-12|piconewton,piconewtons,pN;4|1e-15|femtonewton,femtonewtons,fN;4|0.00001|dyne,dynes,dyn;4|4.448222|pound of force,pound-force,lbf;4|4448.2216|kip,klb,kipf,klbf;4|0.138255|poundal,poundals,pdl;4|9.80665|kilogram-force,kilopond,kiloponds,kgf,kp;4|9806.65|tonne-force,metric ton-force,megagram-force,megapond,tf,Mp;5|1|hertz,Hz;5|1000000000000000|petahertz,PHz;5|1000000000000|terahertz,THz;5|1000000000|gigahertz,GHz;5|1000000|megahertz,MHz;5|1000|kilohertz,kHz;5|100|hectohertz,hHz;5|10|decahertz,daHz;5|0.1|decihertz,dHz;5|0.01|centihertz,cHz;5|0.001|millihertz,mHz;5|0.000001|microhertz,μHz,µHz;5|1e-9|nanohertz,nHz;5|1e-12|picohertz,pHz;5|1e-15|femtohertz,fHz;6|1|lux,lx,lumen per square meter,lm/m2,lm/m²;6|1000000000000000|petalux,Plx;6|1000000000000|teralux,Tlx;6|1000000000|gigalux,Glx;6|1000000|megalux,Mlx;6|1000|kilolux,klx;6|100|hectolux,hlx;6|10|decalux,dalx;6|0.1|decilux,dlx;6|0.01|centilux,clx;6|0.001|millilux,mlx;6|0.000001|microlux,μlx,µlx;6|1e-9|nanolux,nlx;6|1e-12|picolux,plx;6|1e-15|femtolux,flx;6|10.764|foot-candle,foot candle,fc,ft-c;6|10000|phot,ph;7|1|meter,meters,metre,metres,m;7|1000000000000000|petameter,petametre,petameters,petametres,Pm;7|1000000000000|terameter,terametre,terameters,terametres,Tm;7|1000000000|gigameter,gigametre,gigameters,gigametres,Gm;7|1000000|megameter,megametre,megameters,megametres,Mm;7|1000|kilometer,kilometre,kilometers,kilometres,km;7|100|hectometer,hectometre,hectometers,hectometres,hm;7|10|decameter,decametre,decameters,decametres,dam;7|0.1|decimeter,decimetre,decimeters,decimetres,dm;7|0.01|centimeter,centimetre,centimeters,centimetres,cm;7|0.001|millimeter,millimetre,millimeters,millimetres,mm;7|0.000001|micrometer,micrometre,micrometers,micrometres,μm,µm;7|1e-9|nanometer,nanometre,nanometers,nanometres,nm;7|1e-12|picometer,picometre,picometers,picometres,pm;7|1e-15|femtometer,femtometre,femtometers,femtometres,fm;7|0.3048|foot,feet,ft,';7|0.3048006096012192|US survey foot,US survey feet,U.S. survey foot,U.S. survey feet;7|0.0254|inch,inches,in,\\\";7|0.9144|yard,yards,yd;7|1609.344|mile,miles,mi;7|1852|nautical mile,nautical miles,M,NM,nmi;7|9460730472580800|light-year,light-years,ly;7|30856775814913670|parsec,parsecs,pc;7|0.0042333|pica,picas;7|0.0003528|point,points;8|1|candela per square meter,candelas per square meter,candela per square metre,candelas per square metre,cd/m2,cd/m²,nit,nits,nt;8|1000000000000000|petacandela per square meter,petacandelas per square meter,petacandela per square metre,petacandelas per square metre,Pcd/m2,Pcd/m²;8|1000000000000|teracandela per square meter,teracandelas per square meter,teracandela per square metre,teracandelas per square metre,Tcd/m2,Tcd/m²;8|1000000000|gigacandela per square meter,gigacandelas per square meter,gigacandela per square metre,gigacandelas per square metre,Gcd/m2,Gcd/m²;8|1000000|megacandela per square meter,megacandelas per square meter,megacandela per square metre,megacandelas per square metre,Mcd/m2,Mcd/m²;8|1000|kilocandela per square meter,kilocandelas per square meter,kilocandela per square metre,kilocandelas per square metre,kcd/m2,kcd/m²;8|100|hectocandela per square meter,hectocandelas per square meter,hectocandela per square metre,hectocandelas per square metre,hcd/m2,hcd/m²;8|10|decacandela per square meter,decacandelas per square meter,decacandela per square metre,decacandelas per square metre,dacd/m2,dacd/m²;8|0.1|decicandela per square meter,decicandelas per square meter,decicandela per square metre,decicandelas per square metre,dcd/m2,dcd/m²;8|0.01|centicandela per square meter,centicandelas per square meter,centicandela per square metre,centicandelas per square metre,ccd/m2,ccd/m²;8|0.001|millicandela per square meter,millicandelas per square meter,millicandela per square metre,millicandelas per square metre,mcd/m2,mcd/m²;8|0.000001|microcandela per square meter,microcandelas per square meter,microcandela per square metre,microcandelas per square metre,μcd/m2,µcd/m2,μcd/m²,µcd/m²;8|1e-9|nanocandela per square meter,nanocandelas per square meter,nanocandela per square metre,nanocandelas per square metre,ncd/m2,ncd/m²;8|1e-12|picocandela per square meter,picocandelas per square meter,picocandela per square metre,picocandelas per square metre,pcd/m2,pcd/m²;8|1e-15|femtocandela per square meter,femtocandelas per square meter,femtocandela per square metre,femtocandelas per square metre,fcd/m2,fcd/m²;9|1|candela,cd,candlepower,cp,CP;9|1000000000000000|petacandela,Pcd;9|1000000000000|teracandela,Tcd;9|1000000000|gigacandela,Gcd;9|1000000|megacandela,Mcd;9|1000|kilocandela,kcd;9|100|hectocandela,hcd;9|10|decacandela,dacd;9|0.1|decicandela,dcd;9|0.01|centicandela,ccd;9|0.001|millicandela,mcd;9|0.000001|microcandela,μcd,µcd;9|1e-9|nanocandela,ncd;9|1e-12|picocandela,pcd;9|1e-15|femtocandela,fcd;9|0.92|hefnerkerze,HK;10|1|gram,grams,g;10|1000000000000000|petagram,petagrams,Pg,gigatonne,gigatonnes,Gt;10|1000000000000|teragram,teragrams,Tg,megatonne,megatonnes,Mt;10|1000000000|gigagram,gigagrams,Gg,kilotonne,kilotonnes,kt;10|1000000|megagram,megagrams,Mg,tonne,tonnes,metric ton,metric tons,t;10|1000|kilogram,kilograms,kg;10|100|hectogram,hectograms,hg;10|10|decagram,decagrams,dag;10|0.1|decigram,decigrams,dg;10|0.01|centigram,centigrams,cg;10|0.001|milligram,milligrams,mg;10|0.000001|microgram,micrograms,μg,µg,mcg;10|1e-9|nanogram,nanograms,ng;10|1e-12|picogram,picograms,pg;10|1e-15|femtogram,femtograms,fg;10|453.59237|pound,pounds,lb,lbs;10|0.06479891|grain,grains,gr;10|6350.29318|stone,stones,st;10|28.349523125|ounce,ounces,oz;10|45360|short hundredweight,cental;10|50800|long hundredweight,imperial hundredweight,cwt;10|907184.74|short ton,short tons,US ton,US tons;10|1016046.9088|long ton,long tons,imperial ton,imperial tons,displacement ton,displacement tons;10|31.1034768|troy ounce,oz t,toz;11|1|watt,watts,W;11|1000000000000000|petawatt,petawatts,PW;11|1000000000000|terawatt,terawatts,TW;11|1000000000|gigawatt,gigawatts,GW;11|1000000|megawatt,megawatts,MW;11|1000|kilowatt,kilowatts,kW;11|100|hectowatt,hectowatts,hW;11|10|decawatt,decawatts,daW;11|0.1|deciwatt,deciwatts,dW;11|0.01|centiwatt,centiwatts,cW;11|0.001|milliwatt,milliwatts,mW;11|0.000001|microwatt,microwatts,μW,µW;11|1e-9|nanowatt,nanowatts,nW;11|1e-12|picowatt,picowatts,pW;11|1e-15|femtowatt,femtowatts,fW;11|745.699872|horsepower,mechanical horsepower,hp;12|1|pascal,pascals,Pa;12|1000000000000000|petapascal,petapascals,PPa;12|1000000000000|terapascal,terapascals,TPa;12|1000000000|gigapascal,gigapascals,GPa;12|1000000|megapascal,megapascals,MPa,decabar,decabars,dabar;12|1000|kilopascal,kilopascals,kPa,centibar,centibars,cbar;12|100|hectopascal,hectopascals,hPa,millibar,millibars,mbar;12|10|decapascal,decapascals,daPa;12|0.1|decipascal,decipascals,dPa,microbar,microbars,μbar,µbar;12|0.01|centipascal,centipascals,cPa;12|0.001|millipascal,millipascals,mPa;12|0.000001|micropascal,micropascals,μPa,µPa;12|1e-9|nanopascal,nanopascals,nPa;12|1e-12|picopascal,picopascals,pPa;12|1e-15|femtopascal,femtopascals,fPa;12|100000|bar,bars;12|100000000000000000000|petabar,petabars,Pbar;12|100000000000000000|terabar,terabars,Tbar;12|100000000000000|gigabar,gigabars,Gbar;12|100000000000|megabar,megabars,Mbar;12|100000000|kilobar,kilobars,kbar;12|10000000|hectobar,hectobars,hbar;12|10000|decibar,decibars,dbar;12|0.0001|nanobar,nanobars,nbar;12|1e-7|picobar,picobars,pbar;12|1e-10|femtobar,femtobars,fbar;12|133.32236842105263|torr,torrs,Torr;12|0.13332236842105263|millitorr,mTorr;12|101325|atmosphere,atmospheres,atm;12|6894.757|pound per square inch,pounds per square inch,psi,lbf/in2,lbf/in²;12|249.0889|inch of water,inches of water,inAq,Aq;12|3386.389|inch of mercury,inches of mercury,inHg,Hg;13|1|kelvin,kelvins,K,celsius,C,°C;13|1000000000000000|petakelvin,petakelvins,PK;13|1000000000000|terakelvin,terakelvins,TK;13|1000000000|gigakelvin,gigakelvins,GK;13|1000000|megakelvin,megakelvins,MK;13|1000|kilokelvin,kilokelvins,kK;13|100|hectokelvin,hectokelvins,hK;13|10|decakelvin,decakelvins,daK;13|0.1|decikelvin,decikelvins,dK;13|0.01|centikelvin,centikelvins,cK;13|0.001|millikelvin,millikelvins,mK;13|0.000001|microkelvin,microkelvins,μK,µK;13|1e-9|nanokelvin,nanokelvins,nK;13|1e-12|picokelvin,picokelvins,pK;13|1e-15|femtokelvin,femtokelvins,fK;13|0.5555555555555556|fahrenheit,F,°F,rankine,R;14|1|second,seconds,s;14|1000000000000000|petasecond,petaseconds,Ps;14|1000000000000|terasecond,teraseconds,Ts;14|1000000000|gigasecond,gigaseconds,Gs;14|1000000|megasecond,megaseconds,Ms;14|1000|kilosecond,kiloseconds,ks;14|100|hectosecond,hectoseconds,hs;14|10|decasecond,decaseconds,das;14|0.1|decisecond,deciseconds,ds;14|0.01|centisecond,centiseconds,cs;14|0.001|millisecond,milliseconds,ms;14|0.000001|microsecond,microseconds,μs,µs;14|1e-9|nanosecond,nanoseconds,ns;14|1e-12|picosecond,picoseconds,ps;14|1e-15|femtosecond,femtoseconds,fs;14|60|minute,minutes,min;14|3600|hour,hours,h;14|86.4|milliday,millidays,md;14|86400|day,days,d;14|604800|week,weeks,wk;14|1209600|fortnight,fortnights,fn;14|2592000|month,months,mo;14|31536000|year,years,a,y,yr;14|315360000|decade,decades,dec;14|3153600000|century,centuries;14|31536000000|millennium,millennia;14|90|moment,moments;14|1e-8|shake,shakes;14|0.001024|time unit,TU;14|1e-13|svedberg,svedbergs,S;15|1|cubic meter,cubic meters,cubic metre,cubic metres,stere,steres,m³,m3,kiloliter,kiloliters,kilolitre,kilolitres,kl,kL;15|1e+45|cubic petameter,cubic petameters,Pm3,Pm³;15|1e+36|cubic terameter,cubic terameters,Tm3,Tm³;15|1e+27|cubic gigameter,cubic gigameters,Gm3,Gm³;15|1000000000000000000|cubic megameter,cubic megameters,Mm3,Mm³;15|1000000000|cubic kilometer,cubic kilometers,km3,km³,teraliter,teraliters,teralitre,teralitres,Tl,TL;15|1000000|cubic hectometer,cubic hectometers,hm3,hm³,gigaliter,gigaliters,gigalitre,gigalitres,Gl,GL;15|1000|cubic decameter,cubic decameters,dam3,dam³,megaliter,megaliters,megalitre,megalitres,Ml,ML;15|0.001|cubic decimeter,cubic decimeters,dm3,dm³,liter,liters,litre,litres,l,L;15|0.000001|cubic centimeter,cubic centimeters,cm3,cm³,milliliter,milliliters,millilitre,millilitres,ml,mL;15|1e-9|cubic millimeter,cubic millimeters,mm3,mm³,microliter,microliters,microlitre,microlitres,μl,µl,μL,µL;15|1e-18|cubic micrometer,cubic micrometers,μm3,µm3,μm³,µm³,femtoliter,femtoliters,femtolitre,femtolitres,fl,fL;15|1e-27|cubic nanometer,cubic nanometers,nm3,nm³;15|1e-36|cubic picometer,cubic picometers,pm3,pm³;15|1e-45|cubic femtometer,cubic femtometers,fm3,fm³;15|1000000000000|petaliter,petaliters,petalitre,petalitres,Pl,PL;15|0.1|hectoliter,hectoliters,hectolitre,hectolitres,hl,hL;15|0.01|decaliter,decaliters,decalitre,decalitres,dal,daL;15|0.0001|deciliter,deciliters,decilitre,decilitres,dl,dL;15|0.00001|centiliter,centiliters,centilitre,centilitres,cl,cL;15|1e-12|nanoliter,nanoliters,nanolitre,nanolitres,nl,nL;15|1e-15|picoliter,picoliters,picolitre,picolitres,pl,pL;15|4168181825.4405794|cubic mile,cubic miles,cu mi,mi3,mi³;15|1233.48183754752|acre-foot,acre-feet,ac⋅ft,ac ft;15|0.764554857984|cubic yard,cubic yards,cu yd,yd3,yd³;15|0.028316846592|cubic foot,cubic feet,cu ft,ft3,ft³;15|0.002359737|board foot,board feet;15|0.000016387064|cubic inch,cubic inches,cu in,in3,in³;15|1.133|measurement ton,measurement tons,MTON;15|0.16365924|imperial barrel,imperial barrels,imp bbl;15|0.03636872|imperial bushel,imperial bushels,imp bsh,imp bu;15|0.00909218|imperial peck,imperial pecks,pk,imp pk;15|0.00454609|imperial gallon,imperial gallons,imp gal;15|0.0011365225|imperial quart,imperial quarts,imp qt;15|0.00056826125|imperial pint,imperial pints,imp pt;15|0.0000284130625|imperial fluid ounce,imperial fluid ounces,imp fl oz;15|0.00000492892159375|teaspoon,teaspoons,US teaspoon,US teaspoons,tsp;15|0.00001478676478125|tablespoon,tablespoons,US tablespoon,US tablespoons,tbsp;15|0.0000295735295625|US fluid ounce,US fluid ounces,fl oz,fl. oz.,oz. fl.;15|0.0002365882365|cup,cups,c;15|0.00024|US legal cup,US legal cups,US lc;15|0.000473176473|pint,pints,US liquid pint,US liquid pints,pt,p;15|0.000946352946|quart,quarts,US liquid quart,US liquid quarts,qt;15|0.003785411784|gallon,gallons,US liquid gallon,US liquid gallons,gal;15|0.03523907016688|US bushel,US bushels,US bsh,US bu;15|0.00880976754172|US peck,US pk;15|0.00440488377086|US dry gallon,US dry gal;15|0.1156|US dry barrel,US dry barrels,US dry bbl;15|0.001101220942715|US dry quart,US dry qt;15|0.0005506104713575|US dry pint,US dry pt\";\n\n/**\n * Decodes {@link PACKED_UNIT_TABLE} into the {@link UNIT_TABLE} record. The\n * aliases in one record share a single `[kind, ratio]` tuple, safe since the\n * table is read-only by type.\n */\nfunction unpackUnitTable(packed: string): Record<string, UnitEntry> {\n const table: Record<string, UnitEntry> = {};\n for (const record of packed.split(\";\")) {\n const firstBar = record.indexOf(\"|\");\n const secondBar = record.indexOf(\"|\", firstBar + 1);\n const kind = Number(record.slice(0, firstBar));\n const ratio = Number(record.slice(firstBar + 1, secondBar));\n const entry: UnitEntry = [kind, ratio];\n for (const alias of record.slice(secondBar + 1).split(\",\")) {\n table[alias] = entry;\n }\n }\n return table;\n}\n\n/**\n * Every unit spelling the engine can resolve, to `[measureKind, ratioToBase]`.\n *\n * Keys are case-sensitive and are never normalized or aliased: `C` is Celsius\n * and `c` is a cup, `MB` is megabytes and `mb` is millibits. Multi-word\n * spellings are present here and resolve through the conversion API even though\n * the lexer cannot tokenize them.\n *\n * Stored packed (see {@link PACKED_UNIT_TABLE}) and decoded once at load: 1456\n * spellings share 378 distinct pairs, so each ratio parses once per pair rather\n * than once per alias. The generator asserts the packed form decodes to exactly\n * the source table.\n */\nexport const UNIT_TABLE: Readonly<Record<string, UnitEntry>> = unpackUnitTable(PACKED_UNIT_TABLE);\n\n/**\n * Additive offsets applied around the ratio, for measures whose scales do not\n * share an origin. Temperature only.\n */\nexport const UNIT_DIFFERENCES: Readonly<Record<string, number>> = {\n \"fahrenheit\": 459.67,\n \"F\": 459.67,\n \"°F\": 459.67,\n \"celsius\": 273.15,\n \"C\": 273.15,\n \"°C\": 273.15,\n};\n\n/**\n * Ordered `[symbol, threshold]` pairs per measure kind, used to pick the most\n * readable unit for a magnitude. Thresholds are expressed in the list's FIRST\n * unit, which is therefore also its smallest, and the last entry whose\n * threshold the absolute value reaches wins.\n *\n * The two properties are load-bearing together: `convertToBestMetric` converts\n * the magnitude into the first unit and then walks forwards, breaking at the\n * first threshold it does not reach. A list that does not ascend runs off the\n * end of the sensible units rather than merely picking a poor one, and moving a\n * different unit to the front silently changes what every threshold means.\n *\n * Metric only. The imperial lists exist upstream but nothing here has ever\n * requested them, so they are not ported.\n */\nexport const BEST_UNITS_METRIC: Readonly<\n Record<number, readonly (readonly [symbol: string, threshold: number])[]>\n> = {\n 0: [[\"deg\", 1]], // angle\n 1: [[\"mm2\", 1], [\"cm2\", 100], [\"m2\", 1000000], [\"km2\", 1000000000000]], // area\n 2: [[\"bits\", 1], [\"B\", 8], [\"KB\", 8000], [\"MB\", 8000000], [\"GB\", 8000000000], [\"TB\", 8000000000000], [\"PB\", 8000000000000000]], // data\n 3: [[\"J\", 1], [\"Wh\", 3600], [\"kWh\", 3600000], [\"MWh\", 3600000000], [\"GWh\", 3600000000000]], // energy\n 4: [[\"N\", 1]], // force\n 5: [[\"Hz\", 1], [\"kHz\", 1000], [\"MHz\", 1000000], [\"GHz\", 1000000000], [\"THz\", 1000000000000], [\"PHz\", 1000000000000000]], // frequency\n 6: [[\"lux\", 1], [\"klx\", 1000]], // illuminance, corrected\n 7: [[\"mm\", 1], [\"cm\", 10], [\"m\", 1000], [\"km\", 1000000]], // length\n 8: [[\"cd/m²\", 1]], // luminance\n 9: [[\"cd\", 1]], // luminousIntensity\n 10: [[\"mg\", 1], [\"g\", 1000], [\"kg\", 1000000]], // mass\n 11: [[\"W\", 1], [\"kW\", 1000], [\"MW\", 1000000], [\"GW\", 1000000000], [\"TW\", 1000000000000], [\"PW\", 1000000000000000]], // power\n 12: [[\"Pa\", 1]], // pressure\n 13: [[\"C\", 1]], // temperature\n 14: [[\"fs\", 1], [\"ps\", 1000], [\"ns\", 1000000], [\"µs\", 1000000000], [\"ms\", 1000000000000], [\"s\", 1000000000000000], [\"min\", 60000000000000000], [\"h\", 3600000000000000000], [\"d\", 86400000000000000000], [\"y\", 3.1536e+22]], // time\n 15: [[\"mL\", 1], [\"L\", 1000]], // volume\n};\n\n/**\n * The symbols offered for a measure by `<value> <unit> to ?`.\n *\n * A separate, curated vocabulary rather than the keys of UNIT_TABLE filtered by\n * kind: upstream publishes a shorter symbols-only list per unit, and the two\n * genuinely differ. Volume's symbols include `c`, `US lc` and `pt` but not\n * `cup`/`cups`; Time's include `wk` and `mo` but not `week`/`month`.\n * Deriving this from UNIT_TABLE would roughly quadruple every list.\n */\nexport const MEASURE_SYMBOLS: Readonly<Record<number, readonly string[]>> = {\n 0: [\"rad\", \"rads\", \"r\", \"deg\", \"degs\", \"°\", \"gon\", \"gons\", \"grad\", \"grads\", \"grade\", \"grades\", \"arcmin\", \"arcmins\", \"arcsec\", \"arcsecs\"], // angle\n 1: [\"m²\", \"m2\", \"Pm²\", \"Pm2\", \"Tm²\", \"Tm2\", \"Gm²\", \"Gm2\", \"Mm²\", \"Mm2\", \"km²\", \"km2\", \"hm²\", \"hm2\", \"dam²\", \"dam2\", \"dm²\", \"dm2\", \"cm²\", \"cm2\", \"mm²\", \"mm2\", \"μm²\", \"µm²\", \"μm2\", \"µm2\", \"nm²\", \"nm2\", \"pm²\", \"pm2\", \"fm²\", \"fm2\", \"ac\", \"ca\", \"da\", \"daa\", \"ha\", \"sq ft\", \"ft²\", \"ft2\", \"sq in\", \"in²\", \"in2\", \"sq yd\", \"yd²\", \"yd2\", \"sq mi\", \"mi²\", \"mi2\"], // area\n 2: [\"b\", \"Pib\", \"Tib\", \"Gib\", \"Mib\", \"Kib\", \"Kb\", \"KB\", \"Pb\", \"Tb\", \"Gb\", \"Mb\", \"kb\", \"hb\", \"dab\", \"db\", \"cb\", \"mb\", \"μb\", \"µb\", \"nb\", \"pb\", \"fb\", \"B\", \"PiB\", \"TiB\", \"GiB\", \"MiB\", \"KiB\", \"PB\", \"TB\", \"GB\", \"MB\", \"kB\", \"hB\", \"daB\", \"dB\", \"cB\", \"mB\", \"μB\", \"µB\", \"nB\", \"pB\", \"fB\"], // data\n 3: [\"J\", \"PJ\", \"TJ\", \"GJ\", \"MJ\", \"kJ\", \"hJ\", \"daJ\", \"dJ\", \"cJ\", \"mJ\", \"μJ\", \"µJ\", \"nJ\", \"pJ\", \"fJ\", \"W⋅h\", \"W h\", \"Wh\", \"PW⋅h\", \"PW h\", \"PWh\", \"TW⋅h\", \"TW h\", \"TWh\", \"GW⋅h\", \"GW h\", \"GWh\", \"MW⋅h\", \"MW h\", \"MWh\", \"kW⋅h\", \"kW h\", \"kWh\", \"hW⋅h\", \"hW h\", \"hWh\", \"daW⋅h\", \"daW h\", \"daWh\", \"dW⋅h\", \"dW h\", \"dWh\", \"cW⋅h\", \"cW h\", \"cWh\", \"mW⋅h\", \"mW h\", \"mWh\", \"μW⋅h\", \"µW⋅h\", \"μW h\", \"µW h\", \"μWh\", \"µWh\", \"nW⋅h\", \"nW h\", \"nWh\", \"pW⋅h\", \"pW h\", \"pWh\", \"fW⋅h\", \"fW h\", \"fWh\"], // energy\n 4: [\"N\", \"PN\", \"TN\", \"GN\", \"MN\", \"kN\", \"hN\", \"daN\", \"dN\", \"cN\", \"mN\", \"μN\", \"µN\", \"nN\", \"pN\", \"fN\", \"dyn\", \"lbf\", \"klb\", \"kipf\", \"klbf\", \"pdl\", \"kgf\", \"kp\", \"tf\", \"Mp\"], // force\n 5: [\"Hz\", \"PHz\", \"THz\", \"GHz\", \"MHz\", \"kHz\", \"hHz\", \"daHz\", \"dHz\", \"cHz\", \"mHz\", \"μHz\", \"µHz\", \"nHz\", \"pHz\", \"fHz\"], // frequency\n 6: [\"lx\", \"Plx\", \"Tlx\", \"Glx\", \"Mlx\", \"klx\", \"hlx\", \"dalx\", \"dlx\", \"clx\", \"mlx\", \"μlx\", \"µlx\", \"nlx\", \"plx\", \"flx\", \"lm/m2\", \"lm/m²\", \"fc\", \"ft-c\", \"ph\"], // illuminance\n 7: [\"m\", \"Pm\", \"Tm\", \"Gm\", \"Mm\", \"km\", \"hm\", \"dam\", \"dm\", \"cm\", \"mm\", \"μm\", \"µm\", \"nm\", \"pm\", \"fm\", \"ft\", \"'\", \"in\", \"\\\"\", \"yd\", \"mi\", \"M\", \"NM\", \"nmi\", \"ly\", \"pc\"], // length\n 8: [\"cd/m2\", \"cd/m²\", \"Pcd/m2\", \"Pcd/m²\", \"Tcd/m2\", \"Tcd/m²\", \"Gcd/m2\", \"Gcd/m²\", \"Mcd/m2\", \"Mcd/m²\", \"kcd/m2\", \"kcd/m²\", \"hcd/m2\", \"hcd/m²\", \"dacd/m2\", \"dacd/m²\", \"dcd/m2\", \"dcd/m²\", \"ccd/m2\", \"ccd/m²\", \"mcd/m2\", \"mcd/m²\", \"μcd/m2\", \"µcd/m2\", \"μcd/m²\", \"µcd/m²\", \"ncd/m2\", \"ncd/m²\", \"pcd/m2\", \"pcd/m²\", \"fcd/m2\", \"fcd/m²\", \"nt\"], // luminance\n 9: [\"cd\", \"Pcd\", \"Tcd\", \"Gcd\", \"Mcd\", \"kcd\", \"hcd\", \"dacd\", \"dcd\", \"ccd\", \"mcd\", \"μcd\", \"µcd\", \"ncd\", \"pcd\", \"fcd\", \"cp\", \"CP\", \"HK\"], // luminousIntensity\n 10: [\"g\", \"Pg\", \"Tg\", \"Gg\", \"Mg\", \"kg\", \"hg\", \"dag\", \"dg\", \"cg\", \"mg\", \"μg\", \"µg\", \"ng\", \"pg\", \"fg\", \"mcg\", \"t\", \"kt\", \"Mt\", \"Gt\", \"lb\", \"lbs\", \"gr\", \"st\", \"oz\", \"cwt\", \"oz t\", \"toz\"], // mass\n 11: [\"W\", \"PW\", \"TW\", \"GW\", \"MW\", \"kW\", \"hW\", \"daW\", \"dW\", \"cW\", \"mW\", \"μW\", \"µW\", \"nW\", \"pW\", \"fW\", \"hp\"], // power\n 12: [\"Pa\", \"PPa\", \"TPa\", \"GPa\", \"MPa\", \"kPa\", \"hPa\", \"daPa\", \"dPa\", \"cPa\", \"mPa\", \"μPa\", \"µPa\", \"nPa\", \"pPa\", \"fPa\", \"bar\", \"Pbar\", \"Tbar\", \"Gbar\", \"Mbar\", \"kbar\", \"hbar\", \"dabar\", \"dbar\", \"cbar\", \"mbar\", \"μbar\", \"µbar\", \"nbar\", \"pbar\", \"fbar\", \"Torr\", \"mTorr\", \"atm\", \"psi\", \"lbf/in2\", \"lbf/in²\", \"inAq\", \"Aq\", \"inHg\", \"Hg\"], // pressure\n 13: [\"K\", \"PK\", \"TK\", \"GK\", \"MK\", \"kK\", \"hK\", \"daK\", \"dK\", \"cK\", \"mK\", \"μK\", \"µK\", \"nK\", \"pK\", \"fK\", \"F\", \"°F\", \"C\", \"°C\", \"R\"], // temperature\n 14: [\"s\", \"Ps\", \"Ts\", \"Gs\", \"Ms\", \"ks\", \"hs\", \"das\", \"ds\", \"cs\", \"ms\", \"μs\", \"µs\", \"ns\", \"ps\", \"fs\", \"min\", \"h\", \"md\", \"d\", \"wk\", \"fn\", \"mo\", \"a\", \"y\", \"yr\", \"dec\", \"TU\", \"S\"], // time\n 15: [\"m³\", \"m3\", \"Pm3\", \"Pm³\", \"Tm3\", \"Tm³\", \"Gm3\", \"Gm³\", \"Mm3\", \"Mm³\", \"km3\", \"km³\", \"hm3\", \"hm³\", \"dam3\", \"dam³\", \"dm3\", \"dm³\", \"cm3\", \"cm³\", \"mm3\", \"mm³\", \"μm3\", \"µm3\", \"μm³\", \"µm³\", \"nm3\", \"nm³\", \"pm3\", \"pm³\", \"fm3\", \"fm³\", \"l\", \"L\", \"Pl\", \"PL\", \"Tl\", \"TL\", \"Gl\", \"GL\", \"Ml\", \"ML\", \"kl\", \"kL\", \"hl\", \"hL\", \"dal\", \"daL\", \"dl\", \"dL\", \"cl\", \"cL\", \"ml\", \"mL\", \"μl\", \"µl\", \"μL\", \"µL\", \"nl\", \"nL\", \"pl\", \"pL\", \"fl\", \"fL\", \"cu mi\", \"mi3\", \"mi³\", \"ac⋅ft\", \"ac ft\", \"cu yd\", \"yd3\", \"yd³\", \"cu ft\", \"ft3\", \"ft³\", \"cu in\", \"in3\", \"in³\", \"MTON\", \"imp bbl\", \"imp bsh\", \"imp bu\", \"pk\", \"imp pk\", \"imp gal\", \"imp qt\", \"imp pt\", \"imp fl oz\", \"tsp\", \"tbsp\", \"fl oz\", \"fl. oz.\", \"oz. fl.\", \"c\", \"US lc\", \"pt\", \"p\", \"qt\", \"gal\", \"US bsh\", \"US bu\", \"US pk\", \"US dry gal\", \"US dry bbl\", \"US dry qt\", \"US dry pt\"], // volume\n};\n\n/**\n * Measure kind id to the name `getMeasure()` reports. Two units are\n * convertible only when these strings match, so a typo here silently breaks\n * conversion for one whole measure.\n */\nexport const MEASURE_KIND_NAMES: Readonly<Record<number, string>> = {\n 0: \"angle\",\n 1: \"area\",\n 2: \"data\",\n 3: \"energy\",\n 4: \"force\",\n 5: \"frequency\",\n 6: \"illuminance\",\n 7: \"length\",\n 8: \"luminance\",\n 9: \"luminousIntensity\",\n 10: \"mass\",\n 11: \"power\",\n 12: \"pressure\",\n 13: \"temperature\",\n 14: \"time\",\n 15: \"volume\",\n};\n","/**\n * Extended unit categories not supported by the `convert` npm package (v7.0.0).\n *\n * `convert` only ships 16 measure kinds (Angle, Area, Data, Energy, Force,\n * Frequency, Illuminance, Length, Luminance, LuminousIntensity, Mass, Power,\n * Pressure, Temperature, Time, Volume. See MEASURE_KIND_NAMES in\n * UomConverter.ts). The project's own wiki documents several more\n * (Volume Flow Rate, Speed, Pace, Voltage, Current, Apparent Power,\n * Reactive Power, Reactive Energy, Parts-Per) that the library has no\n * concept of at all.\n *\n * A hand-rolled table is deliberately used instead of pulling in a bigger\n * unit-conversion library (e.g. js-quantities, convert-units, mathjs's unit\n * system): every category here is a pure linear ratio scale (no\n * Temperature-style offset formula needed), so the whole extension is a\n * `{ measure, toBase }` lookup plus a couple of arithmetic call sites in\n * UomConverter.ts. Pulling in a heavier dependency for ~30 extra unit\n * symbols would undo the earlier deliberate migration to `convert` for its\n * small size, and would reintroduce the aliasing/normalization behavior\n * this project explicitly moved away from (units here are case-sensitive,\n * no aliasing, matching UomConverter.ts's existing design).\n *\n * Unit symbols are restricted to what the lexer can tokenize as a single\n * UNIT token: `tokenizeIdentifier()` (ExpressionLexer.ts) only reads\n * `[a-zA-Z0-9_]` (plus Unicode), no `/`, no `-`. That rules out\n * slash-notation like \"km/h\" or \"min/km\" as literal unit text. Every\n * category below uses a plain-letters abbreviation where a standard one\n * exists (mph, kn, gpm, cfs, ...); Pace has no standard non-slash\n * abbreviation, so it uses an underscore instead (\"min_km\", \"min_mi\")\n * the one place in this table where that's necessary.\n */\n\nexport interface ExtendedUnitDef {\n /** Category name, matching the style of UomConverter.ts's MEASURE_KIND_NAMES (lowerCamelCase). */\n measure: string;\n /** Multiply a value in this unit by this factor to get the value in the category's base unit. */\n toBase: number;\n}\n\n/** Units beyond the base set, added to whatever the locale already recognises. */\nexport const EXTENDED_UNITS: Record<string, ExtendedUnitDef> = {\n // ── Speed (base: mps, meters per second) ──────────────────────────────\n mps: { measure: \"speed\", toBase: 1 },\n kph: { measure: \"speed\", toBase: 1000 / 3600 },\n mph: { measure: \"speed\", toBase: 0.44704 }, // 1 mile (1609.344m) / 3600s\n kn: { measure: \"speed\", toBase: 1852 / 3600 }, // 1 nautical mile = 1852m exactly\n // \"fps\" (feet per second) deliberately NOT used, confirmed via a real\n // regression (20 failures in VideoTimecode.spec.ts) that it collides with\n // the Time package's \"fps\" (frames per second), which FpsRateNormalizerRule\n // requires to lex as a plain IDENT token. \"ft_s\" avoids the collision,\n // following the same underscore convention as Pace below.\n ft_s: { measure: \"speed\", toBase: 0.3048 }, // 1 ft = 0.3048m exactly\n\n // ── Pace (base: seconds per meter, time/distance, the reciprocal of speed) ──\n // Pace and Speed are deliberately separate measures: converting between them\n // is a reciprocal (1/x) relationship, not a linear scale, so they can't share\n // this table's plain factor-ratio conversion.\n min_km: { measure: \"pace\", toBase: 60 / 1000 },\n min_mi: { measure: \"pace\", toBase: 60 / 1609.344 },\n\n // ── Voltage (base: V, expressed in mV/kV only) ─────────────────────────\n // The bare symbol \"V\" is deliberately NOT registered, it collides with\n // \"V\" the stock ticker (Visa) in packages/stocks/MajorTickers.ts, whose\n // StockTickerNormalizerRule also requires an IDENT token (same class of\n // issue as \"var\"/\"fps\" above; not currently test-covered since bare-ticker\n // recognition is opt-in, but a real latent conflict). \"mV\"/\"kV\" don't\n // collide with anything and cover the practically useful range.\n mV: { measure: \"voltage\", toBase: 0.001 },\n kV: { measure: \"voltage\", toBase: 1000 },\n\n // ── Current (base: A) ───────────────────────────────────────────────\n mA: { measure: \"current\", toBase: 0.001 },\n A: { measure: \"current\", toBase: 1 },\n kA: { measure: \"current\", toBase: 1000 },\n\n // ── Apparent Power (base: VA), S = V × I, not real power ─────────────\n VA: { measure: \"apparentPower\", toBase: 1 },\n kVA: { measure: \"apparentPower\", toBase: 1000 },\n MVA: { measure: \"apparentPower\", toBase: 1_000_000 },\n\n // ── Reactive Power (base: var, expressed in kvar/Mvar only) ────────────\n // The bare IEC symbol \"var\" is deliberately NOT registered as a unit\n // confirmed via a real regression (ExpressionLexer.identifiers-keywords.spec.ts's\n // \"$var\" test) that it collides with \"var\" as an extremely common variable\n // name (and former JS keyword). \"kvar\"/\"Mvar\" don't collide with anything\n // and cover the practically useful range.\n kvar: { measure: \"reactivePower\", toBase: 1000 },\n Mvar: { measure: \"reactivePower\", toBase: 1_000_000 },\n\n // ── Reactive Energy (base: varh), IEC standard symbol \"varh\" ─────────\n varh: { measure: \"reactiveEnergy\", toBase: 1 },\n kvarh: { measure: \"reactiveEnergy\", toBase: 1000 },\n Mvarh: { measure: \"reactiveEnergy\", toBase: 1_000_000 },\n\n // ── Volume Flow Rate (base: m3s, cubic meters per second) ─────────────\n m3s: { measure: \"volumeFlowRate\", toBase: 1 },\n m3h: { measure: \"volumeFlowRate\", toBase: 1 / 3600 },\n lps: { measure: \"volumeFlowRate\", toBase: 0.001 }, // 1 L/s = 0.001 m3/s\n lpm: { measure: \"volumeFlowRate\", toBase: 0.001 / 60 },\n gpm: { measure: \"volumeFlowRate\", toBase: 0.003785411784 / 60 }, // US gallon = 3.785411784 L exactly\n cfs: { measure: \"volumeFlowRate\", toBase: 0.028316846592 }, // 1 ft3 = 0.028316846592 m3 exactly\n\n // ── Parts-Per (base: dimensionless fraction, 1 = whole) ───────────────\n // \"%\" is intentionally excluded, it's owned by the project's dedicated\n // Percentage provider, not the UoM system.\n ppm: { measure: \"partsPer\", toBase: 1e-6 },\n ppb: { measure: \"partsPer\", toBase: 1e-9 },\n ppt: { measure: \"partsPer\", toBase: 1e-12 }, // parts per trillion (chemistry/environmental convention)\n permille: { measure: \"partsPer\", toBase: 1e-3 },\n // ── Length, extending the base table rather than replacing it ─────────\n //\n // These share the `length` measure with the generated table, so they convert\n // against metres and everything derived from them. Ratios are the exact\n // international definitions, all of which are whole multiples of the inch\n // (0.0254 m exactly) except the mil, which is a thousandth of one.\n mil: { measure: \"length\", toBase: 0.0000254 },\n mils: { measure: \"length\", toBase: 0.0000254 },\n hand: { measure: \"length\", toBase: 0.1016 }, // 4 in\n hands: { measure: \"length\", toBase: 0.1016 },\n rod: { measure: \"length\", toBase: 5.0292 }, // 16.5 ft\n rods: { measure: \"length\", toBase: 5.0292 },\n chain: { measure: \"length\", toBase: 20.1168 }, // 66 ft, 4 rods\n chains: { measure: \"length\", toBase: 20.1168 },\n furlong: { measure: \"length\", toBase: 201.168 }, // 10 chains\n furlongs: { measure: \"length\", toBase: 201.168 },\n cable: { measure: \"length\", toBase: 185.2 }, // a tenth of a nautical mile\n cables: { measure: \"length\", toBase: 185.2 },\n league: { measure: \"length\", toBase: 4828.032 }, // 3 miles\n leagues: { measure: \"length\", toBase: 4828.032 },\n\n // ── Mass ──────────────────────────────────────────────────────────────\n // The metric carat is exactly 200 mg by definition, not the older and\n // variable gemstone carat, and not the karat that measures gold purity.\n carat: { measure: \"mass\", toBase: 0.2 },\n carats: { measure: \"mass\", toBase: 0.2 },\n // The metric centner, 100 kg, as used across continental Europe. The\n // Imperial hundredweight is a different quantity and is already `cwt`.\n centner: { measure: \"mass\", toBase: 100000 },\n centners: { measure: \"mass\", toBase: 100000 },\n\n};\n"]}
@@ -1,3 +1,2 @@
1
-
2
1
  //# sourceMappingURL=chunk-2RWAXT6O.js.map
3
2
  //# sourceMappingURL=chunk-2RWAXT6O.js.map
@@ -0,0 +1,3 @@
1
+ 'use strict';var chunkTLG7VZRX_cjs=require('./chunk-TLG7VZRX.cjs'),chunkSOMGSIO4_cjs=require('./chunk-SOMGSIO4.cjs');var T=new Set(["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VES","VND","VUV","WST","XAF","XCD","XCG","XOF","XPF","YER","ZAR","ZMW","ZWG"]);function N(O){return T.has(O.toUpperCase())}var d={API_ERROR:"CURRENCY_API_ERROR",UNKNOWN_CODE:"UNKNOWN_CURRENCY_CODE",CRYPTO_API_ERROR:"CRYPTO_PRICE_API_ERROR"},o=class o{constructor(){this.baseTables=new Map;}isCryptoCode(t){return t.toUpperCase()in o.CRYPTO_IDS}async getRate(t,e,r){let n=t.toUpperCase(),s=e.toUpperCase();if(this.isCryptoCode(n)||this.isCryptoCode(s))return this.getCryptoRate(n,s,r);let{signal:C,cleanup:l}=chunkTLG7VZRX_cjs.a(r,o.FETCH_TIMEOUT_MS,"Currency API fetch");try{let a=await fetch(`https://api.frankfurter.dev/v2/rates?base=${n}`,{signal:C});if(!a.ok)throw chunkSOMGSIO4_cjs.c.external(d.API_ERROR,`Currency API returned ${a.status}`,{status:a.status});let i=await a.json(),c=Array.isArray(i)?Object.fromEntries(i.filter(R=>{if(typeof R!="object"||R===null)return !1;let u=R;return typeof u.quote=="string"&&typeof u.rate=="number"}).map(R=>[R.quote.toUpperCase(),R.rate])):i.rates??{};if(c[s]===void 0)throw chunkSOMGSIO4_cjs.c.validation(d.UNKNOWN_CODE,`Unknown currency: ${s}`,{code:s});return this.baseTables.set(n,{fetchedAt:Date.now(),rates:{...c,[n]:1}}),c[s]}finally{l();}}async getCryptoRate(t,e,r){let{signal:n,cleanup:s}=chunkTLG7VZRX_cjs.a(r,o.FETCH_TIMEOUT_MS,"Crypto price API fetch");try{let C=this.isCryptoCode(t),l=this.isCryptoCode(e),a;if(C&&l){let i=o.CRYPTO_IDS[t],c=o.CRYPTO_IDS[e],R=await this.fetchCoinGeckoPrices([i,c],"usd",n),u=R[i]?.usd,P=R[c]?.usd;if(typeof u!="number")throw chunkSOMGSIO4_cjs.c.validation(d.UNKNOWN_CODE,`Unknown currency: ${t}`,{code:t});if(typeof P!="number")throw chunkSOMGSIO4_cjs.c.validation(d.UNKNOWN_CODE,`Unknown currency: ${e}`,{code:e});a=u/P;}else if(C){let i=o.CRYPTO_IDS[t],c=e.toLowerCase(),u=(await this.fetchCoinGeckoPrices([i],c,n))[i]?.[c];if(typeof u!="number")throw chunkSOMGSIO4_cjs.c.validation(d.UNKNOWN_CODE,`Unknown currency: ${e}`,{code:e});a=u;}else {let i=o.CRYPTO_IDS[e],c=t.toLowerCase(),u=(await this.fetchCoinGeckoPrices([i],c,n))[i]?.[c];if(typeof u!="number")throw chunkSOMGSIO4_cjs.c.validation(d.UNKNOWN_CODE,`Unknown currency: ${t}`,{code:t});a=1/u;}return this.baseTables.set(t,{fetchedAt:Date.now(),rates:{[t]:1,[e]:a}}),a}finally{s();}}async fetchCoinGeckoPrices(t,e,r){let n=`https://api.coingecko.com/api/v3/simple/price?ids=${t.join(",")}&vs_currencies=${e}`,s=await fetch(n,{signal:r});if(!s.ok)throw chunkSOMGSIO4_cjs.c.external(d.CRYPTO_API_ERROR,`Crypto price API returned ${s.status}`,{status:s.status});return s.json()}primeRates(t,e){let r=t.toUpperCase();this.baseTables.set(r,{fetchedAt:Date.now(),rates:{...e,[r]:1}});}clearRates(){this.baseTables.clear();}getRateSync(t,e){let r=t.toUpperCase(),n=e.toUpperCase();if(r===n)return 1;let s=Date.now();for(let C of this.baseTables.values()){if(s-C.fetchedAt>o.RATE_FRESHNESS_MS)continue;let l=C.rates[r],a=C.rates[n];if(l&&a)return a/l}return null}async convert(t,e,r){let n=await this.getRate(e,r);return t*n}getAllRates(){let t=Date.now(),e={},r=false;for(let[n,s]of this.baseTables)if(!(t-s.fetchedAt>o.RATE_FRESHNESS_MS))for(let[C,l]of Object.entries(s.rates))e[`${n}:${C}`]=l,r=true;return r?e:null}hasRates(){return this.getAllRates()!==null}convertSync(t,e,r){let n=this.getRateSync(e,r);return n===null?null:t*n}isCurrency(t){return N(t)||this.isCryptoCode(t)}};o.RATE_FRESHNESS_MS=900*1e3,o.CRYPTO_IDS={BTC:"bitcoin",ETH:"ethereum",SOL:"solana",XRP:"ripple",ADA:"cardano",DOGE:"dogecoin",DOT:"polkadot"},o.FETCH_TIMEOUT_MS=1e4;var f=o,b=new f,h=b;
2
+ exports.a=f;exports.b=b;exports.c=h;//# sourceMappingURL=chunk-4BZIYU7S.cjs.map
3
+ //# sourceMappingURL=chunk-4BZIYU7S.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/uom/Iso4217.ts","../src/uom/CurrencyExchange.ts"],"names":["ISO_4217_CODES","isIso4217","code","CurrencyErrorCodes","_CurrencyExchangeService","from","to","signal","fromUpper","toUpper","fetchSignal","cleanup","createTimeoutSignal","response","ErrorFactory","data","rates","entry","candidate","fromIsCrypto","toIsCrypto","rate","fromId","toId","fromUsd","toUsd","vs","value","priceOfToInFrom","ids","vsCurrency","url","base","baseUpper","now","table","fromRate","toRate","snapshot","any","CurrencyExchangeService","currencyExchangeService","sharedCurrencyExchange"],"mappings":"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","file":"chunk-4BZIYU7S.cjs","sourcesContent":["/**\n * Every active ISO 4217 currency code.\n *\n * This exists because `CurrencyExchange.isCurrency()` used to hold a\n * hand-written list of forty-six codes, and a code missing from it did not\n * error: `$100 in UAH` returned the original hundred dollars, unconverted, as\n * though the rate were 1. A wrong answer, not a missing feature.\n *\n * The list is the ISO 4217 active set, so \"is this a currency\" is answered by\n * the standard rather than by whichever codes happened to get added. Whether a\n * *rate* is available for one is a separate question, answered at resolution\n * time by whatever the exchange provider supports; conflating the two is what\n * produced the silent failure.\n *\n * Deliberately excluded:\n * - The historical/withdrawn codes (DEM, FRF, and the rest). They are not\n * active, no provider quotes them, and recognising them would only move the\n * failure later.\n * - The X-series non-currencies: XAU/XAG/XPT/XPD (metals), XDR (IMF special\n * drawing rights), XTS (reserved for testing) and XXX (explicitly \"no\n * currency\"). XXX in particular must never resolve.\n *\n * Cryptocurrencies are not here either. They are not ISO 4217 and are tracked\n * separately in `CurrencyExchangeService.CRYPTO_IDS`.\n */\nexport const ISO_4217_CODES: ReadonlySet<string> = new Set([\n\t\"AED\", \"AFN\", \"ALL\", \"AMD\", \"ANG\", \"AOA\", \"ARS\", \"AUD\", \"AWG\", \"AZN\",\n\t\"BAM\", \"BBD\", \"BDT\", \"BGN\", \"BHD\", \"BIF\", \"BMD\", \"BND\", \"BOB\", \"BOV\",\n\t\"BRL\", \"BSD\", \"BTN\", \"BWP\", \"BYN\", \"BZD\",\n\t\"CAD\", \"CDF\", \"CHE\", \"CHF\", \"CHW\", \"CLF\", \"CLP\", \"CNY\", \"COP\", \"COU\",\n\t\"CRC\", \"CUP\", \"CVE\", \"CZK\",\n\t\"DJF\", \"DKK\", \"DOP\", \"DZD\",\n\t\"EGP\", \"ERN\", \"ETB\", \"EUR\",\n\t\"FJD\", \"FKP\",\n\t\"GBP\", \"GEL\", \"GHS\", \"GIP\", \"GMD\", \"GNF\", \"GTQ\", \"GYD\",\n\t\"HKD\", \"HNL\", \"HTG\", \"HUF\",\n\t\"IDR\", \"ILS\", \"INR\", \"IQD\", \"IRR\", \"ISK\",\n\t\"JMD\", \"JOD\", \"JPY\",\n\t\"KES\", \"KGS\", \"KHR\", \"KMF\", \"KPW\", \"KRW\", \"KWD\", \"KYD\", \"KZT\",\n\t\"LAK\", \"LBP\", \"LKR\", \"LRD\", \"LSL\", \"LYD\",\n\t\"MAD\", \"MDL\", \"MGA\", \"MKD\", \"MMK\", \"MNT\", \"MOP\", \"MRU\", \"MUR\", \"MVR\",\n\t\"MWK\", \"MXN\", \"MXV\", \"MYR\", \"MZN\",\n\t\"NAD\", \"NGN\", \"NIO\", \"NOK\", \"NPR\", \"NZD\",\n\t\"OMR\",\n\t\"PAB\", \"PEN\", \"PGK\", \"PHP\", \"PKR\", \"PLN\", \"PYG\",\n\t\"QAR\",\n\t\"RON\", \"RSD\", \"RUB\", \"RWF\",\n\t\"SAR\", \"SBD\", \"SCR\", \"SDG\", \"SEK\", \"SGD\", \"SHP\", \"SLE\", \"SOS\", \"SRD\",\n\t\"SSP\", \"STN\", \"SVC\", \"SYP\", \"SZL\",\n\t\"THB\", \"TJS\", \"TMT\", \"TND\", \"TOP\", \"TRY\", \"TTD\", \"TWD\", \"TZS\",\n\t\"UAH\", \"UGX\", \"USD\", \"USN\", \"UYI\", \"UYU\", \"UYW\", \"UZS\",\n\t\"VED\", \"VES\", \"VND\", \"VUV\",\n\t\"WST\",\n\t\"XAF\", \"XCD\", \"XCG\", \"XOF\", \"XPF\",\n\t\"YER\",\n\t\"ZAR\", \"ZMW\", \"ZWG\",\n]);\n\n/**\n * Whether `code` is an active ISO 4217 currency code.\n *\n * @param code - A three-letter code, in any case.\n */\nexport function isIso4217(code: string): boolean {\n\treturn ISO_4217_CODES.has(code.toUpperCase());\n}\n","/**\n * Production-grade currency exchange service with scalable architecture\n * Integrates with DataQueryService for worker-based execution\n */\n\nimport { isIso4217 } from \"@solve-js/uom/Iso4217\";\nimport { createTimeoutSignal } from \"@solve-js/utilities/TimeoutSignal\";\nimport { ErrorFactory } from \"@solve-js/errors/UnifiedErrorFramework\";\n\n/**\n * Error codes for this service. Co-located rather than unioned into\n * `errors/ErrorCode.ts`'s core catalog (that catalog is scoped to the\n * parser/VM/engine/errors/config/lexer layers, not yet the ~17 domain\n * packages. See that file's module doc for the intended per-package\n * pattern this follows).\n */\nexport const CurrencyErrorCodes = {\n /** Frankfurter's rates endpoint returned a non-OK HTTP status. */\n API_ERROR: \"CURRENCY_API_ERROR\",\n /** A requested currency/crypto code isn't in the fetched rate table, an unrecognized code, not an API failure. */\n UNKNOWN_CODE: \"UNKNOWN_CURRENCY_CODE\",\n /** CoinGecko's simple-price endpoint returned a non-OK HTTP status. */\n CRYPTO_API_ERROR: \"CRYPTO_PRICE_API_ERROR\",\n} as const;\n\n// ============================================================================\n// CURRENCY EXCHANGE SERVICE\n// ============================================================================\n\n/**\n * Caches exchange rates fetched from an external source.\n *\n * Rates are global market data rather than per-engine configuration, which is\n * why one instance is shared. Two engines with private copies would fetch the\n * same endpoint twice and could disagree about one pair at one moment. See\n * `engine/EngineContext.ts`.\n */\nexport class CurrencyExchangeService {\n /**\n * Live rate tables cached from successful getRate() fetches, keyed by\n * uppercase base currency. Each table holds every rate the API returned\n * for that base (plus the base itself at 1), so any pair whose two codes\n * appear in one fresh table can be served synchronously, including\n * cross pairs via triangulation (EUR→GBP through a USD-base table).\n * Stale tables are ignored, not evicted; the next successful fetch for\n * the same base overwrites them.\n */\n private baseTables: Map<string, { fetchedAt: number; rates: Record<string, number> }> = new Map();\n\n /**\n * How long a fetched rate may be served synchronously by getRateSync().\n * Beyond this window callers fall through to the async path (expression\n * shows Pending until the fetch lands).\n */\n private static readonly RATE_FRESHNESS_MS = 15 * 60 * 1000;\n\n /**\n * Ticker → CoinGecko coin id, for the cryptocurrencies `isCurrency()`\n * recognizes. Frankfurter (the fiat rate source below) is ECB reference\n * rates only and has no concept of BTC/ETH/etc, routing a crypto code\n * through it as `base=BTC` fails outright, which is why crypto pairs\n * previously never resolved (see CurrencyAsyncResolver/VM.ts's ADD\n * handling for the two bugs that let that failure pass silently instead\n * of surfacing as a real fetch).\n */\n private static readonly CRYPTO_IDS: Record<string, string> = {\n BTC: \"bitcoin\", ETH: \"ethereum\", SOL: \"solana\", XRP: \"ripple\",\n ADA: \"cardano\", DOGE: \"dogecoin\", DOT: \"polkadot\",\n };\n\n private isCryptoCode(code: string): boolean {\n return code.toUpperCase() in CurrencyExchangeService.CRYPTO_IDS;\n }\n\n constructor() {}\n\n // ------------------------------------------------------------------------\n // RATE FETCHING\n // ------------------------------------------------------------------------\n\n /**\n * Timeout (ms) for currency exchange rate fetches.\n *\n * If the frankfurter API doesn't respond within this window, the fetch\n * is aborted, preventing indefinite \"Pending\" states in the playground\n * and Obsidian plugin when the exchange rate API is unreachable.\n */\n private static readonly FETCH_TIMEOUT_MS = 10_000;\n\n /**\n * Fetch the live exchange rate for converting 1 unit of `from` into `to`.\n *\n * Routes cryptocurrency codes (see {@link CRYPTO_IDS}) to CoinGecko and\n * everything else to Frankfurter (ECB reference rates, fiat-only). On\n * success, caches the whole returned rate table for `from` so subsequent\n * lookups, including cross-pairs via triangulation, can be served\n * synchronously by {@link getRateSync} within the freshness window.\n *\n * @throws If the currency code is unrecognized or the fetch fails/times out.\n */\n async getRate(from: string, to: string, signal?: AbortSignal): Promise<number> {\n const fromUpper = from.toUpperCase();\n const toUpper = to.toUpperCase();\n\n if (this.isCryptoCode(fromUpper) || this.isCryptoCode(toUpper)) {\n return this.getCryptoRate(fromUpper, toUpper, signal);\n }\n\n // Combine the caller's optional abort signal with a hard timeout so a\n // hanging currency API never blocks re-evaluation indefinitely.\n const { signal: fetchSignal, cleanup } = createTimeoutSignal(\n signal,\n CurrencyExchangeService.FETCH_TIMEOUT_MS,\n \"Currency API fetch\",\n );\n\n try {\n const response = await fetch(`https://api.frankfurter.dev/v2/rates?base=${fromUpper}`, { signal: fetchSignal });\n if (!response.ok) throw ErrorFactory.external(CurrencyErrorCodes.API_ERROR, `Currency API returned ${response.status}`, { status: response.status });\n const data = await response.json();\n // The v2 endpoint returns a flat array of { date, base, quote, rate }\n // entries (one per target currency) rather than the classic v1 shape\n // { base, date, rates: { CODE: rate } }. Reading data.rates against\n // the real response is always undefined, so every conversion used to\n // throw \"Unknown currency\" no matter which currencies were requested.\n // Accept both shapes so a future API revision back to the object form\n // doesn't silently break this again.\n const rates: Record<string, number> = Array.isArray(data)\n ? Object.fromEntries(\n data\n .filter((entry: unknown): entry is { quote: string; rate: number } => {\n if (typeof entry !== \"object\" || entry === null) return false;\n const candidate = entry as { quote?: unknown; rate?: unknown };\n return typeof candidate.quote === \"string\" && typeof candidate.rate === \"number\";\n })\n .map((entry: { quote: string; rate: number }) => [entry.quote.toUpperCase(), entry.rate])\n )\n : (data.rates ?? {});\n if (rates[toUpper] === undefined) throw ErrorFactory.validation(CurrencyErrorCodes.UNKNOWN_CODE, `Unknown currency: ${toUpper}`, { code: toUpper });\n\n // The API returns ALL rates for the base currency, cache the whole\n // table so subsequent conversions (including cross pairs via\n // triangulation) resolve synchronously within the freshness window\n // instead of going Pending again.\n this.baseTables.set(fromUpper, {\n fetchedAt: Date.now(),\n rates: { ...rates, [fromUpper]: 1 },\n });\n\n return rates[toUpper];\n } finally {\n cleanup();\n }\n }\n\n /**\n * Crypto rate fetch, routed through CoinGecko's no-auth simple-price\n * endpoint instead of Frankfurter (fiat-only, has no BTC/ETH concept).\n * Handles all three combinations, crypto→crypto, crypto→fiat\n * fiat→crypto, via prices denominated in USD (or the target fiat\n * directly, which CoinGecko's `vs_currencies` also accepts), then\n * caches the result as a same-shaped base table so getRateSync /\n * convertSync keep working unchanged for crypto pairs too.\n */\n private async getCryptoRate(fromUpper: string, toUpper: string, signal?: AbortSignal): Promise<number> {\n const { signal: fetchSignal, cleanup } = createTimeoutSignal(\n signal,\n CurrencyExchangeService.FETCH_TIMEOUT_MS,\n \"Crypto price API fetch\",\n );\n\n try {\n const fromIsCrypto = this.isCryptoCode(fromUpper);\n const toIsCrypto = this.isCryptoCode(toUpper);\n let rate: number;\n\n if (fromIsCrypto && toIsCrypto) {\n const fromId = CurrencyExchangeService.CRYPTO_IDS[fromUpper];\n const toId = CurrencyExchangeService.CRYPTO_IDS[toUpper];\n const data = await this.fetchCoinGeckoPrices([fromId, toId], \"usd\", fetchSignal);\n const fromUsd = data[fromId]?.usd;\n const toUsd = data[toId]?.usd;\n if (typeof fromUsd !== \"number\") throw ErrorFactory.validation(CurrencyErrorCodes.UNKNOWN_CODE, `Unknown currency: ${fromUpper}`, { code: fromUpper });\n if (typeof toUsd !== \"number\") throw ErrorFactory.validation(CurrencyErrorCodes.UNKNOWN_CODE, `Unknown currency: ${toUpper}`, { code: toUpper });\n rate = fromUsd / toUsd;\n } else if (fromIsCrypto) {\n const fromId = CurrencyExchangeService.CRYPTO_IDS[fromUpper];\n const vs = toUpper.toLowerCase();\n const data = await this.fetchCoinGeckoPrices([fromId], vs, fetchSignal);\n const value = data[fromId]?.[vs];\n if (typeof value !== \"number\") throw ErrorFactory.validation(CurrencyErrorCodes.UNKNOWN_CODE, `Unknown currency: ${toUpper}`, { code: toUpper });\n rate = value;\n } else {\n const toId = CurrencyExchangeService.CRYPTO_IDS[toUpper];\n const vs = fromUpper.toLowerCase();\n const data = await this.fetchCoinGeckoPrices([toId], vs, fetchSignal);\n const priceOfToInFrom = data[toId]?.[vs];\n if (typeof priceOfToInFrom !== \"number\") throw ErrorFactory.validation(CurrencyErrorCodes.UNKNOWN_CODE, `Unknown currency: ${fromUpper}`, { code: fromUpper });\n rate = 1 / priceOfToInFrom;\n }\n\n // Cache as a single-pair base table, same shape Frankfurter fetches\n // produce, so getRateSync/convertSync's triangulation logic doesn't\n // need to know or care which source a rate came from.\n this.baseTables.set(fromUpper, {\n fetchedAt: Date.now(),\n rates: { [fromUpper]: 1, [toUpper]: rate },\n });\n\n return rate;\n } finally {\n cleanup();\n }\n }\n\n private async fetchCoinGeckoPrices(ids: string[], vsCurrency: string, signal: AbortSignal): Promise<Record<string, Record<string, number>>> {\n const url = `https://api.coingecko.com/api/v3/simple/price?ids=${ids.join(\",\")}&vs_currencies=${vsCurrency}`;\n const response = await fetch(url, { signal });\n if (!response.ok) throw ErrorFactory.external(CurrencyErrorCodes.CRYPTO_API_ERROR, `Crypto price API returned ${response.status}`, { status: response.status });\n return response.json();\n }\n\n /**\n * Seed a base rate table without a network fetch.\n *\n * Intended for tests and for future user-provided offline rates\n * production live data always comes from {@link getRate}. Seeded rates\n * obey the same freshness window as fetched ones.\n *\n * @param base - Base currency code (e.g. \"USD\").\n * @param rates - Map of currency code → rate relative to the base.\n */\n primeRates(base: string, rates: Record<string, number>): void {\n const baseUpper = base.toUpperCase();\n this.baseTables.set(baseUpper, {\n fetchedAt: Date.now(),\n rates: { ...rates, [baseUpper]: 1 },\n });\n }\n\n /**\n * Drop every cached/primed rate table.\n *\n * Mainly for test isolation: {@link sharedCurrencyExchange} is a\n * module-level singleton, so a rate primed or fetched by one test can\n * silently leak into a later test in the same file. Also usable in\n * production if a caller ever wants to force a full re-fetch.\n */\n clearRates(): void {\n this.baseTables.clear();\n }\n\n /**\n * Synchronous rate lookup: `1` for same-currency pairs, a cached LIVE\n * rate if one was fetched within {@link RATE_FRESHNESS_MS}, otherwise\n * `null`, callers fall through to the async fetch path and the\n * expression shows Pending until real data arrives.\n *\n * There is deliberately no hardcoded fallback table: a stale made-up\n * rate presented as a real conversion is worse than a Pending state.\n */\n getRateSync(from: string, to: string): number | null {\n const fromUpper = from.toUpperCase();\n const toUpper = to.toUpperCase();\n if (fromUpper === toUpper) {\n return 1;\n }\n const now = Date.now();\n for (const table of this.baseTables.values()) {\n if (now - table.fetchedAt > CurrencyExchangeService.RATE_FRESHNESS_MS) continue;\n const fromRate = table.rates[fromUpper];\n const toRate = table.rates[toUpper];\n if (fromRate && toRate) {\n return toRate / fromRate;\n }\n }\n return null;\n }\n\n /** Convert `value` from `from` to `to` using a freshly-fetched live rate (see {@link getRate}). */\n async convert(value: number, from: string, to: string): Promise<number> {\n const rate = await this.getRate(from, to);\n return value * rate;\n }\n\n /**\n * Get all currently cached fresh rates, keyed \"FROM:TO\".\n * @returns Snapshot of fresh live rates, or null when none are cached.\n */\n getAllRates(): Record<string, number> | null {\n const now = Date.now();\n const snapshot: Record<string, number> = {};\n let any = false;\n for (const [base, table] of this.baseTables) {\n if (now - table.fetchedAt > CurrencyExchangeService.RATE_FRESHNESS_MS) continue;\n for (const [code, rate] of Object.entries(table.rates)) {\n snapshot[`${base}:${code}`] = rate;\n any = true;\n }\n }\n return any ? snapshot : null;\n }\n\n /**\n * Check whether any fresh live rates are currently cached.\n */\n hasRates(): boolean {\n return this.getAllRates() !== null;\n }\n\n /**\n * Synchronous conversion using cached rates only\n * Returns null if rate not in cache\n */\n convertSync(value: number, from: string, to: string): number | null {\n const rate = this.getRateSync(from, to);\n if (rate === null) return null;\n return value * rate;\n }\n\n // ------------------------------------------------------------------------\n // CURRENCY VALIDATION\n // ------------------------------------------------------------------------\n\n /**\n * Check whether `code` is a recognized currency code: any active ISO 4217\n * code, or one of the cryptocurrencies in {@link CRYPTO_IDS}.\n *\n * This used to be a hand-written list of forty-six codes, which meant\n * `$100 in UAH` returned an unconverted hundred dollars rather than saying\n * it could not convert. Answering from the standard rather than from\n * whichever codes happened to get added is what stops that class of bug.\n *\n * Recognising a code is not the same as having a rate for it. That is\n * answered later, by the exchange provider; conflating the two is what\n * produced the silent failure.\n */\n isCurrency(code: string): boolean {\n return isIso4217(code) || this.isCryptoCode(code);\n }\n}\n\n// ============================================================================\n// SINGLETON INSTANCE\n// ============================================================================\n\n/** The shared rate cache. See {@link CurrencyExchangeService} for why it is shared. */\nexport const currencyExchangeService = new CurrencyExchangeService();\n\n// Export for backward compatibility\n/** Alias for {@link currencyExchangeService}, kept for older imports. */\nexport const sharedCurrencyExchange = currencyExchangeService;\n\n// Default export\nexport default currencyExchangeService;\n"]}
@@ -0,0 +1,5 @@
1
+ 'use strict';var chunkFDE5HWDI_cjs=require('./chunk-FDE5HWDI.cjs'),chunkZCNBT44X_cjs=require('./chunk-ZCNBT44X.cjs'),chunkTTFO4YDP_cjs=require('./chunk-TTFO4YDP.cjs'),chunkSYYE3QAX_cjs=require('./chunk-SYYE3QAX.cjs'),chunkAXMQG5TS_cjs=require('./chunk-AXMQG5TS.cjs'),chunkHLBYHXQD_cjs=require('./chunk-HLBYHXQD.cjs'),chunkSZGK6RIP_cjs=require('./chunk-SZGK6RIP.cjs'),chunk4QVBSG6B_cjs=require('./chunk-4QVBSG6B.cjs'),chunkAPN442VD_cjs=require('./chunk-APN442VD.cjs'),chunkUURM7P3P_cjs=require('./chunk-UURM7P3P.cjs'),chunkZLRJ7TDP_cjs=require('./chunk-ZLRJ7TDP.cjs'),chunkJAK3RAFA_cjs=require('./chunk-JAK3RAFA.cjs'),chunkN7N7MPMK_cjs=require('./chunk-N7N7MPMK.cjs'),chunkPS272DZJ_cjs=require('./chunk-PS272DZJ.cjs'),chunkUDQ57ZRX_cjs=require('./chunk-UDQ57ZRX.cjs'),chunkLR4E4A4W_cjs=require('./chunk-LR4E4A4W.cjs'),chunkY7O4D3BJ_cjs=require('./chunk-Y7O4D3BJ.cjs'),chunk6KFVG6UY_cjs=require('./chunk-6KFVG6UY.cjs'),chunk5IJD5L3O_cjs=require('./chunk-5IJD5L3O.cjs'),chunkMSYX32PF_cjs=require('./chunk-MSYX32PF.cjs'),chunkSOMGSIO4_cjs=require('./chunk-SOMGSIO4.cjs');function xt(n,e,t,r,i){let s=t[e],o=r[e];if(!s||!o)return;let a=new Set(Object.keys(s));for(let l of Object.keys(o))a.has(l)&&i.push({kind:n,severity:"warning",detail:`Both "${t.name}" and "${r.name}" register a ${e==="prefixParselets"?"prefix":"infix"} parselet for token type "${l}" \u2014 the later-registered one silently wins.`,packages:[t.name,r.name]});}function Ht(n,e){let t=[];if(xt("prefixParseletTokenType","prefixParselets",n,e,t),xt("infixParseletTokenType","infixParselets",n,e,t),n.phrases&&e.phrases)for(let[s,o]of Object.entries(e.phrases)){let a=n.phrases[s];a!==void 0&&a!==o&&t.push({kind:"phrase",severity:"warning",detail:`Both "${n.name}" (-> "${a}") and "${e.name}" (-> "${o}") fuse the phrase "${s}" to DIFFERENT token types \u2014 PhraseTrie has no collision detection of its own, so the later-registered mapping silently wins with no other signal.`,packages:[n.name,e.name]});}if(n.asConverters&&e.asConverters)for(let s of Object.keys(e.asConverters)){let o=s.toLowerCase();Object.keys(n.asConverters).some(a=>a.toLowerCase()===o)&&t.push({kind:"converterName",severity:"warning",detail:`Both "${n.name}" and "${e.name}" register an "as ${s}" converter \u2014 the later-registered handler silently wins.`,packages:[n.name,e.name]});}if(n.pluginFunctions&&e.pluginFunctions){let s=new Set(Object.keys(n.pluginFunctions));for(let o of Object.keys(e.pluginFunctions))s.has(o)&&t.push({kind:"pluginFunctionName",severity:"warning",detail:`Both "${n.name}" and "${e.name}" register a plugin function named "${o}" \u2014 the later registration wins in the engine's name-to-index map. Give each package's functions package-unique names.`,packages:[n.name,e.name]});}if(n.normalizerRules&&e.normalizerRules){let s=new Set(n.normalizerRules.map(o=>o.name));for(let o of e.normalizerRules)s.has(o.name)&&t.push({kind:"normalizerRuleName",severity:"warning",detail:`Both "${n.name}" and "${e.name}" register a normalizer rule named "${o.name}" \u2014 the normalizer unregisters rules by name, so removing either package would drop both rules. Give each package's rules a package-unique name.`,packages:[n.name,e.name]});}let r=n.lexerVocabulary,i=e.lexerVocabulary;if(r?.keywords&&i?.keywords)for(let[s,o]of Object.entries(i.keywords)){let a=r.keywords[s];a!==void 0&&a!==o&&t.push({kind:"lexerKeyword",severity:"error",detail:`Both "${n.name}" (-> "${a}") and "${e.name}" (-> "${o}") register the lexer keyword "${s}" for DIFFERENT token types \u2014 whichever package registers second wins, and the loser's grammar becomes silently unreachable for that word.`,packages:[n.name,e.name]});}if(r?.operators&&i?.operators)for(let[s,o]of Object.entries(i.operators)){let a=r.operators[s];a!==void 0&&a!==o&&t.push({kind:"lexerOperator",severity:"error",detail:`Both "${n.name}" (-> "${a}") and "${e.name}" (-> "${o}") register the lexer operator "${s}" for DIFFERENT token types.`,packages:[n.name,e.name]});}if(n.asyncResolvers&&e.asyncResolvers){let s=new Set(n.asyncResolvers.map(o=>o.namespace));for(let o of e.asyncResolvers)s.has(o.namespace)&&t.push({kind:"asyncResolverNamespace",severity:"error",detail:`Both "${n.name}" and "${e.name}" register an async resolver under the namespace "${o.namespace}" \u2014 ResolverRegistry is keyed by namespace, so one resolver's cache/preflight state will silently clobber the other's.`,packages:[n.name,e.name]});}if(n.tokenCategories&&e.tokenCategories)for(let[s,o]of Object.entries(e.tokenCategories)){let a=n.tokenCategories[s];a!==void 0&&a!==o&&t.push({kind:"tokenCategory",severity:"info",detail:`Both "${n.name}" (-> "${a}") and "${e.name}" (-> "${o}") declare a highlight category for token type "${s}" \u2014 cosmetic only, but the later registration wins.`,packages:[n.name,e.name]});}return t}function kt(n,e){let t=[];for(let r of e)r===n||r.name===n.name||t.push(...Ht(r,n));return {compatible:!t.some(r=>r.severity==="error"),conflicts:t}}var Kt=/(\d+)\.(\d+)\.(\d+)/,jt=/^\d+$/;function Ct(n){let e=Kt.exec(n.trim());return e?[Number(e[1]),Number(e[2]),Number(e[3])]:null}function Gt(n,e){return n[0]-e[0]||n[1]-e[1]||n[2]-e[2]}function Te(n){let e=n.split(".");if(e.length===0||e.length>3)return null;let t=[0,0,0];for(let r=0;r<e.length;r++){if(!jt.test(e[r]))return null;t[r]=Number(e[r]);}return [t[0],t[1],t[2]]}function qt([n,e,t]){let r=n>0?[n+1,0,0]:e>0?[0,e+1,0]:[0,0,t+1];return [{op:">=",v:[n,e,t]},{op:"<",v:r}]}function Qt([n,e,t]){return [{op:">=",v:[n,e,t]},{op:"<",v:[n,e+1,0]}]}function Xt(n){if(n===""||n==="*"||n==="x"||n==="X")return [];if(n[0]==="^"){let i=Te(n.slice(1));return i&&qt(i)}if(n[0]==="~"){let i=Te(n.slice(1));return i&&Qt(i)}let e=/^(>=|<=|>|<|=)/.exec(n),t=e?e[1]:"=",r=Te(e?n.slice(e[1].length):n);return r&&[{op:t,v:r}]}function Tt(n){let e=[];for(let t of n.split("||")){let r=t.trim().split(/\s+/).filter(s=>s!==""),i=[];for(let s of r){let o=Xt(s);if(o===null)return null;i.push(...o);}e.push(i);}return e}function Nt(n){return Tt(n.trim())!==null}function Jt(n,e){let t=Gt(n,e.v);switch(e.op){case "<":return t<0;case "<=":return t<=0;case ">":return t>0;case ">=":return t>=0;case "=":return t===0}}function wt(n,e){let t=Tt(e.trim());return t===null?false:t.some(r=>r.every(i=>Jt(n,i)))}function Yt(n,e=chunkUDQ57ZRX_cjs.a){if(!n.engineVersion)return {compatible:true};if(!Nt(n.engineVersion))return {compatible:false,reason:"invalid-range",declaredRange:n.engineVersion,engineVersion:e};let t=Ct(e);return t===null||!wt(t,n.engineVersion)?{compatible:false,reason:"range-not-satisfied",declaredRange:n.engineVersion,engineVersion:e}:{compatible:true}}function At(n,e=chunkUDQ57ZRX_cjs.a){let t=Yt(n,e);if(!t.compatible)throw t.reason==="invalid-range"?chunkSOMGSIO4_cjs.c.config({code:"PACKAGE_ENGINE_VERSION_INVALID_RANGE",message:`Package "${n.name}" declares an invalid engineVersion range: "${t.declaredRange}" is not a valid semver range.`,expected:'a valid semver range string (e.g. "^0.1.0", ">=0.2.0 <1.0.0")',found:`"${t.declaredRange}"`,suggestion:`This is a range-syntax typo in "${n.name}"'s own descriptor, not a version mismatch with the running engine \u2014 check for a stray character.`,context:{packageName:n.name,declaredRange:t.declaredRange}}):chunkSOMGSIO4_cjs.c.config({code:"PACKAGE_ENGINE_VERSION_MISMATCH",message:`Package "${n.name}" declares engineVersion "${t.declaredRange}", which is not satisfied by the running engine version "${t.engineVersion}".`,expected:`an engine version satisfying "${t.declaredRange}"`,found:`engine version "${t.engineVersion}"`,suggestion:`Update "${n.name}" to a version built against solve-engine ${t.engineVersion}, or pin solve-engine to a version satisfying "${t.declaredRange}".`,context:{packageName:n.name,declaredRange:t.declaredRange,engineVersion:t.engineVersion}})}var G="solve-engine/snapshot",H=1;function F(n){return Number.isFinite(n)?n:Number.isNaN(n)?"NaN":n>0?"Infinity":"-Infinity"}function _(n){if(typeof n=="number")return n;if(n==="NaN")return NaN;if(n==="Infinity")return 1/0;if(n==="-Infinity")return -1/0;throw chunkSOMGSIO4_cjs.c.validation({code:D.SNAPSHOT_MALFORMED,message:`Snapshot holds an unrecognised number sentinel: ${JSON.stringify(n)}`,expected:'a JSON number, or one of "NaN", "Infinity", "-Infinity"',found:JSON.stringify(n)})}var D={SNAPSHOT_VERSION_MISMATCH:"SNAPSHOT_VERSION_MISMATCH",SNAPSHOT_MALFORMED:"SNAPSHOT_MALFORMED",SNAPSHOT_UNSUPPORTED_VALUE:"SNAPSHOT_UNSUPPORTED_VALUE"};function Rt(n){return {coef:n.coef.toString(),scale:n.scale}}function Pt(n){return {coef:BigInt(n.coef),scale:n.scale}}function Zt(n){return {n:n.n.toString(),d:n.d.toString()}}function en(n){return {n:BigInt(n.n),d:BigInt(n.d)}}function Lt(n){return chunkPS272DZJ_cjs.g[n]??String(n)}function Ne(n,e){throw chunkSOMGSIO4_cjs.c.validation({code:D.SNAPSHOT_UNSUPPORTED_VALUE,message:`A ${Lt(n)} value (${e}) cannot be included in a snapshot yet.`,expected:"a concrete number, string, boolean, unit, range, matrix, bigint, or money value",found:`${Lt(n)} value`,suggestion:"Symbolic (algebra) values are deferred to a follow-up. Evaluate the document without the symbolic line, or re-derive it after restoring.",context:{valueType:n,location:e}})}function we(n,e){switch(n.type){case 0:{let t={t:0,v:F(n.value)};return n.exact!==void 0&&(t.exact=Rt(n.exact)),n.rational!==void 0&&(t.rational=Zt(n.rational)),t}case 1:{let t=n.value;return typeof t=="bigint"?{t:1,v:t.toString(),big:true,base:n.unit}:{t:1,v:F(t),base:n.unit}}case 2:return {t:2,v:n.value.toString()};case 3:return {t:3,v:n.value};case 4:return {t:4,v:F(n.value)};case 5:return {t:5,v:F(n.value)};case 6:{let t={t:6,v:F(n.value),unit:n.unit??""};return n.exact!==void 0&&(t.exact=Rt(n.exact)),t}case 7:{let t=n.value;t.hasSymbolic&&Ne(9,`${e} (symbolic matrix cell)`);let r=t.data.map(i=>tn(i,e));return {t:7,rows:t.rows,cols:t.cols,data:r}}case 8:{let t=n.value;return {t:8,min:F(t.min),max:F(t.max)}}case 10:return {t:10,v:n.value};case 13:return {t:13,code:n.value,message:n.unit??""};default:return Ne(n.type,e)}}function tn(n,e){return typeof n=="boolean"?n:typeof n=="number"?F(n):Ne(9,`${e} (symbolic matrix cell)`)}function Ae(n){switch(n.t){case 0:{let e=new chunkPS272DZJ_cjs.m(0,_(n.v));return n.exact!==void 0&&(e.exact=Pt(n.exact)),n.rational!==void 0&&(e.rational=en(n.rational)),e}case 1:{let e=n.big?BigInt(n.v):_(n.v);return new chunkPS272DZJ_cjs.m(1,e,n.base)}case 2:return new chunkPS272DZJ_cjs.m(2,BigInt(n.v));case 3:return new chunkPS272DZJ_cjs.m(3,n.v);case 4:return new chunkPS272DZJ_cjs.m(4,_(n.v));case 5:return new chunkPS272DZJ_cjs.m(5,_(n.v));case 6:{let e=new chunkPS272DZJ_cjs.m(6,_(n.v),n.unit);return n.exact!==void 0&&(e.exact=Pt(n.exact)),e}case 7:{let e=n.data.map(r=>typeof r=="boolean"?r:_(r)),t={rows:n.rows,cols:n.cols,data:e,hasSymbolic:false};return new chunkPS272DZJ_cjs.m(7,t)}case 8:return new chunkPS272DZJ_cjs.m(8,{min:_(n.min),max:_(n.max)});case 10:return new chunkPS272DZJ_cjs.m(10,n.v);case 13:return new chunkPS272DZJ_cjs.m(13,n.code,n.message);default:throw chunkSOMGSIO4_cjs.c.validation({code:D.SNAPSHOT_MALFORMED,message:`Snapshot holds a value with an unknown type tag: ${JSON.stringify(n.t)}`,expected:"a known SerializedValue type tag",found:JSON.stringify(n.t)})}}function re(n){let e={opcodes:Array.from(n.opcodes),numbers:Array.from(n.numbers,F),strings:n.strings.slice(),hasAsync:n.hasAsync};return n.constants&&(e.constants=Array.from(n.constants.entries())),n.userFunctionBodies&&(e.userFunctionBodies=n.userFunctionBodies.map(Re)),n.anonymousBodies&&(e.anonymousBodies=n.anonymousBodies.map(t=>({params:t.params.slice(),program:re(t.program)}))),e}function ie(n){let e={opcodes:Uint8Array.from(n.opcodes),numbers:Float64Array.from(n.numbers,_),strings:n.strings.slice(),hasAsync:n.hasAsync};return n.constants&&(e.constants=new Map(n.constants)),n.userFunctionBodies&&(e.userFunctionBodies=n.userFunctionBodies.map(Pe)),n.anonymousBodies&&(e.anonymousBodies=n.anonymousBodies.map(t=>({params:t.params.slice(),program:ie(t.program)}))),e}function Re(n){return {name:n.name,params:n.params.slice(),program:re(n.program)}}function Pe(n){return {name:n.name,params:n.params.slice(),program:ie(n.program)}}function Ot(n){if(typeof n!="object"||n===null)throw chunkSOMGSIO4_cjs.c.validation({code:D.SNAPSHOT_VERSION_MISMATCH,message:"fromJSON was given something that is not a snapshot object.",expected:`an object produced by ExpressionEngine.toJSON() with format "${G}"`,found:n===null?"null":typeof n});let e=n;if(e.format!==G)throw chunkSOMGSIO4_cjs.c.validation({code:D.SNAPSHOT_VERSION_MISMATCH,message:`This object is not a solve-engine snapshot (its "format" is ${JSON.stringify(e.format)}).`,expected:`format "${G}"`,found:JSON.stringify(e.format)});if(e.version!==H)throw chunkSOMGSIO4_cjs.c.validation({code:D.SNAPSHOT_VERSION_MISMATCH,message:`This snapshot was written for format version ${e.version}, but this engine restores version ${H}.`,expected:`snapshot version ${H}`,found:`version ${e.version}`,suggestion:"Regenerate the snapshot with a matching engine version, or re-evaluate the document from source.",context:{snapshotVersion:e.version,readerVersion:H,engineVersion:e.engineVersion}})}var W=class{constructor(e,t,r,i){this.result=e;this.bytecode=t;this.readVariables=r;this.writeVariable=i;}},he=class n{constructor(){this.byLine=new Map;this.count=0;}static exprKey(e){return e??""}static displayKey(e,t){return t===""?`${e}`:`${e}:${t}`}get(e,t){return this.byLine.get(e)?.get(n.exprKey(t))}getEntryForLine(e){let t=this.byLine.get(e);if(t)for(let r of t.values())return r}set(e,t,r){let i=this.byLine.get(e);i||(i=new Map,this.byLine.set(e,i));let s=n.exprKey(r);i.size>0&&!i.has(s)&&(this.count-=i.size,i.clear()),i.has(s)||this.count++,i.set(s,t);}has(e,t){return this.byLine.get(e)?.has(n.exprKey(t))??false}remove(e,t){let r=this.byLine.get(e);r&&r.delete(n.exprKey(t))&&(this.count--,r.size===0&&this.byLine.delete(e));}removeAllForLine(e){let t=this.byLine.get(e);t&&(this.count-=t.size,this.byLine.delete(e));}clearLine(e){this.removeAllForLine(e);}get size(){return this.count}clear(){this.byLine.clear(),this.count=0;}forEach(e){for(let[t,r]of this.byLine)for(let[i,s]of r)e(n.displayKey(t,i),s);}snapshotEntries(){let e=[];for(let[t,r]of this.byLine)for(let[i,s]of r)e.push({line:t,expression:i,entry:s});return e}keys(){let e=[];for(let[t,r]of this.byLine)for(let i of r.keys())e.push(n.displayKey(t,i));return e}};function Le(n){let e=new Date(n),t=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0");return `${e.getFullYear()}-${t}-${r}`}function nn(n){if(n instanceof Date)return Le(n.getTime());if(typeof n=="number")return Number.isFinite(n)?Le(n):null;let e=/^(\d{4})-(\d{2})-(\d{2})/.exec(n.trim());return e?`${e[1]}-${e[2]}-${e[3]}`:null}function It(n){if(n===void 0)return;if(typeof n=="function")return t=>n(new Date(t));let e=new Set;for(let t of n){let r=nn(t);r!==null&&e.add(r);}return t=>e.has(Le(t))}var U=class{static enable(){this.enabled=true;}static disable(){this.enabled=false;}static isEnabled(){return this.enabled}static track(e,t,r){if(!this.enabled)return {result:t(),alloc:null};let i=typeof process<"u"&&process.memoryUsage?process.memoryUsage():null,s=typeof process<"u"&&process.hrtime?process.hrtime():performance.now(),o=t(),a=typeof process<"u"&&process.hrtime?process.hrtime(s):void 0,l=typeof process<"u"&&process.memoryUsage?process.memoryUsage():null,c=a?a[0]*1e9+a[1]:(performance.now()-s)*1e6,u=i&&l?l.heapUsed-i.heapUsed:0,p={stage:e,allocCount:0,allocBytes:u,objectCounts:{},wallTimeNs:c,...r};return {result:o,alloc:p}}static generateReport(e,t){let r=[];r.push(t?`## ${t}`:"## Pipeline Allocation Report"),r.push(""),r.push(`**Runs:** ${e.length} | **Generated:** ${new Date().toISOString()}`),r.push("");let i=this.aggregate(e);if(i.length===0)return r.push("_No telemetry data._"),r.join(`
2
+ `);r.push("### Per-Stage Breakdown"),r.push(""),r.push("| Stage | Count | Mean Wall (\xB5s) | Mean Alloc (bytes) | Min (\xB5s) | Max (\xB5s) | p50 (\xB5s) | p95 (\xB5s) | p99 (\xB5s) |"),r.push("|-------|:-----:|:--------------:|:------------------:|:--------:|:--------:|:--------:|:--------:|:--------:|");for(let l of i)r.push(`| ${l.stage} | ${l.count} | ${(l.meanWallTimeNs/1e3).toFixed(2)} | ${l.meanAllocBytes.toFixed(0)} | ${(l.minWallTimeNs/1e3).toFixed(2)} | ${(l.maxWallTimeNs/1e3).toFixed(2)} | ${(l.p50WallTimeNs/1e3).toFixed(2)} | ${(l.p95WallTimeNs/1e3).toFixed(2)} | ${(l.p99WallTimeNs/1e3).toFixed(2)} |`);let s=e.reduce((l,c)=>l+c.totalAllocBytes,0),o=e.reduce((l,c)=>l+c.totalWallTimeNs,0),a=e.filter(l=>l.fastPath).length;return r.push(""),r.push("### Totals"),r.push(""),r.push(`- **Total wall time:** ${(o/1e6).toFixed(2)} ms (${e.length} runs)`),r.push(`- **Total heap allocated:** ${s.toLocaleString()} bytes`),r.push(`- **Fast-path runs:** ${a}/${e.length} (${(a/e.length*100).toFixed(0)}%)`),r.push(`- **Mean per-run:** ${(o/e.length/1e3).toFixed(2)} \xB5s, ${(s/e.length).toFixed(0)} bytes`),r.join(`
3
+ `)}static aggregate(e){let t=new Map;for(let i of e)for(let s of i.stages)t.has(s.stage)||t.set(s.stage,[]),t.get(s.stage).push(s);let r=[];for(let[i,s]of t){let o=s.map(c=>c.wallTimeNs).sort((c,u)=>c-u),a=s.map(c=>c.allocBytes),l=s.length;r.push({stage:i,count:l,meanAllocBytes:a.reduce((c,u)=>c+u,0)/l,meanWallTimeNs:o.reduce((c,u)=>c+u,0)/l,minWallTimeNs:o[0],maxWallTimeNs:o[o.length-1],p50WallTimeNs:Oe(o,50),p95WallTimeNs:Oe(o,95),p99WallTimeNs:Oe(o,99)});}return r.sort((i,s)=>i.stage.localeCompare(s.stage)),r}static createTelemetry(e,t,r=false){let i=t.reduce((o,a)=>o+a.allocBytes,0),s=t.reduce((o,a)=>o+a.wallTimeNs,0);return {expression:e,stages:t,totalAllocBytes:i,totalWallTimeNs:s,fastPath:r}}};U.enabled=false;function Oe(n,e){if(n.length===0)return 0;if(n.length===1)return n[0];let t=e/100*(n.length-1),r=Math.floor(t),i=Math.ceil(t);if(r===i)return n[r];let s=t-r;return n[r]*(1-s)+n[i]*s}function Ie(n,e){if(n.length>e.maxExpressionLength){let t=chunkSOMGSIO4_cjs.c.validation("EXPRESSION_TOO_LONG",`Expression exceeds max length of ${e.maxExpressionLength} characters (got ${n.length})`,{expressionLength:n.length,maxLength:e.maxExpressionLength});return {passed:false,error:{value:chunkPS272DZJ_cjs.n(0),tokens:[],program:{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},error:t.message,engineError:t}}}return {passed:true}}function Ve(n,e){let t=0,r=0,i=0;for(let o of n)o.type==="FUNC"&&t++,(o.value==="("||o.type==="LPAREN")&&(r++,i=Math.max(i,r)),(o.value===")"||o.type==="RPAREN")&&r--;let s=n.length+t*5+i*10;if(s>e.maxComplexity){let o=chunkSOMGSIO4_cjs.c.validation("EXPRESSION_TOO_COMPLEX",`Expression complexity score ${s} exceeds maximum of ${e.maxComplexity}`,{complexity:s,maxComplexity:e.maxComplexity});return {passed:false,complexityScore:s,errorMessage:o.message,engineError:o}}return {passed:true,complexityScore:s}}function se(n){return n.type==="IDENT"||n.type==="UNIT"}function rn(n){return n.type==="NUMBER"||n.type==="TO"||n.type==="IN"||n.type==="RPAREN"}function Vt(n,e){let t=0;for(let r=e;r<n.length;r++)if(n[r].type==="LPAREN")t++;else if(n[r].type==="RPAREN"&&(t--,t===0))return r;return null}function sn(n){let e=new Set;for(let t=0;t<n.length;t++){if(!se(n[t])||t>0&&n[t-1].type==="COLON"||n[t+1]?.type!=="LPAREN")continue;let r=Vt(n,t+1);if(r!==null&&n[r+1]?.type==="EQUALS")for(let i=t+2;i<r;i++)se(n[i])&&e.add(n[i].value);}return e}function fe(n){let e=[],t=[],r=sn(n);for(let i=0;i<n.length;i++){let s=n[i];if(s.type==="GLOBAL"){if(i+2<n.length&&n[i+1].type==="COLON"&&se(n[i+2])){let o=chunkJAK3RAFA_cjs.K(n[i+2].value);e.push(o),i+3<n.length&&n[i+3].type==="EQUALS"&&t.push(o);}continue}if(s.type==="COLON"){if(i>0&&n[i-1].type==="GLOBAL")continue;if(i+1<n.length&&se(n[i+1])){let o=n[i+1].value;e.push(o),i+2<n.length&&n[i+2].type==="EQUALS"&&t.push(o);}}if(se(s)){if(i>0&&n[i-1].type==="COLON"||s.type==="UNIT"&&i>0&&rn(n[i-1])||r.has(s.value))continue;if(n[i+1]?.type==="LPAREN"){let a=Vt(n,i+1);if(a!==null&&n[a+1]?.type==="EQUALS"){e.push(s.value),t.push(s.value);continue}}e.push(s.value);let o=n[i+1]?.type;(o==="EQUALS"||o==="PLUS_EQUALS"||o==="MINUS_EQUALS")&&t.push(s.value);}}return {reads:e,writes:t}}function $n(n){return chunkLR4E4A4W_cjs.c.classifyLine(n).skip}function Wn(n,e){return chunkLR4E4A4W_cjs.c.findInlineSolves(n).map(r=>({start:r.start,end:r.end,expression:r.expression,lineNumber:e,columnNumber:r.columnNumber}))}function Bt(n){let e=n[n.length-1],t=e.length>1&&e.endsWith("s")?e.slice(0,-1):e;return [...n.slice(0,-1),t].join(" ")}var me=class{constructor(){this.byKey=new Map;this.longestName=0;}get isEmpty(){return this.byKey.size===0}get maxWordCount(){return this.longestName}define(e,t,r){let i=Bt(e);this.byKey.set(i,{displayName:e.join(" "),ratioText:t,baseUnit:r}),e.length>this.longestName&&(this.longestName=e.length);}match(e){let t=Math.min(e.length,this.longestName);for(let r=t;r>=1;r--){let i=this.byKey.get(Bt(e.slice(0,r)));if(i!==void 0)return {definition:i,wordCount:r}}return null}clear(){this.byKey.clear(),this.longestName=0;}};function Mt(n,e=82){return {name:"uom:user-unit",priority:e,match(t,r){if(n.isEmpty)return null;let i=t[r];if(i.type!=="NUMBER"&&i.type!=="RPAREN")return null;let s=[],o=n.maxWordCount;for(let g=r+1;g<t.length&&s.length<o&&t[g].type==="IDENT";g++)s.push(t[g].value);if(s.length===0)return null;let a=n.match(s);if(a===null||t[r+1+a.wordCount]?.type==="EQUALS")return null;let{ratioText:c,baseUnit:u}=a.definition,p=new chunk6KFVG6UY_cjs.a("STAR",chunk5IJD5L3O_cjs.c("STAR"),"*","*",i.offset,0,i.line,i.col),f=new chunk6KFVG6UY_cjs.a("NUMBER",chunk5IJD5L3O_cjs.c("NUMBER"),c,c,i.offset,0,i.line,i.col),m=new chunk6KFVG6UY_cjs.a("UNIT",chunk5IJD5L3O_cjs.c("UNIT"),u,u,i.offset,0,i.line,i.col);return {consumed:1+a.wordCount,replacement:[i,p,f,m],ruleName:"uom:user-unit"}}}}var on=30,an=40,ln=50,cn=24;function un(n){switch(n){case chunk5IJD5L3O_cjs.a.PLUS:case chunk5IJD5L3O_cjs.a.MINUS:return on;case chunk5IJD5L3O_cjs.a.STAR:case chunk5IJD5L3O_cjs.a.SLASH:case chunk5IJD5L3O_cjs.a.MOD:case chunk5IJD5L3O_cjs.a.OF:return an;case chunk5IJD5L3O_cjs.a.CARET:return ln;case chunk5IJD5L3O_cjs.a.PCT_ON:case chunk5IJD5L3O_cjs.a.PCT_OFF:return cn;default:return 0}}function pn(n){switch(n){case chunk5IJD5L3O_cjs.a.PLUS:return "plus";case chunk5IJD5L3O_cjs.a.MINUS:return "minus";case chunk5IJD5L3O_cjs.a.STAR:return "times";case chunk5IJD5L3O_cjs.a.SLASH:return "divided by";case chunk5IJD5L3O_cjs.a.MOD:return "mod";case chunk5IJD5L3O_cjs.a.CARET:return "to the power of";case chunk5IJD5L3O_cjs.a.OF:return "of";case chunk5IJD5L3O_cjs.a.PCT_ON:return "plus";case chunk5IJD5L3O_cjs.a.PCT_OFF:return "less";default:return n.toLowerCase()}}function Dt(n){return n.sourceEnd??n.offset+n.value.length}var gn=new Set([chunk5IJD5L3O_cjs.a.NUMBER,chunk5IJD5L3O_cjs.a.BIGINT,chunk5IJD5L3O_cjs.a.IDENT,chunk5IJD5L3O_cjs.a.UNIT,chunk5IJD5L3O_cjs.a.PERCENT,chunk5IJD5L3O_cjs.a.PI,chunk5IJD5L3O_cjs.a.E,chunk5IJD5L3O_cjs.a.TRUE,chunk5IJD5L3O_cjs.a.FALSE,chunk5IJD5L3O_cjs.a.DOLLAR,chunk5IJD5L3O_cjs.a.POUND,chunk5IJD5L3O_cjs.a.EURO,chunk5IJD5L3O_cjs.a.YEN,chunk5IJD5L3O_cjs.a.RUBLE,chunk5IJD5L3O_cjs.a.WON,chunk5IJD5L3O_cjs.a.CURRENCY_SYMBOL]);function dn(n){return !gn.has(n)}var Be=class{constructor(e){this.tokens=e;this.pos=0;}peek(){return this.tokens[this.pos]}next(){return this.tokens[this.pos++]}parseAll(){let e=this.parseExpression(0);if(this.pos!==this.tokens.length)throw new Error("explain: unconsumed tokens");return e}parseExpression(e){let t=this.parseOperand();for(;;){let r=this.peek();if(!r)break;let i=un(r.type);if(i===0||i<=e)break;this.next();let s=r.type===chunk5IJD5L3O_cjs.a.CARET?i-1:i,o=this.parseExpression(s);t={kind:"binary",op:r.type,left:t,right:o,start:t.start,end:o.end};}return t}parseOperand(){let e=this.peek();if(!e)throw new Error("explain: expected an operand");if(e.type===chunk5IJD5L3O_cjs.a.LPAREN)return this.parseGroup();let t=e.offset,r=false;for(;this.peek()&&(this.peek().type===chunk5IJD5L3O_cjs.a.PLUS||this.peek().type===chunk5IJD5L3O_cjs.a.MINUS);)this.next(),r=true;if(r&&this.peek()&&this.peek().type===chunk5IJD5L3O_cjs.a.LPAREN){let s=this.parseGroup();return {kind:"wrap",child:s,start:t,end:s.end}}let i=-1;for(;this.peek()&&!dn(this.peek().type);)i=Dt(this.next());if(i===-1)throw new Error("explain: expected an operand");return {kind:"leaf",start:t,end:i}}parseGroup(){let e=this.next(),t=this.parseExpression(0),r=this.peek();if(!r||r.type!==chunk5IJD5L3O_cjs.a.RPAREN)throw new Error("explain: unbalanced parentheses");return this.next(),{kind:"wrap",child:t,start:e.offset,end:Dt(r)}}},Me=class{constructor(e,t,r){this.source=e;this.evaluate=t;this.steps=[];this.cache=new Map;this.resultPrefix=chunkMSYX32PF_cjs.a(r).display.resultPrefix;}build(e){return this.emit(e),{steps:this.steps,result:this.valueOf(e)}}emit(e){if(e.kind!=="leaf"){if(e.kind==="wrap"){this.emit(e.child);return}this.emit(e.left),this.emit(e.right),this.steps.push({description:this.describe(e),value:this.valueOf(e)});}}describe(e){let t=pn(e.op);return e.op===chunk5IJD5L3O_cjs.a.PCT_ON||e.op===chunk5IJD5L3O_cjs.a.PCT_OFF?`${this.operand(e.right)} ${t} ${this.operand(e.left)}`:`${this.operand(e.left)} ${t} ${this.operand(e.right)}`}operand(e){return e.kind==="leaf"?this.source.slice(e.start,e.end).trim():this.render(this.valueOf(e))}valueOf(e){let t=this.cache.get(e);if(t)return t;let r=this.evaluate(this.source.slice(e.start,e.end));return this.cache.set(e,r),r}render(e){let t=chunkHLBYHXQD_cjs.c(e,chunkHLBYHXQD_cjs.a);return t.startsWith(this.resultPrefix)?t.slice(this.resultPrefix.length):t}};function De(n){let{expression:e,tokens:t,evaluate:r,locale:i}=n,s=()=>({expression:e,steps:[],result:r(e)}),o;try{o=new Be(t).parseAll();}catch{return s()}try{let{steps:a,result:l}=new Me(e,r,i).build(o);return {expression:e,steps:a,result:l}}catch{return s()}}var oe=class oe{constructor(e={}){this.dag=new chunkSYYE3QAX_cjs.a;this.lineCache=new he;this.accumulatorNames=new Set;this.scopeManager=new chunkSYYE3QAX_cjs.b;this.resolverRegistry=new chunkZCNBT44X_cjs.a;this.packageContributions=new Map;this.registeredPackages=new Map;this.documentModel=null;this.goalSeekDepth=0;this.batchScanResults=null;this.batchParsedLines=null;this.packageCompletionItems=new Map;this.keystrokeSignal=null;this.userUnits=new me;this.bytecodeCache=new Map;this.pluginFunctionIndexByName=new Map;this.builderPool=[new chunk4QVBSG6B_cjs.d(this.pluginFunctionIndexByName),new chunk4QVBSG6B_cjs.d(this.pluginFunctionIndexByName),new chunk4QVBSG6B_cjs.d(this.pluginFunctionIndexByName),new chunk4QVBSG6B_cjs.d(this.pluginFunctionIndexByName)];this.builderPoolIndex=0;this.lastTelemetry=null;let{locale:t="en",diagnostics:r=false,config:i,packages:s}=e;this.localeCode=t,this.config=chunkUDQ57ZRX_cjs.c(chunkUDQ57ZRX_cjs.b,i??{}),this.lexer=new chunkLR4E4A4W_cjs.b(t,chunkLR4E4A4W_cjs.d(t)),this.registry=new chunkFDE5HWDI_cjs.b,this.context=chunkJAK3RAFA_cjs.x(),r?(this.diagnosticPipeline=new chunkAXMQG5TS_cjs.a,this.timelineCollector=new chunkAXMQG5TS_cjs.b,this.diagnosticPipeline.register(this.timelineCollector)):this.diagnosticPipeline=new chunkAXMQG5TS_cjs.a,this.normalizer=new chunkAPN442VD_cjs.c;for(let[a,l]of Object.entries(chunkAPN442VD_cjs.g))this.normalizer.addPhrase(a,l);this.normalizer.register(chunkAPN442VD_cjs.d(50,a=>this.normalizer.canStartPhrase(a))),this.normalizer.register(Mt(this.userUnits));let o=s??[];for(let a of o)try{this.registerPackage(a);}catch(l){let c=chunkSOMGSIO4_cjs.d(l);console.error(`[ExpressionEngine] Failed to register package "${a.name}" \u2014 skipping it and continuing construction with the remaining packages: ${c.format()}`);}this.parser=new chunkFDE5HWDI_cjs.a(this.registry,this.config.validation.maxNestingDepth,t,this.pluginFunctionIndexByName),this.vm=chunkSYYE3QAX_cjs.c(this.context.opRegistry,this.config.vm.maxStackDepth,this.config.vm.maxInstructions,void 0,this.config.vm.maxCollectionSize,this.config.vm.maxAllocatedElements,this.config.vm.maxFunctionCalls,this.config.date.maxOffsetYears,this.config.date.minOffsetYears,this.context,It(this.config.date.holidays)),this.queryClient=chunkZLRJ7TDP_cjs.c(),this.batcher=new ve(this.dag,this.lineCache,this.vm);}setDocumentModel(e){this.documentModel=e;}makeLineContext(e){let t=this.documentModel,r=t?null:this.batchScanResults,i=t?null:this.batchParsedLines;return {lineIndex:e,getLineResult:t?s=>t.getLineAt(s)?.result??void 0:i?s=>i[s-1]?.result??void 0:void 0,isLineBoundary:t?s=>{let o=t.getLineAt(s);return o?o.isEmpty||/^\s*#/.test(o.text):true}:r?s=>{let o=r[s-1];return o?o.classification.skip||/^\s*#/.test(o.text):true}:void 0,getLineReads:t?s=>{let o=t.getLineAt(s);if(!(!o||o.bytecodes.length===0))return o.reads}:void 0,evaluateLineWithBinding:t?(s,o,a,l)=>this.evaluateLineWithBinding(s,o,a,l):void 0,goalSeekMaxIterations:this.config.vm.maxGoalSeekIterations,getLineText:t?s=>t.getLineAt(s)?.text:r?s=>r[s-1]?.text:void 0}}evaluateLineWithBinding(e,t,r,i){let s=this.documentModel;if(!s)return chunkPS272DZJ_cjs.N("GOAL_SEEK_NO_DOCUMENT","Goal seek needs a document to solve against, which the single-expression entry point does not have.");if(this.goalSeekDepth>=oe.GOAL_SEEK_MAX_NESTING_DEPTH)return chunkPS272DZJ_cjs.N("GOAL_SEEK_NESTED","A goal-seek line cannot target another goal-seek line, since each already re-runs its target many times.");let o=s.getLineAt(e);if(!o||o.bytecodes.length===0)return chunkPS272DZJ_cjs.N("GOAL_SEEK_LINE_NOT_READY",`Line ${e} has no evaluated expression to solve (forward reference, out of range, or not an expression).`);if(o.isVariableDef)return chunkPS272DZJ_cjs.N("GOAL_SEEK_TARGET_IS_DEFINITION",`Line ${e} defines a variable, so re-running it would overwrite that variable. Target the line that uses ${t}, not the one that sets a value.`);let a=o.bytecodes[0];this.goalSeekDepth++;try{let l=new Map([[t,r]]),c=this.vm.getStack().length;this.vm.pushCallFrame(l);try{let u=chunkSYYE3QAX_cjs.d(a,this.vm,void 0,void 0,this.makeLineContext(e),i);return u.type==="pending"?chunkPS272DZJ_cjs.N("GOAL_SEEK_ASYNC_UNSUPPORTED",`Line ${e} depends on an async value (weather, stocks, currency, ...), which goal seek cannot re-run.`):u.type==="error"?chunkPS272DZJ_cjs.N(u.error.code??"GOAL_SEEK_TARGET_ERROR",u.error.message):u.value}finally{for(this.vm.popCallFrame();this.vm.getStack().length>c;)this.vm.pop();}}catch(l){return chunkPS272DZJ_cjs.N("GOAL_SEEK_TARGET_ERROR",chunkSOMGSIO4_cjs.d(l).message)}finally{this.goalSeekDepth--;}}cacheBytecode(e,t){let r=this.config.performance.defaultCacheSize;if(this.bytecodeCache.size>=r){let i=this.bytecodeCache.keys().next().value;i!==void 0&&this.bytecodeCache.delete(i);}this.bytecodeCache.set(e,t);}getEventStream(){return this.batcher.getEventStream()}getBatcher(){return this.batcher}registerPackage(e){At(e),this.packageContributions.has(e.name)&&(console.warn(`[ExpressionEngine] Package "${e.name}" is already registered. Unregistering the previous registration before re-registering.`),this.unregisterPackage(e.name));let t=kt(e,[...this.registeredPackages.values()]);for(let i of t.conflicts)(i.severity==="error"?console.error:console.warn)(`[ExpressionEngine] Package compatibility ${i.severity} (${i.kind}): ${i.detail}`);let r={pluginFunctionIndices:[],pluginFunctionNames:[],resolverNamespaces:[],tokenCategories:[],lexerVocabulary:e.lexerVocabulary,asConverterNames:[],normalizerRuleNames:[]};if(e.lexerVocabulary&&this.lexer.registerVocabulary(e.lexerVocabulary),e.prefixParselets)for(let[i,s]of Object.entries(e.prefixParselets))this.registry.registerPrefix(i,s);if(e.infixParselets)for(let[i,s]of Object.entries(e.infixParselets))this.registry.registerInfix(i,s);if(e.pluginFunctions)for(let[i,s]of Object.entries(e.pluginFunctions)){let o=chunkJAK3RAFA_cjs.F(`${e.name}:${i}`);this.context.pluginFunctions[o]=s,this.context.pluginFunctionOwners[o]=e.name,this.pluginFunctionIndexByName.set(i,o),r.pluginFunctionIndices.push(o),r.pluginFunctionNames.push(i);}if(e.asyncResolvers)for(let i of e.asyncResolvers)this.resolverRegistry.register(i),r.resolverNamespaces.push(i.namespace);if(e.phrases)for(let[i,s]of Object.entries(e.phrases))this.normalizer.addPhrase(i,s);if(e.normalizerRules)for(let i of e.normalizerRules)this.normalizer.register(i),r.normalizerRuleNames.push(i.name);if(e.tokenCategories)for(let[i,s]of Object.entries(e.tokenCategories))chunkY7O4D3BJ_cjs.b(i,s),r.tokenCategories.push(i);if(e.completionItems&&this.packageCompletionItems.set(e.name,e.completionItems),e.asConverters)for(let[i,s]of Object.entries(e.asConverters))chunkJAK3RAFA_cjs.H(i,s),r.asConverterNames.push(i);this.packageContributions.set(e.name,r),this.registeredPackages.set(e.name,e);}unregisterPackage(e){let t=this.packageContributions.get(e);if(!t)return false;for(let r of t.pluginFunctionIndices)delete this.context.pluginFunctions[r],delete this.context.pluginFunctionOwners[r];for(let r of t.pluginFunctionNames)this.pluginFunctionIndexByName.delete(r);for(let r of t.resolverNamespaces)this.resolverRegistry.unregister(r);for(let r of t.tokenCategories)chunkY7O4D3BJ_cjs.c(r);t.lexerVocabulary&&this.lexer.unregisterVocabulary(t.lexerVocabulary);for(let r of t.asConverterNames)chunkJAK3RAFA_cjs.I(r);for(let r of t.normalizerRuleNames)this.normalizer.unregister(r);return this.packageCompletionItems.delete(e),this.packageContributions.delete(e),this.registeredPackages.delete(e),this.bytecodeCache.clear(),true}getConfig(){return {...this.config}}getDiagnosticPipeline(){return this.diagnosticPipeline}storeLineResult(e,t,r,i,s,o){this.lineCache.set(e,new W(t,r,i,s.length>0?s[0]:null),o);}executeAndStore(e,t,r,i,s,o,a,l){let c=this.vm.getStack().length,u=new AbortController,p=()=>u.abort();this.keystrokeSignal?.addEventListener("abort",p,{once:true}),chunkTTFO4YDP_cjs.a.localControllerCreated("executeAndStore"),this.keystrokeSignal&&chunkTTFO4YDP_cjs.a.signalLinked("executeAndStore"),this.vm.activeSignal=u.signal,this.vm.abortCurrent=()=>{chunkTTFO4YDP_cjs.a.signalUnlinked("executeAndStore"),this.keystrokeSignal?.removeEventListener("abort",p),u.abort();},chunkZLRJ7TDP_cjs.a(this.queryClient);let f=chunkSYYE3QAX_cjs.d(e,this.vm,a,l,this.makeLineContext(t));for(;this.vm.getStack().length>c;)this.vm.pop();if(f.type==="pending"){this.resolveAsync(f),this.dag.registerLineDataSourceDependency(t,f.packageId||o,[f.queryKey]);let m=chunkPS272DZJ_cjs.M(f.queryKey);return this.storeLineResult(t,m,e,i,s,r),m}if(f.type==="error")throw this.keystrokeSignal?.removeEventListener("abort",p),f.error;return this.keystrokeSignal?.removeEventListener("abort",p),this.dag.registerLine(t,i,s),this.storeLineResult(t,f.value,e,i,s,r),f.value}executeRaw(e,t=-1){let r=this.vm.getStack().length,i=new AbortController,s=()=>i.abort();this.keystrokeSignal?.addEventListener("abort",s,{once:true}),chunkTTFO4YDP_cjs.a.localControllerCreated("executeRaw"),this.keystrokeSignal&&chunkTTFO4YDP_cjs.a.signalLinked("executeRaw"),this.vm.activeSignal=i.signal,this.vm.abortCurrent=()=>{chunkTTFO4YDP_cjs.a.signalUnlinked("executeRaw"),this.keystrokeSignal?.removeEventListener("abort",s),i.abort();},chunkZLRJ7TDP_cjs.a(this.queryClient);let o=chunkSYYE3QAX_cjs.d(e,this.vm,void 0,void 0,this.makeLineContext(t));for(;this.vm.getStack().length>r;)this.vm.pop();return o.type!=="pending"&&this.keystrokeSignal?.removeEventListener("abort",s),o}async resolveAsync(e){let{queryKey:t,resolver:r,packageId:i,signal:s}=e,o=i||"_engine";try{if(await r,s.aborted){chunkTTFO4YDP_cjs.a.staleDataDiscarded(t,"signal aborted after resolve");return}this.batcher.add({queryKey:t,packageId:o,signal:s,isError:!1});}catch(a){if(s.aborted){chunkTTFO4YDP_cjs.a.staleDataDiscarded(t,"signal aborted after error");return}let l=a instanceof Error?a:new Error(String(a));this.batcher.add({queryKey:t,packageId:o,signal:s,isError:true,error:l});}}parseDocument(e,t={inputType:"markdown"}){let r=this.config.performance.maxDocumentLines;if(chunkUURM7P3P_cjs.b(e,r)>r)throw chunkSOMGSIO4_cjs.c.execution("DOCUMENT_TOO_LARGE",`This document has more than ${r.toLocaleString("en-US")} lines, which is the most the engine will process in one pass`,{maxLines:r});this.userUnits.isEmpty||this.bytecodeCache.clear(),this.userUnits.clear(),this.resetAccumulators();let i=this.lexer.scanDocument(e),s=this.processScanResults(i),o={lines:s,totalLines:s.length,errors:[]};for(let l of s){l.error&&o.errors.push(`Line ${l.lineNumber}: ${l.error}`);for(let c of l.inlineSolves)c.error&&o.errors.push(`Line ${l.lineNumber}: ${c.error}`);}if(t.includeDiagnostics??false){let l=this.diagnosticPipeline.collectReports();l.length>0&&(o.diagnostics=l[0].toJSON());}return o}evaluateLines(e){this.userUnits.isEmpty||this.bytecodeCache.clear(),this.userUnits.clear(),this.resetAccumulators();let t=e.join(`
4
+ `),r=this.lexer.scanDocument(t);return this.processScanResults(r)}processScanResults(e){let t=[],r=this.batchScanResults,i=this.batchParsedLines;this.batchScanResults=e,this.batchParsedLines=t;try{for(let s of e){let o=s.text,a=s.lineNumber,l=s.startOffset,c=s.endOffset,u=s.classification.skip,p=s.inlineSolves.map(g=>({start:g.start,end:g.end,expression:g.expression,lineNumber:a,columnNumber:g.columnNumber})),f=p.length>0,m={lineNumber:a,text:o,startPosition:l,endPosition:c,isEmpty:u,hasInlineSolves:f,inlineSolves:p,expression:null,result:null,error:null};if(!u){let g=o.trim().startsWith(":");if(f&&!g)for(let R of p)try{R.result=this.evaluateLine(a,R.expression);}catch(O){let I=O instanceof Error?O.message:String(O);R.error=I;}else {let R=s.classification.contentOffset,I=(R===void 0?o:o.slice(R-l)).trim();if(I)try{let E=this.evaluateLineWithPreTokenized(a,I,s.tokens);m.expression=I,m.result=E[0];}catch(E){let X=E instanceof Error?E.message:String(E);m.error=X;}}}t.push(m);}}finally{this.batchScanResults=r,this.batchParsedLines=i;}return t}evaluateLineWithPreTokenized(e,t,r){let i=[],s=false;for(let o of r)(o.type==="LPAREN"||o.type==="RPAREN")&&(s=true),i.push(o);return [this.evaluateWithTokens(e,t,i,s)]}parseExpression(e,t,r,i=true){this.parser.setBuilder(e),this.parser.load(t,this.config.validation.autoBalanceParens?r:false),this.parser.parseExpression(0);let s=this.parser.peek();if(s){if(s.type==="EQUALS"&&!this.parser.peekAt(1))return;for(let o=i?t.length-1:0;o>=1;o--){if(t[o].type!=="COLON"||o+1>=t.length)continue;let a=true;for(let l=0;l<o;l++){let c=t[l].type;if(c!=="NUMBER"&&c!=="COLON"){a=false;break}}if(a){let l=t.slice(0,o+2).map(c=>c.value).join("");throw chunkSOMGSIO4_cjs.c.parsing("INVALID_TIME_LITERAL",`"${l}" is not a valid time`,{tokenType:t[o].type,tokenValue:l})}e.reset();try{this.parseExpression(e,t.slice(o+1),r,!1);return}catch{}}throw chunkSOMGSIO4_cjs.c.parsing("UNEXPECTED_TRAILING_TOKEN",`Unexpected token after expression: "${s.value}"`,{tokenType:s.type,tokenValue:s.value})}}compileAdHoc(e){let t=new chunk4QVBSG6B_cjs.d(this.pluginFunctionIndexByName);return this.parseExpression(t,e),t.build()}executeSymbolicTolerant(e,t=-1){let r=chunkSYYE3QAX_cjs.d(e,this.vm,void 0,void 0,this.makeLineContext(t),true);if(r.type==="error")throw r.error;if(r.type==="pending")throw chunkSOMGSIO4_cjs.c.execution("THEREFORE_ASYNC_UNSUPPORTED",`"=>" doesn't support expressions that call an async operation (weather/stocks/currency).`);return r.value}simplifySymbolically(e,t=-1){return this.executeSymbolicTolerant(this.compileAdHoc(e),t)}parseFactorChain(e){if(e.length===0||e.length%2===0)return null;let t=[];for(let r=0;r<e.length;r++)if(r%2===0){if(e[r].type!=="IDENT"&&e[r].type!=="UNIT")return null;t.push(e[r].value);}else if(e[r].type!=="STAR")return null;return t}solveEquation(e,t=-1){let r=[];for(let a of e.factorNames){let l=this.vm.getVar(a);if(l===void 0)return chunkPS272DZJ_cjs.N("EQUATION_FACTOR_UNDEFINED",`Cannot solve for "${e.variable}": "${a}" is not yet defined.`);if(l.type!==7)return chunkPS272DZJ_cjs.N("EQUATION_FACTOR_NOT_MATRIX",`Cannot solve for "${e.variable}": "${a}" must be a Matrix (got a different value type).`);r.push(l);}let i=r[0].value;for(let a=1;a<r.length;a++){let l=chunkN7N7MPMK_cjs._(i,r[a].value);if(l.type===13)return l;i=l.value;}let s=chunkN7N7MPMK_cjs.da(i);if(s.type===13)return s;let o=this.executeSymbolicTolerant(e.rhsProgram,t);return o.type!==7?chunkPS272DZJ_cjs.N("EQUATION_RHS_NOT_MATRIX",`Cannot solve for "${e.variable}": the right-hand side must be a Matrix.`):chunkN7N7MPMK_cjs._(s.value,o.value)}tryDefineUserUnit(e){if(e.length<5||e[0].type!=="NUMBER"||Number(e[0].value)!==1)return null;let t=1;e[t].type==="STAR"&&t++;let r=[];for(;t<e.length&&e[t].type==="IDENT";)r.push(e[t].value),t++;if(r.length===0||e[t]?.type!=="EQUALS"||(t++,e[t]?.type!=="NUMBER"))return null;let i=e[t];if(t++,e[t]?.type!=="UNIT")return null;let s=e[t];return t++,t!==e.length?null:(this.userUnits.define(r,i.value,s.value),this.bytecodeCache.clear(),chunkPS272DZJ_cjs.t(`${r.join(" ")} defined`))}tryCompoundAssignment(e,t=-1){if(e.length<2)return null;let r=e[0],i=e[1],s=r.type==="IDENT"||r.type==="UNIT",o=i.type==="PLUS_EQUALS"||i.type==="MINUS_EQUALS";if(!s||!o)return null;let a=e.slice(2);if(a.length===0)throw chunkSOMGSIO4_cjs.c.parsing("COMPOUND_ASSIGN_REQUIRES_EXPRESSION",`"${r.value} ${i.value}" needs an expression on the right, e.g. "${r.value} ${i.value} 10".`);let l=r.value;this.accumulatorNames.add(l),this.vm.getVar(l)===void 0&&this.vm.setVar(l,chunkPS272DZJ_cjs.n(0));let c=i.type==="PLUS_EQUALS"?{type:"PLUS",text:"+"}:{type:"MINUS",text:"-"},u=[chunkAPN442VD_cjs.b("IDENT",l,[r]),chunkAPN442VD_cjs.b(c.type,c.text,[i]),chunkAPN442VD_cjs.b("LPAREN","(",[i]),...a,chunkAPN442VD_cjs.b("RPAREN",")",[i])],p=chunkSYYE3QAX_cjs.d(this.compileAdHoc(u),this.vm,void 0,void 0,this.makeLineContext(t),false);if(p.type==="error")throw p.error;if(p.type==="pending")throw chunkSOMGSIO4_cjs.c.execution("COMPOUND_ASSIGN_ASYNC_UNSUPPORTED","A running total (+= / -=) cannot use an async operation (weather/stocks/currency) on its right-hand side.");return this.vm.setVar(l,p.value),p.value}resetAccumulators(){for(let e of this.accumulatorNames)this.vm.deleteVar(e);return this.accumulatorNames}trySymbolicGrammar(e,t=-1){if(e.length===0)return null;if(e[e.length-1].type==="THEREFORE"){let c=e.slice(0,-1);if(c.length===0)throw chunkSOMGSIO4_cjs.c.parsing("THEREFORE_REQUIRES_EXPRESSION",'"=>" needs an expression or variable name before it.');if(c.length===1&&(c[0].type==="IDENT"||c[0].type==="UNIT")){let u=c[0].value,p=this.vm.getEquation(u),f=this.vm.getScalarEquation(u);if(p){let m=this.solveEquation(p,t);if(!(m.type===13&&m.value==="EQUATION_FACTOR_NOT_MATRIX")||!f)return m}if(f)return this.solveScalarEquation(f,t)}return this.simplifySymbolically(c,t)}if(chunkSZGK6RIP_cjs.b(e))return this.simplifySymbolically(e,t);if(e[0].type==="COLON"||e[0].type==="GLOBAL"||e[0].type==="GOAL_SEEK")return null;let i=e.findIndex(c=>c.type==="EQUALS");if(i===-1)return null;let s=this.parseFactorChain(e.slice(0,i));if(s===null)return this.tryStoreScalarEquation(e,i);let o=e.slice(i+1);if(s.length===1){let c=this.simplifySymbolically(o,t);return this.vm.setVar(s[0],c),c}let a=s[s.length-1],l=s.slice(0,-1);return this.vm.defineEquation(a,l,this.compileAdHoc(o)),this.vm.defineScalarEquation(a,this.compileAdHoc(e.slice(0,i)),this.compileAdHoc(o)),chunkPS272DZJ_cjs.t(`${a} stored as an equation \u2014 solve with "${a} =>"`)}tryStoreScalarEquation(e,t){if(e[1]?.type==="LPAREN"||t===0||t===e.length-1)return null;let r=e.slice(0,t),i=e.slice(t+1);if(i.some(a=>a.type==="EQUALS"))return null;let s=this.equationUnknowns(r,i);if(s.length!==1)return null;let o=s[0];return this.vm.defineScalarEquation(o,this.compileAdHoc(r),this.compileAdHoc(i)),chunkPS272DZJ_cjs.t(`${o} stored as an equation \u2014 solve with "${o} =>"`)}equationUnknowns(e,t){let r=[];for(let i of [...e,...t])i.type!=="IDENT"&&i.type!=="UNIT"||this.vm.getVar(i.value)===void 0&&(this.vm.hasUserFunction(i.value)||r.includes(i.value)||r.push(i.value));return r}solveScalarEquation(e,t=-1){let r=this.executeSymbolicTolerant(e.lhsProgram,t),i=this.executeSymbolicTolerant(e.rhsProgram,t);return chunkJAK3RAFA_cjs.i(r,i,e.variable)}lexToTokens(e,t){let r=[],i=false;this.lexer.resetExpression(e);for(let s of this.lexer)s.type!=="COMMENT"&&((s.type==="LPAREN"||s.type==="RPAREN")&&(i=true),r.push(s),t?.(s));return {tokens:r,hasParens:i}}prepareExpression(e,t,r,i,s=-1){let o=Ie(e,this.config.validation);if(!o.passed)return {kind:"error",stage:"length",error:o.error.engineError};let a=t.filter(E=>E.type!=="COMMENT");if(a.length===0)return {kind:"empty"};let l=this.normalizer.normalize(a,i),c=Ve(l,this.config.validation);if(!c.passed)return {kind:"error",stage:"complexity",error:c.engineError,normalizedTokens:l};let u,p=null;try{if(u=this.tryDefineUserUnit(l),u===null){let E=this.tryCompoundAssignment(l,s);E!==null&&(u=E,p=fe(l));}u===null&&(u=this.trySymbolicGrammar(l,s));}catch(E){let{reads:X,writes:P}=fe(l);return {kind:"error",stage:"parse",error:chunkSOMGSIO4_cjs.d(E),reads:X,writes:P,normalizedTokens:l}}if(u!==null)return {kind:"symbolic-solve",normalizedTokens:l,value:u,reads:p?.reads,writes:p?.writes};let{reads:f,writes:m}=fe(l),g=this.bytecodeCache.get(e);if(g)return {kind:"ready",normalizedTokens:l,reads:f,writes:m,program:g,cached:true};let R=this.builderPool[this.builderPoolIndex++%this.builderPool.length];R.reset();let O,I=null;try{let E=U.track("parser",()=>(this.parseExpression(R,l,r),R.build()));O=E.result,I=E.alloc;}catch(E){return {kind:"error",stage:"parse",error:chunkSOMGSIO4_cjs.d(E),reads:f,writes:m,normalizedTokens:l}}return this.cacheBytecode(e,O),{kind:"ready",normalizedTokens:l,reads:f,writes:m,program:O,cached:false,parserAlloc:I}}preflightAsync(e,t,r,i,s,o){if(!(t.hasAsync||this.resolverRegistry.size>0))return {kind:"proceed"};let a=new AbortController,l=()=>a.abort();this.keystrokeSignal?.addEventListener("abort",l,{once:true}),chunkTTFO4YDP_cjs.a.localControllerCreated("preflightAsync"),this.keystrokeSignal&&chunkTTFO4YDP_cjs.a.signalLinked("preflightAsync");let c=a.signal,u=this.resolverRegistry.preflightAll(e,t,"_engine",c,this.queryClient);if(u){this.resolveAsync({type:"pending",queryKey:u.queryKey,resolver:u.resolver,packageId:u.packageId||"_engine",signal:u.signal}),this.dag.registerLineDataSourceDependency(r,u.packageId||"_engine",[u.queryKey]);let p=chunkPS272DZJ_cjs.M(u.queryKey);return this.storeLineResult(r,p,t,s,o,i),{kind:"pending",value:p}}return this.keystrokeSignal?.removeEventListener("abort",l),{kind:"proceed"}}evaluateWithTokens(e,t,r,i){let s=this.prepareExpression(t,r,i,void 0,e);if(s.kind==="empty"){let p=chunkPS272DZJ_cjs.n(0);return this.lineCache.set(e,new W(p,{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},[],null),t),p}if(s.kind==="error")throw s.error;if(s.kind==="symbolic-solve")return this.storeLineResult(e,s.value,{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},s.reads??[],s.writes??[],t),s.value;let{normalizedTokens:o,reads:a,writes:l,program:c}=s,u=this.preflightAsync(o,c,e,t,a,l);return u.kind==="pending"?u.value:this.executeAndStore(c,e,t,a,l,"_engine")}evaluateLine(e,t){let r=this.evaluateLineWithDebug(e,t);if(r.error)throw r.engineError?r.engineError:chunkSOMGSIO4_cjs.c.execution("EVALUATION_ERROR",r.error,{lineNumber:e});return chunkPS272DZJ_cjs.l(r.value)}evaluateLineWithDebug(e,t,r="expression"){let i=t.match(/^s`([^`]*)`$/);if(i){let s=i[1];return {...this.evaluateExpressionWithDiagnostic(s,e,r),inlineSolve:{start:0,end:t.length,expression:s,lineNumber:e,columnNumber:1}}}return this.evaluateExpressionWithDiagnostic(t,e,r)}addDiagnosticStage(e,t,r,i,s,o,a,l,c){e.push({stage:t,label:r,icon:i,colorClass:s,stepNumber:o,elapsedNs:a,skipped:l,output:c});}evaluateExpressionWithDiagnostic(e,t,r="expression"){let i=this.diagnosticPipeline,s=i.hasCollectors,o=this.timelineCollector?.parseletMatchCount??0,a=U.isEnabled(),l=[],c=[],u=0,p=Ie(e,this.config.validation);if(!p.passed)return s&&this.addDiagnosticStage(c,"safety_length","Safety: Length","\u{1F6E1}\uFE0F","validate",2,u,false,{type:"safety_length",passed:false,expressionLength:e.length,maxLength:this.config.validation.maxExpressionLength,errorMessage:p.error.error}),{...p.error,debug:void 0,diagnostic:void 0};s&&(i.firePipelineStart({type:chunkAXMQG5TS_cjs.c.PipelineStart,elapsedNs:0,expression:e,inputType:r}),this.addDiagnosticStage(c,"pipeline_start","Pipeline Start","\u25B6","pipeline",1,u,false,{type:"pipeline_start",expression:e,inputType:r}),this.addDiagnosticStage(c,"safety_length","Safety: Length","\u{1F6E1}\uFE0F","validate",2,u,false,{type:"safety_length",passed:true,expressionLength:e.length,maxLength:this.config.validation.maxExpressionLength}));let f=s?h=>{i.fireTokenEmitted({type:chunkAXMQG5TS_cjs.c.TokenEmitted,elapsedNs:0,expression:e,token:{type:h.type,value:h.value,offset:h.offset||0,line:h.line||t,col:h.col||0}});}:void 0,m=U.track("lexer",()=>this.lexToTokens(e,f)),g=m.result.tokens,R=m.result.hasParens;if(a&&m.alloc&&l.push(m.alloc),s){let h={};for(let A of g)h[A.type]=(h[A.type]||0)+1;this.addDiagnosticStage(c,"lexer","Lexer","\u{1F524}","lexer",3,u,false,{type:"lexer",tokenCount:g.length,tokenTypes:h,hasParens:R,locale:this.localeCode,tokens:[...g]});let N=[];for(let A=0;A<g.length;A++){let ee=g[A];if(ee.type==="INLINE_SOLVE_START"){let V=-1;for(let z=A+1;z<g.length;z++)if(g[z].type==="BACKTICK_OPEN"){V=z;break}if(V>A){let $t=g.slice(A+1,V).map(Wt=>Wt.value).join("");N.push({startTokenIndex:A,endTokenIndex:V,expression:$t,columnNumber:ee.col||1}),A=V;}}}this.addDiagnosticStage(c,"line_classification","Line Classification","\u{1F4CB}","classify",3.5,u,false,{type:"line_classification",classification:"expression",skip:false,hasInlineSolve:N.length>0,inlineSolveSpans:N});}if(g.length===0){let h=chunkPS272DZJ_cjs.n(0);return this.lineCache.set(t,new W(h,{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},[],null),e),s&&i.firePipelineEnd({type:chunkAXMQG5TS_cjs.c.PipelineEnd,elapsedNs:0,expression:e,success:true,totalTokens:0,totalOpcodes:0}),{value:h,tokens:g,program:{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},debug:void 0,diagnostic:void 0}}let O=0,I=[],E=new Map,X=s?h=>{O++,I.push(h),E.set(h.rule,(E.get(h.rule)||0)+1),i.fireTokenFused({type:chunkAXMQG5TS_cjs.c.TokenFused,elapsedNs:0,expression:e,ruleName:h.rule,sourceTokenCount:h.sourceTokens.length,fusedTokenType:h.fusedToken.type,fusedTokenValue:h.fusedToken.value});}:void 0;s&&this.normalizer.ruleCount>0&&i.fireNormalizerStart({type:chunkAXMQG5TS_cjs.c.NormalizerStart,elapsedNs:0,expression:e,inputTokenCount:g.length});let P=this.bytecodeCache.get(e);s&&!P&&this.parser.setDiagnosticPipeline(i,e);let y=this.prepareExpression(e,g,R,X,t);a&&y.kind==="ready"&&y.parserAlloc&&l.push(y.parserAlloc),s&&!P&&this.parser.setDiagnosticPipeline(void 0,"");let x=y.kind==="empty"?g:y.normalizedTokens??g;if(s&&(this.normalizer.ruleCount>0?(i.fireNormalizerEnd({type:chunkAXMQG5TS_cjs.c.NormalizerEnd,elapsedNs:0,expression:e,outputTokenCount:x.length,fusionsCount:O}),this.addDiagnosticStage(c,"normalizer","Normalizer","\u{1F504}","normalizer",4,u,false,{type:"normalizer",inputTokenCount:g.length,outputTokenCount:x.length,fusions:I,rulesApplied:[...E.entries()].map(([h,N])=>({rule:h,count:N})),tokens:[...x],phrases:this.normalizer.getPhrases()})):this.addDiagnosticStage(c,"normalizer","Normalizer","\u{1F504}","normalizer",4,u,true,{type:"normalizer",inputTokenCount:g.length,outputTokenCount:g.length,fusions:[],rulesApplied:[],tokens:[...g],phrases:this.normalizer.getPhrases()})),y.kind==="empty"||y.kind==="error"&&y.stage==="length"){if(s&&i.firePipelineEnd({type:chunkAXMQG5TS_cjs.c.PipelineEnd,elapsedNs:0,expression:e,success:y.kind==="empty",totalTokens:g.length,totalOpcodes:0}),y.kind==="empty"){let h=chunkPS272DZJ_cjs.n(0);return this.lineCache.set(t,new W(h,{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},[],null),e),{value:h,tokens:g,program:{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},debug:void 0,diagnostic:void 0}}return {value:chunkPS272DZJ_cjs.n(0),tokens:[],program:{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},error:y.error.message,engineError:y.error,debug:void 0,diagnostic:void 0}}let J=Ve(x,this.config.validation);if(y.kind==="error"&&y.stage==="complexity")return s&&(this.addDiagnosticStage(c,"safety_complexity","Safety: Complexity","\u{1F6E1}\uFE0F","validate",5,u,false,{type:"safety_complexity",passed:false,complexityScore:J.complexityScore??0,maxComplexity:this.config.validation.maxComplexity,breakdown:{tokenCount:x.length,functionCalls:0,nestingDepth:0},errorMessage:J.errorMessage}),i.firePipelineEnd({type:chunkAXMQG5TS_cjs.c.PipelineEnd,elapsedNs:0,expression:e,success:false,totalTokens:g.length,totalOpcodes:0})),{value:chunkPS272DZJ_cjs.n(0),tokens:[],program:{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},error:J.errorMessage,engineError:J.engineError,debug:void 0,diagnostic:void 0};if(s&&this.addDiagnosticStage(c,"safety_complexity","Safety: Complexity","\u{1F6E1}\uFE0F","validate",5,u,false,{type:"safety_complexity",passed:true,complexityScore:J.complexityScore??x.length,maxComplexity:this.config.validation.maxComplexity,breakdown:{tokenCount:x.length,functionCalls:0,nestingDepth:0}}),y.kind==="symbolic-solve"){s&&i.firePipelineEnd({type:chunkAXMQG5TS_cjs.c.PipelineEnd,elapsedNs:0,expression:e,success:true,totalTokens:g.length,totalOpcodes:0});let h={opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false};return this.storeLineResult(t,y.value,h,y.reads??[],y.writes??[],e),{value:y.value,tokens:x,program:h,debug:void 0,diagnostic:void 0}}let ae=y.reads??[],Y=y.writes??[];if(s&&(this.addDiagnosticStage(c,"readwrite","Read/Write","\u{1F4CB}","readwrite",6,u,false,{type:"readwrite",reads:ae,writes:Y,isAssignment:Y.length>0}),this.addDiagnosticStage(c,"cache_check","Cache Check","\u{1F4BE}","cache",7,u,false,{type:"cache_check",hit:!!P,cacheSize:this.bytecodeCache.size,cacheKey:e}),P?i.fireCacheHit({type:chunkAXMQG5TS_cjs.c.CacheHit,elapsedNs:0,expression:e,cache:"bytecode",key:e}):i.fireCacheMiss({type:chunkAXMQG5TS_cjs.c.CacheMiss,elapsedNs:0,expression:e,cache:"bytecode",key:e})),y.kind==="error"&&y.stage==="parse")return s&&i.firePipelineEnd({type:chunkAXMQG5TS_cjs.c.PipelineEnd,elapsedNs:0,expression:e,success:false,totalTokens:g.length,totalOpcodes:0}),{value:chunkPS272DZJ_cjs.n(0),tokens:x,program:{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},error:y.error.message,engineError:y.error,debug:void 0,diagnostic:void 0};if(y.kind!=="ready")throw chunkSOMGSIO4_cjs.c.internal({code:"UNEXPECTED_ERROR",message:"Internal error: prepareExpression() returned an unexpected variant after all other cases were handled"});let v=y.program;s&&(this.addDiagnosticStage(c,"parser","Parser","\u{1F333}","parser",8,u,!!P,{type:"parser",parselets:[],uniqueParseletTypes:[],astDepth:0}),this.addDiagnosticStage(c,"compiler","Compiler","\u2699\uFE0F","compiler",9,u,!!P,{type:"compiler",opcodeCount:v.opcodes.length,numberConstants:v.numbers.length,stringConstants:v.strings.length,hasAsync:v.hasAsync,cached:!!P}),i.fireBytecodeBuilt({type:chunkAXMQG5TS_cjs.c.BytecodeBuilt,elapsedNs:0,expression:e,opcodesLength:v.opcodes.length,numbersLength:v.numbers.length,stringsLength:v.strings.length,isCached:!!P}));let Ft=v.hasAsync||this.resolverRegistry.size>0,Z=this.preflightAsync(x,v,t,e,ae,Y);if(s&&(Z.kind==="pending"?this.addDiagnosticStage(c,"async_preflight","Async Preflight","\u{1F52E}","async",10,u,false,{type:"async_preflight",path:"pending",pendingQueryKey:Z.value.value,resolverCount:this.resolverRegistry.size,skippedGuard:true}):Ft?this.addDiagnosticStage(c,"async_preflight","Async Preflight","\u{1F52E}","async",10,u,false,{type:"async_preflight",path:"sync",resolverCount:this.resolverRegistry.size,skippedGuard:false}):this.addDiagnosticStage(c,"async_preflight","Async Preflight","\u{1F52E}","async",10,u,true,{type:"async_preflight",path:"sync",resolverCount:0,skippedGuard:true})),Z.kind==="pending")return s&&i.firePipelineEnd({type:chunkAXMQG5TS_cjs.c.PipelineEnd,elapsedNs:0,expression:e,success:true,totalTokens:g.length,totalOpcodes:v.opcodes.length}),{value:Z.value,tokens:x,program:v,debug:void 0,diagnostic:s?this.buildDiagnosticResult(c,Z.value,x,v,null):void 0};let zt=s&&this.config.diagnostic.vmTraceEnabled===true,C;try{let h=U.track("vm",()=>this.executeAndStore(v,t,e,ae,Y,"_engine",zt?i:void 0,e),{cacheHit:!!P});C=h.result,a&&h.alloc&&l.push(h.alloc);}catch(h){let N=chunkSOMGSIO4_cjs.d(h);return s&&i.firePipelineEnd({type:chunkAXMQG5TS_cjs.c.PipelineEnd,elapsedNs:0,expression:e,success:false,totalTokens:g.length,totalOpcodes:v.opcodes.length}),{value:chunkPS272DZJ_cjs.n(0),tokens:x,program:v,error:N.message,engineError:N,debug:void 0,diagnostic:void 0}}let le=C.type===12;if(s){let h=le?"pending":String(C.value??""),N=le?"Pending":C.unit?"Uom":"Number";this.addDiagnosticStage(c,"vm_execute","VM Execute","\u26A1","vm",11,u,false,{type:"vm_execute",totalInstructions:v.opcodes.length,stackDepth:this.vm.getStack().length,resultType:N,resultValue:h,isPending:le});}if(le)return s&&i.firePipelineEnd({type:chunkAXMQG5TS_cjs.c.PipelineEnd,elapsedNs:0,expression:e,success:true,totalTokens:g.length,totalOpcodes:v.opcodes.length}),{value:C,tokens:x,program:v,debug:void 0,diagnostic:s?this.buildDiagnosticResult(c,C,x,v,null):void 0};if(a&&l.length>0&&(this.lastTelemetry=U.createTelemetry(e,l,!!P)),s&&(this.addDiagnosticStage(c,"dag_registration","DAG Registration","\u{1F517}","dag",12,u,false,{type:"dag_registration",readsRegistered:ae,writesRegistered:Y,dataSourcesRegistered:[]}),this.addDiagnosticStage(c,"linecache","Line Cache","\u{1F4E6}","cache",13,u,false,{type:"linecache",lineNumber:t,expression:e,stored:true}),this.addDiagnosticStage(c,"result","Result","\u2713","result",14,u,false,{type:"result",rawValue:String(C.value),formattedValue:String(C.value),valueType:C.type===0?"Number":"Value",unit:C.unit}),i.fireVmHalt({type:chunkAXMQG5TS_cjs.c.VmHalt,elapsedNs:0,expression:e,result:C?{type:C.type,value:C.value,unit:C.unit}:void 0}),this.addDiagnosticStage(c,"pipeline_end","Pipeline End","\u23F9","pipeline",15,u,false,{type:"pipeline_end",success:true,totalTokens:g.length,totalOpcodes:v.opcodes.length,cacheHit:!!P}),i.firePipelineEnd({type:chunkAXMQG5TS_cjs.c.PipelineEnd,elapsedNs:0,expression:e,success:true,totalTokens:g.length,totalOpcodes:v.opcodes.length})),s){let N=i.collectReports()[0]?.toJSON(),A=N;if(N){let ee=N.parselets.slice(o),V={};for(let z of ee)V[z.parseletCategory]=(V[z.parseletCategory]??0)+1;A={...N,parselets:ee,summary:{...N.summary,totalParselets:Object.keys(V).length,parseCategories:V}};}return {value:C,tokens:x,program:v,debug:A,diagnostic:this.buildDiagnosticResult(c,C,x,v,null)}}return {value:C,tokens:x,program:v}}buildDiagnosticResult(e,t,r,i,s){return {stages:e,value:t,tokens:r,program:i,error:s,dagSnapshot:this.dag.getSnapshot(),cacheSnapshot:this.getCacheSnapshot(),batcherMetrics:this.getBatcherMetrics(),checkpoints:this.getCheckpoints()}}reEvaluateLine(e,t){let r=this.lineCache.get(e,t);if(!r)return;let i=this.bytecodeCache.get(t);if(!i)return;if(r.bytecode.hasAsync||this.resolverRegistry.size>0){let a=new AbortController,l=()=>a.abort();this.keystrokeSignal?.addEventListener("abort",l,{once:true}),chunkTTFO4YDP_cjs.a.localControllerCreated("reEvaluateLine preflight"),this.keystrokeSignal&&chunkTTFO4YDP_cjs.a.signalLinked("reEvaluateLine preflight");let c=a.signal,u=this.resolverRegistry.preflightAll([],r.bytecode,"_engine",c,this.queryClient);if(u)return this.resolveAsync({type:"pending",queryKey:u.queryKey,resolver:u.resolver,packageId:u.packageId||"_engine",signal:u.signal}),chunkPS272DZJ_cjs.M(u.queryKey);this.keystrokeSignal?.removeEventListener("abort",l);}let s=this.executeRaw(i,e);if(s.type==="pending")return this.resolveAsync(s),chunkPS272DZJ_cjs.M(s.queryKey);if(s.type==="error")throw s.error;let o=s.value;return r.result=o,o}getDag(){return this.dag}getLineCache(){return this.lineCache}getBytecodeCache(){return this.bytecodeCache}getVM(){return this.vm}getContext(){return this.context}getScopeManager(){return this.scopeManager}getLexer(){return this.lexer}getNormalizer(){return this.normalizer}getPackageCompletionItems(){let e=[];for(let t of this.packageCompletionItems.values())e.push(...t);return e}getParseletRegistry(){return {prefix:this.registry.getAllPrefix(),infix:this.registry.getAllInfix()}}tokenizeForClassification(e){this.lexer.resetExpression(e);let r=Array.from(this.lexer).filter(i=>i.type!=="COMMENT");return r.length===0?[]:this.normalizer.normalize(r)}getParser(){return this.parser}isDiagnosticMode(){return this.diagnosticPipeline.hasCollectors}setKeystrokeSignal(e){e?chunkTTFO4YDP_cjs.a.keystrokeSignalSet(e.aborted):chunkTTFO4YDP_cjs.a.keystrokeSignalCleared(),this.keystrokeSignal=e;}getCacheSnapshot(){let e=[];for(let[o,a]of this.bytecodeCache)e.push({expression:o,opcodesLength:a.opcodes.length,numbersLength:a.numbers.length,stringsLength:a.strings.length,hasAsync:a.hasAsync});let t=[];for(let o of this.lineCache.keys()){let a=o.indexOf(":"),l=a>0?parseInt(o.slice(0,a),10)||0:parseInt(o,10)||0,c=a>0?o.slice(a+1):void 0,u=c!==void 0?this.lineCache.get(l,c):this.lineCache.getEntryForLine(l);u&&t.push({key:o,lineNumber:l,resultType:String(u.result?.type??""),resultValue:String(u.result?.value??""),reads:u.readVariables??[],writeVar:u.writeVariable??null});}let s=this.queryClient.getQueryCache().getAll().map(o=>{let a=o.state.status==="success"?"resolved":o.state.status==="error"?"error":"in_flight";return {packageId:o.queryKey[0]??"unknown",resolvedCount:o.state.status==="success"?1:0,inFlightCount:o.state.status!=="success"&&o.state.status!=="error"?1:0,errorCount:o.state.status==="error"?1:0,entries:[{key:o.queryKey.join(":"),status:a}]}});return {bytecode:e,lineCache:t,asyncCache:s}}getBatcherMetrics(){return {pendingCount:this.batcher.pendingCount,dedupCount:this.batcher.dedupCount,workerOffloadCount:this.batcher.workerOffloadCount,listenerCount:this.batcher.listenerCount}}getCheckpoints(){let t=this.vm.checkpointer;return t?t.getAllCheckpoints().map(i=>({lineNumber:i.lineNumber,variables:Object.keys(i.variables),variableCount:Object.keys(i.variables).length})):[]}getLastTelemetry(){return this.lastTelemetry}evaluateExpression(e){return this.evaluateLine(-1,e)}explainLine(e){let{tokens:t}=this.lexToTokens(e),r=t.filter(s=>s.type!=="COMMENT"),i=this.normalizer.normalize(r);return De({expression:e,tokens:i,evaluate:s=>this.evaluateIsolated(s),locale:this.localeCode})}evaluateIsolated(e){let{tokens:t,hasParens:r}=this.lexToTokens(e),i=this.prepareExpression(e,t,r,void 0,-1);if(i.kind==="empty")return chunkPS272DZJ_cjs.n(0);if(i.kind==="error")throw i.error;if(i.kind==="symbolic-solve")return i.value;let s=this.executeRaw(i.program,-1);if(s.type==="error")throw s.error;if(s.type==="pending")throw chunkSOMGSIO4_cjs.c.execution("EXPLAIN_ASYNC_UNSUPPORTED",`A derivation cannot be built for a line that resolves data asynchronously: "${e}"`,{expression:e});return s.value}compileExpression(e){let{tokens:t,hasParens:r}=this.lexToTokens(e),i=this.prepareExpression(e,t,r);if(i.kind==="empty")return {program:{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},tokens:[],reads:[],writes:[]};if(i.kind==="error")throw i.stage==="parse"&&(i.reads?.length||i.writes?.length)?new chunkSOMGSIO4_cjs.b(i.error.category,{code:i.error.code,message:i.error.message,expected:i.error.expected,found:i.error.found,suggestion:i.error.suggestion,recoverable:i.error.recoverable,span:i.error.span,cause:i.error.cause,context:{...i.error.context,reads:i.reads??[],writes:i.writes??[]}}):i.error;return i.kind==="symbolic-solve"?{program:{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},tokens:i.normalizedTokens,reads:i.reads??[],writes:i.writes??[]}:{program:i.program,tokens:t,reads:i.reads,writes:i.writes}}tryCompileExpression(e){try{return this.tryCompileExpressionUnguarded(e)}catch{return false}}tryCompileExpressionUnguarded(e){let{tokens:t,hasParens:r}=this.lexToTokens(e);return this.prepareExpression(e,t,r).kind!=="error"}executeCached(e,t=-1){if(e.opcodes.length===0)return chunkPS272DZJ_cjs.n(0);let r=this.executeRaw(e,t);if(r.type==="pending")return this.resolveAsync(r),chunkPS272DZJ_cjs.M(r.queryKey);if(r.type==="error")throw r.error;return r.value}evaluateNumber(e){let t=e.trim();if(/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)&&this.vm.getVar(t)===void 0)return NaN;try{let r=this.evaluateLine(-1,e);return r.isFault()?NaN:r.toNumber()}catch{return NaN}}clear(){this.batcher.clearAll(),this.queryClient.clear(),chunkZLRJ7TDP_cjs.b()===this.queryClient&&chunkZLRJ7TDP_cjs.a(null),this.dag.clear(),this.lineCache.clear(),this.scopeManager.clear(),this.bytecodeCache.clear(),this.vm.reset(),this.userUnits.clear(),this.accumulatorNames.clear(),this.lastTelemetry=null;}toJSON(){let e=this.dag.getSnapshot(),t=new Set;for(let c of Object.keys(e.dataSourceDeps)){let u=Number(c);Number.isNaN(u)||t.add(u);}let r=this.lineCache.snapshotEntries(),i=new Map;for(let{line:c,entry:u}of r){let p=t.has(c)||u.bytecode.hasAsync;p&&t.add(c);let f=u.writeVariable;if(f){let m=i.get(f);(!m||c>=m.line)&&i.set(f,{line:c,async:p});}}let s={};for(let[c,u]of this.vm.getVariableEntries())if(u.type!==12&&!i.get(c)?.async)try{s[c]=we(u,`variable "${c}"`);}catch(p){if(p instanceof chunkSOMGSIO4_cjs.b&&p.code===D.SNAPSHOT_UNSUPPORTED_VALUE)continue;throw p}let o=this.vm.getUserFunctionDefs().map(Re),a=[];for(let{line:c,expression:u,entry:p}of r){if(t.has(c)||p.result.type===12)continue;let f;try{f=we(p.result,`line ${c}`);}catch(m){if(m instanceof chunkSOMGSIO4_cjs.b&&m.code===D.SNAPSHOT_UNSUPPORTED_VALUE)continue;throw m}a.push({line:c,expression:u,result:f,bytecode:re(p.bytecode),reads:p.readVariables.slice(),writeVar:p.writeVariable});}let l=Array.from(this.bytecodeCache.entries()).map(([c,u])=>({expression:c,program:re(u)}));return {format:G,version:H,engineVersion:chunkUDQ57ZRX_cjs.a,locale:this.localeCode,variables:s,userFunctions:o,lineCache:a,bytecodeCache:l}}static fromJSON(e,t={}){Ot(e);let r=t.locale??e.locale??"en",i=new oe({locale:r,diagnostics:t.diagnostics??false,config:t.config,packages:t.packages});return i.restoreSnapshot(e),i}restoreSnapshot(e){for(let[t,r]of Object.entries(e.variables))this.vm.setVar(t,Ae(r));for(let t of e.userFunctions){let r=Pe(t);this.vm.defineUserFunction(r.name,r.params,r.program);}for(let t of e.lineCache){let r=new W(Ae(t.result),ie(t.bytecode),t.reads.slice(),t.writeVar);this.lineCache.set(t.line,r,t.expression),this.dag.registerLine(t.line,t.reads,t.writeVar?[t.writeVar]:[]);}for(let{expression:t,program:r}of e.bytecodeCache)this.bytecodeCache.set(t,ie(r));}evaluateIncremental(e,t){let r=this.dag.getAffectedLinesInOrder(e);this.vm.setVar(e,chunkPS272DZJ_cjs.n(t));let i=new Map;for(let s of r){let o=this.lineCache.getEntryForLine(s);if(!o||o.bytecode.opcodes.length===0)continue;let a=this.executeRaw(o.bytecode,s);if(a.type==="pending"){this.resolveAsync(a);continue}if(a.type==="error"){let c=chunkPS272DZJ_cjs.N(a.error.code,a.error.message);i.set(s,c),o.result=c;continue}let l=a.value;i.set(s,l),o.result=l;}return i}};oe.GOAL_SEEK_MAX_NESTING_DEPTH=1;var ye=oe;var Ue=(()=>{throw new Error("engine.worker.ts was not processed by esbuild-plugin-inline-worker, so worker offload is unavailable")}),q=null;function hn(){return q||(q=new ye),q}var Q=null;function fn(){return Q||(Q=chunkSYYE3QAX_cjs.c(chunkJAK3RAFA_cjs.w,200,5e4)),Q}function mn(n){let e={lineId:n.lineId,expression:n.expression,compiledAgainstHash:n.textHash,strings:[],reads:[],writes:[],isVariableDef:false,error:null};try{let t=hn(),{program:r,reads:i,writes:s}=t.compileExpression(n.expression),o=s.length>0,a=r.opcodes,l=r.numbers,c=a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength),u=l.buffer.slice(l.byteOffset,l.byteOffset+l.byteLength);return {...e,opcodesBuffer:c,numbersBuffer:u,opcodesLength:a.length,numbersLength:l.length,strings:[...r.strings],reads:i,writes:s,isVariableDef:o}}catch(t){return {...e,opcodesBuffer:new ArrayBuffer(0),numbersBuffer:new ArrayBuffer(0),opcodesLength:0,numbersLength:0,error:t instanceof Error?t.message:String(t)}}}function yn(n){let e=[],t=[];for(let r of n.items){let i=mn(r);e.push(i),i.opcodesBuffer.byteLength>0&&t.push(i.opcodesBuffer),i.numbersBuffer.byteLength>0&&t.push(i.numbersBuffer);}self.postMessage({id:n.id,type:"COMPILE_RESULT",results:e},t);}function vn(n){let e=fn();e.reset();let t=new Uint8Array(n.opcodesBuffer,0,n.opcodesLength),r=new Float64Array(n.numbersBuffer,0,n.numbersLength),i={opcodes:t,numbers:r,strings:n.strings};try{let s=chunkSYYE3QAX_cjs.d(i,e);if(s.type==="pending")return {lineNumber:n.lineNumber,valueType:12,value:0,isPending:!0,queryKey:s.queryKey};if(s.type==="error")return {lineNumber:n.lineNumber,valueType:13,value:0,isPending:!1,unit:s.error.message};let o=s.value;return {lineNumber:n.lineNumber,valueType:o.type,value:typeof o.value=="number"?o.value:typeof o.value=="bigint"?Number(o.value):0,unit:o.unit,isPending:!1}}catch{return {lineNumber:n.lineNumber,valueType:13,value:0,isPending:false,unit:"Worker execution failed"}}}function bn(n){let e=[];for(let t of n.items)e.push(vn(t));self.postMessage({id:n.id,type:"EXECUTE_RESULT",results:e});}var En=typeof self<"u"&&typeof window>"u",Sn=n=>{if(n.origin&&self.location&&n.origin!==self.location.origin)return;let e=n.data;switch(e.type){case "COMPILE_BATCH":yn(e);break;case "EXECUTE_BATCH":bn(e);break;case "TERMINATE":{q&&(q.clear(),q=null),Q&&(Q.reset(),Q=null),self.postMessage({id:e.id,type:"COMPILE_RESULT",results:[]});break}default:self.postMessage({id:-1,type:"COMPILE_RESULT",results:[],error:`Unknown message type: ${e.type}`});}};En&&(self.onmessage=Sn);var xn=3e4,Ut=50,be=class{constructor(e){this.workers=[];this.nextWorker=0;this.nextId=1;this.pendingBatches=new Map;this.terminated=false;this._available=null;this.poolSize=Math.min(e??this.defaultPoolSize(),4);}defaultPoolSize(){return typeof navigator<"u"&&navigator.hardwareConcurrency?Math.min(navigator.hardwareConcurrency,4):2}isAvailable(){if(this.terminated)return false;if(this._available!==null)return this._available;if(typeof Worker>"u")return this._available=false,false;try{return Ue().terminate(),this._available=!0,!0}catch{return this._available=false,false}}executeBatch(e,t){if(!this.isAvailable())return;if(e.length===0)return Promise.resolve([]);this.ensureWorkers();let r=[];for(let a of e){let l=t.get(a);if(!l||l.bytecode.opcodes.length===0)continue;let c=l.bytecode.opcodes,u=l.bytecode.numbers,p=c.buffer.slice(c.byteOffset,c.byteOffset+c.byteLength),f=u.buffer.slice(u.byteOffset,u.byteOffset+u.byteLength);r.push({lineNumber:a,opcodesBuffer:p,numbersBuffer:f,opcodesLength:c.length,numbersLength:u.length,strings:[...l.bytecode.strings]});}if(r.length===0)return Promise.resolve([]);let i=[];for(let a of r)a.opcodesBuffer.byteLength>0&&i.push(a.opcodesBuffer),a.numbersBuffer.byteLength>0&&i.push(a.numbersBuffer);let s=this.nextId++,o=this.getNextWorker();return new Promise(a=>{let l=setTimeout(()=>{this.pendingBatches.delete(s),a([]);},xn);this.pendingBatches.set(s,{id:s,lineNumbers:e,resolve:c=>{clearTimeout(l),a(c);}}),o.postMessage({type:"EXECUTE_BATCH",id:s,items:r},i);})}clear(){for(let[,e]of this.pendingBatches)e.resolve([]);this.pendingBatches.clear();for(let e of this.workers)e.terminate();this.workers=[],this.nextWorker=0;}destroy(){this.terminated=true,this.clear();}ensureWorkers(){if(!(this.workers.length>0))for(let e=0;e<this.poolSize;e++){let t=Ue();t.onmessage=r=>{this.handleWorkerMessage(r.data);},t.onerror=r=>{console.error(`[ExecutionPool] Worker ${e} error:`,r.message);for(let[i,s]of this.pendingBatches)s.resolve([]),this.pendingBatches.delete(i);},this.workers.push(t);}}getNextWorker(){let e=this.workers[this.nextWorker];return this.nextWorker=(this.nextWorker+1)%this.workers.length,e}handleWorkerMessage(e){if(e.type!=="EXECUTE_RESULT")return;let t=this.pendingBatches.get(e.id);t&&(this.pendingBatches.delete(e.id),t.resolve(e.results));}};function _t(n){switch(n.valueType){case 0:return chunkPS272DZJ_cjs.n(n.value);case 1:return chunkPS272DZJ_cjs.r(n.value);case 2:return chunkPS272DZJ_cjs.s(BigInt(n.value));case 3:return chunkPS272DZJ_cjs.t(String(n.value));case 4:return chunkPS272DZJ_cjs.K(n.value);case 5:return chunkPS272DZJ_cjs.L(n.value);case 6:return chunkPS272DZJ_cjs.u(n.value,n.unit??"");case 7:return chunkPS272DZJ_cjs.n(n.value);case 10:return chunkPS272DZJ_cjs.J(n.value!==0);case 12:return chunkPS272DZJ_cjs.M(n.queryKey??"");case 13:return chunkPS272DZJ_cjs.N("WORKER_EXECUTION_ERROR",n.unit??"Unknown worker error");default:return chunkPS272DZJ_cjs.n(n.value)}}var Ee=class Ee{constructor(e,t,r,i=Ee.DEFAULT_HIGH_WATER_MARK){this.pending=[];this.scheduled=false;this.cleared=false;this.executionPool=null;this.workerOffloadDispatchCount=0;this._streamController=null;this._testCaptures=null;this.onLineResult=null;this.warnedAboutMissingHook=false;this.dag=e,this.lineCache=t,this.vm=r,this.highWaterMark=i,this._eventStream=this.createEventStream();}warnIfUnwired(){this.onLineResult||this.warnedAboutMissingHook||(this.warnedAboutMissingHook=true,console.warn("[solve-engine] An async result resolved but AsyncResolutionBatcher.onLineResult is not set, so the value cannot reach your document and the line will keep showing as pending. Set it to mirror resolved values into your own state. This warning appears once per batcher."));}createEventStream(){return new ReadableStream({start:e=>{this._streamController=e;},cancel:()=>{this._streamController=null;}},new CountQueuingStrategy({highWaterMark:this.highWaterMark}))}add(e){this.cleared=false;for(let t of this.pending)if(t.packageId===e.packageId&&t.queryKey===e.queryKey)return;this.pending.push(e),this.scheduled||(this.scheduled=true,queueMicrotask(()=>{try{this.flush();}catch(t){let r=chunkSOMGSIO4_cjs.d(t);console.error(`[AsyncResolutionBatcher] flush() failed unexpectedly \u2014 this should never happen; please report: ${r.format()}`);}}));}getEventStream(){return this._eventStream}get pendingCount(){return this.pending.length}get dedupCount(){let e=new Set;for(let t of this.pending)e.add(`${t.packageId}:${t.queryKey}`);return Math.max(0,this.pending.length-e.size)}get listenerCount(){return this._eventStream.locked?1:0}get workerOffloadCount(){return this.workerOffloadDispatchCount}clearAll(){this.pending=[],this.scheduled=false,this.cleared=true,this._testCaptures=null,this.onLineResult=null;try{this._streamController?.close();}catch{}this._streamController=null,this._eventStream=this.createEventStream(),this.executionPool&&(this.executionPool.clear(),this.executionPool=null),this.workerOffloadDispatchCount=0;}flush(){if(this.scheduled=false,this.cleared||this.pending.length===0)return;let e=this.pending;this.pending=[];let t=new Map;for(let c of e){let u=`${c.packageId}:${c.queryKey}`;t.set(u,c);}let r=[],i=[];for(let c of t.values())c.isError?r.push(c):i.push(c);for(let c of r)c.signal.aborted||this.notifyListeners({type:"error",queryKey:c.queryKey,packageId:c.packageId,error:c.error??new Error("Unknown async resolution error")});let s=new Set,o=[],a=[...i,...r];for(let c of a){if(c.signal.aborted)continue;o.push(c.queryKey);let u=this.dag.getAffectedLinesByDataSource(c.packageId,[c.queryKey]);for(let p of u)s.add(p);}if(s.size===0){this.notifyListeners({type:"lines-updated",lineNumbers:[],affectedQueryKeys:o});return}let l=this.topologicalSort(Array.from(s));if(l.length>Ut){let c=new Map;for(let u of l)c.set(u,this.lineCache.getEntryForLine(u));this.reExecuteViaWorkerPool(l,c,o).catch(u=>{let p=chunkSOMGSIO4_cjs.d(u);console.error(`[AsyncResolutionBatcher] reExecuteViaWorkerPool() failed unexpectedly: ${p.format()}`);});return}this.reExecuteMainThread(l,o);}topologicalSort(e){if(e.length<=1)return e;let t=new Map,r=new Map,i=new Map;for(let a of e)t.set(a,0),r.set(a,[]);for(let a of e){let l=this.dag.getWrites(a);for(let c of l)i.set(c,a);}for(let a of e){let l=this.dag.getDependencies(a);for(let c of l){let u=i.get(c);u!==void 0&&u!==a&&(r.get(u).push(a),t.set(a,(t.get(a)??0)+1));}}let s=[];for(let[a,l]of t)l===0&&s.push(a);if(s.length===0&&e.length>0)return [...e].sort((a,l)=>a-l);let o=[];for(;s.length>0;){let a=s.shift();o.push(a);for(let l of r.get(a)??[]){let c=(t.get(l)??1)-1;t.set(l,c),c===0&&s.push(l);}}if(o.length<e.length){let a=e.filter(l=>!o.includes(l)).sort((l,c)=>l-c);o.push(...a);}return o}async reExecuteViaWorkerPool(e,t,r){this.executionPool||(this.executionPool=new be);let i=this.executionPool.executeBatch(e,t);if(!i){this.reExecuteMainThread(e,r,t);return}this.workerOffloadDispatchCount++;let s=await i;if(this.cleared)return;let o=[];for(let a of s){let l=t.get(a.lineNumber);if(!l||a.isPending)continue;let c=_t(a);l.result=c,this.warnIfUnwired(),this.onLineResult?.(a.lineNumber,c),o.push(a.lineNumber);}this.cleared||(o.length>0||r.length>0)&&this.notifyListeners({type:"lines-updated",lineNumbers:o,affectedQueryKeys:r});}reExecuteMainThread(e,t,r){let i=[];for(let s of e){let o=r?r.get(s):this.lineCache.getEntryForLine(s);if(!o||o.bytecode.opcodes.length===0)continue;let a=this.vm.getStack().length;try{let l=chunkSYYE3QAX_cjs.d(o.bytecode,this.vm);for(;this.vm.getStack().length>a;)this.vm.pop();if(l.type==="value")o.result=l.value,this.warnIfUnwired(),this.onLineResult?.(s,l.value),i.push(s);else if(l.type==="error"){let c=chunkPS272DZJ_cjs.N(l.error.code,l.error.message);o.result=c,this.warnIfUnwired(),this.warnIfUnwired(),this.onLineResult?.(s,c),i.push(s);}}catch(l){for(;this.vm.getStack().length>a;)this.vm.pop();let c=chunkSOMGSIO4_cjs.d(l),u=chunkPS272DZJ_cjs.N(c.code,c.message);o.result=u,this.warnIfUnwired(),this.onLineResult?.(s,u),i.push(s);}}return (i.length>0||t.length>0)&&this.notifyListeners({type:"lines-updated",lineNumbers:i,affectedQueryKeys:t}),i}notifyListeners(e){if(this._testCaptures&&this._testCaptures.push(e),this._streamController)try{this._streamController.enqueue(e);}catch{}}};Ee.DEFAULT_HIGH_WATER_MARK=64;var ve=Ee;exports.a=kt;exports.b=Yt;exports.c=At;exports.d=G;exports.e=H;exports.f=D;exports.g=Ue;exports.h=ve;exports.i=Ie;exports.j=Ve;exports.k=fe;exports.l=$n;exports.m=Wn;exports.n=ye;//# sourceMappingURL=chunk-4J7XZSZJ.cjs.map
5
+ //# sourceMappingURL=chunk-4J7XZSZJ.cjs.map