solve-engine 1.0.0-beta.7 → 1.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 (205) hide show
  1. package/dist/{BytecodeBuilder-3egMyuDi.d.cts → BytecodeBuilder-B0xskcv5.d.cts} +2 -1
  2. package/dist/{BytecodeBuilder-3egMyuDi.d.ts → BytecodeBuilder-B0xskcv5.d.ts} +2 -1
  3. package/dist/{Configuration-fVpd-HC-.d.cts → Configuration-B-G5gTRn.d.cts} +107 -29
  4. package/dist/{Configuration-fVpd-HC-.d.ts → Configuration-B-G5gTRn.d.ts} +107 -29
  5. package/dist/{EngineError-DvPSnhZi.d.cts → EngineError-LU7W7AgI.d.cts} +96 -16
  6. package/dist/{EngineError-DvPSnhZi.d.ts → EngineError-LU7W7AgI.d.ts} +96 -16
  7. package/dist/{Lexer-W9MBOP0V.d.ts → Lexer-BN5mt30n.d.ts} +16 -0
  8. package/dist/{Lexer-Cfm79Dak.d.cts → Lexer-D78E2yDW.d.cts} +16 -0
  9. package/dist/{PackageRegistry-CjDt-Jy_.d.ts → PackageRegistry-DFeINv2O.d.ts} +54 -13
  10. package/dist/{PackageRegistry-pHtKythi.d.cts → PackageRegistry-u2zdfFaj.d.cts} +54 -13
  11. package/dist/{Parselet-DEdF9I7n.d.ts → Parselet-BaySkMV3.d.ts} +37 -5
  12. package/dist/{Parselet-Cu0bLSis.d.cts → Parselet-DuI1Pjiq.d.cts} +37 -5
  13. package/dist/{ScopeManager-CKfQtl7l.d.cts → ScopeManager-B6GzdhVG.d.cts} +75 -6
  14. package/dist/{ScopeManager-B5k0nk05.d.ts → ScopeManager-udv4Twwq.d.ts} +75 -6
  15. package/dist/{VMCheckpoints-BmDwIXgK.d.ts → VMCheckpoints-BiaIlOOY.d.ts} +4 -4
  16. package/dist/{VMCheckpoints-CqFuLwrT.d.cts → VMCheckpoints-DwLjivM7.d.cts} +4 -4
  17. package/dist/{Value-KtAQNHur.d.cts → Value-CXJqDH9J.d.cts} +5 -2
  18. package/dist/{Value-KtAQNHur.d.ts → Value-CXJqDH9J.d.ts} +5 -2
  19. package/dist/{chunk-CSG5XVNJ.cjs → chunk-3AFRJYP4.cjs} +556 -414
  20. package/dist/chunk-3AFRJYP4.cjs.map +1 -0
  21. package/dist/chunk-3BOK2LDK.js +17 -0
  22. package/dist/chunk-3BOK2LDK.js.map +1 -0
  23. package/dist/{chunk-6RDSQURE.js → chunk-3D7V24DG.js} +57 -6
  24. package/dist/chunk-3D7V24DG.js.map +1 -0
  25. package/dist/{chunk-MEOHSQEH.js → chunk-3LAEG75D.js} +47 -15
  26. package/dist/chunk-3LAEG75D.js.map +1 -0
  27. package/dist/{chunk-P75775WC.js → chunk-3VNGREMU.js} +118 -41
  28. package/dist/chunk-3VNGREMU.js.map +1 -0
  29. package/dist/{chunk-4AVD7NZW.cjs → chunk-4B2CNWQU.cjs} +13 -7
  30. package/dist/chunk-4B2CNWQU.cjs.map +1 -0
  31. package/dist/{chunk-6GCKCWLB.js → chunk-526PMQOA.js} +126 -69
  32. package/dist/chunk-526PMQOA.js.map +1 -0
  33. package/dist/{chunk-2CS6OMZK.js → chunk-5F4C26RU.js} +8 -5
  34. package/dist/chunk-5F4C26RU.js.map +1 -0
  35. package/dist/{chunk-M4N5GA5Z.cjs → chunk-5KMIY374.cjs} +57 -6
  36. package/dist/chunk-5KMIY374.cjs.map +1 -0
  37. package/dist/{chunk-R24DI24X.cjs → chunk-5LI5EPGJ.cjs} +6 -5
  38. package/dist/chunk-5LI5EPGJ.cjs.map +1 -0
  39. package/dist/{chunk-BAMZT3GL.js → chunk-5WVP4YHP.js} +939 -134
  40. package/dist/chunk-5WVP4YHP.js.map +1 -0
  41. package/dist/{chunk-MZOVP3WI.cjs → chunk-6KFYJ6TD.cjs} +3 -2
  42. package/dist/chunk-6KFYJ6TD.cjs.map +1 -0
  43. package/dist/{chunk-BXKJLM5R.cjs → chunk-6WFMPTGB.cjs} +972 -636
  44. package/dist/chunk-6WFMPTGB.cjs.map +1 -0
  45. package/dist/{chunk-2MV4HBKC.cjs → chunk-A2N2GFCG.cjs} +10 -10
  46. package/dist/{chunk-2MV4HBKC.cjs.map → chunk-A2N2GFCG.cjs.map} +1 -1
  47. package/dist/chunk-ADBA3XBE.cjs +20 -0
  48. package/dist/chunk-ADBA3XBE.cjs.map +1 -0
  49. package/dist/{chunk-MBNQVDVC.cjs → chunk-AMOJYLG2.cjs} +16 -10
  50. package/dist/chunk-AMOJYLG2.cjs.map +1 -0
  51. package/dist/{chunk-CLVQBF5C.cjs → chunk-AQNHHJMJ.cjs} +5 -5
  52. package/dist/{chunk-CLVQBF5C.cjs.map → chunk-AQNHHJMJ.cjs.map} +1 -1
  53. package/dist/{chunk-AHCLWAM5.cjs → chunk-BHTNFEGZ.cjs} +13 -13
  54. package/dist/chunk-BHTNFEGZ.cjs.map +1 -0
  55. package/dist/{chunk-35IWNZPJ.cjs → chunk-E4NUZXVK.cjs} +58 -27
  56. package/dist/chunk-E4NUZXVK.cjs.map +1 -0
  57. package/dist/{chunk-P33SBYGG.js → chunk-GLG5ZMX7.js} +54 -23
  58. package/dist/chunk-GLG5ZMX7.js.map +1 -0
  59. package/dist/{chunk-BVAR5J2F.js → chunk-GQCOSXMG.js} +117 -6
  60. package/dist/chunk-GQCOSXMG.js.map +1 -0
  61. package/dist/{chunk-QDMPOAI7.cjs → chunk-HDP7VK3C.cjs} +1118 -313
  62. package/dist/chunk-HDP7VK3C.cjs.map +1 -0
  63. package/dist/{chunk-GVWHCL2N.js → chunk-HMOISHXR.js} +217 -75
  64. package/dist/chunk-HMOISHXR.js.map +1 -0
  65. package/dist/{chunk-MTX2KVU7.cjs → chunk-HVQFNJKE.cjs} +122 -90
  66. package/dist/chunk-HVQFNJKE.cjs.map +1 -0
  67. package/dist/{chunk-OC6LTXYS.cjs → chunk-JMXUNXQS.cjs} +126 -7
  68. package/dist/chunk-JMXUNXQS.cjs.map +1 -0
  69. package/dist/{chunk-WWOLFXTX.cjs → chunk-KBSXGXPM.cjs} +10 -7
  70. package/dist/chunk-KBSXGXPM.cjs.map +1 -0
  71. package/dist/{chunk-YU2CUNFO.js → chunk-KV7UW6T6.js} +11 -5
  72. package/dist/chunk-KV7UW6T6.js.map +1 -0
  73. package/dist/{chunk-CCJPSHGI.cjs → chunk-N7FNVFXW.cjs} +4 -12
  74. package/dist/chunk-N7FNVFXW.cjs.map +1 -0
  75. package/dist/{chunk-CYFK5SY2.js → chunk-O3ANBHSA.js} +169 -39
  76. package/dist/chunk-O3ANBHSA.js.map +1 -0
  77. package/dist/{chunk-NZFKROS7.cjs → chunk-PA4VC73I.cjs} +130 -72
  78. package/dist/chunk-PA4VC73I.cjs.map +1 -0
  79. package/dist/{chunk-NJTXJ5AG.cjs → chunk-PFUESQTW.cjs} +18 -18
  80. package/dist/{chunk-NJTXJ5AG.cjs.map → chunk-PFUESQTW.cjs.map} +1 -1
  81. package/dist/{chunk-SFQWJMKT.js → chunk-QY25VWBF.js} +51 -12
  82. package/dist/chunk-QY25VWBF.js.map +1 -0
  83. package/dist/{chunk-WC5FFSHB.js → chunk-R3PY4G7J.js} +3 -3
  84. package/dist/{chunk-WC5FFSHB.js.map → chunk-R3PY4G7J.js.map} +1 -1
  85. package/dist/{chunk-M5E34VG5.js → chunk-SBUFNJVE.js} +3 -3
  86. package/dist/{chunk-M5E34VG5.js.map → chunk-SBUFNJVE.js.map} +1 -1
  87. package/dist/{chunk-UKPGSAZW.js → chunk-TMA4RCEN.js} +3 -3
  88. package/dist/{chunk-UKPGSAZW.js.map → chunk-TMA4RCEN.js.map} +1 -1
  89. package/dist/{chunk-V6HA6JJZ.cjs → chunk-U5VAY32K.cjs} +215 -138
  90. package/dist/chunk-U5VAY32K.cjs.map +1 -0
  91. package/dist/{chunk-DUEZFTK2.js → chunk-UKQHXPGW.js} +4 -12
  92. package/dist/chunk-UKQHXPGW.js.map +1 -0
  93. package/dist/{chunk-4CVLFLOB.cjs → chunk-UM6BVY2S.cjs} +201 -69
  94. package/dist/chunk-UM6BVY2S.cjs.map +1 -0
  95. package/dist/{chunk-75JP4BZX.js → chunk-UQ3UIZJC.js} +3 -2
  96. package/dist/chunk-UQ3UIZJC.js.map +1 -0
  97. package/dist/{chunk-PCPX42KL.js → chunk-V4XG5QF6.js} +16 -10
  98. package/dist/chunk-V4XG5QF6.js.map +1 -0
  99. package/dist/{chunk-GPPLSM2Z.js → chunk-VB37OC6I.js} +6 -5
  100. package/dist/chunk-VB37OC6I.js.map +1 -0
  101. package/dist/{chunk-MVBEL57Q.js → chunk-Y7FT4IQT.js} +500 -170
  102. package/dist/chunk-Y7FT4IQT.js.map +1 -0
  103. package/dist/{chunk-OFXOTECC.js → chunk-YPPPYLSR.js} +7 -7
  104. package/dist/chunk-YPPPYLSR.js.map +1 -0
  105. package/dist/{chunk-M4F66R4O.cjs → chunk-YWQ6V4ZN.cjs} +121 -82
  106. package/dist/chunk-YWQ6V4ZN.cjs.map +1 -0
  107. package/dist/constants.cjs +5 -5
  108. package/dist/constants.d.cts +1 -1
  109. package/dist/constants.d.ts +1 -1
  110. package/dist/constants.js +2 -2
  111. package/dist/engine.cjs +31 -31
  112. package/dist/engine.d.cts +11 -11
  113. package/dist/engine.d.ts +11 -11
  114. package/dist/engine.js +21 -21
  115. package/dist/errors.cjs +19 -19
  116. package/dist/errors.d.cts +2 -2
  117. package/dist/errors.d.ts +2 -2
  118. package/dist/errors.js +1 -1
  119. package/dist/format.cjs +29 -22
  120. package/dist/format.cjs.map +1 -1
  121. package/dist/format.d.cts +1 -2
  122. package/dist/format.d.ts +1 -2
  123. package/dist/format.js +23 -16
  124. package/dist/format.js.map +1 -1
  125. package/dist/index.cjs +31 -31
  126. package/dist/index.d.cts +10 -10
  127. package/dist/index.d.ts +10 -10
  128. package/dist/index.js +22 -22
  129. package/dist/language.cjs +8 -8
  130. package/dist/language.cjs.map +1 -1
  131. package/dist/language.d.cts +10 -10
  132. package/dist/language.d.ts +10 -10
  133. package/dist/language.js +6 -6
  134. package/dist/language.js.map +1 -1
  135. package/dist/lexer.cjs +18 -18
  136. package/dist/lexer.d.cts +2 -2
  137. package/dist/lexer.d.ts +2 -2
  138. package/dist/lexer.js +6 -6
  139. package/dist/normalizer.cjs +12 -12
  140. package/dist/normalizer.js +6 -6
  141. package/dist/packages.cjs +39 -39
  142. package/dist/packages.d.cts +9 -9
  143. package/dist/packages.d.ts +9 -9
  144. package/dist/packages.js +16 -16
  145. package/dist/parser.cjs +15 -15
  146. package/dist/parser.d.cts +23 -9
  147. package/dist/parser.d.ts +23 -9
  148. package/dist/parser.js +5 -5
  149. package/dist/{pipeline-CrsRPmsv.d.ts → pipeline-B6k5lCB7.d.ts} +1 -1
  150. package/dist/{pipeline-DPUQt7yL.d.cts → pipeline-BEb3hujr.d.cts} +1 -1
  151. package/dist/resolvers.d.cts +2 -2
  152. package/dist/resolvers.d.ts +2 -2
  153. package/dist/uom.cjs +17 -17
  154. package/dist/uom.d.cts +2 -2
  155. package/dist/uom.d.ts +2 -2
  156. package/dist/uom.js +7 -7
  157. package/dist/utilities.cjs +8 -4
  158. package/dist/utilities.d.cts +19 -3
  159. package/dist/utilities.d.ts +19 -3
  160. package/dist/utilities.js +2 -2
  161. package/dist/vm.cjs +43 -31
  162. package/dist/vm.d.cts +105 -9
  163. package/dist/vm.d.ts +105 -9
  164. package/dist/vm.js +9 -9
  165. package/package.json +1 -1
  166. package/dist/chunk-2CS6OMZK.js.map +0 -1
  167. package/dist/chunk-35IWNZPJ.cjs.map +0 -1
  168. package/dist/chunk-4AVD7NZW.cjs.map +0 -1
  169. package/dist/chunk-4CVLFLOB.cjs.map +0 -1
  170. package/dist/chunk-6GCKCWLB.js.map +0 -1
  171. package/dist/chunk-6RDSQURE.js.map +0 -1
  172. package/dist/chunk-75JP4BZX.js.map +0 -1
  173. package/dist/chunk-AHCLWAM5.cjs.map +0 -1
  174. package/dist/chunk-BAMZT3GL.js.map +0 -1
  175. package/dist/chunk-BVAR5J2F.js.map +0 -1
  176. package/dist/chunk-BXKJLM5R.cjs.map +0 -1
  177. package/dist/chunk-CCJPSHGI.cjs.map +0 -1
  178. package/dist/chunk-CSG5XVNJ.cjs.map +0 -1
  179. package/dist/chunk-CYFK5SY2.js.map +0 -1
  180. package/dist/chunk-DUEZFTK2.js.map +0 -1
  181. package/dist/chunk-GPPLSM2Z.js.map +0 -1
  182. package/dist/chunk-GVWHCL2N.js.map +0 -1
  183. package/dist/chunk-M4F66R4O.cjs.map +0 -1
  184. package/dist/chunk-M4N5GA5Z.cjs.map +0 -1
  185. package/dist/chunk-MBNQVDVC.cjs.map +0 -1
  186. package/dist/chunk-MEOHSQEH.js.map +0 -1
  187. package/dist/chunk-MTX2KVU7.cjs.map +0 -1
  188. package/dist/chunk-MVBEL57Q.js.map +0 -1
  189. package/dist/chunk-MZOVP3WI.cjs.map +0 -1
  190. package/dist/chunk-N5YFR4UP.cjs +0 -10
  191. package/dist/chunk-N5YFR4UP.cjs.map +0 -1
  192. package/dist/chunk-NZFKROS7.cjs.map +0 -1
  193. package/dist/chunk-OC6LTXYS.cjs.map +0 -1
  194. package/dist/chunk-OFXOTECC.js.map +0 -1
  195. package/dist/chunk-P33SBYGG.js.map +0 -1
  196. package/dist/chunk-P75775WC.js.map +0 -1
  197. package/dist/chunk-PCPX42KL.js.map +0 -1
  198. package/dist/chunk-PFSDGGYL.js +0 -8
  199. package/dist/chunk-PFSDGGYL.js.map +0 -1
  200. package/dist/chunk-QDMPOAI7.cjs.map +0 -1
  201. package/dist/chunk-R24DI24X.cjs.map +0 -1
  202. package/dist/chunk-SFQWJMKT.js.map +0 -1
  203. package/dist/chunk-V6HA6JJZ.cjs.map +0 -1
  204. package/dist/chunk-WWOLFXTX.cjs.map +0 -1
  205. package/dist/chunk-YU2CUNFO.js.map +0 -1
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunkR24DI24X_cjs = require('./chunk-R24DI24X.cjs');
3
+ var chunk5LI5EPGJ_cjs = require('./chunk-5LI5EPGJ.cjs');
4
4
  var chunkOUHT5Z36_cjs = require('./chunk-OUHT5Z36.cjs');
5
- var chunkCLVQBF5C_cjs = require('./chunk-CLVQBF5C.cjs');
6
- var chunkM4N5GA5Z_cjs = require('./chunk-M4N5GA5Z.cjs');
5
+ var chunkAQNHHJMJ_cjs = require('./chunk-AQNHHJMJ.cjs');
6
+ var chunk5KMIY374_cjs = require('./chunk-5KMIY374.cjs');
7
7
 
8
8
  // src/lexer/ExpressionLexer.ts
9
- chunkR24DI24X_cjs.registerAllTokenTypes();
9
+ chunk5LI5EPGJ_cjs.registerAllTokenTypes();
10
10
  function buildCharClassTable() {
11
11
  const table = new Uint8Array(128);
12
12
  for (let i = 48; i <= 57; i++) table[i] = 2 /* DIGIT */;
@@ -48,6 +48,19 @@ function buildCharClassTable() {
48
48
  table[96] = 11 /* BACKTICK */;
49
49
  return table;
50
50
  }
51
+ function isUnicodeSpace(cc) {
52
+ return cc === 133 || // NEL, next line
53
+ cc === 160 || // no-break space
54
+ cc === 5760 || // ogham space mark
55
+ cc >= 8192 && cc <= 8202 || // en quad through hair space, incl. figure/thin space
56
+ cc === 8203 || // zero-width space
57
+ cc === 8232 || // line separator
58
+ cc === 8233 || // paragraph separator
59
+ cc === 8239 || // narrow no-break space
60
+ cc === 8287 || // medium mathematical space
61
+ cc === 12288 || // ideographic space
62
+ cc === 65279;
63
+ }
51
64
  var LexerToken = class {
52
65
  constructor(type, typeId, value, text, offset, lineBreaks, line, col, sourceEnd) {
53
66
  this.type = type;
@@ -205,7 +218,7 @@ var _ExpressionLexer = class _ExpressionLexer {
205
218
  this.keywordMap.set(k.toLowerCase(), v);
206
219
  }
207
220
  this.mergedKeywords = new Map(this.keywordMap);
208
- this.mergedUnits = new Set(chunkCLVQBF5C_cjs.knownUnits);
221
+ this.mergedUnits = new Set(chunkAQNHHJMJ_cjs.knownUnits);
209
222
  }
210
223
  /**
211
224
  * Test `text` against every registered `rawLinePatterns` rule, in
@@ -220,7 +233,7 @@ var _ExpressionLexer = class _ExpressionLexer {
220
233
  if (m && typeof m[1] === "string") {
221
234
  const value = m[1].trim();
222
235
  if (value.length > 0) {
223
- return new LexerToken(rule.tokenType, chunkR24DI24X_cjs.tokenTypeId(rule.tokenType), value, value, 0, 0, this.line, 1);
236
+ return new LexerToken(rule.tokenType, chunk5LI5EPGJ_cjs.tokenTypeId(rule.tokenType), value, value, 0, 0, this.line, 1);
224
237
  }
225
238
  }
226
239
  }
@@ -229,7 +242,7 @@ var _ExpressionLexer = class _ExpressionLexer {
229
242
  /** Rebuild merged keyword and unit collections after plugin registration. */
230
243
  rebuildMergedCollections() {
231
244
  this.mergedKeywords = new Map([...this.keywordMap, ...this.pluginKeywordMap]);
232
- this.mergedUnits = /* @__PURE__ */ new Set([...chunkCLVQBF5C_cjs.knownUnits, ...this.pluginUnits]);
245
+ this.mergedUnits = /* @__PURE__ */ new Set([...chunkAQNHHJMJ_cjs.knownUnits, ...this.pluginUnits]);
233
246
  }
234
247
  /**
235
248
  * Register a plugin to extend the lexer with custom tokens.
@@ -250,7 +263,7 @@ var _ExpressionLexer = class _ExpressionLexer {
250
263
  for (const [keyword, tokenType] of Object.entries(plugin.keywords)) {
251
264
  const lower = keyword.toLowerCase();
252
265
  if (this.keywordMap.has(lower)) {
253
- throw chunkM4N5GA5Z_cjs.ErrorFactory.config(
266
+ throw chunk5KMIY374_cjs.ErrorFactory.config(
254
267
  "PLUGIN_KEYWORD_COLLISION",
255
268
  `Plugin keyword "${keyword}" conflicts with built-in keyword (type: ${this.keywordMap.get(lower)}). Built-in keywords cannot be overridden.`,
256
269
  { keyword, builtinType: this.keywordMap.get(lower) }
@@ -268,28 +281,28 @@ var _ExpressionLexer = class _ExpressionLexer {
268
281
  const second = chars.charCodeAt(1);
269
282
  const builtInSecondMap = TWO_CHAR_OPS[first];
270
283
  if (builtInSecondMap && builtInSecondMap[second] !== void 0) {
271
- throw chunkM4N5GA5Z_cjs.ErrorFactory.config(
284
+ throw chunk5KMIY374_cjs.ErrorFactory.config(
272
285
  "PLUGIN_OPERATOR_COLLISION",
273
286
  `Plugin operator "${chars}" conflicts with built-in operator (type: ${builtInSecondMap[second]}). Built-in operators cannot be overridden.`,
274
287
  { operator: chars, builtinType: builtInSecondMap[second] }
275
288
  );
276
289
  }
277
290
  if (first === 60 && second === 60) {
278
- throw chunkM4N5GA5Z_cjs.ErrorFactory.config(
291
+ throw chunk5KMIY374_cjs.ErrorFactory.config(
279
292
  "PLUGIN_OPERATOR_COLLISION",
280
293
  `Plugin operator "${chars}" conflicts with built-in operator (type: LSHIFT). Built-in operators cannot be overridden.`,
281
294
  { operator: chars, builtinType: "LSHIFT" }
282
295
  );
283
296
  }
284
297
  if (first === 62 && second === 62) {
285
- throw chunkM4N5GA5Z_cjs.ErrorFactory.config(
298
+ throw chunk5KMIY374_cjs.ErrorFactory.config(
286
299
  "PLUGIN_OPERATOR_COLLISION",
287
300
  `Plugin operator "${chars}" conflicts with built-in operator (type: RSHIFT). Built-in operators cannot be overridden.`,
288
301
  { operator: chars, builtinType: "RSHIFT" }
289
302
  );
290
303
  }
291
304
  if (first === 47 && second === 47) {
292
- throw chunkM4N5GA5Z_cjs.ErrorFactory.config(
305
+ throw chunk5KMIY374_cjs.ErrorFactory.config(
293
306
  "PLUGIN_OPERATOR_COLLISION",
294
307
  `Plugin operator "${chars}" conflicts with built-in comment sequence. Comment sequences cannot be overridden.`,
295
308
  { operator: chars, builtinType: "COMMENT" }
@@ -306,8 +319,8 @@ var _ExpressionLexer = class _ExpressionLexer {
306
319
  }
307
320
  if (plugin.units) {
308
321
  for (const unit of plugin.units) {
309
- if (chunkCLVQBF5C_cjs.knownUnits.has(unit)) {
310
- throw chunkM4N5GA5Z_cjs.ErrorFactory.config(
322
+ if (chunkAQNHHJMJ_cjs.knownUnits.has(unit)) {
323
+ throw chunk5KMIY374_cjs.ErrorFactory.config(
311
324
  "PLUGIN_UNIT_COLLISION",
312
325
  `Plugin unit "${unit}" conflicts with a built-in unit. Built-in units cannot be overridden.`,
313
326
  { unit }
@@ -527,20 +540,20 @@ var _ExpressionLexer = class _ExpressionLexer {
527
540
  switch (cc) {
528
541
  case 2 /* DIGIT */:
529
542
  case 4 /* DOT */:
530
- yield new LexerToken("NUMBER", chunkR24DI24X_cjs.tokenTypeId("NUMBER"), this.input, this.input, 0, 0, 1, 1);
543
+ yield new LexerToken("NUMBER", chunk5LI5EPGJ_cjs.tokenTypeId("NUMBER"), this.input, this.input, 0, 0, 1, 1);
531
544
  tokenIndex++;
532
545
  break;
533
546
  case 3 /* ALPHA */: {
534
547
  const input2 = this.input;
535
548
  const identLower = input2.toLowerCase();
536
549
  if (this.mergedUnits.has(input2)) {
537
- yield new LexerToken("UNIT", chunkR24DI24X_cjs.tokenTypeId("UNIT"), input2, input2, 0, 0, 1, 1);
550
+ yield new LexerToken("UNIT", chunk5LI5EPGJ_cjs.tokenTypeId("UNIT"), input2, input2, 0, 0, 1, 1);
538
551
  } else {
539
552
  const kwType = this.mergedKeywords.get(identLower);
540
553
  if (kwType) {
541
- yield new LexerToken(kwType, chunkR24DI24X_cjs.tokenTypeId(kwType), input2, input2, 0, 0, 1, 1);
554
+ yield new LexerToken(kwType, chunk5LI5EPGJ_cjs.tokenTypeId(kwType), input2, input2, 0, 0, 1, 1);
542
555
  } else {
543
- yield new LexerToken("IDENT", chunkR24DI24X_cjs.tokenTypeId("IDENT"), input2, input2, 0, 0, 1, 1);
556
+ yield new LexerToken("IDENT", chunk5LI5EPGJ_cjs.tokenTypeId("IDENT"), input2, input2, 0, 0, 1, 1);
544
557
  }
545
558
  }
546
559
  tokenIndex++;
@@ -549,7 +562,7 @@ var _ExpressionLexer = class _ExpressionLexer {
549
562
  case 5 /* OPERATOR */: {
550
563
  const opType = OP_MAP[c0];
551
564
  if (opType) {
552
- yield new LexerToken(opType, chunkR24DI24X_cjs.tokenTypeId(opType), this.input, this.input, 0, 0, 1, 1);
565
+ yield new LexerToken(opType, chunk5LI5EPGJ_cjs.tokenTypeId(opType), this.input, this.input, 0, 0, 1, 1);
553
566
  tokenIndex++;
554
567
  }
555
568
  break;
@@ -565,61 +578,61 @@ var _ExpressionLexer = class _ExpressionLexer {
565
578
  tokenIndex++;
566
579
  break;
567
580
  case 8 /* DOLLAR */:
568
- yield new LexerToken("DOLLAR", chunkR24DI24X_cjs.tokenTypeId("DOLLAR"), "$", "$", 0, 0, 1, 1);
581
+ yield new LexerToken("DOLLAR", chunk5LI5EPGJ_cjs.tokenTypeId("DOLLAR"), "$", "$", 0, 0, 1, 1);
569
582
  tokenIndex++;
570
583
  break;
571
584
  case 11 /* BACKTICK */:
572
- yield new LexerToken("BACKTICK_OPEN", chunkR24DI24X_cjs.tokenTypeId("BACKTICK_OPEN"), "`", "`", 0, 0, 1, 1);
585
+ yield new LexerToken("BACKTICK_OPEN", chunk5LI5EPGJ_cjs.tokenTypeId("BACKTICK_OPEN"), "`", "`", 0, 0, 1, 1);
573
586
  tokenIndex++;
574
587
  break;
575
588
  default: {
576
- if (c0 === 215) {
577
- yield new LexerToken("STAR", chunkR24DI24X_cjs.tokenTypeId("STAR"), "\xD7", "\xD7", 0, 0, 1, 1);
589
+ if (isUnicodeSpace(c0)) ; else if (c0 === 215) {
590
+ yield new LexerToken("STAR", chunk5LI5EPGJ_cjs.tokenTypeId("STAR"), "\xD7", "\xD7", 0, 0, 1, 1);
578
591
  tokenIndex++;
579
592
  } else if (c0 === 247) {
580
- yield new LexerToken("SLASH", chunkR24DI24X_cjs.tokenTypeId("SLASH"), "\xF7", "\xF7", 0, 0, 1, 1);
593
+ yield new LexerToken("SLASH", chunk5LI5EPGJ_cjs.tokenTypeId("SLASH"), "\xF7", "\xF7", 0, 0, 1, 1);
581
594
  tokenIndex++;
582
595
  } else if (c0 === 8800) {
583
- yield new LexerToken("NEQ", chunkR24DI24X_cjs.tokenTypeId("NEQ"), "\u2260", "\u2260", 0, 0, 1, 1);
596
+ yield new LexerToken("NEQ", chunk5LI5EPGJ_cjs.tokenTypeId("NEQ"), "\u2260", "\u2260", 0, 0, 1, 1);
584
597
  tokenIndex++;
585
598
  } else if (c0 === 163) {
586
- yield new LexerToken("POUND", chunkR24DI24X_cjs.tokenTypeId("POUND"), "\xA3", "\xA3", 0, 0, 1, 1);
599
+ yield new LexerToken("POUND", chunk5LI5EPGJ_cjs.tokenTypeId("POUND"), "\xA3", "\xA3", 0, 0, 1, 1);
587
600
  tokenIndex++;
588
601
  } else if (c0 === 8364) {
589
- yield new LexerToken("EURO", chunkR24DI24X_cjs.tokenTypeId("EURO"), "\u20AC", "\u20AC", 0, 0, 1, 1);
602
+ yield new LexerToken("EURO", chunk5LI5EPGJ_cjs.tokenTypeId("EURO"), "\u20AC", "\u20AC", 0, 0, 1, 1);
590
603
  tokenIndex++;
591
604
  } else if (c0 === 165) {
592
- yield new LexerToken("YEN", chunkR24DI24X_cjs.tokenTypeId("YEN"), "\xA5", "\xA5", 0, 0, 1, 1);
605
+ yield new LexerToken("YEN", chunk5LI5EPGJ_cjs.tokenTypeId("YEN"), "\xA5", "\xA5", 0, 0, 1, 1);
593
606
  tokenIndex++;
594
607
  } else if (c0 === 8381) {
595
- yield new LexerToken("RUBLE", chunkR24DI24X_cjs.tokenTypeId("RUBLE"), "\u20BD", "\u20BD", 0, 0, 1, 1);
608
+ yield new LexerToken("RUBLE", chunk5LI5EPGJ_cjs.tokenTypeId("RUBLE"), "\u20BD", "\u20BD", 0, 0, 1, 1);
596
609
  tokenIndex++;
597
610
  } else if (c0 === 8361) {
598
- yield new LexerToken("WON", chunkR24DI24X_cjs.tokenTypeId("WON"), "\u20A9", "\u20A9", 0, 0, 1, 1);
611
+ yield new LexerToken("WON", chunk5LI5EPGJ_cjs.tokenTypeId("WON"), "\u20A9", "\u20A9", 0, 0, 1, 1);
599
612
  tokenIndex++;
600
613
  } else if (c0 === 8377) {
601
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B9", "\u20B9", 0, 0, 1, 1);
614
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B9", "\u20B9", 0, 0, 1, 1);
602
615
  tokenIndex++;
603
616
  } else if (c0 === 8378) {
604
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20BA", "\u20BA", 0, 0, 1, 1);
617
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20BA", "\u20BA", 0, 0, 1, 1);
605
618
  tokenIndex++;
606
619
  } else if (c0 === 8372) {
607
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B4", "\u20B4", 0, 0, 1, 1);
620
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B4", "\u20B4", 0, 0, 1, 1);
608
621
  tokenIndex++;
609
622
  } else if (c0 === 8362) {
610
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AA", "\u20AA", 0, 0, 1, 1);
623
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AA", "\u20AA", 0, 0, 1, 1);
611
624
  tokenIndex++;
612
625
  } else if (c0 === 8363) {
613
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AB", "\u20AB", 0, 0, 1, 1);
626
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AB", "\u20AB", 0, 0, 1, 1);
614
627
  tokenIndex++;
615
628
  } else if (c0 === 8358) {
616
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20A6", "\u20A6", 0, 0, 1, 1);
629
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20A6", "\u20A6", 0, 0, 1, 1);
617
630
  tokenIndex++;
618
631
  } else if (c0 === 8369) {
619
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B1", "\u20B1", 0, 0, 1, 1);
632
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B1", "\u20B1", 0, 0, 1, 1);
620
633
  tokenIndex++;
621
634
  } else if (c0 >= 128) {
622
- yield new LexerToken("IDENT", chunkR24DI24X_cjs.tokenTypeId("IDENT"), this.input, this.input, 0, 0, 1, 1);
635
+ yield new LexerToken("IDENT", chunk5LI5EPGJ_cjs.tokenTypeId("IDENT"), this.input, this.input, 0, 0, 1, 1);
623
636
  tokenIndex++;
624
637
  }
625
638
  break;
@@ -674,12 +687,12 @@ var _ExpressionLexer = class _ExpressionLexer {
674
687
  yield this.tokenizeNumber();
675
688
  } else {
676
689
  const col = this.pos - this.lineStartPos + 1;
677
- yield new LexerToken("DOT", chunkR24DI24X_cjs.tokenTypeId("DOT"), ".", ".", this.pos, 0, this.line, col);
690
+ yield new LexerToken("DOT", chunk5LI5EPGJ_cjs.tokenTypeId("DOT"), ".", ".", this.pos, 0, this.line, col);
678
691
  this.pos++;
679
692
  }
680
693
  } else {
681
694
  const col = this.pos - this.lineStartPos + 1;
682
- yield new LexerToken("DOT", chunkR24DI24X_cjs.tokenTypeId("DOT"), ".", ".", this.pos, 0, this.line, col);
695
+ yield new LexerToken("DOT", chunk5LI5EPGJ_cjs.tokenTypeId("DOT"), ".", ".", this.pos, 0, this.line, col);
683
696
  this.pos++;
684
697
  }
685
698
  tokenIndex++;
@@ -702,7 +715,7 @@ var _ExpressionLexer = class _ExpressionLexer {
702
715
  // ── Dollar sign $ ─────────────────────────────────────────────
703
716
  case 8 /* DOLLAR */: {
704
717
  const col = this.pos - this.lineStartPos + 1;
705
- yield new LexerToken("DOLLAR", chunkR24DI24X_cjs.tokenTypeId("DOLLAR"), "$", "$", this.pos, 0, this.line, col);
718
+ yield new LexerToken("DOLLAR", chunk5LI5EPGJ_cjs.tokenTypeId("DOLLAR"), "$", "$", this.pos, 0, this.line, col);
706
719
  this.pos++;
707
720
  tokenIndex++;
708
721
  break;
@@ -710,7 +723,7 @@ var _ExpressionLexer = class _ExpressionLexer {
710
723
  // ── Backtick ` ───────────────────────────────────────────────
711
724
  case 11 /* BACKTICK */: {
712
725
  const col = this.pos - this.lineStartPos + 1;
713
- yield new LexerToken("BACKTICK_OPEN", chunkR24DI24X_cjs.tokenTypeId("BACKTICK_OPEN"), "`", "`", this.pos, 0, this.line, col);
726
+ yield new LexerToken("BACKTICK_OPEN", chunk5LI5EPGJ_cjs.tokenTypeId("BACKTICK_OPEN"), "`", "`", this.pos, 0, this.line, col);
714
727
  this.pos++;
715
728
  if (openSpan) {
716
729
  const span = openSpan;
@@ -730,64 +743,70 @@ var _ExpressionLexer = class _ExpressionLexer {
730
743
  // ── Non-ASCII characters ─────────────────────────────────────
731
744
  default: {
732
745
  const col = this.pos - this.lineStartPos + 1;
733
- if (c0 === 215) {
734
- yield new LexerToken("STAR", chunkR24DI24X_cjs.tokenTypeId("STAR"), "\xD7", "\xD7", this.pos, 0, this.line, col);
746
+ if (isUnicodeSpace(c0)) {
747
+ this.pos++;
748
+ if (c0 === 8232 || c0 === 8233 || c0 === 133) {
749
+ this.line++;
750
+ this.lineStartPos = this.pos;
751
+ }
752
+ } else if (c0 === 215) {
753
+ yield new LexerToken("STAR", chunk5LI5EPGJ_cjs.tokenTypeId("STAR"), "\xD7", "\xD7", this.pos, 0, this.line, col);
735
754
  this.pos++;
736
755
  tokenIndex++;
737
756
  } else if (c0 === 247) {
738
- yield new LexerToken("SLASH", chunkR24DI24X_cjs.tokenTypeId("SLASH"), "\xF7", "\xF7", this.pos, 0, this.line, col);
757
+ yield new LexerToken("SLASH", chunk5LI5EPGJ_cjs.tokenTypeId("SLASH"), "\xF7", "\xF7", this.pos, 0, this.line, col);
739
758
  this.pos++;
740
759
  tokenIndex++;
741
760
  } else if (c0 === 8800) {
742
- yield new LexerToken("NEQ", chunkR24DI24X_cjs.tokenTypeId("NEQ"), "\u2260", "\u2260", this.pos, 0, this.line, col);
761
+ yield new LexerToken("NEQ", chunk5LI5EPGJ_cjs.tokenTypeId("NEQ"), "\u2260", "\u2260", this.pos, 0, this.line, col);
743
762
  this.pos++;
744
763
  tokenIndex++;
745
764
  } else if (c0 === 163) {
746
- yield new LexerToken("POUND", chunkR24DI24X_cjs.tokenTypeId("POUND"), "\xA3", "\xA3", this.pos, 0, this.line, col);
765
+ yield new LexerToken("POUND", chunk5LI5EPGJ_cjs.tokenTypeId("POUND"), "\xA3", "\xA3", this.pos, 0, this.line, col);
747
766
  this.pos++;
748
767
  tokenIndex++;
749
768
  } else if (c0 === 8364) {
750
- yield new LexerToken("EURO", chunkR24DI24X_cjs.tokenTypeId("EURO"), "\u20AC", "\u20AC", this.pos, 0, this.line, col);
769
+ yield new LexerToken("EURO", chunk5LI5EPGJ_cjs.tokenTypeId("EURO"), "\u20AC", "\u20AC", this.pos, 0, this.line, col);
751
770
  this.pos++;
752
771
  tokenIndex++;
753
772
  } else if (c0 === 165) {
754
- yield new LexerToken("YEN", chunkR24DI24X_cjs.tokenTypeId("YEN"), "\xA5", "\xA5", this.pos, 0, this.line, col);
773
+ yield new LexerToken("YEN", chunk5LI5EPGJ_cjs.tokenTypeId("YEN"), "\xA5", "\xA5", this.pos, 0, this.line, col);
755
774
  this.pos++;
756
775
  tokenIndex++;
757
776
  } else if (c0 === 8381) {
758
- yield new LexerToken("RUBLE", chunkR24DI24X_cjs.tokenTypeId("RUBLE"), "\u20BD", "\u20BD", this.pos, 0, this.line, col);
777
+ yield new LexerToken("RUBLE", chunk5LI5EPGJ_cjs.tokenTypeId("RUBLE"), "\u20BD", "\u20BD", this.pos, 0, this.line, col);
759
778
  this.pos++;
760
779
  tokenIndex++;
761
780
  } else if (c0 === 8361) {
762
- yield new LexerToken("WON", chunkR24DI24X_cjs.tokenTypeId("WON"), "\u20A9", "\u20A9", this.pos, 0, this.line, col);
781
+ yield new LexerToken("WON", chunk5LI5EPGJ_cjs.tokenTypeId("WON"), "\u20A9", "\u20A9", this.pos, 0, this.line, col);
763
782
  this.pos++;
764
783
  tokenIndex++;
765
784
  } else if (c0 === 8377) {
766
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B9", "\u20B9", this.pos, 0, this.line, col);
785
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B9", "\u20B9", this.pos, 0, this.line, col);
767
786
  this.pos++;
768
787
  tokenIndex++;
769
788
  } else if (c0 === 8378) {
770
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20BA", "\u20BA", this.pos, 0, this.line, col);
789
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20BA", "\u20BA", this.pos, 0, this.line, col);
771
790
  this.pos++;
772
791
  tokenIndex++;
773
792
  } else if (c0 === 8372) {
774
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B4", "\u20B4", this.pos, 0, this.line, col);
793
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B4", "\u20B4", this.pos, 0, this.line, col);
775
794
  this.pos++;
776
795
  tokenIndex++;
777
796
  } else if (c0 === 8362) {
778
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AA", "\u20AA", this.pos, 0, this.line, col);
797
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AA", "\u20AA", this.pos, 0, this.line, col);
779
798
  this.pos++;
780
799
  tokenIndex++;
781
800
  } else if (c0 === 8363) {
782
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AB", "\u20AB", this.pos, 0, this.line, col);
801
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AB", "\u20AB", this.pos, 0, this.line, col);
783
802
  this.pos++;
784
803
  tokenIndex++;
785
804
  } else if (c0 === 8358) {
786
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20A6", "\u20A6", this.pos, 0, this.line, col);
805
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20A6", "\u20A6", this.pos, 0, this.line, col);
787
806
  this.pos++;
788
807
  tokenIndex++;
789
808
  } else if (c0 === 8369) {
790
- yield new LexerToken("CURRENCY_SYMBOL", chunkR24DI24X_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B1", "\u20B1", this.pos, 0, this.line, col);
809
+ yield new LexerToken("CURRENCY_SYMBOL", chunk5LI5EPGJ_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B1", "\u20B1", this.pos, 0, this.line, col);
791
810
  this.pos++;
792
811
  tokenIndex++;
793
812
  } else if (c0 >= 128) {
@@ -828,7 +847,7 @@ var _ExpressionLexer = class _ExpressionLexer {
828
847
  }
829
848
  const text2 = input.slice(start, pos);
830
849
  this.pos = pos;
831
- return new LexerToken("NUMBER", chunkR24DI24X_cjs.tokenTypeId("NUMBER"), text2, text2, start, 0, this.line, startCol);
850
+ return new LexerToken("NUMBER", chunk5LI5EPGJ_cjs.tokenTypeId("NUMBER"), text2, text2, start, 0, this.line, startCol);
832
851
  }
833
852
  if (next === 98 || next === 66) {
834
853
  pos += 2;
@@ -837,7 +856,7 @@ var _ExpressionLexer = class _ExpressionLexer {
837
856
  }
838
857
  const text2 = input.slice(start, pos);
839
858
  this.pos = pos;
840
- return new LexerToken("NUMBER", chunkR24DI24X_cjs.tokenTypeId("NUMBER"), text2, text2, start, 0, this.line, startCol);
859
+ return new LexerToken("NUMBER", chunk5LI5EPGJ_cjs.tokenTypeId("NUMBER"), text2, text2, start, 0, this.line, startCol);
841
860
  }
842
861
  if (next === 111 || next === 79) {
843
862
  pos += 2;
@@ -846,7 +865,7 @@ var _ExpressionLexer = class _ExpressionLexer {
846
865
  }
847
866
  const text2 = input.slice(start, pos);
848
867
  this.pos = pos;
849
- return new LexerToken("NUMBER", chunkR24DI24X_cjs.tokenTypeId("NUMBER"), text2, text2, start, 0, this.line, startCol);
868
+ return new LexerToken("NUMBER", chunk5LI5EPGJ_cjs.tokenTypeId("NUMBER"), text2, text2, start, 0, this.line, startCol);
850
869
  }
851
870
  }
852
871
  let hasIntPart = false;
@@ -904,12 +923,12 @@ var _ExpressionLexer = class _ExpressionLexer {
904
923
  pos++;
905
924
  const text2 = input.slice(start, pos);
906
925
  this.pos = pos;
907
- return new LexerToken("BIGINT", chunkR24DI24X_cjs.tokenTypeId("BIGINT"), text2, text2, start, 0, this.line, startCol);
926
+ return new LexerToken("BIGINT", chunk5LI5EPGJ_cjs.tokenTypeId("BIGINT"), text2, text2, start, 0, this.line, startCol);
908
927
  }
909
928
  }
910
929
  const text = input.slice(start, pos);
911
930
  this.pos = pos;
912
- return new LexerToken("NUMBER", chunkR24DI24X_cjs.tokenTypeId("NUMBER"), text, text, start, 0, this.line, startCol);
931
+ return new LexerToken("NUMBER", chunk5LI5EPGJ_cjs.tokenTypeId("NUMBER"), text, text, start, 0, this.line, startCol);
913
932
  }
914
933
  // ── Inline identifier / keyword tokenizer ──────────────────────────────
915
934
  /**
@@ -932,7 +951,7 @@ var _ExpressionLexer = class _ExpressionLexer {
932
951
  cc >= 65 && cc <= 90 || // A-Z
933
952
  cc >= 97 && cc <= 122 || // a-z
934
953
  cc === 95 || // _
935
- cc >= 128)) {
954
+ cc >= 128 && !isUnicodeSpace(cc))) {
936
955
  pos++;
937
956
  }
938
957
  const identText = input.slice(start, pos);
@@ -941,22 +960,22 @@ var _ExpressionLexer = class _ExpressionLexer {
941
960
  pos++;
942
961
  this.pos = pos;
943
962
  const fullText = input.slice(start, pos);
944
- return new LexerToken("INLINE_SOLVE_START", chunkR24DI24X_cjs.tokenTypeId("INLINE_SOLVE_START"), fullText, fullText, start, 0, this.line, startCol);
963
+ return new LexerToken("INLINE_SOLVE_START", chunk5LI5EPGJ_cjs.tokenTypeId("INLINE_SOLVE_START"), fullText, fullText, start, 0, this.line, startCol);
945
964
  }
946
965
  const isKnownUnit = this.mergedUnits.has(identText);
947
966
  if (isKnownUnit) {
948
967
  if (!this.isFollowedByLParen(pos)) {
949
968
  this.pos = pos;
950
- return new LexerToken("UNIT", chunkR24DI24X_cjs.tokenTypeId("UNIT"), identText, identText, start, 0, this.line, startCol);
969
+ return new LexerToken("UNIT", chunk5LI5EPGJ_cjs.tokenTypeId("UNIT"), identText, identText, start, 0, this.line, startCol);
951
970
  }
952
971
  }
953
972
  const localeKwType = this.mergedKeywords.get(identLower);
954
973
  if (localeKwType) {
955
974
  this.pos = pos;
956
- return new LexerToken(localeKwType, chunkR24DI24X_cjs.tokenTypeId(localeKwType), identText, identText, start, 0, this.line, startCol);
975
+ return new LexerToken(localeKwType, chunk5LI5EPGJ_cjs.tokenTypeId(localeKwType), identText, identText, start, 0, this.line, startCol);
957
976
  }
958
977
  this.pos = pos;
959
- return new LexerToken("IDENT", chunkR24DI24X_cjs.tokenTypeId("IDENT"), identText, identText, start, 0, this.line, startCol);
978
+ return new LexerToken("IDENT", chunk5LI5EPGJ_cjs.tokenTypeId("IDENT"), identText, identText, start, 0, this.line, startCol);
960
979
  }
961
980
  /**
962
981
  * Peek past in-expression whitespace (space, tab) from `pos` to check
@@ -993,7 +1012,7 @@ var _ExpressionLexer = class _ExpressionLexer {
993
1012
  if (twoCharType) {
994
1013
  const text2 = input.slice(pos, pos + 2);
995
1014
  this.pos = pos + 2;
996
- return new LexerToken(twoCharType, chunkR24DI24X_cjs.tokenTypeId(twoCharType), text2, text2, pos, 0, this.line, col);
1015
+ return new LexerToken(twoCharType, chunk5LI5EPGJ_cjs.tokenTypeId(twoCharType), text2, text2, pos, 0, this.line, col);
997
1016
  }
998
1017
  }
999
1018
  if (c0 === 47 && c1 === 47) {
@@ -1005,19 +1024,19 @@ var _ExpressionLexer = class _ExpressionLexer {
1005
1024
  }
1006
1025
  const text2 = input.slice(pos, commentPos);
1007
1026
  this.pos = commentPos;
1008
- return new LexerToken("COMMENT", chunkR24DI24X_cjs.tokenTypeId("COMMENT"), text2, text2, pos, 0, this.line, col);
1027
+ return new LexerToken("COMMENT", chunk5LI5EPGJ_cjs.tokenTypeId("COMMENT"), text2, text2, pos, 0, this.line, col);
1009
1028
  }
1010
1029
  if (c0 === 60 && c1 === 60) {
1011
1030
  this.pos = pos + 2;
1012
- return new LexerToken("LSHIFT", chunkR24DI24X_cjs.tokenTypeId("LSHIFT"), "<<", "<<", pos, 0, this.line, col);
1031
+ return new LexerToken("LSHIFT", chunk5LI5EPGJ_cjs.tokenTypeId("LSHIFT"), "<<", "<<", pos, 0, this.line, col);
1013
1032
  }
1014
1033
  if (c0 === 62 && c1 === 62) {
1015
1034
  if (input.charCodeAt(pos + 2) === 62) {
1016
1035
  this.pos = pos + 3;
1017
- return new LexerToken("URSHIFT", chunkR24DI24X_cjs.tokenTypeId("URSHIFT"), ">>>", ">>>", pos, 0, this.line, col);
1036
+ return new LexerToken("URSHIFT", chunk5LI5EPGJ_cjs.tokenTypeId("URSHIFT"), ">>>", ">>>", pos, 0, this.line, col);
1018
1037
  }
1019
1038
  this.pos = pos + 2;
1020
- return new LexerToken("RSHIFT", chunkR24DI24X_cjs.tokenTypeId("RSHIFT"), ">>", ">>", pos, 0, this.line, col);
1039
+ return new LexerToken("RSHIFT", chunk5LI5EPGJ_cjs.tokenTypeId("RSHIFT"), ">>", ">>", pos, 0, this.line, col);
1021
1040
  }
1022
1041
  if (this.hasPluginOps) {
1023
1042
  const pluginInner = this.pluginOperators.get(c0);
@@ -1026,7 +1045,7 @@ var _ExpressionLexer = class _ExpressionLexer {
1026
1045
  if (pluginType) {
1027
1046
  const text2 = input.slice(pos, pos + 2);
1028
1047
  this.pos = pos + 2;
1029
- return new LexerToken(pluginType, chunkR24DI24X_cjs.tokenTypeId(pluginType), text2, text2, pos, 0, this.line, col);
1048
+ return new LexerToken(pluginType, chunk5LI5EPGJ_cjs.tokenTypeId(pluginType), text2, text2, pos, 0, this.line, col);
1030
1049
  }
1031
1050
  }
1032
1051
  }
@@ -1034,11 +1053,27 @@ var _ExpressionLexer = class _ExpressionLexer {
1034
1053
  this.pos = pos + 1;
1035
1054
  const opType = OP_MAP[c0];
1036
1055
  const text = input.charAt(pos);
1037
- return new LexerToken(opType || "ERROR", chunkR24DI24X_cjs.tokenTypeId(opType || "ERROR"), text, text, pos, 0, this.line, col);
1056
+ return new LexerToken(opType || "ERROR", chunk5LI5EPGJ_cjs.tokenTypeId(opType || "ERROR"), text, text, pos, 0, this.line, col);
1038
1057
  }
1039
1058
  // ── String literal tokenizer ──────────────────────────────────────────
1040
1059
  /**
1041
1060
  * Reads a double-quoted string literal. Supports backslash escapes.
1061
+ *
1062
+ * `text` is the raw source slice, quotes included, because that is what
1063
+ * `offset` + `text.length` has to span for a host to underline the literal.
1064
+ * `value` is the PAYLOAD, quotes excluded, because that is what
1065
+ * `PUSH_STRING` puts into the Value.
1066
+ *
1067
+ * The two used to be the same string. `"abc"` carried the five characters
1068
+ * `"abc"` as its value, which was invisible on screen (the formatter prints
1069
+ * the payload raw and the retained quotes landed where a display would have
1070
+ * put them back) and not invisible anywhere else: `parseFloat('"5"')` is NaN
1071
+ * whatever the digits say, so `"5" + 5` answered 5.
1072
+ *
1073
+ * An unterminated literal is an error rather than a string that happens to
1074
+ * reach the end of the line. It used to return what it had, so `"abc` and
1075
+ * `"abc"` were indistinguishable by payload once the quotes were stripped,
1076
+ * which is the other half of why they are stripped here rather than later.
1042
1077
  */
1043
1078
  tokenizeString() {
1044
1079
  const input = this.input;
@@ -1051,9 +1086,10 @@ var _ExpressionLexer = class _ExpressionLexer {
1051
1086
  const c0 = input.charCodeAt(pos);
1052
1087
  if (c0 === 34) {
1053
1088
  pos++;
1054
- const text2 = input.slice(start, pos);
1089
+ const text = input.slice(start, pos);
1090
+ const value = input.slice(start + 1, pos - 1);
1055
1091
  this.pos = pos;
1056
- return new LexerToken("STRING", chunkR24DI24X_cjs.tokenTypeId("STRING"), text2, text2, start, lineBreaks, this.line, startCol);
1092
+ return new LexerToken("STRING", chunk5LI5EPGJ_cjs.tokenTypeId("STRING"), value, text, start, lineBreaks, this.line, startCol);
1057
1093
  }
1058
1094
  if (c0 === 92 && pos + 1 < len) {
1059
1095
  pos += 2;
@@ -1066,9 +1102,12 @@ var _ExpressionLexer = class _ExpressionLexer {
1066
1102
  }
1067
1103
  pos++;
1068
1104
  }
1069
- const text = input.slice(start, pos);
1070
1105
  this.pos = pos;
1071
- return new LexerToken("STRING", chunkR24DI24X_cjs.tokenTypeId("STRING"), text, text, start, lineBreaks, this.line, startCol);
1106
+ throw chunk5KMIY374_cjs.ErrorFactory.parsing(
1107
+ "UNTERMINATED_STRING",
1108
+ `Unterminated string literal: ${input.slice(start, pos)}`,
1109
+ { literal: input.slice(start, pos), offset: start }
1110
+ );
1072
1111
  }
1073
1112
  // ── Markdown line scanner (Phase B) ───────────────────────────────────
1074
1113
  /**
@@ -1316,7 +1355,7 @@ var _ExpressionLexer = class _ExpressionLexer {
1316
1355
  }
1317
1356
  const text = input.slice(start, pos);
1318
1357
  this.pos = pos;
1319
- return new LexerToken("COMMENT", chunkR24DI24X_cjs.tokenTypeId("COMMENT"), text, text, start, 0, this.line, startCol);
1358
+ return new LexerToken("COMMENT", chunk5LI5EPGJ_cjs.tokenTypeId("COMMENT"), text, text, start, 0, this.line, startCol);
1320
1359
  }
1321
1360
  };
1322
1361
  _ExpressionLexer.CHAR_CLASS = buildCharClassTable();
@@ -1324,5 +1363,5 @@ var ExpressionLexer = _ExpressionLexer;
1324
1363
 
1325
1364
  exports.ExpressionLexer = ExpressionLexer;
1326
1365
  exports.LexerToken = LexerToken;
1327
- //# sourceMappingURL=chunk-M4F66R4O.cjs.map
1328
- //# sourceMappingURL=chunk-M4F66R4O.cjs.map
1366
+ //# sourceMappingURL=chunk-YWQ6V4ZN.cjs.map
1367
+ //# sourceMappingURL=chunk-YWQ6V4ZN.cjs.map