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