@mojir/lits 2.1.22 → 2.1.24

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.22";
95
+ var version = "2.1.24";
96
96
 
97
97
  function getCodeMarker(sourceCodeInfo) {
98
98
  if (!sourceCodeInfo.position || !sourceCodeInfo.code)
@@ -918,91 +918,6 @@ 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
- }
1006
921
 
1007
922
  // isArray not needed, use Array.isArary
1008
923
  function asArray(value, sourceCodeInfo) {
@@ -4633,6 +4548,98 @@ function applyPlaceholders(templateString, placeholders, sourceCodeInfo) {
4633
4548
  return templateString;
4634
4549
  }
4635
4550
 
4551
+ function paramCountAccepts(paramsCount, nbrOfParams) {
4552
+ if (typeof paramsCount === 'number') {
4553
+ return paramsCount === nbrOfParams;
4554
+ }
4555
+ var min = paramsCount.min, max = paramsCount.max, even = paramsCount.even, odd = paramsCount.odd;
4556
+ if (even && nbrOfParams % 2 !== 0) {
4557
+ return false;
4558
+ }
4559
+ if (odd && nbrOfParams % 2 !== 1) {
4560
+ return false;
4561
+ }
4562
+ if (typeof min === 'number' && nbrOfParams < min) {
4563
+ return false;
4564
+ }
4565
+ if (typeof max === 'number' && nbrOfParams > max) {
4566
+ return false;
4567
+ }
4568
+ return true;
4569
+ }
4570
+ function paramCountAcceptsMin(paramsCount, nbrOfParams) {
4571
+ if (typeof paramsCount === 'number') {
4572
+ return nbrOfParams >= paramsCount;
4573
+ }
4574
+ var min = paramsCount.min;
4575
+ if (typeof min === 'number' && nbrOfParams < min) {
4576
+ return false;
4577
+ }
4578
+ return true;
4579
+ }
4580
+ function getCommonParamCountFromFunctions(params) {
4581
+ return params.reduce(function (acc, param) {
4582
+ if (acc === null) {
4583
+ return null;
4584
+ }
4585
+ var paramCount = (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
4586
+ if (typeof acc === 'number' && typeof paramCount === 'number') {
4587
+ return acc === paramCount ? acc : null;
4588
+ }
4589
+ if (typeof paramCount === 'number') {
4590
+ if (paramCountAccepts(acc, paramCount)) {
4591
+ return paramCount;
4592
+ }
4593
+ return null;
4594
+ }
4595
+ if (typeof acc === 'number') {
4596
+ if (paramCountAccepts(paramCount, acc)) {
4597
+ return acc;
4598
+ }
4599
+ return null;
4600
+ }
4601
+ var aMin = paramCount.min, aMax = paramCount.max, aEven = paramCount.even, aOdd = paramCount.odd;
4602
+ var bMin = acc.min, bMax = acc.max, bEven = acc.even, bOdd = acc.odd;
4603
+ var min = typeof aMin === 'number' && typeof bMin === 'number'
4604
+ ? Math.max(aMin, bMin)
4605
+ : typeof aMin === 'number' ? aMin : typeof bMin === 'number' ? bMin : undefined;
4606
+ var max = typeof aMax === 'number' && typeof bMax === 'number'
4607
+ ? Math.min(aMax, bMax)
4608
+ : typeof aMax === 'number' ? aMax : typeof bMax === 'number' ? bMax : undefined;
4609
+ var even = aEven !== null && aEven !== void 0 ? aEven : bEven;
4610
+ var odd = aOdd !== null && aOdd !== void 0 ? aOdd : bOdd;
4611
+ if (even && odd) {
4612
+ return null;
4613
+ }
4614
+ if (even) {
4615
+ if (typeof min === 'number' && min % 2 !== 0) {
4616
+ min += 1;
4617
+ }
4618
+ if (typeof max === 'number' && max % 2 !== 0) {
4619
+ max -= 1;
4620
+ }
4621
+ }
4622
+ if (odd) {
4623
+ if (typeof min === 'number' && min % 2 === 0) {
4624
+ min += 1;
4625
+ }
4626
+ if (typeof max === 'number' && max % 2 === 0) {
4627
+ max -= 1;
4628
+ }
4629
+ }
4630
+ if (typeof min === 'number' && typeof max === 'number' && min > max) {
4631
+ return null;
4632
+ }
4633
+ if (typeof min === 'number' && min === max) {
4634
+ return min;
4635
+ }
4636
+ return { min: min, max: max, even: even, odd: odd };
4637
+ }, {});
4638
+ }
4639
+ function getParamCountFromFunction(param) {
4640
+ return (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
4641
+ }
4642
+
4636
4643
  var functionalNormalExpression = {
4637
4644
  '|>': {
4638
4645
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -4672,7 +4679,7 @@ var functionalNormalExpression = {
4672
4679
  _a.sourceCodeInfo = sourceCodeInfo,
4673
4680
  _a.functionType = 'Comp',
4674
4681
  _a.params = params,
4675
- _a.paramCount = params.length > 0 ? getParamCount(params.at(-1)) : 1,
4682
+ _a.paramCount = params.length > 0 ? getParamCountFromFunction(params.at(-1)) : 1,
4676
4683
  _a;
4677
4684
  },
4678
4685
  paramCount: {},
@@ -4695,7 +4702,7 @@ var functionalNormalExpression = {
4695
4702
  evaluate: function (params, sourceCodeInfo) {
4696
4703
  var _a;
4697
4704
  params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
4698
- var paramCount = getCommonParamCount(params);
4705
+ var paramCount = getCommonParamCountFromFunctions(params);
4699
4706
  if (paramCount === null) {
4700
4707
  throw new LitsError('All functions must accept the same number of arguments', sourceCodeInfo);
4701
4708
  }
@@ -4719,7 +4726,7 @@ var functionalNormalExpression = {
4719
4726
  _b.sourceCodeInfo = sourceCodeInfo,
4720
4727
  _b.functionType = 'Complement',
4721
4728
  _b.function = fun,
4722
- _b.paramCount = getParamCount(fun),
4729
+ _b.paramCount = getParamCountFromFunction(fun),
4723
4730
  _b;
4724
4731
  },
4725
4732
  paramCount: 1,
@@ -4761,7 +4768,7 @@ var functionalNormalExpression = {
4761
4768
  _b.functionType = 'Fnull',
4762
4769
  _b.function = fun,
4763
4770
  _b.params = params,
4764
- _b.paramCount = getParamCount(fun),
4771
+ _b.paramCount = getParamCountFromFunction(fun),
4765
4772
  _b;
4766
4773
  },
4767
4774
  paramCount: { min: 2 },
@@ -11869,8 +11876,7 @@ var defnSpecialExpression = {
11869
11876
  assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
11870
11877
  var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11871
11878
  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 };
11879
+ var paramCount = { min: min };
11874
11880
  var litsFunction = (_b = {},
11875
11881
  _b[FUNCTION_SYMBOL] = true,
11876
11882
  _b.sourceCodeInfo = node[2],
@@ -12843,7 +12849,7 @@ function evaluateNormalExpression(node, contextStack) {
12843
12849
  _a.params = params,
12844
12850
  _a.placeholders = placeholders,
12845
12851
  _a.sourceCodeInfo = sourceCodeInfo,
12846
- _a.paramCount = paramCountMinus(getParamCount(fn), params.length),
12852
+ _a.paramCount = placeholders.length,
12847
12853
  _a);
12848
12854
  return partialFunction;
12849
12855
  }
@@ -12871,7 +12877,7 @@ function evaluateNormalExpression(node, contextStack) {
12871
12877
  _b.params = params,
12872
12878
  _b.placeholders = placeholders,
12873
12879
  _b.sourceCodeInfo = sourceCodeInfo,
12874
- _b.paramCount = paramCountMinus(getParamCount(fn), params.length),
12880
+ _b.paramCount = placeholders.length,
12875
12881
  _b);
12876
12882
  return partialFunction;
12877
12883
  }
@@ -13121,7 +13127,8 @@ function createContextStack(params) {
13121
13127
  nativeJsFunctions: params.jsFunctions
13122
13128
  && Object.entries(params.jsFunctions).reduce(function (acc, _a) {
13123
13129
  var _b;
13124
- var _c = __read(_a, 2), name = _c[0], jsFunction = _c[1];
13130
+ var _c;
13131
+ var _d = __read(_a, 2), name = _d[0], jsFunction = _d[1];
13125
13132
  if (specialExpressionKeys.includes(name)) {
13126
13133
  console.warn("Cannot shadow special expression \"".concat(name, "\", ignoring."));
13127
13134
  return acc;
@@ -13136,7 +13143,7 @@ function createContextStack(params) {
13136
13143
  name: name
13137
13144
  },
13138
13145
  _b[FUNCTION_SYMBOL] = true,
13139
- _b.paramCount = {},
13146
+ _b.paramCount = (_c = jsFunction.paramCount) !== null && _c !== void 0 ? _c : {},
13140
13147
  _b);
13141
13148
  return acc;
13142
13149
  }, {}),
@@ -13834,8 +13841,7 @@ function createNamedNormalExpressionNode(symbolNode, params, sourceCodeInfo) {
13834
13841
  return node;
13835
13842
  }
13836
13843
  function createAccessorNode(left, right, sourceCodeInfo) {
13837
- // Unnamed normal expression
13838
- return withSourceCodeInfo([NodeTypes.NormalExpression, [left, [right]]], sourceCodeInfo);
13844
+ return withSourceCodeInfo([NodeTypes.NormalExpression, [[NodeTypes.NormalBuiltinSymbol, normalExpressionTypes.get], [left, right]]], sourceCodeInfo);
13839
13845
  }
13840
13846
  function fromBinaryOperatorToNode(operator, symbolNode, left, right, sourceCodeInfo) {
13841
13847
  var operatorName = operator[1];
@@ -3,6 +3,7 @@ import type { Any } from '../interface';
3
3
  import type { Ast, LitsFunction } from '../parser/types';
4
4
  import type { TokenStream } from '../tokenizer/tokenize';
5
5
  import { AutoCompleter } from '../AutoCompleter/AutoCompleter';
6
+ import type { ParamCount } from '../builtin/interface';
6
7
  import { Cache } from './Cache';
7
8
  export interface LitsRuntimeInfo {
8
9
  astCache: Cache | null;
@@ -11,6 +12,7 @@ export interface LitsRuntimeInfo {
11
12
  }
12
13
  export interface JsFunction {
13
14
  fn: (...args: any[]) => unknown;
15
+ paramCount?: ParamCount;
14
16
  }
15
17
  export interface ContextParams {
16
18
  globalContext?: Context;
@@ -1,22 +1,13 @@
1
1
  import type { Any, Coll } from '../interface';
2
- import type { FunctionLike, NativeJsFunction, NormalExpressionNodeWithName } from '../parser/types';
3
2
  import type { SourceCodeInfo } from '../tokenizer/token';
4
- import type { ParamCount } from '../builtin/interface';
5
3
  export declare function collHasKey(coll: unknown, key: string | number): boolean;
6
4
  export declare function compare<T extends string | number>(a: T, b: T, sourceCodeInfo: SourceCodeInfo | undefined): number;
7
5
  export declare function deepEqual(a: unknown, b: unknown, sourceCodeInfo?: SourceCodeInfo): boolean;
8
6
  export declare function toNonNegativeInteger(num: number): number;
9
7
  export declare function toAny(value: unknown): Any;
10
8
  export declare function cloneColl<T extends Coll>(value: T): T;
11
- export declare function createNativeJsFunction(fn: (...args: any[]) => unknown, name?: string): NativeJsFunction;
12
9
  export declare function joinSets<T>(...results: Set<T>[]): Set<T>;
13
10
  export declare function addToSet<T>(target: Set<T>, source: Set<T>): void;
14
11
  export declare const EPSILON = 1e-10;
15
12
  export declare function approxEqual(a: number, b: number, epsilon?: number): boolean;
16
13
  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;
@@ -0,0 +1,7 @@
1
+ import type { ParamCount } from '../builtin/interface';
2
+ import type { FunctionLike, NormalExpressionNodeWithName } from '../parser/types';
3
+ export declare function paramCountAccepts(paramsCount: ParamCount, nbrOfParams: number): boolean;
4
+ export declare function paramCountAcceptsMin(paramsCount: ParamCount, nbrOfParams: number): boolean;
5
+ export declare function getCommonParamCountFromFunctions(params: FunctionLike[]): ParamCount | null;
6
+ export declare function getParamCountFromFunction(param: FunctionLike): ParamCount;
7
+ export declare function assertNumberOfParams(count: ParamCount, node: NormalExpressionNodeWithName): void;
package/dist/index.esm.js CHANGED
@@ -745,18 +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.paramCount = {},
758
- _a;
759
- }
760
748
  function joinSets() {
761
749
  var e_1, _a;
762
750
  var results = [];
@@ -801,91 +789,6 @@ function approxEqual(a, b, epsilon) {
801
789
  function approxZero(value) {
802
790
  return Math.abs(value) < EPSILON;
803
791
  }
804
- function paramCountAccepts(paramsCount, nbrOfParams) {
805
- if (typeof paramsCount === 'number') {
806
- return paramsCount === nbrOfParams;
807
- }
808
- var min = paramsCount.min, max = paramsCount.max, even = paramsCount.even, odd = paramsCount.odd;
809
- if (even && nbrOfParams % 2 !== 0) {
810
- return false;
811
- }
812
- if (odd && nbrOfParams % 2 !== 1) {
813
- return false;
814
- }
815
- if (typeof min === 'number' && nbrOfParams < min) {
816
- return false;
817
- }
818
- if (typeof max === 'number' && nbrOfParams > max) {
819
- return false;
820
- }
821
- return true;
822
- }
823
- function paramCountAcceptsMin(paramsCount, nbrOfParams) {
824
- if (typeof paramsCount === 'number') {
825
- return nbrOfParams >= paramsCount;
826
- }
827
- var min = paramsCount.min;
828
- if (typeof min === 'number' && nbrOfParams < min) {
829
- return false;
830
- }
831
- return true;
832
- }
833
- function getCommonParamCount(params) {
834
- return params.reduce(function (acc, param) {
835
- if (acc === null) {
836
- return null;
837
- }
838
- var paramCount = (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
839
- if (typeof acc === 'number' && typeof paramCount === 'number') {
840
- return acc === paramCount ? acc : null;
841
- }
842
- if (typeof paramCount === 'number') {
843
- if (paramCountAccepts(acc, paramCount)) {
844
- return paramCount;
845
- }
846
- return null;
847
- }
848
- if (typeof acc === 'number') {
849
- if (paramCountAccepts(paramCount, acc)) {
850
- return acc;
851
- }
852
- return null;
853
- }
854
- var aMin = paramCount.min, aMax = paramCount.max, aEven = paramCount.even, aOdd = paramCount.odd;
855
- var bMin = acc.min, bMax = acc.max, bEven = acc.even, bOdd = acc.odd;
856
- var min = typeof aMin === 'number' && typeof bMin === 'number'
857
- ? Math.max(aMin, bMin)
858
- : typeof aMin === 'number' ? aMin : typeof bMin === 'number' ? bMin : undefined;
859
- var max = typeof aMax === 'number' && typeof bMax === 'number'
860
- ? Math.min(aMax, bMax)
861
- : typeof aMax === 'number' ? aMax : typeof bMax === 'number' ? bMax : undefined;
862
- var even = aEven !== null && aEven !== void 0 ? aEven : bEven;
863
- var odd = aOdd !== null && aOdd !== void 0 ? aOdd : bOdd;
864
- if (min !== undefined && max !== undefined && min > max) {
865
- return null;
866
- }
867
- if (even && odd) {
868
- return null;
869
- }
870
- if (odd && min !== undefined && min < 1) {
871
- return null;
872
- }
873
- return { min: min, max: max, even: even, odd: odd };
874
- }, {});
875
- }
876
- function getParamCount(param) {
877
- return (typeof param === 'number' || isColl(param)) ? 1 : param.paramCount;
878
- }
879
- function paramCountMinus(paramCount, count) {
880
- if (typeof paramCount === 'number') {
881
- return paramCount - count;
882
- }
883
- var min = paramCount.min === undefined ? undefined : paramCount.min - count;
884
- var max = paramCount.max === undefined ? undefined : paramCount.max - count;
885
- var even = paramCount.even === undefined ? undefined : count % 2 === 0 ? true : undefined;
886
- var odd = paramCount.odd === undefined ? undefined : count % 2 === 0 ? true : undefined;
887
- return { min: min, max: max, even: even, odd: odd };
888
- }
889
792
 
890
793
  // isArray not needed, use Array.isArary
891
794
  function asArray(value, sourceCodeInfo) {
@@ -4516,6 +4419,98 @@ function applyPlaceholders(templateString, placeholders, sourceCodeInfo) {
4516
4419
  return templateString;
4517
4420
  }
4518
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
+
4519
4514
  var functionalNormalExpression = {
4520
4515
  '|>': {
4521
4516
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -4555,7 +4550,7 @@ var functionalNormalExpression = {
4555
4550
  _a.sourceCodeInfo = sourceCodeInfo,
4556
4551
  _a.functionType = 'Comp',
4557
4552
  _a.params = params,
4558
- _a.paramCount = params.length > 0 ? getParamCount(params.at(-1)) : 1,
4553
+ _a.paramCount = params.length > 0 ? getParamCountFromFunction(params.at(-1)) : 1,
4559
4554
  _a;
4560
4555
  },
4561
4556
  paramCount: {},
@@ -4578,7 +4573,7 @@ var functionalNormalExpression = {
4578
4573
  evaluate: function (params, sourceCodeInfo) {
4579
4574
  var _a;
4580
4575
  params.forEach(function (param) { return assertFunctionLike(param, sourceCodeInfo); });
4581
- var paramCount = getCommonParamCount(params);
4576
+ var paramCount = getCommonParamCountFromFunctions(params);
4582
4577
  if (paramCount === null) {
4583
4578
  throw new LitsError('All functions must accept the same number of arguments', sourceCodeInfo);
4584
4579
  }
@@ -4602,7 +4597,7 @@ var functionalNormalExpression = {
4602
4597
  _b.sourceCodeInfo = sourceCodeInfo,
4603
4598
  _b.functionType = 'Complement',
4604
4599
  _b.function = fun,
4605
- _b.paramCount = getParamCount(fun),
4600
+ _b.paramCount = getParamCountFromFunction(fun),
4606
4601
  _b;
4607
4602
  },
4608
4603
  paramCount: 1,
@@ -4644,7 +4639,7 @@ var functionalNormalExpression = {
4644
4639
  _b.functionType = 'Fnull',
4645
4640
  _b.function = fun,
4646
4641
  _b.params = params,
4647
- _b.paramCount = getParamCount(fun),
4642
+ _b.paramCount = getParamCountFromFunction(fun),
4648
4643
  _b;
4649
4644
  },
4650
4645
  paramCount: { min: 2 },
@@ -11817,8 +11812,7 @@ var defnSpecialExpression = {
11817
11812
  assertNameNotDefined(functionSymbol[1], contextStack, builtin, node[2]);
11818
11813
  var evaluatedFunction = evaluateFunction(fn, contextStack, builtin, getUndefinedSymbols, evaluateNode);
11819
11814
  var min = evaluatedFunction[0].filter(function (arg) { return arg[0] !== bindingTargetTypes.rest && arg[1][1] === undefined; }).length;
11820
- var max = evaluatedFunction[0].some(function (arg) { return arg[0] === bindingTargetTypes.rest; }) ? undefined : evaluatedFunction[0].length;
11821
- var paramCount = min === max ? min : { min: min, max: max };
11815
+ var paramCount = { min: min };
11822
11816
  var litsFunction = (_b = {},
11823
11817
  _b[FUNCTION_SYMBOL] = true,
11824
11818
  _b.sourceCodeInfo = node[2],
@@ -12881,7 +12875,7 @@ function evaluateNormalExpression(node, contextStack) {
12881
12875
  _a.params = params,
12882
12876
  _a.placeholders = placeholders,
12883
12877
  _a.sourceCodeInfo = sourceCodeInfo,
12884
- _a.paramCount = paramCountMinus(getParamCount(fn), params.length),
12878
+ _a.paramCount = placeholders.length,
12885
12879
  _a);
12886
12880
  return partialFunction;
12887
12881
  }
@@ -12909,7 +12903,7 @@ function evaluateNormalExpression(node, contextStack) {
12909
12903
  _b.params = params,
12910
12904
  _b.placeholders = placeholders,
12911
12905
  _b.sourceCodeInfo = sourceCodeInfo,
12912
- _b.paramCount = paramCountMinus(getParamCount(fn), params.length),
12906
+ _b.paramCount = placeholders.length,
12913
12907
  _b);
12914
12908
  return partialFunction;
12915
12909
  }
@@ -13159,7 +13153,8 @@ function createContextStack(params) {
13159
13153
  nativeJsFunctions: params.jsFunctions
13160
13154
  && Object.entries(params.jsFunctions).reduce(function (acc, _a) {
13161
13155
  var _b;
13162
- 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];
13163
13158
  if (specialExpressionKeys.includes(name)) {
13164
13159
  console.warn("Cannot shadow special expression \"".concat(name, "\", ignoring."));
13165
13160
  return acc;
@@ -13174,7 +13169,7 @@ function createContextStack(params) {
13174
13169
  name: name
13175
13170
  },
13176
13171
  _b[FUNCTION_SYMBOL] = true,
13177
- _b.paramCount = {},
13172
+ _b.paramCount = (_c = jsFunction.paramCount) !== null && _c !== void 0 ? _c : {},
13178
13173
  _b);
13179
13174
  return acc;
13180
13175
  }, {}),
@@ -13872,8 +13867,7 @@ function createNamedNormalExpressionNode(symbolNode, params, sourceCodeInfo) {
13872
13867
  return node;
13873
13868
  }
13874
13869
  function createAccessorNode(left, right, sourceCodeInfo) {
13875
- // Unnamed normal expression
13876
- return withSourceCodeInfo([NodeTypes.NormalExpression, [left, [right]]], sourceCodeInfo);
13870
+ return withSourceCodeInfo([NodeTypes.NormalExpression, [[NodeTypes.NormalBuiltinSymbol, normalExpressionTypes.get], [left, right]]], sourceCodeInfo);
13877
13871
  }
13878
13872
  function fromBinaryOperatorToNode(operator, symbolNode, left, right, sourceCodeInfo) {
13879
13873
  var operatorName = operator[1];
@@ -31199,5 +31193,5 @@ Object.values(apiReference).forEach(function (ref) {
31199
31193
  ref.title = ref.title.replace(/"/g, '&quot;');
31200
31194
  });
31201
31195
 
31202
- 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 };
31196
+ export { Lits, apiReference, asLitsFunction, asNativeJsFunction, asUserDefinedFunction, assertLitsFunction, assertNativeJsFunction, assertUserDefinedFunction, isApiName, isBuiltinFunction, isDataType, isDatatypeReference, isFunctionReference, isGrid, isLitsError, isLitsFunction, isMatrix, isNativeJsFunction, isShorthandReference, isUserDefinedFunction, isVector, normalExpressionKeys, specialExpressionKeys };
31203
31197
  //# sourceMappingURL=index.esm.js.map