@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.esm.js CHANGED
@@ -745,17 +745,6 @@ function clone(value) {
745
745
  function cloneColl(value) {
746
746
  return clone(value);
747
747
  }
748
- function createNativeJsFunction(fn, name) {
749
- var _a;
750
- return _a = {},
751
- _a[FUNCTION_SYMBOL] = true,
752
- _a.nativeFn = {
753
- fn: fn,
754
- },
755
- _a.name = name,
756
- _a.functionType = 'NativeJsFunction',
757
- _a;
758
- }
759
748
  function joinSets() {
760
749
  var e_1, _a;
761
750
  var results = [];
@@ -4430,6 +4419,98 @@ function applyPlaceholders(templateString, placeholders, sourceCodeInfo) {
4430
4419
  return templateString;
4431
4420
  }
4432
4421
 
4422
+ function paramCountAccepts(paramsCount, nbrOfParams) {
4423
+ if (typeof paramsCount === 'number') {
4424
+ return paramsCount === nbrOfParams;
4425
+ }
4426
+ var min = paramsCount.min, max = paramsCount.max, even = paramsCount.even, odd = paramsCount.odd;
4427
+ if (even && nbrOfParams % 2 !== 0) {
4428
+ return false;
4429
+ }
4430
+ if (odd && nbrOfParams % 2 !== 1) {
4431
+ return false;
4432
+ }
4433
+ if (typeof min === 'number' && nbrOfParams < min) {
4434
+ return false;
4435
+ }
4436
+ if (typeof max === 'number' && nbrOfParams > max) {
4437
+ return false;
4438
+ }
4439
+ return true;
4440
+ }
4441
+ function paramCountAcceptsMin(paramsCount, nbrOfParams) {
4442
+ if (typeof paramsCount === 'number') {
4443
+ return nbrOfParams >= paramsCount;
4444
+ }
4445
+ var min = paramsCount.min;
4446
+ if (typeof min === 'number' && nbrOfParams < min) {
4447
+ return false;
4448
+ }
4449
+ return true;
4450
+ }
4451
+ function getCommonParamCountFromFunctions(params) {
4452
+ return params.reduce(function (acc, param) {
4453
+ if (acc === null) {
4454
+ return null;
4455
+ }
4456
+ var paramCount = (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
4457
+ if (typeof acc === 'number' && typeof paramCount === 'number') {
4458
+ return acc === paramCount ? acc : null;
4459
+ }
4460
+ if (typeof paramCount === 'number') {
4461
+ if (paramCountAccepts(acc, paramCount)) {
4462
+ return paramCount;
4463
+ }
4464
+ return null;
4465
+ }
4466
+ if (typeof acc === 'number') {
4467
+ if (paramCountAccepts(paramCount, acc)) {
4468
+ return acc;
4469
+ }
4470
+ return null;
4471
+ }
4472
+ var aMin = paramCount.min, aMax = paramCount.max, aEven = paramCount.even, aOdd = paramCount.odd;
4473
+ var bMin = acc.min, bMax = acc.max, bEven = acc.even, bOdd = acc.odd;
4474
+ var min = typeof aMin === 'number' && typeof bMin === 'number'
4475
+ ? Math.max(aMin, bMin)
4476
+ : typeof aMin === 'number' ? aMin : typeof bMin === 'number' ? bMin : undefined;
4477
+ var max = typeof aMax === 'number' && typeof bMax === 'number'
4478
+ ? Math.min(aMax, bMax)
4479
+ : typeof aMax === 'number' ? aMax : typeof bMax === 'number' ? bMax : undefined;
4480
+ var even = aEven !== null && aEven !== void 0 ? aEven : bEven;
4481
+ var odd = aOdd !== null && aOdd !== void 0 ? aOdd : bOdd;
4482
+ if (even && odd) {
4483
+ return null;
4484
+ }
4485
+ if (even) {
4486
+ if (typeof min === 'number' && min % 2 !== 0) {
4487
+ min += 1;
4488
+ }
4489
+ if (typeof max === 'number' && max % 2 !== 0) {
4490
+ max -= 1;
4491
+ }
4492
+ }
4493
+ if (odd) {
4494
+ if (typeof min === 'number' && min % 2 === 0) {
4495
+ min += 1;
4496
+ }
4497
+ if (typeof max === 'number' && max % 2 === 0) {
4498
+ max -= 1;
4499
+ }
4500
+ }
4501
+ if (typeof min === 'number' && typeof max === 'number' && min > max) {
4502
+ return null;
4503
+ }
4504
+ if (typeof min === 'number' && min === max) {
4505
+ return min;
4506
+ }
4507
+ return { min: min, max: max, even: even, odd: odd };
4508
+ }, {});
4509
+ }
4510
+ function getParamCountFromFunction(param) {
4511
+ return (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
4512
+ }
4513
+
4433
4514
  var functionalNormalExpression = {
4434
4515
  '|>': {
4435
4516
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -4463,11 +4544,13 @@ var functionalNormalExpression = {
4463
4544
  'comp': {
4464
4545
  evaluate: function (params, sourceCodeInfo) {
4465
4546
  var _a;
4547
+ params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
4466
4548
  return _a = {},
4467
4549
  _a[FUNCTION_SYMBOL] = true,
4468
4550
  _a.sourceCodeInfo = sourceCodeInfo,
4469
4551
  _a.functionType = 'Comp',
4470
4552
  _a.params = params,
4553
+ _a.paramCount = params.length > 0 ? getParamCountFromFunction(params.at(-1)) : 1,
4471
4554
  _a;
4472
4555
  },
4473
4556
  paramCount: {},
@@ -4481,6 +4564,7 @@ var functionalNormalExpression = {
4481
4564
  _b.sourceCodeInfo = sourceCodeInfo,
4482
4565
  _b.functionType = 'Constantly',
4483
4566
  _b.value = toAny(value),
4567
+ _b.paramCount = {},
4484
4568
  _b;
4485
4569
  },
4486
4570
  paramCount: 1,
@@ -4488,11 +4572,17 @@ var functionalNormalExpression = {
4488
4572
  'juxt': {
4489
4573
  evaluate: function (params, sourceCodeInfo) {
4490
4574
  var _a;
4575
+ params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
4576
+ var paramCount = getCommonParamCountFromFunctions(params);
4577
+ if (paramCount === null) {
4578
+ throw new LitsError('All functions must accept the same number of arguments', sourceCodeInfo);
4579
+ }
4491
4580
  return _a = {},
4492
4581
  _a[FUNCTION_SYMBOL] = true,
4493
4582
  _a.sourceCodeInfo = sourceCodeInfo,
4494
4583
  _a.functionType = 'Juxt',
4495
4584
  _a.params = params,
4585
+ _a.paramCount = paramCount,
4496
4586
  _a;
4497
4587
  },
4498
4588
  paramCount: { min: 1 },
@@ -4501,11 +4591,13 @@ var functionalNormalExpression = {
4501
4591
  evaluate: function (_a, sourceCodeInfo) {
4502
4592
  var _b;
4503
4593
  var _c = __read(_a, 1), fn = _c[0];
4594
+ var fun = asFunctionLike(fn, sourceCodeInfo);
4504
4595
  return _b = {},
4505
4596
  _b[FUNCTION_SYMBOL] = true,
4506
4597
  _b.sourceCodeInfo = sourceCodeInfo,
4507
4598
  _b.functionType = 'Complement',
4508
- _b.function = asFunctionLike(fn, sourceCodeInfo),
4599
+ _b.function = fun,
4600
+ _b.paramCount = getParamCountFromFunction(fun),
4509
4601
  _b;
4510
4602
  },
4511
4603
  paramCount: 1,
@@ -4518,6 +4610,7 @@ var functionalNormalExpression = {
4518
4610
  _a.sourceCodeInfo = sourceCodeInfo,
4519
4611
  _a.functionType = 'EveryPred',
4520
4612
  _a.params = params,
4613
+ _a.paramCount = 1,
4521
4614
  _a;
4522
4615
  },
4523
4616
  paramCount: { min: 1 },
@@ -4530,6 +4623,7 @@ var functionalNormalExpression = {
4530
4623
  _a.sourceCodeInfo = sourceCodeInfo,
4531
4624
  _a.functionType = 'SomePred',
4532
4625
  _a.params = params,
4626
+ _a.paramCount = 1,
4533
4627
  _a;
4534
4628
  },
4535
4629
  paramCount: { min: 1 },
@@ -4538,12 +4632,14 @@ var functionalNormalExpression = {
4538
4632
  evaluate: function (_a, sourceCodeInfo) {
4539
4633
  var _b;
4540
4634
  var _c = __read(_a), fn = _c[0], params = _c.slice(1);
4635
+ var fun = asFunctionLike(fn, sourceCodeInfo);
4541
4636
  return _b = {},
4542
4637
  _b[FUNCTION_SYMBOL] = true,
4543
4638
  _b.sourceCodeInfo = sourceCodeInfo,
4544
4639
  _b.functionType = 'Fnull',
4545
- _b.function = asFunctionLike(fn, sourceCodeInfo),
4640
+ _b.function = fun,
4546
4641
  _b.params = params,
4642
+ _b.paramCount = getParamCountFromFunction(fun),
4547
4643
  _b;
4548
4644
  },
4549
4645
  paramCount: { min: 2 },
@@ -11683,12 +11779,16 @@ var functionSpecialExpression = {
11683
11779
  assertUserDefinedSymbolNode(functionSymbol, node[2]);
11684
11780
  assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
11685
11781
  var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11782
+ var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
11783
+ var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
11784
+ var paramCount = min === max ? min : { min: min, max: max };
11686
11785
  var litsFunction = (_b = {},
11687
11786
  _b[FUNCTION_SYMBOL] = true,
11688
11787
  _b.sourceCodeInfo = node[2],
11689
11788
  _b.functionType = 'UserDefined',
11690
11789
  _b.name = functionSymbol[1],
11691
11790
  _b.evaluatedfunction = evaluatedFunction,
11791
+ _b.paramCount = paramCount,
11692
11792
  _b);
11693
11793
  contextStack.addValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
11694
11794
  return litsFunction;
@@ -11710,13 +11810,16 @@ var defnSpecialExpression = {
11710
11810
  var _d = __read(node[1], 3), functionSymbol = _d[1], fn = _d[2];
11711
11811
  assertUserDefinedSymbolNode(functionSymbol, node[2]);
11712
11812
  assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
11713
- var evaluatedFunctionOverloades = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11813
+ var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11814
+ var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
11815
+ var paramCount = { min: min };
11714
11816
  var litsFunction = (_b = {},
11715
11817
  _b[FUNCTION_SYMBOL] = true,
11716
11818
  _b.sourceCodeInfo = node[2],
11717
11819
  _b.functionType = 'UserDefined',
11718
11820
  _b.name = functionSymbol[1],
11719
- _b.evaluatedfunction = evaluatedFunctionOverloades,
11821
+ _b.evaluatedfunction = evaluatedFunction,
11822
+ _b.paramCount = paramCount,
11720
11823
  _b);
11721
11824
  contextStack.exportValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
11722
11825
  return litsFunction;
@@ -11738,12 +11841,16 @@ var fnSpecialExpression = {
11738
11841
  var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
11739
11842
  var fn = node[1][1];
11740
11843
  var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11844
+ var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
11845
+ var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
11846
+ var paramCount = min === max ? min : { min: min, max: max };
11741
11847
  var litsFunction = (_b = {},
11742
11848
  _b[FUNCTION_SYMBOL] = true,
11743
11849
  _b.sourceCodeInfo = node[2],
11744
11850
  _b.functionType = 'UserDefined',
11745
11851
  _b.name = undefined,
11746
11852
  _b.evaluatedfunction = evaluatedFunction,
11853
+ _b.paramCount = paramCount,
11747
11854
  _b);
11748
11855
  return litsFunction;
11749
11856
  },
@@ -12449,12 +12556,6 @@ function findUnresolvedSymbolsInNode(node, contextStack, builtin, evaluateNode)
12449
12556
  }
12450
12557
  }
12451
12558
 
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
12559
  var functionExecutors = {
12459
12560
  NativeJsFunction: function (fn, params, sourceCodeInfo) {
12460
12561
  var _a;
@@ -12474,7 +12575,10 @@ var functionExecutors = {
12474
12575
  var evaluateNode = _a.evaluateNode;
12475
12576
  var _loop_1 = function () {
12476
12577
  var e_1, _b;
12477
- checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo);
12578
+ if (!paramCountAcceptsMin(fn.paramCount, params.length)) {
12579
+ throw new LitsError("Expected ".concat(fn.paramCount, " arguments, got ").concat(params.length, "."), sourceCodeInfo);
12580
+ }
12581
+ // checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo)
12478
12582
  var evaluatedFunction = fn.evaluatedfunction;
12479
12583
  var args = evaluatedFunction[0];
12480
12584
  var nbrOfNonRestArgs = args.filter(function (arg) { return arg[0] !== bindingTargetTypes.rest; }).length;
@@ -12771,6 +12875,7 @@ function evaluateNormalExpression(node, contextStack) {
12771
12875
  _a.params = params,
12772
12876
  _a.placeholders = placeholders,
12773
12877
  _a.sourceCodeInfo = sourceCodeInfo,
12878
+ _a.paramCount = placeholders.length,
12774
12879
  _a);
12775
12880
  return partialFunction;
12776
12881
  }
@@ -12793,11 +12898,12 @@ function evaluateNormalExpression(node, contextStack) {
12793
12898
  if (placeholders.length > 0) {
12794
12899
  var partialFunction = (_b = {},
12795
12900
  _b[FUNCTION_SYMBOL] = true,
12796
- _b.function = asFunctionLike(fn, sourceCodeInfo),
12901
+ _b.function = fn,
12797
12902
  _b.functionType = 'Partial',
12798
12903
  _b.params = params,
12799
12904
  _b.placeholders = placeholders,
12800
12905
  _b.sourceCodeInfo = sourceCodeInfo,
12906
+ _b.paramCount = placeholders.length,
12801
12907
  _b);
12802
12908
  return partialFunction;
12803
12909
  }
@@ -13019,11 +13125,13 @@ var ContextStackImpl = /** @class */ (function () {
13019
13125
  }
13020
13126
  if (isNormalBuiltinSymbolNode(node)) {
13021
13127
  var type = node[1];
13128
+ var normalExpression = allNormalExpressions[type];
13022
13129
  return _b = {},
13023
13130
  _b[FUNCTION_SYMBOL] = true,
13024
13131
  _b.functionType = 'Builtin',
13025
13132
  _b.normalBuitinSymbolType = type,
13026
13133
  _b.sourceCodeInfo = node[2],
13134
+ _b.paramCount = normalExpression.paramCount,
13027
13135
  _b;
13028
13136
  }
13029
13137
  var lookUpResult = this.lookUp(node);
@@ -13045,7 +13153,8 @@ function createContextStack(params) {
13045
13153
  nativeJsFunctions: params.jsFunctions
13046
13154
  && Object.entries(params.jsFunctions).reduce(function (acc, _a) {
13047
13155
  var _b;
13048
- var _c = __read(_a, 2), name = _c[0], jsFunction = _c[1];
13156
+ var _c;
13157
+ var _d = __read(_a, 2), name = _d[0], jsFunction = _d[1];
13049
13158
  if (specialExpressionKeys.includes(name)) {
13050
13159
  console.warn("Cannot shadow special expression \"".concat(name, "\", ignoring."));
13051
13160
  return acc;
@@ -13060,6 +13169,7 @@ function createContextStack(params) {
13060
13169
  name: name
13061
13170
  },
13062
13171
  _b[FUNCTION_SYMBOL] = true,
13172
+ _b.paramCount = (_c = jsFunction.paramCount) !== null && _c !== void 0 ? _c : {},
13063
13173
  _b);
13064
13174
  return acc;
13065
13175
  }, {}),
@@ -31084,5 +31194,5 @@ Object.values(apiReference).forEach(function (ref) {
31084
31194
  ref.title = ref.title.replace(/"/g, '&quot;');
31085
31195
  });
31086
31196
 
31087
- export { Lits, apiReference, asLitsFunction, asNativeJsFunction, asUserDefinedFunction, assertLitsFunction, assertNativeJsFunction, assertUserDefinedFunction, createNativeJsFunction, isApiName, isBuiltinFunction, isDataType, isDatatypeReference, isFunctionReference, isGrid, isLitsError, isLitsFunction, isMatrix, isNativeJsFunction, isShorthandReference, isUserDefinedFunction, isVector, normalExpressionKeys, specialExpressionKeys };
31197
+ export { Lits, apiReference, asLitsFunction, asNativeJsFunction, asUserDefinedFunction, assertLitsFunction, assertNativeJsFunction, assertUserDefinedFunction, isApiName, isBuiltinFunction, isDataType, isDatatypeReference, isFunctionReference, isGrid, isLitsError, isLitsFunction, isMatrix, isNativeJsFunction, isShorthandReference, isUserDefinedFunction, isVector, normalExpressionKeys, specialExpressionKeys };
31088
31198
  //# sourceMappingURL=index.esm.js.map