@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/index.js
CHANGED
|
@@ -747,17 +747,6 @@ function clone(value) {
|
|
|
747
747
|
function cloneColl(value) {
|
|
748
748
|
return clone(value);
|
|
749
749
|
}
|
|
750
|
-
function createNativeJsFunction(fn, name) {
|
|
751
|
-
var _a;
|
|
752
|
-
return _a = {},
|
|
753
|
-
_a[FUNCTION_SYMBOL] = true,
|
|
754
|
-
_a.nativeFn = {
|
|
755
|
-
fn: fn,
|
|
756
|
-
},
|
|
757
|
-
_a.name = name,
|
|
758
|
-
_a.functionType = 'NativeJsFunction',
|
|
759
|
-
_a;
|
|
760
|
-
}
|
|
761
750
|
function joinSets() {
|
|
762
751
|
var e_1, _a;
|
|
763
752
|
var results = [];
|
|
@@ -4432,6 +4421,98 @@ function applyPlaceholders(templateString, placeholders, sourceCodeInfo) {
|
|
|
4432
4421
|
return templateString;
|
|
4433
4422
|
}
|
|
4434
4423
|
|
|
4424
|
+
function paramCountAccepts(paramsCount, nbrOfParams) {
|
|
4425
|
+
if (typeof paramsCount === 'number') {
|
|
4426
|
+
return paramsCount === nbrOfParams;
|
|
4427
|
+
}
|
|
4428
|
+
var min = paramsCount.min, max = paramsCount.max, even = paramsCount.even, odd = paramsCount.odd;
|
|
4429
|
+
if (even && nbrOfParams % 2 !== 0) {
|
|
4430
|
+
return false;
|
|
4431
|
+
}
|
|
4432
|
+
if (odd && nbrOfParams % 2 !== 1) {
|
|
4433
|
+
return false;
|
|
4434
|
+
}
|
|
4435
|
+
if (typeof min === 'number' && nbrOfParams < min) {
|
|
4436
|
+
return false;
|
|
4437
|
+
}
|
|
4438
|
+
if (typeof max === 'number' && nbrOfParams > max) {
|
|
4439
|
+
return false;
|
|
4440
|
+
}
|
|
4441
|
+
return true;
|
|
4442
|
+
}
|
|
4443
|
+
function paramCountAcceptsMin(paramsCount, nbrOfParams) {
|
|
4444
|
+
if (typeof paramsCount === 'number') {
|
|
4445
|
+
return nbrOfParams >= paramsCount;
|
|
4446
|
+
}
|
|
4447
|
+
var min = paramsCount.min;
|
|
4448
|
+
if (typeof min === 'number' && nbrOfParams < min) {
|
|
4449
|
+
return false;
|
|
4450
|
+
}
|
|
4451
|
+
return true;
|
|
4452
|
+
}
|
|
4453
|
+
function getCommonParamCountFromFunctions(params) {
|
|
4454
|
+
return params.reduce(function (acc, param) {
|
|
4455
|
+
if (acc === null) {
|
|
4456
|
+
return null;
|
|
4457
|
+
}
|
|
4458
|
+
var paramCount = (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
|
|
4459
|
+
if (typeof acc === 'number' && typeof paramCount === 'number') {
|
|
4460
|
+
return acc === paramCount ? acc : null;
|
|
4461
|
+
}
|
|
4462
|
+
if (typeof paramCount === 'number') {
|
|
4463
|
+
if (paramCountAccepts(acc, paramCount)) {
|
|
4464
|
+
return paramCount;
|
|
4465
|
+
}
|
|
4466
|
+
return null;
|
|
4467
|
+
}
|
|
4468
|
+
if (typeof acc === 'number') {
|
|
4469
|
+
if (paramCountAccepts(paramCount, acc)) {
|
|
4470
|
+
return acc;
|
|
4471
|
+
}
|
|
4472
|
+
return null;
|
|
4473
|
+
}
|
|
4474
|
+
var aMin = paramCount.min, aMax = paramCount.max, aEven = paramCount.even, aOdd = paramCount.odd;
|
|
4475
|
+
var bMin = acc.min, bMax = acc.max, bEven = acc.even, bOdd = acc.odd;
|
|
4476
|
+
var min = typeof aMin === 'number' && typeof bMin === 'number'
|
|
4477
|
+
? Math.max(aMin, bMin)
|
|
4478
|
+
: typeof aMin === 'number' ? aMin : typeof bMin === 'number' ? bMin : undefined;
|
|
4479
|
+
var max = typeof aMax === 'number' && typeof bMax === 'number'
|
|
4480
|
+
? Math.min(aMax, bMax)
|
|
4481
|
+
: typeof aMax === 'number' ? aMax : typeof bMax === 'number' ? bMax : undefined;
|
|
4482
|
+
var even = aEven !== null && aEven !== void 0 ? aEven : bEven;
|
|
4483
|
+
var odd = aOdd !== null && aOdd !== void 0 ? aOdd : bOdd;
|
|
4484
|
+
if (even && odd) {
|
|
4485
|
+
return null;
|
|
4486
|
+
}
|
|
4487
|
+
if (even) {
|
|
4488
|
+
if (typeof min === 'number' && min % 2 !== 0) {
|
|
4489
|
+
min += 1;
|
|
4490
|
+
}
|
|
4491
|
+
if (typeof max === 'number' && max % 2 !== 0) {
|
|
4492
|
+
max -= 1;
|
|
4493
|
+
}
|
|
4494
|
+
}
|
|
4495
|
+
if (odd) {
|
|
4496
|
+
if (typeof min === 'number' && min % 2 === 0) {
|
|
4497
|
+
min += 1;
|
|
4498
|
+
}
|
|
4499
|
+
if (typeof max === 'number' && max % 2 === 0) {
|
|
4500
|
+
max -= 1;
|
|
4501
|
+
}
|
|
4502
|
+
}
|
|
4503
|
+
if (typeof min === 'number' && typeof max === 'number' && min > max) {
|
|
4504
|
+
return null;
|
|
4505
|
+
}
|
|
4506
|
+
if (typeof min === 'number' && min === max) {
|
|
4507
|
+
return min;
|
|
4508
|
+
}
|
|
4509
|
+
return { min: min, max: max, even: even, odd: odd };
|
|
4510
|
+
}, {});
|
|
4511
|
+
}
|
|
4512
|
+
function getParamCountFromFunction(param) {
|
|
4513
|
+
return (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
|
|
4514
|
+
}
|
|
4515
|
+
|
|
4435
4516
|
var functionalNormalExpression = {
|
|
4436
4517
|
'|>': {
|
|
4437
4518
|
evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
|
|
@@ -4465,11 +4546,13 @@ var functionalNormalExpression = {
|
|
|
4465
4546
|
'comp': {
|
|
4466
4547
|
evaluate: function (params, sourceCodeInfo) {
|
|
4467
4548
|
var _a;
|
|
4549
|
+
params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
|
|
4468
4550
|
return _a = {},
|
|
4469
4551
|
_a[FUNCTION_SYMBOL] = true,
|
|
4470
4552
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4471
4553
|
_a.functionType = 'Comp',
|
|
4472
4554
|
_a.params = params,
|
|
4555
|
+
_a.paramCount = params.length > 0 ? getParamCountFromFunction(params.at(-1)) : 1,
|
|
4473
4556
|
_a;
|
|
4474
4557
|
},
|
|
4475
4558
|
paramCount: {},
|
|
@@ -4483,6 +4566,7 @@ var functionalNormalExpression = {
|
|
|
4483
4566
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4484
4567
|
_b.functionType = 'Constantly',
|
|
4485
4568
|
_b.value = toAny(value),
|
|
4569
|
+
_b.paramCount = {},
|
|
4486
4570
|
_b;
|
|
4487
4571
|
},
|
|
4488
4572
|
paramCount: 1,
|
|
@@ -4490,11 +4574,17 @@ var functionalNormalExpression = {
|
|
|
4490
4574
|
'juxt': {
|
|
4491
4575
|
evaluate: function (params, sourceCodeInfo) {
|
|
4492
4576
|
var _a;
|
|
4577
|
+
params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
|
|
4578
|
+
var paramCount = getCommonParamCountFromFunctions(params);
|
|
4579
|
+
if (paramCount === null) {
|
|
4580
|
+
throw new LitsError('All functions must accept the same number of arguments', sourceCodeInfo);
|
|
4581
|
+
}
|
|
4493
4582
|
return _a = {},
|
|
4494
4583
|
_a[FUNCTION_SYMBOL] = true,
|
|
4495
4584
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4496
4585
|
_a.functionType = 'Juxt',
|
|
4497
4586
|
_a.params = params,
|
|
4587
|
+
_a.paramCount = paramCount,
|
|
4498
4588
|
_a;
|
|
4499
4589
|
},
|
|
4500
4590
|
paramCount: { min: 1 },
|
|
@@ -4503,11 +4593,13 @@ var functionalNormalExpression = {
|
|
|
4503
4593
|
evaluate: function (_a, sourceCodeInfo) {
|
|
4504
4594
|
var _b;
|
|
4505
4595
|
var _c = __read(_a, 1), fn = _c[0];
|
|
4596
|
+
var fun = asFunctionLike(fn, sourceCodeInfo);
|
|
4506
4597
|
return _b = {},
|
|
4507
4598
|
_b[FUNCTION_SYMBOL] = true,
|
|
4508
4599
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4509
4600
|
_b.functionType = 'Complement',
|
|
4510
|
-
_b.function =
|
|
4601
|
+
_b.function = fun,
|
|
4602
|
+
_b.paramCount = getParamCountFromFunction(fun),
|
|
4511
4603
|
_b;
|
|
4512
4604
|
},
|
|
4513
4605
|
paramCount: 1,
|
|
@@ -4520,6 +4612,7 @@ var functionalNormalExpression = {
|
|
|
4520
4612
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4521
4613
|
_a.functionType = 'EveryPred',
|
|
4522
4614
|
_a.params = params,
|
|
4615
|
+
_a.paramCount = 1,
|
|
4523
4616
|
_a;
|
|
4524
4617
|
},
|
|
4525
4618
|
paramCount: { min: 1 },
|
|
@@ -4532,6 +4625,7 @@ var functionalNormalExpression = {
|
|
|
4532
4625
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
4533
4626
|
_a.functionType = 'SomePred',
|
|
4534
4627
|
_a.params = params,
|
|
4628
|
+
_a.paramCount = 1,
|
|
4535
4629
|
_a;
|
|
4536
4630
|
},
|
|
4537
4631
|
paramCount: { min: 1 },
|
|
@@ -4540,12 +4634,14 @@ var functionalNormalExpression = {
|
|
|
4540
4634
|
evaluate: function (_a, sourceCodeInfo) {
|
|
4541
4635
|
var _b;
|
|
4542
4636
|
var _c = __read(_a), fn = _c[0], params = _c.slice(1);
|
|
4637
|
+
var fun = asFunctionLike(fn, sourceCodeInfo);
|
|
4543
4638
|
return _b = {},
|
|
4544
4639
|
_b[FUNCTION_SYMBOL] = true,
|
|
4545
4640
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
4546
4641
|
_b.functionType = 'Fnull',
|
|
4547
|
-
_b.function =
|
|
4642
|
+
_b.function = fun,
|
|
4548
4643
|
_b.params = params,
|
|
4644
|
+
_b.paramCount = getParamCountFromFunction(fun),
|
|
4549
4645
|
_b;
|
|
4550
4646
|
},
|
|
4551
4647
|
paramCount: { min: 2 },
|
|
@@ -11685,12 +11781,16 @@ var functionSpecialExpression = {
|
|
|
11685
11781
|
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
11686
11782
|
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
11687
11783
|
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11784
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11785
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11786
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11688
11787
|
var litsFunction = (_b = {},
|
|
11689
11788
|
_b[FUNCTION_SYMBOL] = true,
|
|
11690
11789
|
_b.sourceCodeInfo = node[2],
|
|
11691
11790
|
_b.functionType = 'UserDefined',
|
|
11692
11791
|
_b.name = functionSymbol[1],
|
|
11693
11792
|
_b.evaluatedfunction = evaluatedFunction,
|
|
11793
|
+
_b.paramCount = paramCount,
|
|
11694
11794
|
_b);
|
|
11695
11795
|
contextStack.addValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
|
|
11696
11796
|
return litsFunction;
|
|
@@ -11712,13 +11812,16 @@ var defnSpecialExpression = {
|
|
|
11712
11812
|
var _d = __read(node[1], 3), functionSymbol = _d[1], fn = _d[2];
|
|
11713
11813
|
assertUserDefinedSymbolNode(functionSymbol, node[2]);
|
|
11714
11814
|
assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
|
|
11715
|
-
var
|
|
11815
|
+
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11816
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11817
|
+
var paramCount = { min: min };
|
|
11716
11818
|
var litsFunction = (_b = {},
|
|
11717
11819
|
_b[FUNCTION_SYMBOL] = true,
|
|
11718
11820
|
_b.sourceCodeInfo = node[2],
|
|
11719
11821
|
_b.functionType = 'UserDefined',
|
|
11720
11822
|
_b.name = functionSymbol[1],
|
|
11721
|
-
_b.evaluatedfunction =
|
|
11823
|
+
_b.evaluatedfunction = evaluatedFunction,
|
|
11824
|
+
_b.paramCount = paramCount,
|
|
11722
11825
|
_b);
|
|
11723
11826
|
contextStack.exportValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
|
|
11724
11827
|
return litsFunction;
|
|
@@ -11740,12 +11843,16 @@ var fnSpecialExpression = {
|
|
|
11740
11843
|
var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
|
|
11741
11844
|
var fn = node[1][1];
|
|
11742
11845
|
var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
|
|
11846
|
+
var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
|
|
11847
|
+
var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
|
|
11848
|
+
var paramCount = min === max ? min : { min: min, max: max };
|
|
11743
11849
|
var litsFunction = (_b = {},
|
|
11744
11850
|
_b[FUNCTION_SYMBOL] = true,
|
|
11745
11851
|
_b.sourceCodeInfo = node[2],
|
|
11746
11852
|
_b.functionType = 'UserDefined',
|
|
11747
11853
|
_b.name = undefined,
|
|
11748
11854
|
_b.evaluatedfunction = evaluatedFunction,
|
|
11855
|
+
_b.paramCount = paramCount,
|
|
11749
11856
|
_b);
|
|
11750
11857
|
return litsFunction;
|
|
11751
11858
|
},
|
|
@@ -12451,12 +12558,6 @@ function findUnresolvedSymbolsInNode(node, contextStack, builtin, evaluateNode)
|
|
|
12451
12558
|
}
|
|
12452
12559
|
}
|
|
12453
12560
|
|
|
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
12561
|
var functionExecutors = {
|
|
12461
12562
|
NativeJsFunction: function (fn, params, sourceCodeInfo) {
|
|
12462
12563
|
var _a;
|
|
@@ -12476,7 +12577,10 @@ var functionExecutors = {
|
|
|
12476
12577
|
var evaluateNode = _a.evaluateNode;
|
|
12477
12578
|
var _loop_1 = function () {
|
|
12478
12579
|
var e_1, _b;
|
|
12479
|
-
|
|
12580
|
+
if (!paramCountAcceptsMin(fn.paramCount, params.length)) {
|
|
12581
|
+
throw new LitsError("Expected ".concat(fn.paramCount, " arguments, got ").concat(params.length, "."), sourceCodeInfo);
|
|
12582
|
+
}
|
|
12583
|
+
// checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo)
|
|
12480
12584
|
var evaluatedFunction = fn.evaluatedfunction;
|
|
12481
12585
|
var args = evaluatedFunction[0];
|
|
12482
12586
|
var nbrOfNonRestArgs = args.filter(function (arg) { return arg[0] !== bindingTargetTypes.rest; }).length;
|
|
@@ -12773,6 +12877,7 @@ function evaluateNormalExpression(node, contextStack) {
|
|
|
12773
12877
|
_a.params = params,
|
|
12774
12878
|
_a.placeholders = placeholders,
|
|
12775
12879
|
_a.sourceCodeInfo = sourceCodeInfo,
|
|
12880
|
+
_a.paramCount = placeholders.length,
|
|
12776
12881
|
_a);
|
|
12777
12882
|
return partialFunction;
|
|
12778
12883
|
}
|
|
@@ -12795,11 +12900,12 @@ function evaluateNormalExpression(node, contextStack) {
|
|
|
12795
12900
|
if (placeholders.length > 0) {
|
|
12796
12901
|
var partialFunction = (_b = {},
|
|
12797
12902
|
_b[FUNCTION_SYMBOL] = true,
|
|
12798
|
-
_b.function =
|
|
12903
|
+
_b.function = fn,
|
|
12799
12904
|
_b.functionType = 'Partial',
|
|
12800
12905
|
_b.params = params,
|
|
12801
12906
|
_b.placeholders = placeholders,
|
|
12802
12907
|
_b.sourceCodeInfo = sourceCodeInfo,
|
|
12908
|
+
_b.paramCount = placeholders.length,
|
|
12803
12909
|
_b);
|
|
12804
12910
|
return partialFunction;
|
|
12805
12911
|
}
|
|
@@ -13021,11 +13127,13 @@ var ContextStackImpl = /** @class */ (function () {
|
|
|
13021
13127
|
}
|
|
13022
13128
|
if (isNormalBuiltinSymbolNode(node)) {
|
|
13023
13129
|
var type = node[1];
|
|
13130
|
+
var normalExpression = allNormalExpressions[type];
|
|
13024
13131
|
return _b = {},
|
|
13025
13132
|
_b[FUNCTION_SYMBOL] = true,
|
|
13026
13133
|
_b.functionType = 'Builtin',
|
|
13027
13134
|
_b.normalBuitinSymbolType = type,
|
|
13028
13135
|
_b.sourceCodeInfo = node[2],
|
|
13136
|
+
_b.paramCount = normalExpression.paramCount,
|
|
13029
13137
|
_b;
|
|
13030
13138
|
}
|
|
13031
13139
|
var lookUpResult = this.lookUp(node);
|
|
@@ -13047,7 +13155,8 @@ function createContextStack(params) {
|
|
|
13047
13155
|
nativeJsFunctions: params.jsFunctions
|
|
13048
13156
|
&& Object.entries(params.jsFunctions).reduce(function (acc, _a) {
|
|
13049
13157
|
var _b;
|
|
13050
|
-
var _c
|
|
13158
|
+
var _c;
|
|
13159
|
+
var _d = __read(_a, 2), name = _d[0], jsFunction = _d[1];
|
|
13051
13160
|
if (specialExpressionKeys.includes(name)) {
|
|
13052
13161
|
console.warn("Cannot shadow special expression \"".concat(name, "\", ignoring."));
|
|
13053
13162
|
return acc;
|
|
@@ -13062,6 +13171,7 @@ function createContextStack(params) {
|
|
|
13062
13171
|
name: name
|
|
13063
13172
|
},
|
|
13064
13173
|
_b[FUNCTION_SYMBOL] = true,
|
|
13174
|
+
_b.paramCount = (_c = jsFunction.paramCount) !== null && _c !== void 0 ? _c : {},
|
|
13065
13175
|
_b);
|
|
13066
13176
|
return acc;
|
|
13067
13177
|
}, {}),
|
|
@@ -31094,7 +31204,6 @@ exports.asUserDefinedFunction = asUserDefinedFunction;
|
|
|
31094
31204
|
exports.assertLitsFunction = assertLitsFunction;
|
|
31095
31205
|
exports.assertNativeJsFunction = assertNativeJsFunction;
|
|
31096
31206
|
exports.assertUserDefinedFunction = assertUserDefinedFunction;
|
|
31097
|
-
exports.createNativeJsFunction = createNativeJsFunction;
|
|
31098
31207
|
exports.isApiName = isApiName;
|
|
31099
31208
|
exports.isBuiltinFunction = isBuiltinFunction;
|
|
31100
31209
|
exports.isDataType = isDataType;
|