@mojir/lits 2.1.20 → 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/cli/cli.js CHANGED
@@ -92,7 +92,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
92
92
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
93
93
  };
94
94
 
95
- var version = "2.1.20";
95
+ var version = "2.1.22";
96
96
 
97
97
  function getCodeMarker(sourceCodeInfo) {
98
98
  if (!sourceCodeInfo.position || !sourceCodeInfo.code)
@@ -918,6 +918,91 @@ function approxEqual(a, b, epsilon) {
918
918
  function approxZero(value) {
919
919
  return Math.abs(value) < EPSILON;
920
920
  }
921
+ function paramCountAccepts(paramsCount, nbrOfParams) {
922
+ if (typeof paramsCount === 'number') {
923
+ return paramsCount === nbrOfParams;
924
+ }
925
+ var min = paramsCount.min, max = paramsCount.max, even = paramsCount.even, odd = paramsCount.odd;
926
+ if (even && nbrOfParams % 2 !== 0) {
927
+ return false;
928
+ }
929
+ if (odd && nbrOfParams % 2 !== 1) {
930
+ return false;
931
+ }
932
+ if (typeof min === 'number' && nbrOfParams < min) {
933
+ return false;
934
+ }
935
+ if (typeof max === 'number' && nbrOfParams > max) {
936
+ return false;
937
+ }
938
+ return true;
939
+ }
940
+ function paramCountAcceptsMin(paramsCount, nbrOfParams) {
941
+ if (typeof paramsCount === 'number') {
942
+ return nbrOfParams >= paramsCount;
943
+ }
944
+ var min = paramsCount.min;
945
+ if (typeof min === 'number' && nbrOfParams < min) {
946
+ return false;
947
+ }
948
+ return true;
949
+ }
950
+ function getCommonParamCount(params) {
951
+ return params.reduce(function (acc, param) {
952
+ if (acc === null) {
953
+ return null;
954
+ }
955
+ var paramCount = (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
956
+ if (typeof acc === 'number' && typeof paramCount === 'number') {
957
+ return acc === paramCount ? acc : null;
958
+ }
959
+ if (typeof paramCount === 'number') {
960
+ if (paramCountAccepts(acc, paramCount)) {
961
+ return paramCount;
962
+ }
963
+ return null;
964
+ }
965
+ if (typeof acc === 'number') {
966
+ if (paramCountAccepts(paramCount, acc)) {
967
+ return acc;
968
+ }
969
+ return null;
970
+ }
971
+ var aMin = paramCount.min, aMax = paramCount.max, aEven = paramCount.even, aOdd = paramCount.odd;
972
+ var bMin = acc.min, bMax = acc.max, bEven = acc.even, bOdd = acc.odd;
973
+ var min = typeof aMin === 'number' && typeof bMin === 'number'
974
+ ? Math.max(aMin, bMin)
975
+ : typeof aMin === 'number' ? aMin : typeof bMin === 'number' ? bMin : undefined;
976
+ var max = typeof aMax === 'number' && typeof bMax === 'number'
977
+ ? Math.min(aMax, bMax)
978
+ : typeof aMax === 'number' ? aMax : typeof bMax === 'number' ? bMax : undefined;
979
+ var even = aEven !== null && aEven !== void 0 ? aEven : bEven;
980
+ var odd = aOdd !== null && aOdd !== void 0 ? aOdd : bOdd;
981
+ if (min !== undefined && max !== undefined && min > max) {
982
+ return null;
983
+ }
984
+ if (even && odd) {
985
+ return null;
986
+ }
987
+ if (odd && min !== undefined && min < 1) {
988
+ return null;
989
+ }
990
+ return { min: min, max: max, even: even, odd: odd };
991
+ }, {});
992
+ }
993
+ function getParamCount(param) {
994
+ return (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
995
+ }
996
+ function paramCountMinus(paramCount, count) {
997
+ if (typeof paramCount === 'number') {
998
+ return paramCount - count;
999
+ }
1000
+ var min = paramCount.min === undefined ? undefined : paramCount.min - count;
1001
+ var max = paramCount.max === undefined ? undefined : paramCount.max - count;
1002
+ var even = paramCount.even === undefined ? undefined : count % 2 === 0 ? true : undefined;
1003
+ var odd = paramCount.odd === undefined ? undefined : count % 2 === 0 ? true : undefined;
1004
+ return { min: min, max: max, even: even, odd: odd };
1005
+ }
921
1006
 
922
1007
  // isArray not needed, use Array.isArary
923
1008
  function asArray(value, sourceCodeInfo) {
@@ -4581,11 +4666,13 @@ var functionalNormalExpression = {
4581
4666
  'comp': {
4582
4667
  evaluate: function (params, sourceCodeInfo) {
4583
4668
  var _a;
4669
+ params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
4584
4670
  return _a = {},
4585
4671
  _a[FUNCTION_SYMBOL] = true,
4586
4672
  _a.sourceCodeInfo = sourceCodeInfo,
4587
4673
  _a.functionType = 'Comp',
4588
4674
  _a.params = params,
4675
+ _a.paramCount = params.length > 0 ? getParamCount(params.at(-1)) : 1,
4589
4676
  _a;
4590
4677
  },
4591
4678
  paramCount: {},
@@ -4599,6 +4686,7 @@ var functionalNormalExpression = {
4599
4686
  _b.sourceCodeInfo = sourceCodeInfo,
4600
4687
  _b.functionType = 'Constantly',
4601
4688
  _b.value = toAny(value),
4689
+ _b.paramCount = {},
4602
4690
  _b;
4603
4691
  },
4604
4692
  paramCount: 1,
@@ -4606,11 +4694,17 @@ var functionalNormalExpression = {
4606
4694
  'juxt': {
4607
4695
  evaluate: function (params, sourceCodeInfo) {
4608
4696
  var _a;
4697
+ params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
4698
+ var paramCount = getCommonParamCount(params);
4699
+ if (paramCount === null) {
4700
+ throw new LitsError('All functions must accept the same number of arguments', sourceCodeInfo);
4701
+ }
4609
4702
  return _a = {},
4610
4703
  _a[FUNCTION_SYMBOL] = true,
4611
4704
  _a.sourceCodeInfo = sourceCodeInfo,
4612
4705
  _a.functionType = 'Juxt',
4613
4706
  _a.params = params,
4707
+ _a.paramCount = paramCount,
4614
4708
  _a;
4615
4709
  },
4616
4710
  paramCount: { min: 1 },
@@ -4619,11 +4713,13 @@ var functionalNormalExpression = {
4619
4713
  evaluate: function (_a, sourceCodeInfo) {
4620
4714
  var _b;
4621
4715
  var _c = __read(_a, 1), fn = _c[0];
4716
+ var fun = asFunctionLike(fn, sourceCodeInfo);
4622
4717
  return _b = {},
4623
4718
  _b[FUNCTION_SYMBOL] = true,
4624
4719
  _b.sourceCodeInfo = sourceCodeInfo,
4625
4720
  _b.functionType = 'Complement',
4626
- _b.function = asFunctionLike(fn, sourceCodeInfo),
4721
+ _b.function = fun,
4722
+ _b.paramCount = getParamCount(fun),
4627
4723
  _b;
4628
4724
  },
4629
4725
  paramCount: 1,
@@ -4636,6 +4732,7 @@ var functionalNormalExpression = {
4636
4732
  _a.sourceCodeInfo = sourceCodeInfo,
4637
4733
  _a.functionType = 'EveryPred',
4638
4734
  _a.params = params,
4735
+ _a.paramCount = 1,
4639
4736
  _a;
4640
4737
  },
4641
4738
  paramCount: { min: 1 },
@@ -4648,6 +4745,7 @@ var functionalNormalExpression = {
4648
4745
  _a.sourceCodeInfo = sourceCodeInfo,
4649
4746
  _a.functionType = 'SomePred',
4650
4747
  _a.params = params,
4748
+ _a.paramCount = 1,
4651
4749
  _a;
4652
4750
  },
4653
4751
  paramCount: { min: 1 },
@@ -4656,12 +4754,14 @@ var functionalNormalExpression = {
4656
4754
  evaluate: function (_a, sourceCodeInfo) {
4657
4755
  var _b;
4658
4756
  var _c = __read(_a), fn = _c[0], params = _c.slice(1);
4757
+ var fun = asFunctionLike(fn, sourceCodeInfo);
4659
4758
  return _b = {},
4660
4759
  _b[FUNCTION_SYMBOL] = true,
4661
4760
  _b.sourceCodeInfo = sourceCodeInfo,
4662
4761
  _b.functionType = 'Fnull',
4663
- _b.function = asFunctionLike(fn, sourceCodeInfo),
4762
+ _b.function = fun,
4664
4763
  _b.params = params,
4764
+ _b.paramCount = getParamCount(fun),
4665
4765
  _b;
4666
4766
  },
4667
4767
  paramCount: { min: 2 },
@@ -11706,9 +11806,8 @@ var numberReservedSymbolRecord = {
11706
11806
  'NaN': Number.NaN,
11707
11807
  };
11708
11808
  var reservedSymbolRecord = __assign(__assign({}, nonNumberReservedSymbolRecord), numberReservedSymbolRecord);
11709
- var validReservedSymbolRecord = __assign(__assign({}, nonNumberReservedSymbolRecord), numberReservedSymbolRecord);
11710
11809
  function isReservedSymbol(symbol) {
11711
- return symbol in validReservedSymbolRecord;
11810
+ return symbol in reservedSymbolRecord;
11712
11811
  }
11713
11812
  function isNumberReservedSymbol(symbol) {
11714
11813
  return symbol in numberReservedSymbolRecord;
@@ -11737,12 +11836,16 @@ var functionSpecialExpression = {
11737
11836
  assertUserDefinedSymbolNode(functionSymbol, node[2]);
11738
11837
  assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
11739
11838
  var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11839
+ var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
11840
+ var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
11841
+ var paramCount = min === max ? min : { min: min, max: max };
11740
11842
  var litsFunction = (_b = {},
11741
11843
  _b[FUNCTION_SYMBOL] = true,
11742
11844
  _b.sourceCodeInfo = node[2],
11743
11845
  _b.functionType = 'UserDefined',
11744
11846
  _b.name = functionSymbol[1],
11745
11847
  _b.evaluatedfunction = evaluatedFunction,
11848
+ _b.paramCount = paramCount,
11746
11849
  _b);
11747
11850
  contextStack.addValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
11748
11851
  return litsFunction;
@@ -11764,13 +11867,17 @@ var defnSpecialExpression = {
11764
11867
  var _d = __read(node[1], 3), functionSymbol = _d[1], fn = _d[2];
11765
11868
  assertUserDefinedSymbolNode(functionSymbol, node[2]);
11766
11869
  assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
11767
- var evaluatedFunctionOverloades = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11870
+ var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11871
+ var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
11872
+ var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
11873
+ var paramCount = min === max ? min : { min: min, max: max };
11768
11874
  var litsFunction = (_b = {},
11769
11875
  _b[FUNCTION_SYMBOL] = true,
11770
11876
  _b.sourceCodeInfo = node[2],
11771
11877
  _b.functionType = 'UserDefined',
11772
11878
  _b.name = functionSymbol[1],
11773
- _b.evaluatedfunction = evaluatedFunctionOverloades,
11879
+ _b.evaluatedfunction = evaluatedFunction,
11880
+ _b.paramCount = paramCount,
11774
11881
  _b);
11775
11882
  contextStack.exportValues((_c = {}, _c[functionSymbol[1]] = litsFunction, _c), functionSymbol[2]);
11776
11883
  return litsFunction;
@@ -11792,12 +11899,16 @@ var fnSpecialExpression = {
11792
11899
  var builtin = _a.builtin, getUndefinedSymbols = _a.getUndefinedSymbols, evaluateNode = _a.evaluateNode;
11793
11900
  var fn = node[1][1];
11794
11901
  var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11902
+ var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
11903
+ var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
11904
+ var paramCount = min === max ? min : { min: min, max: max };
11795
11905
  var litsFunction = (_b = {},
11796
11906
  _b[FUNCTION_SYMBOL] = true,
11797
11907
  _b.sourceCodeInfo = node[2],
11798
11908
  _b.functionType = 'UserDefined',
11799
11909
  _b.name = undefined,
11800
11910
  _b.evaluatedfunction = evaluatedFunction,
11911
+ _b.paramCount = paramCount,
11801
11912
  _b);
11802
11913
  return litsFunction;
11803
11914
  },
@@ -12413,12 +12524,6 @@ new Set(specialExpressionKeys);
12413
12524
  // TODO, remove
12414
12525
  // console.log('builtin', [...specialExpressionKeys, ...normalExpressionKeys].length)
12415
12526
 
12416
- function checkParams(evaluatedFunction, nbrOfParams, sourceCodeInfo) {
12417
- var minArity = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
12418
- if (nbrOfParams < minArity) {
12419
- throw new LitsError("Unexpected number of arguments. Expected at least ".concat(minArity, ", got ").concat(nbrOfParams, "."), sourceCodeInfo);
12420
- }
12421
- }
12422
12527
  var functionExecutors = {
12423
12528
  NativeJsFunction: function (fn, params, sourceCodeInfo) {
12424
12529
  var _a;
@@ -12438,7 +12543,10 @@ var functionExecutors = {
12438
12543
  var evaluateNode = _a.evaluateNode;
12439
12544
  var _loop_1 = function () {
12440
12545
  var e_1, _b;
12441
- checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo);
12546
+ if (!paramCountAcceptsMin(fn.paramCount, params.length)) {
12547
+ throw new LitsError("Expected ".concat(fn.paramCount, " arguments, got ").concat(params.length, "."), sourceCodeInfo);
12548
+ }
12549
+ // checkParams(fn.evaluatedfunction, params.length, sourceCodeInfo)
12442
12550
  var evaluatedFunction = fn.evaluatedfunction;
12443
12551
  var args = evaluatedFunction[0];
12444
12552
  var nbrOfNonRestArgs = args.filter(function (arg) { return arg[0] !== bindingTargetTypes.rest; }).length;
@@ -12735,6 +12843,7 @@ function evaluateNormalExpression(node, contextStack) {
12735
12843
  _a.params = params,
12736
12844
  _a.placeholders = placeholders,
12737
12845
  _a.sourceCodeInfo = sourceCodeInfo,
12846
+ _a.paramCount = paramCountMinus(getParamCount(fn), params.length),
12738
12847
  _a);
12739
12848
  return partialFunction;
12740
12849
  }
@@ -12757,11 +12866,12 @@ function evaluateNormalExpression(node, contextStack) {
12757
12866
  if (placeholders.length > 0) {
12758
12867
  var partialFunction = (_b = {},
12759
12868
  _b[FUNCTION_SYMBOL] = true,
12760
- _b.function = asFunctionLike(fn, sourceCodeInfo),
12869
+ _b.function = fn,
12761
12870
  _b.functionType = 'Partial',
12762
12871
  _b.params = params,
12763
12872
  _b.placeholders = placeholders,
12764
12873
  _b.sourceCodeInfo = sourceCodeInfo,
12874
+ _b.paramCount = paramCountMinus(getParamCount(fn), params.length),
12765
12875
  _b);
12766
12876
  return partialFunction;
12767
12877
  }
@@ -12983,11 +13093,13 @@ var ContextStackImpl = /** @class */ (function () {
12983
13093
  }
12984
13094
  if (isNormalBuiltinSymbolNode(node)) {
12985
13095
  var type = node[1];
13096
+ var normalExpression = allNormalExpressions[type];
12986
13097
  return _b = {},
12987
13098
  _b[FUNCTION_SYMBOL] = true,
12988
13099
  _b.functionType = 'Builtin',
12989
13100
  _b.normalBuitinSymbolType = type,
12990
13101
  _b.sourceCodeInfo = node[2],
13102
+ _b.paramCount = normalExpression.paramCount,
12991
13103
  _b;
12992
13104
  }
12993
13105
  var lookUpResult = this.lookUp(node);
@@ -13024,6 +13136,7 @@ function createContextStack(params) {
13024
13136
  name: name
13025
13137
  },
13026
13138
  _b[FUNCTION_SYMBOL] = true,
13139
+ _b.paramCount = {},
13027
13140
  _b);
13028
13141
  return acc;
13029
13142
  }, {}),
@@ -14822,7 +14935,7 @@ var Parser = /** @class */ (function () {
14822
14935
  return Parser;
14823
14936
  }());
14824
14937
 
14825
- var litsCommands = new Set(__spreadArray(__spreadArray([], __read(normalExpressionKeys), false), __read(specialExpressionKeys), false));
14938
+ var litsCommands = new Set(__spreadArray(__spreadArray(__spreadArray([], __read(normalExpressionKeys), false), __read(specialExpressionKeys), false), __read(Object.keys(reservedSymbolRecord)), false));
14826
14939
  // TODO: replace with get suggestions function
14827
14940
  var AutoCompleter = /** @class */ (function () {
14828
14941
  function AutoCompleter(originalProgram, originalPosition, lits, params) {
@@ -5,7 +5,7 @@ import type { Any, Arr } from '../interface';
5
5
  import type { SpecialExpressionNode } from '../parser/types';
6
6
  import type { SourceCodeInfo } from '../tokenizer/token';
7
7
  import type { SpecialExpressions } from '.';
8
- export type Count = number | {
8
+ export type ParamCount = number | {
9
9
  min?: number;
10
10
  max?: number;
11
11
  even?: true;
@@ -16,7 +16,7 @@ export type NormalExpressionEvaluator<T> = (params: Arr, sourceCodeInfo: SourceC
16
16
  }) => T;
17
17
  export interface BuiltinNormalExpression<T> {
18
18
  evaluate: NormalExpressionEvaluator<T>;
19
- paramCount: Count;
19
+ paramCount: ParamCount;
20
20
  aliases?: string[];
21
21
  }
22
22
  export type BuiltinNormalExpressions = Record<string, BuiltinNormalExpression<Any>>;
@@ -29,7 +29,7 @@ export interface EvaluateHelpers {
29
29
  export interface BuiltinSpecialExpression<T, N extends SpecialExpressionNode> {
30
30
  evaluate: (node: N, contextStack: ContextStack, helpers: EvaluateHelpers) => T;
31
31
  evaluateAsNormalExpression?: NormalExpressionEvaluator<T>;
32
- paramCount: Count;
32
+ paramCount: ParamCount;
33
33
  getUndefinedSymbols: (node: N, contextStack: ContextStack, params: {
34
34
  getUndefinedSymbols: GetUndefinedSymbols;
35
35
  builtin: Builtin;
@@ -1,4 +1,4 @@
1
- import type { LitsFunction, SpecialExpressionNode, SymbolNode } from '../../parser/types';
1
+ import { type LitsFunction, type SpecialExpressionNode, type SymbolNode } from '../../parser/types';
2
2
  import type { BuiltinSpecialExpression } from '../interface';
3
3
  import type { Function } from '../utils';
4
4
  import type { specialExpressionTypes } from '../specialExpressionTypes';
@@ -1,5 +1,6 @@
1
1
  import type { JsFunction } from '../Lits/Lits';
2
2
  import type { SpecialExpressionType } from '../builtin';
3
+ import type { ParamCount } from '../builtin/interface';
3
4
  import type { specialExpressionTypes } from '../builtin/specialExpressionTypes';
4
5
  import type { FunctionType, NodeType, NodeTypes } from '../constants/constants';
5
6
  import type { Context } from '../evaluator/interface';
@@ -15,6 +16,7 @@ interface GenericLitsFunction {
15
16
  [FUNCTION_SYMBOL]: true;
16
17
  sourceCodeInfo?: SourceCodeInfo;
17
18
  functionType: FunctionType;
19
+ paramCount: ParamCount;
18
20
  }
19
21
  export interface RegularExpression {
20
22
  [REGEXP_SYMBOL]: true;
@@ -58,44 +58,6 @@ export declare const reservedSymbolRecord: {
58
58
  readonly as: null;
59
59
  readonly _: null;
60
60
  };
61
- export declare const validReservedSymbolRecord: {
62
- readonly E: number;
63
- readonly '-E': number;
64
- readonly ε: number;
65
- readonly '-\u03B5': number;
66
- readonly PI: number;
67
- readonly '-PI': number;
68
- readonly π: number;
69
- readonly '-\u03C0': number;
70
- readonly PHI: number;
71
- readonly '-PHI': number;
72
- readonly φ: number;
73
- readonly '-\u03C6': number;
74
- readonly POSITIVE_INFINITY: number;
75
- readonly '\u221E': number;
76
- readonly NEGATIVE_INFINITY: number;
77
- readonly '-\u221E': number;
78
- readonly MAX_SAFE_INTEGER: number;
79
- readonly MIN_SAFE_INTEGER: number;
80
- readonly MAX_VALUE: number;
81
- readonly MIN_VALUE: number;
82
- readonly NaN: number;
83
- readonly true: true;
84
- readonly false: false;
85
- readonly null: null;
86
- readonly else: null;
87
- readonly case: null;
88
- readonly each: null;
89
- readonly in: null;
90
- readonly when: null;
91
- readonly while: null;
92
- readonly catch: null;
93
- readonly function: null;
94
- readonly export: null;
95
- readonly as: null;
96
- readonly _: null;
97
- };
98
- export type ValidReservedSymbol = keyof typeof validReservedSymbolRecord;
99
61
  export type ReservedSymbol = keyof typeof reservedSymbolRecord;
100
- export declare function isReservedSymbol(symbol: string): symbol is keyof typeof validReservedSymbolRecord;
62
+ export declare function isReservedSymbol(symbol: string): symbol is keyof typeof reservedSymbolRecord;
101
63
  export declare function isNumberReservedSymbol(symbol: string): symbol is keyof typeof numberReservedSymbolRecord;
@@ -1,4 +1,4 @@
1
- import type { ValidReservedSymbol } from './reservedNames';
1
+ import type { ReservedSymbol } from './reservedNames';
2
2
  import { type SymbolicBinaryOperator, type SymbolicOperator } from './operators';
3
3
  export declare const tokenTypes: readonly ["LBrace", "LBracket", "RBrace", "RBracket", "LParen", "RParen", "BasePrefixedNumber", "MultiLineComment", "Number", "Operator", "RegexpShorthand", "ReservedSymbol", "SingleLineComment", "String", "Symbol", "Whitespace"];
4
4
  export type TokenType = typeof tokenTypes[number];
@@ -16,7 +16,7 @@ export type MultiLineCommentToken = GenericToken<'MultiLineComment'>;
16
16
  export type NumberToken = GenericToken<'Number'>;
17
17
  export type OperatorToken<T extends SymbolicOperator = SymbolicOperator> = GenericToken<'Operator', T>;
18
18
  export type RegexpShorthandToken = GenericToken<'RegexpShorthand'>;
19
- export type ReservedSymbolToken<T extends ValidReservedSymbol = ValidReservedSymbol> = GenericToken<'ReservedSymbol', T>;
19
+ export type ReservedSymbolToken<T extends ReservedSymbol = ReservedSymbol> = GenericToken<'ReservedSymbol', T>;
20
20
  export type SingleLineCommentToken = GenericToken<'SingleLineComment'>;
21
21
  export type StringToken = GenericToken<'String'>;
22
22
  export type SymbolToken<T extends string = string> = GenericToken<'Symbol', T>;
@@ -34,9 +34,9 @@ export interface SourceCodeInfo {
34
34
  export declare function isSymbolToken<T extends string>(token: Token | undefined | undefined, symbolName?: T): token is SymbolToken<T>;
35
35
  export declare function assertSymbolToken<T extends string>(token: Token | undefined | undefined, symbolName?: T): asserts token is SymbolToken<T>;
36
36
  export declare function asSymbolToken<T extends string>(token: Token | undefined | undefined, symbolName?: T): SymbolToken<T>;
37
- export declare function isReservedSymbolToken<T extends ValidReservedSymbol>(token: Token | undefined | undefined, symbolName?: T): token is ReservedSymbolToken<T>;
38
- export declare function assertReservedSymbolToken<T extends ValidReservedSymbol>(token: Token | undefined | undefined, symbolName?: T): asserts token is ReservedSymbolToken<T>;
39
- export declare function asReservedSymbolToken<T extends ValidReservedSymbol>(token: Token | undefined | undefined, symbolName?: T): ReservedSymbolToken<T>;
37
+ export declare function isReservedSymbolToken<T extends ReservedSymbol>(token: Token | undefined | undefined, symbolName?: T): token is ReservedSymbolToken<T>;
38
+ export declare function assertReservedSymbolToken<T extends ReservedSymbol>(token: Token | undefined | undefined, symbolName?: T): asserts token is ReservedSymbolToken<T>;
39
+ export declare function asReservedSymbolToken<T extends ReservedSymbol>(token: Token | undefined | undefined, symbolName?: T): ReservedSymbolToken<T>;
40
40
  export declare function isSingleLineCommentToken(token: Token | undefined): token is SingleLineCommentToken;
41
41
  export declare function assertSingleLineCommentToken(token: Token | undefined): asserts token is SingleLineCommentToken;
42
42
  export declare function asSingleLineCommentToken(token: Token | undefined): SingleLineCommentToken;
@@ -1,12 +1,12 @@
1
- import type { Count } from '../builtin/interface';
1
+ import type { ParamCount } from '../builtin/interface';
2
2
  import type { UnknownRecord } from '../interface';
3
3
  import type { NormalExpressionNodeWithName } from '../parser/types';
4
4
  import type { SourceCodeInfo } from '../tokenizer/token';
5
- export declare function assertNumberOfParams(count: Count, node: NormalExpressionNodeWithName): void;
5
+ export declare function assertNumberOfParams(count: ParamCount, node: NormalExpressionNodeWithName): void;
6
6
  export declare function isNonUndefined<T>(value: T | undefined): value is T;
7
7
  export declare function asNonUndefined<T>(value: T | undefined, sourceCodeInfo?: SourceCodeInfo): T;
8
8
  export declare function assertNonUndefined<T>(value: T | undefined, sourceCodeInfo?: SourceCodeInfo): asserts value is T;
9
9
  export declare function isUnknownRecord(value: unknown): value is Record<string, unknown>;
10
10
  export declare function assertUnknownRecord(value: unknown, sourceCodeInfo?: SourceCodeInfo): asserts value is UnknownRecord;
11
11
  export declare function asUnknownRecord(value: unknown, sourceCodeInfo?: SourceCodeInfo): UnknownRecord;
12
- export declare function canBeOperator(count: Count): boolean;
12
+ export declare function canBeOperator(count: ParamCount): boolean;
@@ -1,6 +1,7 @@
1
1
  import type { Any, Coll } from '../interface';
2
- import type { NativeJsFunction } from '../parser/types';
2
+ import type { FunctionLike, NativeJsFunction, NormalExpressionNodeWithName } from '../parser/types';
3
3
  import type { SourceCodeInfo } from '../tokenizer/token';
4
+ import type { ParamCount } from '../builtin/interface';
4
5
  export declare function collHasKey(coll: unknown, key: string | number): boolean;
5
6
  export declare function compare<T extends string | number>(a: T, b: T, sourceCodeInfo: SourceCodeInfo | undefined): number;
6
7
  export declare function deepEqual(a: unknown, b: unknown, sourceCodeInfo?: SourceCodeInfo): boolean;
@@ -13,3 +14,9 @@ export declare function addToSet<T>(target: Set<T>, source: Set<T>): void;
13
14
  export declare const EPSILON = 1e-10;
14
15
  export declare function approxEqual(a: number, b: number, epsilon?: number): boolean;
15
16
  export declare function approxZero(value: number): boolean;
17
+ export declare function mergeParamCounts(count: ParamCount, node: NormalExpressionNodeWithName): void;
18
+ export declare function assertNumberOfParams(count: ParamCount, node: NormalExpressionNodeWithName): void;
19
+ export declare function paramCountAcceptsMin(paramsCount: ParamCount, nbrOfParams: number): boolean;
20
+ export declare function getCommonParamCount(params: FunctionLike[]): ParamCount | null;
21
+ export declare function getParamCount(param: FunctionLike): ParamCount;
22
+ export declare function paramCountMinus(paramCount: ParamCount, count: number): ParamCount;