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