@mojir/lits 2.1.21 → 2.1.23
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 +135 -14
- package/dist/cli/src/Lits/Lits.d.ts +2 -0
- 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 +0 -2
- package/dist/cli/src/utils/paramCount.d.ts +7 -0
- package/dist/index.esm.js +135 -25
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +134 -25
- package/dist/index.js.map +1 -1
- package/dist/lits.iife.js +134 -25
- package/dist/lits.iife.js.map +1 -1
- package/dist/src/Lits/Lits.d.ts +2 -0
- package/dist/src/builtin/interface.d.ts +3 -3
- package/dist/src/builtin/specialExpressions/functions.d.ts +1 -1
- package/dist/src/index.d.ts +0 -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 +0 -2
- package/dist/src/utils/paramCount.d.ts +7 -0
- package/dist/testFramework.esm.js +134 -13
- package/dist/testFramework.esm.js.map +1 -1
- package/dist/testFramework.js +134 -13
- package/dist/testFramework.js.map +1 -1
- package/package.json +1 -1
package/dist/testFramework.js
CHANGED
|
@@ -4528,6 +4528,98 @@ function applyPlaceholders(templateString, placeholders, sourceCodeInfo) {
|
|
|
4528
4528
|
return templateString;
|
|
4529
4529
|
}
|
|
4530
4530
|
|
|
4531
|
+
function paramCountAccepts(paramsCount, nbrOfParams) {
|
|
4532
|
+
if (typeof paramsCount === 'number') {
|
|
4533
|
+
return paramsCount === nbrOfParams;
|
|
4534
|
+
}
|
|
4535
|
+
var min = paramsCount.min, max = paramsCount.max, even = paramsCount.even, odd = paramsCount.odd;
|
|
4536
|
+
if (even && nbrOfParams % 2 !== 0) {
|
|
4537
|
+
return false;
|
|
4538
|
+
}
|
|
4539
|
+
if (odd && nbrOfParams % 2 !== 1) {
|
|
4540
|
+
return false;
|
|
4541
|
+
}
|
|
4542
|
+
if (typeof min === 'number' && nbrOfParams < min) {
|
|
4543
|
+
return false;
|
|
4544
|
+
}
|
|
4545
|
+
if (typeof max === 'number' && nbrOfParams > max) {
|
|
4546
|
+
return false;
|
|
4547
|
+
}
|
|
4548
|
+
return true;
|
|
4549
|
+
}
|
|
4550
|
+
function paramCountAcceptsMin(paramsCount, nbrOfParams) {
|
|
4551
|
+
if (typeof paramsCount === 'number') {
|
|
4552
|
+
return nbrOfParams >= paramsCount;
|
|
4553
|
+
}
|
|
4554
|
+
var min = paramsCount.min;
|
|
4555
|
+
if (typeof min === 'number' && nbrOfParams < min) {
|
|
4556
|
+
return false;
|
|
4557
|
+
}
|
|
4558
|
+
return true;
|
|
4559
|
+
}
|
|
4560
|
+
function getCommonParamCountFromFunctions(params) {
|
|
4561
|
+
return params.reduce(function (acc, param) {
|
|
4562
|
+
if (acc === null) {
|
|
4563
|
+
return null;
|
|
4564
|
+
}
|
|
4565
|
+
var paramCount = (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
|
|
4566
|
+
if (typeof acc === 'number' && typeof paramCount === 'number') {
|
|
4567
|
+
return acc === paramCount ? acc : null;
|
|
4568
|
+
}
|
|
4569
|
+
if (typeof paramCount === 'number') {
|
|
4570
|
+
if (paramCountAccepts(acc, paramCount)) {
|
|
4571
|
+
return paramCount;
|
|
4572
|
+
}
|
|
4573
|
+
return null;
|
|
4574
|
+
}
|
|
4575
|
+
if (typeof acc === 'number') {
|
|
4576
|
+
if (paramCountAccepts(paramCount, acc)) {
|
|
4577
|
+
return acc;
|
|
4578
|
+
}
|
|
4579
|
+
return null;
|
|
4580
|
+
}
|
|
4581
|
+
var aMin = paramCount.min, aMax = paramCount.max, aEven = paramCount.even, aOdd = paramCount.odd;
|
|
4582
|
+
var bMin = acc.min, bMax = acc.max, bEven = acc.even, bOdd = acc.odd;
|
|
4583
|
+
var min = typeof aMin === 'number' && typeof bMin === 'number'
|
|
4584
|
+
? Math.max(aMin, bMin)
|
|
4585
|
+
: typeof aMin === 'number' ? aMin : typeof bMin === 'number' ? bMin : undefined;
|
|
4586
|
+
var max = typeof aMax === 'number' && typeof bMax === 'number'
|
|
4587
|
+
? Math.min(aMax, bMax)
|
|
4588
|
+
: typeof aMax === 'number' ? aMax : typeof bMax === 'number' ? bMax : undefined;
|
|
4589
|
+
var even = aEven !== null && aEven !== void 0 ? aEven : bEven;
|
|
4590
|
+
var odd = aOdd !== null && aOdd !== void 0 ? aOdd : bOdd;
|
|
4591
|
+
if (even && odd) {
|
|
4592
|
+
return null;
|
|
4593
|
+
}
|
|
4594
|
+
if (even) {
|
|
4595
|
+
if (typeof min === 'number' && min % 2 !== 0) {
|
|
4596
|
+
min += 1;
|
|
4597
|
+
}
|
|
4598
|
+
if (typeof max === 'number' && max % 2 !== 0) {
|
|
4599
|
+
max -= 1;
|
|
4600
|
+
}
|
|
4601
|
+
}
|
|
4602
|
+
if (odd) {
|
|
4603
|
+
if (typeof min === 'number' && min % 2 === 0) {
|
|
4604
|
+
min += 1;
|
|
4605
|
+
}
|
|
4606
|
+
if (typeof max === 'number' && max % 2 === 0) {
|
|
4607
|
+
max -= 1;
|
|
4608
|
+
}
|
|
4609
|
+
}
|
|
4610
|
+
if (typeof min === 'number' && typeof max === 'number' && min > max) {
|
|
4611
|
+
return null;
|
|
4612
|
+
}
|
|
4613
|
+
if (typeof min === 'number' && min === max) {
|
|
4614
|
+
return min;
|
|
4615
|
+
}
|
|
4616
|
+
return { min: min, max: max, even: even, odd: odd };
|
|
4617
|
+
}, {});
|
|
4618
|
+
}
|
|
4619
|
+
function getParamCountFromFunction(param) {
|
|
4620
|
+
return (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
|
|
4621
|
+
}
|
|
4622
|
+
|
|
4531
4623
|
var functionalNormalExpression = {
|
|
4532
4624
|
'|>': {
|
|
4533
4625
|
evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
|
|
@@ -4561,11 +4653,13 @@ var functionalNormalExpression = {
|
|
|
4561
4653
|
'comp': {
|
|
4562
4654
|
evaluate: function (params, sourceCodeInfo) {
|
|
4563
4655
|
var _a;
|
|
4656
|
+
params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
|
|
4564
4657
|
return _a = {},
|
|
4565
4658
|
_a[FUNCTION_SYMBOL] = true,
|
|
4566
4659
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4567
4660
|
_a.functionType = 'Comp',
|
|
4568
4661
|
_a.params = params,
|
|
4662
|
+
_a.paramCount = params.length > 0 ? getParamCountFromFunction(params.at(-1)) : 1,
|
|
4569
4663
|
_a;
|
|
4570
4664
|
},
|
|
4571
4665
|
paramCount: {},
|
|
@@ -4579,6 +4673,7 @@ var functionalNormalExpression = {
|
|
|
4579
4673
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4580
4674
|
_b.functionType = 'Constantly',
|
|
4581
4675
|
_b.value = toAny(value),
|
|
4676
|
+
_b.paramCount = {},
|
|
4582
4677
|
_b;
|
|
4583
4678
|
},
|
|
4584
4679
|
paramCount: 1,
|
|
@@ -4586,11 +4681,17 @@ var functionalNormalExpression = {
|
|
|
4586
4681
|
'juxt': {
|
|
4587
4682
|
evaluate: function (params, sourceCodeInfo) {
|
|
4588
4683
|
var _a;
|
|
4684
|
+
params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
|
|
4685
|
+
var paramCount = getCommonParamCountFromFunctions(params);
|
|
4686
|
+
if (paramCount === null) {
|
|
4687
|
+
throw new LitsError('All functions must accept the same number of arguments', sourceCodeInfo);
|
|
4688
|
+
}
|
|
4589
4689
|
return _a = {},
|
|
4590
4690
|
_a[FUNCTION_SYMBOL] = true,
|
|
4591
4691
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4592
4692
|
_a.functionType = 'Juxt',
|
|
4593
4693
|
_a.params = params,
|
|
4694
|
+
_a.paramCount = paramCount,
|
|
4594
4695
|
_a;
|
|
4595
4696
|
},
|
|
4596
4697
|
paramCount: { min: 1 },
|
|
@@ -4599,11 +4700,13 @@ var functionalNormalExpression = {
|
|
|
4599
4700
|
evaluate: function (_a, sourceCodeInfo) {
|
|
4600
4701
|
var _b;
|
|
4601
4702
|
var _c = __read(_a, 1), fn = _c[0];
|
|
4703
|
+
var fun = asFunctionLike(fn, sourceCodeInfo);
|
|
4602
4704
|
return _b = {},
|
|
4603
4705
|
_b[FUNCTION_SYMBOL] = true,
|
|
4604
4706
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4605
4707
|
_b.functionType = 'Complement',
|
|
4606
|
-
_b.function =
|
|
4708
|
+
_b.function = fun,
|
|
4709
|
+
_b.paramCount = getParamCountFromFunction(fun),
|
|
4607
4710
|
_b;
|
|
4608
4711
|
},
|
|
4609
4712
|
paramCount: 1,
|
|
@@ -4616,6 +4719,7 @@ var functionalNormalExpression = {
|
|
|
4616
4719
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4617
4720
|
_a.functionType = 'EveryPred',
|
|
4618
4721
|
_a.params = params,
|
|
4722
|
+
_a.paramCount = 1,
|
|
4619
4723
|
_a;
|
|
4620
4724
|
},
|
|
4621
4725
|
paramCount: { min: 1 },
|
|
@@ -4628,6 +4732,7 @@ var functionalNormalExpression = {
|
|
|
4628
4732
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4629
4733
|
_a.functionType = 'SomePred',
|
|
4630
4734
|
_a.params = params,
|
|
4735
|
+
_a.paramCount = 1,
|
|
4631
4736
|
_a;
|
|
4632
4737
|
},
|
|
4633
4738
|
paramCount: { min: 1 },
|
|
@@ -4636,12 +4741,14 @@ var functionalNormalExpression = {
|
|
|
4636
4741
|
evaluate: function (_a, sourceCodeInfo) {
|
|
4637
4742
|
var _b;
|
|
4638
4743
|
var _c = __read(_a), fn = _c[0], params = _c.slice(1);
|
|
4744
|
+
var fun = asFunctionLike(fn, sourceCodeInfo);
|
|
4639
4745
|
return _b = {},
|
|
4640
4746
|
_b[FUNCTION_SYMBOL] = true,
|
|
4641
4747
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4642
4748
|
_b.functionType = 'Fnull',
|
|
4643
|
-
_b.function =
|
|
4749
|
+
_b.function = fun,
|
|
4644
4750
|
_b.params = params,
|
|
4751
|
+
_b.paramCount = getParamCountFromFunction(fun),
|
|
4645
4752
|
_b;
|
|
4646
4753
|
},
|
|
4647
4754
|
paramCount: { min: 2 },
|
|
@@ -11716,12 +11823,16 @@ var functionSpecialExpression = {
|
|
|
11716
11823
|
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
11717
11824
|
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
11718
11825
|
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11826
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11827
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11828
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11719
11829
|
var litsFunction = (_b = {},
|
|
11720
11830
|
_b[FUNCTION_SYMBOL] = true,
|
|
11721
11831
|
_b.sourceCodeInfo = node[2],
|
|
11722
11832
|
_b.functionType = 'UserDefined',
|
|
11723
11833
|
_b.name = functionSymbol[1],
|
|
11724
11834
|
_b.evaluatedfunction = evaluatedFunction,
|
|
11835
|
+
_b.paramCount = paramCount,
|
|
11725
11836
|
_b);
|
|
11726
11837
|
contextStack.addValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
|
|
11727
11838
|
return litsFunction;
|
|
@@ -11743,13 +11854,16 @@ var defnSpecialExpression = {
|
|
|
11743
11854
|
var _d = __read(node[1], 3), functionSymbol = _d[1], fn = _d[2];
|
|
11744
11855
|
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
11745
11856
|
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
11746
|
-
var
|
|
11857
|
+
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11858
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11859
|
+
var paramCount = { min: min };
|
|
11747
11860
|
var litsFunction = (_b = {},
|
|
11748
11861
|
_b[FUNCTION_SYMBOL] = true,
|
|
11749
11862
|
_b.sourceCodeInfo = node[2],
|
|
11750
11863
|
_b.functionType = 'UserDefined',
|
|
11751
11864
|
_b.name = functionSymbol[1],
|
|
11752
|
-
_b.evaluatedfunction =
|
|
11865
|
+
_b.evaluatedfunction = evaluatedFunction,
|
|
11866
|
+
_b.paramCount = paramCount,
|
|
11753
11867
|
_b);
|
|
11754
11868
|
contextStack.exportValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
|
|
11755
11869
|
return litsFunction;
|
|
@@ -11771,12 +11885,16 @@ var fnSpecialExpression = {
|
|
|
11771
11885
|
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
|
|
11772
11886
|
var fn = node[1][1];
|
|
11773
11887
|
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11888
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11889
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11890
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11774
11891
|
var litsFunction = (_b = {},
|
|
11775
11892
|
_b[FUNCTION_SYMBOL] = true,
|
|
11776
11893
|
_b.sourceCodeInfo = node[2],
|
|
11777
11894
|
_b.functionType = 'UserDefined',
|
|
11778
11895
|
_b.name = undefined,
|
|
11779
11896
|
_b.evaluatedfunction = evaluatedFunction,
|
|
11897
|
+
_b.paramCount = paramCount,
|
|
11780
11898
|
_b);
|
|
11781
11899
|
return litsFunction;
|
|
11782
11900
|
},
|
|
@@ -12392,12 +12510,6 @@ new Set(specialExpressionKeys);
|
|
|
12392
12510
|
// TODO, remove
|
|
12393
12511
|
// console.log('builtin', [...specialExpressionKeys, ...normalExpressionKeys].length)
|
|
12394
12512
|
|
|
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
12513
|
var functionExecutors = {
|
|
12402
12514
|
NativeJsFunction: function (fn, params, sourceCodeInfo) {
|
|
12403
12515
|
var _a;
|
|
@@ -12417,7 +12529,10 @@ var functionExecutors = {
|
|
|
12417
12529
|
var evaluateNode = _a.evaluateNode;
|
|
12418
12530
|
var _loop_1 = function () {
|
|
12419
12531
|
var e_1, _b;
|
|
12420
|
-
|
|
12532
|
+
if (!paramCountAcceptsMin(fn.paramCount, params.length)) {
|
|
12533
|
+
throw new LitsError("Expected ".concat(fn.paramCount, " arguments, got ").concat(params.length, "."), sourceCodeInfo);
|
|
12534
|
+
}
|
|
12535
|
+
// checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo)
|
|
12421
12536
|
var evaluatedFunction = fn.evaluatedfunction;
|
|
12422
12537
|
var args = evaluatedFunction[0];
|
|
12423
12538
|
var nbrOfNonRestArgs = args.filter(function (arg) { return arg[0] !== bindingTargetTypes.rest; }).length;
|
|
@@ -12714,6 +12829,7 @@ function evaluateNormalExpression(node, contextStack) {
|
|
|
12714
12829
|
_a.params = params,
|
|
12715
12830
|
_a.placeholders = placeholders,
|
|
12716
12831
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
12832
|
+
_a.paramCount = placeholders.length,
|
|
12717
12833
|
_a);
|
|
12718
12834
|
return partialFunction;
|
|
12719
12835
|
}
|
|
@@ -12736,11 +12852,12 @@ function evaluateNormalExpression(node, contextStack) {
|
|
|
12736
12852
|
if (placeholders.length > 0) {
|
|
12737
12853
|
var partialFunction = (_b = {},
|
|
12738
12854
|
_b[FUNCTION_SYMBOL] = true,
|
|
12739
|
-
_b.function =
|
|
12855
|
+
_b.function = fn,
|
|
12740
12856
|
_b.functionType = 'Partial',
|
|
12741
12857
|
_b.params = params,
|
|
12742
12858
|
_b.placeholders = placeholders,
|
|
12743
12859
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
12860
|
+
_b.paramCount = placeholders.length,
|
|
12744
12861
|
_b);
|
|
12745
12862
|
return partialFunction;
|
|
12746
12863
|
}
|
|
@@ -12962,11 +13079,13 @@ var ContextStackImpl = /** @class */ (function () {
|
|
|
12962
13079
|
}
|
|
12963
13080
|
if (isNormalBuiltinSymbolNode(node)) {
|
|
12964
13081
|
var type = node[1];
|
|
13082
|
+
var normalExpression = allNormalExpressions[type];
|
|
12965
13083
|
return _b = {},
|
|
12966
13084
|
_b[FUNCTION_SYMBOL] = true,
|
|
12967
13085
|
_b.functionType = 'Builtin',
|
|
12968
13086
|
_b.normalBuitinSymbolType = type,
|
|
12969
13087
|
_b.sourceCodeInfo = node[2],
|
|
13088
|
+
_b.paramCount = normalExpression.paramCount,
|
|
12970
13089
|
_b;
|
|
12971
13090
|
}
|
|
12972
13091
|
var lookUpResult = this.lookUp(node);
|
|
@@ -12988,7 +13107,8 @@ function createContextStack(params) {
|
|
|
12988
13107
|
nativeJsFunctions: params.jsFunctions
|
|
12989
13108
|
&& Object.entries(params.jsFunctions).reduce(function (acc, _a) {
|
|
12990
13109
|
var _b;
|
|
12991
|
-
var _c
|
|
13110
|
+
var _c;
|
|
13111
|
+
var _d = __read(_a, 2), name = _d[0], jsFunction = _d[1];
|
|
12992
13112
|
if (specialExpressionKeys.includes(name)) {
|
|
12993
13113
|
console.warn("Cannot shadow special expression \"".concat(name, "\", ignoring."));
|
|
12994
13114
|
return acc;
|
|
@@ -13003,6 +13123,7 @@ function createContextStack(params) {
|
|
|
13003
13123
|
name: name
|
|
13004
13124
|
},
|
|
13005
13125
|
_b[FUNCTION_SYMBOL] = true,
|
|
13126
|
+
_b.paramCount = (_c = jsFunction.paramCount) !== null && _c !== void 0 ? _c : {},
|
|
13006
13127
|
_b);
|
|
13007
13128
|
return acc;
|
|
13008
13129
|
}, {}),
|