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