solve-engine 1.0.0-beta.7 → 1.0.1
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.
- package/dist/{BytecodeBuilder-3egMyuDi.d.cts → BytecodeBuilder-B0xskcv5.d.cts} +2 -1
- package/dist/{BytecodeBuilder-3egMyuDi.d.ts → BytecodeBuilder-B0xskcv5.d.ts} +2 -1
- package/dist/{Configuration-fVpd-HC-.d.cts → Configuration-B-G5gTRn.d.cts} +107 -29
- package/dist/{Configuration-fVpd-HC-.d.ts → Configuration-B-G5gTRn.d.ts} +107 -29
- package/dist/{EngineError-DvPSnhZi.d.cts → EngineError-LU7W7AgI.d.cts} +96 -16
- package/dist/{EngineError-DvPSnhZi.d.ts → EngineError-LU7W7AgI.d.ts} +96 -16
- package/dist/{Lexer-W9MBOP0V.d.ts → Lexer-BN5mt30n.d.ts} +16 -0
- package/dist/{Lexer-Cfm79Dak.d.cts → Lexer-D78E2yDW.d.cts} +16 -0
- package/dist/{PackageRegistry-pHtKythi.d.cts → PackageRegistry-B37mRvvz.d.cts} +69 -13
- package/dist/{PackageRegistry-CjDt-Jy_.d.ts → PackageRegistry-DCUEzbQt.d.ts} +69 -13
- package/dist/{Parselet-DEdF9I7n.d.ts → Parselet-BaySkMV3.d.ts} +37 -5
- package/dist/{Parselet-Cu0bLSis.d.cts → Parselet-DuI1Pjiq.d.cts} +37 -5
- package/dist/{ScopeManager-CKfQtl7l.d.cts → ScopeManager-B6GzdhVG.d.cts} +75 -6
- package/dist/{ScopeManager-B5k0nk05.d.ts → ScopeManager-udv4Twwq.d.ts} +75 -6
- package/dist/{VMCheckpoints-BmDwIXgK.d.ts → VMCheckpoints-BiaIlOOY.d.ts} +4 -4
- package/dist/{VMCheckpoints-CqFuLwrT.d.cts → VMCheckpoints-DwLjivM7.d.cts} +4 -4
- package/dist/{Value-KtAQNHur.d.cts → Value-CXJqDH9J.d.cts} +5 -2
- package/dist/{Value-KtAQNHur.d.ts → Value-CXJqDH9J.d.ts} +5 -2
- package/dist/{chunk-35IWNZPJ.cjs → chunk-2XLQPQKI.cjs} +58 -27
- package/dist/chunk-2XLQPQKI.cjs.map +1 -0
- package/dist/{chunk-CSG5XVNJ.cjs → chunk-3AFRJYP4.cjs} +556 -414
- package/dist/chunk-3AFRJYP4.cjs.map +1 -0
- package/dist/chunk-3BOK2LDK.js +17 -0
- package/dist/chunk-3BOK2LDK.js.map +1 -0
- package/dist/{chunk-6RDSQURE.js → chunk-3D7V24DG.js} +57 -6
- package/dist/chunk-3D7V24DG.js.map +1 -0
- package/dist/{chunk-MEOHSQEH.js → chunk-3LAEG75D.js} +47 -15
- package/dist/chunk-3LAEG75D.js.map +1 -0
- package/dist/{chunk-4AVD7NZW.cjs → chunk-4B2CNWQU.cjs} +13 -7
- package/dist/chunk-4B2CNWQU.cjs.map +1 -0
- package/dist/{chunk-6GCKCWLB.js → chunk-526PMQOA.js} +126 -69
- package/dist/chunk-526PMQOA.js.map +1 -0
- package/dist/{chunk-2CS6OMZK.js → chunk-5F4C26RU.js} +8 -5
- package/dist/chunk-5F4C26RU.js.map +1 -0
- package/dist/{chunk-M4N5GA5Z.cjs → chunk-5KMIY374.cjs} +57 -6
- package/dist/chunk-5KMIY374.cjs.map +1 -0
- package/dist/{chunk-R24DI24X.cjs → chunk-5LI5EPGJ.cjs} +6 -5
- package/dist/chunk-5LI5EPGJ.cjs.map +1 -0
- package/dist/{chunk-BAMZT3GL.js → chunk-5WVP4YHP.js} +939 -134
- package/dist/chunk-5WVP4YHP.js.map +1 -0
- package/dist/{chunk-MZOVP3WI.cjs → chunk-6KFYJ6TD.cjs} +3 -2
- package/dist/chunk-6KFYJ6TD.cjs.map +1 -0
- package/dist/{chunk-BXKJLM5R.cjs → chunk-6WFMPTGB.cjs} +972 -636
- package/dist/chunk-6WFMPTGB.cjs.map +1 -0
- package/dist/{chunk-2MV4HBKC.cjs → chunk-A2N2GFCG.cjs} +10 -10
- package/dist/{chunk-2MV4HBKC.cjs.map → chunk-A2N2GFCG.cjs.map} +1 -1
- package/dist/chunk-ADBA3XBE.cjs +20 -0
- package/dist/chunk-ADBA3XBE.cjs.map +1 -0
- package/dist/{chunk-MBNQVDVC.cjs → chunk-AMOJYLG2.cjs} +16 -10
- package/dist/chunk-AMOJYLG2.cjs.map +1 -0
- package/dist/{chunk-CLVQBF5C.cjs → chunk-AQNHHJMJ.cjs} +5 -5
- package/dist/{chunk-CLVQBF5C.cjs.map → chunk-AQNHHJMJ.cjs.map} +1 -1
- package/dist/{chunk-V6HA6JJZ.cjs → chunk-B7TLZABL.cjs} +242 -138
- package/dist/chunk-B7TLZABL.cjs.map +1 -0
- package/dist/{chunk-AHCLWAM5.cjs → chunk-BHTNFEGZ.cjs} +13 -13
- package/dist/chunk-BHTNFEGZ.cjs.map +1 -0
- package/dist/{chunk-BVAR5J2F.js → chunk-GQCOSXMG.js} +117 -6
- package/dist/chunk-GQCOSXMG.js.map +1 -0
- package/dist/{chunk-QDMPOAI7.cjs → chunk-HDP7VK3C.cjs} +1118 -313
- package/dist/chunk-HDP7VK3C.cjs.map +1 -0
- package/dist/{chunk-GVWHCL2N.js → chunk-HMOISHXR.js} +217 -75
- package/dist/chunk-HMOISHXR.js.map +1 -0
- package/dist/{chunk-MTX2KVU7.cjs → chunk-HVQFNJKE.cjs} +122 -90
- package/dist/chunk-HVQFNJKE.cjs.map +1 -0
- package/dist/{chunk-OC6LTXYS.cjs → chunk-JMXUNXQS.cjs} +126 -7
- package/dist/chunk-JMXUNXQS.cjs.map +1 -0
- package/dist/{chunk-WWOLFXTX.cjs → chunk-KBSXGXPM.cjs} +10 -7
- package/dist/chunk-KBSXGXPM.cjs.map +1 -0
- package/dist/{chunk-YU2CUNFO.js → chunk-KV7UW6T6.js} +11 -5
- package/dist/chunk-KV7UW6T6.js.map +1 -0
- package/dist/{chunk-CCJPSHGI.cjs → chunk-N7FNVFXW.cjs} +4 -12
- package/dist/chunk-N7FNVFXW.cjs.map +1 -0
- package/dist/{chunk-CYFK5SY2.js → chunk-O3ANBHSA.js} +169 -39
- package/dist/chunk-O3ANBHSA.js.map +1 -0
- package/dist/{chunk-NZFKROS7.cjs → chunk-PA4VC73I.cjs} +130 -72
- package/dist/chunk-PA4VC73I.cjs.map +1 -0
- package/dist/{chunk-NJTXJ5AG.cjs → chunk-PFUESQTW.cjs} +18 -18
- package/dist/{chunk-NJTXJ5AG.cjs.map → chunk-PFUESQTW.cjs.map} +1 -1
- package/dist/{chunk-SFQWJMKT.js → chunk-QY25VWBF.js} +51 -12
- package/dist/chunk-QY25VWBF.js.map +1 -0
- package/dist/{chunk-WC5FFSHB.js → chunk-R3PY4G7J.js} +3 -3
- package/dist/{chunk-WC5FFSHB.js.map → chunk-R3PY4G7J.js.map} +1 -1
- package/dist/{chunk-M5E34VG5.js → chunk-SBUFNJVE.js} +3 -3
- package/dist/{chunk-M5E34VG5.js.map → chunk-SBUFNJVE.js.map} +1 -1
- package/dist/{chunk-P33SBYGG.js → chunk-TBN7DEHO.js} +54 -23
- package/dist/chunk-TBN7DEHO.js.map +1 -0
- package/dist/{chunk-UKPGSAZW.js → chunk-TMA4RCEN.js} +3 -3
- package/dist/{chunk-UKPGSAZW.js.map → chunk-TMA4RCEN.js.map} +1 -1
- package/dist/{chunk-DUEZFTK2.js → chunk-UKQHXPGW.js} +4 -12
- package/dist/chunk-UKQHXPGW.js.map +1 -0
- package/dist/{chunk-4CVLFLOB.cjs → chunk-UM6BVY2S.cjs} +201 -69
- package/dist/chunk-UM6BVY2S.cjs.map +1 -0
- package/dist/{chunk-75JP4BZX.js → chunk-UQ3UIZJC.js} +3 -2
- package/dist/chunk-UQ3UIZJC.js.map +1 -0
- package/dist/{chunk-PCPX42KL.js → chunk-V4XG5QF6.js} +16 -10
- package/dist/chunk-V4XG5QF6.js.map +1 -0
- package/dist/{chunk-P75775WC.js → chunk-V5PYO44Y.js} +145 -41
- package/dist/chunk-V5PYO44Y.js.map +1 -0
- package/dist/{chunk-GPPLSM2Z.js → chunk-VB37OC6I.js} +6 -5
- package/dist/chunk-VB37OC6I.js.map +1 -0
- package/dist/{chunk-MVBEL57Q.js → chunk-Y7FT4IQT.js} +500 -170
- package/dist/chunk-Y7FT4IQT.js.map +1 -0
- package/dist/{chunk-OFXOTECC.js → chunk-YPPPYLSR.js} +7 -7
- package/dist/chunk-YPPPYLSR.js.map +1 -0
- package/dist/{chunk-M4F66R4O.cjs → chunk-YWQ6V4ZN.cjs} +121 -82
- package/dist/chunk-YWQ6V4ZN.cjs.map +1 -0
- package/dist/constants.cjs +5 -5
- package/dist/constants.d.cts +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +2 -2
- package/dist/engine.cjs +31 -31
- package/dist/engine.d.cts +11 -11
- package/dist/engine.d.ts +11 -11
- package/dist/engine.js +21 -21
- package/dist/errors.cjs +19 -19
- package/dist/errors.d.cts +2 -2
- package/dist/errors.d.ts +2 -2
- package/dist/errors.js +1 -1
- package/dist/format.cjs +29 -22
- package/dist/format.cjs.map +1 -1
- package/dist/format.d.cts +1 -2
- package/dist/format.d.ts +1 -2
- package/dist/format.js +23 -16
- package/dist/format.js.map +1 -1
- package/dist/index.cjs +31 -31
- package/dist/index.d.cts +10 -10
- package/dist/index.d.ts +10 -10
- package/dist/index.js +22 -22
- package/dist/language.cjs +8 -8
- package/dist/language.cjs.map +1 -1
- package/dist/language.d.cts +10 -10
- package/dist/language.d.ts +10 -10
- package/dist/language.js +6 -6
- package/dist/language.js.map +1 -1
- package/dist/lexer.cjs +18 -18
- package/dist/lexer.d.cts +2 -2
- package/dist/lexer.d.ts +2 -2
- package/dist/lexer.js +6 -6
- package/dist/normalizer.cjs +12 -12
- package/dist/normalizer.js +6 -6
- package/dist/packages.cjs +39 -39
- package/dist/packages.d.cts +9 -9
- package/dist/packages.d.ts +9 -9
- package/dist/packages.js +16 -16
- package/dist/parser.cjs +15 -15
- package/dist/parser.d.cts +23 -9
- package/dist/parser.d.ts +23 -9
- package/dist/parser.js +5 -5
- package/dist/{pipeline-CrsRPmsv.d.ts → pipeline-B6k5lCB7.d.ts} +1 -1
- package/dist/{pipeline-DPUQt7yL.d.cts → pipeline-BEb3hujr.d.cts} +1 -1
- package/dist/resolvers.d.cts +2 -2
- package/dist/resolvers.d.ts +2 -2
- package/dist/uom.cjs +17 -17
- package/dist/uom.d.cts +2 -2
- package/dist/uom.d.ts +2 -2
- package/dist/uom.js +7 -7
- package/dist/utilities.cjs +8 -4
- package/dist/utilities.d.cts +19 -3
- package/dist/utilities.d.ts +19 -3
- package/dist/utilities.js +2 -2
- package/dist/vm.cjs +43 -31
- package/dist/vm.d.cts +105 -9
- package/dist/vm.d.ts +105 -9
- package/dist/vm.js +9 -9
- package/package.json +1 -1
- package/dist/chunk-2CS6OMZK.js.map +0 -1
- package/dist/chunk-35IWNZPJ.cjs.map +0 -1
- package/dist/chunk-4AVD7NZW.cjs.map +0 -1
- package/dist/chunk-4CVLFLOB.cjs.map +0 -1
- package/dist/chunk-6GCKCWLB.js.map +0 -1
- package/dist/chunk-6RDSQURE.js.map +0 -1
- package/dist/chunk-75JP4BZX.js.map +0 -1
- package/dist/chunk-AHCLWAM5.cjs.map +0 -1
- package/dist/chunk-BAMZT3GL.js.map +0 -1
- package/dist/chunk-BVAR5J2F.js.map +0 -1
- package/dist/chunk-BXKJLM5R.cjs.map +0 -1
- package/dist/chunk-CCJPSHGI.cjs.map +0 -1
- package/dist/chunk-CSG5XVNJ.cjs.map +0 -1
- package/dist/chunk-CYFK5SY2.js.map +0 -1
- package/dist/chunk-DUEZFTK2.js.map +0 -1
- package/dist/chunk-GPPLSM2Z.js.map +0 -1
- package/dist/chunk-GVWHCL2N.js.map +0 -1
- package/dist/chunk-M4F66R4O.cjs.map +0 -1
- package/dist/chunk-M4N5GA5Z.cjs.map +0 -1
- package/dist/chunk-MBNQVDVC.cjs.map +0 -1
- package/dist/chunk-MEOHSQEH.js.map +0 -1
- package/dist/chunk-MTX2KVU7.cjs.map +0 -1
- package/dist/chunk-MVBEL57Q.js.map +0 -1
- package/dist/chunk-MZOVP3WI.cjs.map +0 -1
- package/dist/chunk-N5YFR4UP.cjs +0 -10
- package/dist/chunk-N5YFR4UP.cjs.map +0 -1
- package/dist/chunk-NZFKROS7.cjs.map +0 -1
- package/dist/chunk-OC6LTXYS.cjs.map +0 -1
- package/dist/chunk-OFXOTECC.js.map +0 -1
- package/dist/chunk-P33SBYGG.js.map +0 -1
- package/dist/chunk-P75775WC.js.map +0 -1
- package/dist/chunk-PCPX42KL.js.map +0 -1
- package/dist/chunk-PFSDGGYL.js +0 -8
- package/dist/chunk-PFSDGGYL.js.map +0 -1
- package/dist/chunk-QDMPOAI7.cjs.map +0 -1
- package/dist/chunk-R24DI24X.cjs.map +0 -1
- package/dist/chunk-SFQWJMKT.js.map +0 -1
- package/dist/chunk-V6HA6JJZ.cjs.map +0 -1
- package/dist/chunk-WWOLFXTX.cjs.map +0 -1
- package/dist/chunk-YU2CUNFO.js.map +0 -1
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { BindingPower, BytecodeBuilder } from './chunk-
|
|
2
|
-
import { createFusedToken, isInsideRangeContext } from './chunk-
|
|
3
|
-
import { stripQuotes } from './chunk-
|
|
4
|
-
import { CurrencyAsyncResolver, nextInstruction } from './chunk-
|
|
1
|
+
import { BindingPower, BytecodeBuilder, bigIntLiteralDigits } from './chunk-526PMQOA.js';
|
|
2
|
+
import { createFusedToken, isInsideRangeContext } from './chunk-YPPPYLSR.js';
|
|
3
|
+
import { stripQuotes } from './chunk-3BOK2LDK.js';
|
|
4
|
+
import { CurrencyAsyncResolver, nextInstruction } from './chunk-KV7UW6T6.js';
|
|
5
5
|
import { getActiveQueryClient } from './chunk-NLNDMWZC.js';
|
|
6
|
-
import { allocatePluginFunctionIndex, sharedGlobalVariableStore, adjustForInflation, CPI_MIN_YEAR, CPI_MAX_YEAR } from './chunk-
|
|
6
|
+
import { allocatePluginFunctionIndex, sharedGlobalVariableStore, adjustForInflation, CPI_MIN_YEAR, CPI_MAX_YEAR } from './chunk-Y7FT4IQT.js';
|
|
7
7
|
import { createTimeoutSignal } from './chunk-Z4X2RWOF.js';
|
|
8
|
-
import { resolveCurrencyAlias } from './chunk-
|
|
9
|
-
import { errorValue, numberValue, stringValue, boolValue, uomValue, datetimeValue, timecodeUnit, ValueType } from './chunk-
|
|
10
|
-
import { getMeasure, convertUnit } from './chunk-
|
|
11
|
-
import { LexerToken } from './chunk-
|
|
12
|
-
import { tokenTypeId } from './chunk-
|
|
8
|
+
import { resolveCurrencyAlias } from './chunk-O3ANBHSA.js';
|
|
9
|
+
import { errorValue, numberValue, stringValue, boolValue, uomValue, datetimeValue, timecodeUnit, ValueType } from './chunk-GQCOSXMG.js';
|
|
10
|
+
import { getMeasure, convertUnit } from './chunk-R3PY4G7J.js';
|
|
11
|
+
import { LexerToken } from './chunk-QY25VWBF.js';
|
|
12
|
+
import { tokenTypeId } from './chunk-VB37OC6I.js';
|
|
13
13
|
import { getLocale } from './chunk-XBTEO4OB.js';
|
|
14
|
-
import { isKnownUnit } from './chunk-
|
|
15
|
-
import { UNIT_TABLE } from './chunk-
|
|
16
|
-
import { ErrorFactory } from './chunk-
|
|
14
|
+
import { isKnownUnit } from './chunk-SBUFNJVE.js';
|
|
15
|
+
import { UNIT_TABLE } from './chunk-V4XG5QF6.js';
|
|
16
|
+
import { ErrorFactory } from './chunk-3D7V24DG.js';
|
|
17
17
|
|
|
18
18
|
// src/packages/arithmetic/parselets/NumberParselet.ts
|
|
19
19
|
var CHAINED_DOT_THOUSANDS_GROUPS = /^\d{1,3}(\.\d{3}){2,}$/;
|
|
@@ -73,13 +73,14 @@ var PrefixOpParselet = class {
|
|
|
73
73
|
|
|
74
74
|
// src/packages/arithmetic/parselets/BinaryOpParselet.ts
|
|
75
75
|
var BinaryOpParselet = class {
|
|
76
|
-
constructor(bp, opcode) {
|
|
76
|
+
constructor(bp, opcode, rightAssociative = false) {
|
|
77
77
|
this.opcode = opcode;
|
|
78
78
|
this.category = "Arithmetic";
|
|
79
79
|
this.bindingPower = bp;
|
|
80
|
+
this.rightBindingPower = rightAssociative ? bp - 1 : bp;
|
|
80
81
|
}
|
|
81
82
|
parse(parser, left, token, builder) {
|
|
82
|
-
parser.parseExpression(this.
|
|
83
|
+
parser.parseExpression(this.rightBindingPower, builder);
|
|
83
84
|
builder.emitOpcode(this.opcode);
|
|
84
85
|
}
|
|
85
86
|
};
|
|
@@ -162,7 +163,8 @@ function largeNumberSuffixNormalizerRule(priority = 65) {
|
|
|
162
163
|
if (!suffixToken) return null;
|
|
163
164
|
if (suffixToken.type !== "IDENT" && suffixToken.type !== "UNIT") return null;
|
|
164
165
|
const adjacent = numberToken.offset + numberToken.text.length === suffixToken.offset;
|
|
165
|
-
const
|
|
166
|
+
const wordMagnitude = suffixToken.type === "UNIT" ? void 0 : WORD_MAGNITUDE[suffixToken.value.toLowerCase()];
|
|
167
|
+
const magnitude = adjacent ? SUFFIX_MAGNITUDE[suffixToken.value] ?? wordMagnitude : wordMagnitude;
|
|
166
168
|
if (magnitude === void 0) return null;
|
|
167
169
|
const scaled = scaleDecimalString(numberToken.text, magnitude);
|
|
168
170
|
return {
|
|
@@ -199,15 +201,25 @@ var ARITHMETIC_PACKAGE = {
|
|
|
199
201
|
{ tokenType: "STAR", parselet: new BinaryOpParselet(BindingPower.Product, 22 /* MUL */) },
|
|
200
202
|
{ tokenType: "SLASH", parselet: new BinaryOpParselet(BindingPower.Product, 23 /* DIV */) },
|
|
201
203
|
{ tokenType: "MOD", parselet: new BinaryOpParselet(BindingPower.Product, 24 /* MOD */) },
|
|
202
|
-
|
|
204
|
+
// `^` is right-associative, so "2 ^ 3 ^ 2" is 2^(3^2) = 512. The Tier 1
|
|
205
|
+
// fast path in PrecedenceParser is what actually runs for `^`; this
|
|
206
|
+
// registration has to agree with it or the two tiers describe different
|
|
207
|
+
// languages.
|
|
208
|
+
{ tokenType: "CARET", parselet: new BinaryOpParselet(BindingPower.Exponent, 25 /* EXP */, true) },
|
|
203
209
|
{ tokenType: "TIMES_BY", parselet: new BinaryOpParselet(BindingPower.Product, 22 /* MUL */) },
|
|
204
210
|
{ tokenType: "MULTIPLY_BY", parselet: new BinaryOpParselet(BindingPower.Product, 22 /* MUL */) },
|
|
205
211
|
{ tokenType: "DIVIDE_BY", parselet: new BinaryOpParselet(BindingPower.Product, 23 /* DIV */) },
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
212
|
+
// The shifts and the bitwise trio, at the levels BindingPower gives them
|
|
213
|
+
// and therefore at C and JavaScript precedence. These six are declared
|
|
214
|
+
// twice, here and in BUILTIN_INFIX_BP, and only the Tier 1 numbers are
|
|
215
|
+
// ever read, so the levels must be the SAME names in both places. When
|
|
216
|
+
// they were not, the four that had a fast-path entry ran at one level
|
|
217
|
+
// while `>>>`, which had none, ran at another.
|
|
218
|
+
{ tokenType: "LSHIFT", parselet: new BinaryOpParselet(BindingPower.Shift, 30 /* LSHIFT */) },
|
|
219
|
+
{ tokenType: "RSHIFT", parselet: new BinaryOpParselet(BindingPower.Shift, 31 /* RSHIFT */) },
|
|
220
|
+
{ tokenType: "URSHIFT", parselet: new BinaryOpParselet(BindingPower.Shift, 32 /* URSHIFT */) },
|
|
221
|
+
{ tokenType: "BIT_AND", parselet: new BinaryOpParselet(BindingPower.BitwiseAnd, 33 /* BIT_AND */) },
|
|
222
|
+
{ tokenType: "BIT_OR", parselet: new BinaryOpParselet(BindingPower.BitwiseOr, 34 /* BIT_OR */) },
|
|
211
223
|
{ tokenType: "BIT_XOR", parselet: new BinaryOpParselet(BindingPower.BitwiseXor, 35 /* BIT_XOR */) }
|
|
212
224
|
],
|
|
213
225
|
normalizerRules: [largeNumberSuffixNormalizerRule()]
|
|
@@ -677,13 +689,16 @@ var FUNCTION_PACKAGE = {
|
|
|
677
689
|
var NowParselet = class {
|
|
678
690
|
constructor(dayOffset = 0) {
|
|
679
691
|
this.category = "Date/Time";
|
|
680
|
-
this.
|
|
692
|
+
this.dayOffset = dayOffset;
|
|
681
693
|
}
|
|
682
694
|
parse(parser, token, builder) {
|
|
683
695
|
builder.emitOpcode(90 /* DATE_NOW */);
|
|
684
|
-
if (this.
|
|
696
|
+
if (this.dayOffset !== 0) {
|
|
685
697
|
builder.emitOpcode(10 /* PUSH_NUMBER */);
|
|
686
|
-
builder.emitNumber(this.
|
|
698
|
+
builder.emitNumber(this.dayOffset);
|
|
699
|
+
builder.emitOpcode(13 /* PUSH_STRING */);
|
|
700
|
+
builder.emitString("days");
|
|
701
|
+
builder.emitOpcode(80 /* UOM_CONVERT */);
|
|
687
702
|
builder.emitOpcode(20 /* ADD */);
|
|
688
703
|
}
|
|
689
704
|
}
|
|
@@ -801,9 +816,11 @@ function workdaysInDurationHandler(args) {
|
|
|
801
816
|
} else {
|
|
802
817
|
totalDays = v.toNumber();
|
|
803
818
|
}
|
|
804
|
-
const
|
|
805
|
-
const
|
|
806
|
-
const
|
|
819
|
+
const sign = totalDays < 0 ? -1 : 1;
|
|
820
|
+
const magnitudeDays = Math.abs(totalDays);
|
|
821
|
+
const fullWeeks = Math.floor(magnitudeDays / 7);
|
|
822
|
+
const remainderDays = magnitudeDays - fullWeeks * 7;
|
|
823
|
+
const workdays = sign * (fullWeeks * 5 + Math.min(remainderDays, 5));
|
|
807
824
|
return numberValue(workdays);
|
|
808
825
|
}
|
|
809
826
|
var WEEKDAY_NAMES = [
|
|
@@ -1125,6 +1142,15 @@ var DATETIME_LITERAL_TYPE_ID = tokenTypeId(DATETIME_LITERAL_TYPE);
|
|
|
1125
1142
|
var PLAIN_INTEGER = /^\d+$/;
|
|
1126
1143
|
var DOT_DAY_MONTH = /^\d{1,2}\.\d{1,2}$/;
|
|
1127
1144
|
var DOT_LEADING_YEAR = /^\.(\d{2}|\d{4})$/;
|
|
1145
|
+
var DAY_OR_MONTH = /^\d{1,2}$/;
|
|
1146
|
+
function writtenAsOneRun(tokens) {
|
|
1147
|
+
for (let i = 0; i < tokens.length - 1; i++) {
|
|
1148
|
+
const token = tokens[i];
|
|
1149
|
+
const end = token.sourceEnd ?? token.offset + token.text.length;
|
|
1150
|
+
if (end !== tokens[i + 1].offset) return false;
|
|
1151
|
+
}
|
|
1152
|
+
return true;
|
|
1153
|
+
}
|
|
1128
1154
|
function resolveYear(digits) {
|
|
1129
1155
|
if (digits.length === 4) return Number(digits);
|
|
1130
1156
|
if (digits.length === 2) {
|
|
@@ -1153,6 +1179,48 @@ function buildDateToken(day, month, year, sourceTokens, ruleName) {
|
|
|
1153
1179
|
);
|
|
1154
1180
|
return { consumed: sourceTokens.length, replacement: [fusedToken], ruleName };
|
|
1155
1181
|
}
|
|
1182
|
+
var ISO_TIMESTAMP = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:?\d{2})?/;
|
|
1183
|
+
var ISO_TOKEN_TYPES = /* @__PURE__ */ new Set(["NUMBER", "MINUS", "PLUS", "COLON", "IDENT"]);
|
|
1184
|
+
var ISO_MAX_TOKENS = 16;
|
|
1185
|
+
function fuseIsoTimestamp(tokens, pos, ruleName) {
|
|
1186
|
+
const first = tokens[pos];
|
|
1187
|
+
if (first.sourceEnd !== void 0) return null;
|
|
1188
|
+
let text = first.text;
|
|
1189
|
+
let runEnd = first.offset + first.text.length;
|
|
1190
|
+
const window = [first];
|
|
1191
|
+
for (let i = pos + 1; i < tokens.length && window.length < ISO_MAX_TOKENS; i++) {
|
|
1192
|
+
const next = tokens[i];
|
|
1193
|
+
if (next.sourceEnd !== void 0) break;
|
|
1194
|
+
if (next.offset !== runEnd || !ISO_TOKEN_TYPES.has(next.type)) break;
|
|
1195
|
+
text += next.text;
|
|
1196
|
+
runEnd = next.offset + next.text.length;
|
|
1197
|
+
window.push(next);
|
|
1198
|
+
}
|
|
1199
|
+
const matched = ISO_TIMESTAMP.exec(text);
|
|
1200
|
+
if (matched === null) return null;
|
|
1201
|
+
let consumed = 0;
|
|
1202
|
+
let covered = 0;
|
|
1203
|
+
for (const token of window) {
|
|
1204
|
+
covered += token.text.length;
|
|
1205
|
+
consumed++;
|
|
1206
|
+
if (covered >= matched[0].length) break;
|
|
1207
|
+
}
|
|
1208
|
+
if (covered !== matched[0].length) return null;
|
|
1209
|
+
const epochMs = parseIso8601(matched[0]);
|
|
1210
|
+
if (epochMs === null) return null;
|
|
1211
|
+
const fusedToken = new LexerToken(
|
|
1212
|
+
DATETIME_LITERAL_TYPE,
|
|
1213
|
+
DATETIME_LITERAL_TYPE_ID,
|
|
1214
|
+
String(epochMs),
|
|
1215
|
+
matched[0],
|
|
1216
|
+
first.offset,
|
|
1217
|
+
0,
|
|
1218
|
+
first.line,
|
|
1219
|
+
first.col,
|
|
1220
|
+
first.offset + matched[0].length
|
|
1221
|
+
);
|
|
1222
|
+
return { consumed, replacement: [fusedToken], ruleName };
|
|
1223
|
+
}
|
|
1156
1224
|
function dateLiteralNormalizerRule() {
|
|
1157
1225
|
return {
|
|
1158
1226
|
name: "datetime:date-literal",
|
|
@@ -1178,6 +1246,10 @@ function dateLiteralNormalizerRule() {
|
|
|
1178
1246
|
}
|
|
1179
1247
|
return null;
|
|
1180
1248
|
}
|
|
1249
|
+
if (t0.value.length === 4 && PLAIN_INTEGER.test(t0.value)) {
|
|
1250
|
+
const timestamp = fuseIsoTimestamp(tokens, pos, "datetime:date-literal:iso-timestamp");
|
|
1251
|
+
if (timestamp) return timestamp;
|
|
1252
|
+
}
|
|
1181
1253
|
if (!PLAIN_INTEGER.test(t0.value)) return null;
|
|
1182
1254
|
const sep1 = tokens[pos + 1];
|
|
1183
1255
|
if (!sep1 || sep1.type !== "SLASH" && sep1.type !== "MINUS") return null;
|
|
@@ -1188,14 +1260,18 @@ function dateLiteralNormalizerRule() {
|
|
|
1188
1260
|
if (!sep2 || sep2.type !== sep1.type) return null;
|
|
1189
1261
|
if (!t2 || t2.type !== "NUMBER" || !PLAIN_INTEGER.test(t2.value)) return null;
|
|
1190
1262
|
const sourceTokens = [t0, sep1, t1, sep2, t2];
|
|
1263
|
+
if (!writtenAsOneRun(sourceTokens)) return null;
|
|
1191
1264
|
if (sep1.type === "SLASH") {
|
|
1265
|
+
if (!DAY_OR_MONTH.test(t0.value) || !DAY_OR_MONTH.test(t1.value)) return null;
|
|
1192
1266
|
const year2 = resolveYear(t2.value);
|
|
1193
1267
|
if (year2 === null) return null;
|
|
1194
1268
|
return buildDateToken(Number(t0.value), Number(t1.value), year2, sourceTokens, "datetime:date-literal:european");
|
|
1195
1269
|
}
|
|
1196
1270
|
if (t0.value.length === 4) {
|
|
1271
|
+
if (!DAY_OR_MONTH.test(t1.value) || !DAY_OR_MONTH.test(t2.value)) return null;
|
|
1197
1272
|
return buildDateToken(Number(t2.value), Number(t1.value), Number(t0.value), sourceTokens, "datetime:date-literal:iso");
|
|
1198
1273
|
}
|
|
1274
|
+
if (!DAY_OR_MONTH.test(t0.value) || !DAY_OR_MONTH.test(t1.value)) return null;
|
|
1199
1275
|
const year = resolveYear(t2.value);
|
|
1200
1276
|
if (year === null) return null;
|
|
1201
1277
|
return buildDateToken(Number(t1.value), Number(t0.value), year, sourceTokens, "datetime:date-literal:us");
|
|
@@ -2054,14 +2130,14 @@ var VideoTimecodeParselet = class {
|
|
|
2054
2130
|
}
|
|
2055
2131
|
parser.consume();
|
|
2056
2132
|
const fps = parseFloat(fpsToken.value);
|
|
2057
|
-
const fpsWhole = Math.
|
|
2133
|
+
const fpsWhole = Math.round(fps);
|
|
2058
2134
|
if (frames >= fpsWhole) {
|
|
2059
2135
|
throw ErrorFactory.parsing(
|
|
2060
2136
|
"TIMECODE_FRAME_OUT_OF_RANGE",
|
|
2061
2137
|
`Frame number ${frames} is out of range for ${fps} fps (must be 0-${fpsWhole - 1})`
|
|
2062
2138
|
);
|
|
2063
2139
|
}
|
|
2064
|
-
const totalFrames =
|
|
2140
|
+
const totalFrames = (hours * 3600 + minutes * 60 + seconds) * fpsWhole + frames;
|
|
2065
2141
|
let unit = timecodeUnit(fps);
|
|
2066
2142
|
if (parser.peek()?.type === "IN") {
|
|
2067
2143
|
parser.consume();
|
|
@@ -3309,6 +3385,27 @@ function ingredientNameNormalizerRule(priority = 68) {
|
|
|
3309
3385
|
};
|
|
3310
3386
|
}
|
|
3311
3387
|
|
|
3388
|
+
// src/packages/uom/normalizer/MultiWordUnitNormalizerRule.ts
|
|
3389
|
+
function multiWordUnitNormalizerRule(priority = 78) {
|
|
3390
|
+
return {
|
|
3391
|
+
name: "uom:multi-word-unit",
|
|
3392
|
+
priority,
|
|
3393
|
+
match(tokens, pos) {
|
|
3394
|
+
const first = tokens[pos];
|
|
3395
|
+
const second = tokens[pos + 1];
|
|
3396
|
+
if (first?.type !== "UNIT" || second?.type !== "UNIT") return null;
|
|
3397
|
+
if (first.offset + first.text.length + 1 !== second.offset) return null;
|
|
3398
|
+
const spelling = `${first.value} ${second.value}`;
|
|
3399
|
+
if (UNIT_TABLE[spelling] === void 0) return null;
|
|
3400
|
+
return {
|
|
3401
|
+
consumed: 2,
|
|
3402
|
+
replacement: [createFusedToken("UNIT", spelling, tokens.slice(pos, pos + 2))],
|
|
3403
|
+
ruleName: "uom:multi-word-unit"
|
|
3404
|
+
};
|
|
3405
|
+
}
|
|
3406
|
+
};
|
|
3407
|
+
}
|
|
3408
|
+
|
|
3312
3409
|
// src/packages/uom/UomPackage.ts
|
|
3313
3410
|
var UOM_PACKAGE = {
|
|
3314
3411
|
name: "solve-uom",
|
|
@@ -3324,6 +3421,9 @@ var UOM_PACKAGE = {
|
|
|
3324
3421
|
{ tokenType: "INGREDIENT_NAME", parselet: new CookingConversionParselet() }
|
|
3325
3422
|
],
|
|
3326
3423
|
normalizerRules: [
|
|
3424
|
+
// Highest priority of the unit rules: a two-word spelling has to become one
|
|
3425
|
+
// token before anything else reads the first word as a unit on its own.
|
|
3426
|
+
multiWordUnitNormalizerRule(),
|
|
3327
3427
|
uomPossibilitiesNormalizerRule(),
|
|
3328
3428
|
compoundQuantityNormalizerRule(),
|
|
3329
3429
|
twoUnitConversionNormalizerRule(),
|
|
@@ -3710,7 +3810,9 @@ var SumParselet = class {
|
|
|
3710
3810
|
parser.consume("COMMA");
|
|
3711
3811
|
parseCollectionExpr(parser, builder);
|
|
3712
3812
|
parser.consume("RPAREN");
|
|
3713
|
-
|
|
3813
|
+
builder.emitOpcode(10 /* PUSH_NUMBER */);
|
|
3814
|
+
builder.emitNumber(0);
|
|
3815
|
+
emitInvoke(builder, 158 /* REDUCE_INVOKE */, { kind: 0, program: bodyProgram }, ["acc", "x"], 1);
|
|
3714
3816
|
}
|
|
3715
3817
|
};
|
|
3716
3818
|
|
|
@@ -3737,7 +3839,9 @@ var ProdParselet = class {
|
|
|
3737
3839
|
parser.consume("COMMA");
|
|
3738
3840
|
parseCollectionExpr(parser, builder);
|
|
3739
3841
|
parser.consume("RPAREN");
|
|
3740
|
-
|
|
3842
|
+
builder.emitOpcode(10 /* PUSH_NUMBER */);
|
|
3843
|
+
builder.emitNumber(1);
|
|
3844
|
+
emitInvoke(builder, 158 /* REDUCE_INVOKE */, { kind: 0, program: bodyProgram }, ["acc", "x"], 1);
|
|
3741
3845
|
}
|
|
3742
3846
|
};
|
|
3743
3847
|
|
|
@@ -3837,6 +3941,42 @@ var FactorParselet = class {
|
|
|
3837
3941
|
}
|
|
3838
3942
|
};
|
|
3839
3943
|
|
|
3944
|
+
// src/packages/symbolic/parselets/VariableArgument.ts
|
|
3945
|
+
function readVariableName(parser, verb) {
|
|
3946
|
+
const token = parser.peek();
|
|
3947
|
+
if (!token || token.type !== "IDENT" && token.type !== "UNIT") {
|
|
3948
|
+
throw ErrorFactory.parsing(
|
|
3949
|
+
"SYMBOLIC_REQUIRES_VARIABLE_NAME",
|
|
3950
|
+
`${verb} needs the name of an unknown here, as in ${verb}(x^2, x).`,
|
|
3951
|
+
{ found: token?.type ?? "end of input" }
|
|
3952
|
+
);
|
|
3953
|
+
}
|
|
3954
|
+
parser.consume();
|
|
3955
|
+
return token.value;
|
|
3956
|
+
}
|
|
3957
|
+
function emitVariableName(builder, name) {
|
|
3958
|
+
builder.emitOpcode(13 /* PUSH_STRING */);
|
|
3959
|
+
builder.emitString(name);
|
|
3960
|
+
}
|
|
3961
|
+
function parseBoundExpression(parser, builder, verb) {
|
|
3962
|
+
const inner = new BytecodeBuilder();
|
|
3963
|
+
parser.parseExpression(BindingPower.Lowest, inner);
|
|
3964
|
+
parser.setBuilder(builder);
|
|
3965
|
+
const program = inner.build();
|
|
3966
|
+
if (program.hasAsync) {
|
|
3967
|
+
throw ErrorFactory.parsing(
|
|
3968
|
+
"SYMBOLIC_ARGUMENT_MUST_BE_SYNCHRONOUS",
|
|
3969
|
+
`${verb}'s expression must be synchronous (no weather/stocks/currency calls).`
|
|
3970
|
+
);
|
|
3971
|
+
}
|
|
3972
|
+
return program;
|
|
3973
|
+
}
|
|
3974
|
+
function emitBoundExpression(builder, program, name) {
|
|
3975
|
+
const index = builder.emitAnonymousBody([name], program);
|
|
3976
|
+
builder.emitOpcode(159 /* BIND_UNKNOWN */);
|
|
3977
|
+
builder.emitIndex(index);
|
|
3978
|
+
}
|
|
3979
|
+
|
|
3840
3980
|
// src/packages/symbolic/parselets/SolveParselet.ts
|
|
3841
3981
|
var SolveParselet = class {
|
|
3842
3982
|
constructor() {
|
|
@@ -3844,13 +3984,8 @@ var SolveParselet = class {
|
|
|
3844
3984
|
}
|
|
3845
3985
|
parse(parser, _token, builder) {
|
|
3846
3986
|
parser.consume("LPAREN");
|
|
3847
|
-
parser
|
|
3848
|
-
|
|
3849
|
-
parser.parseExpression(BindingPower.Lowest, builder);
|
|
3850
|
-
} else {
|
|
3851
|
-
builder.emitOpcode(10 /* PUSH_NUMBER */);
|
|
3852
|
-
builder.emitNumber(0);
|
|
3853
|
-
}
|
|
3987
|
+
const left = parseBoundExpression(parser, builder, "solve");
|
|
3988
|
+
const right = parser.match("EQUALS") ? parseBoundExpression(parser, builder, "solve") : null;
|
|
3854
3989
|
parser.consume("COMMA");
|
|
3855
3990
|
const variable = parser.peek();
|
|
3856
3991
|
if (!variable || variable.type !== "IDENT" && variable.type !== "UNIT") {
|
|
@@ -3861,8 +3996,14 @@ var SolveParselet = class {
|
|
|
3861
3996
|
);
|
|
3862
3997
|
}
|
|
3863
3998
|
parser.consume();
|
|
3864
|
-
builder
|
|
3865
|
-
|
|
3999
|
+
emitBoundExpression(builder, left, variable.value);
|
|
4000
|
+
if (right) {
|
|
4001
|
+
emitBoundExpression(builder, right, variable.value);
|
|
4002
|
+
} else {
|
|
4003
|
+
builder.emitOpcode(10 /* PUSH_NUMBER */);
|
|
4004
|
+
builder.emitNumber(0);
|
|
4005
|
+
}
|
|
4006
|
+
emitVariableName(builder, variable.value);
|
|
3866
4007
|
parser.consume("RPAREN");
|
|
3867
4008
|
builder.emitOpcode(51 /* CALL_BUILTIN */);
|
|
3868
4009
|
builder.emitIndex(SYMBOLIC_BUILTIN_SOLVE);
|
|
@@ -3870,21 +4011,6 @@ var SolveParselet = class {
|
|
|
3870
4011
|
}
|
|
3871
4012
|
};
|
|
3872
4013
|
|
|
3873
|
-
// src/packages/symbolic/parselets/VariableArgument.ts
|
|
3874
|
-
function consumeVariableName(parser, builder, verb) {
|
|
3875
|
-
const token = parser.peek();
|
|
3876
|
-
if (!token || token.type !== "IDENT" && token.type !== "UNIT") {
|
|
3877
|
-
throw ErrorFactory.parsing(
|
|
3878
|
-
"SYMBOLIC_REQUIRES_VARIABLE_NAME",
|
|
3879
|
-
`${verb} needs the name of an unknown here, as in ${verb}(x^2, x).`,
|
|
3880
|
-
{ found: token?.type ?? "end of input" }
|
|
3881
|
-
);
|
|
3882
|
-
}
|
|
3883
|
-
parser.consume();
|
|
3884
|
-
builder.emitOpcode(13 /* PUSH_STRING */);
|
|
3885
|
-
builder.emitString(token.value);
|
|
3886
|
-
}
|
|
3887
|
-
|
|
3888
4014
|
// src/packages/symbolic/parselets/DerParselet.ts
|
|
3889
4015
|
var DerParselet = class {
|
|
3890
4016
|
constructor() {
|
|
@@ -3892,9 +4018,11 @@ var DerParselet = class {
|
|
|
3892
4018
|
}
|
|
3893
4019
|
parse(parser, _token, builder) {
|
|
3894
4020
|
parser.consume("LPAREN");
|
|
3895
|
-
parser
|
|
4021
|
+
const expression = parseBoundExpression(parser, builder, "der");
|
|
3896
4022
|
parser.consume("COMMA");
|
|
3897
|
-
|
|
4023
|
+
const variable = readVariableName(parser, "der");
|
|
4024
|
+
emitBoundExpression(builder, expression, variable);
|
|
4025
|
+
emitVariableName(builder, variable);
|
|
3898
4026
|
if (parser.match("COMMA")) {
|
|
3899
4027
|
parser.parseExpression(BindingPower.Lowest, builder);
|
|
3900
4028
|
} else {
|
|
@@ -3915,9 +4043,11 @@ var IntegralParselet = class {
|
|
|
3915
4043
|
}
|
|
3916
4044
|
parse(parser, _token, builder) {
|
|
3917
4045
|
parser.consume("LPAREN");
|
|
3918
|
-
parser
|
|
4046
|
+
const expression = parseBoundExpression(parser, builder, "integral");
|
|
3919
4047
|
parser.consume("COMMA");
|
|
3920
|
-
|
|
4048
|
+
const variable = readVariableName(parser, "integral");
|
|
4049
|
+
emitBoundExpression(builder, expression, variable);
|
|
4050
|
+
emitVariableName(builder, variable);
|
|
3921
4051
|
parser.consume("RPAREN");
|
|
3922
4052
|
builder.emitOpcode(51 /* CALL_BUILTIN */);
|
|
3923
4053
|
builder.emitIndex(SYMBOLIC_BUILTIN_INTEGRAL);
|
|
@@ -3932,9 +4062,11 @@ var TaylorParselet = class {
|
|
|
3932
4062
|
}
|
|
3933
4063
|
parse(parser, _token, builder) {
|
|
3934
4064
|
parser.consume("LPAREN");
|
|
3935
|
-
parser
|
|
4065
|
+
const expression = parseBoundExpression(parser, builder, "taylor");
|
|
3936
4066
|
parser.consume("COMMA");
|
|
3937
|
-
|
|
4067
|
+
const variable = readVariableName(parser, "taylor");
|
|
4068
|
+
emitBoundExpression(builder, expression, variable);
|
|
4069
|
+
emitVariableName(builder, variable);
|
|
3938
4070
|
parser.consume("EQUALS");
|
|
3939
4071
|
parser.parseExpression(BindingPower.Lowest, builder);
|
|
3940
4072
|
parser.consume("COMMA");
|
|
@@ -4267,10 +4399,8 @@ var BigIntNumberParselet = class {
|
|
|
4267
4399
|
this.category = "BigInt";
|
|
4268
4400
|
}
|
|
4269
4401
|
parse(parser, token, builder) {
|
|
4270
|
-
let raw = token.value;
|
|
4271
|
-
if (raw.endsWith("n")) raw = raw.slice(0, -1);
|
|
4272
4402
|
builder.emitOpcode(11 /* PUSH_BIGINT */);
|
|
4273
|
-
builder.emitString(
|
|
4403
|
+
builder.emitString(bigIntLiteralDigits(token.value, parser.getLocaleCode()));
|
|
4274
4404
|
}
|
|
4275
4405
|
};
|
|
4276
4406
|
|
|
@@ -4456,6 +4586,7 @@ function emitRoundDirection(builder, direction) {
|
|
|
4456
4586
|
var ROUND_BUILTIN = 8;
|
|
4457
4587
|
var CEIL_BUILTIN = 6;
|
|
4458
4588
|
var FLOOR_BUILTIN = 7;
|
|
4589
|
+
var ROUND_TO_PLACES_BUILTIN = 97;
|
|
4459
4590
|
function readDirection(parser) {
|
|
4460
4591
|
const next = parser.peek();
|
|
4461
4592
|
const word = (next?.text ?? "").toLowerCase();
|
|
@@ -4523,14 +4654,11 @@ var DecimalPlacesParselet = class {
|
|
|
4523
4654
|
`"to ${token.value} dp": expected a place count between 0 and 100`
|
|
4524
4655
|
);
|
|
4525
4656
|
}
|
|
4526
|
-
const scale = Math.pow(10, places);
|
|
4527
4657
|
builder.emitOpcode(10 /* PUSH_NUMBER */);
|
|
4528
|
-
builder.emitNumber(
|
|
4529
|
-
builder.emitOpcode(
|
|
4530
|
-
|
|
4531
|
-
builder.
|
|
4532
|
-
builder.emitNumber(scale);
|
|
4533
|
-
builder.emitOpcode(23 /* DIV */);
|
|
4658
|
+
builder.emitNumber(places);
|
|
4659
|
+
builder.emitOpcode(51 /* CALL_BUILTIN */);
|
|
4660
|
+
builder.emitIndex(ROUND_TO_PLACES_BUILTIN);
|
|
4661
|
+
builder.emitIndex(2);
|
|
4534
4662
|
}
|
|
4535
4663
|
};
|
|
4536
4664
|
|
|
@@ -4569,6 +4697,7 @@ function decimalPlacesNormalizerRule(priority = 66) {
|
|
|
4569
4697
|
}
|
|
4570
4698
|
|
|
4571
4699
|
// src/packages/converters/normalizer/ConverterPrepositionNormalizerRule.ts
|
|
4700
|
+
var FUNC_TYPED_CONVERTERS = /* @__PURE__ */ new Set(["hex", "bin"]);
|
|
4572
4701
|
function converterPrepositionNormalizerRule(priority = 67) {
|
|
4573
4702
|
return {
|
|
4574
4703
|
name: "converters:preposition",
|
|
@@ -4576,7 +4705,9 @@ function converterPrepositionNormalizerRule(priority = 67) {
|
|
|
4576
4705
|
match(tokens, pos) {
|
|
4577
4706
|
const preposition = tokens[pos];
|
|
4578
4707
|
if (preposition?.type !== "IN" && preposition?.type !== "TO") return null;
|
|
4579
|
-
|
|
4708
|
+
const target = tokens[pos + 1];
|
|
4709
|
+
const isConverterTarget = target?.type === "CONVERTER_NAME" || target?.type === "FUNC" && FUNC_TYPED_CONVERTERS.has(target.value.toLowerCase());
|
|
4710
|
+
if (!isConverterTarget) return null;
|
|
4580
4711
|
return {
|
|
4581
4712
|
consumed: 1,
|
|
4582
4713
|
replacement: [createFusedToken("AS", "as", [preposition])],
|
|
@@ -5144,12 +5275,23 @@ function inflationFutureValueHandler(args) {
|
|
|
5144
5275
|
|
|
5145
5276
|
// src/packages/finance/parselets/InflationQueryParselet.ts
|
|
5146
5277
|
var INFLATION_ADJUST_BUILTIN_IDX = 60;
|
|
5278
|
+
function hasInflationKeyword(parser) {
|
|
5279
|
+
for (let offset = 0; ; offset++) {
|
|
5280
|
+
const token = parser.peekAt(offset);
|
|
5281
|
+
if (!token) return false;
|
|
5282
|
+
if (token.type === "FROM" || token.type === "WORTH_IN") return true;
|
|
5283
|
+
}
|
|
5284
|
+
}
|
|
5147
5285
|
var InflationQueryParselet = class {
|
|
5148
5286
|
constructor(variant) {
|
|
5149
5287
|
this.variant = variant;
|
|
5150
5288
|
this.category = "Finance";
|
|
5151
5289
|
}
|
|
5152
5290
|
parse(parser, _token, builder) {
|
|
5291
|
+
if (!hasInflationKeyword(parser)) {
|
|
5292
|
+
parser.parseExpression(BindingPower.Lowest, builder);
|
|
5293
|
+
return;
|
|
5294
|
+
}
|
|
5153
5295
|
parser.parseExpression(BindingPower.Product, builder);
|
|
5154
5296
|
if (this.variant === "what-was") {
|
|
5155
5297
|
parser.consume("WORTH_IN");
|
|
@@ -6366,5 +6508,5 @@ var BUILTIN_PACKAGES = [
|
|
|
6366
6508
|
];
|
|
6367
6509
|
|
|
6368
6510
|
export { ARITHMETIC_PACKAGE, BIGINT_PACKAGE, BUILTIN_PACKAGES, CONDITIONALS_PACKAGE, CONVERTERS_PACKAGE, CURRENCY_PACKAGE, DATETIME_PACKAGE, DICE_PACKAGE, FINANCE_PACKAGE, FUNCTION_PACKAGE, LINES_PACKAGE, MAPREDUCE_PACKAGE, MATHPHRASES_PACKAGE, MATRIX_PACKAGE, PERCENTAGE_PACKAGE, SYMBOLIC_PACKAGE, TIME_PACKAGE, UOM_PACKAGE, VARIABLES_PACKAGE, VECTOR_PACKAGE, WEATHER_PACKAGE, containsSymbolicCall, createKnowledgePackage, createStocksPackage };
|
|
6369
|
-
//# sourceMappingURL=chunk-
|
|
6370
|
-
//# sourceMappingURL=chunk-
|
|
6511
|
+
//# sourceMappingURL=chunk-HMOISHXR.js.map
|
|
6512
|
+
//# sourceMappingURL=chunk-HMOISHXR.js.map
|