@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/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 = asFunctionLike(fn, sourceCodeInfo),
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 = asFunctionLike(fn, sourceCodeInfo),
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 evaluatedFunctionOverloades = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
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 = evaluatedFunctionOverloades,
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
- checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo);
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 = asFunctionLike(fn, sourceCodeInfo),
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
  }, {}),