@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.js CHANGED
@@ -756,6 +756,7 @@ function createNativeJsFunction(fn, name) {
756
756
  },
757
757
  _a.name = name,
758
758
  _a.functionType = 'NativeJsFunction',
759
+ _a.paramCount = {},
759
760
  _a;
760
761
  }
761
762
  function joinSets() {
@@ -802,6 +803,91 @@ function approxEqual(a, b, epsilon) {
802
803
  function approxZero(value) {
803
804
  return Math.abs(value) < EPSILON;
804
805
  }
806
+ function paramCountAccepts(paramsCount, nbrOfParams) {
807
+ if (typeof paramsCount === 'number') {
808
+ return paramsCount === nbrOfParams;
809
+ }
810
+ var min = paramsCount.min, max = paramsCount.max, even = paramsCount.even, odd = paramsCount.odd;
811
+ if (even && nbrOfParams % 2 !== 0) {
812
+ return false;
813
+ }
814
+ if (odd && nbrOfParams % 2 !== 1) {
815
+ return false;
816
+ }
817
+ if (typeof min === 'number' && nbrOfParams < min) {
818
+ return false;
819
+ }
820
+ if (typeof max === 'number' && nbrOfParams > max) {
821
+ return false;
822
+ }
823
+ return true;
824
+ }
825
+ function paramCountAcceptsMin(paramsCount, nbrOfParams) {
826
+ if (typeof paramsCount === 'number') {
827
+ return nbrOfParams >= paramsCount;
828
+ }
829
+ var min = paramsCount.min;
830
+ if (typeof min === 'number' && nbrOfParams < min) {
831
+ return false;
832
+ }
833
+ return true;
834
+ }
835
+ function getCommonParamCount(params) {
836
+ return params.reduce(function (acc, param) {
837
+ if (acc === null) {
838
+ return null;
839
+ }
840
+ var paramCount = (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
841
+ if (typeof acc === 'number' && typeof paramCount === 'number') {
842
+ return acc === paramCount ? acc : null;
843
+ }
844
+ if (typeof paramCount === 'number') {
845
+ if (paramCountAccepts(acc, paramCount)) {
846
+ return paramCount;
847
+ }
848
+ return null;
849
+ }
850
+ if (typeof acc === 'number') {
851
+ if (paramCountAccepts(paramCount, acc)) {
852
+ return acc;
853
+ }
854
+ return null;
855
+ }
856
+ var aMin = paramCount.min, aMax = paramCount.max, aEven = paramCount.even, aOdd = paramCount.odd;
857
+ var bMin = acc.min, bMax = acc.max, bEven = acc.even, bOdd = acc.odd;
858
+ var min = typeof aMin === 'number' && typeof bMin === 'number'
859
+ ? Math.max(aMin, bMin)
860
+ : typeof aMin === 'number' ? aMin : typeof bMin === 'number' ? bMin : undefined;
861
+ var max = typeof aMax === 'number' && typeof bMax === 'number'
862
+ ? Math.min(aMax, bMax)
863
+ : typeof aMax === 'number' ? aMax : typeof bMax === 'number' ? bMax : undefined;
864
+ var even = aEven !== null && aEven !== void 0 ? aEven : bEven;
865
+ var odd = aOdd !== null && aOdd !== void 0 ? aOdd : bOdd;
866
+ if (min !== undefined && max !== undefined && min > max) {
867
+ return null;
868
+ }
869
+ if (even && odd) {
870
+ return null;
871
+ }
872
+ if (odd && min !== undefined && min < 1) {
873
+ return null;
874
+ }
875
+ return { min: min, max: max, even: even, odd: odd };
876
+ }, {});
877
+ }
878
+ function getParamCount(param) {
879
+ return (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
880
+ }
881
+ function paramCountMinus(paramCount, count) {
882
+ if (typeof paramCount === 'number') {
883
+ return paramCount - count;
884
+ }
885
+ var min = paramCount.min === undefined ? undefined : paramCount.min - count;
886
+ var max = paramCount.max === undefined ? undefined : paramCount.max - count;
887
+ var even = paramCount.even === undefined ? undefined : count % 2 === 0 ? true : undefined;
888
+ var odd = paramCount.odd === undefined ? undefined : count % 2 === 0 ? true : undefined;
889
+ return { min: min, max: max, even: even, odd: odd };
890
+ }
805
891
 
806
892
  // isArray not needed, use Array.isArary
807
893
  function asArray(value, sourceCodeInfo) {
@@ -4465,11 +4551,13 @@ var functionalNormalExpression = {
4465
4551
  'comp': {
4466
4552
  evaluate: function (params, sourceCodeInfo) {
4467
4553
  var _a;
4554
+ params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
4468
4555
  return _a = {},
4469
4556
  _a[FUNCTION_SYMBOL] = true,
4470
4557
  _a.sourceCodeInfo = sourceCodeInfo,
4471
4558
  _a.functionType = 'Comp',
4472
4559
  _a.params = params,
4560
+ _a.paramCount = params.length > 0 ? getParamCount(params.at(-1)) : 1,
4473
4561
  _a;
4474
4562
  },
4475
4563
  paramCount: {},
@@ -4483,6 +4571,7 @@ var functionalNormalExpression = {
4483
4571
  _b.sourceCodeInfo = sourceCodeInfo,
4484
4572
  _b.functionType = 'Constantly',
4485
4573
  _b.value = toAny(value),
4574
+ _b.paramCount = {},
4486
4575
  _b;
4487
4576
  },
4488
4577
  paramCount: 1,
@@ -4490,11 +4579,17 @@ var functionalNormalExpression = {
4490
4579
  'juxt': {
4491
4580
  evaluate: function (params, sourceCodeInfo) {
4492
4581
  var _a;
4582
+ params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
4583
+ var paramCount = getCommonParamCount(params);
4584
+ if (paramCount === null) {
4585
+ throw new LitsError('All functions must accept the same number of arguments', sourceCodeInfo);
4586
+ }
4493
4587
  return _a = {},
4494
4588
  _a[FUNCTION_SYMBOL] = true,
4495
4589
  _a.sourceCodeInfo = sourceCodeInfo,
4496
4590
  _a.functionType = 'Juxt',
4497
4591
  _a.params = params,
4592
+ _a.paramCount = paramCount,
4498
4593
  _a;
4499
4594
  },
4500
4595
  paramCount: { min: 1 },
@@ -4503,11 +4598,13 @@ var functionalNormalExpression = {
4503
4598
  evaluate: function (_a, sourceCodeInfo) {
4504
4599
  var _b;
4505
4600
  var _c = __read(_a, 1), fn = _c[0];
4601
+ var fun = asFunctionLike(fn, sourceCodeInfo);
4506
4602
  return _b = {},
4507
4603
  _b[FUNCTION_SYMBOL] = true,
4508
4604
  _b.sourceCodeInfo = sourceCodeInfo,
4509
4605
  _b.functionType = 'Complement',
4510
- _b.function = asFunctionLike(fn, sourceCodeInfo),
4606
+ _b.function = fun,
4607
+ _b.paramCount = getParamCount(fun),
4511
4608
  _b;
4512
4609
  },
4513
4610
  paramCount: 1,
@@ -4520,6 +4617,7 @@ var functionalNormalExpression = {
4520
4617
  _a.sourceCodeInfo = sourceCodeInfo,
4521
4618
  _a.functionType = 'EveryPred',
4522
4619
  _a.params = params,
4620
+ _a.paramCount = 1,
4523
4621
  _a;
4524
4622
  },
4525
4623
  paramCount: { min: 1 },
@@ -4532,6 +4630,7 @@ var functionalNormalExpression = {
4532
4630
  _a.sourceCodeInfo = sourceCodeInfo,
4533
4631
  _a.functionType = 'SomePred',
4534
4632
  _a.params = params,
4633
+ _a.paramCount = 1,
4535
4634
  _a;
4536
4635
  },
4537
4636
  paramCount: { min: 1 },
@@ -4540,12 +4639,14 @@ var functionalNormalExpression = {
4540
4639
  evaluate: function (_a, sourceCodeInfo) {
4541
4640
  var _b;
4542
4641
  var _c = __read(_a), fn = _c[0], params = _c.slice(1);
4642
+ var fun = asFunctionLike(fn, sourceCodeInfo);
4543
4643
  return _b = {},
4544
4644
  _b[FUNCTION_SYMBOL] = true,
4545
4645
  _b.sourceCodeInfo = sourceCodeInfo,
4546
4646
  _b.functionType = 'Fnull',
4547
- _b.function = asFunctionLike(fn, sourceCodeInfo),
4647
+ _b.function = fun,
4548
4648
  _b.params = params,
4649
+ _b.paramCount = getParamCount(fun),
4549
4650
  _b;
4550
4651
  },
4551
4652
  paramCount: { min: 2 },
@@ -11685,12 +11786,16 @@ var functionSpecialExpression = {
11685
11786
  assertUserDefinedSymbolNode(functionSymbol, node[2]);
11686
11787
  assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
11687
11788
  var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11789
+ var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
11790
+ var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
11791
+ var paramCount = min === max ? min : { min: min, max: max };
11688
11792
  var litsFunction = (_b = {},
11689
11793
  _b[FUNCTION_SYMBOL] = true,
11690
11794
  _b.sourceCodeInfo = node[2],
11691
11795
  _b.functionType = 'UserDefined',
11692
11796
  _b.name = functionSymbol[1],
11693
11797
  _b.evaluatedfunction = evaluatedFunction,
11798
+ _b.paramCount = paramCount,
11694
11799
  _b);
11695
11800
  contextStack.addValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
11696
11801
  return litsFunction;
@@ -11712,13 +11817,17 @@ var defnSpecialExpression = {
11712
11817
  var _d = __read(node[1], 3), functionSymbol = _d[1], fn = _d[2];
11713
11818
  assertUserDefinedSymbolNode(functionSymbol, node[2]);
11714
11819
  assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
11715
- var evaluatedFunctionOverloades = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11820
+ var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11821
+ var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
11822
+ var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
11823
+ var paramCount = min === max ? min : { min: min, max: max };
11716
11824
  var litsFunction = (_b = {},
11717
11825
  _b[FUNCTION_SYMBOL] = true,
11718
11826
  _b.sourceCodeInfo = node[2],
11719
11827
  _b.functionType = 'UserDefined',
11720
11828
  _b.name = functionSymbol[1],
11721
- _b.evaluatedfunction = evaluatedFunctionOverloades,
11829
+ _b.evaluatedfunction = evaluatedFunction,
11830
+ _b.paramCount = paramCount,
11722
11831
  _b);
11723
11832
  contextStack.exportValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
11724
11833
  return litsFunction;
@@ -11740,12 +11849,16 @@ var fnSpecialExpression = {
11740
11849
  var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
11741
11850
  var fn = node[1][1];
11742
11851
  var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11852
+ var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
11853
+ var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
11854
+ var paramCount = min === max ? min : { min: min, max: max };
11743
11855
  var litsFunction = (_b = {},
11744
11856
  _b[FUNCTION_SYMBOL] = true,
11745
11857
  _b.sourceCodeInfo = node[2],
11746
11858
  _b.functionType = 'UserDefined',
11747
11859
  _b.name = undefined,
11748
11860
  _b.evaluatedfunction = evaluatedFunction,
11861
+ _b.paramCount = paramCount,
11749
11862
  _b);
11750
11863
  return litsFunction;
11751
11864
  },
@@ -12451,12 +12564,6 @@ function findUnresolvedSymbolsInNode(node, contextStack, builtin, evaluateNode)
12451
12564
  }
12452
12565
  }
12453
12566
 
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
12567
  var functionExecutors = {
12461
12568
  NativeJsFunction: function (fn, params, sourceCodeInfo) {
12462
12569
  var _a;
@@ -12476,7 +12583,10 @@ var functionExecutors = {
12476
12583
  var evaluateNode = _a.evaluateNode;
12477
12584
  var _loop_1 = function () {
12478
12585
  var e_1, _b;
12479
- checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo);
12586
+ if (!paramCountAcceptsMin(fn.paramCount, params.length)) {
12587
+ throw new LitsError("Expected ".concat(fn.paramCount, " arguments, got ").concat(params.length, "."), sourceCodeInfo);
12588
+ }
12589
+ // checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo)
12480
12590
  var evaluatedFunction = fn.evaluatedfunction;
12481
12591
  var args = evaluatedFunction[0];
12482
12592
  var nbrOfNonRestArgs = args.filter(function (arg) { return arg[0] !== bindingTargetTypes.rest; }).length;
@@ -12773,6 +12883,7 @@ function evaluateNormalExpression(node, contextStack) {
12773
12883
  _a.params = params,
12774
12884
  _a.placeholders = placeholders,
12775
12885
  _a.sourceCodeInfo = sourceCodeInfo,
12886
+ _a.paramCount = paramCountMinus(getParamCount(fn), params.length),
12776
12887
  _a);
12777
12888
  return partialFunction;
12778
12889
  }
@@ -12795,11 +12906,12 @@ function evaluateNormalExpression(node, contextStack) {
12795
12906
  if (placeholders.length > 0) {
12796
12907
  var partialFunction = (_b = {},
12797
12908
  _b[FUNCTION_SYMBOL] = true,
12798
- _b.function = asFunctionLike(fn, sourceCodeInfo),
12909
+ _b.function = fn,
12799
12910
  _b.functionType = 'Partial',
12800
12911
  _b.params = params,
12801
12912
  _b.placeholders = placeholders,
12802
12913
  _b.sourceCodeInfo = sourceCodeInfo,
12914
+ _b.paramCount = paramCountMinus(getParamCount(fn), params.length),
12803
12915
  _b);
12804
12916
  return partialFunction;
12805
12917
  }
@@ -13021,11 +13133,13 @@ var ContextStackImpl = /** @class */ (function () {
13021
13133
  }
13022
13134
  if (isNormalBuiltinSymbolNode(node)) {
13023
13135
  var type = node[1];
13136
+ var normalExpression = allNormalExpressions[type];
13024
13137
  return _b = {},
13025
13138
  _b[FUNCTION_SYMBOL] = true,
13026
13139
  _b.functionType = 'Builtin',
13027
13140
  _b.normalBuitinSymbolType = type,
13028
13141
  _b.sourceCodeInfo = node[2],
13142
+ _b.paramCount = normalExpression.paramCount,
13029
13143
  _b;
13030
13144
  }
13031
13145
  var lookUpResult = this.lookUp(node);
@@ -13062,6 +13176,7 @@ function createContextStack(params) {
13062
13176
  name: name
13063
13177
  },
13064
13178
  _b[FUNCTION_SYMBOL] = true,
13179
+ _b.paramCount = {},
13065
13180
  _b);
13066
13181
  return acc;
13067
13182
  }, {}),