solve-engine 1.1.1 → 1.2.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 (188) hide show
  1. package/dist/{EngineError-B61GS1jp.d.cts → EngineError-CNA_rHY-.d.cts} +6 -0
  2. package/dist/{EngineError-B61GS1jp.d.ts → EngineError-CNA_rHY-.d.ts} +6 -0
  3. package/dist/{Lexer-BOs7euZe.d.cts → Lexer-B4C1qHXu.d.cts} +1 -1
  4. package/dist/{Lexer-CSI_lwbW.d.ts → Lexer-DKMlj7Sy.d.ts} +1 -1
  5. package/dist/{PackageCompatibility-B-7rK1TD.d.cts → PackageCompatibility-B6NX9IaN.d.cts} +1 -1
  6. package/dist/{PackageCompatibility-Dh59eF-X.d.ts → PackageCompatibility-Ceg5XdAp.d.ts} +1 -1
  7. package/dist/{PackageRegistry-BHWJP83F.d.cts → PackageRegistry-DnJYVw9G.d.cts} +55 -8
  8. package/dist/{PackageRegistry-_8rDlvxI.d.ts → PackageRegistry-DrCPQNyy.d.ts} +55 -8
  9. package/dist/{Parselet-BBT8riYh.d.ts → Parselet-Bhf7d0_W.d.ts} +2 -2
  10. package/dist/{Parselet-BHcgK9S7.d.cts → Parselet-Cv7S7KRt.d.cts} +2 -2
  11. package/dist/{ScopeManager-CxA24W5n.d.ts → ScopeManager-Bzq87GfA.d.ts} +10 -3
  12. package/dist/{ScopeManager-8vf02dwj.d.cts → ScopeManager-DRDBVfan.d.cts} +10 -3
  13. package/dist/{Token-B1hdkedD.d.cts → Token-CbP_OutD.d.cts} +9 -0
  14. package/dist/{Token-B1hdkedD.d.ts → Token-CbP_OutD.d.ts} +9 -0
  15. package/dist/{TokenNormalizer-C6VzZgHa.d.ts → TokenNormalizer-DCWdZjGz.d.ts} +1 -1
  16. package/dist/{TokenNormalizer-DRc1Js1V.d.cts → TokenNormalizer-DnlL7_8c.d.cts} +1 -1
  17. package/dist/{VMCheckpoints-MK--EBH2.d.ts → VMCheckpoints-C6c17Hbo.d.ts} +2 -2
  18. package/dist/{VMCheckpoints-ELYqITdF.d.cts → VMCheckpoints-dZxSMGHG.d.cts} +2 -2
  19. package/dist/{Value-BUi1RA3S.d.cts → Value-DZNQ_PU7.d.cts} +32 -5
  20. package/dist/{Value-BUi1RA3S.d.ts → Value-DZNQ_PU7.d.ts} +32 -5
  21. package/dist/{WorkerError-_-RkoQ5P.d.ts → WorkerError-B7t7R2-m.d.ts} +1 -1
  22. package/dist/{WorkerError-gzmaopj2.d.cts → WorkerError-Djd7GGGa.d.cts} +1 -1
  23. package/dist/{chunk-SSV46KFA.cjs → chunk-4K5W7EH2.cjs} +6 -6
  24. package/dist/{chunk-SSV46KFA.cjs.map → chunk-4K5W7EH2.cjs.map} +1 -1
  25. package/dist/{chunk-267JPOTF.js → chunk-5EFKSKMA.js} +11 -4
  26. package/dist/chunk-5EFKSKMA.js.map +1 -0
  27. package/dist/{chunk-536WPM2V.cjs → chunk-7AXJNQMF.cjs} +17 -3
  28. package/dist/chunk-7AXJNQMF.cjs.map +1 -0
  29. package/dist/{chunk-LHZ6VOA7.js → chunk-7JM3F4KL.js} +39 -8
  30. package/dist/chunk-7JM3F4KL.js.map +1 -0
  31. package/dist/{chunk-N5NNW4VG.cjs → chunk-7USV76HV.cjs} +6 -6
  32. package/dist/{chunk-N5NNW4VG.cjs.map → chunk-7USV76HV.cjs.map} +1 -1
  33. package/dist/{chunk-HIQ5HSZL.cjs → chunk-A2DZ5BEJ.cjs} +53 -46
  34. package/dist/{chunk-HIQ5HSZL.cjs.map → chunk-A2DZ5BEJ.cjs.map} +1 -1
  35. package/dist/{chunk-CKQMXMHR.cjs → chunk-AKNGX4TZ.cjs} +28 -11
  36. package/dist/chunk-AKNGX4TZ.cjs.map +1 -0
  37. package/dist/{chunk-I4GAWIPW.js → chunk-AOH6UR2L.js} +6 -6
  38. package/dist/{chunk-I4GAWIPW.js.map → chunk-AOH6UR2L.js.map} +1 -1
  39. package/dist/{chunk-T6ZYQJ63.cjs → chunk-BESTLPRK.cjs} +326 -214
  40. package/dist/chunk-BESTLPRK.cjs.map +1 -0
  41. package/dist/{chunk-Z7XGGLI2.js → chunk-BSPXMGIS.js} +3 -3
  42. package/dist/{chunk-Z7XGGLI2.js.map → chunk-BSPXMGIS.js.map} +1 -1
  43. package/dist/{chunk-SRGQ72IR.cjs → chunk-C2OMO3WN.cjs} +376 -370
  44. package/dist/chunk-C2OMO3WN.cjs.map +1 -0
  45. package/dist/{chunk-GLA4JXBO.js → chunk-CSDQMDU2.js} +4 -4
  46. package/dist/{chunk-GLA4JXBO.js.map → chunk-CSDQMDU2.js.map} +1 -1
  47. package/dist/{chunk-7KYSUDQO.js → chunk-F4UB4XIL.js} +4 -4
  48. package/dist/{chunk-7KYSUDQO.js.map → chunk-F4UB4XIL.js.map} +1 -1
  49. package/dist/{chunk-WXEHD6TT.js → chunk-FE4RC37D.js} +15 -9
  50. package/dist/chunk-FE4RC37D.js.map +1 -0
  51. package/dist/{chunk-7ZX6B7SY.cjs → chunk-FR7RNOPT.cjs} +637 -556
  52. package/dist/chunk-FR7RNOPT.cjs.map +1 -0
  53. package/dist/{chunk-QFTDTX6K.cjs → chunk-G2YPPLGX.cjs} +29 -2
  54. package/dist/chunk-G2YPPLGX.cjs.map +1 -0
  55. package/dist/{chunk-HVRVSI2Z.cjs → chunk-GDEU72RG.cjs} +86 -86
  56. package/dist/{chunk-HVRVSI2Z.cjs.map → chunk-GDEU72RG.cjs.map} +1 -1
  57. package/dist/{chunk-MN3LHRGV.cjs → chunk-HKTQCQ4Z.cjs} +860 -489
  58. package/dist/chunk-HKTQCQ4Z.cjs.map +1 -0
  59. package/dist/{chunk-XA4CKRML.cjs → chunk-HWHU642X.cjs} +2 -2
  60. package/dist/{chunk-XA4CKRML.cjs.map → chunk-HWHU642X.cjs.map} +1 -1
  61. package/dist/{chunk-CUR2WLI4.cjs → chunk-ICEKS6YC.cjs} +11 -11
  62. package/dist/{chunk-CUR2WLI4.cjs.map → chunk-ICEKS6YC.cjs.map} +1 -1
  63. package/dist/{chunk-NNZAEUDW.js → chunk-IJGOFP2J.js} +138 -26
  64. package/dist/chunk-IJGOFP2J.js.map +1 -0
  65. package/dist/{chunk-ENKKJYD3.js → chunk-IQJGDZOP.js} +4 -4
  66. package/dist/{chunk-ENKKJYD3.js.map → chunk-IQJGDZOP.js.map} +1 -1
  67. package/dist/{chunk-2TZKENDH.cjs → chunk-IT74O4BE.cjs} +15 -7
  68. package/dist/chunk-IT74O4BE.cjs.map +1 -0
  69. package/dist/{chunk-ZVTWQLK4.cjs → chunk-KXDQKVNX.cjs} +10 -10
  70. package/dist/{chunk-ZVTWQLK4.cjs.map → chunk-KXDQKVNX.cjs.map} +1 -1
  71. package/dist/{chunk-BYJBUL7U.js → chunk-L5YHV6BQ.js} +5 -5
  72. package/dist/{chunk-BYJBUL7U.js.map → chunk-L5YHV6BQ.js.map} +1 -1
  73. package/dist/{chunk-E23GZEWL.cjs → chunk-LO7HU5WB.cjs} +8 -8
  74. package/dist/{chunk-E23GZEWL.cjs.map → chunk-LO7HU5WB.cjs.map} +1 -1
  75. package/dist/{chunk-UO6BUV6K.js → chunk-LSALB3IN.js} +17 -3
  76. package/dist/chunk-LSALB3IN.js.map +1 -0
  77. package/dist/{chunk-J45BCEZ4.cjs → chunk-MI7OTUHL.cjs} +27 -27
  78. package/dist/{chunk-J45BCEZ4.cjs.map → chunk-MI7OTUHL.cjs.map} +1 -1
  79. package/dist/{chunk-B4HBEFTB.cjs → chunk-MIGXCBXT.cjs} +8 -2
  80. package/dist/chunk-MIGXCBXT.cjs.map +1 -0
  81. package/dist/{chunk-ERCOHGXD.js → chunk-N7OA4WPJ.js} +8 -2
  82. package/dist/chunk-N7OA4WPJ.js.map +1 -0
  83. package/dist/{chunk-4D6NIHE2.js → chunk-NAWZATKT.js} +29 -2
  84. package/dist/chunk-NAWZATKT.js.map +1 -0
  85. package/dist/{chunk-JG6ZJ2WU.js → chunk-ORM7CHYZ.js} +23 -5
  86. package/dist/chunk-ORM7CHYZ.js.map +1 -0
  87. package/dist/{chunk-B7NLZMQ3.cjs → chunk-PCZVMMWU.cjs} +8 -8
  88. package/dist/{chunk-B7NLZMQ3.cjs.map → chunk-PCZVMMWU.cjs.map} +1 -1
  89. package/dist/{chunk-DLEBSLF4.js → chunk-RNKDIXDV.js} +4 -4
  90. package/dist/{chunk-DLEBSLF4.js.map → chunk-RNKDIXDV.js.map} +1 -1
  91. package/dist/{chunk-YRIKITGF.cjs → chunk-TC6BTUSU.cjs} +55 -24
  92. package/dist/chunk-TC6BTUSU.cjs.map +1 -0
  93. package/dist/{chunk-4HQKTMWG.js → chunk-TPOK3UNI.js} +387 -17
  94. package/dist/chunk-TPOK3UNI.js.map +1 -0
  95. package/dist/{chunk-CCBZZQAE.js → chunk-UF6JG5SG.js} +2 -2
  96. package/dist/{chunk-CCBZZQAE.js.map → chunk-UF6JG5SG.js.map} +1 -1
  97. package/dist/{chunk-NKW7LKYU.js → chunk-WMQRJTAO.js} +88 -7
  98. package/dist/chunk-WMQRJTAO.js.map +1 -0
  99. package/dist/{chunk-ZMW6NU2K.cjs → chunk-YJHY7CMN.cjs} +95 -77
  100. package/dist/chunk-YJHY7CMN.cjs.map +1 -0
  101. package/dist/{chunk-3OWCDIPN.js → chunk-YNIWOYW6.js} +21 -4
  102. package/dist/chunk-YNIWOYW6.js.map +1 -0
  103. package/dist/{chunk-WWQEY7BV.js → chunk-ZN6YYPIW.js} +3 -3
  104. package/dist/{chunk-WWQEY7BV.js.map → chunk-ZN6YYPIW.js.map} +1 -1
  105. package/dist/{chunk-NNQ2TYDF.js → chunk-ZNFFTYWH.js} +11 -5
  106. package/dist/chunk-ZNFFTYWH.js.map +1 -0
  107. package/dist/constants.cjs +5 -5
  108. package/dist/constants.js +2 -2
  109. package/dist/engine.cjs +33 -33
  110. package/dist/engine.d.cts +27 -11
  111. package/dist/engine.d.ts +27 -11
  112. package/dist/engine.js +20 -20
  113. package/dist/errors.cjs +26 -26
  114. package/dist/errors.d.cts +3 -3
  115. package/dist/errors.d.ts +3 -3
  116. package/dist/errors.js +2 -2
  117. package/dist/format.cjs +7 -7
  118. package/dist/format.d.cts +1 -1
  119. package/dist/format.d.ts +1 -1
  120. package/dist/format.js +4 -4
  121. package/dist/index.cjs +48 -48
  122. package/dist/index.d.cts +11 -11
  123. package/dist/index.d.ts +11 -11
  124. package/dist/index.js +21 -21
  125. package/dist/language.cjs +7 -7
  126. package/dist/language.d.cts +10 -10
  127. package/dist/language.d.ts +10 -10
  128. package/dist/language.js +2 -2
  129. package/dist/lexer.cjs +16 -16
  130. package/dist/lexer.d.cts +3 -3
  131. package/dist/lexer.d.ts +3 -3
  132. package/dist/lexer.js +5 -5
  133. package/dist/normalizer.cjs +10 -10
  134. package/dist/normalizer.d.cts +3 -3
  135. package/dist/normalizer.d.ts +3 -3
  136. package/dist/normalizer.js +4 -4
  137. package/dist/packages.cjs +40 -36
  138. package/dist/packages.d.cts +37 -11
  139. package/dist/packages.d.ts +37 -11
  140. package/dist/packages.js +11 -11
  141. package/dist/parser.cjs +13 -13
  142. package/dist/parser.d.cts +4 -4
  143. package/dist/parser.d.ts +4 -4
  144. package/dist/parser.js +5 -5
  145. package/dist/{pipeline-DCd5M6Gk.d.ts → pipeline-D-PS9gVw.d.ts} +3 -3
  146. package/dist/{pipeline-CtfJtPQc.d.cts → pipeline-DtSBJ8TS.d.cts} +3 -3
  147. package/dist/resolvers.d.cts +2 -2
  148. package/dist/resolvers.d.ts +2 -2
  149. package/dist/testing.cjs +26 -26
  150. package/dist/testing.d.cts +10 -10
  151. package/dist/testing.d.ts +10 -10
  152. package/dist/testing.js +19 -19
  153. package/dist/uom.cjs +8 -8
  154. package/dist/uom.d.cts +2 -2
  155. package/dist/uom.d.ts +2 -2
  156. package/dist/uom.js +4 -4
  157. package/dist/vm.cjs +32 -32
  158. package/dist/vm.d.cts +7 -7
  159. package/dist/vm.d.ts +7 -7
  160. package/dist/vm.js +7 -7
  161. package/dist/worker.cjs +38 -38
  162. package/dist/worker.d.cts +10 -10
  163. package/dist/worker.d.ts +10 -10
  164. package/dist/worker.js +20 -20
  165. package/package.json +1 -1
  166. package/dist/chunk-267JPOTF.js.map +0 -1
  167. package/dist/chunk-2TZKENDH.cjs.map +0 -1
  168. package/dist/chunk-3OWCDIPN.js.map +0 -1
  169. package/dist/chunk-4D6NIHE2.js.map +0 -1
  170. package/dist/chunk-4HQKTMWG.js.map +0 -1
  171. package/dist/chunk-536WPM2V.cjs.map +0 -1
  172. package/dist/chunk-7ZX6B7SY.cjs.map +0 -1
  173. package/dist/chunk-B4HBEFTB.cjs.map +0 -1
  174. package/dist/chunk-CKQMXMHR.cjs.map +0 -1
  175. package/dist/chunk-ERCOHGXD.js.map +0 -1
  176. package/dist/chunk-JG6ZJ2WU.js.map +0 -1
  177. package/dist/chunk-LHZ6VOA7.js.map +0 -1
  178. package/dist/chunk-MN3LHRGV.cjs.map +0 -1
  179. package/dist/chunk-NKW7LKYU.js.map +0 -1
  180. package/dist/chunk-NNQ2TYDF.js.map +0 -1
  181. package/dist/chunk-NNZAEUDW.js.map +0 -1
  182. package/dist/chunk-QFTDTX6K.cjs.map +0 -1
  183. package/dist/chunk-SRGQ72IR.cjs.map +0 -1
  184. package/dist/chunk-T6ZYQJ63.cjs.map +0 -1
  185. package/dist/chunk-UO6BUV6K.js.map +0 -1
  186. package/dist/chunk-WXEHD6TT.js.map +0 -1
  187. package/dist/chunk-YRIKITGF.cjs.map +0 -1
  188. package/dist/chunk-ZMW6NU2K.cjs.map +0 -1
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunkQFTDTX6K_cjs = require('./chunk-QFTDTX6K.cjs');
3
+ var chunkG2YPPLGX_cjs = require('./chunk-G2YPPLGX.cjs');
4
4
  var chunkOUHT5Z36_cjs = require('./chunk-OUHT5Z36.cjs');
5
5
  var chunkAQNHHJMJ_cjs = require('./chunk-AQNHHJMJ.cjs');
6
- var chunkB4HBEFTB_cjs = require('./chunk-B4HBEFTB.cjs');
6
+ var chunkMIGXCBXT_cjs = require('./chunk-MIGXCBXT.cjs');
7
7
 
8
8
  // src/lexer/ExpressionLexer.ts
9
- chunkQFTDTX6K_cjs.registerAllTokenTypes();
9
+ chunkG2YPPLGX_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 */;
@@ -85,8 +85,12 @@ var TWO_CHAR_OPS = {
85
85
  // <=
86
86
  38: { 38: "LOGICAL_AND" },
87
87
  // &&
88
- 124: { 124: "LOGICAL_OR" }
88
+ 124: { 124: "LOGICAL_OR" },
89
89
  // ||
90
+ 43: { 61: "PLUS_EQUALS" },
91
+ // += (compound assignment, running totals)
92
+ 45: { 61: "MINUS_EQUALS" }
93
+ // -= (neither + nor - had a two-char op before)
90
94
  // Note: ** is NOT a single token, the existing moo lexer emits two
91
95
  // separate STAR tokens, and the parser consumes them that way.
92
96
  // 42: { 42: 'EXPONENT' }, // **, disabled for moo compatibility
@@ -243,7 +247,7 @@ var _ExpressionLexer = class _ExpressionLexer {
243
247
  if (m && typeof m[1] === "string") {
244
248
  const value = m[1].trim();
245
249
  if (value.length > 0) {
246
- return new LexerToken(rule.tokenType, chunkQFTDTX6K_cjs.tokenTypeId(rule.tokenType), value, value, 0, 0, this.line, 1);
250
+ return new LexerToken(rule.tokenType, chunkG2YPPLGX_cjs.tokenTypeId(rule.tokenType), value, value, 0, 0, this.line, 1);
247
251
  }
248
252
  }
249
253
  }
@@ -273,7 +277,7 @@ var _ExpressionLexer = class _ExpressionLexer {
273
277
  for (const [keyword, tokenType] of Object.entries(plugin.keywords)) {
274
278
  const lower = keyword.toLowerCase();
275
279
  if (this.keywordMap.has(lower)) {
276
- throw chunkB4HBEFTB_cjs.ErrorFactory.config(
280
+ throw chunkMIGXCBXT_cjs.ErrorFactory.config(
277
281
  "PLUGIN_KEYWORD_COLLISION",
278
282
  `Plugin keyword "${keyword}" conflicts with built-in keyword (type: ${this.keywordMap.get(lower)}). Built-in keywords cannot be overridden.`,
279
283
  { keyword, builtinType: this.keywordMap.get(lower) }
@@ -291,28 +295,28 @@ var _ExpressionLexer = class _ExpressionLexer {
291
295
  const second = chars.charCodeAt(1);
292
296
  const builtInSecondMap = TWO_CHAR_OPS[first];
293
297
  if (builtInSecondMap && builtInSecondMap[second] !== void 0) {
294
- throw chunkB4HBEFTB_cjs.ErrorFactory.config(
298
+ throw chunkMIGXCBXT_cjs.ErrorFactory.config(
295
299
  "PLUGIN_OPERATOR_COLLISION",
296
300
  `Plugin operator "${chars}" conflicts with built-in operator (type: ${builtInSecondMap[second]}). Built-in operators cannot be overridden.`,
297
301
  { operator: chars, builtinType: builtInSecondMap[second] }
298
302
  );
299
303
  }
300
304
  if (first === 60 && second === 60) {
301
- throw chunkB4HBEFTB_cjs.ErrorFactory.config(
305
+ throw chunkMIGXCBXT_cjs.ErrorFactory.config(
302
306
  "PLUGIN_OPERATOR_COLLISION",
303
307
  `Plugin operator "${chars}" conflicts with built-in operator (type: LSHIFT). Built-in operators cannot be overridden.`,
304
308
  { operator: chars, builtinType: "LSHIFT" }
305
309
  );
306
310
  }
307
311
  if (first === 62 && second === 62) {
308
- throw chunkB4HBEFTB_cjs.ErrorFactory.config(
312
+ throw chunkMIGXCBXT_cjs.ErrorFactory.config(
309
313
  "PLUGIN_OPERATOR_COLLISION",
310
314
  `Plugin operator "${chars}" conflicts with built-in operator (type: RSHIFT). Built-in operators cannot be overridden.`,
311
315
  { operator: chars, builtinType: "RSHIFT" }
312
316
  );
313
317
  }
314
318
  if (first === 47 && second === 47) {
315
- throw chunkB4HBEFTB_cjs.ErrorFactory.config(
319
+ throw chunkMIGXCBXT_cjs.ErrorFactory.config(
316
320
  "PLUGIN_OPERATOR_COLLISION",
317
321
  `Plugin operator "${chars}" conflicts with built-in comment sequence. Comment sequences cannot be overridden.`,
318
322
  { operator: chars, builtinType: "COMMENT" }
@@ -330,7 +334,7 @@ var _ExpressionLexer = class _ExpressionLexer {
330
334
  if (plugin.units) {
331
335
  for (const unit of plugin.units) {
332
336
  if (chunkAQNHHJMJ_cjs.knownUnits.has(unit)) {
333
- throw chunkB4HBEFTB_cjs.ErrorFactory.config(
337
+ throw chunkMIGXCBXT_cjs.ErrorFactory.config(
334
338
  "PLUGIN_UNIT_COLLISION",
335
339
  `Plugin unit "${unit}" conflicts with a built-in unit. Built-in units cannot be overridden.`,
336
340
  { unit }
@@ -551,20 +555,20 @@ var _ExpressionLexer = class _ExpressionLexer {
551
555
  switch (cc) {
552
556
  case 2 /* DIGIT */:
553
557
  case 4 /* DOT */:
554
- yield new LexerToken("NUMBER", chunkQFTDTX6K_cjs.tokenTypeId("NUMBER"), this.input, this.input, 0, 0, 1, 1);
558
+ yield new LexerToken("NUMBER", chunkG2YPPLGX_cjs.tokenTypeId("NUMBER"), this.input, this.input, 0, 0, 1, 1);
555
559
  tokenIndex++;
556
560
  break;
557
561
  case 3 /* ALPHA */: {
558
562
  const input2 = this.input;
559
563
  const identLower = input2.toLowerCase();
560
564
  if (this.mergedUnits.has(input2)) {
561
- yield new LexerToken("UNIT", chunkQFTDTX6K_cjs.tokenTypeId("UNIT"), input2, input2, 0, 0, 1, 1);
565
+ yield new LexerToken("UNIT", chunkG2YPPLGX_cjs.tokenTypeId("UNIT"), input2, input2, 0, 0, 1, 1);
562
566
  } else {
563
567
  const kwType = this.mergedKeywords.get(identLower);
564
568
  if (kwType) {
565
- yield new LexerToken(kwType, chunkQFTDTX6K_cjs.tokenTypeId(kwType), input2, input2, 0, 0, 1, 1);
569
+ yield new LexerToken(kwType, chunkG2YPPLGX_cjs.tokenTypeId(kwType), input2, input2, 0, 0, 1, 1);
566
570
  } else {
567
- yield new LexerToken("IDENT", chunkQFTDTX6K_cjs.tokenTypeId("IDENT"), input2, input2, 0, 0, 1, 1);
571
+ yield new LexerToken("IDENT", chunkG2YPPLGX_cjs.tokenTypeId("IDENT"), input2, input2, 0, 0, 1, 1);
568
572
  }
569
573
  }
570
574
  tokenIndex++;
@@ -573,7 +577,7 @@ var _ExpressionLexer = class _ExpressionLexer {
573
577
  case 5 /* OPERATOR */: {
574
578
  const opType = OP_MAP[c0];
575
579
  if (opType) {
576
- yield new LexerToken(opType, chunkQFTDTX6K_cjs.tokenTypeId(opType), this.input, this.input, 0, 0, 1, 1);
580
+ yield new LexerToken(opType, chunkG2YPPLGX_cjs.tokenTypeId(opType), this.input, this.input, 0, 0, 1, 1);
577
581
  tokenIndex++;
578
582
  }
579
583
  break;
@@ -589,64 +593,64 @@ var _ExpressionLexer = class _ExpressionLexer {
589
593
  tokenIndex++;
590
594
  break;
591
595
  case 8 /* DOLLAR */:
592
- yield new LexerToken("DOLLAR", chunkQFTDTX6K_cjs.tokenTypeId("DOLLAR"), "$", "$", 0, 0, 1, 1);
596
+ yield new LexerToken("DOLLAR", chunkG2YPPLGX_cjs.tokenTypeId("DOLLAR"), "$", "$", 0, 0, 1, 1);
593
597
  tokenIndex++;
594
598
  break;
595
599
  case 11 /* BACKTICK */:
596
- yield new LexerToken("BACKTICK_OPEN", chunkQFTDTX6K_cjs.tokenTypeId("BACKTICK_OPEN"), "`", "`", 0, 0, 1, 1);
600
+ yield new LexerToken("BACKTICK_OPEN", chunkG2YPPLGX_cjs.tokenTypeId("BACKTICK_OPEN"), "`", "`", 0, 0, 1, 1);
597
601
  tokenIndex++;
598
602
  break;
599
603
  default: {
600
604
  if (isUnicodeSpace(c0)) ; else if (c0 === 215) {
601
- yield new LexerToken("STAR", chunkQFTDTX6K_cjs.tokenTypeId("STAR"), "\xD7", "\xD7", 0, 0, 1, 1);
605
+ yield new LexerToken("STAR", chunkG2YPPLGX_cjs.tokenTypeId("STAR"), "\xD7", "\xD7", 0, 0, 1, 1);
602
606
  tokenIndex++;
603
607
  } else if (c0 === 247) {
604
- yield new LexerToken("SLASH", chunkQFTDTX6K_cjs.tokenTypeId("SLASH"), "\xF7", "\xF7", 0, 0, 1, 1);
608
+ yield new LexerToken("SLASH", chunkG2YPPLGX_cjs.tokenTypeId("SLASH"), "\xF7", "\xF7", 0, 0, 1, 1);
605
609
  tokenIndex++;
606
610
  } else if (c0 === 177) {
607
- yield new LexerToken("PLUS_MINUS", chunkQFTDTX6K_cjs.tokenTypeId("PLUS_MINUS"), "\xB1", "\xB1", 0, 0, 1, 1);
611
+ yield new LexerToken("PLUS_MINUS", chunkG2YPPLGX_cjs.tokenTypeId("PLUS_MINUS"), "\xB1", "\xB1", 0, 0, 1, 1);
608
612
  tokenIndex++;
609
613
  } else if (c0 === 8800) {
610
- yield new LexerToken("NEQ", chunkQFTDTX6K_cjs.tokenTypeId("NEQ"), "\u2260", "\u2260", 0, 0, 1, 1);
614
+ yield new LexerToken("NEQ", chunkG2YPPLGX_cjs.tokenTypeId("NEQ"), "\u2260", "\u2260", 0, 0, 1, 1);
611
615
  tokenIndex++;
612
616
  } else if (c0 === 163) {
613
- yield new LexerToken("POUND", chunkQFTDTX6K_cjs.tokenTypeId("POUND"), "\xA3", "\xA3", 0, 0, 1, 1);
617
+ yield new LexerToken("POUND", chunkG2YPPLGX_cjs.tokenTypeId("POUND"), "\xA3", "\xA3", 0, 0, 1, 1);
614
618
  tokenIndex++;
615
619
  } else if (c0 === 8364) {
616
- yield new LexerToken("EURO", chunkQFTDTX6K_cjs.tokenTypeId("EURO"), "\u20AC", "\u20AC", 0, 0, 1, 1);
620
+ yield new LexerToken("EURO", chunkG2YPPLGX_cjs.tokenTypeId("EURO"), "\u20AC", "\u20AC", 0, 0, 1, 1);
617
621
  tokenIndex++;
618
622
  } else if (c0 === 165) {
619
- yield new LexerToken("YEN", chunkQFTDTX6K_cjs.tokenTypeId("YEN"), "\xA5", "\xA5", 0, 0, 1, 1);
623
+ yield new LexerToken("YEN", chunkG2YPPLGX_cjs.tokenTypeId("YEN"), "\xA5", "\xA5", 0, 0, 1, 1);
620
624
  tokenIndex++;
621
625
  } else if (c0 === 8381) {
622
- yield new LexerToken("RUBLE", chunkQFTDTX6K_cjs.tokenTypeId("RUBLE"), "\u20BD", "\u20BD", 0, 0, 1, 1);
626
+ yield new LexerToken("RUBLE", chunkG2YPPLGX_cjs.tokenTypeId("RUBLE"), "\u20BD", "\u20BD", 0, 0, 1, 1);
623
627
  tokenIndex++;
624
628
  } else if (c0 === 8361) {
625
- yield new LexerToken("WON", chunkQFTDTX6K_cjs.tokenTypeId("WON"), "\u20A9", "\u20A9", 0, 0, 1, 1);
629
+ yield new LexerToken("WON", chunkG2YPPLGX_cjs.tokenTypeId("WON"), "\u20A9", "\u20A9", 0, 0, 1, 1);
626
630
  tokenIndex++;
627
631
  } else if (c0 === 8377) {
628
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B9", "\u20B9", 0, 0, 1, 1);
632
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B9", "\u20B9", 0, 0, 1, 1);
629
633
  tokenIndex++;
630
634
  } else if (c0 === 8378) {
631
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20BA", "\u20BA", 0, 0, 1, 1);
635
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20BA", "\u20BA", 0, 0, 1, 1);
632
636
  tokenIndex++;
633
637
  } else if (c0 === 8372) {
634
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B4", "\u20B4", 0, 0, 1, 1);
638
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B4", "\u20B4", 0, 0, 1, 1);
635
639
  tokenIndex++;
636
640
  } else if (c0 === 8362) {
637
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AA", "\u20AA", 0, 0, 1, 1);
641
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AA", "\u20AA", 0, 0, 1, 1);
638
642
  tokenIndex++;
639
643
  } else if (c0 === 8363) {
640
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AB", "\u20AB", 0, 0, 1, 1);
644
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AB", "\u20AB", 0, 0, 1, 1);
641
645
  tokenIndex++;
642
646
  } else if (c0 === 8358) {
643
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20A6", "\u20A6", 0, 0, 1, 1);
647
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20A6", "\u20A6", 0, 0, 1, 1);
644
648
  tokenIndex++;
645
649
  } else if (c0 === 8369) {
646
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B1", "\u20B1", 0, 0, 1, 1);
650
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B1", "\u20B1", 0, 0, 1, 1);
647
651
  tokenIndex++;
648
652
  } else if (c0 >= 128) {
649
- yield new LexerToken("IDENT", chunkQFTDTX6K_cjs.tokenTypeId("IDENT"), this.input, this.input, 0, 0, 1, 1);
653
+ yield new LexerToken("IDENT", chunkG2YPPLGX_cjs.tokenTypeId("IDENT"), this.input, this.input, 0, 0, 1, 1);
650
654
  tokenIndex++;
651
655
  }
652
656
  break;
@@ -704,12 +708,12 @@ var _ExpressionLexer = class _ExpressionLexer {
704
708
  yield this.tokenizeNumber();
705
709
  } else {
706
710
  const col = this.pos - this.lineStartPos + 1;
707
- yield new LexerToken("DOT", chunkQFTDTX6K_cjs.tokenTypeId("DOT"), ".", ".", this.pos, 0, this.line, col);
711
+ yield new LexerToken("DOT", chunkG2YPPLGX_cjs.tokenTypeId("DOT"), ".", ".", this.pos, 0, this.line, col);
708
712
  this.pos++;
709
713
  }
710
714
  } else {
711
715
  const col = this.pos - this.lineStartPos + 1;
712
- yield new LexerToken("DOT", chunkQFTDTX6K_cjs.tokenTypeId("DOT"), ".", ".", this.pos, 0, this.line, col);
716
+ yield new LexerToken("DOT", chunkG2YPPLGX_cjs.tokenTypeId("DOT"), ".", ".", this.pos, 0, this.line, col);
713
717
  this.pos++;
714
718
  }
715
719
  tokenIndex++;
@@ -732,7 +736,7 @@ var _ExpressionLexer = class _ExpressionLexer {
732
736
  // ── Dollar sign $ ─────────────────────────────────────────────
733
737
  case 8 /* DOLLAR */: {
734
738
  const col = this.pos - this.lineStartPos + 1;
735
- yield new LexerToken("DOLLAR", chunkQFTDTX6K_cjs.tokenTypeId("DOLLAR"), "$", "$", this.pos, 0, this.line, col);
739
+ yield new LexerToken("DOLLAR", chunkG2YPPLGX_cjs.tokenTypeId("DOLLAR"), "$", "$", this.pos, 0, this.line, col);
736
740
  this.pos++;
737
741
  tokenIndex++;
738
742
  break;
@@ -740,7 +744,7 @@ var _ExpressionLexer = class _ExpressionLexer {
740
744
  // ── Backtick ` ───────────────────────────────────────────────
741
745
  case 11 /* BACKTICK */: {
742
746
  const col = this.pos - this.lineStartPos + 1;
743
- yield new LexerToken("BACKTICK_OPEN", chunkQFTDTX6K_cjs.tokenTypeId("BACKTICK_OPEN"), "`", "`", this.pos, 0, this.line, col);
747
+ yield new LexerToken("BACKTICK_OPEN", chunkG2YPPLGX_cjs.tokenTypeId("BACKTICK_OPEN"), "`", "`", this.pos, 0, this.line, col);
744
748
  this.pos++;
745
749
  if (openSpan) {
746
750
  const span = openSpan;
@@ -767,67 +771,67 @@ var _ExpressionLexer = class _ExpressionLexer {
767
771
  this.lineStartPos = this.pos;
768
772
  }
769
773
  } else if (c0 === 215) {
770
- yield new LexerToken("STAR", chunkQFTDTX6K_cjs.tokenTypeId("STAR"), "\xD7", "\xD7", this.pos, 0, this.line, col);
774
+ yield new LexerToken("STAR", chunkG2YPPLGX_cjs.tokenTypeId("STAR"), "\xD7", "\xD7", this.pos, 0, this.line, col);
771
775
  this.pos++;
772
776
  tokenIndex++;
773
777
  } else if (c0 === 247) {
774
- yield new LexerToken("SLASH", chunkQFTDTX6K_cjs.tokenTypeId("SLASH"), "\xF7", "\xF7", this.pos, 0, this.line, col);
778
+ yield new LexerToken("SLASH", chunkG2YPPLGX_cjs.tokenTypeId("SLASH"), "\xF7", "\xF7", this.pos, 0, this.line, col);
775
779
  this.pos++;
776
780
  tokenIndex++;
777
781
  } else if (c0 === 177) {
778
- yield new LexerToken("PLUS_MINUS", chunkQFTDTX6K_cjs.tokenTypeId("PLUS_MINUS"), "\xB1", "\xB1", this.pos, 0, this.line, col);
782
+ yield new LexerToken("PLUS_MINUS", chunkG2YPPLGX_cjs.tokenTypeId("PLUS_MINUS"), "\xB1", "\xB1", this.pos, 0, this.line, col);
779
783
  this.pos++;
780
784
  tokenIndex++;
781
785
  } else if (c0 === 8800) {
782
- yield new LexerToken("NEQ", chunkQFTDTX6K_cjs.tokenTypeId("NEQ"), "\u2260", "\u2260", this.pos, 0, this.line, col);
786
+ yield new LexerToken("NEQ", chunkG2YPPLGX_cjs.tokenTypeId("NEQ"), "\u2260", "\u2260", this.pos, 0, this.line, col);
783
787
  this.pos++;
784
788
  tokenIndex++;
785
789
  } else if (c0 === 163) {
786
- yield new LexerToken("POUND", chunkQFTDTX6K_cjs.tokenTypeId("POUND"), "\xA3", "\xA3", this.pos, 0, this.line, col);
790
+ yield new LexerToken("POUND", chunkG2YPPLGX_cjs.tokenTypeId("POUND"), "\xA3", "\xA3", this.pos, 0, this.line, col);
787
791
  this.pos++;
788
792
  tokenIndex++;
789
793
  } else if (c0 === 8364) {
790
- yield new LexerToken("EURO", chunkQFTDTX6K_cjs.tokenTypeId("EURO"), "\u20AC", "\u20AC", this.pos, 0, this.line, col);
794
+ yield new LexerToken("EURO", chunkG2YPPLGX_cjs.tokenTypeId("EURO"), "\u20AC", "\u20AC", this.pos, 0, this.line, col);
791
795
  this.pos++;
792
796
  tokenIndex++;
793
797
  } else if (c0 === 165) {
794
- yield new LexerToken("YEN", chunkQFTDTX6K_cjs.tokenTypeId("YEN"), "\xA5", "\xA5", this.pos, 0, this.line, col);
798
+ yield new LexerToken("YEN", chunkG2YPPLGX_cjs.tokenTypeId("YEN"), "\xA5", "\xA5", this.pos, 0, this.line, col);
795
799
  this.pos++;
796
800
  tokenIndex++;
797
801
  } else if (c0 === 8381) {
798
- yield new LexerToken("RUBLE", chunkQFTDTX6K_cjs.tokenTypeId("RUBLE"), "\u20BD", "\u20BD", this.pos, 0, this.line, col);
802
+ yield new LexerToken("RUBLE", chunkG2YPPLGX_cjs.tokenTypeId("RUBLE"), "\u20BD", "\u20BD", this.pos, 0, this.line, col);
799
803
  this.pos++;
800
804
  tokenIndex++;
801
805
  } else if (c0 === 8361) {
802
- yield new LexerToken("WON", chunkQFTDTX6K_cjs.tokenTypeId("WON"), "\u20A9", "\u20A9", this.pos, 0, this.line, col);
806
+ yield new LexerToken("WON", chunkG2YPPLGX_cjs.tokenTypeId("WON"), "\u20A9", "\u20A9", this.pos, 0, this.line, col);
803
807
  this.pos++;
804
808
  tokenIndex++;
805
809
  } else if (c0 === 8377) {
806
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B9", "\u20B9", this.pos, 0, this.line, col);
810
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B9", "\u20B9", this.pos, 0, this.line, col);
807
811
  this.pos++;
808
812
  tokenIndex++;
809
813
  } else if (c0 === 8378) {
810
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20BA", "\u20BA", this.pos, 0, this.line, col);
814
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20BA", "\u20BA", this.pos, 0, this.line, col);
811
815
  this.pos++;
812
816
  tokenIndex++;
813
817
  } else if (c0 === 8372) {
814
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B4", "\u20B4", this.pos, 0, this.line, col);
818
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B4", "\u20B4", this.pos, 0, this.line, col);
815
819
  this.pos++;
816
820
  tokenIndex++;
817
821
  } else if (c0 === 8362) {
818
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AA", "\u20AA", this.pos, 0, this.line, col);
822
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AA", "\u20AA", this.pos, 0, this.line, col);
819
823
  this.pos++;
820
824
  tokenIndex++;
821
825
  } else if (c0 === 8363) {
822
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AB", "\u20AB", this.pos, 0, this.line, col);
826
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20AB", "\u20AB", this.pos, 0, this.line, col);
823
827
  this.pos++;
824
828
  tokenIndex++;
825
829
  } else if (c0 === 8358) {
826
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20A6", "\u20A6", this.pos, 0, this.line, col);
830
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20A6", "\u20A6", this.pos, 0, this.line, col);
827
831
  this.pos++;
828
832
  tokenIndex++;
829
833
  } else if (c0 === 8369) {
830
- yield new LexerToken("CURRENCY_SYMBOL", chunkQFTDTX6K_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B1", "\u20B1", this.pos, 0, this.line, col);
834
+ yield new LexerToken("CURRENCY_SYMBOL", chunkG2YPPLGX_cjs.tokenTypeId("CURRENCY_SYMBOL"), "\u20B1", "\u20B1", this.pos, 0, this.line, col);
831
835
  this.pos++;
832
836
  tokenIndex++;
833
837
  } else if (c0 >= 128) {
@@ -868,7 +872,7 @@ var _ExpressionLexer = class _ExpressionLexer {
868
872
  }
869
873
  const text2 = input.slice(start, pos);
870
874
  this.pos = pos;
871
- return new LexerToken("NUMBER", chunkQFTDTX6K_cjs.tokenTypeId("NUMBER"), text2, text2, start, 0, this.line, startCol);
875
+ return new LexerToken("NUMBER", chunkG2YPPLGX_cjs.tokenTypeId("NUMBER"), text2, text2, start, 0, this.line, startCol);
872
876
  }
873
877
  if (next === 98 || next === 66) {
874
878
  pos += 2;
@@ -877,7 +881,7 @@ var _ExpressionLexer = class _ExpressionLexer {
877
881
  }
878
882
  const text2 = input.slice(start, pos);
879
883
  this.pos = pos;
880
- return new LexerToken("NUMBER", chunkQFTDTX6K_cjs.tokenTypeId("NUMBER"), text2, text2, start, 0, this.line, startCol);
884
+ return new LexerToken("NUMBER", chunkG2YPPLGX_cjs.tokenTypeId("NUMBER"), text2, text2, start, 0, this.line, startCol);
881
885
  }
882
886
  if (next === 111 || next === 79) {
883
887
  pos += 2;
@@ -886,7 +890,7 @@ var _ExpressionLexer = class _ExpressionLexer {
886
890
  }
887
891
  const text2 = input.slice(start, pos);
888
892
  this.pos = pos;
889
- return new LexerToken("NUMBER", chunkQFTDTX6K_cjs.tokenTypeId("NUMBER"), text2, text2, start, 0, this.line, startCol);
893
+ return new LexerToken("NUMBER", chunkG2YPPLGX_cjs.tokenTypeId("NUMBER"), text2, text2, start, 0, this.line, startCol);
890
894
  }
891
895
  }
892
896
  let hasIntPart = false;
@@ -947,12 +951,12 @@ var _ExpressionLexer = class _ExpressionLexer {
947
951
  pos++;
948
952
  const text2 = input.slice(start, pos);
949
953
  this.pos = pos;
950
- return new LexerToken("BIGINT", chunkQFTDTX6K_cjs.tokenTypeId("BIGINT"), text2, text2, start, 0, this.line, startCol);
954
+ return new LexerToken("BIGINT", chunkG2YPPLGX_cjs.tokenTypeId("BIGINT"), text2, text2, start, 0, this.line, startCol);
951
955
  }
952
956
  }
953
957
  const text = input.slice(start, pos);
954
958
  this.pos = pos;
955
- return new LexerToken("NUMBER", chunkQFTDTX6K_cjs.tokenTypeId("NUMBER"), text, text, start, 0, this.line, startCol);
959
+ return new LexerToken("NUMBER", chunkG2YPPLGX_cjs.tokenTypeId("NUMBER"), text, text, start, 0, this.line, startCol);
956
960
  }
957
961
  // ── Inline identifier / keyword tokenizer ──────────────────────────────
958
962
  /**
@@ -984,22 +988,22 @@ var _ExpressionLexer = class _ExpressionLexer {
984
988
  pos++;
985
989
  this.pos = pos;
986
990
  const fullText = input.slice(start, pos);
987
- return new LexerToken("INLINE_SOLVE_START", chunkQFTDTX6K_cjs.tokenTypeId("INLINE_SOLVE_START"), fullText, fullText, start, 0, this.line, startCol);
991
+ return new LexerToken("INLINE_SOLVE_START", chunkG2YPPLGX_cjs.tokenTypeId("INLINE_SOLVE_START"), fullText, fullText, start, 0, this.line, startCol);
988
992
  }
989
993
  const isKnownUnit = this.mergedUnits.has(identText);
990
994
  if (isKnownUnit) {
991
995
  if (!this.isFollowedByLParen(pos)) {
992
996
  this.pos = pos;
993
- return new LexerToken("UNIT", chunkQFTDTX6K_cjs.tokenTypeId("UNIT"), identText, identText, start, 0, this.line, startCol);
997
+ return new LexerToken("UNIT", chunkG2YPPLGX_cjs.tokenTypeId("UNIT"), identText, identText, start, 0, this.line, startCol);
994
998
  }
995
999
  }
996
1000
  const localeKwType = this.mergedKeywords.get(identLower);
997
1001
  if (localeKwType) {
998
1002
  this.pos = pos;
999
- return new LexerToken(localeKwType, chunkQFTDTX6K_cjs.tokenTypeId(localeKwType), identText, identText, start, 0, this.line, startCol);
1003
+ return new LexerToken(localeKwType, chunkG2YPPLGX_cjs.tokenTypeId(localeKwType), identText, identText, start, 0, this.line, startCol);
1000
1004
  }
1001
1005
  this.pos = pos;
1002
- return new LexerToken("IDENT", chunkQFTDTX6K_cjs.tokenTypeId("IDENT"), identText, identText, start, 0, this.line, startCol);
1006
+ return new LexerToken("IDENT", chunkG2YPPLGX_cjs.tokenTypeId("IDENT"), identText, identText, start, 0, this.line, startCol);
1003
1007
  }
1004
1008
  /**
1005
1009
  * Peek past in-expression whitespace (space, tab) from `pos` to check
@@ -1072,7 +1076,7 @@ var _ExpressionLexer = class _ExpressionLexer {
1072
1076
  if (twoCharType) {
1073
1077
  const text2 = input.slice(pos, pos + 2);
1074
1078
  this.pos = pos + 2;
1075
- return new LexerToken(twoCharType, chunkQFTDTX6K_cjs.tokenTypeId(twoCharType), text2, text2, pos, 0, this.line, col);
1079
+ return new LexerToken(twoCharType, chunkG2YPPLGX_cjs.tokenTypeId(twoCharType), text2, text2, pos, 0, this.line, col);
1076
1080
  }
1077
1081
  }
1078
1082
  if (c0 === 47 && c1 === 47) {
@@ -1084,19 +1088,19 @@ var _ExpressionLexer = class _ExpressionLexer {
1084
1088
  }
1085
1089
  const text2 = input.slice(pos, commentPos);
1086
1090
  this.pos = commentPos;
1087
- return new LexerToken("COMMENT", chunkQFTDTX6K_cjs.tokenTypeId("COMMENT"), text2, text2, pos, 0, this.line, col);
1091
+ return new LexerToken("COMMENT", chunkG2YPPLGX_cjs.tokenTypeId("COMMENT"), text2, text2, pos, 0, this.line, col);
1088
1092
  }
1089
1093
  if (c0 === 60 && c1 === 60) {
1090
1094
  this.pos = pos + 2;
1091
- return new LexerToken("LSHIFT", chunkQFTDTX6K_cjs.tokenTypeId("LSHIFT"), "<<", "<<", pos, 0, this.line, col);
1095
+ return new LexerToken("LSHIFT", chunkG2YPPLGX_cjs.tokenTypeId("LSHIFT"), "<<", "<<", pos, 0, this.line, col);
1092
1096
  }
1093
1097
  if (c0 === 62 && c1 === 62) {
1094
1098
  if (input.charCodeAt(pos + 2) === 62) {
1095
1099
  this.pos = pos + 3;
1096
- return new LexerToken("URSHIFT", chunkQFTDTX6K_cjs.tokenTypeId("URSHIFT"), ">>>", ">>>", pos, 0, this.line, col);
1100
+ return new LexerToken("URSHIFT", chunkG2YPPLGX_cjs.tokenTypeId("URSHIFT"), ">>>", ">>>", pos, 0, this.line, col);
1097
1101
  }
1098
1102
  this.pos = pos + 2;
1099
- return new LexerToken("RSHIFT", chunkQFTDTX6K_cjs.tokenTypeId("RSHIFT"), ">>", ">>", pos, 0, this.line, col);
1103
+ return new LexerToken("RSHIFT", chunkG2YPPLGX_cjs.tokenTypeId("RSHIFT"), ">>", ">>", pos, 0, this.line, col);
1100
1104
  }
1101
1105
  if (this.hasPluginOps) {
1102
1106
  const pluginInner = this.pluginOperators.get(c0);
@@ -1105,7 +1109,7 @@ var _ExpressionLexer = class _ExpressionLexer {
1105
1109
  if (pluginType) {
1106
1110
  const text2 = input.slice(pos, pos + 2);
1107
1111
  this.pos = pos + 2;
1108
- return new LexerToken(pluginType, chunkQFTDTX6K_cjs.tokenTypeId(pluginType), text2, text2, pos, 0, this.line, col);
1112
+ return new LexerToken(pluginType, chunkG2YPPLGX_cjs.tokenTypeId(pluginType), text2, text2, pos, 0, this.line, col);
1109
1113
  }
1110
1114
  }
1111
1115
  }
@@ -1120,7 +1124,7 @@ var _ExpressionLexer = class _ExpressionLexer {
1120
1124
  }
1121
1125
  const opType = OP_MAP[c0];
1122
1126
  const text = input.charAt(pos);
1123
- return new LexerToken(opType || "ERROR", chunkQFTDTX6K_cjs.tokenTypeId(opType || "ERROR"), text, text, pos, 0, this.line, col);
1127
+ return new LexerToken(opType || "ERROR", chunkG2YPPLGX_cjs.tokenTypeId(opType || "ERROR"), text, text, pos, 0, this.line, col);
1124
1128
  }
1125
1129
  // ── String literal tokenizer ──────────────────────────────────────────
1126
1130
  /**
@@ -1156,7 +1160,7 @@ var _ExpressionLexer = class _ExpressionLexer {
1156
1160
  const text = input.slice(start, pos);
1157
1161
  const value = input.slice(start + 1, pos - 1);
1158
1162
  this.pos = pos;
1159
- return new LexerToken("STRING", chunkQFTDTX6K_cjs.tokenTypeId("STRING"), value, text, start, lineBreaks, this.line, startCol);
1163
+ return new LexerToken("STRING", chunkG2YPPLGX_cjs.tokenTypeId("STRING"), value, text, start, lineBreaks, this.line, startCol);
1160
1164
  }
1161
1165
  if (c0 === 92 && pos + 1 < len) {
1162
1166
  pos += 2;
@@ -1170,7 +1174,7 @@ var _ExpressionLexer = class _ExpressionLexer {
1170
1174
  pos++;
1171
1175
  }
1172
1176
  this.pos = pos;
1173
- throw chunkB4HBEFTB_cjs.ErrorFactory.parsing(
1177
+ throw chunkMIGXCBXT_cjs.ErrorFactory.parsing(
1174
1178
  "UNTERMINATED_STRING",
1175
1179
  `Unterminated string literal: ${input.slice(start, pos)}`,
1176
1180
  { literal: input.slice(start, pos), offset: start }
@@ -1488,7 +1492,21 @@ var _ExpressionLexer = class _ExpressionLexer {
1488
1492
  if (hexEnd !== -1) {
1489
1493
  const text2 = input.slice(start, hexEnd);
1490
1494
  this.pos = hexEnd;
1491
- return new LexerToken("HEX_COLOUR", chunkQFTDTX6K_cjs.tokenTypeId("HEX_COLOUR"), text2, text2, start, 0, this.line, startCol);
1495
+ return new LexerToken("HEX_COLOUR", chunkG2YPPLGX_cjs.tokenTypeId("HEX_COLOUR"), text2, text2, start, 0, this.line, startCol);
1496
+ }
1497
+ const first = input.charCodeAt(start + 1);
1498
+ const isLetter = first >= 65 && first <= 90 || first >= 97 && first <= 122;
1499
+ if (isLetter) {
1500
+ let tagEnd = start + 2;
1501
+ while (tagEnd < len) {
1502
+ const c = input.charCodeAt(tagEnd);
1503
+ const isTagChar = c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122 || c === 95 || c === 45;
1504
+ if (!isTagChar) break;
1505
+ tagEnd++;
1506
+ }
1507
+ const name = input.slice(start + 1, tagEnd);
1508
+ this.pos = tagEnd;
1509
+ return new LexerToken("TAG", chunkG2YPPLGX_cjs.tokenTypeId("TAG"), name, name, start, 0, this.line, startCol);
1492
1510
  }
1493
1511
  }
1494
1512
  let pos = this.pos;
@@ -1504,7 +1522,7 @@ var _ExpressionLexer = class _ExpressionLexer {
1504
1522
  }
1505
1523
  const text = input.slice(start, pos);
1506
1524
  this.pos = pos;
1507
- return new LexerToken("COMMENT", chunkQFTDTX6K_cjs.tokenTypeId("COMMENT"), text, text, start, 0, this.line, startCol);
1525
+ return new LexerToken("COMMENT", chunkG2YPPLGX_cjs.tokenTypeId("COMMENT"), text, text, start, 0, this.line, startCol);
1508
1526
  }
1509
1527
  };
1510
1528
  _ExpressionLexer.CHAR_CLASS = buildCharClassTable();
@@ -1512,5 +1530,5 @@ var ExpressionLexer = _ExpressionLexer;
1512
1530
 
1513
1531
  exports.ExpressionLexer = ExpressionLexer;
1514
1532
  exports.LexerToken = LexerToken;
1515
- //# sourceMappingURL=chunk-ZMW6NU2K.cjs.map
1516
- //# sourceMappingURL=chunk-ZMW6NU2K.cjs.map
1533
+ //# sourceMappingURL=chunk-YJHY7CMN.cjs.map
1534
+ //# sourceMappingURL=chunk-YJHY7CMN.cjs.map