@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/index.js
CHANGED
|
@@ -756,6 +756,7 @@ function createNativeJsFunction(fn, name) {
|
|
|
756
756
|
},
|
|
757
757
|
_a.name = name,
|
|
758
758
|
_a.functionType = 'NativeJsFunction',
|
|
759
|
+
_a.paramCount = {},
|
|
759
760
|
_a;
|
|
760
761
|
}
|
|
761
762
|
function joinSets() {
|
|
@@ -802,6 +803,91 @@ function approxEqual(a, b, epsilon) {
|
|
|
802
803
|
function approxZero(value) {
|
|
803
804
|
return Math.abs(value) < EPSILON;
|
|
804
805
|
}
|
|
806
|
+
function paramCountAccepts(paramsCount, nbrOfParams) {
|
|
807
|
+
if (typeof paramsCount === 'number') {
|
|
808
|
+
return paramsCount === nbrOfParams;
|
|
809
|
+
}
|
|
810
|
+
var min = paramsCount.min, max = paramsCount.max, even = paramsCount.even, odd = paramsCount.odd;
|
|
811
|
+
if (even && nbrOfParams % 2 !== 0) {
|
|
812
|
+
return false;
|
|
813
|
+
}
|
|
814
|
+
if (odd && nbrOfParams % 2 !== 1) {
|
|
815
|
+
return false;
|
|
816
|
+
}
|
|
817
|
+
if (typeof min === 'number' && nbrOfParams < min) {
|
|
818
|
+
return false;
|
|
819
|
+
}
|
|
820
|
+
if (typeof max === 'number' && nbrOfParams > max) {
|
|
821
|
+
return false;
|
|
822
|
+
}
|
|
823
|
+
return true;
|
|
824
|
+
}
|
|
825
|
+
function paramCountAcceptsMin(paramsCount, nbrOfParams) {
|
|
826
|
+
if (typeof paramsCount === 'number') {
|
|
827
|
+
return nbrOfParams >= paramsCount;
|
|
828
|
+
}
|
|
829
|
+
var min = paramsCount.min;
|
|
830
|
+
if (typeof min === 'number' && nbrOfParams < min) {
|
|
831
|
+
return false;
|
|
832
|
+
}
|
|
833
|
+
return true;
|
|
834
|
+
}
|
|
835
|
+
function getCommonParamCount(params) {
|
|
836
|
+
return params.reduce(function (acc, param) {
|
|
837
|
+
if (acc === null) {
|
|
838
|
+
return null;
|
|
839
|
+
}
|
|
840
|
+
var paramCount = (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
|
|
841
|
+
if (typeof acc === 'number' && typeof paramCount === 'number') {
|
|
842
|
+
return acc === paramCount ? acc : null;
|
|
843
|
+
}
|
|
844
|
+
if (typeof paramCount === 'number') {
|
|
845
|
+
if (paramCountAccepts(acc, paramCount)) {
|
|
846
|
+
return paramCount;
|
|
847
|
+
}
|
|
848
|
+
return null;
|
|
849
|
+
}
|
|
850
|
+
if (typeof acc === 'number') {
|
|
851
|
+
if (paramCountAccepts(paramCount, acc)) {
|
|
852
|
+
return acc;
|
|
853
|
+
}
|
|
854
|
+
return null;
|
|
855
|
+
}
|
|
856
|
+
var aMin = paramCount.min, aMax = paramCount.max, aEven = paramCount.even, aOdd = paramCount.odd;
|
|
857
|
+
var bMin = acc.min, bMax = acc.max, bEven = acc.even, bOdd = acc.odd;
|
|
858
|
+
var min = typeof aMin === 'number' && typeof bMin === 'number'
|
|
859
|
+
? Math.max(aMin, bMin)
|
|
860
|
+
: typeof aMin === 'number' ? aMin : typeof bMin === 'number' ? bMin : undefined;
|
|
861
|
+
var max = typeof aMax === 'number' && typeof bMax === 'number'
|
|
862
|
+
? Math.min(aMax, bMax)
|
|
863
|
+
: typeof aMax === 'number' ? aMax : typeof bMax === 'number' ? bMax : undefined;
|
|
864
|
+
var even = aEven !== null && aEven !== void 0 ? aEven : bEven;
|
|
865
|
+
var odd = aOdd !== null && aOdd !== void 0 ? aOdd : bOdd;
|
|
866
|
+
if (min !== undefined && max !== undefined && min > max) {
|
|
867
|
+
return null;
|
|
868
|
+
}
|
|
869
|
+
if (even && odd) {
|
|
870
|
+
return null;
|
|
871
|
+
}
|
|
872
|
+
if (odd && min !== undefined && min < 1) {
|
|
873
|
+
return null;
|
|
874
|
+
}
|
|
875
|
+
return { min: min, max: max, even: even, odd: odd };
|
|
876
|
+
}, {});
|
|
877
|
+
}
|
|
878
|
+
function getParamCount(param) {
|
|
879
|
+
return (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
|
|
880
|
+
}
|
|
881
|
+
function paramCountMinus(paramCount, count) {
|
|
882
|
+
if (typeof paramCount === 'number') {
|
|
883
|
+
return paramCount - count;
|
|
884
|
+
}
|
|
885
|
+
var min = paramCount.min === undefined ? undefined : paramCount.min - count;
|
|
886
|
+
var max = paramCount.max === undefined ? undefined : paramCount.max - count;
|
|
887
|
+
var even = paramCount.even === undefined ? undefined : count % 2 === 0 ? true : undefined;
|
|
888
|
+
var odd = paramCount.odd === undefined ? undefined : count % 2 === 0 ? true : undefined;
|
|
889
|
+
return { min: min, max: max, even: even, odd: odd };
|
|
890
|
+
}
|
|
805
891
|
|
|
806
892
|
// isArray not needed, use Array.isArary
|
|
807
893
|
function asArray(value, sourceCodeInfo) {
|
|
@@ -4465,11 +4551,13 @@ var functionalNormalExpression = {
|
|
|
4465
4551
|
'comp': {
|
|
4466
4552
|
evaluate: function (params, sourceCodeInfo) {
|
|
4467
4553
|
var _a;
|
|
4554
|
+
params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
|
|
4468
4555
|
return _a = {},
|
|
4469
4556
|
_a[FUNCTION_SYMBOL] = true,
|
|
4470
4557
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4471
4558
|
_a.functionType = 'Comp',
|
|
4472
4559
|
_a.params = params,
|
|
4560
|
+
_a.paramCount = params.length > 0 ? getParamCount(params.at(-1)) : 1,
|
|
4473
4561
|
_a;
|
|
4474
4562
|
},
|
|
4475
4563
|
paramCount: {},
|
|
@@ -4483,6 +4571,7 @@ var functionalNormalExpression = {
|
|
|
4483
4571
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4484
4572
|
_b.functionType = 'Constantly',
|
|
4485
4573
|
_b.value = toAny(value),
|
|
4574
|
+
_b.paramCount = {},
|
|
4486
4575
|
_b;
|
|
4487
4576
|
},
|
|
4488
4577
|
paramCount: 1,
|
|
@@ -4490,11 +4579,17 @@ var functionalNormalExpression = {
|
|
|
4490
4579
|
'juxt': {
|
|
4491
4580
|
evaluate: function (params, sourceCodeInfo) {
|
|
4492
4581
|
var _a;
|
|
4582
|
+
params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
|
|
4583
|
+
var paramCount = getCommonParamCount(params);
|
|
4584
|
+
if (paramCount === null) {
|
|
4585
|
+
throw new LitsError('All functions must accept the same number of arguments', sourceCodeInfo);
|
|
4586
|
+
}
|
|
4493
4587
|
return _a = {},
|
|
4494
4588
|
_a[FUNCTION_SYMBOL] = true,
|
|
4495
4589
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4496
4590
|
_a.functionType = 'Juxt',
|
|
4497
4591
|
_a.params = params,
|
|
4592
|
+
_a.paramCount = paramCount,
|
|
4498
4593
|
_a;
|
|
4499
4594
|
},
|
|
4500
4595
|
paramCount: { min: 1 },
|
|
@@ -4503,11 +4598,13 @@ var functionalNormalExpression = {
|
|
|
4503
4598
|
evaluate: function (_a, sourceCodeInfo) {
|
|
4504
4599
|
var _b;
|
|
4505
4600
|
var _c = __read(_a, 1), fn = _c[0];
|
|
4601
|
+
var fun = asFunctionLike(fn, sourceCodeInfo);
|
|
4506
4602
|
return _b = {},
|
|
4507
4603
|
_b[FUNCTION_SYMBOL] = true,
|
|
4508
4604
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4509
4605
|
_b.functionType = 'Complement',
|
|
4510
|
-
_b.function =
|
|
4606
|
+
_b.function = fun,
|
|
4607
|
+
_b.paramCount = getParamCount(fun),
|
|
4511
4608
|
_b;
|
|
4512
4609
|
},
|
|
4513
4610
|
paramCount: 1,
|
|
@@ -4520,6 +4617,7 @@ var functionalNormalExpression = {
|
|
|
4520
4617
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4521
4618
|
_a.functionType = 'EveryPred',
|
|
4522
4619
|
_a.params = params,
|
|
4620
|
+
_a.paramCount = 1,
|
|
4523
4621
|
_a;
|
|
4524
4622
|
},
|
|
4525
4623
|
paramCount: { min: 1 },
|
|
@@ -4532,6 +4630,7 @@ var functionalNormalExpression = {
|
|
|
4532
4630
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4533
4631
|
_a.functionType = 'SomePred',
|
|
4534
4632
|
_a.params = params,
|
|
4633
|
+
_a.paramCount = 1,
|
|
4535
4634
|
_a;
|
|
4536
4635
|
},
|
|
4537
4636
|
paramCount: { min: 1 },
|
|
@@ -4540,12 +4639,14 @@ var functionalNormalExpression = {
|
|
|
4540
4639
|
evaluate: function (_a, sourceCodeInfo) {
|
|
4541
4640
|
var _b;
|
|
4542
4641
|
var _c = __read(_a), fn = _c[0], params = _c.slice(1);
|
|
4642
|
+
var fun = asFunctionLike(fn, sourceCodeInfo);
|
|
4543
4643
|
return _b = {},
|
|
4544
4644
|
_b[FUNCTION_SYMBOL] = true,
|
|
4545
4645
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4546
4646
|
_b.functionType = 'Fnull',
|
|
4547
|
-
_b.function =
|
|
4647
|
+
_b.function = fun,
|
|
4548
4648
|
_b.params = params,
|
|
4649
|
+
_b.paramCount = getParamCount(fun),
|
|
4549
4650
|
_b;
|
|
4550
4651
|
},
|
|
4551
4652
|
paramCount: { min: 2 },
|
|
@@ -11685,12 +11786,16 @@ var functionSpecialExpression = {
|
|
|
11685
11786
|
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
11686
11787
|
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
11687
11788
|
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11789
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11790
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11791
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11688
11792
|
var litsFunction = (_b = {},
|
|
11689
11793
|
_b[FUNCTION_SYMBOL] = true,
|
|
11690
11794
|
_b.sourceCodeInfo = node[2],
|
|
11691
11795
|
_b.functionType = 'UserDefined',
|
|
11692
11796
|
_b.name = functionSymbol[1],
|
|
11693
11797
|
_b.evaluatedfunction = evaluatedFunction,
|
|
11798
|
+
_b.paramCount = paramCount,
|
|
11694
11799
|
_b);
|
|
11695
11800
|
contextStack.addValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
|
|
11696
11801
|
return litsFunction;
|
|
@@ -11712,13 +11817,17 @@ var defnSpecialExpression = {
|
|
|
11712
11817
|
var _d = __read(node[1], 3), functionSymbol = _d[1], fn = _d[2];
|
|
11713
11818
|
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
11714
11819
|
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
11715
|
-
var
|
|
11820
|
+
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11821
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11822
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11823
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11716
11824
|
var litsFunction = (_b = {},
|
|
11717
11825
|
_b[FUNCTION_SYMBOL] = true,
|
|
11718
11826
|
_b.sourceCodeInfo = node[2],
|
|
11719
11827
|
_b.functionType = 'UserDefined',
|
|
11720
11828
|
_b.name = functionSymbol[1],
|
|
11721
|
-
_b.evaluatedfunction =
|
|
11829
|
+
_b.evaluatedfunction = evaluatedFunction,
|
|
11830
|
+
_b.paramCount = paramCount,
|
|
11722
11831
|
_b);
|
|
11723
11832
|
contextStack.exportValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
|
|
11724
11833
|
return litsFunction;
|
|
@@ -11740,12 +11849,16 @@ var fnSpecialExpression = {
|
|
|
11740
11849
|
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
|
|
11741
11850
|
var fn = node[1][1];
|
|
11742
11851
|
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11852
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11853
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11854
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11743
11855
|
var litsFunction = (_b = {},
|
|
11744
11856
|
_b[FUNCTION_SYMBOL] = true,
|
|
11745
11857
|
_b.sourceCodeInfo = node[2],
|
|
11746
11858
|
_b.functionType = 'UserDefined',
|
|
11747
11859
|
_b.name = undefined,
|
|
11748
11860
|
_b.evaluatedfunction = evaluatedFunction,
|
|
11861
|
+
_b.paramCount = paramCount,
|
|
11749
11862
|
_b);
|
|
11750
11863
|
return litsFunction;
|
|
11751
11864
|
},
|
|
@@ -12451,12 +12564,6 @@ function findUnresolvedSymbolsInNode(node, contextStack, builtin, evaluateNode)
|
|
|
12451
12564
|
}
|
|
12452
12565
|
}
|
|
12453
12566
|
|
|
12454
|
-
function checkParams(evaluatedFunction, nbrOfParams, sourceCodeInfo) {
|
|
12455
|
-
var minArity = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
12456
|
-
if (nbrOfParams < minArity) {
|
|
12457
|
-
throw new LitsError("Unexpected number of arguments. Expected at least ".concat(minArity, ", got ").concat(nbrOfParams, "."), sourceCodeInfo);
|
|
12458
|
-
}
|
|
12459
|
-
}
|
|
12460
12567
|
var functionExecutors = {
|
|
12461
12568
|
NativeJsFunction: function (fn, params, sourceCodeInfo) {
|
|
12462
12569
|
var _a;
|
|
@@ -12476,7 +12583,10 @@ var functionExecutors = {
|
|
|
12476
12583
|
var evaluateNode = _a.evaluateNode;
|
|
12477
12584
|
var _loop_1 = function () {
|
|
12478
12585
|
var e_1, _b;
|
|
12479
|
-
|
|
12586
|
+
if (!paramCountAcceptsMin(fn.paramCount, params.length)) {
|
|
12587
|
+
throw new LitsError("Expected ".concat(fn.paramCount, " arguments, got ").concat(params.length, "."), sourceCodeInfo);
|
|
12588
|
+
}
|
|
12589
|
+
// checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo)
|
|
12480
12590
|
var evaluatedFunction = fn.evaluatedfunction;
|
|
12481
12591
|
var args = evaluatedFunction[0];
|
|
12482
12592
|
var nbrOfNonRestArgs = args.filter(function (arg) { return arg[0] !== bindingTargetTypes.rest; }).length;
|
|
@@ -12773,6 +12883,7 @@ function evaluateNormalExpression(node, contextStack) {
|
|
|
12773
12883
|
_a.params = params,
|
|
12774
12884
|
_a.placeholders = placeholders,
|
|
12775
12885
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
12886
|
+
_a.paramCount = paramCountMinus(getParamCount(fn), params.length),
|
|
12776
12887
|
_a);
|
|
12777
12888
|
return partialFunction;
|
|
12778
12889
|
}
|
|
@@ -12795,11 +12906,12 @@ function evaluateNormalExpression(node, contextStack) {
|
|
|
12795
12906
|
if (placeholders.length > 0) {
|
|
12796
12907
|
var partialFunction = (_b = {},
|
|
12797
12908
|
_b[FUNCTION_SYMBOL] = true,
|
|
12798
|
-
_b.function =
|
|
12909
|
+
_b.function = fn,
|
|
12799
12910
|
_b.functionType = 'Partial',
|
|
12800
12911
|
_b.params = params,
|
|
12801
12912
|
_b.placeholders = placeholders,
|
|
12802
12913
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
12914
|
+
_b.paramCount = paramCountMinus(getParamCount(fn), params.length),
|
|
12803
12915
|
_b);
|
|
12804
12916
|
return partialFunction;
|
|
12805
12917
|
}
|
|
@@ -13021,11 +13133,13 @@ var ContextStackImpl = /** @class */ (function () {
|
|
|
13021
13133
|
}
|
|
13022
13134
|
if (isNormalBuiltinSymbolNode(node)) {
|
|
13023
13135
|
var type = node[1];
|
|
13136
|
+
var normalExpression = allNormalExpressions[type];
|
|
13024
13137
|
return _b = {},
|
|
13025
13138
|
_b[FUNCTION_SYMBOL] = true,
|
|
13026
13139
|
_b.functionType = 'Builtin',
|
|
13027
13140
|
_b.normalBuitinSymbolType = type,
|
|
13028
13141
|
_b.sourceCodeInfo = node[2],
|
|
13142
|
+
_b.paramCount = normalExpression.paramCount,
|
|
13029
13143
|
_b;
|
|
13030
13144
|
}
|
|
13031
13145
|
var lookUpResult = this.lookUp(node);
|
|
@@ -13062,6 +13176,7 @@ function createContextStack(params) {
|
|
|
13062
13176
|
name: name
|
|
13063
13177
|
},
|
|
13064
13178
|
_b[FUNCTION_SYMBOL] = true,
|
|
13179
|
+
_b.paramCount = {},
|
|
13065
13180
|
_b);
|
|
13066
13181
|
return acc;
|
|
13067
13182
|
}, {}),
|