@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.
@@ -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 = asFunctionLike(fn, sourceCodeInfo),
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 = asFunctionLike(fn, sourceCodeInfo),
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 evaluatedFunctionOverloades = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
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 = evaluatedFunctionOverloades,
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
- checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo);
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 = asFunctionLike(fn, sourceCodeInfo),
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 = __read(_a, 2), name = _c[0], jsFunction = _c[1];
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
  }, {}),