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