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