@mojir/lits 2.1.20 → 2.1.22
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/cli/cli.js +129 -16
- package/dist/cli/src/builtin/interface.d.ts +3 -3
- package/dist/cli/src/builtin/specialExpressions/functions.d.ts +1 -1
- package/dist/cli/src/parser/types.d.ts +2 -0
- package/dist/cli/src/tokenizer/reservedNames.d.ts +1 -39
- package/dist/cli/src/tokenizer/token.d.ts +5 -5
- package/dist/cli/src/typeGuards/index.d.ts +3 -3
- package/dist/cli/src/utils/index.d.ts +8 -1
- package/dist/index.esm.js +129 -15
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +129 -15
- package/dist/index.js.map +1 -1
- package/dist/lits.iife.js +129 -15
- package/dist/lits.iife.js.map +1 -1
- package/dist/src/builtin/interface.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/functions.d.ts +1 -1
- package/dist/src/parser/types.d.ts +2 -0
- package/dist/src/tokenizer/reservedNames.d.ts +1 -39
- package/dist/src/tokenizer/token.d.ts +5 -5
- package/dist/src/typeGuards/index.d.ts +3 -3
- package/dist/src/utils/index.d.ts +8 -1
- package/dist/testFramework.esm.js +128 -15
- package/dist/testFramework.esm.js.map +1 -1
- package/dist/testFramework.js +128 -15
- package/dist/testFramework.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/cli.js
CHANGED
|
@@ -92,7 +92,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
92
92
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
93
93
|
};
|
|
94
94
|
|
|
95
|
-
var version = "2.1.
|
|
95
|
+
var version = "2.1.22";
|
|
96
96
|
|
|
97
97
|
function getCodeMarker(sourceCodeInfo) {
|
|
98
98
|
if (!sourceCodeInfo.position || !sourceCodeInfo.code)
|
|
@@ -918,6 +918,91 @@ function approxEqual(a, b, epsilon) {
|
|
|
918
918
|
function approxZero(value) {
|
|
919
919
|
return Math.abs(value) < EPSILON;
|
|
920
920
|
}
|
|
921
|
+
function paramCountAccepts(paramsCount, nbrOfParams) {
|
|
922
|
+
if (typeof paramsCount === 'number') {
|
|
923
|
+
return paramsCount === nbrOfParams;
|
|
924
|
+
}
|
|
925
|
+
var min = paramsCount.min, max = paramsCount.max, even = paramsCount.even, odd = paramsCount.odd;
|
|
926
|
+
if (even && nbrOfParams % 2 !== 0) {
|
|
927
|
+
return false;
|
|
928
|
+
}
|
|
929
|
+
if (odd && nbrOfParams % 2 !== 1) {
|
|
930
|
+
return false;
|
|
931
|
+
}
|
|
932
|
+
if (typeof min === 'number' && nbrOfParams < min) {
|
|
933
|
+
return false;
|
|
934
|
+
}
|
|
935
|
+
if (typeof max === 'number' && nbrOfParams > max) {
|
|
936
|
+
return false;
|
|
937
|
+
}
|
|
938
|
+
return true;
|
|
939
|
+
}
|
|
940
|
+
function paramCountAcceptsMin(paramsCount, nbrOfParams) {
|
|
941
|
+
if (typeof paramsCount === 'number') {
|
|
942
|
+
return nbrOfParams >= paramsCount;
|
|
943
|
+
}
|
|
944
|
+
var min = paramsCount.min;
|
|
945
|
+
if (typeof min === 'number' && nbrOfParams < min) {
|
|
946
|
+
return false;
|
|
947
|
+
}
|
|
948
|
+
return true;
|
|
949
|
+
}
|
|
950
|
+
function getCommonParamCount(params) {
|
|
951
|
+
return params.reduce(function (acc, param) {
|
|
952
|
+
if (acc === null) {
|
|
953
|
+
return null;
|
|
954
|
+
}
|
|
955
|
+
var paramCount = (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
|
|
956
|
+
if (typeof acc === 'number' && typeof paramCount === 'number') {
|
|
957
|
+
return acc === paramCount ? acc : null;
|
|
958
|
+
}
|
|
959
|
+
if (typeof paramCount === 'number') {
|
|
960
|
+
if (paramCountAccepts(acc, paramCount)) {
|
|
961
|
+
return paramCount;
|
|
962
|
+
}
|
|
963
|
+
return null;
|
|
964
|
+
}
|
|
965
|
+
if (typeof acc === 'number') {
|
|
966
|
+
if (paramCountAccepts(paramCount, acc)) {
|
|
967
|
+
return acc;
|
|
968
|
+
}
|
|
969
|
+
return null;
|
|
970
|
+
}
|
|
971
|
+
var aMin = paramCount.min, aMax = paramCount.max, aEven = paramCount.even, aOdd = paramCount.odd;
|
|
972
|
+
var bMin = acc.min, bMax = acc.max, bEven = acc.even, bOdd = acc.odd;
|
|
973
|
+
var min = typeof aMin === 'number' && typeof bMin === 'number'
|
|
974
|
+
? Math.max(aMin, bMin)
|
|
975
|
+
: typeof aMin === 'number' ? aMin : typeof bMin === 'number' ? bMin : undefined;
|
|
976
|
+
var max = typeof aMax === 'number' && typeof bMax === 'number'
|
|
977
|
+
? Math.min(aMax, bMax)
|
|
978
|
+
: typeof aMax === 'number' ? aMax : typeof bMax === 'number' ? bMax : undefined;
|
|
979
|
+
var even = aEven !== null && aEven !== void 0 ? aEven : bEven;
|
|
980
|
+
var odd = aOdd !== null && aOdd !== void 0 ? aOdd : bOdd;
|
|
981
|
+
if (min !== undefined && max !== undefined && min > max) {
|
|
982
|
+
return null;
|
|
983
|
+
}
|
|
984
|
+
if (even && odd) {
|
|
985
|
+
return null;
|
|
986
|
+
}
|
|
987
|
+
if (odd && min !== undefined && min < 1) {
|
|
988
|
+
return null;
|
|
989
|
+
}
|
|
990
|
+
return { min: min, max: max, even: even, odd: odd };
|
|
991
|
+
}, {});
|
|
992
|
+
}
|
|
993
|
+
function getParamCount(param) {
|
|
994
|
+
return (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
|
|
995
|
+
}
|
|
996
|
+
function paramCountMinus(paramCount, count) {
|
|
997
|
+
if (typeof paramCount === 'number') {
|
|
998
|
+
return paramCount - count;
|
|
999
|
+
}
|
|
1000
|
+
var min = paramCount.min === undefined ? undefined : paramCount.min - count;
|
|
1001
|
+
var max = paramCount.max === undefined ? undefined : paramCount.max - count;
|
|
1002
|
+
var even = paramCount.even === undefined ? undefined : count % 2 === 0 ? true : undefined;
|
|
1003
|
+
var odd = paramCount.odd === undefined ? undefined : count % 2 === 0 ? true : undefined;
|
|
1004
|
+
return { min: min, max: max, even: even, odd: odd };
|
|
1005
|
+
}
|
|
921
1006
|
|
|
922
1007
|
// isArray not needed, use Array.isArary
|
|
923
1008
|
function asArray(value, sourceCodeInfo) {
|
|
@@ -4581,11 +4666,13 @@ var functionalNormalExpression = {
|
|
|
4581
4666
|
'comp': {
|
|
4582
4667
|
evaluate: function (params, sourceCodeInfo) {
|
|
4583
4668
|
var _a;
|
|
4669
|
+
params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
|
|
4584
4670
|
return _a = {},
|
|
4585
4671
|
_a[FUNCTION_SYMBOL] = true,
|
|
4586
4672
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4587
4673
|
_a.functionType = 'Comp',
|
|
4588
4674
|
_a.params = params,
|
|
4675
|
+
_a.paramCount = params.length > 0 ? getParamCount(params.at(-1)) : 1,
|
|
4589
4676
|
_a;
|
|
4590
4677
|
},
|
|
4591
4678
|
paramCount: {},
|
|
@@ -4599,6 +4686,7 @@ var functionalNormalExpression = {
|
|
|
4599
4686
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4600
4687
|
_b.functionType = 'Constantly',
|
|
4601
4688
|
_b.value = toAny(value),
|
|
4689
|
+
_b.paramCount = {},
|
|
4602
4690
|
_b;
|
|
4603
4691
|
},
|
|
4604
4692
|
paramCount: 1,
|
|
@@ -4606,11 +4694,17 @@ var functionalNormalExpression = {
|
|
|
4606
4694
|
'juxt': {
|
|
4607
4695
|
evaluate: function (params, sourceCodeInfo) {
|
|
4608
4696
|
var _a;
|
|
4697
|
+
params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
|
|
4698
|
+
var paramCount = getCommonParamCount(params);
|
|
4699
|
+
if (paramCount === null) {
|
|
4700
|
+
throw new LitsError('All functions must accept the same number of arguments', sourceCodeInfo);
|
|
4701
|
+
}
|
|
4609
4702
|
return _a = {},
|
|
4610
4703
|
_a[FUNCTION_SYMBOL] = true,
|
|
4611
4704
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4612
4705
|
_a.functionType = 'Juxt',
|
|
4613
4706
|
_a.params = params,
|
|
4707
|
+
_a.paramCount = paramCount,
|
|
4614
4708
|
_a;
|
|
4615
4709
|
},
|
|
4616
4710
|
paramCount: { min: 1 },
|
|
@@ -4619,11 +4713,13 @@ var functionalNormalExpression = {
|
|
|
4619
4713
|
evaluate: function (_a, sourceCodeInfo) {
|
|
4620
4714
|
var _b;
|
|
4621
4715
|
var _c = __read(_a, 1), fn = _c[0];
|
|
4716
|
+
var fun = asFunctionLike(fn, sourceCodeInfo);
|
|
4622
4717
|
return _b = {},
|
|
4623
4718
|
_b[FUNCTION_SYMBOL] = true,
|
|
4624
4719
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4625
4720
|
_b.functionType = 'Complement',
|
|
4626
|
-
_b.function =
|
|
4721
|
+
_b.function = fun,
|
|
4722
|
+
_b.paramCount = getParamCount(fun),
|
|
4627
4723
|
_b;
|
|
4628
4724
|
},
|
|
4629
4725
|
paramCount: 1,
|
|
@@ -4636,6 +4732,7 @@ var functionalNormalExpression = {
|
|
|
4636
4732
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4637
4733
|
_a.functionType = 'EveryPred',
|
|
4638
4734
|
_a.params = params,
|
|
4735
|
+
_a.paramCount = 1,
|
|
4639
4736
|
_a;
|
|
4640
4737
|
},
|
|
4641
4738
|
paramCount: { min: 1 },
|
|
@@ -4648,6 +4745,7 @@ var functionalNormalExpression = {
|
|
|
4648
4745
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4649
4746
|
_a.functionType = 'SomePred',
|
|
4650
4747
|
_a.params = params,
|
|
4748
|
+
_a.paramCount = 1,
|
|
4651
4749
|
_a;
|
|
4652
4750
|
},
|
|
4653
4751
|
paramCount: { min: 1 },
|
|
@@ -4656,12 +4754,14 @@ var functionalNormalExpression = {
|
|
|
4656
4754
|
evaluate: function (_a, sourceCodeInfo) {
|
|
4657
4755
|
var _b;
|
|
4658
4756
|
var _c = __read(_a), fn = _c[0], params = _c.slice(1);
|
|
4757
|
+
var fun = asFunctionLike(fn, sourceCodeInfo);
|
|
4659
4758
|
return _b = {},
|
|
4660
4759
|
_b[FUNCTION_SYMBOL] = true,
|
|
4661
4760
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4662
4761
|
_b.functionType = 'Fnull',
|
|
4663
|
-
_b.function =
|
|
4762
|
+
_b.function = fun,
|
|
4664
4763
|
_b.params = params,
|
|
4764
|
+
_b.paramCount = getParamCount(fun),
|
|
4665
4765
|
_b;
|
|
4666
4766
|
},
|
|
4667
4767
|
paramCount: { min: 2 },
|
|
@@ -11706,9 +11806,8 @@ var numberReservedSymbolRecord = {
|
|
|
11706
11806
|
'NaN': Number.NaN,
|
|
11707
11807
|
};
|
|
11708
11808
|
var reservedSymbolRecord = __assign(__assign({}, nonNumberReservedSymbolRecord), numberReservedSymbolRecord);
|
|
11709
|
-
var validReservedSymbolRecord = __assign(__assign({}, nonNumberReservedSymbolRecord), numberReservedSymbolRecord);
|
|
11710
11809
|
function isReservedSymbol(symbol) {
|
|
11711
|
-
return symbol in
|
|
11810
|
+
return symbol in reservedSymbolRecord;
|
|
11712
11811
|
}
|
|
11713
11812
|
function isNumberReservedSymbol(symbol) {
|
|
11714
11813
|
return symbol in numberReservedSymbolRecord;
|
|
@@ -11737,12 +11836,16 @@ var functionSpecialExpression = {
|
|
|
11737
11836
|
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
11738
11837
|
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
11739
11838
|
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11839
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11840
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11841
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11740
11842
|
var litsFunction = (_b = {},
|
|
11741
11843
|
_b[FUNCTION_SYMBOL] = true,
|
|
11742
11844
|
_b.sourceCodeInfo = node[2],
|
|
11743
11845
|
_b.functionType = 'UserDefined',
|
|
11744
11846
|
_b.name = functionSymbol[1],
|
|
11745
11847
|
_b.evaluatedfunction = evaluatedFunction,
|
|
11848
|
+
_b.paramCount = paramCount,
|
|
11746
11849
|
_b);
|
|
11747
11850
|
contextStack.addValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
|
|
11748
11851
|
return litsFunction;
|
|
@@ -11764,13 +11867,17 @@ var defnSpecialExpression = {
|
|
|
11764
11867
|
var _d = __read(node[1], 3), functionSymbol = _d[1], fn = _d[2];
|
|
11765
11868
|
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
11766
11869
|
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
11767
|
-
var
|
|
11870
|
+
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11871
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11872
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11873
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11768
11874
|
var litsFunction = (_b = {},
|
|
11769
11875
|
_b[FUNCTION_SYMBOL] = true,
|
|
11770
11876
|
_b.sourceCodeInfo = node[2],
|
|
11771
11877
|
_b.functionType = 'UserDefined',
|
|
11772
11878
|
_b.name = functionSymbol[1],
|
|
11773
|
-
_b.evaluatedfunction =
|
|
11879
|
+
_b.evaluatedfunction = evaluatedFunction,
|
|
11880
|
+
_b.paramCount = paramCount,
|
|
11774
11881
|
_b);
|
|
11775
11882
|
contextStack.exportValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
|
|
11776
11883
|
return litsFunction;
|
|
@@ -11792,12 +11899,16 @@ var fnSpecialExpression = {
|
|
|
11792
11899
|
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
|
|
11793
11900
|
var fn = node[1][1];
|
|
11794
11901
|
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11902
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11903
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11904
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11795
11905
|
var litsFunction = (_b = {},
|
|
11796
11906
|
_b[FUNCTION_SYMBOL] = true,
|
|
11797
11907
|
_b.sourceCodeInfo = node[2],
|
|
11798
11908
|
_b.functionType = 'UserDefined',
|
|
11799
11909
|
_b.name = undefined,
|
|
11800
11910
|
_b.evaluatedfunction = evaluatedFunction,
|
|
11911
|
+
_b.paramCount = paramCount,
|
|
11801
11912
|
_b);
|
|
11802
11913
|
return litsFunction;
|
|
11803
11914
|
},
|
|
@@ -12413,12 +12524,6 @@ new Set(specialExpressionKeys);
|
|
|
12413
12524
|
// TODO, remove
|
|
12414
12525
|
// console.log('builtin', [...specialExpressionKeys, ...normalExpressionKeys].length)
|
|
12415
12526
|
|
|
12416
|
-
function checkParams(evaluatedFunction, nbrOfParams, sourceCodeInfo) {
|
|
12417
|
-
var minArity = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
12418
|
-
if (nbrOfParams < minArity) {
|
|
12419
|
-
throw new LitsError("Unexpected number of arguments. Expected at least ".concat(minArity, ", got ").concat(nbrOfParams, "."), sourceCodeInfo);
|
|
12420
|
-
}
|
|
12421
|
-
}
|
|
12422
12527
|
var functionExecutors = {
|
|
12423
12528
|
NativeJsFunction: function (fn, params, sourceCodeInfo) {
|
|
12424
12529
|
var _a;
|
|
@@ -12438,7 +12543,10 @@ var functionExecutors = {
|
|
|
12438
12543
|
var evaluateNode = _a.evaluateNode;
|
|
12439
12544
|
var _loop_1 = function () {
|
|
12440
12545
|
var e_1, _b;
|
|
12441
|
-
|
|
12546
|
+
if (!paramCountAcceptsMin(fn.paramCount, params.length)) {
|
|
12547
|
+
throw new LitsError("Expected ".concat(fn.paramCount, " arguments, got ").concat(params.length, "."), sourceCodeInfo);
|
|
12548
|
+
}
|
|
12549
|
+
// checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo)
|
|
12442
12550
|
var evaluatedFunction = fn.evaluatedfunction;
|
|
12443
12551
|
var args = evaluatedFunction[0];
|
|
12444
12552
|
var nbrOfNonRestArgs = args.filter(function (arg) { return arg[0] !== bindingTargetTypes.rest; }).length;
|
|
@@ -12735,6 +12843,7 @@ function evaluateNormalExpression(node, contextStack) {
|
|
|
12735
12843
|
_a.params = params,
|
|
12736
12844
|
_a.placeholders = placeholders,
|
|
12737
12845
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
12846
|
+
_a.paramCount = paramCountMinus(getParamCount(fn), params.length),
|
|
12738
12847
|
_a);
|
|
12739
12848
|
return partialFunction;
|
|
12740
12849
|
}
|
|
@@ -12757,11 +12866,12 @@ function evaluateNormalExpression(node, contextStack) {
|
|
|
12757
12866
|
if (placeholders.length > 0) {
|
|
12758
12867
|
var partialFunction = (_b = {},
|
|
12759
12868
|
_b[FUNCTION_SYMBOL] = true,
|
|
12760
|
-
_b.function =
|
|
12869
|
+
_b.function = fn,
|
|
12761
12870
|
_b.functionType = 'Partial',
|
|
12762
12871
|
_b.params = params,
|
|
12763
12872
|
_b.placeholders = placeholders,
|
|
12764
12873
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
12874
|
+
_b.paramCount = paramCountMinus(getParamCount(fn), params.length),
|
|
12765
12875
|
_b);
|
|
12766
12876
|
return partialFunction;
|
|
12767
12877
|
}
|
|
@@ -12983,11 +13093,13 @@ var ContextStackImpl = /** @class */ (function () {
|
|
|
12983
13093
|
}
|
|
12984
13094
|
if (isNormalBuiltinSymbolNode(node)) {
|
|
12985
13095
|
var type = node[1];
|
|
13096
|
+
var normalExpression = allNormalExpressions[type];
|
|
12986
13097
|
return _b = {},
|
|
12987
13098
|
_b[FUNCTION_SYMBOL] = true,
|
|
12988
13099
|
_b.functionType = 'Builtin',
|
|
12989
13100
|
_b.normalBuitinSymbolType = type,
|
|
12990
13101
|
_b.sourceCodeInfo = node[2],
|
|
13102
|
+
_b.paramCount = normalExpression.paramCount,
|
|
12991
13103
|
_b;
|
|
12992
13104
|
}
|
|
12993
13105
|
var lookUpResult = this.lookUp(node);
|
|
@@ -13024,6 +13136,7 @@ function createContextStack(params) {
|
|
|
13024
13136
|
name: name
|
|
13025
13137
|
},
|
|
13026
13138
|
_b[FUNCTION_SYMBOL] = true,
|
|
13139
|
+
_b.paramCount = {},
|
|
13027
13140
|
_b);
|
|
13028
13141
|
return acc;
|
|
13029
13142
|
}, {}),
|
|
@@ -14822,7 +14935,7 @@ var Parser = /** @class */ (function () {
|
|
|
14822
14935
|
return Parser;
|
|
14823
14936
|
}());
|
|
14824
14937
|
|
|
14825
|
-
var litsCommands = new Set(__spreadArray(__spreadArray([], __read(normalExpressionKeys), false), __read(specialExpressionKeys), false));
|
|
14938
|
+
var litsCommands = new Set(__spreadArray(__spreadArray(__spreadArray([], __read(normalExpressionKeys), false), __read(specialExpressionKeys), false), __read(Object.keys(reservedSymbolRecord)), false));
|
|
14826
14939
|
// TODO: replace with get suggestions function
|
|
14827
14940
|
var AutoCompleter = /** @class */ (function () {
|
|
14828
14941
|
function AutoCompleter(originalProgram, originalPosition, lits, params) {
|
|
@@ -5,7 +5,7 @@ import type { Any, Arr } from '../interface';
|
|
|
5
5
|
import type { SpecialExpressionNode } from '../parser/types';
|
|
6
6
|
import type { SourceCodeInfo } from '../tokenizer/token';
|
|
7
7
|
import type { SpecialExpressions } from '.';
|
|
8
|
-
export type
|
|
8
|
+
export type ParamCount = number | {
|
|
9
9
|
min?: number;
|
|
10
10
|
max?: number;
|
|
11
11
|
even?: true;
|
|
@@ -16,7 +16,7 @@ export type NormalExpressionEvaluator<T> = (params: Arr, sourceCodeInfo: SourceC
|
|
|
16
16
|
}) => T;
|
|
17
17
|
export interface BuiltinNormalExpression<T> {
|
|
18
18
|
evaluate: NormalExpressionEvaluator<T>;
|
|
19
|
-
paramCount:
|
|
19
|
+
paramCount: ParamCount;
|
|
20
20
|
aliases?: string[];
|
|
21
21
|
}
|
|
22
22
|
export type BuiltinNormalExpressions = Record<string, BuiltinNormalExpression<Any>>;
|
|
@@ -29,7 +29,7 @@ export interface EvaluateHelpers {
|
|
|
29
29
|
export interface BuiltinSpecialExpression<T, N extends SpecialExpressionNode> {
|
|
30
30
|
evaluate: (node: N, contextStack: ContextStack, helpers: EvaluateHelpers) => T;
|
|
31
31
|
evaluateAsNormalExpression?: NormalExpressionEvaluator<T>;
|
|
32
|
-
paramCount:
|
|
32
|
+
paramCount: ParamCount;
|
|
33
33
|
getUndefinedSymbols: (node: N, contextStack: ContextStack, params: {
|
|
34
34
|
getUndefinedSymbols: GetUndefinedSymbols;
|
|
35
35
|
builtin: Builtin;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type LitsFunction, type SpecialExpressionNode, type SymbolNode } from '../../parser/types';
|
|
2
2
|
import type { BuiltinSpecialExpression } from '../interface';
|
|
3
3
|
import type { Function } from '../utils';
|
|
4
4
|
import type { specialExpressionTypes } from '../specialExpressionTypes';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { JsFunction } from '../Lits/Lits';
|
|
2
2
|
import type { SpecialExpressionType } from '../builtin';
|
|
3
|
+
import type { ParamCount } from '../builtin/interface';
|
|
3
4
|
import type { specialExpressionTypes } from '../builtin/specialExpressionTypes';
|
|
4
5
|
import type { FunctionType, NodeType, NodeTypes } from '../constants/constants';
|
|
5
6
|
import type { Context } from '../evaluator/interface';
|
|
@@ -15,6 +16,7 @@ interface GenericLitsFunction {
|
|
|
15
16
|
[FUNCTION_SYMBOL]: true;
|
|
16
17
|
sourceCodeInfo?: SourceCodeInfo;
|
|
17
18
|
functionType: FunctionType;
|
|
19
|
+
paramCount: ParamCount;
|
|
18
20
|
}
|
|
19
21
|
export interface RegularExpression {
|
|
20
22
|
[REGEXP_SYMBOL]: true;
|
|
@@ -58,44 +58,6 @@ export declare const reservedSymbolRecord: {
|
|
|
58
58
|
readonly as: null;
|
|
59
59
|
readonly _: null;
|
|
60
60
|
};
|
|
61
|
-
export declare const validReservedSymbolRecord: {
|
|
62
|
-
readonly E: number;
|
|
63
|
-
readonly '-E': number;
|
|
64
|
-
readonly ε: number;
|
|
65
|
-
readonly '-\u03B5': number;
|
|
66
|
-
readonly PI: number;
|
|
67
|
-
readonly '-PI': number;
|
|
68
|
-
readonly π: number;
|
|
69
|
-
readonly '-\u03C0': number;
|
|
70
|
-
readonly PHI: number;
|
|
71
|
-
readonly '-PHI': number;
|
|
72
|
-
readonly φ: number;
|
|
73
|
-
readonly '-\u03C6': number;
|
|
74
|
-
readonly POSITIVE_INFINITY: number;
|
|
75
|
-
readonly '\u221E': number;
|
|
76
|
-
readonly NEGATIVE_INFINITY: number;
|
|
77
|
-
readonly '-\u221E': number;
|
|
78
|
-
readonly MAX_SAFE_INTEGER: number;
|
|
79
|
-
readonly MIN_SAFE_INTEGER: number;
|
|
80
|
-
readonly MAX_VALUE: number;
|
|
81
|
-
readonly MIN_VALUE: number;
|
|
82
|
-
readonly NaN: number;
|
|
83
|
-
readonly true: true;
|
|
84
|
-
readonly false: false;
|
|
85
|
-
readonly null: null;
|
|
86
|
-
readonly else: null;
|
|
87
|
-
readonly case: null;
|
|
88
|
-
readonly each: null;
|
|
89
|
-
readonly in: null;
|
|
90
|
-
readonly when: null;
|
|
91
|
-
readonly while: null;
|
|
92
|
-
readonly catch: null;
|
|
93
|
-
readonly function: null;
|
|
94
|
-
readonly export: null;
|
|
95
|
-
readonly as: null;
|
|
96
|
-
readonly _: null;
|
|
97
|
-
};
|
|
98
|
-
export type ValidReservedSymbol = keyof typeof validReservedSymbolRecord;
|
|
99
61
|
export type ReservedSymbol = keyof typeof reservedSymbolRecord;
|
|
100
|
-
export declare function isReservedSymbol(symbol: string): symbol is keyof typeof
|
|
62
|
+
export declare function isReservedSymbol(symbol: string): symbol is keyof typeof reservedSymbolRecord;
|
|
101
63
|
export declare function isNumberReservedSymbol(symbol: string): symbol is keyof typeof numberReservedSymbolRecord;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ReservedSymbol } from './reservedNames';
|
|
2
2
|
import { type SymbolicBinaryOperator, type SymbolicOperator } from './operators';
|
|
3
3
|
export declare const tokenTypes: readonly ["LBrace", "LBracket", "RBrace", "RBracket", "LParen", "RParen", "BasePrefixedNumber", "MultiLineComment", "Number", "Operator", "RegexpShorthand", "ReservedSymbol", "SingleLineComment", "String", "Symbol", "Whitespace"];
|
|
4
4
|
export type TokenType = typeof tokenTypes[number];
|
|
@@ -16,7 +16,7 @@ export type MultiLineCommentToken = GenericToken<'MultiLineComment'>;
|
|
|
16
16
|
export type NumberToken = GenericToken<'Number'>;
|
|
17
17
|
export type OperatorToken<T extends SymbolicOperator = SymbolicOperator> = GenericToken<'Operator', T>;
|
|
18
18
|
export type RegexpShorthandToken = GenericToken<'RegexpShorthand'>;
|
|
19
|
-
export type ReservedSymbolToken<T extends
|
|
19
|
+
export type ReservedSymbolToken<T extends ReservedSymbol = ReservedSymbol> = GenericToken<'ReservedSymbol', T>;
|
|
20
20
|
export type SingleLineCommentToken = GenericToken<'SingleLineComment'>;
|
|
21
21
|
export type StringToken = GenericToken<'String'>;
|
|
22
22
|
export type SymbolToken<T extends string = string> = GenericToken<'Symbol', T>;
|
|
@@ -34,9 +34,9 @@ export interface SourceCodeInfo {
|
|
|
34
34
|
export declare function isSymbolToken<T extends string>(token: Token | undefined | undefined, symbolName?: T): token is SymbolToken<T>;
|
|
35
35
|
export declare function assertSymbolToken<T extends string>(token: Token | undefined | undefined, symbolName?: T): asserts token is SymbolToken<T>;
|
|
36
36
|
export declare function asSymbolToken<T extends string>(token: Token | undefined | undefined, symbolName?: T): SymbolToken<T>;
|
|
37
|
-
export declare function isReservedSymbolToken<T extends
|
|
38
|
-
export declare function assertReservedSymbolToken<T extends
|
|
39
|
-
export declare function asReservedSymbolToken<T extends
|
|
37
|
+
export declare function isReservedSymbolToken<T extends ReservedSymbol>(token: Token | undefined | undefined, symbolName?: T): token is ReservedSymbolToken<T>;
|
|
38
|
+
export declare function assertReservedSymbolToken<T extends ReservedSymbol>(token: Token | undefined | undefined, symbolName?: T): asserts token is ReservedSymbolToken<T>;
|
|
39
|
+
export declare function asReservedSymbolToken<T extends ReservedSymbol>(token: Token | undefined | undefined, symbolName?: T): ReservedSymbolToken<T>;
|
|
40
40
|
export declare function isSingleLineCommentToken(token: Token | undefined): token is SingleLineCommentToken;
|
|
41
41
|
export declare function assertSingleLineCommentToken(token: Token | undefined): asserts token is SingleLineCommentToken;
|
|
42
42
|
export declare function asSingleLineCommentToken(token: Token | undefined): SingleLineCommentToken;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ParamCount } from '../builtin/interface';
|
|
2
2
|
import type { UnknownRecord } from '../interface';
|
|
3
3
|
import type { NormalExpressionNodeWithName } from '../parser/types';
|
|
4
4
|
import type { SourceCodeInfo } from '../tokenizer/token';
|
|
5
|
-
export declare function assertNumberOfParams(count:
|
|
5
|
+
export declare function assertNumberOfParams(count: ParamCount, node: NormalExpressionNodeWithName): void;
|
|
6
6
|
export declare function isNonUndefined<T>(value: T | undefined): value is T;
|
|
7
7
|
export declare function asNonUndefined<T>(value: T | undefined, sourceCodeInfo?: SourceCodeInfo): T;
|
|
8
8
|
export declare function assertNonUndefined<T>(value: T | undefined, sourceCodeInfo?: SourceCodeInfo): asserts value is T;
|
|
9
9
|
export declare function isUnknownRecord(value: unknown): value is Record<string, unknown>;
|
|
10
10
|
export declare function assertUnknownRecord(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is UnknownRecord;
|
|
11
11
|
export declare function asUnknownRecord(value: unknown, sourceCodeInfo?: SourceCodeInfo): UnknownRecord;
|
|
12
|
-
export declare function canBeOperator(count:
|
|
12
|
+
export declare function canBeOperator(count: ParamCount): boolean;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Any, Coll } from '../interface';
|
|
2
|
-
import type { NativeJsFunction } from '../parser/types';
|
|
2
|
+
import type { FunctionLike, NativeJsFunction, NormalExpressionNodeWithName } from '../parser/types';
|
|
3
3
|
import type { SourceCodeInfo } from '../tokenizer/token';
|
|
4
|
+
import type { ParamCount } from '../builtin/interface';
|
|
4
5
|
export declare function collHasKey(coll: unknown, key: string | number): boolean;
|
|
5
6
|
export declare function compare<T extends string | number>(a: T, b: T, sourceCodeInfo: SourceCodeInfo | undefined): number;
|
|
6
7
|
export declare function deepEqual(a: unknown, b: unknown, sourceCodeInfo?: SourceCodeInfo): boolean;
|
|
@@ -13,3 +14,9 @@ export declare function addToSet<T>(target: Set<T>, source: Set<T>): void;
|
|
|
13
14
|
export declare const EPSILON = 1e-10;
|
|
14
15
|
export declare function approxEqual(a: number, b: number, epsilon?: number): boolean;
|
|
15
16
|
export declare function approxZero(value: number): boolean;
|
|
17
|
+
export declare function mergeParamCounts(count: ParamCount, node: NormalExpressionNodeWithName): void;
|
|
18
|
+
export declare function assertNumberOfParams(count: ParamCount, node: NormalExpressionNodeWithName): void;
|
|
19
|
+
export declare function paramCountAcceptsMin(paramsCount: ParamCount, nbrOfParams: number): boolean;
|
|
20
|
+
export declare function getCommonParamCount(params: FunctionLike[]): ParamCount | null;
|
|
21
|
+
export declare function getParamCount(param: FunctionLike): ParamCount;
|
|
22
|
+
export declare function paramCountMinus(paramCount: ParamCount, count: number): ParamCount;
|