@mojir/lits 2.1.21 → 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 +127 -13
- 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/typeGuards/index.d.ts +3 -3
- package/dist/cli/src/utils/index.d.ts +8 -1
- package/dist/index.esm.js +127 -12
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +127 -12
- package/dist/index.js.map +1 -1
- package/dist/lits.iife.js +127 -12
- 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/typeGuards/index.d.ts +3 -3
- package/dist/src/utils/index.d.ts +8 -1
- package/dist/testFramework.esm.js +126 -12
- package/dist/testFramework.esm.js.map +1 -1
- package/dist/testFramework.js +126 -12
- package/dist/testFramework.js.map +1 -1
- package/package.json +1 -1
package/dist/testFramework.js
CHANGED
|
@@ -898,6 +898,91 @@ function approxEqual(a, b, epsilon) {
|
|
|
898
898
|
function approxZero(value) {
|
|
899
899
|
return Math.abs(value) < EPSILON;
|
|
900
900
|
}
|
|
901
|
+
function paramCountAccepts(paramsCount, nbrOfParams) {
|
|
902
|
+
if (typeof paramsCount === 'number') {
|
|
903
|
+
return paramsCount === nbrOfParams;
|
|
904
|
+
}
|
|
905
|
+
var min = paramsCount.min, max = paramsCount.max, even = paramsCount.even, odd = paramsCount.odd;
|
|
906
|
+
if (even && nbrOfParams % 2 !== 0) {
|
|
907
|
+
return false;
|
|
908
|
+
}
|
|
909
|
+
if (odd && nbrOfParams % 2 !== 1) {
|
|
910
|
+
return false;
|
|
911
|
+
}
|
|
912
|
+
if (typeof min === 'number' && nbrOfParams < min) {
|
|
913
|
+
return false;
|
|
914
|
+
}
|
|
915
|
+
if (typeof max === 'number' && nbrOfParams > max) {
|
|
916
|
+
return false;
|
|
917
|
+
}
|
|
918
|
+
return true;
|
|
919
|
+
}
|
|
920
|
+
function paramCountAcceptsMin(paramsCount, nbrOfParams) {
|
|
921
|
+
if (typeof paramsCount === 'number') {
|
|
922
|
+
return nbrOfParams >= paramsCount;
|
|
923
|
+
}
|
|
924
|
+
var min = paramsCount.min;
|
|
925
|
+
if (typeof min === 'number' && nbrOfParams < min) {
|
|
926
|
+
return false;
|
|
927
|
+
}
|
|
928
|
+
return true;
|
|
929
|
+
}
|
|
930
|
+
function getCommonParamCount(params) {
|
|
931
|
+
return params.reduce(function (acc, param) {
|
|
932
|
+
if (acc === null) {
|
|
933
|
+
return null;
|
|
934
|
+
}
|
|
935
|
+
var paramCount = (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
|
|
936
|
+
if (typeof acc === 'number' && typeof paramCount === 'number') {
|
|
937
|
+
return acc === paramCount ? acc : null;
|
|
938
|
+
}
|
|
939
|
+
if (typeof paramCount === 'number') {
|
|
940
|
+
if (paramCountAccepts(acc, paramCount)) {
|
|
941
|
+
return paramCount;
|
|
942
|
+
}
|
|
943
|
+
return null;
|
|
944
|
+
}
|
|
945
|
+
if (typeof acc === 'number') {
|
|
946
|
+
if (paramCountAccepts(paramCount, acc)) {
|
|
947
|
+
return acc;
|
|
948
|
+
}
|
|
949
|
+
return null;
|
|
950
|
+
}
|
|
951
|
+
var aMin = paramCount.min, aMax = paramCount.max, aEven = paramCount.even, aOdd = paramCount.odd;
|
|
952
|
+
var bMin = acc.min, bMax = acc.max, bEven = acc.even, bOdd = acc.odd;
|
|
953
|
+
var min = typeof aMin === 'number' && typeof bMin === 'number'
|
|
954
|
+
? Math.max(aMin, bMin)
|
|
955
|
+
: typeof aMin === 'number' ? aMin : typeof bMin === 'number' ? bMin : undefined;
|
|
956
|
+
var max = typeof aMax === 'number' && typeof bMax === 'number'
|
|
957
|
+
? Math.min(aMax, bMax)
|
|
958
|
+
: typeof aMax === 'number' ? aMax : typeof bMax === 'number' ? bMax : undefined;
|
|
959
|
+
var even = aEven !== null && aEven !== void 0 ? aEven : bEven;
|
|
960
|
+
var odd = aOdd !== null && aOdd !== void 0 ? aOdd : bOdd;
|
|
961
|
+
if (min !== undefined && max !== undefined && min > max) {
|
|
962
|
+
return null;
|
|
963
|
+
}
|
|
964
|
+
if (even && odd) {
|
|
965
|
+
return null;
|
|
966
|
+
}
|
|
967
|
+
if (odd && min !== undefined && min < 1) {
|
|
968
|
+
return null;
|
|
969
|
+
}
|
|
970
|
+
return { min: min, max: max, even: even, odd: odd };
|
|
971
|
+
}, {});
|
|
972
|
+
}
|
|
973
|
+
function getParamCount(param) {
|
|
974
|
+
return (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
|
|
975
|
+
}
|
|
976
|
+
function paramCountMinus(paramCount, count) {
|
|
977
|
+
if (typeof paramCount === 'number') {
|
|
978
|
+
return paramCount - count;
|
|
979
|
+
}
|
|
980
|
+
var min = paramCount.min === undefined ? undefined : paramCount.min - count;
|
|
981
|
+
var max = paramCount.max === undefined ? undefined : paramCount.max - count;
|
|
982
|
+
var even = paramCount.even === undefined ? undefined : count % 2 === 0 ? true : undefined;
|
|
983
|
+
var odd = paramCount.odd === undefined ? undefined : count % 2 === 0 ? true : undefined;
|
|
984
|
+
return { min: min, max: max, even: even, odd: odd };
|
|
985
|
+
}
|
|
901
986
|
|
|
902
987
|
// isArray not needed, use Array.isArary
|
|
903
988
|
function asArray(value, sourceCodeInfo) {
|
|
@@ -4561,11 +4646,13 @@ var functionalNormalExpression = {
|
|
|
4561
4646
|
'comp': {
|
|
4562
4647
|
evaluate: function (params, sourceCodeInfo) {
|
|
4563
4648
|
var _a;
|
|
4649
|
+
params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
|
|
4564
4650
|
return _a = {},
|
|
4565
4651
|
_a[FUNCTION_SYMBOL] = true,
|
|
4566
4652
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4567
4653
|
_a.functionType = 'Comp',
|
|
4568
4654
|
_a.params = params,
|
|
4655
|
+
_a.paramCount = params.length > 0 ? getParamCount(params.at(-1)) : 1,
|
|
4569
4656
|
_a;
|
|
4570
4657
|
},
|
|
4571
4658
|
paramCount: {},
|
|
@@ -4579,6 +4666,7 @@ var functionalNormalExpression = {
|
|
|
4579
4666
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4580
4667
|
_b.functionType = 'Constantly',
|
|
4581
4668
|
_b.value = toAny(value),
|
|
4669
|
+
_b.paramCount = {},
|
|
4582
4670
|
_b;
|
|
4583
4671
|
},
|
|
4584
4672
|
paramCount: 1,
|
|
@@ -4586,11 +4674,17 @@ var functionalNormalExpression = {
|
|
|
4586
4674
|
'juxt': {
|
|
4587
4675
|
evaluate: function (params, sourceCodeInfo) {
|
|
4588
4676
|
var _a;
|
|
4677
|
+
params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
|
|
4678
|
+
var paramCount = getCommonParamCount(params);
|
|
4679
|
+
if (paramCount === null) {
|
|
4680
|
+
throw new LitsError('All functions must accept the same number of arguments', sourceCodeInfo);
|
|
4681
|
+
}
|
|
4589
4682
|
return _a = {},
|
|
4590
4683
|
_a[FUNCTION_SYMBOL] = true,
|
|
4591
4684
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4592
4685
|
_a.functionType = 'Juxt',
|
|
4593
4686
|
_a.params = params,
|
|
4687
|
+
_a.paramCount = paramCount,
|
|
4594
4688
|
_a;
|
|
4595
4689
|
},
|
|
4596
4690
|
paramCount: { min: 1 },
|
|
@@ -4599,11 +4693,13 @@ var functionalNormalExpression = {
|
|
|
4599
4693
|
evaluate: function (_a, sourceCodeInfo) {
|
|
4600
4694
|
var _b;
|
|
4601
4695
|
var _c = __read(_a, 1), fn = _c[0];
|
|
4696
|
+
var fun = asFunctionLike(fn, sourceCodeInfo);
|
|
4602
4697
|
return _b = {},
|
|
4603
4698
|
_b[FUNCTION_SYMBOL] = true,
|
|
4604
4699
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4605
4700
|
_b.functionType = 'Complement',
|
|
4606
|
-
_b.function =
|
|
4701
|
+
_b.function = fun,
|
|
4702
|
+
_b.paramCount = getParamCount(fun),
|
|
4607
4703
|
_b;
|
|
4608
4704
|
},
|
|
4609
4705
|
paramCount: 1,
|
|
@@ -4616,6 +4712,7 @@ var functionalNormalExpression = {
|
|
|
4616
4712
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4617
4713
|
_a.functionType = 'EveryPred',
|
|
4618
4714
|
_a.params = params,
|
|
4715
|
+
_a.paramCount = 1,
|
|
4619
4716
|
_a;
|
|
4620
4717
|
},
|
|
4621
4718
|
paramCount: { min: 1 },
|
|
@@ -4628,6 +4725,7 @@ var functionalNormalExpression = {
|
|
|
4628
4725
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4629
4726
|
_a.functionType = 'SomePred',
|
|
4630
4727
|
_a.params = params,
|
|
4728
|
+
_a.paramCount = 1,
|
|
4631
4729
|
_a;
|
|
4632
4730
|
},
|
|
4633
4731
|
paramCount: { min: 1 },
|
|
@@ -4636,12 +4734,14 @@ var functionalNormalExpression = {
|
|
|
4636
4734
|
evaluate: function (_a, sourceCodeInfo) {
|
|
4637
4735
|
var _b;
|
|
4638
4736
|
var _c = __read(_a), fn = _c[0], params = _c.slice(1);
|
|
4737
|
+
var fun = asFunctionLike(fn, sourceCodeInfo);
|
|
4639
4738
|
return _b = {},
|
|
4640
4739
|
_b[FUNCTION_SYMBOL] = true,
|
|
4641
4740
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4642
4741
|
_b.functionType = 'Fnull',
|
|
4643
|
-
_b.function =
|
|
4742
|
+
_b.function = fun,
|
|
4644
4743
|
_b.params = params,
|
|
4744
|
+
_b.paramCount = getParamCount(fun),
|
|
4645
4745
|
_b;
|
|
4646
4746
|
},
|
|
4647
4747
|
paramCount: { min: 2 },
|
|
@@ -11716,12 +11816,16 @@ var functionSpecialExpression = {
|
|
|
11716
11816
|
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
11717
11817
|
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
11718
11818
|
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11819
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11820
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11821
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11719
11822
|
var litsFunction = (_b = {},
|
|
11720
11823
|
_b[FUNCTION_SYMBOL] = true,
|
|
11721
11824
|
_b.sourceCodeInfo = node[2],
|
|
11722
11825
|
_b.functionType = 'UserDefined',
|
|
11723
11826
|
_b.name = functionSymbol[1],
|
|
11724
11827
|
_b.evaluatedfunction = evaluatedFunction,
|
|
11828
|
+
_b.paramCount = paramCount,
|
|
11725
11829
|
_b);
|
|
11726
11830
|
contextStack.addValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
|
|
11727
11831
|
return litsFunction;
|
|
@@ -11743,13 +11847,17 @@ var defnSpecialExpression = {
|
|
|
11743
11847
|
var _d = __read(node[1], 3), functionSymbol = _d[1], fn = _d[2];
|
|
11744
11848
|
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
11745
11849
|
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
11746
|
-
var
|
|
11850
|
+
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11851
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11852
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11853
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11747
11854
|
var litsFunction = (_b = {},
|
|
11748
11855
|
_b[FUNCTION_SYMBOL] = true,
|
|
11749
11856
|
_b.sourceCodeInfo = node[2],
|
|
11750
11857
|
_b.functionType = 'UserDefined',
|
|
11751
11858
|
_b.name = functionSymbol[1],
|
|
11752
|
-
_b.evaluatedfunction =
|
|
11859
|
+
_b.evaluatedfunction = evaluatedFunction,
|
|
11860
|
+
_b.paramCount = paramCount,
|
|
11753
11861
|
_b);
|
|
11754
11862
|
contextStack.exportValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
|
|
11755
11863
|
return litsFunction;
|
|
@@ -11771,12 +11879,16 @@ var fnSpecialExpression = {
|
|
|
11771
11879
|
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
|
|
11772
11880
|
var fn = node[1][1];
|
|
11773
11881
|
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11882
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11883
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11884
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11774
11885
|
var litsFunction = (_b = {},
|
|
11775
11886
|
_b[FUNCTION_SYMBOL] = true,
|
|
11776
11887
|
_b.sourceCodeInfo = node[2],
|
|
11777
11888
|
_b.functionType = 'UserDefined',
|
|
11778
11889
|
_b.name = undefined,
|
|
11779
11890
|
_b.evaluatedfunction = evaluatedFunction,
|
|
11891
|
+
_b.paramCount = paramCount,
|
|
11780
11892
|
_b);
|
|
11781
11893
|
return litsFunction;
|
|
11782
11894
|
},
|
|
@@ -12392,12 +12504,6 @@ new Set(specialExpressionKeys);
|
|
|
12392
12504
|
// TODO, remove
|
|
12393
12505
|
// console.log('builtin', [...specialExpressionKeys, ...normalExpressionKeys].length)
|
|
12394
12506
|
|
|
12395
|
-
function checkParams(evaluatedFunction, nbrOfParams, sourceCodeInfo) {
|
|
12396
|
-
var minArity = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
12397
|
-
if (nbrOfParams < minArity) {
|
|
12398
|
-
throw new LitsError("Unexpected number of arguments. Expected at least ".concat(minArity, ", got ").concat(nbrOfParams, "."), sourceCodeInfo);
|
|
12399
|
-
}
|
|
12400
|
-
}
|
|
12401
12507
|
var functionExecutors = {
|
|
12402
12508
|
NativeJsFunction: function (fn, params, sourceCodeInfo) {
|
|
12403
12509
|
var _a;
|
|
@@ -12417,7 +12523,10 @@ var functionExecutors = {
|
|
|
12417
12523
|
var evaluateNode = _a.evaluateNode;
|
|
12418
12524
|
var _loop_1 = function () {
|
|
12419
12525
|
var e_1, _b;
|
|
12420
|
-
|
|
12526
|
+
if (!paramCountAcceptsMin(fn.paramCount, params.length)) {
|
|
12527
|
+
throw new LitsError("Expected ".concat(fn.paramCount, " arguments, got ").concat(params.length, "."), sourceCodeInfo);
|
|
12528
|
+
}
|
|
12529
|
+
// checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo)
|
|
12421
12530
|
var evaluatedFunction = fn.evaluatedfunction;
|
|
12422
12531
|
var args = evaluatedFunction[0];
|
|
12423
12532
|
var nbrOfNonRestArgs = args.filter(function (arg) { return arg[0] !== bindingTargetTypes.rest; }).length;
|
|
@@ -12714,6 +12823,7 @@ function evaluateNormalExpression(node, contextStack) {
|
|
|
12714
12823
|
_a.params = params,
|
|
12715
12824
|
_a.placeholders = placeholders,
|
|
12716
12825
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
12826
|
+
_a.paramCount = paramCountMinus(getParamCount(fn), params.length),
|
|
12717
12827
|
_a);
|
|
12718
12828
|
return partialFunction;
|
|
12719
12829
|
}
|
|
@@ -12736,11 +12846,12 @@ function evaluateNormalExpression(node, contextStack) {
|
|
|
12736
12846
|
if (placeholders.length > 0) {
|
|
12737
12847
|
var partialFunction = (_b = {},
|
|
12738
12848
|
_b[FUNCTION_SYMBOL] = true,
|
|
12739
|
-
_b.function =
|
|
12849
|
+
_b.function = fn,
|
|
12740
12850
|
_b.functionType = 'Partial',
|
|
12741
12851
|
_b.params = params,
|
|
12742
12852
|
_b.placeholders = placeholders,
|
|
12743
12853
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
12854
|
+
_b.paramCount = paramCountMinus(getParamCount(fn), params.length),
|
|
12744
12855
|
_b);
|
|
12745
12856
|
return partialFunction;
|
|
12746
12857
|
}
|
|
@@ -12962,11 +13073,13 @@ var ContextStackImpl = /** @class */ (function () {
|
|
|
12962
13073
|
}
|
|
12963
13074
|
if (isNormalBuiltinSymbolNode(node)) {
|
|
12964
13075
|
var type = node[1];
|
|
13076
|
+
var normalExpression = allNormalExpressions[type];
|
|
12965
13077
|
return _b = {},
|
|
12966
13078
|
_b[FUNCTION_SYMBOL] = true,
|
|
12967
13079
|
_b.functionType = 'Builtin',
|
|
12968
13080
|
_b.normalBuitinSymbolType = type,
|
|
12969
13081
|
_b.sourceCodeInfo = node[2],
|
|
13082
|
+
_b.paramCount = normalExpression.paramCount,
|
|
12970
13083
|
_b;
|
|
12971
13084
|
}
|
|
12972
13085
|
var lookUpResult = this.lookUp(node);
|
|
@@ -13003,6 +13116,7 @@ function createContextStack(params) {
|
|
|
13003
13116
|
name: name
|
|
13004
13117
|
},
|
|
13005
13118
|
_b[FUNCTION_SYMBOL] = true,
|
|
13119
|
+
_b.paramCount = {},
|
|
13006
13120
|
_b);
|
|
13007
13121
|
return acc;
|
|
13008
13122
|
}, {}),
|