@mojir/lits 2.0.19 → 2.0.21

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.
Files changed (38) hide show
  1. package/dist/cli/cli.js +339 -455
  2. package/dist/cli/src/Lits/Lits.d.ts +3 -1
  3. package/dist/cli/src/builtin/interface.d.ts +9 -5
  4. package/dist/cli/src/parser/index.d.ts +1 -2
  5. package/dist/cli/src/parser/interface.d.ts +0 -1
  6. package/dist/cli/src/tokenizer/algebraic/algebraicTokenizers.d.ts +1 -1
  7. package/dist/cli/src/tokenizer/algebraic/algebraicTokens.d.ts +2 -2
  8. package/dist/cli/src/tokenizer/common/commonTokenizers.d.ts +2 -2
  9. package/dist/cli/src/tokenizer/common/commonTokens.d.ts +2 -14
  10. package/dist/cli/src/tokenizer/minifyTokenStream.d.ts +2 -0
  11. package/dist/cli/src/tokenizer/polish/polishTokenizers.d.ts +1 -1
  12. package/dist/cli/src/tokenizer/polish/polishTokens.d.ts +2 -2
  13. package/dist/cli/src/tokenizer/tokens.d.ts +2 -2
  14. package/dist/cli/src/typeGuards/index.d.ts +1 -7
  15. package/dist/index.esm.js +338 -454
  16. package/dist/index.esm.js.map +1 -1
  17. package/dist/index.js +338 -454
  18. package/dist/index.js.map +1 -1
  19. package/dist/lits.iife.js +338 -454
  20. package/dist/lits.iife.js.map +1 -1
  21. package/dist/src/Lits/Lits.d.ts +3 -1
  22. package/dist/src/builtin/interface.d.ts +9 -5
  23. package/dist/src/parser/index.d.ts +1 -2
  24. package/dist/src/parser/interface.d.ts +0 -1
  25. package/dist/src/tokenizer/algebraic/algebraicTokenizers.d.ts +1 -1
  26. package/dist/src/tokenizer/algebraic/algebraicTokens.d.ts +2 -2
  27. package/dist/src/tokenizer/common/commonTokenizers.d.ts +2 -2
  28. package/dist/src/tokenizer/common/commonTokens.d.ts +2 -14
  29. package/dist/src/tokenizer/minifyTokenStream.d.ts +2 -0
  30. package/dist/src/tokenizer/polish/polishTokenizers.d.ts +1 -1
  31. package/dist/src/tokenizer/polish/polishTokens.d.ts +2 -2
  32. package/dist/src/tokenizer/tokens.d.ts +2 -2
  33. package/dist/src/typeGuards/index.d.ts +1 -7
  34. package/dist/testFramework.esm.js +448 -564
  35. package/dist/testFramework.esm.js.map +1 -1
  36. package/dist/testFramework.js +448 -564
  37. package/dist/testFramework.js.map +1 -1
  38. package/package.json +1 -1
package/dist/lits.iife.js CHANGED
@@ -278,9 +278,6 @@ var Lits = (function (exports) {
278
278
  'RBrace',
279
279
  'RBracket',
280
280
  'RParen',
281
- 'AlgNotation',
282
- 'PolNotation',
283
- 'EndNotation',
284
281
  ];
285
282
  var commomValueTokenTypes = [
286
283
  'String',
@@ -370,20 +367,6 @@ var Lits = (function (exports) {
370
367
  assertRegexpShorthandToken(token);
371
368
  return token;
372
369
  }
373
- function isAlgebraicNotationToken(token) {
374
- return (token === null || token === void 0 ? void 0 : token[0]) === 'AlgNotation';
375
- }
376
- function isPolishNotationToken(token) {
377
- return (token === null || token === void 0 ? void 0 : token[0]) === 'PolNotation';
378
- }
379
- function isEndNotationToken(token) {
380
- return (token === null || token === void 0 ? void 0 : token[0]) === 'EndNotation';
381
- }
382
- function assertEndNotationToken(token) {
383
- if (!isEndNotationToken(token)) {
384
- throwUnexpectedToken('EndNotation', undefined, token);
385
- }
386
- }
387
370
 
388
371
  var algebraicSimpleTokenTypes = __spreadArray([], __read(commonSimpleTokenTypes), false);
389
372
  var algebraicOnlyValueTokenTypes = [
@@ -843,20 +826,6 @@ var Lits = (function (exports) {
843
826
  return astNodes.filter(function (n) { return n.t !== exports.AstNodeType.Comment; });
844
827
  }
845
828
 
846
- function assertEvenNumberOfParams(node) {
847
- var _a;
848
- var length = withoutCommentNodes(node.p).length;
849
- if (length % 2 !== 0) {
850
- throw new LitsError("Wrong number of arguments, expected an even number, got ".concat(valueToString(length), "."), (_a = getTokenDebugData(node.token)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
851
- }
852
- }
853
- function assertOddNumberOfParams(node) {
854
- var _a;
855
- var length = withoutCommentNodes(node.p).length;
856
- if (length % 2 !== 1) {
857
- throw new LitsError("Wrong number of arguments, expected an odd number, got ".concat(valueToString(length), "."), (_a = getTokenDebugData(node.token)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
858
- }
859
- }
860
829
  function assertNumberOfParams(count, node) {
861
830
  var _a, _b;
862
831
  assertCount({
@@ -888,9 +857,17 @@ var Lits = (function (exports) {
888
857
  }
889
858
  }
890
859
  else {
891
- var min = count.min, max = count.max;
892
- if (min === undefined && max === undefined)
893
- throw new LitsError('Min or max must be specified.', sourceCodeInfo);
860
+ var min = count.min, max = count.max, even = count.even, odd = count.odd;
861
+ if (even) {
862
+ if (length % 2 !== 0) {
863
+ throw new LitsError("Wrong number of arguments to \"".concat(name, "\",, expected an even number, got ").concat(valueToString(length), "."), sourceCodeInfo);
864
+ }
865
+ }
866
+ if (odd) {
867
+ if (length % 2 !== 1) {
868
+ throw new LitsError("Wrong number of arguments to \"".concat(name, "\",, expected an odd number, got ").concat(valueToString(length), "."), sourceCodeInfo);
869
+ }
870
+ }
894
871
  if (typeof min === 'number' && length < min) {
895
872
  throw new LitsError("Wrong number of arguments to \"".concat(name, "\", expected at least ").concat(min, ", got ").concat(valueToString(length), "."), sourceCodeInfo);
896
873
  }
@@ -1027,7 +1004,7 @@ var Lits = (function (exports) {
1027
1004
  assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
1028
1005
  return num << count;
1029
1006
  },
1030
- validate: function (node) { return assertNumberOfParams(2, node); },
1007
+ paramCount: 2,
1031
1008
  },
1032
1009
  '>>': {
1033
1010
  evaluate: function (_a, sourceCodeInfo) {
@@ -1036,7 +1013,7 @@ var Lits = (function (exports) {
1036
1013
  assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
1037
1014
  return num >> count;
1038
1015
  },
1039
- validate: function (node) { return assertNumberOfParams(2, node); },
1016
+ paramCount: 2,
1040
1017
  },
1041
1018
  '>>>': {
1042
1019
  evaluate: function (_a, sourceCodeInfo) {
@@ -1045,7 +1022,7 @@ var Lits = (function (exports) {
1045
1022
  assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
1046
1023
  return num >>> count;
1047
1024
  },
1048
- validate: function (node) { return assertNumberOfParams(2, node); },
1025
+ paramCount: 2,
1049
1026
  },
1050
1027
  '~': {
1051
1028
  evaluate: function (_a, sourceCodeInfo) {
@@ -1053,7 +1030,7 @@ var Lits = (function (exports) {
1053
1030
  assertNumber(num, sourceCodeInfo, { integer: true });
1054
1031
  return ~num;
1055
1032
  },
1056
- validate: function (node) { return assertNumberOfParams(1, node); },
1033
+ paramCount: 1,
1057
1034
  },
1058
1035
  '&': {
1059
1036
  evaluate: function (_a, sourceCodeInfo) {
@@ -1064,7 +1041,7 @@ var Lits = (function (exports) {
1064
1041
  return result & value;
1065
1042
  }, first);
1066
1043
  },
1067
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
1044
+ paramCount: { min: 2 },
1068
1045
  },
1069
1046
  '&!': {
1070
1047
  evaluate: function (_a, sourceCodeInfo) {
@@ -1075,7 +1052,7 @@ var Lits = (function (exports) {
1075
1052
  return result & ~value;
1076
1053
  }, first);
1077
1054
  },
1078
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
1055
+ paramCount: { min: 2 },
1079
1056
  },
1080
1057
  '|': {
1081
1058
  evaluate: function (_a, sourceCodeInfo) {
@@ -1086,7 +1063,7 @@ var Lits = (function (exports) {
1086
1063
  return result | value;
1087
1064
  }, first);
1088
1065
  },
1089
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
1066
+ paramCount: { min: 2 },
1090
1067
  },
1091
1068
  '^': {
1092
1069
  evaluate: function (_a, sourceCodeInfo) {
@@ -1097,7 +1074,7 @@ var Lits = (function (exports) {
1097
1074
  return result ^ value;
1098
1075
  }, first);
1099
1076
  },
1100
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
1077
+ paramCount: { min: 2 },
1101
1078
  },
1102
1079
  'bit_flip': {
1103
1080
  evaluate: function (_a, sourceCodeInfo) {
@@ -1107,7 +1084,7 @@ var Lits = (function (exports) {
1107
1084
  var mask = 1 << index;
1108
1085
  return (num ^= mask);
1109
1086
  },
1110
- validate: function (node) { return assertNumberOfParams(2, node); },
1087
+ paramCount: 2,
1111
1088
  },
1112
1089
  'bit_set': {
1113
1090
  evaluate: function (_a, sourceCodeInfo) {
@@ -1117,7 +1094,7 @@ var Lits = (function (exports) {
1117
1094
  var mask = 1 << index;
1118
1095
  return (num |= mask);
1119
1096
  },
1120
- validate: function (node) { return assertNumberOfParams(2, node); },
1097
+ paramCount: 2,
1121
1098
  },
1122
1099
  'bit_clear': {
1123
1100
  evaluate: function (_a, sourceCodeInfo) {
@@ -1127,7 +1104,7 @@ var Lits = (function (exports) {
1127
1104
  var mask = 1 << index;
1128
1105
  return (num &= ~mask);
1129
1106
  },
1130
- validate: function (node) { return assertNumberOfParams(2, node); },
1107
+ paramCount: 2,
1131
1108
  },
1132
1109
  'bit_test': {
1133
1110
  evaluate: function (_a, sourceCodeInfo) {
@@ -1137,7 +1114,7 @@ var Lits = (function (exports) {
1137
1114
  var mask = 1 << index;
1138
1115
  return !!(num & mask);
1139
1116
  },
1140
- validate: function (node) { return assertNumberOfParams(2, node); },
1117
+ paramCount: 2,
1141
1118
  },
1142
1119
  };
1143
1120
 
@@ -1519,7 +1496,7 @@ var Lits = (function (exports) {
1519
1496
  var result = get(coll, key);
1520
1497
  return result === undefined ? defaultValue : result;
1521
1498
  },
1522
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
1499
+ paramCount: { min: 2, max: 3 },
1523
1500
  },
1524
1501
  'get_in': {
1525
1502
  evaluate: function (params, sourceCodeInfo) {
@@ -1554,7 +1531,7 @@ var Lits = (function (exports) {
1554
1531
  }
1555
1532
  return coll;
1556
1533
  },
1557
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
1534
+ paramCount: { min: 2, max: 3 },
1558
1535
  },
1559
1536
  'count': {
1560
1537
  evaluate: function (_a, sourceCodeInfo) {
@@ -1568,7 +1545,7 @@ var Lits = (function (exports) {
1568
1545
  return coll.length;
1569
1546
  return Object.keys(coll).length;
1570
1547
  },
1571
- validate: function (node) { return assertNumberOfParams(1, node); },
1548
+ paramCount: 1,
1572
1549
  },
1573
1550
  'contains?': {
1574
1551
  evaluate: function (_a, sourceCodeInfo) {
@@ -1585,7 +1562,7 @@ var Lits = (function (exports) {
1585
1562
  }
1586
1563
  return !!Object.getOwnPropertyDescriptor(coll, key);
1587
1564
  },
1588
- validate: function (node) { return assertNumberOfParams(2, node); },
1565
+ paramCount: 2,
1589
1566
  },
1590
1567
  'has?': {
1591
1568
  evaluate: function (_a, sourceCodeInfo) {
@@ -1606,7 +1583,7 @@ var Lits = (function (exports) {
1606
1583
  }
1607
1584
  return Object.values(coll).includes(value);
1608
1585
  },
1609
- validate: function (node) { return assertNumberOfParams(2, node); },
1586
+ paramCount: 2,
1610
1587
  },
1611
1588
  'has_some?': {
1612
1589
  evaluate: function (_a, sourceCodeInfo) {
@@ -1666,7 +1643,7 @@ var Lits = (function (exports) {
1666
1643
  }
1667
1644
  return false;
1668
1645
  },
1669
- validate: function (node) { return assertNumberOfParams(2, node); },
1646
+ paramCount: 2,
1670
1647
  },
1671
1648
  'has_every?': {
1672
1649
  evaluate: function (_a, sourceCodeInfo) {
@@ -1728,7 +1705,7 @@ var Lits = (function (exports) {
1728
1705
  }
1729
1706
  return true;
1730
1707
  },
1731
- validate: function (node) { return assertNumberOfParams(2, node); },
1708
+ paramCount: 2,
1732
1709
  },
1733
1710
  'assoc': {
1734
1711
  evaluate: function (_a, sourceCodeInfo) {
@@ -1738,7 +1715,7 @@ var Lits = (function (exports) {
1738
1715
  assertAny(value, sourceCodeInfo);
1739
1716
  return assoc(coll, key, value, sourceCodeInfo);
1740
1717
  },
1741
- validate: function (node) { return assertNumberOfParams(3, node); },
1718
+ paramCount: 3,
1742
1719
  },
1743
1720
  'assoc_in': {
1744
1721
  evaluate: function (_a, sourceCodeInfo) {
@@ -1763,7 +1740,7 @@ var Lits = (function (exports) {
1763
1740
  }
1764
1741
  return coll;
1765
1742
  },
1766
- validate: function (node) { return assertNumberOfParams(3, node); },
1743
+ paramCount: 3,
1767
1744
  },
1768
1745
  'update': {
1769
1746
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1774,7 +1751,7 @@ var Lits = (function (exports) {
1774
1751
  assertLitsFunction(fn, sourceCodeInfo);
1775
1752
  return update(coll, key, fn, params, contextStack, executeFunction, sourceCodeInfo);
1776
1753
  },
1777
- validate: function (node) { return assertNumberOfParams({ min: 3 }, node); },
1754
+ paramCount: { min: 3 },
1778
1755
  },
1779
1756
  'update_in': {
1780
1757
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1800,7 +1777,7 @@ var Lits = (function (exports) {
1800
1777
  }
1801
1778
  return coll;
1802
1779
  },
1803
- validate: function (node) { return assertNumberOfParams({ min: 3 }, node); },
1780
+ paramCount: { min: 3 },
1804
1781
  },
1805
1782
  'concat': {
1806
1783
  evaluate: function (params, sourceCodeInfo) {
@@ -1824,7 +1801,7 @@ var Lits = (function (exports) {
1824
1801
  }, {});
1825
1802
  }
1826
1803
  },
1827
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
1804
+ paramCount: { min: 1 },
1828
1805
  },
1829
1806
  'not_empty': {
1830
1807
  evaluate: function (_a, sourceCodeInfo) {
@@ -1838,7 +1815,7 @@ var Lits = (function (exports) {
1838
1815
  return coll.length > 0 ? coll : null;
1839
1816
  return Object.keys(coll).length > 0 ? coll : null;
1840
1817
  },
1841
- validate: function (node) { return assertNumberOfParams(1, node); },
1818
+ paramCount: 1,
1842
1819
  },
1843
1820
  'every?': {
1844
1821
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1852,7 +1829,7 @@ var Lits = (function (exports) {
1852
1829
  return coll.split('').every(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1853
1830
  return Object.entries(coll).every(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1854
1831
  },
1855
- validate: function (node) { return assertNumberOfParams(2, node); },
1832
+ paramCount: 2,
1856
1833
  },
1857
1834
  'any?': {
1858
1835
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1866,7 +1843,7 @@ var Lits = (function (exports) {
1866
1843
  return coll.split('').some(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1867
1844
  return Object.entries(coll).some(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1868
1845
  },
1869
- validate: function (node) { return assertNumberOfParams(2, node); },
1846
+ paramCount: 2,
1870
1847
  },
1871
1848
  'not_any?': {
1872
1849
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1880,7 +1857,7 @@ var Lits = (function (exports) {
1880
1857
  return !coll.split('').some(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1881
1858
  return !Object.entries(coll).some(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1882
1859
  },
1883
- validate: function (node) { return assertNumberOfParams(2, node); },
1860
+ paramCount: 2,
1884
1861
  },
1885
1862
  'not_every?': {
1886
1863
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1894,13 +1871,14 @@ var Lits = (function (exports) {
1894
1871
  return !coll.split('').every(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1895
1872
  return !Object.entries(coll).every(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
1896
1873
  },
1897
- validate: function (node) { return assertNumberOfParams(2, node); },
1874
+ paramCount: 2,
1898
1875
  },
1899
1876
  };
1900
1877
 
1901
1878
  var arrayNormalExpression = {
1902
1879
  array: {
1903
1880
  evaluate: function (params) { return params; },
1881
+ paramCount: {},
1904
1882
  },
1905
1883
  range: {
1906
1884
  evaluate: function (params, sourceCodeInfo) {
@@ -1938,7 +1916,7 @@ var Lits = (function (exports) {
1938
1916
  result.push(i);
1939
1917
  return result;
1940
1918
  },
1941
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 3 }, node); },
1919
+ paramCount: { min: 1, max: 3 },
1942
1920
  },
1943
1921
  repeat: {
1944
1922
  evaluate: function (_a, sourceCodeInfo) {
@@ -1949,7 +1927,7 @@ var Lits = (function (exports) {
1949
1927
  result.push(value);
1950
1928
  return result;
1951
1929
  },
1952
- validate: function (node) { return assertNumberOfParams(2, node); },
1930
+ paramCount: 2,
1953
1931
  },
1954
1932
  flatten: {
1955
1933
  evaluate: function (_a) {
@@ -1958,7 +1936,7 @@ var Lits = (function (exports) {
1958
1936
  return [];
1959
1937
  return seq.flat(Number.POSITIVE_INFINITY);
1960
1938
  },
1961
- validate: function (node) { return assertNumberOfParams(1, node); },
1939
+ paramCount: 1,
1962
1940
  },
1963
1941
  mapcat: {
1964
1942
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1968,7 +1946,7 @@ var Lits = (function (exports) {
1968
1946
  assertLitsFunction(fn, sourceCodeInfo);
1969
1947
  return arr.map(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); }).flat(1);
1970
1948
  },
1971
- validate: function (node) { return assertNumberOfParams(2, node); },
1949
+ paramCount: 2,
1972
1950
  },
1973
1951
  };
1974
1952
 
@@ -1983,7 +1961,7 @@ var Lits = (function (exports) {
1983
1961
  assertSeq(seq, sourceCodeInfo);
1984
1962
  return i >= 0 && i < seq.length ? toAny(seq[i]) : defaultValue;
1985
1963
  },
1986
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
1964
+ paramCount: { min: 2, max: 3 },
1987
1965
  },
1988
1966
  'filter': {
1989
1967
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -1998,7 +1976,7 @@ var Lits = (function (exports) {
1998
1976
  .filter(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); })
1999
1977
  .join('');
2000
1978
  },
2001
- validate: function (node) { return assertNumberOfParams(2, node); },
1979
+ paramCount: 2,
2002
1980
  },
2003
1981
  'first': {
2004
1982
  evaluate: function (_a, sourceCodeInfo) {
@@ -2008,7 +1986,7 @@ var Lits = (function (exports) {
2008
1986
  assertSeq(array, sourceCodeInfo);
2009
1987
  return toAny(array[0]);
2010
1988
  },
2011
- validate: function (node) { return assertNumberOfParams(1, node); },
1989
+ paramCount: 1,
2012
1990
  },
2013
1991
  'last': {
2014
1992
  evaluate: function (_a, sourceCodeInfo) {
@@ -2018,7 +1996,7 @@ var Lits = (function (exports) {
2018
1996
  assertSeq(array, sourceCodeInfo);
2019
1997
  return toAny(array[array.length - 1]);
2020
1998
  },
2021
- validate: function (node) { return assertNumberOfParams(1, node); },
1999
+ paramCount: 1,
2022
2000
  },
2023
2001
  'map': {
2024
2002
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2040,7 +2018,7 @@ var Lits = (function (exports) {
2040
2018
  .join('');
2041
2019
  }
2042
2020
  },
2043
- validate: function (node) { return assertNumberOfParams(2, node); },
2021
+ paramCount: 2,
2044
2022
  },
2045
2023
  'pop': {
2046
2024
  evaluate: function (_a, sourceCodeInfo) {
@@ -2051,7 +2029,7 @@ var Lits = (function (exports) {
2051
2029
  }
2052
2030
  return seq.slice(0, seq.length - 1);
2053
2031
  },
2054
- validate: function (node) { return assertNumberOfParams(1, node); },
2032
+ paramCount: 1,
2055
2033
  },
2056
2034
  'position': {
2057
2035
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2070,7 +2048,7 @@ var Lits = (function (exports) {
2070
2048
  return index !== -1 ? index : null;
2071
2049
  }
2072
2050
  },
2073
- validate: function (node) { return assertNumberOfParams(2, node); },
2051
+ paramCount: 2,
2074
2052
  },
2075
2053
  'index_of': {
2076
2054
  evaluate: function (_a, sourceCodeInfo) {
@@ -2089,7 +2067,7 @@ var Lits = (function (exports) {
2089
2067
  return index !== -1 ? index : null;
2090
2068
  }
2091
2069
  },
2092
- validate: function (node) { return assertNumberOfParams(2, node); },
2070
+ paramCount: 2,
2093
2071
  },
2094
2072
  'last_index_of': {
2095
2073
  evaluate: function (_a, sourceCodeInfo) {
@@ -2108,7 +2086,7 @@ var Lits = (function (exports) {
2108
2086
  return index !== -1 ? index : null;
2109
2087
  }
2110
2088
  },
2111
- validate: function (node) { return assertNumberOfParams(2, node); },
2089
+ paramCount: 2,
2112
2090
  },
2113
2091
  'push': {
2114
2092
  evaluate: function (_a, sourceCodeInfo) {
@@ -2122,7 +2100,7 @@ var Lits = (function (exports) {
2122
2100
  return __spreadArray(__spreadArray([], __read(seq), false), __read(values), false);
2123
2101
  }
2124
2102
  },
2125
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
2103
+ paramCount: { min: 2 },
2126
2104
  },
2127
2105
  'reductions': {
2128
2106
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2183,7 +2161,7 @@ var Lits = (function (exports) {
2183
2161
  }
2184
2162
  }
2185
2163
  },
2186
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2164
+ paramCount: { min: 2, max: 3 },
2187
2165
  },
2188
2166
  'reduce': {
2189
2167
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2230,7 +2208,7 @@ var Lits = (function (exports) {
2230
2208
  }
2231
2209
  }
2232
2210
  },
2233
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2211
+ paramCount: { min: 2, max: 3 },
2234
2212
  },
2235
2213
  'reduce_right': {
2236
2214
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2278,7 +2256,7 @@ var Lits = (function (exports) {
2278
2256
  }
2279
2257
  }
2280
2258
  },
2281
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2259
+ paramCount: { min: 2, max: 3 },
2282
2260
  },
2283
2261
  'rest': {
2284
2262
  evaluate: function (_a, sourceCodeInfo) {
@@ -2291,7 +2269,7 @@ var Lits = (function (exports) {
2291
2269
  }
2292
2270
  return seq.substring(1);
2293
2271
  },
2294
- validate: function (node) { return assertNumberOfParams(1, node); },
2272
+ paramCount: 1,
2295
2273
  },
2296
2274
  'nthrest': {
2297
2275
  evaluate: function (_a, sourceCodeInfo) {
@@ -2303,7 +2281,7 @@ var Lits = (function (exports) {
2303
2281
  return seq.slice(integerCount);
2304
2282
  return seq.substring(integerCount);
2305
2283
  },
2306
- validate: function (node) { return assertNumberOfParams(2, node); },
2284
+ paramCount: 2,
2307
2285
  },
2308
2286
  'next': {
2309
2287
  evaluate: function (_a, sourceCodeInfo) {
@@ -2318,7 +2296,7 @@ var Lits = (function (exports) {
2318
2296
  return null;
2319
2297
  return seq.substring(1);
2320
2298
  },
2321
- validate: function (node) { return assertNumberOfParams(1, node); },
2299
+ paramCount: 1,
2322
2300
  },
2323
2301
  'nthnext': {
2324
2302
  evaluate: function (_a, sourceCodeInfo) {
@@ -2332,7 +2310,7 @@ var Lits = (function (exports) {
2332
2310
  return seq.slice(integerCount);
2333
2311
  return seq.substring(integerCount);
2334
2312
  },
2335
- validate: function (node) { return assertNumberOfParams(2, node); },
2313
+ paramCount: 2,
2336
2314
  },
2337
2315
  'reverse': {
2338
2316
  evaluate: function (_a, sourceCodeInfo) {
@@ -2344,7 +2322,7 @@ var Lits = (function (exports) {
2344
2322
  return __spreadArray([], __read(seq), false).reverse();
2345
2323
  return seq.split('').reverse().join('');
2346
2324
  },
2347
- validate: function (node) { return assertNumberOfParams(1, node); },
2325
+ paramCount: 1,
2348
2326
  },
2349
2327
  'second': {
2350
2328
  evaluate: function (_a, sourceCodeInfo) {
@@ -2354,7 +2332,7 @@ var Lits = (function (exports) {
2354
2332
  assertSeq(seq, sourceCodeInfo);
2355
2333
  return toAny(seq[1]);
2356
2334
  },
2357
- validate: function (node) { return assertNumberOfParams(1, node); },
2335
+ paramCount: 1,
2358
2336
  },
2359
2337
  'shift': {
2360
2338
  evaluate: function (_a, sourceCodeInfo) {
@@ -2366,7 +2344,7 @@ var Lits = (function (exports) {
2366
2344
  copy.shift();
2367
2345
  return copy;
2368
2346
  },
2369
- validate: function (node) { return assertNumberOfParams(1, node); },
2347
+ paramCount: 1,
2370
2348
  },
2371
2349
  'slice': {
2372
2350
  evaluate: function (params, sourceCodeInfo) {
@@ -2380,7 +2358,7 @@ var Lits = (function (exports) {
2380
2358
  assertNumber(to, sourceCodeInfo, { integer: true });
2381
2359
  return seq.slice(from, to);
2382
2360
  },
2383
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 3 }, node); },
2361
+ paramCount: { min: 1, max: 3 },
2384
2362
  },
2385
2363
  'some': {
2386
2364
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2397,7 +2375,7 @@ var Lits = (function (exports) {
2397
2375
  return (_c = seq.split('').find(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); })) !== null && _c !== void 0 ? _c : null;
2398
2376
  return toAny(seq.find(function (elem) { return executeFunction(fn, [elem], contextStack, sourceCodeInfo); }));
2399
2377
  },
2400
- validate: function (node) { return assertNumberOfParams(2, node); },
2378
+ paramCount: 2,
2401
2379
  },
2402
2380
  'sort': {
2403
2381
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2435,7 +2413,7 @@ var Lits = (function (exports) {
2435
2413
  }
2436
2414
  return result;
2437
2415
  },
2438
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
2416
+ paramCount: { min: 1, max: 2 },
2439
2417
  },
2440
2418
  'sort_by': {
2441
2419
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -2486,7 +2464,7 @@ var Lits = (function (exports) {
2486
2464
  }
2487
2465
  return result;
2488
2466
  },
2489
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2467
+ paramCount: { min: 2, max: 3 },
2490
2468
  },
2491
2469
  'take': {
2492
2470
  evaluate: function (_a, sourceCodeInfo) {
@@ -2496,7 +2474,7 @@ var Lits = (function (exports) {
2496
2474
  var num = Math.max(Math.ceil(n), 0);
2497
2475
  return input.slice(0, num);
2498
2476
  },
2499
- validate: function (node) { return assertNumberOfParams(2, node); },
2477
+ paramCount: 2,
2500
2478
  },
2501
2479
  'take_last': {
2502
2480
  evaluate: function (_a, sourceCodeInfo) {
@@ -2507,7 +2485,7 @@ var Lits = (function (exports) {
2507
2485
  var from = array.length - num;
2508
2486
  return array.slice(from);
2509
2487
  },
2510
- validate: function (node) { return assertNumberOfParams(2, node); },
2488
+ paramCount: 2,
2511
2489
  },
2512
2490
  'take_while': {
2513
2491
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2535,7 +2513,7 @@ var Lits = (function (exports) {
2535
2513
  }
2536
2514
  return typeof seq === 'string' ? result.join('') : result;
2537
2515
  },
2538
- validate: function (node) { return assertNumberOfParams(2, node); },
2516
+ paramCount: 2,
2539
2517
  },
2540
2518
  'drop': {
2541
2519
  evaluate: function (_a, sourceCodeInfo) {
@@ -2545,7 +2523,7 @@ var Lits = (function (exports) {
2545
2523
  assertSeq(input, sourceCodeInfo);
2546
2524
  return input.slice(num);
2547
2525
  },
2548
- validate: function (node) { return assertNumberOfParams(2, node); },
2526
+ paramCount: 2,
2549
2527
  },
2550
2528
  'drop_last': {
2551
2529
  evaluate: function (_a, sourceCodeInfo) {
@@ -2556,7 +2534,7 @@ var Lits = (function (exports) {
2556
2534
  var from = array.length - num;
2557
2535
  return array.slice(0, from);
2558
2536
  },
2559
- validate: function (node) { return assertNumberOfParams(2, node); },
2537
+ paramCount: 2,
2560
2538
  },
2561
2539
  'drop_while': {
2562
2540
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2572,7 +2550,7 @@ var Lits = (function (exports) {
2572
2550
  var from = charArray.findIndex(function (elem) { return !executeFunction(fn, [elem], contextStack, sourceCodeInfo); });
2573
2551
  return charArray.slice(from).join('');
2574
2552
  },
2575
- validate: function (node) { return assertNumberOfParams(2, node); },
2553
+ paramCount: 2,
2576
2554
  },
2577
2555
  'unshift': {
2578
2556
  evaluate: function (_a, sourceCodeInfo) {
@@ -2586,7 +2564,7 @@ var Lits = (function (exports) {
2586
2564
  copy.unshift.apply(copy, __spreadArray([], __read(values), false));
2587
2565
  return copy;
2588
2566
  },
2589
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
2567
+ paramCount: { min: 2 },
2590
2568
  },
2591
2569
  'distinct': {
2592
2570
  evaluate: function (_a, sourceCodeInfo) {
@@ -2596,7 +2574,7 @@ var Lits = (function (exports) {
2596
2574
  return Array.from(new Set(input));
2597
2575
  return Array.from(new Set(input.split(''))).join('');
2598
2576
  },
2599
- validate: function (node) { return assertNumberOfParams(1, node); },
2577
+ paramCount: 1,
2600
2578
  },
2601
2579
  'remove': {
2602
2580
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2611,7 +2589,7 @@ var Lits = (function (exports) {
2611
2589
  .filter(function (elem) { return !executeFunction(fn, [elem], contextStack, sourceCodeInfo); })
2612
2590
  .join('');
2613
2591
  },
2614
- validate: function (node) { return assertNumberOfParams(2, node); },
2592
+ paramCount: 2,
2615
2593
  },
2616
2594
  'remove_at': {
2617
2595
  evaluate: function (_a, sourceCodeInfo) {
@@ -2628,7 +2606,7 @@ var Lits = (function (exports) {
2628
2606
  }
2629
2607
  return "".concat(input.substring(0, index)).concat(input.substring(index + 1));
2630
2608
  },
2631
- validate: function (node) { return assertNumberOfParams(2, node); },
2609
+ paramCount: 2,
2632
2610
  },
2633
2611
  'split_at': {
2634
2612
  evaluate: function (_a, sourceCodeInfo) {
@@ -2638,7 +2616,7 @@ var Lits = (function (exports) {
2638
2616
  assertSeq(seq, sourceCodeInfo);
2639
2617
  return [seq.slice(0, intPos), seq.slice(intPos)];
2640
2618
  },
2641
- validate: function (node) { return assertNumberOfParams(2, node); },
2619
+ paramCount: 2,
2642
2620
  },
2643
2621
  'split_with': {
2644
2622
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2653,7 +2631,7 @@ var Lits = (function (exports) {
2653
2631
  return [seq, seqIsArray ? [] : ''];
2654
2632
  return [seq.slice(0, index), seq.slice(index)];
2655
2633
  },
2656
- validate: function (node) { return assertNumberOfParams(2, node); },
2634
+ paramCount: 2,
2657
2635
  },
2658
2636
  'frequencies': {
2659
2637
  evaluate: function (_a, sourceCodeInfo) {
@@ -2669,7 +2647,7 @@ var Lits = (function (exports) {
2669
2647
  return result;
2670
2648
  }, {});
2671
2649
  },
2672
- validate: function (node) { return assertNumberOfParams(1, node); },
2650
+ paramCount: 1,
2673
2651
  },
2674
2652
  'group_by': {
2675
2653
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2687,7 +2665,7 @@ var Lits = (function (exports) {
2687
2665
  return result;
2688
2666
  }, {});
2689
2667
  },
2690
- validate: function (node) { return assertNumberOfParams(2, node); },
2668
+ paramCount: 2,
2691
2669
  },
2692
2670
  'partition': {
2693
2671
  evaluate: function (params, sourceCodeInfo) {
@@ -2699,7 +2677,7 @@ var Lits = (function (exports) {
2699
2677
  : undefined;
2700
2678
  return partition(n, step, seq, pad, sourceCodeInfo);
2701
2679
  },
2702
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 4 }, node); },
2680
+ paramCount: { min: 2, max: 4 },
2703
2681
  },
2704
2682
  'partition_all': {
2705
2683
  evaluate: function (params, sourceCodeInfo) {
@@ -2708,7 +2686,7 @@ var Lits = (function (exports) {
2708
2686
  var step = params.length === 3 ? toNonNegativeInteger(asNumber(params[2], sourceCodeInfo)) : n;
2709
2687
  return partition(n, step, seq, [], sourceCodeInfo);
2710
2688
  },
2711
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
2689
+ paramCount: { min: 2, max: 3 },
2712
2690
  },
2713
2691
  'partition_by': {
2714
2692
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -2729,7 +2707,7 @@ var Lits = (function (exports) {
2729
2707
  }, []);
2730
2708
  return isStringSeq ? result.map(function (elem) { return elem.join(''); }) : result;
2731
2709
  },
2732
- validate: function (node) { return assertNumberOfParams(2, node); },
2710
+ paramCount: 2,
2733
2711
  },
2734
2712
  'ends_with?': {
2735
2713
  evaluate: function (_a, sourceCodeInfo) {
@@ -2741,7 +2719,7 @@ var Lits = (function (exports) {
2741
2719
  }
2742
2720
  return str.at(-1) === search;
2743
2721
  },
2744
- validate: function (node) { return assertNumberOfParams(2, node); },
2722
+ paramCount: 2,
2745
2723
  },
2746
2724
  'starts_with?': {
2747
2725
  evaluate: function (_a, sourceCodeInfo) {
@@ -2753,7 +2731,7 @@ var Lits = (function (exports) {
2753
2731
  }
2754
2732
  return str[0] === search;
2755
2733
  },
2756
- validate: function (node) { return assertNumberOfParams(2, node); },
2734
+ paramCount: 2,
2757
2735
  },
2758
2736
  'interleave': {
2759
2737
  evaluate: function (_a, sourceCodeInfo) {
@@ -2791,7 +2769,7 @@ var Lits = (function (exports) {
2791
2769
  }
2792
2770
  return isStringSeq ? result.join('') : result;
2793
2771
  },
2794
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
2772
+ paramCount: { min: 1 },
2795
2773
  },
2796
2774
  'interpose': {
2797
2775
  evaluate: function (_a, sourceCodeInfo) {
@@ -2810,7 +2788,7 @@ var Lits = (function (exports) {
2810
2788
  result.push(seq[seq.length - 1]);
2811
2789
  return result;
2812
2790
  },
2813
- validate: function (node) { return assertNumberOfParams(2, node); },
2791
+ paramCount: 2,
2814
2792
  },
2815
2793
  };
2816
2794
  function partition(n, step, seq, pad, sourceCodeInfo) {
@@ -2848,7 +2826,7 @@ var Lits = (function (exports) {
2848
2826
  assertNumber(first, sourceCodeInfo);
2849
2827
  return first + 1;
2850
2828
  },
2851
- validate: function (node) { return assertNumberOfParams(1, node); },
2829
+ paramCount: 1,
2852
2830
  },
2853
2831
  'dec': {
2854
2832
  evaluate: function (_a, sourceCodeInfo) {
@@ -2856,7 +2834,7 @@ var Lits = (function (exports) {
2856
2834
  assertNumber(first, sourceCodeInfo);
2857
2835
  return first - 1;
2858
2836
  },
2859
- validate: function (node) { return assertNumberOfParams(1, node); },
2837
+ paramCount: 1,
2860
2838
  },
2861
2839
  '+': {
2862
2840
  evaluate: function (params, sourceCodeInfo) {
@@ -2865,6 +2843,7 @@ var Lits = (function (exports) {
2865
2843
  return result + param;
2866
2844
  }, 0);
2867
2845
  },
2846
+ paramCount: {},
2868
2847
  },
2869
2848
  '*': {
2870
2849
  evaluate: function (params, sourceCodeInfo) {
@@ -2873,6 +2852,7 @@ var Lits = (function (exports) {
2873
2852
  return result * param;
2874
2853
  }, 1);
2875
2854
  },
2855
+ paramCount: {},
2876
2856
  },
2877
2857
  '/': {
2878
2858
  evaluate: function (params, sourceCodeInfo) {
@@ -2889,6 +2869,7 @@ var Lits = (function (exports) {
2889
2869
  return result / param;
2890
2870
  }, first);
2891
2871
  },
2872
+ paramCount: {},
2892
2873
  },
2893
2874
  '-': {
2894
2875
  evaluate: function (params, sourceCodeInfo) {
@@ -2903,6 +2884,7 @@ var Lits = (function (exports) {
2903
2884
  return result - param;
2904
2885
  }, first);
2905
2886
  },
2887
+ paramCount: {},
2906
2888
  },
2907
2889
  'quot': {
2908
2890
  evaluate: function (_a, sourceCodeInfo) {
@@ -2912,7 +2894,7 @@ var Lits = (function (exports) {
2912
2894
  var quotient = Math.trunc(dividend / divisor);
2913
2895
  return quotient;
2914
2896
  },
2915
- validate: function (node) { return assertNumberOfParams(2, node); },
2897
+ paramCount: 2,
2916
2898
  },
2917
2899
  'mod': {
2918
2900
  evaluate: function (_a, sourceCodeInfo) {
@@ -2922,7 +2904,7 @@ var Lits = (function (exports) {
2922
2904
  var quotient = Math.floor(dividend / divisor);
2923
2905
  return dividend - divisor * quotient;
2924
2906
  },
2925
- validate: function (node) { return assertNumberOfParams(2, node); },
2907
+ paramCount: 2,
2926
2908
  },
2927
2909
  '%': {
2928
2910
  evaluate: function (_a, sourceCodeInfo) {
@@ -2932,7 +2914,7 @@ var Lits = (function (exports) {
2932
2914
  var quotient = Math.trunc(dividend / divisor);
2933
2915
  return dividend - divisor * quotient;
2934
2916
  },
2935
- validate: function (node) { return assertNumberOfParams(2, node); },
2917
+ paramCount: 2,
2936
2918
  },
2937
2919
  'sqrt': {
2938
2920
  evaluate: function (_a, sourceCodeInfo) {
@@ -2940,7 +2922,7 @@ var Lits = (function (exports) {
2940
2922
  assertNumber(first, sourceCodeInfo);
2941
2923
  return Math.sqrt(first);
2942
2924
  },
2943
- validate: function (node) { return assertNumberOfParams(1, node); },
2925
+ paramCount: 1,
2944
2926
  },
2945
2927
  'cbrt': {
2946
2928
  evaluate: function (_a, sourceCodeInfo) {
@@ -2948,7 +2930,7 @@ var Lits = (function (exports) {
2948
2930
  assertNumber(first, sourceCodeInfo);
2949
2931
  return Math.cbrt(first);
2950
2932
  },
2951
- validate: function (node) { return assertNumberOfParams(1, node); },
2933
+ paramCount: 1,
2952
2934
  },
2953
2935
  '**': {
2954
2936
  evaluate: function (_a, sourceCodeInfo) {
@@ -2957,7 +2939,7 @@ var Lits = (function (exports) {
2957
2939
  assertNumber(second, sourceCodeInfo);
2958
2940
  return Math.pow(first, second);
2959
2941
  },
2960
- validate: function (node) { return assertNumberOfParams(2, node); },
2942
+ paramCount: 2,
2961
2943
  },
2962
2944
  'round': {
2963
2945
  evaluate: function (params, sourceCodeInfo) {
@@ -2969,7 +2951,7 @@ var Lits = (function (exports) {
2969
2951
  var factor = Math.pow(10, decimals);
2970
2952
  return Math.round(value * factor) / factor;
2971
2953
  },
2972
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
2954
+ paramCount: { min: 1, max: 2 },
2973
2955
  },
2974
2956
  'trunc': {
2975
2957
  evaluate: function (_a, sourceCodeInfo) {
@@ -2977,7 +2959,7 @@ var Lits = (function (exports) {
2977
2959
  assertNumber(first, sourceCodeInfo);
2978
2960
  return Math.trunc(first);
2979
2961
  },
2980
- validate: function (node) { return assertNumberOfParams(1, node); },
2962
+ paramCount: 1,
2981
2963
  },
2982
2964
  'floor': {
2983
2965
  evaluate: function (_a, sourceCodeInfo) {
@@ -2985,7 +2967,7 @@ var Lits = (function (exports) {
2985
2967
  assertNumber(first, sourceCodeInfo);
2986
2968
  return Math.floor(first);
2987
2969
  },
2988
- validate: function (node) { return assertNumberOfParams(1, node); },
2970
+ paramCount: 1,
2989
2971
  },
2990
2972
  'ceil': {
2991
2973
  evaluate: function (_a, sourceCodeInfo) {
@@ -2993,7 +2975,7 @@ var Lits = (function (exports) {
2993
2975
  assertNumber(first, sourceCodeInfo);
2994
2976
  return Math.ceil(first);
2995
2977
  },
2996
- validate: function (node) { return assertNumberOfParams(1, node); },
2978
+ paramCount: 1,
2997
2979
  },
2998
2980
  'min': {
2999
2981
  evaluate: function (_a, sourceCodeInfo) {
@@ -3006,7 +2988,7 @@ var Lits = (function (exports) {
3006
2988
  return Math.min(min, value);
3007
2989
  }, first);
3008
2990
  },
3009
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
2991
+ paramCount: { min: 1 },
3010
2992
  },
3011
2993
  'max': {
3012
2994
  evaluate: function (_a, sourceCodeInfo) {
@@ -3019,7 +3001,7 @@ var Lits = (function (exports) {
3019
3001
  return Math.max(min, value);
3020
3002
  }, first);
3021
3003
  },
3022
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3004
+ paramCount: { min: 1 },
3023
3005
  },
3024
3006
  'abs': {
3025
3007
  evaluate: function (_a, sourceCodeInfo) {
@@ -3027,7 +3009,7 @@ var Lits = (function (exports) {
3027
3009
  assertNumber(value, sourceCodeInfo);
3028
3010
  return Math.abs(value);
3029
3011
  },
3030
- validate: function (node) { return assertNumberOfParams(1, node); },
3012
+ paramCount: 1,
3031
3013
  },
3032
3014
  'sign': {
3033
3015
  evaluate: function (_a, sourceCodeInfo) {
@@ -3035,67 +3017,67 @@ var Lits = (function (exports) {
3035
3017
  assertNumber(value, sourceCodeInfo);
3036
3018
  return Math.sign(value);
3037
3019
  },
3038
- validate: function (node) { return assertNumberOfParams(1, node); },
3020
+ paramCount: 1,
3039
3021
  },
3040
3022
  'max_safe_integer': {
3041
3023
  evaluate: function () {
3042
3024
  return Number.MAX_SAFE_INTEGER;
3043
3025
  },
3044
- validate: function (node) { return assertNumberOfParams(0, node); },
3026
+ paramCount: 0,
3045
3027
  },
3046
3028
  'min_safe_integer': {
3047
3029
  evaluate: function () {
3048
3030
  return Number.MIN_SAFE_INTEGER;
3049
3031
  },
3050
- validate: function (node) { return assertNumberOfParams(0, node); },
3032
+ paramCount: 0,
3051
3033
  },
3052
3034
  'max_value': {
3053
3035
  evaluate: function () {
3054
3036
  return Number.MAX_VALUE;
3055
3037
  },
3056
- validate: function (node) { return assertNumberOfParams(0, node); },
3038
+ paramCount: 0,
3057
3039
  },
3058
3040
  'min_value': {
3059
3041
  evaluate: function () {
3060
3042
  return Number.MIN_VALUE;
3061
3043
  },
3062
- validate: function (node) { return assertNumberOfParams(0, node); },
3044
+ paramCount: 0,
3063
3045
  },
3064
3046
  'epsilon': {
3065
3047
  evaluate: function () {
3066
3048
  return Number.EPSILON;
3067
3049
  },
3068
- validate: function (node) { return assertNumberOfParams(0, node); },
3050
+ paramCount: 0,
3069
3051
  },
3070
3052
  'positive_infinity': {
3071
3053
  evaluate: function () {
3072
3054
  return Number.POSITIVE_INFINITY;
3073
3055
  },
3074
- validate: function (node) { return assertNumberOfParams(0, node); },
3056
+ paramCount: 0,
3075
3057
  },
3076
3058
  'negative_infinity': {
3077
3059
  evaluate: function () {
3078
3060
  return Number.NEGATIVE_INFINITY;
3079
3061
  },
3080
- validate: function (node) { return assertNumberOfParams(0, node); },
3062
+ paramCount: 0,
3081
3063
  },
3082
3064
  'nan': {
3083
3065
  evaluate: function () {
3084
3066
  return Number.NaN;
3085
3067
  },
3086
- validate: function (node) { return assertNumberOfParams(0, node); },
3068
+ paramCount: 0,
3087
3069
  },
3088
3070
  'e': {
3089
3071
  evaluate: function () {
3090
3072
  return Math.E;
3091
3073
  },
3092
- validate: function (node) { return assertNumberOfParams(0, node); },
3074
+ paramCount: 0,
3093
3075
  },
3094
3076
  'pi': {
3095
3077
  evaluate: function () {
3096
3078
  return Math.PI;
3097
3079
  },
3098
- validate: function (node) { return assertNumberOfParams(0, node); },
3080
+ paramCount: 0,
3099
3081
  },
3100
3082
  'exp': {
3101
3083
  evaluate: function (_a, sourceCodeInfo) {
@@ -3103,7 +3085,7 @@ var Lits = (function (exports) {
3103
3085
  assertNumber(value, sourceCodeInfo);
3104
3086
  return Math.exp(value);
3105
3087
  },
3106
- validate: function (node) { return assertNumberOfParams(1, node); },
3088
+ paramCount: 1,
3107
3089
  },
3108
3090
  'log': {
3109
3091
  evaluate: function (_a, sourceCodeInfo) {
@@ -3111,7 +3093,7 @@ var Lits = (function (exports) {
3111
3093
  assertNumber(value, sourceCodeInfo);
3112
3094
  return Math.log(value);
3113
3095
  },
3114
- validate: function (node) { return assertNumberOfParams(1, node); },
3096
+ paramCount: 1,
3115
3097
  },
3116
3098
  'log2': {
3117
3099
  evaluate: function (_a, sourceCodeInfo) {
@@ -3119,7 +3101,7 @@ var Lits = (function (exports) {
3119
3101
  assertNumber(value, sourceCodeInfo);
3120
3102
  return Math.log2(value);
3121
3103
  },
3122
- validate: function (node) { return assertNumberOfParams(1, node); },
3104
+ paramCount: 1,
3123
3105
  },
3124
3106
  'log10': {
3125
3107
  evaluate: function (_a, sourceCodeInfo) {
@@ -3127,7 +3109,7 @@ var Lits = (function (exports) {
3127
3109
  assertNumber(value, sourceCodeInfo);
3128
3110
  return Math.log10(value);
3129
3111
  },
3130
- validate: function (node) { return assertNumberOfParams(1, node); },
3112
+ paramCount: 1,
3131
3113
  },
3132
3114
  'sin': {
3133
3115
  evaluate: function (_a, sourceCodeInfo) {
@@ -3135,7 +3117,7 @@ var Lits = (function (exports) {
3135
3117
  assertNumber(value, sourceCodeInfo);
3136
3118
  return Math.sin(value);
3137
3119
  },
3138
- validate: function (node) { return assertNumberOfParams(1, node); },
3120
+ paramCount: 1,
3139
3121
  },
3140
3122
  'asin': {
3141
3123
  evaluate: function (_a, sourceCodeInfo) {
@@ -3143,7 +3125,7 @@ var Lits = (function (exports) {
3143
3125
  assertNumber(value, sourceCodeInfo);
3144
3126
  return Math.asin(value);
3145
3127
  },
3146
- validate: function (node) { return assertNumberOfParams(1, node); },
3128
+ paramCount: 1,
3147
3129
  },
3148
3130
  'sinh': {
3149
3131
  evaluate: function (_a, sourceCodeInfo) {
@@ -3151,7 +3133,7 @@ var Lits = (function (exports) {
3151
3133
  assertNumber(value, sourceCodeInfo);
3152
3134
  return Math.sinh(value);
3153
3135
  },
3154
- validate: function (node) { return assertNumberOfParams(1, node); },
3136
+ paramCount: 1,
3155
3137
  },
3156
3138
  'asinh': {
3157
3139
  evaluate: function (_a, sourceCodeInfo) {
@@ -3159,7 +3141,7 @@ var Lits = (function (exports) {
3159
3141
  assertNumber(value, sourceCodeInfo);
3160
3142
  return Math.asinh(value);
3161
3143
  },
3162
- validate: function (node) { return assertNumberOfParams(1, node); },
3144
+ paramCount: 1,
3163
3145
  },
3164
3146
  'cos': {
3165
3147
  evaluate: function (_a, sourceCodeInfo) {
@@ -3167,7 +3149,7 @@ var Lits = (function (exports) {
3167
3149
  assertNumber(value, sourceCodeInfo);
3168
3150
  return Math.cos(value);
3169
3151
  },
3170
- validate: function (node) { return assertNumberOfParams(1, node); },
3152
+ paramCount: 1,
3171
3153
  },
3172
3154
  'acos': {
3173
3155
  evaluate: function (_a, sourceCodeInfo) {
@@ -3175,7 +3157,7 @@ var Lits = (function (exports) {
3175
3157
  assertNumber(value, sourceCodeInfo);
3176
3158
  return Math.acos(value);
3177
3159
  },
3178
- validate: function (node) { return assertNumberOfParams(1, node); },
3160
+ paramCount: 1,
3179
3161
  },
3180
3162
  'cosh': {
3181
3163
  evaluate: function (_a, sourceCodeInfo) {
@@ -3183,7 +3165,7 @@ var Lits = (function (exports) {
3183
3165
  assertNumber(value, sourceCodeInfo);
3184
3166
  return Math.cosh(value);
3185
3167
  },
3186
- validate: function (node) { return assertNumberOfParams(1, node); },
3168
+ paramCount: 1,
3187
3169
  },
3188
3170
  'acosh': {
3189
3171
  evaluate: function (_a, sourceCodeInfo) {
@@ -3191,7 +3173,7 @@ var Lits = (function (exports) {
3191
3173
  assertNumber(value, sourceCodeInfo);
3192
3174
  return Math.acosh(value);
3193
3175
  },
3194
- validate: function (node) { return assertNumberOfParams(1, node); },
3176
+ paramCount: 1,
3195
3177
  },
3196
3178
  'tan': {
3197
3179
  evaluate: function (_a, sourceCodeInfo) {
@@ -3199,7 +3181,7 @@ var Lits = (function (exports) {
3199
3181
  assertNumber(value, sourceCodeInfo);
3200
3182
  return Math.tan(value);
3201
3183
  },
3202
- validate: function (node) { return assertNumberOfParams(1, node); },
3184
+ paramCount: 1,
3203
3185
  },
3204
3186
  'atan': {
3205
3187
  evaluate: function (_a, sourceCodeInfo) {
@@ -3207,7 +3189,7 @@ var Lits = (function (exports) {
3207
3189
  assertNumber(value, sourceCodeInfo);
3208
3190
  return Math.atan(value);
3209
3191
  },
3210
- validate: function (node) { return assertNumberOfParams(1, node); },
3192
+ paramCount: 1,
3211
3193
  },
3212
3194
  'tanh': {
3213
3195
  evaluate: function (_a, sourceCodeInfo) {
@@ -3215,7 +3197,7 @@ var Lits = (function (exports) {
3215
3197
  assertNumber(value, sourceCodeInfo);
3216
3198
  return Math.tanh(value);
3217
3199
  },
3218
- validate: function (node) { return assertNumberOfParams(1, node); },
3200
+ paramCount: 1,
3219
3201
  },
3220
3202
  'atanh': {
3221
3203
  evaluate: function (_a, sourceCodeInfo) {
@@ -3223,7 +3205,7 @@ var Lits = (function (exports) {
3223
3205
  assertNumber(value, sourceCodeInfo);
3224
3206
  return Math.atanh(value);
3225
3207
  },
3226
- validate: function (node) { return assertNumberOfParams(1, node); },
3208
+ paramCount: 1,
3227
3209
  },
3228
3210
  };
3229
3211
 
@@ -3238,7 +3220,7 @@ var Lits = (function (exports) {
3238
3220
  }
3239
3221
  return true;
3240
3222
  },
3241
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3223
+ paramCount: { min: 1 },
3242
3224
  },
3243
3225
  '==': {
3244
3226
  evaluate: function (_a) {
@@ -3260,14 +3242,14 @@ var Lits = (function (exports) {
3260
3242
  }
3261
3243
  return true;
3262
3244
  },
3263
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3245
+ paramCount: { min: 1 },
3264
3246
  },
3265
3247
  'equal?': {
3266
3248
  evaluate: function (_a, sourceCodeInfo) {
3267
3249
  var _b = __read(_a, 2), a = _b[0], b = _b[1];
3268
3250
  return deepEqual(asAny(a, sourceCodeInfo), asAny(b, sourceCodeInfo), sourceCodeInfo);
3269
3251
  },
3270
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3252
+ paramCount: { min: 1 },
3271
3253
  },
3272
3254
  '>': {
3273
3255
  evaluate: function (_a) {
@@ -3291,7 +3273,7 @@ var Lits = (function (exports) {
3291
3273
  }
3292
3274
  return true;
3293
3275
  },
3294
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3276
+ paramCount: { min: 1 },
3295
3277
  },
3296
3278
  '<': {
3297
3279
  evaluate: function (_a) {
@@ -3315,7 +3297,7 @@ var Lits = (function (exports) {
3315
3297
  }
3316
3298
  return true;
3317
3299
  },
3318
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3300
+ paramCount: { min: 1 },
3319
3301
  },
3320
3302
  '>=': {
3321
3303
  evaluate: function (_a) {
@@ -3339,7 +3321,7 @@ var Lits = (function (exports) {
3339
3321
  }
3340
3322
  return true;
3341
3323
  },
3342
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3324
+ paramCount: { min: 1 },
3343
3325
  },
3344
3326
  '<=': {
3345
3327
  evaluate: function (_a) {
@@ -3363,14 +3345,14 @@ var Lits = (function (exports) {
3363
3345
  }
3364
3346
  return true;
3365
3347
  },
3366
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
3348
+ paramCount: { min: 1 },
3367
3349
  },
3368
3350
  '!': {
3369
3351
  evaluate: function (_a) {
3370
3352
  var _b = __read(_a, 1), first = _b[0];
3371
3353
  return !first;
3372
3354
  },
3373
- validate: function (node) { return assertNumberOfParams(1, node); },
3355
+ paramCount: 1,
3374
3356
  },
3375
3357
  'epoch>iso_date': {
3376
3358
  evaluate: function (_a, sourceCodeInfo) {
@@ -3378,7 +3360,7 @@ var Lits = (function (exports) {
3378
3360
  assertNumber(ms, sourceCodeInfo);
3379
3361
  return new Date(ms).toISOString();
3380
3362
  },
3381
- validate: function (node) { return assertNumberOfParams(1, node); },
3363
+ paramCount: 1,
3382
3364
  },
3383
3365
  'iso_date>epoch': {
3384
3366
  evaluate: function (_a, sourceCodeInfo) {
@@ -3388,7 +3370,7 @@ var Lits = (function (exports) {
3388
3370
  assertNumber(ms, sourceCodeInfo, { finite: true });
3389
3371
  return ms;
3390
3372
  },
3391
- validate: function (node) { return assertNumberOfParams(1, node); },
3373
+ paramCount: 1,
3392
3374
  },
3393
3375
  'write!': {
3394
3376
  evaluate: function (params, sourceCodeInfo) {
@@ -3398,20 +3380,21 @@ var Lits = (function (exports) {
3398
3380
  return asAny(params[params.length - 1], sourceCodeInfo);
3399
3381
  return null;
3400
3382
  },
3383
+ paramCount: {},
3401
3384
  },
3402
3385
  'boolean': {
3403
3386
  evaluate: function (_a) {
3404
3387
  var _b = __read(_a, 1), value = _b[0];
3405
3388
  return !!value;
3406
3389
  },
3407
- validate: function (node) { return assertNumberOfParams(1, node); },
3390
+ paramCount: 1,
3408
3391
  },
3409
3392
  'compare': {
3410
3393
  evaluate: function (_a) {
3411
3394
  var _b = __read(_a, 2), a = _b[0], b = _b[1];
3412
3395
  return compare(a, b);
3413
3396
  },
3414
- validate: function (node) { return assertNumberOfParams(2, node); },
3397
+ paramCount: 2,
3415
3398
  },
3416
3399
  'json_parse': {
3417
3400
  evaluate: function (_a, sourceCodeInfo) {
@@ -3420,7 +3403,7 @@ var Lits = (function (exports) {
3420
3403
  // eslint-disable-next-line ts/no-unsafe-return
3421
3404
  return JSON.parse(first);
3422
3405
  },
3423
- validate: function (node) { return assertNumberOfParams(1, node); },
3406
+ paramCount: 1,
3424
3407
  },
3425
3408
  'json_stringify': {
3426
3409
  evaluate: function (_a, sourceCodeInfo) {
@@ -3431,7 +3414,7 @@ var Lits = (function (exports) {
3431
3414
  assertNumber(second, sourceCodeInfo);
3432
3415
  return JSON.stringify(first, null, second);
3433
3416
  },
3434
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3417
+ paramCount: { min: 1, max: 2 },
3435
3418
  },
3436
3419
  };
3437
3420
 
@@ -3445,7 +3428,7 @@ var Lits = (function (exports) {
3445
3428
  throw new AssertionError(message, sourceCodeInfo);
3446
3429
  return asAny(value, sourceCodeInfo);
3447
3430
  },
3448
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3431
+ paramCount: { min: 1, max: 2 },
3449
3432
  },
3450
3433
  'assert=': {
3451
3434
  evaluate: function (_a, sourceCodeInfo) {
@@ -3455,7 +3438,7 @@ var Lits = (function (exports) {
3455
3438
  throw new AssertionError("Expected ".concat(first, " to be ").concat(second, ".").concat(message), sourceCodeInfo);
3456
3439
  return null;
3457
3440
  },
3458
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3441
+ paramCount: { min: 2, max: 3 },
3459
3442
  },
3460
3443
  'assert!=': {
3461
3444
  evaluate: function (_a, sourceCodeInfo) {
@@ -3465,7 +3448,7 @@ var Lits = (function (exports) {
3465
3448
  throw new AssertionError("Expected ".concat(first, " not to be ").concat(second, ".").concat(message), sourceCodeInfo);
3466
3449
  return null;
3467
3450
  },
3468
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3451
+ paramCount: { min: 2, max: 3 },
3469
3452
  },
3470
3453
  'assert_equal': {
3471
3454
  evaluate: function (_a, sourceCodeInfo) {
@@ -3476,7 +3459,7 @@ var Lits = (function (exports) {
3476
3459
  }
3477
3460
  return null;
3478
3461
  },
3479
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3462
+ paramCount: { min: 2, max: 3 },
3480
3463
  },
3481
3464
  'assert_not_equal': {
3482
3465
  evaluate: function (_a, sourceCodeInfo) {
@@ -3487,7 +3470,7 @@ var Lits = (function (exports) {
3487
3470
  }
3488
3471
  return null;
3489
3472
  },
3490
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3473
+ paramCount: { min: 2, max: 3 },
3491
3474
  },
3492
3475
  'assert_gt': {
3493
3476
  evaluate: function (_a, sourceCodeInfo) {
@@ -3497,7 +3480,7 @@ var Lits = (function (exports) {
3497
3480
  throw new AssertionError("Expected ".concat(first, " to be grater than ").concat(second, ".").concat(message), sourceCodeInfo);
3498
3481
  return null;
3499
3482
  },
3500
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3483
+ paramCount: { min: 2, max: 3 },
3501
3484
  },
3502
3485
  'assert_gte': {
3503
3486
  evaluate: function (_a, sourceCodeInfo) {
@@ -3507,7 +3490,7 @@ var Lits = (function (exports) {
3507
3490
  throw new AssertionError("Expected ".concat(first, " to be grater than or equal to ").concat(second, ".").concat(message), sourceCodeInfo);
3508
3491
  return null;
3509
3492
  },
3510
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3493
+ paramCount: { min: 2, max: 3 },
3511
3494
  },
3512
3495
  'assert_lt': {
3513
3496
  evaluate: function (_a, sourceCodeInfo) {
@@ -3517,7 +3500,7 @@ var Lits = (function (exports) {
3517
3500
  throw new AssertionError("Expected ".concat(first, " to be less than ").concat(second, ".").concat(message), sourceCodeInfo);
3518
3501
  return null;
3519
3502
  },
3520
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3503
+ paramCount: { min: 2, max: 3 },
3521
3504
  },
3522
3505
  'assert_lte': {
3523
3506
  evaluate: function (_a, sourceCodeInfo) {
@@ -3527,7 +3510,7 @@ var Lits = (function (exports) {
3527
3510
  throw new AssertionError("Expected ".concat(first, " to be less than or equal to ").concat(second, ".").concat(message), sourceCodeInfo);
3528
3511
  return null;
3529
3512
  },
3530
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3513
+ paramCount: { min: 2, max: 3 },
3531
3514
  },
3532
3515
  'assert_true': {
3533
3516
  evaluate: function (_a, sourceCodeInfo) {
@@ -3537,7 +3520,7 @@ var Lits = (function (exports) {
3537
3520
  throw new AssertionError("Expected ".concat(first, " to be true.").concat(message), sourceCodeInfo);
3538
3521
  return null;
3539
3522
  },
3540
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3523
+ paramCount: { min: 1, max: 2 },
3541
3524
  },
3542
3525
  'assert_false': {
3543
3526
  evaluate: function (_a, sourceCodeInfo) {
@@ -3547,7 +3530,7 @@ var Lits = (function (exports) {
3547
3530
  throw new AssertionError("Expected ".concat(first, " to be false.").concat(message), sourceCodeInfo);
3548
3531
  return null;
3549
3532
  },
3550
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3533
+ paramCount: { min: 1, max: 2 },
3551
3534
  },
3552
3535
  'assert_truthy': {
3553
3536
  evaluate: function (_a, sourceCodeInfo) {
@@ -3557,7 +3540,7 @@ var Lits = (function (exports) {
3557
3540
  throw new AssertionError("Expected ".concat(first, " to be truthy.").concat(message), sourceCodeInfo);
3558
3541
  return null;
3559
3542
  },
3560
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3543
+ paramCount: { min: 1, max: 2 },
3561
3544
  },
3562
3545
  'assert_falsy': {
3563
3546
  evaluate: function (_a, sourceCodeInfo) {
@@ -3567,7 +3550,7 @@ var Lits = (function (exports) {
3567
3550
  throw new AssertionError("Expected ".concat(first, " to be falsy.").concat(message), sourceCodeInfo);
3568
3551
  return null;
3569
3552
  },
3570
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3553
+ paramCount: { min: 1, max: 2 },
3571
3554
  },
3572
3555
  'assert_null': {
3573
3556
  evaluate: function (_a, sourceCodeInfo) {
@@ -3577,7 +3560,7 @@ var Lits = (function (exports) {
3577
3560
  throw new AssertionError("Expected ".concat(first, " to be nil.").concat(message), sourceCodeInfo);
3578
3561
  return null;
3579
3562
  },
3580
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3563
+ paramCount: { min: 1, max: 2 },
3581
3564
  },
3582
3565
  'assert_throws': {
3583
3566
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -3593,7 +3576,7 @@ var Lits = (function (exports) {
3593
3576
  }
3594
3577
  throw new AssertionError("Expected function to throw.".concat(message), sourceCodeInfo);
3595
3578
  },
3596
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3579
+ paramCount: { min: 1, max: 2 },
3597
3580
  },
3598
3581
  'assert_throws_error': {
3599
3582
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -3614,7 +3597,7 @@ var Lits = (function (exports) {
3614
3597
  }
3615
3598
  throw new AssertionError("Expected function to throw \"".concat(throwMessage, "\".").concat(message), sourceCodeInfo);
3616
3599
  },
3617
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
3600
+ paramCount: { min: 2, max: 3 },
3618
3601
  },
3619
3602
  'assert_not_throws': {
3620
3603
  evaluate: function (_a, sourceCodeInfo, contextStack, _b) {
@@ -3630,7 +3613,7 @@ var Lits = (function (exports) {
3630
3613
  }
3631
3614
  return null;
3632
3615
  },
3633
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3616
+ paramCount: { min: 1, max: 2 },
3634
3617
  },
3635
3618
  };
3636
3619
 
@@ -3646,7 +3629,7 @@ var Lits = (function (exports) {
3646
3629
  }
3647
3630
  return result;
3648
3631
  },
3649
- validate: function (node) { return assertEvenNumberOfParams(node); },
3632
+ paramCount: { even: true },
3650
3633
  },
3651
3634
  keys: {
3652
3635
  evaluate: function (_a, sourceCodeInfo) {
@@ -3654,7 +3637,7 @@ var Lits = (function (exports) {
3654
3637
  assertObj(obj, sourceCodeInfo);
3655
3638
  return Object.keys(obj);
3656
3639
  },
3657
- validate: function (node) { return assertNumberOfParams(1, node); },
3640
+ paramCount: 1,
3658
3641
  },
3659
3642
  vals: {
3660
3643
  evaluate: function (_a, sourceCodeInfo) {
@@ -3662,7 +3645,7 @@ var Lits = (function (exports) {
3662
3645
  assertObj(obj, sourceCodeInfo);
3663
3646
  return Object.values(obj);
3664
3647
  },
3665
- validate: function (node) { return assertNumberOfParams(1, node); },
3648
+ paramCount: 1,
3666
3649
  },
3667
3650
  entries: {
3668
3651
  evaluate: function (_a, sourceCodeInfo) {
@@ -3670,7 +3653,7 @@ var Lits = (function (exports) {
3670
3653
  assertObj(obj, sourceCodeInfo);
3671
3654
  return Object.entries(obj);
3672
3655
  },
3673
- validate: function (node) { return assertNumberOfParams(1, node); },
3656
+ paramCount: 1,
3674
3657
  },
3675
3658
  find: {
3676
3659
  evaluate: function (_a, sourceCodeInfo) {
@@ -3681,7 +3664,7 @@ var Lits = (function (exports) {
3681
3664
  return [key, obj[key]];
3682
3665
  return null;
3683
3666
  },
3684
- validate: function (node) { return assertNumberOfParams(2, node); },
3667
+ paramCount: 2,
3685
3668
  },
3686
3669
  dissoc: {
3687
3670
  evaluate: function (_a, sourceCodeInfo) {
@@ -3692,7 +3675,7 @@ var Lits = (function (exports) {
3692
3675
  delete newObj[key];
3693
3676
  return newObj;
3694
3677
  },
3695
- validate: function (node) { return assertNumberOfParams(2, node); },
3678
+ paramCount: 2,
3696
3679
  },
3697
3680
  merge: {
3698
3681
  evaluate: function (params, sourceCodeInfo) {
@@ -3705,7 +3688,7 @@ var Lits = (function (exports) {
3705
3688
  return __assign(__assign({}, result), obj);
3706
3689
  }, __assign({}, first));
3707
3690
  },
3708
- validate: function (node) { return assertNumberOfParams({ min: 0 }, node); },
3691
+ paramCount: { min: 0 },
3709
3692
  },
3710
3693
  merge_with: {
3711
3694
  evaluate: function (params, sourceCodeInfo, contextStack, _a) {
@@ -3728,7 +3711,7 @@ var Lits = (function (exports) {
3728
3711
  return result;
3729
3712
  }, __assign({}, first));
3730
3713
  },
3731
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
3714
+ paramCount: { min: 2 },
3732
3715
  },
3733
3716
  zipmap: {
3734
3717
  evaluate: function (_a, sourceCodeInfo) {
@@ -3743,7 +3726,7 @@ var Lits = (function (exports) {
3743
3726
  }
3744
3727
  return result;
3745
3728
  },
3746
- validate: function (node) { return assertNumberOfParams(2, node); },
3729
+ paramCount: 2,
3747
3730
  },
3748
3731
  select_keys: {
3749
3732
  evaluate: function (_a, sourceCodeInfo) {
@@ -3756,7 +3739,7 @@ var Lits = (function (exports) {
3756
3739
  return result;
3757
3740
  }, {});
3758
3741
  },
3759
- validate: function (node) { return assertNumberOfParams(2, node); },
3742
+ paramCount: 2,
3760
3743
  },
3761
3744
  };
3762
3745
 
@@ -3766,42 +3749,42 @@ var Lits = (function (exports) {
3766
3749
  var _b = __read(_a, 1), first = _b[0];
3767
3750
  return isLitsFunction(first);
3768
3751
  },
3769
- validate: function (node) { return assertNumberOfParams(1, node); },
3752
+ paramCount: 1,
3770
3753
  },
3771
3754
  'string?': {
3772
3755
  evaluate: function (_a) {
3773
3756
  var _b = __read(_a, 1), first = _b[0];
3774
3757
  return typeof first === 'string';
3775
3758
  },
3776
- validate: function (node) { return assertNumberOfParams(1, node); },
3759
+ paramCount: 1,
3777
3760
  },
3778
3761
  'number?': {
3779
3762
  evaluate: function (_a) {
3780
3763
  var _b = __read(_a, 1), first = _b[0];
3781
3764
  return typeof first === 'number';
3782
3765
  },
3783
- validate: function (node) { return assertNumberOfParams(1, node); },
3766
+ paramCount: 1,
3784
3767
  },
3785
3768
  'integer?': {
3786
3769
  evaluate: function (_a) {
3787
3770
  var _b = __read(_a, 1), first = _b[0];
3788
3771
  return typeof first === 'number' && isNumber(first, { integer: true });
3789
3772
  },
3790
- validate: function (node) { return assertNumberOfParams(1, node); },
3773
+ paramCount: 1,
3791
3774
  },
3792
3775
  'boolean?': {
3793
3776
  evaluate: function (_a) {
3794
3777
  var _b = __read(_a, 1), first = _b[0];
3795
3778
  return typeof first === 'boolean';
3796
3779
  },
3797
- validate: function (node) { return assertNumberOfParams(1, node); },
3780
+ paramCount: 1,
3798
3781
  },
3799
3782
  'nil?': {
3800
3783
  evaluate: function (_a) {
3801
3784
  var _b = __read(_a, 1), first = _b[0];
3802
3785
  return first === null || first === undefined;
3803
3786
  },
3804
- validate: function (node) { return assertNumberOfParams(1, node); },
3787
+ paramCount: 1,
3805
3788
  },
3806
3789
  'zero?': {
3807
3790
  evaluate: function (_a, sourceCodeInfo) {
@@ -3809,7 +3792,7 @@ var Lits = (function (exports) {
3809
3792
  assertNumber(first, sourceCodeInfo, { finite: true });
3810
3793
  return first === 0;
3811
3794
  },
3812
- validate: function (node) { return assertNumberOfParams(1, node); },
3795
+ paramCount: 1,
3813
3796
  },
3814
3797
  'pos?': {
3815
3798
  evaluate: function (_a, sourceCodeInfo) {
@@ -3817,7 +3800,7 @@ var Lits = (function (exports) {
3817
3800
  assertNumber(first, sourceCodeInfo, { finite: true });
3818
3801
  return first > 0;
3819
3802
  },
3820
- validate: function (node) { return assertNumberOfParams(1, node); },
3803
+ paramCount: 1,
3821
3804
  },
3822
3805
  'neg?': {
3823
3806
  evaluate: function (_a, sourceCodeInfo) {
@@ -3825,7 +3808,7 @@ var Lits = (function (exports) {
3825
3808
  assertNumber(first, sourceCodeInfo, { finite: true });
3826
3809
  return first < 0;
3827
3810
  },
3828
- validate: function (node) { return assertNumberOfParams(1, node); },
3811
+ paramCount: 1,
3829
3812
  },
3830
3813
  'even?': {
3831
3814
  evaluate: function (_a, sourceCodeInfo) {
@@ -3833,7 +3816,7 @@ var Lits = (function (exports) {
3833
3816
  assertNumber(first, sourceCodeInfo, { finite: true });
3834
3817
  return first % 2 === 0;
3835
3818
  },
3836
- validate: function (node) { return assertNumberOfParams(1, node); },
3819
+ paramCount: 1,
3837
3820
  },
3838
3821
  'odd?': {
3839
3822
  evaluate: function (_a, sourceCodeInfo) {
@@ -3841,42 +3824,42 @@ var Lits = (function (exports) {
3841
3824
  assertNumber(first, sourceCodeInfo, { finite: true });
3842
3825
  return isNumber(first, { integer: true }) && first % 2 !== 0;
3843
3826
  },
3844
- validate: function (node) { return assertNumberOfParams(1, node); },
3827
+ paramCount: 1,
3845
3828
  },
3846
3829
  'array?': {
3847
3830
  evaluate: function (_a) {
3848
3831
  var _b = __read(_a, 1), first = _b[0];
3849
3832
  return Array.isArray(first);
3850
3833
  },
3851
- validate: function (node) { return assertNumberOfParams(1, node); },
3834
+ paramCount: 1,
3852
3835
  },
3853
3836
  'coll?': {
3854
3837
  evaluate: function (_a) {
3855
3838
  var _b = __read(_a, 1), first = _b[0];
3856
3839
  return isColl(first);
3857
3840
  },
3858
- validate: function (node) { return assertNumberOfParams(1, node); },
3841
+ paramCount: 1,
3859
3842
  },
3860
3843
  'seq?': {
3861
3844
  evaluate: function (_a) {
3862
3845
  var _b = __read(_a, 1), first = _b[0];
3863
3846
  return isSeq(first);
3864
3847
  },
3865
- validate: function (node) { return assertNumberOfParams(1, node); },
3848
+ paramCount: 1,
3866
3849
  },
3867
3850
  'object?': {
3868
3851
  evaluate: function (_a) {
3869
3852
  var _b = __read(_a, 1), first = _b[0];
3870
3853
  return isObj(first);
3871
3854
  },
3872
- validate: function (node) { return assertNumberOfParams(1, node); },
3855
+ paramCount: 1,
3873
3856
  },
3874
3857
  'regexp?': {
3875
3858
  evaluate: function (_a) {
3876
3859
  var _b = __read(_a, 1), value = _b[0];
3877
3860
  return isRegularExpression(value);
3878
3861
  },
3879
- validate: function (node) { return assertNumberOfParams(1, node); },
3862
+ paramCount: 1,
3880
3863
  },
3881
3864
  'finite?': {
3882
3865
  evaluate: function (_a, sourceCodeInfo) {
@@ -3884,7 +3867,7 @@ var Lits = (function (exports) {
3884
3867
  assertNumber(value, sourceCodeInfo);
3885
3868
  return Number.isFinite(value);
3886
3869
  },
3887
- validate: function (node) { return assertNumberOfParams(1, node); },
3870
+ paramCount: 1,
3888
3871
  },
3889
3872
  'nan?': {
3890
3873
  evaluate: function (_a, sourceCodeInfo) {
@@ -3892,7 +3875,7 @@ var Lits = (function (exports) {
3892
3875
  assertNumber(value, sourceCodeInfo);
3893
3876
  return Number.isNaN(value);
3894
3877
  },
3895
- validate: function (node) { return assertNumberOfParams(1, node); },
3878
+ paramCount: 1,
3896
3879
  },
3897
3880
  'positive_infinity?': {
3898
3881
  evaluate: function (_a, sourceCodeInfo) {
@@ -3900,7 +3883,7 @@ var Lits = (function (exports) {
3900
3883
  assertNumber(value, sourceCodeInfo);
3901
3884
  return value === Number.POSITIVE_INFINITY;
3902
3885
  },
3903
- validate: function (node) { return assertNumberOfParams(1, node); },
3886
+ paramCount: 1,
3904
3887
  },
3905
3888
  'negative_infinity?': {
3906
3889
  evaluate: function (_a, sourceCodeInfo) {
@@ -3908,21 +3891,21 @@ var Lits = (function (exports) {
3908
3891
  assertNumber(value, sourceCodeInfo);
3909
3892
  return value === Number.NEGATIVE_INFINITY;
3910
3893
  },
3911
- validate: function (node) { return assertNumberOfParams(1, node); },
3894
+ paramCount: 1,
3912
3895
  },
3913
3896
  'true?': {
3914
3897
  evaluate: function (_a) {
3915
3898
  var _b = __read(_a, 1), value = _b[0];
3916
3899
  return value === true;
3917
3900
  },
3918
- validate: function (node) { return assertNumberOfParams(1, node); },
3901
+ paramCount: 1,
3919
3902
  },
3920
3903
  'false?': {
3921
3904
  evaluate: function (_a) {
3922
3905
  var _b = __read(_a, 1), value = _b[0];
3923
3906
  return value === false;
3924
3907
  },
3925
- validate: function (node) { return assertNumberOfParams(1, node); },
3908
+ paramCount: 1,
3926
3909
  },
3927
3910
  'empty?': {
3928
3911
  evaluate: function (_a, sourceCodeInfo) {
@@ -3936,7 +3919,7 @@ var Lits = (function (exports) {
3936
3919
  return coll.length === 0;
3937
3920
  return Object.keys(coll).length === 0;
3938
3921
  },
3939
- validate: function (node) { return assertNumberOfParams(1, node); },
3922
+ paramCount: 1,
3940
3923
  },
3941
3924
  'not_empty?': {
3942
3925
  evaluate: function (_a, sourceCodeInfo) {
@@ -3950,7 +3933,7 @@ var Lits = (function (exports) {
3950
3933
  return coll.length > 0;
3951
3934
  return Object.keys(coll).length > 0;
3952
3935
  },
3953
- validate: function (node) { return assertNumberOfParams(1, node); },
3936
+ paramCount: 1,
3954
3937
  },
3955
3938
  };
3956
3939
 
@@ -3969,7 +3952,7 @@ var Lits = (function (exports) {
3969
3952
  _b.f = flags,
3970
3953
  _b;
3971
3954
  },
3972
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
3955
+ paramCount: { min: 1, max: 2 },
3973
3956
  },
3974
3957
  match: {
3975
3958
  evaluate: function (_a, sourceCodeInfo) {
@@ -3983,7 +3966,7 @@ var Lits = (function (exports) {
3983
3966
  return __spreadArray([], __read(match), false);
3984
3967
  return null;
3985
3968
  },
3986
- validate: function (node) { return assertNumberOfParams(2, node); },
3969
+ paramCount: 2,
3987
3970
  },
3988
3971
  replace: {
3989
3972
  evaluate: function (_a, sourceCodeInfo) {
@@ -3994,7 +3977,7 @@ var Lits = (function (exports) {
3994
3977
  var matcher = isRegularExpression(regexp) ? new RegExp(regexp.s, "".concat(regexp.f)) : regexp;
3995
3978
  return str.replace(matcher, value);
3996
3979
  },
3997
- validate: function (node) { return assertNumberOfParams(3, node); },
3980
+ paramCount: 3,
3998
3981
  },
3999
3982
  replace_all: {
4000
3983
  evaluate: function (_a, sourceCodeInfo) {
@@ -4005,7 +3988,7 @@ var Lits = (function (exports) {
4005
3988
  var matcher = isRegularExpression(regexp) ? new RegExp(regexp.s, "".concat(regexp.f.includes('g') ? regexp.f : "".concat(regexp.f, "g"))) : regexp;
4006
3989
  return str.replaceAll(matcher, value);
4007
3990
  },
4008
- validate: function (node) { return assertNumberOfParams(3, node); },
3991
+ paramCount: 3,
4009
3992
  },
4010
3993
  };
4011
3994
 
@@ -4021,7 +4004,7 @@ var Lits = (function (exports) {
4021
4004
  assertNumber(third, sourceCodeInfo, { gte: second });
4022
4005
  return (first).substring(second, third);
4023
4006
  },
4024
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4007
+ paramCount: { min: 2, max: 3 },
4025
4008
  },
4026
4009
  'string_repeat': {
4027
4010
  evaluate: function (_a, sourceCodeInfo) {
@@ -4030,7 +4013,7 @@ var Lits = (function (exports) {
4030
4013
  assertNumber(count, sourceCodeInfo, { integer: true, nonNegative: true });
4031
4014
  return str.repeat(count);
4032
4015
  },
4033
- validate: function (node) { return assertNumberOfParams(2, node); },
4016
+ paramCount: 2,
4034
4017
  },
4035
4018
  'str': {
4036
4019
  evaluate: function (params) {
@@ -4045,6 +4028,7 @@ var Lits = (function (exports) {
4045
4028
  return result + paramStr;
4046
4029
  }, '');
4047
4030
  },
4031
+ paramCount: {},
4048
4032
  },
4049
4033
  'number': {
4050
4034
  evaluate: function (_a, sourceCodeInfo) {
@@ -4055,7 +4039,7 @@ var Lits = (function (exports) {
4055
4039
  throw new LitsError("Could not convert '".concat(str, "' to a number."), sourceCodeInfo);
4056
4040
  return number;
4057
4041
  },
4058
- validate: function (node) { return assertNumberOfParams(1, node); },
4042
+ paramCount: 1,
4059
4043
  },
4060
4044
  'from_char_code': {
4061
4045
  evaluate: function (_a, sourceCodeInfo) {
@@ -4069,7 +4053,7 @@ var Lits = (function (exports) {
4069
4053
  throw new LitsError(error, sourceCodeInfo);
4070
4054
  }
4071
4055
  },
4072
- validate: function (node) { return assertNumberOfParams(1, node); },
4056
+ paramCount: 1,
4073
4057
  },
4074
4058
  'to_char_code': {
4075
4059
  evaluate: function (_a, sourceCodeInfo) {
@@ -4077,7 +4061,7 @@ var Lits = (function (exports) {
4077
4061
  assertString(str, sourceCodeInfo, { nonEmpty: true });
4078
4062
  return asNonUndefined(str.codePointAt(0), sourceCodeInfo);
4079
4063
  },
4080
- validate: function (node) { return assertNumberOfParams(1, node); },
4064
+ paramCount: 1,
4081
4065
  },
4082
4066
  'lower_case': {
4083
4067
  evaluate: function (_a, sourceCodeInfo) {
@@ -4085,7 +4069,7 @@ var Lits = (function (exports) {
4085
4069
  assertString(str, sourceCodeInfo);
4086
4070
  return str.toLowerCase();
4087
4071
  },
4088
- validate: function (node) { return assertNumberOfParams(1, node); },
4072
+ paramCount: 1,
4089
4073
  },
4090
4074
  'upper_case': {
4091
4075
  evaluate: function (_a, sourceCodeInfo) {
@@ -4093,7 +4077,7 @@ var Lits = (function (exports) {
4093
4077
  assertString(str, sourceCodeInfo);
4094
4078
  return str.toUpperCase();
4095
4079
  },
4096
- validate: function (node) { return assertNumberOfParams(1, node); },
4080
+ paramCount: 1,
4097
4081
  },
4098
4082
  'trim': {
4099
4083
  evaluate: function (_a, sourceCodeInfo) {
@@ -4101,7 +4085,7 @@ var Lits = (function (exports) {
4101
4085
  assertString(str, sourceCodeInfo);
4102
4086
  return str.trim();
4103
4087
  },
4104
- validate: function (node) { return assertNumberOfParams(1, node); },
4088
+ paramCount: 1,
4105
4089
  },
4106
4090
  'trim_left': {
4107
4091
  evaluate: function (_a, sourceCodeInfo) {
@@ -4109,7 +4093,7 @@ var Lits = (function (exports) {
4109
4093
  assertString(str, sourceCodeInfo);
4110
4094
  return str.replace(/^\s+/, '');
4111
4095
  },
4112
- validate: function (node) { return assertNumberOfParams(1, node); },
4096
+ paramCount: 1,
4113
4097
  },
4114
4098
  'trim_right': {
4115
4099
  evaluate: function (_a, sourceCodeInfo) {
@@ -4117,7 +4101,7 @@ var Lits = (function (exports) {
4117
4101
  assertString(str, sourceCodeInfo);
4118
4102
  return str.replace(/\s+$/, '');
4119
4103
  },
4120
- validate: function (node) { return assertNumberOfParams(1, node); },
4104
+ paramCount: 1,
4121
4105
  },
4122
4106
  '++': {
4123
4107
  evaluate: function (params, sourceCodeInfo) {
@@ -4141,7 +4125,7 @@ var Lits = (function (exports) {
4141
4125
  return "".concat(acc).concat(str);
4142
4126
  }, first === null ? '' : "".concat(first));
4143
4127
  },
4144
- validate: function () { return undefined; },
4128
+ paramCount: {},
4145
4129
  },
4146
4130
  'join': {
4147
4131
  evaluate: function (_a, sourceCodeInfo) {
@@ -4151,7 +4135,7 @@ var Lits = (function (exports) {
4151
4135
  assertString(delimiter, sourceCodeInfo);
4152
4136
  return stringList.join(delimiter);
4153
4137
  },
4154
- validate: function (node) { return assertNumberOfParams(2, node); },
4138
+ paramCount: 2,
4155
4139
  },
4156
4140
  'split': {
4157
4141
  evaluate: function (_a, sourceCodeInfo) {
@@ -4165,7 +4149,7 @@ var Lits = (function (exports) {
4165
4149
  : new RegExp(stringOrRegExpValue.s, stringOrRegExpValue.f);
4166
4150
  return str.split(delimiter, limit);
4167
4151
  },
4168
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4152
+ paramCount: { min: 2, max: 3 },
4169
4153
  },
4170
4154
  'split_lines': {
4171
4155
  evaluate: function (_a, sourceCodeInfo) {
@@ -4173,7 +4157,7 @@ var Lits = (function (exports) {
4173
4157
  assertString(str, sourceCodeInfo);
4174
4158
  return str.split((/\r\n|\n|\r/)).filter(function (line) { return line !== ''; });
4175
4159
  },
4176
- validate: function (node) { return assertNumberOfParams(1, node); },
4160
+ paramCount: 1,
4177
4161
  },
4178
4162
  'pad_left': {
4179
4163
  evaluate: function (_a, sourceCodeInfo) {
@@ -4184,7 +4168,7 @@ var Lits = (function (exports) {
4184
4168
  assertString(padString, sourceCodeInfo);
4185
4169
  return str.padStart(length, padString);
4186
4170
  },
4187
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4171
+ paramCount: { min: 2, max: 3 },
4188
4172
  },
4189
4173
  'pad_right': {
4190
4174
  evaluate: function (_a, sourceCodeInfo) {
@@ -4195,7 +4179,7 @@ var Lits = (function (exports) {
4195
4179
  assertString(padString, sourceCodeInfo);
4196
4180
  return str.padEnd(length, padString);
4197
4181
  },
4198
- validate: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4182
+ paramCount: { min: 2, max: 3 },
4199
4183
  },
4200
4184
  'template': {
4201
4185
  evaluate: function (_a, sourceCodeInfo) {
@@ -4226,7 +4210,7 @@ var Lits = (function (exports) {
4226
4210
  }
4227
4211
  }
4228
4212
  },
4229
- validate: function (node) { return assertNumberOfParams({ min: 1, max: 10 }, node); },
4213
+ paramCount: { min: 1, max: 10 },
4230
4214
  },
4231
4215
  'encode_base64': {
4232
4216
  evaluate: function (_a, sourceCodeInfo) {
@@ -4237,7 +4221,7 @@ var Lits = (function (exports) {
4237
4221
  return String.fromCharCode(Number.parseInt(p1, 16));
4238
4222
  }));
4239
4223
  },
4240
- validate: function (node) { return assertNumberOfParams(1, node); },
4224
+ paramCount: 1,
4241
4225
  },
4242
4226
  'decode_base64': {
4243
4227
  evaluate: function (_a, sourceCodeInfo) {
@@ -4255,7 +4239,7 @@ var Lits = (function (exports) {
4255
4239
  throw new LitsError(error, sourceCodeInfo);
4256
4240
  }
4257
4241
  },
4258
- validate: function (node) { return assertNumberOfParams(1, node); },
4242
+ paramCount: 1,
4259
4243
  },
4260
4244
  'encode_uri_component': {
4261
4245
  evaluate: function (_a, sourceCodeInfo) {
@@ -4263,7 +4247,7 @@ var Lits = (function (exports) {
4263
4247
  assertString(value, sourceCodeInfo);
4264
4248
  return encodeURIComponent(value);
4265
4249
  },
4266
- validate: function (node) { return assertNumberOfParams(1, node); },
4250
+ paramCount: 1,
4267
4251
  },
4268
4252
  'decode_uri_component': {
4269
4253
  evaluate: function (_a, sourceCodeInfo) {
@@ -4276,7 +4260,7 @@ var Lits = (function (exports) {
4276
4260
  throw new LitsError(error, sourceCodeInfo);
4277
4261
  }
4278
4262
  },
4279
- validate: function (node) { return assertNumberOfParams(1, node); },
4263
+ paramCount: 1,
4280
4264
  },
4281
4265
  'blank?': {
4282
4266
  evaluate: function (_a, sourceCodeInfo) {
@@ -4287,7 +4271,7 @@ var Lits = (function (exports) {
4287
4271
  assertString(value, sourceCodeInfo);
4288
4272
  return blankRegexp.test(value);
4289
4273
  },
4290
- validate: function (node) { return assertNumberOfParams(1, node); },
4274
+ paramCount: 1,
4291
4275
  },
4292
4276
  'capitalize': {
4293
4277
  evaluate: function (_a, sourceCodeInfo) {
@@ -4295,7 +4279,7 @@ var Lits = (function (exports) {
4295
4279
  assertString(str, sourceCodeInfo);
4296
4280
  return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
4297
4281
  },
4298
- validate: function (node) { return assertNumberOfParams(1, node); },
4282
+ paramCount: 1,
4299
4283
  },
4300
4284
  };
4301
4285
  var doubleDollarRegexp = /\$\$/g;
@@ -4326,14 +4310,14 @@ var Lits = (function (exports) {
4326
4310
  var applyArray = __spreadArray(__spreadArray([], __read(params.slice(0, -1)), false), __read(last), false);
4327
4311
  return executeFunction(func, applyArray, contextStack, sourceCodeInfo);
4328
4312
  },
4329
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
4313
+ paramCount: { min: 2 },
4330
4314
  },
4331
4315
  identity: {
4332
4316
  evaluate: function (_a) {
4333
4317
  var _b = __read(_a, 1), value = _b[0];
4334
4318
  return toAny(value);
4335
4319
  },
4336
- validate: function (node) { return assertNumberOfParams(1, node); },
4320
+ paramCount: 1,
4337
4321
  },
4338
4322
  partial: {
4339
4323
  evaluate: function (_a, sourceCodeInfo) {
@@ -4347,7 +4331,7 @@ var Lits = (function (exports) {
4347
4331
  _b.p = params,
4348
4332
  _b;
4349
4333
  },
4350
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
4334
+ paramCount: { min: 1 },
4351
4335
  },
4352
4336
  comp: {
4353
4337
  evaluate: function (fns, sourceCodeInfo) {
@@ -4365,6 +4349,7 @@ var Lits = (function (exports) {
4365
4349
  _a.f = fns,
4366
4350
  _a;
4367
4351
  },
4352
+ paramCount: {},
4368
4353
  },
4369
4354
  constantly: {
4370
4355
  evaluate: function (_a, sourceCodeInfo) {
@@ -4377,7 +4362,7 @@ var Lits = (function (exports) {
4377
4362
  _b.v = toAny(value),
4378
4363
  _b;
4379
4364
  },
4380
- validate: function (node) { return assertNumberOfParams(1, node); },
4365
+ paramCount: 1,
4381
4366
  },
4382
4367
  juxt: {
4383
4368
  evaluate: function (fns, sourceCodeInfo) {
@@ -4389,7 +4374,7 @@ var Lits = (function (exports) {
4389
4374
  _a.f = fns,
4390
4375
  _a;
4391
4376
  },
4392
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
4377
+ paramCount: { min: 1 },
4393
4378
  },
4394
4379
  complement: {
4395
4380
  evaluate: function (_a, sourceCodeInfo) {
@@ -4402,7 +4387,7 @@ var Lits = (function (exports) {
4402
4387
  _b.f = toAny(fn),
4403
4388
  _b;
4404
4389
  },
4405
- validate: function (node) { return assertNumberOfParams(1, node); },
4390
+ paramCount: 1,
4406
4391
  },
4407
4392
  every_pred: {
4408
4393
  evaluate: function (fns, sourceCodeInfo) {
@@ -4414,7 +4399,7 @@ var Lits = (function (exports) {
4414
4399
  _a.f = fns,
4415
4400
  _a;
4416
4401
  },
4417
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
4402
+ paramCount: { min: 1 },
4418
4403
  },
4419
4404
  some_pred: {
4420
4405
  evaluate: function (fns, sourceCodeInfo) {
@@ -4426,7 +4411,7 @@ var Lits = (function (exports) {
4426
4411
  _a.f = fns,
4427
4412
  _a;
4428
4413
  },
4429
- validate: function (node) { return assertNumberOfParams({ min: 1 }, node); },
4414
+ paramCount: { min: 1 },
4430
4415
  },
4431
4416
  fnil: {
4432
4417
  evaluate: function (_a, sourceCodeInfo) {
@@ -4440,7 +4425,7 @@ var Lits = (function (exports) {
4440
4425
  _b.p = params,
4441
4426
  _b;
4442
4427
  },
4443
- validate: function (node) { return assertNumberOfParams({ min: 2 }, node); },
4428
+ paramCount: { min: 2 },
4444
4429
  },
4445
4430
  };
4446
4431
 
@@ -4459,7 +4444,7 @@ var Lits = (function (exports) {
4459
4444
  };
4460
4445
  return node;
4461
4446
  },
4462
- validateParameterCount: function () { return undefined; },
4447
+ paramCount: {},
4463
4448
  evaluate: function (node, contextStack, _a) {
4464
4449
  var e_1, _b;
4465
4450
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4503,14 +4488,14 @@ var Lits = (function (exports) {
4503
4488
 
4504
4489
  var commentSpecialExpression = {
4505
4490
  polishParse: getCommonPolishSpecialExpressionParser('comment'),
4506
- validateParameterCount: function () { return undefined; },
4491
+ paramCount: {},
4507
4492
  evaluate: function () { return null; },
4508
4493
  findUnresolvedIdentifiers: function () { return new Set(); },
4509
4494
  };
4510
4495
 
4511
4496
  var condSpecialExpression = {
4512
4497
  polishParse: getCommonPolishSpecialExpressionParser('cond'),
4513
- validateParameterCount: function (node) { return assertEvenNumberOfParams(node); },
4498
+ paramCount: { even: true },
4514
4499
  evaluate: function (node, contextStack, _a) {
4515
4500
  var e_1, _b;
4516
4501
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4540,7 +4525,7 @@ var Lits = (function (exports) {
4540
4525
 
4541
4526
  var switchSpecialExpression = {
4542
4527
  polishParse: getCommonPolishSpecialExpressionParser('switch'),
4543
- validateParameterCount: function (node) { return assertOddNumberOfParams(node); },
4528
+ paramCount: { odd: true },
4544
4529
  evaluate: function (node, contextStack, _a) {
4545
4530
  var e_1, _b;
4546
4531
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4571,7 +4556,7 @@ var Lits = (function (exports) {
4571
4556
 
4572
4557
  var declaredSpecialExpression = {
4573
4558
  polishParse: getCommonPolishSpecialExpressionParser('defined?'),
4574
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
4559
+ paramCount: 1,
4575
4560
  evaluate: function (node, contextStack) {
4576
4561
  var lookUpResult = contextStack.lookUp(node.p[0]);
4577
4562
  return lookUpResult !== null;
@@ -4619,7 +4604,7 @@ var Lits = (function (exports) {
4619
4604
  assertSymbolNode(node.p[0], (_b = getTokenDebugData(node.token)) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
4620
4605
  return node;
4621
4606
  },
4622
- validateParameterCount: function (node) { return assertNumberOfParams(2, node); },
4607
+ paramCount: 2,
4623
4608
  evaluate: function (node, contextStack, _a) {
4624
4609
  var _b;
4625
4610
  var evaluateAstNode = _a.evaluateAstNode, builtin = _a.builtin;
@@ -4644,7 +4629,7 @@ var Lits = (function (exports) {
4644
4629
 
4645
4630
  var doSpecialExpression = {
4646
4631
  polishParse: getCommonPolishSpecialExpressionParser('do'),
4647
- validateParameterCount: function () { return undefined; },
4632
+ paramCount: {},
4648
4633
  evaluate: function (node, contextStack, _a) {
4649
4634
  var e_1, _b;
4650
4635
  var evaluateAstNode = _a.evaluateAstNode;
@@ -4716,7 +4701,7 @@ var Lits = (function (exports) {
4716
4701
  };
4717
4702
  return node;
4718
4703
  },
4719
- validateParameterCount: function () { return undefined; },
4704
+ paramCount: {},
4720
4705
  evaluate: function (node, contextStack, _a) {
4721
4706
  var _b;
4722
4707
  var _c, _d;
@@ -4755,7 +4740,7 @@ var Lits = (function (exports) {
4755
4740
  };
4756
4741
  return node;
4757
4742
  },
4758
- validateParameterCount: function () { return undefined; },
4743
+ paramCount: {},
4759
4744
  evaluate: function (node, contextStack, _a) {
4760
4745
  var _b;
4761
4746
  var _c;
@@ -4980,7 +4965,7 @@ var Lits = (function (exports) {
4980
4965
 
4981
4966
  var ifSpecialExpression = {
4982
4967
  polishParse: getCommonPolishSpecialExpressionParser('if'),
4983
- validateParameterCount: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4968
+ paramCount: { min: 2, max: 3 },
4984
4969
  evaluate: function (node, contextStack, _a) {
4985
4970
  var _b;
4986
4971
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5004,7 +4989,7 @@ var Lits = (function (exports) {
5004
4989
 
5005
4990
  var unlessSpecialExpression = {
5006
4991
  polishParse: getCommonPolishSpecialExpressionParser('unless'),
5007
- validateParameterCount: function (node) { return assertNumberOfParams({ min: 2, max: 3 }, node); },
4992
+ paramCount: { min: 2, max: 3 },
5008
4993
  evaluate: function (node, contextStack, _a) {
5009
4994
  var _b;
5010
4995
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5041,7 +5026,7 @@ var Lits = (function (exports) {
5041
5026
  };
5042
5027
  return node;
5043
5028
  },
5044
- validateParameterCount: function (node) { return assertNumberOfParams(0, node); },
5029
+ paramCount: 0,
5045
5030
  evaluate: function (node, contextStack, _a) {
5046
5031
  var e_1, _b;
5047
5032
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5096,7 +5081,7 @@ var Lits = (function (exports) {
5096
5081
  };
5097
5082
  return node;
5098
5083
  },
5099
- validateParameterCount: function () { return undefined; },
5084
+ paramCount: {},
5100
5085
  evaluate: function (node, contextStack, _a) {
5101
5086
  var _b;
5102
5087
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5362,7 +5347,7 @@ var Lits = (function (exports) {
5362
5347
  };
5363
5348
  return node;
5364
5349
  },
5365
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
5350
+ paramCount: 1,
5366
5351
  evaluate: function (node, contextStack, helpers) { return evaluateLoop(true, node, contextStack, helpers.evaluateAstNode); },
5367
5352
  findUnresolvedIdentifiers: function (node, contextStack, _a) {
5368
5353
  var findUnresolvedIdentifiers = _a.findUnresolvedIdentifiers, builtin = _a.builtin;
@@ -5384,7 +5369,7 @@ var Lits = (function (exports) {
5384
5369
  };
5385
5370
  return node;
5386
5371
  },
5387
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
5372
+ paramCount: 1,
5388
5373
  evaluate: function (node, contextStack, helpers) {
5389
5374
  evaluateLoop(false, node, contextStack, helpers.evaluateAstNode);
5390
5375
  return null;
@@ -5397,7 +5382,7 @@ var Lits = (function (exports) {
5397
5382
 
5398
5383
  var orSpecialExpression = {
5399
5384
  polishParse: getCommonPolishSpecialExpressionParser('||'),
5400
- validateParameterCount: function () { return undefined; },
5385
+ paramCount: {},
5401
5386
  evaluate: function (node, contextStack, _a) {
5402
5387
  var e_1, _b;
5403
5388
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5427,7 +5412,7 @@ var Lits = (function (exports) {
5427
5412
 
5428
5413
  var qqSpecialExpression = {
5429
5414
  polishParse: getCommonPolishSpecialExpressionParser('??'),
5430
- validateParameterCount: function (node) { return assertNumberOfParams({ min: 1, max: 2 }, node); },
5415
+ paramCount: { min: 1, max: 2 },
5431
5416
  evaluate: function (node, contextStack, _a) {
5432
5417
  var _b;
5433
5418
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5459,7 +5444,7 @@ var Lits = (function (exports) {
5459
5444
  };
5460
5445
  return node;
5461
5446
  },
5462
- validateParameterCount: function () { return undefined; },
5447
+ paramCount: {},
5463
5448
  evaluate: function (node, contextStack, _a) {
5464
5449
  var evaluateAstNode = _a.evaluateAstNode;
5465
5450
  var params = node.p.map(function (paramNode) { return evaluateAstNode(paramNode, contextStack); });
@@ -5473,7 +5458,7 @@ var Lits = (function (exports) {
5473
5458
 
5474
5459
  var throwSpecialExpression = {
5475
5460
  polishParse: getCommonPolishSpecialExpressionParser('throw'),
5476
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
5461
+ paramCount: 1,
5477
5462
  evaluate: function (node, contextStack, _a) {
5478
5463
  var _b, _c;
5479
5464
  var evaluateAstNode = _a.evaluateAstNode;
@@ -5514,7 +5499,7 @@ var Lits = (function (exports) {
5514
5499
  };
5515
5500
  return node;
5516
5501
  },
5517
- validateParameterCount: function (node) { return assertNumberOfParams(1, node); },
5502
+ paramCount: 1,
5518
5503
  evaluate: function (node, contextStack, _a) {
5519
5504
  var _b;
5520
5505
  var _c;
@@ -5951,8 +5936,9 @@ var Lits = (function (exports) {
5951
5936
  var e_1, _a;
5952
5937
  var result = null;
5953
5938
  var safeAstNode = ast.hasDebugData ? JSON.parse(JSON.stringify(ast)) : ast;
5954
- if (safeAstNode.hasDebugData)
5939
+ if (safeAstNode.hasDebugData) {
5955
5940
  removeCommenNodes(safeAstNode);
5941
+ }
5956
5942
  try {
5957
5943
  for (var _b = __values(safeAstNode.b), _c = _b.next(); !_c.done; _c = _b.next()) {
5958
5944
  var node = _c.value;
@@ -6158,6 +6144,20 @@ var Lits = (function (exports) {
6158
6144
  };
6159
6145
  }
6160
6146
 
6147
+ function minifyTokenStream(tokenStream) {
6148
+ var tokens = tokenStream.tokens.filter(function (token) {
6149
+ if (isP_CommentToken(token)
6150
+ || isA_CommentToken(token)
6151
+ || isA_MultiLineCommentToken(token)
6152
+ || isA_WhitespaceToken(token)
6153
+ || isP_WhitespaceToken(token)) {
6154
+ return false;
6155
+ }
6156
+ return true;
6157
+ });
6158
+ return __assign(__assign({}, tokenStream), { tokens: tokens });
6159
+ }
6160
+
6161
6161
  function parseSymbol(tokenStream, parseState) {
6162
6162
  var _a;
6163
6163
  var tkn = asToken(tokenStream.tokens[parseState.position++]);
@@ -6347,7 +6347,6 @@ var Lits = (function (exports) {
6347
6347
  }
6348
6348
  }
6349
6349
  function createNamedNormalExpressionNode(name, params, token) {
6350
- var _a;
6351
6350
  var node = {
6352
6351
  t: exports.AstNodeType.NormalExpression,
6353
6352
  n: name,
@@ -6356,7 +6355,7 @@ var Lits = (function (exports) {
6356
6355
  };
6357
6356
  var builtinExpression = builtin.normalExpressions[node.n];
6358
6357
  if (builtinExpression) {
6359
- (_a = builtinExpression.validate) === null || _a === void 0 ? void 0 : _a.call(builtinExpression, __assign(__assign({}, node), { p: withoutCommentNodes(node.p) }));
6358
+ assertNumberOfParams(builtinExpression.paramCount, node);
6360
6359
  }
6361
6360
  return node;
6362
6361
  }
@@ -6457,7 +6456,7 @@ var Lits = (function (exports) {
6457
6456
  AlgebraicParser.prototype.parse = function () {
6458
6457
  var nodes = [];
6459
6458
  while (!this.isAtEnd()) {
6460
- nodes.push(this.parseExpression());
6459
+ nodes.push(this.parseExpression(0, true));
6461
6460
  if (!isA_OperatorToken(this.peek(), ';')) {
6462
6461
  break;
6463
6462
  }
@@ -6465,9 +6464,10 @@ var Lits = (function (exports) {
6465
6464
  }
6466
6465
  return nodes;
6467
6466
  };
6468
- AlgebraicParser.prototype.parseExpression = function (precedence) {
6469
- var _a;
6467
+ AlgebraicParser.prototype.parseExpression = function (precedence, moduleScope) {
6468
+ var _a, _b;
6470
6469
  if (precedence === void 0) { precedence = 0; }
6470
+ if (moduleScope === void 0) { moduleScope = false; }
6471
6471
  var firstToken = this.peek();
6472
6472
  var left;
6473
6473
  if (isA_SymbolToken(firstToken)) {
@@ -6503,6 +6503,9 @@ var Lits = (function (exports) {
6503
6503
  return this.parseFunction(firstToken);
6504
6504
  }
6505
6505
  else if (isA_ReservedSymbolToken(firstToken, 'export')) {
6506
+ if (!moduleScope) {
6507
+ throw new LitsError('export is only allowed in module scope', (_a = getTokenDebugData(firstToken)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
6508
+ }
6506
6509
  return this.parseExport(firstToken);
6507
6510
  }
6508
6511
  left || (left = this.parseOperand());
@@ -6540,7 +6543,7 @@ var Lits = (function (exports) {
6540
6543
  operator = this.peek();
6541
6544
  }
6542
6545
  if (!left) {
6543
- throw new LitsError('Expected operand', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
6546
+ throw new LitsError('Expected operand', (_b = getTokenDebugData(this.peek())) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
6544
6547
  }
6545
6548
  return left;
6546
6549
  };
@@ -6648,32 +6651,6 @@ var Lits = (function (exports) {
6648
6651
  return parseReservedSymbol(this.tokenStream, this.parseState);
6649
6652
  case 'RegexpShorthand':
6650
6653
  return parseRegexpShorthand(this.tokenStream, this.parseState);
6651
- case 'PolNotation': {
6652
- this.parseState.algebraic = false;
6653
- var astNodes = [];
6654
- this.advance();
6655
- do {
6656
- astNodes.push(this.parseState.parseToken(this.tokenStream, this.parseState));
6657
- } while (!isEndNotationToken(this.peek()));
6658
- this.advance();
6659
- this.parseState.algebraic = true;
6660
- if (astNodes.length === 1) {
6661
- return astNodes[0];
6662
- }
6663
- return {
6664
- t: exports.AstNodeType.SpecialExpression,
6665
- n: 'do',
6666
- p: astNodes,
6667
- token: getTokenDebugData(token) && token,
6668
- };
6669
- }
6670
- case 'AlgNotation': {
6671
- this.advance();
6672
- var node = this.parseOperand();
6673
- assertEndNotationToken(this.peek());
6674
- this.advance();
6675
- return node;
6676
- }
6677
6654
  default:
6678
6655
  throw new LitsError("Unknown token type: ".concat(tokenType), (_b = getTokenDebugData(token)) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
6679
6656
  }
@@ -6778,7 +6755,7 @@ var Lits = (function (exports) {
6778
6755
  p: params,
6779
6756
  token: getTokenDebugData(symbol.token) && symbol.token,
6780
6757
  };
6781
- builtin.specialExpressions[node.n].validateParameterCount(node);
6758
+ assertNumberOfParams(builtin.specialExpressions[node.n].paramCount, node);
6782
6759
  return node;
6783
6760
  }
6784
6761
  case 'fn':
@@ -6831,7 +6808,7 @@ var Lits = (function (exports) {
6831
6808
  }
6832
6809
  };
6833
6810
  AlgebraicParser.prototype.parseFunctionArguments = function () {
6834
- var _a, _b, _c, _d, _e;
6811
+ var _a, _b, _c, _d;
6835
6812
  var firstToken = this.peek();
6836
6813
  if (isA_SymbolToken(firstToken)) {
6837
6814
  this.advance();
@@ -6846,62 +6823,54 @@ var Lits = (function (exports) {
6846
6823
  }
6847
6824
  this.advance();
6848
6825
  var rest = false;
6849
- var letBindingObject;
6850
6826
  var args = [];
6851
6827
  var restArg;
6852
- while (!this.isAtEnd() && !isRParenToken(this.peek())) {
6853
- if (letBindingObject) {
6854
- throw new LitsError('Expected right parentheses', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
6855
- }
6856
- if (isLBraceToken(this.peek())) {
6857
- letBindingObject = this.parseObject();
6858
- }
6859
- else {
6860
- if (isA_OperatorToken(this.peek(), '...')) {
6861
- if (rest) {
6862
- throw new LitsError('Multiple spread operators in lambda function', (_b = getTokenDebugData(this.peek())) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
6863
- }
6864
- this.advance();
6865
- rest = true;
6866
- }
6867
- var symbolToken = this.peek();
6868
- if (!isA_SymbolToken(symbolToken)) {
6869
- throw new LitsError('Expected symbol', (_c = getTokenDebugData(this.peek())) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
6870
- }
6828
+ while (!this.isAtEnd() && !isRParenToken(this.peek()) && !isA_SymbolToken(this.peek(), 'let')) {
6829
+ if (isA_OperatorToken(this.peek(), '...')) {
6871
6830
  if (rest) {
6872
- restArg = symbolToken[1];
6873
- }
6874
- else {
6875
- args.push(symbolToken[1]);
6831
+ throw new LitsError('Multiple spread operators in lambda function', (_a = getTokenDebugData(this.peek())) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo);
6876
6832
  }
6877
6833
  this.advance();
6834
+ rest = true;
6835
+ }
6836
+ var symbolToken = this.peek();
6837
+ if (!isA_SymbolToken(symbolToken)) {
6838
+ throw new LitsError('Expected symbol', (_b = getTokenDebugData(this.peek())) === null || _b === void 0 ? void 0 : _b.sourceCodeInfo);
6878
6839
  }
6879
- if (!isA_OperatorToken(this.peek(), ',') && !isRParenToken(this.peek())) {
6880
- throw new LitsError('Expected comma or closing parenthesis', (_d = getTokenDebugData(this.peek())) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
6840
+ if (rest) {
6841
+ restArg = symbolToken[1];
6842
+ }
6843
+ else {
6844
+ args.push(symbolToken[1]);
6845
+ }
6846
+ this.advance();
6847
+ if (!isA_OperatorToken(this.peek(), ',') && !isRParenToken(this.peek()) && !isA_SymbolToken(this.peek(), 'let')) {
6848
+ throw new LitsError('Expected comma or closing parenthesis', (_c = getTokenDebugData(this.peek())) === null || _c === void 0 ? void 0 : _c.sourceCodeInfo);
6881
6849
  }
6882
6850
  if (isA_OperatorToken(this.peek(), ',')) {
6883
6851
  this.advance();
6884
6852
  }
6885
6853
  }
6886
6854
  var arity = restArg !== undefined ? { min: args.length } : args.length;
6855
+ // let bindings, to be able to pass on values in the context down to the body
6856
+ // This is needed since lits is dynamically scoped
6857
+ // E.g.
6858
+ // x => y => x + y // would not work, x is not available in the second lambda
6859
+ // x => (y, let x = x) => x + y // would work, x is available in the second lambda
6860
+ var bindingNodess = [];
6861
+ var token = this.peek();
6862
+ while (isA_SymbolToken(token, 'let')) {
6863
+ var letNode = this.parseLet(token, true);
6864
+ bindingNodess.push(letNode.bs[0]);
6865
+ token = this.peek();
6866
+ }
6887
6867
  if (!isRParenToken(this.peek())) {
6888
- throw new LitsError('Expected closing parenthesis', (_e = getTokenDebugData(this.peek())) === null || _e === void 0 ? void 0 : _e.sourceCodeInfo);
6868
+ throw new LitsError('Expected closing parenthesis', (_d = getTokenDebugData(this.peek())) === null || _d === void 0 ? void 0 : _d.sourceCodeInfo);
6889
6869
  }
6890
- var letBindings = letBindingObject ? arrayToPairs(letBindingObject.p) : [];
6891
6870
  var functionArguments = {
6892
6871
  m: args,
6893
6872
  r: restArg,
6894
- b: letBindings.map(function (pair) {
6895
- var key = pair[0];
6896
- var value = pair[1];
6897
- return {
6898
- t: exports.AstNodeType.Binding,
6899
- n: key.v,
6900
- v: value,
6901
- p: [],
6902
- token: getTokenDebugData(key.token) && key.token,
6903
- };
6904
- }),
6873
+ b: bindingNodess,
6905
6874
  };
6906
6875
  this.advance();
6907
6876
  return {
@@ -7351,6 +7320,7 @@ var Lits = (function (exports) {
7351
7320
  }
7352
7321
  assertA_ReservedSymbolToken(this.peek(), 'end');
7353
7322
  this.advance();
7323
+ assertA_OperatorToken(this.peek(), ';');
7354
7324
  var fnNode = {
7355
7325
  t: exports.AstNodeType.SpecialExpression,
7356
7326
  n: 'fn',
@@ -7513,7 +7483,7 @@ var Lits = (function (exports) {
7513
7483
  p: params,
7514
7484
  token: getTokenDebugData(firstToken) && firstToken,
7515
7485
  };
7516
- assertEvenNumberOfParams(node);
7486
+ assertNumberOfParams({ even: true }, node);
7517
7487
  return node;
7518
7488
  }
7519
7489
  var placeholderRegexp = /^%([1-9]\d?)?$/;
@@ -7619,7 +7589,7 @@ var Lits = (function (exports) {
7619
7589
  return node;
7620
7590
  }
7621
7591
  function parseNormalExpression(tokenStream, parseState) {
7622
- var _a, _b;
7592
+ var _a;
7623
7593
  var startBracketToken = tokenStream.hasDebugData ? asLParenToken(tokenStream.tokens[parseState.position]) : undefined;
7624
7594
  parseState.position += 1;
7625
7595
  var fnNode = parseState.parseToken(tokenStream, parseState);
@@ -7643,7 +7613,7 @@ var Lits = (function (exports) {
7643
7613
  };
7644
7614
  var builtinExpression = builtin.normalExpressions[node.n];
7645
7615
  if (builtinExpression) {
7646
- (_b = builtinExpression.validate) === null || _b === void 0 ? void 0 : _b.call(builtinExpression, __assign(__assign({}, node), { p: withoutCommentNodes(node.p) }));
7616
+ assertNumberOfParams(builtinExpression.paramCount, node);
7647
7617
  }
7648
7618
  return node;
7649
7619
  }
@@ -7652,7 +7622,7 @@ var Lits = (function (exports) {
7652
7622
  var firstToken = asLParenToken(tokenStream.tokens[parseState.position++]);
7653
7623
  var nameToken = asP_SymbolToken(tokenStream.tokens[parseState.position++]);
7654
7624
  var expressionName = nameToken[1];
7655
- var _b = asNonUndefined(builtin.specialExpressions[expressionName], (_a = getTokenDebugData(nameToken)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo), parse = _b.polishParse, validateParameterCount = _b.validateParameterCount;
7625
+ var _b = asNonUndefined(builtin.specialExpressions[expressionName], (_a = getTokenDebugData(nameToken)) === null || _a === void 0 ? void 0 : _a.sourceCodeInfo), parse = _b.polishParse, paramCount = _b.paramCount;
7656
7626
  var node = parse(tokenStream, parseState, firstToken, {
7657
7627
  parseExpression: parseExpression,
7658
7628
  parseTokensUntilClosingBracket: parseTokensUntilClosingBracket,
@@ -7661,7 +7631,7 @@ var Lits = (function (exports) {
7661
7631
  parseBindings: parseBindings,
7662
7632
  parseArgument: parseArgument,
7663
7633
  });
7664
- validateParameterCount(node);
7634
+ assertNumberOfParams(paramCount, node);
7665
7635
  return node;
7666
7636
  }
7667
7637
  function parsePolishToken(tokenStream, parseState) {
@@ -7691,47 +7661,12 @@ var Lits = (function (exports) {
7691
7661
  return parseFnShorthand(tokenStream, parseState);
7692
7662
  case 'P_Comment':
7693
7663
  return parseComment(tokenStream, parseState);
7694
- case 'AlgNotation': {
7695
- parseState.position += 1;
7696
- parseState.algebraic = true;
7697
- var algebraicParser = new AlgebraicParser(tokenStream, parseState);
7698
- var nodes = algebraicParser.parse();
7699
- assertEndNotationToken(tokenStream.tokens[parseState.position++]);
7700
- parseState.algebraic = false;
7701
- if (nodes.length === 1) {
7702
- return nodes[0];
7703
- }
7704
- return {
7705
- t: exports.AstNodeType.SpecialExpression,
7706
- n: 'do',
7707
- p: nodes,
7708
- token: nodes[0].token,
7709
- };
7710
- }
7711
- case 'PolNotation': {
7712
- var astNodes = [];
7713
- parseState.position += 1;
7714
- do {
7715
- astNodes.push(parsePolishToken(tokenStream, parseState));
7716
- } while (!isEndNotationToken(asToken(tokenStream.tokens[parseState.position])));
7717
- parseState.position += 1;
7718
- if (astNodes.length === 1) {
7719
- return astNodes[0];
7720
- }
7721
- return {
7722
- t: exports.AstNodeType.SpecialExpression,
7723
- n: 'do',
7724
- p: astNodes,
7725
- token: astNodes[0].token,
7726
- };
7727
- }
7728
7664
  case 'P_CollectionAccessor':
7729
7665
  case 'P_Modifier':
7730
7666
  case 'RParen':
7731
7667
  case 'RBracket':
7732
7668
  case 'RBrace':
7733
7669
  case 'P_Whitespace':
7734
- case 'EndNotation':
7735
7670
  break;
7736
7671
  /* v8 ignore next 2 */
7737
7672
  default:
@@ -7741,49 +7676,28 @@ var Lits = (function (exports) {
7741
7676
  }
7742
7677
 
7743
7678
  function parse(tokenStream) {
7744
- var _a;
7745
- var safeTokenStream = removeUnnecessaryTokens(tokenStream);
7679
+ tokenStream = minifyTokenStream(tokenStream);
7680
+ var algebraic = tokenStream.algebraic;
7746
7681
  var ast = {
7747
7682
  b: [],
7748
- hasDebugData: safeTokenStream.hasDebugData,
7683
+ hasDebugData: tokenStream.hasDebugData,
7749
7684
  };
7750
7685
  var parseState = {
7751
7686
  position: 0,
7752
- algebraic: (_a = safeTokenStream.algebraic) !== null && _a !== void 0 ? _a : false,
7753
7687
  parseToken: parseToken,
7754
7688
  };
7755
- while (parseState.position < safeTokenStream.tokens.length) {
7756
- ast.b.push(parseToken(safeTokenStream, parseState));
7689
+ if (algebraic) {
7690
+ var algebraicParser = new AlgebraicParser(tokenStream, parseState);
7691
+ ast.b = algebraicParser.parse();
7757
7692
  }
7758
- return ast;
7759
- }
7760
- function removeUnnecessaryTokens(tokenStream) {
7761
- var tokens = tokenStream.tokens.filter(function (token) {
7762
- if (isP_CommentToken(token)
7763
- || isA_CommentToken(token)
7764
- || isA_MultiLineCommentToken(token)
7765
- || isA_WhitespaceToken(token)
7766
- || isP_WhitespaceToken(token)) {
7767
- return false;
7693
+ else {
7694
+ while (parseState.position < tokenStream.tokens.length) {
7695
+ ast.b.push(parseToken(tokenStream, parseState));
7768
7696
  }
7769
- return true;
7770
- });
7771
- return __assign(__assign({}, tokenStream), { tokens: tokens });
7697
+ }
7698
+ return ast;
7772
7699
  }
7773
7700
  function parseToken(tokenStream, parseState) {
7774
- if (parseState.algebraic) {
7775
- var algebraicParser = new AlgebraicParser(tokenStream, parseState);
7776
- var nodes = algebraicParser.parse();
7777
- if (nodes.length === 1) {
7778
- return nodes[0];
7779
- }
7780
- return {
7781
- t: exports.AstNodeType.SpecialExpression,
7782
- n: 'do',
7783
- p: nodes,
7784
- token: nodes[0].token,
7785
- };
7786
- }
7787
7701
  return parsePolishToken(tokenStream, parseState);
7788
7702
  }
7789
7703
 
@@ -7814,15 +7728,6 @@ var Lits = (function (exports) {
7814
7728
  var tokenizeRBrace = function (input, position) {
7815
7729
  return tokenizeSimpleToken('RBrace', '}', input, position);
7816
7730
  };
7817
- var tokenizePolishNotation = function (input, position) {
7818
- return tokenizeSimpleToken('PolNotation', '$`', input, position);
7819
- };
7820
- var tokenizeAlgebraicNotation = function (input, position) {
7821
- return tokenizeSimpleToken('AlgNotation', '@`', input, position);
7822
- };
7823
- var tokenizeEndNotation = function (input, position) {
7824
- return tokenizeSimpleToken('EndNotation', '`', input, position);
7825
- };
7826
7731
  var tokenizeString = function (input, position) {
7827
7732
  if (input[position] !== '"')
7828
7733
  return NO_MATCH;
@@ -7875,9 +7780,6 @@ var Lits = (function (exports) {
7875
7780
  return NO_MATCH;
7876
7781
  }
7877
7782
  var commonTokenizers = [
7878
- tokenizePolishNotation,
7879
- tokenizeAlgebraicNotation,
7880
- tokenizeEndNotation,
7881
7783
  tokenizeLParen,
7882
7784
  tokenizeRParen,
7883
7785
  tokenizeLBracket,
@@ -8387,7 +8289,6 @@ var Lits = (function (exports) {
8387
8289
 
8388
8290
  function tokenize(input, params) {
8389
8291
  var debug = !!params.debug;
8390
- var notationStack = [params.algebraic ? 'algebraic' : 'polish'];
8391
8292
  var position = 0;
8392
8293
  var tokenStream = {
8393
8294
  tokens: [],
@@ -8396,7 +8297,7 @@ var Lits = (function (exports) {
8396
8297
  algebraic: !!params.algebraic,
8397
8298
  };
8398
8299
  while (position < input.length) {
8399
- var tokenizers = notationStack.at(-1) === 'algebraic' ? algebraicTokenizers : polishTokenizers;
8300
+ var tokenizers = params.algebraic ? algebraicTokenizers : polishTokenizers;
8400
8301
  var tokenDescriptor = getCurrentToken(input, position, tokenizers);
8401
8302
  var debugData = debug
8402
8303
  ? {
@@ -8413,23 +8314,8 @@ var Lits = (function (exports) {
8413
8314
  addTokenDebugData(token, debugData);
8414
8315
  }
8415
8316
  tokenStream.tokens.push(token);
8416
- if (isAlgebraicNotationToken(token)) {
8417
- notationStack.push('algebraic');
8418
- }
8419
- if (isPolishNotationToken(token)) {
8420
- notationStack.push('polish');
8421
- }
8422
- if (isEndNotationToken(token)) {
8423
- notationStack.pop();
8424
- if (notationStack.length < 1) {
8425
- throw new LitsError('Unexpected end directive `.', debugData === null || debugData === void 0 ? void 0 : debugData.sourceCodeInfo);
8426
- }
8427
- }
8428
8317
  }
8429
8318
  }
8430
- if (notationStack.length > 1) {
8431
- throw new LitsError('Missing end directive `.', createSourceCodeInfo(input, position, params.filePath));
8432
- }
8433
8319
  applySugar(tokenStream);
8434
8320
  return tokenStream;
8435
8321
  }
@@ -8514,9 +8400,6 @@ var Lits = (function (exports) {
8514
8400
  case 'RBracket': return ']';
8515
8401
  case 'LBrace': return '{';
8516
8402
  case 'RBrace': return '}';
8517
- case 'PolNotation': return '$`';
8518
- case 'AlgNotation': return '@`';
8519
- case 'EndNotation': return '`';
8520
8403
  case 'P_FnShorthand': return '#';
8521
8404
  /* v8 ignore next 2 */
8522
8405
  default:
@@ -8641,7 +8524,8 @@ var Lits = (function (exports) {
8641
8524
  if (tokenizeParams === void 0) { tokenizeParams = {}; }
8642
8525
  var debug = this.debug;
8643
8526
  var algebraic = this.algebraic;
8644
- return tokenize(program, __assign(__assign({}, tokenizeParams), { debug: debug, algebraic: algebraic }));
8527
+ var tokenStream = tokenize(program, __assign(__assign({}, tokenizeParams), { debug: debug, algebraic: algebraic }));
8528
+ return tokenizeParams.minify ? minifyTokenStream(tokenStream) : tokenStream;
8645
8529
  };
8646
8530
  Lits.prototype.parse = function (tokenStream) {
8647
8531
  return parse(tokenStream);