@mojir/lits 2.2.2 → 2.2.4

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 (209) hide show
  1. package/README.md +0 -8
  2. package/dist/cli/cli.js +1145 -1105
  3. package/dist/cli/src/AutoCompleter/AutoCompleter.d.ts +2 -1
  4. package/dist/cli/src/builtin/bindingNode.d.ts +3 -3
  5. package/dist/cli/src/builtin/index.d.ts +0 -1
  6. package/dist/cli/src/builtin/interface.d.ts +3 -4
  7. package/dist/cli/src/builtin/specialExpressionTypes.d.ts +0 -1
  8. package/dist/cli/src/builtin/specialExpressions/and.d.ts +2 -2
  9. package/dist/cli/src/builtin/specialExpressions/array.d.ts +2 -2
  10. package/dist/cli/src/builtin/specialExpressions/block.d.ts +2 -2
  11. package/dist/cli/src/builtin/specialExpressions/cond.d.ts +2 -2
  12. package/dist/cli/src/builtin/specialExpressions/if.d.ts +2 -2
  13. package/dist/cli/src/builtin/specialExpressions/loop.d.ts +2 -2
  14. package/dist/cli/src/builtin/specialExpressions/loops.d.ts +4 -4
  15. package/dist/cli/src/builtin/specialExpressions/object.d.ts +2 -2
  16. package/dist/cli/src/builtin/specialExpressions/or.d.ts +2 -2
  17. package/dist/cli/src/builtin/specialExpressions/qq.d.ts +2 -2
  18. package/dist/cli/src/builtin/specialExpressions/recur.d.ts +2 -2
  19. package/dist/cli/src/builtin/specialExpressions/switch.d.ts +2 -2
  20. package/dist/cli/src/builtin/specialExpressions/throw.d.ts +2 -2
  21. package/dist/cli/src/builtin/specialExpressions/try.d.ts +2 -2
  22. package/dist/cli/src/builtin/specialExpressions/unless.d.ts +2 -2
  23. package/dist/cli/src/builtin/utils.d.ts +2 -2
  24. package/dist/cli/src/evaluator/index.d.ts +2 -2
  25. package/dist/cli/src/evaluator/interface.d.ts +4 -3
  26. package/dist/cli/src/getUndefinedSymbols/index.d.ts +2 -2
  27. package/dist/cli/src/parser/ParserContext.d.ts +20 -0
  28. package/dist/cli/src/parser/helpers.d.ts +19 -0
  29. package/dist/cli/src/parser/index.d.ts +3 -0
  30. package/dist/cli/src/parser/subParsers/getPrecedence.d.ts +3 -0
  31. package/dist/cli/src/parser/subParsers/parseArray.d.ts +3 -0
  32. package/dist/cli/src/parser/subParsers/parseBindingTarget.d.ts +6 -0
  33. package/dist/cli/src/parser/subParsers/parseCond.d.ts +4 -0
  34. package/dist/cli/src/parser/subParsers/parseDo.d.ts +3 -0
  35. package/dist/cli/src/parser/subParsers/parseForOrDoseq.d.ts +4 -0
  36. package/dist/cli/src/parser/subParsers/parseFunction.d.ts +4 -0
  37. package/dist/cli/src/parser/subParsers/parseFunctionCall.d.ts +3 -0
  38. package/dist/cli/src/parser/subParsers/parseIfOrUnless.d.ts +5 -0
  39. package/dist/cli/src/parser/subParsers/parseImplicitBlock.d.ts +5 -0
  40. package/dist/cli/src/parser/subParsers/parseLet.d.ts +4 -0
  41. package/dist/cli/src/parser/subParsers/parseLoop.d.ts +4 -0
  42. package/dist/cli/src/parser/subParsers/parseNumber.d.ts +3 -0
  43. package/dist/cli/src/parser/subParsers/parseObject.d.ts +3 -0
  44. package/dist/cli/src/parser/subParsers/parseOperand.d.ts +3 -0
  45. package/dist/cli/src/parser/subParsers/parseRegexpShorthand.d.ts +3 -0
  46. package/dist/cli/src/parser/subParsers/parseReservedSymbol.d.ts +3 -0
  47. package/dist/cli/src/parser/subParsers/parseString.d.ts +4 -0
  48. package/dist/cli/src/parser/subParsers/parseSwitch.d.ts +4 -0
  49. package/dist/cli/src/parser/subParsers/parseSymbol.d.ts +3 -0
  50. package/dist/cli/src/parser/subParsers/parseTry.d.ts +4 -0
  51. package/dist/cli/src/parser/types.d.ts +19 -26
  52. package/dist/cli/src/testFramework/index.d.ts +3 -2
  53. package/dist/cli/src/tokenizer/token.d.ts +0 -2
  54. package/dist/cli/src/tokenizer/tokenizers.d.ts +2 -2
  55. package/dist/cli/src/typeGuards/astNode.d.ts +18 -19
  56. package/dist/cli/src/typeGuards/index.d.ts +0 -1
  57. package/dist/cli/src/typeGuards/lits.d.ts +0 -1
  58. package/dist/full.esm.js +1 -1
  59. package/dist/full.esm.js.map +1 -1
  60. package/dist/full.js +1 -1
  61. package/dist/full.js.map +1 -1
  62. package/dist/index.esm.js +1 -1
  63. package/dist/index.esm.js.map +1 -1
  64. package/dist/index.js +1 -1
  65. package/dist/index.js.map +1 -1
  66. package/dist/lits.iife.js +1 -1
  67. package/dist/lits.iife.js.map +1 -1
  68. package/dist/modules/assert.esm.js.map +1 -1
  69. package/dist/modules/assert.js.map +1 -1
  70. package/dist/modules/bitwise.esm.js.map +1 -1
  71. package/dist/modules/bitwise.js.map +1 -1
  72. package/dist/modules/collection.esm.js.map +1 -1
  73. package/dist/modules/collection.js.map +1 -1
  74. package/dist/modules/functional.esm.js.map +1 -1
  75. package/dist/modules/functional.js.map +1 -1
  76. package/dist/modules/grid.esm.js.map +1 -1
  77. package/dist/modules/grid.js.map +1 -1
  78. package/dist/modules/linear-algebra.esm.js.map +1 -1
  79. package/dist/modules/linear-algebra.js.map +1 -1
  80. package/dist/modules/matrix.esm.js.map +1 -1
  81. package/dist/modules/matrix.js.map +1 -1
  82. package/dist/modules/number-theory.esm.js.map +1 -1
  83. package/dist/modules/number-theory.js.map +1 -1
  84. package/dist/modules/random.esm.js.map +1 -1
  85. package/dist/modules/random.js.map +1 -1
  86. package/dist/modules/sequence.esm.js.map +1 -1
  87. package/dist/modules/sequence.js.map +1 -1
  88. package/dist/modules/src/AutoCompleter/AutoCompleter.d.ts +2 -1
  89. package/dist/modules/src/builtin/bindingNode.d.ts +3 -3
  90. package/dist/modules/src/builtin/index.d.ts +0 -1
  91. package/dist/modules/src/builtin/interface.d.ts +3 -4
  92. package/dist/modules/src/builtin/specialExpressionTypes.d.ts +0 -1
  93. package/dist/modules/src/builtin/specialExpressions/and.d.ts +2 -2
  94. package/dist/modules/src/builtin/specialExpressions/array.d.ts +2 -2
  95. package/dist/modules/src/builtin/specialExpressions/block.d.ts +2 -2
  96. package/dist/modules/src/builtin/specialExpressions/cond.d.ts +2 -2
  97. package/dist/modules/src/builtin/specialExpressions/if.d.ts +2 -2
  98. package/dist/modules/src/builtin/specialExpressions/loop.d.ts +2 -2
  99. package/dist/modules/src/builtin/specialExpressions/loops.d.ts +4 -4
  100. package/dist/modules/src/builtin/specialExpressions/object.d.ts +2 -2
  101. package/dist/modules/src/builtin/specialExpressions/or.d.ts +2 -2
  102. package/dist/modules/src/builtin/specialExpressions/qq.d.ts +2 -2
  103. package/dist/modules/src/builtin/specialExpressions/recur.d.ts +2 -2
  104. package/dist/modules/src/builtin/specialExpressions/switch.d.ts +2 -2
  105. package/dist/modules/src/builtin/specialExpressions/throw.d.ts +2 -2
  106. package/dist/modules/src/builtin/specialExpressions/try.d.ts +2 -2
  107. package/dist/modules/src/builtin/specialExpressions/unless.d.ts +2 -2
  108. package/dist/modules/src/builtin/utils.d.ts +2 -2
  109. package/dist/modules/src/evaluator/index.d.ts +2 -2
  110. package/dist/modules/src/evaluator/interface.d.ts +4 -3
  111. package/dist/modules/src/getUndefinedSymbols/index.d.ts +2 -2
  112. package/dist/modules/src/parser/ParserContext.d.ts +20 -0
  113. package/dist/modules/src/parser/helpers.d.ts +19 -0
  114. package/dist/modules/src/parser/index.d.ts +3 -0
  115. package/dist/modules/src/parser/subParsers/getPrecedence.d.ts +3 -0
  116. package/dist/modules/src/parser/subParsers/parseArray.d.ts +3 -0
  117. package/dist/modules/src/parser/subParsers/parseBindingTarget.d.ts +6 -0
  118. package/dist/modules/src/parser/subParsers/parseCond.d.ts +4 -0
  119. package/dist/modules/src/parser/subParsers/parseDo.d.ts +3 -0
  120. package/dist/modules/src/parser/subParsers/parseForOrDoseq.d.ts +4 -0
  121. package/dist/modules/src/parser/subParsers/parseFunction.d.ts +4 -0
  122. package/dist/modules/src/parser/subParsers/parseFunctionCall.d.ts +3 -0
  123. package/dist/modules/src/parser/subParsers/parseIfOrUnless.d.ts +5 -0
  124. package/dist/modules/src/parser/subParsers/parseImplicitBlock.d.ts +5 -0
  125. package/dist/modules/src/parser/subParsers/parseLet.d.ts +4 -0
  126. package/dist/modules/src/parser/subParsers/parseLoop.d.ts +4 -0
  127. package/dist/modules/src/parser/subParsers/parseNumber.d.ts +3 -0
  128. package/dist/modules/src/parser/subParsers/parseObject.d.ts +3 -0
  129. package/dist/modules/src/parser/subParsers/parseOperand.d.ts +3 -0
  130. package/dist/modules/src/parser/subParsers/parseRegexpShorthand.d.ts +3 -0
  131. package/dist/modules/src/parser/subParsers/parseReservedSymbol.d.ts +3 -0
  132. package/dist/modules/src/parser/subParsers/parseString.d.ts +4 -0
  133. package/dist/modules/src/parser/subParsers/parseSwitch.d.ts +4 -0
  134. package/dist/modules/src/parser/subParsers/parseSymbol.d.ts +3 -0
  135. package/dist/modules/src/parser/subParsers/parseTry.d.ts +4 -0
  136. package/dist/modules/src/parser/types.d.ts +19 -26
  137. package/dist/modules/src/testFramework/index.d.ts +3 -2
  138. package/dist/modules/src/tokenizer/token.d.ts +0 -2
  139. package/dist/modules/src/tokenizer/tokenizers.d.ts +2 -2
  140. package/dist/modules/src/typeGuards/astNode.d.ts +18 -19
  141. package/dist/modules/src/typeGuards/index.d.ts +0 -1
  142. package/dist/modules/src/typeGuards/lits.d.ts +0 -1
  143. package/dist/modules/string.esm.js.map +1 -1
  144. package/dist/modules/string.js.map +1 -1
  145. package/dist/modules/vector.esm.js.map +1 -1
  146. package/dist/modules/vector.js.map +1 -1
  147. package/dist/src/AutoCompleter/AutoCompleter.d.ts +2 -1
  148. package/dist/src/builtin/bindingNode.d.ts +3 -3
  149. package/dist/src/builtin/index.d.ts +0 -1
  150. package/dist/src/builtin/interface.d.ts +3 -4
  151. package/dist/src/builtin/specialExpressionTypes.d.ts +0 -1
  152. package/dist/src/builtin/specialExpressions/and.d.ts +2 -2
  153. package/dist/src/builtin/specialExpressions/array.d.ts +2 -2
  154. package/dist/src/builtin/specialExpressions/block.d.ts +2 -2
  155. package/dist/src/builtin/specialExpressions/cond.d.ts +2 -2
  156. package/dist/src/builtin/specialExpressions/if.d.ts +2 -2
  157. package/dist/src/builtin/specialExpressions/loop.d.ts +2 -2
  158. package/dist/src/builtin/specialExpressions/loops.d.ts +4 -4
  159. package/dist/src/builtin/specialExpressions/object.d.ts +2 -2
  160. package/dist/src/builtin/specialExpressions/or.d.ts +2 -2
  161. package/dist/src/builtin/specialExpressions/qq.d.ts +2 -2
  162. package/dist/src/builtin/specialExpressions/recur.d.ts +2 -2
  163. package/dist/src/builtin/specialExpressions/switch.d.ts +2 -2
  164. package/dist/src/builtin/specialExpressions/throw.d.ts +2 -2
  165. package/dist/src/builtin/specialExpressions/try.d.ts +2 -2
  166. package/dist/src/builtin/specialExpressions/unless.d.ts +2 -2
  167. package/dist/src/builtin/utils.d.ts +2 -2
  168. package/dist/src/evaluator/index.d.ts +2 -2
  169. package/dist/src/evaluator/interface.d.ts +4 -3
  170. package/dist/src/getUndefinedSymbols/index.d.ts +2 -2
  171. package/dist/src/parser/ParserContext.d.ts +20 -0
  172. package/dist/src/parser/helpers.d.ts +19 -0
  173. package/dist/src/parser/index.d.ts +3 -0
  174. package/dist/src/parser/subParsers/getPrecedence.d.ts +3 -0
  175. package/dist/src/parser/subParsers/parseArray.d.ts +3 -0
  176. package/dist/src/parser/subParsers/parseBindingTarget.d.ts +6 -0
  177. package/dist/src/parser/subParsers/parseCond.d.ts +4 -0
  178. package/dist/src/parser/subParsers/parseDo.d.ts +3 -0
  179. package/dist/src/parser/subParsers/parseForOrDoseq.d.ts +4 -0
  180. package/dist/src/parser/subParsers/parseFunction.d.ts +4 -0
  181. package/dist/src/parser/subParsers/parseFunctionCall.d.ts +3 -0
  182. package/dist/src/parser/subParsers/parseIfOrUnless.d.ts +5 -0
  183. package/dist/src/parser/subParsers/parseImplicitBlock.d.ts +5 -0
  184. package/dist/src/parser/subParsers/parseLet.d.ts +4 -0
  185. package/dist/src/parser/subParsers/parseLoop.d.ts +4 -0
  186. package/dist/src/parser/subParsers/parseNumber.d.ts +3 -0
  187. package/dist/src/parser/subParsers/parseObject.d.ts +3 -0
  188. package/dist/src/parser/subParsers/parseOperand.d.ts +3 -0
  189. package/dist/src/parser/subParsers/parseRegexpShorthand.d.ts +3 -0
  190. package/dist/src/parser/subParsers/parseReservedSymbol.d.ts +3 -0
  191. package/dist/src/parser/subParsers/parseString.d.ts +4 -0
  192. package/dist/src/parser/subParsers/parseSwitch.d.ts +4 -0
  193. package/dist/src/parser/subParsers/parseSymbol.d.ts +3 -0
  194. package/dist/src/parser/subParsers/parseTry.d.ts +4 -0
  195. package/dist/src/parser/types.d.ts +19 -26
  196. package/dist/src/testFramework/index.d.ts +3 -2
  197. package/dist/src/tokenizer/token.d.ts +0 -2
  198. package/dist/src/tokenizer/tokenizers.d.ts +2 -2
  199. package/dist/src/typeGuards/astNode.d.ts +18 -19
  200. package/dist/src/typeGuards/index.d.ts +0 -1
  201. package/dist/src/typeGuards/lits.d.ts +0 -1
  202. package/dist/testFramework.esm.js +1 -1
  203. package/dist/testFramework.esm.js.map +1 -1
  204. package/dist/testFramework.js +1 -1
  205. package/dist/testFramework.js.map +1 -1
  206. package/package.json +1 -1
  207. package/dist/cli/src/parser/Parser.d.ts +0 -58
  208. package/dist/modules/src/parser/Parser.d.ts +0 -58
  209. package/dist/src/parser/Parser.d.ts +0 -58
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";function e(e){if(!e.position||!e.code)return"";const t=e.position.column-1,n=e.code.length-t-1;return`${" ".repeat(Math.max(t,0))}^${" ".repeat(Math.max(n,0))}`}class t extends Error{params;constructor(e){super(`recur, params: ${e}`),Object.setPrototypeOf(this,t.prototype),this.name="RecurSignal",this.params=e}}class n extends Error{sourceCodeInfo;shortMessage;constructor(t,r){const i=t instanceof Error?t.message:`${t}`;super(function(t,n){if(!n)return t;const r=`${n.position.line}:${n.position.column}`;return`${t}${n.filePath?`\n${n.filePath}:${r}`:`\nLocation ${r}`}\n${n.code}\n${e(n)}`}(i,r)),this.shortMessage=i,this.sourceCodeInfo=r,Object.setPrototypeOf(this,n.prototype),this.name="LitsError"}getCodeMarker(){return this.sourceCodeInfo&&e(this.sourceCodeInfo)}}class r extends n{userMessage;constructor(e,t){super(e,t),this.userMessage=e,Object.setPrototypeOf(this,r.prototype),this.name="UserDefinedError"}}class i extends n{symbol;constructor(e,t){super(`Undefined symbol '${e}'.`,t),this.symbol=e,Object.setPrototypeOf(this,i.prototype),this.name="UndefinedSymbolError"}}const s={Number:1,String:2,NormalExpression:3,SpecialExpression:4,UserDefinedSymbol:5,NormalBuiltinSymbol:6,SpecialBuiltinSymbol:7,ReservedSymbol:8,Binding:9,Spread:10},o=new Set(Object.values(s));function a(e){return Object.keys(s).find(t=>s[t]===e)}const u=new Set(["UserDefined","Partial","Comp","Constantly","Juxt","Complement","EveryPred","SomePred","Fnull","Builtin","SpecialBuiltin","NativeJsFunction","Module"]);const c="^^fn^^",l="^^re^^";function f(e){return null!==e&&"object"==typeof e&&(c in e&&"functionType"in e&&function(e){return"string"==typeof e&&u.has(e)}(e.functionType))}function h(e){return!(!Array.isArray(e)||e.length<2)&&function(e){return"number"==typeof e&&o.has(e)}(e[0])}function p(e){return f(e)?`<function ${e.name||"λ"}>`:h(e)?`${a(e[0])}-node`:null===e?"null":"object"==typeof e&&e instanceof RegExp?`${e}`:"object"==typeof e&&e instanceof Error?e.toString():JSON.stringify(e)}function d(e,t){return e?.sourceCodeInfo??t}function g(e,t,r){return new n(`Expected ${e}, got ${p(t)}.`,d(t,r))}function m(e,t){return y(e,t),e}function y(e,t){if(!function(e){return void 0!==e}(e))throw new n("Unexpected undefined",d(e,t))}function v(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function b(e){return null!==e&&"object"==typeof e&&!!e[c]}function w(e,t){if(!b(e))throw g("LitsFunction",e,t)}function S(e){return b(e)&&"UserDefined"===e.functionType}function x(e,t){if(!S(e))throw g("NativeJsFunction",e,t)}function k(e){return b(e)&&"NativeJsFunction"===e.functionType}function E(e,t){if(!k(e))throw g("NativeJsFunction",e,t)}function N(e,t={}){return"number"==typeof e&&(!Number.isNaN(e)&&(!(t.integer&&!Number.isInteger(e))&&(!(t.finite&&!Number.isFinite(e))&&((!t.zero||0===e)&&((!t.nonZero||0!==e)&&(!(t.positive&&e<=0)&&(!(t.negative&&e>=0)&&(!(t.nonPositive&&e>0)&&(!(t.nonNegative&&e<0)&&(!("number"==typeof t.gt&&e<=t.gt)&&(!("number"==typeof t.gte&&e<t.gte)&&(!("number"==typeof t.lt&&e>=t.lt)&&!("number"==typeof t.lte&&e>t.lte)))))))))))))}function $(e,t,r={}){if(!N(e,r))throw new n(`Expected ${function(e){if(e.zero)return"zero";const t=function(e){return e.positive?"positive":e.negative?"negative":e.nonNegative?"non negative":e.nonPositive?"non positive":e.nonZero?"non zero":""}(e),n=e.integer?"integer":"number",r=e.finite?"finite":"",i=function(e){return"number"!=typeof e.gt&&"number"!=typeof e.gte||"number"!=typeof e.lt&&"number"!=typeof e.lte?"number"==typeof e.gt||"number"==typeof e.gte?"number"==typeof e.gt?`n > ${e.gt}`:`n >= ${e.gte}`:"number"==typeof e.lt||"number"==typeof e.lte?"number"==typeof e.lt?`n < ${e.lt}`:`n <= ${e.lte}`:"":`${"number"==typeof e.gt?`${e.gt} < n `:`${e.gte} <= n `}${"number"==typeof e.lt?`< ${e.lt}`:`<= ${e.lte}`}`}(e);return[t,r,n,i].filter(e=>!!e).join(" ")}(r)}, got ${p(e)}.`,d(e,t))}function I(e){return void 0!==e}function A(e,t){return j(e,t),e}function j(e,t){if(!I(e))throw g("not undefined",e,t)}function O(e){return Array.isArray(e)||"string"==typeof e}function C(e,t){if(!O(e))throw g("string or array",e,t)}function F(e){return!(null===e||"object"!=typeof e||Array.isArray(e)||e instanceof RegExp||b(e)||M(e))}function U(e,t){if(!F(e))throw g("object",e,t)}function T(e){return O(e)||F(e)}function B(e,t){return P(e,t),e}function P(e,t){if(!T(e))throw g("string, array or object",e,t)}function M(e){return null!==e&&"object"==typeof e&&!!e[l]}function D(e,t){if(!function(e){return M(e)||"string"==typeof e}(e))throw g("string or RegularExpression",e,t)}function R(e,t){return _(e,t),e}function _(e,t){if(!function(e){return"number"==typeof e||!!T(e)||!!b(e)}(e))throw g("FunctionLike",e,t)}function L(e,t){const{min:n}=e;return!("number"==typeof n&&t<n)}function V(e,t,r){const{min:i,max:s}=e;if("number"==typeof i&&t<i)throw new n(`Wrong number of arguments, expected at least ${i}, got ${p(t)}.`,r);if("number"==typeof s&&t>s)throw new n(`Wrong number of arguments, expected at most ${s}, got ${p(t)}.`,r)}function z(e){return{min:e,max:e}}const J={"<<":{evaluate:([e,t],n)=>($(e,n,{integer:!0}),$(t,n,{integer:!0,nonNegative:!0}),e<<t),arity:z(2)},">>":{evaluate:([e,t],n)=>($(e,n,{integer:!0}),$(t,n,{integer:!0,nonNegative:!0}),e>>t),arity:z(2)},">>>":{evaluate:([e,t],n)=>($(e,n,{integer:!0}),$(t,n,{integer:!0,nonNegative:!0}),e>>>t),arity:z(2)},"&":{evaluate:([e,...t],n)=>($(e,n,{integer:!0}),t.reduce((e,t)=>($(t,n,{integer:!0}),e&t),e)),arity:{min:2}},"|":{evaluate:([e,...t],n)=>($(e,n,{integer:!0}),t.reduce((e,t)=>($(t,n,{integer:!0}),e|t),e)),arity:{min:2}},xor:{evaluate:([e,...t],n)=>($(e,n,{integer:!0}),t.reduce((e,t)=>($(t,n,{integer:!0}),e^t),e)),arity:{min:2}}};function W(e,t={}){return"string"==typeof e&&((!t.nonEmpty||0!==e.length)&&(!t.char||1===e.length))}function q(e,t,n={}){if(!W(e,n))throw g(""+(n.nonEmpty?"non empty string":n.char?"character":"string"),e,t)}function Y(e,t,n={}){return q(e,t,n),e}function G(e){return"string"==typeof e||"number"==typeof e}function K(e,t){return X(e,t),e}function X(e,t){if(!G(e))throw g("string or number",e,t)}function Z(e,t){return!!T(e)&&("string"==typeof e||Array.isArray(e)?!!N(t,{integer:!0})&&(t>=0&&t<e.length):!!Object.getOwnPropertyDescriptor(e,t))}function H(e,t,r){if(X(e,r),X(t,r),"string"==typeof e&&"string"==typeof t)return e<t?-1:e>t?1:0;if("number"==typeof e&&"number"==typeof t)return Math.sign(e-t);throw new n(`Cannot compare values of different types: ${typeof e} and ${typeof t}`,r)}function Q(e,t,n){if(e===t)return!0;if("number"==typeof e&&"number"==typeof t)return function(e,t,n=re){if(e===t)return!0;const r=Math.abs(e-t);if(0===e||0===t||r<n)return r<n;const i=Math.abs(e),s=Math.abs(t);return r/(i+s)<n}(e,t);if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r+=1)if(!Q(A(e[r],n),A(t[r],n),n))return!1;return!0}if(M(e)&&M(t))return e.s===t.s&&e.f===t.f;if(v(e)&&v(t)){const r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;for(let i=0;i<r.length;i+=1){const s=Y(r[i],n);if(!Q(e[s],t[s],n))return!1}return!0}return!1}function ee(e){return e??null}function te(...e){const t=new Set;for(const n of e)n.forEach(e=>t.add(e));return t}function ne(e,t){t.forEach(t=>e.add(t))}const re=1e-10;function ie(e,t=0){const n=e.split("\n");for(;n[0]?.match(/^\s*$/);)n.shift();for(;n[n.length-1]?.match(/^\s*$/);)n.pop();const r=n.reduce((e,t)=>{if(t.match(/^\s*$/))return e;const n=t.match(/^\s*/)[0].length;return Math.min(e,n)},1/0);return n.map(e=>" ".repeat(t)+e.slice(r)).join("\n").trimEnd()}function se(e,t){if(!Array.isArray(e))throw g("array",e,t)}function oe(e,t){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}(e))throw g("array of strings",e,t)}function ae(e,t){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e&&1===e.length)}(e))throw g("array of strings",e,t)}const ue={filter:{evaluate:([e,t],n,r,{executeFunction:i})=>{if(P(e,n),_(t,n),Array.isArray(e)){return e.filter(e=>i(t,[e],r,n))}return W(e)?e.split("").filter(e=>i(t,[e],r,n)).join(""):Object.entries(e).filter(([,e])=>i(t,[e],r,n)).reduce((e,[t,n])=>(e[t]=n,e),{})},arity:z(2)},map:{evaluate:(e,t,r,{executeFunction:i})=>{const s=R(e.at(-1),t);if(F(e[0]))return function({colls:e,contextStack:t,executeFunction:r,fn:i,sourceCodeInfo:s}){U(e[0],s);const o=Object.keys(e[0]),a={};return e.forEach(e=>{U(e,s);const t=Object.keys(e);if(t.length!==o.length)throw new n(`All objects must have the same keys. Expected: ${o.join(", ")}. Found: ${t.join(", ")}`,s);if(!t.every(e=>o.includes(e)))throw new n(`All objects must have the same keys. Expected: ${o.join(", ")}. Found: ${t.join(", ")}`,s);Object.entries(e).forEach(([e,t])=>{a[e]||(a[e]=[]),a[e].push(t)})}),o.reduce((e,n)=>(e[n]=r(i,a[n],t,s),e),{})}({colls:e.slice(0,-1),fn:s,sourceCodeInfo:t,contextStack:r,executeFunction:i});const o=e.slice(0,-1);C(o[0],t);const a="string"==typeof o[0];let u=o[0].length;o.slice(1).forEach(e=>{a?q(e,t):se(e,t),u=Math.min(u,e.length)});const c=[];for(let e=0;e<u;e++)c.push(o.map(t=>t[e]));const l=c.map(e=>i(s,e,r,t));return a?(l.forEach(e=>q(e,t)),l.join("")):l},arity:{min:2}},reduce:{evaluate:([e,t,n],r,i,{executeFunction:s})=>(P(e,r),_(t,r),j(n,r),"string"==typeof e?(q(n,r),0===e.length?n:e.split("").reduce((e,n)=>s(t,[e,n],i,r),n)):Array.isArray(e)?0===e.length?n:e.reduce((e,n)=>s(t,[e,n],i,r),n):0===Object.keys(e).length?n:Object.entries(e).reduce((e,[,n])=>s(t,[e,n],i,r),n)),arity:z(3)},get:{evaluate:(e,t)=>{const[n,r]=e,i=ee(e[2]);if(X(r,t),null===n)return i;P(n,t);const s=function(e,t){if(F(e)){if("string"==typeof t&&Z(e,t))return ee(e[t])}else if(N(t,{nonNegative:!0,integer:!0})&&t>=0&&t<e.length)return ee(e[t])}(n,r);return void 0===s?i:s},arity:{min:2,max:3}},count:{evaluate:([e],t)=>null===e?0:"string"==typeof e?e.length:(P(e,t),Array.isArray(e)?e.length:Object.keys(e).length),arity:z(1)},"contains?":{evaluate:([e,t],n)=>null!==e&&(P(e,n),W(e)?(q(t,n),e.includes(t)):O(e)?(j(t,n),!!e.find(e=>Q(A(e),t,n))):(q(t,n),t in e)),arity:z(2)},assoc:{evaluate:([e,t,n],r)=>(P(e,r),X(t,r),j(n,r),function(e,t,n,r){if(P(e,r),X(t,r),Array.isArray(e)||"string"==typeof e){if($(t,r,{integer:!0}),$(t,r,{gte:0}),$(t,r,{lte:e.length}),"string"==typeof e)return q(n,r,{char:!0}),`${e.slice(0,t)}${n}${e.slice(t+1)}`;const i=[...e];return i[t]=n,i}q(t,r);const i={...e};return i[t]=n,i}(e,t,n,r)),arity:z(3)},"++":{evaluate:(e,t)=>(N(e[0])||P(e[0],t),Array.isArray(e[0])?e.reduce((e,n)=>(se(n,t),e.concat(n)),[]):G(e[0])?e.reduce((e,n)=>(X(n,t),`${e}${n}`),""):e.reduce((e,n)=>(U(n,t),Object.assign(e,n)),{})),arity:{min:1}}},ce={range:{evaluate:(e,t)=>{const[n,r,i]=e;let s,o,a;$(n,t,{finite:!0}),1===e.length?(s=0,o=n,a=o>=0?1:-1):2===e.length?($(r,t,{finite:!0}),s=n,o=r,a=o>=s?1:-1):($(r,t,{finite:!0}),$(i,t,{finite:!0}),s=n,o=r,a=i,$(a,t,o>s?{positive:!0}:o<s?{negative:!0}:{nonZero:!0}));const u=[];for(let e=s;a<0?e>o:e<o;e+=a)u.push(e);return u},arity:{min:1,max:3}},repeat:{evaluate:([e,t],n)=>{$(t,n,{integer:!0,nonNegative:!0});const r=[];for(let n=0;n<t;n+=1)r.push(e);return r},arity:z(2)},flatten:{evaluate:([e,t],n)=>{se(e,n);const r=void 0===t||t===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:function(e,t,n={}){return $(e,t,n),e}(t,n,{integer:!0,nonNegative:!0});return e.flat(r)},arity:{min:1,max:2}},mapcat:{evaluate:([e,t],n,r,{executeFunction:i})=>(se(e,n),_(t,n),e.map(e=>i(t,[e],r,n)).flat(1)),arity:z(2)},"moving-fn":{evaluate:([e,t,n],r,i,{executeFunction:s})=>{se(e,r),$(t,r,{integer:!0,lte:e.length}),_(n,r);const o=[];for(let a=0;a<=e.length-t;a++){const u=s(n,[e.slice(a,a+t)],i,r);o.push(u)}return o},arity:z(3)},"running-fn":{evaluate:([e,t],n,r,{executeFunction:i})=>{se(e,n),_(t,n);const s=[];for(let o=0;o<e.length;o+=1){const a=e.slice(0,o+1);s.push(i(t,[a],r,n))}return s},arity:z(2)}},le={nth:{evaluate:(e,t)=>{const[n,r]=e,i=ee(e[2]);if($(r,t,{integer:!0}),null===n)return i;if(C(n,t),r>=0&&r<n.length){return ee(n[r])}return i},arity:{min:2,max:3}},first:{evaluate:([e],t)=>{if(null===e)return null;C(e,t);return ee(e[0])},arity:z(1)},last:{evaluate:([e],t)=>{if(null===e)return null;C(e,t);return ee(e.at(-1))},arity:z(1)},pop:{evaluate:([e],t)=>(C(e,t),"string"==typeof e?e.substring(0,e.length-1):e.slice(0,e.length-1)),arity:z(1)},"index-of":{evaluate:([e,t],n)=>{if(j(t,n),null===e)return null;if(C(e,n),"string"==typeof e){q(t,n);const r=e.indexOf(t);return-1!==r?r:null}{const r=e.findIndex(e=>Q(A(e,n),t),n);return-1!==r?r:null}},arity:z(2)},push:{evaluate:([e,...t],n)=>(C(e,n),"string"==typeof e?(ae(t,n),[e,...t].join("")):[...e,...t]),arity:{min:2}},rest:{evaluate:([e],t)=>(C(e,t),Array.isArray(e)?e.length<=1?[]:e.slice(1):e.substring(1)),arity:z(1)},next:{evaluate:([e],t)=>(C(e,t),Array.isArray(e)?e.length<=1?null:e.slice(1):e.length<=1?null:e.substring(1)),arity:z(1)},reverse:{evaluate:([e],t)=>null===e?null:(C(e,t),Array.isArray(e)?[...e].reverse():e.split("").reverse().join("")),arity:z(1)},second:{evaluate:([e],t)=>null===e?null:(C(e,t),ee(e[1])),arity:z(1)},slice:{evaluate:(e,t)=>{const[n,r,i]=e;return C(n,t),$(r,t,{integer:!0}),2===e.length?(Array.isArray(n),n.slice(r)):($(i,t,{integer:!0}),Array.isArray(n),n.slice(r,i))},arity:{min:2,max:3}},some:{evaluate:([e,t],n,r,{executeFunction:i})=>(_(t,n),null===e?null:(C(e,n),0===e.length?null:"string"==typeof e?e.split("").find(e=>i(t,[e],r,n))??null:ee(e.find(e=>i(t,[e],r,n))))),arity:z(2)},sort:{evaluate:(e,t,n,{executeFunction:r})=>{const[i]=e,s=1===e.length,o=s?null:e[1];if(C(i,t),"string"==typeof i){const e=i.split("");return s?e.sort((e,n)=>H(e,n,t)):(_(o,t),e.sort((e,i)=>{const s=r(o,[e,i],n,t);return $(s,t,{finite:!0}),s})),e.join("")}const a=[...i];return s?a.sort((e,n)=>(X(e,t),X(n,t),H(e,n,t))):a.sort((e,i)=>{_(o,t);const s=r(o,[e,i],n,t);return $(s,t,{finite:!0}),s}),a},arity:{min:1,max:2}}},fe=new WeakSet,he=new WeakSet,pe=new WeakSet,de=new WeakSet,ge=new WeakSet,me=new WeakSet,ye=new WeakSet;function ve(e){return Array.isArray(e)?(fe.has(e)||(be(e),ke(e)||xe(e)),e):e}function be(e){return!!Array.isArray(e)&&(!!he.has(e)||!pe.has(e)&&(e.every(e=>N(e))?(fe.add(e),he.add(e),!0):(pe.add(e),!1)))}function we(e,t){if(!be(e))throw new n(`Expected a vector, but got ${e}`,t)}function Se(e,t){if(we(e,t),0===e.length)throw new n(`Expected a non empty vector, but got ${e}`,t)}function xe(e){if(!Array.isArray(e))return!1;if(me.has(e))return!0;if(ye.has(e))return!1;if(0===e.length)return ye.add(e),!1;if(!Array.isArray(e[0]))return ye.add(e),!1;const t=e[0].length;for(const n of e.slice(1)){if(!Array.isArray(n))return ye.add(e),!1;if(n.length!==t)return ye.add(e),!1}return fe.add(e),me.add(e),!0}function ke(e){if(!Array.isArray(e))return!1;if(de.has(e))return!0;if(ge.has(e))return!1;if(0===e.length)return ge.add(e),!1;if(!Array.isArray(e[0])||0===e[0].length)return ge.add(e),!1;const t=e[0].length;for(const n of e)if(!Array.isArray(n)||n.length!==t||n.some(e=>!N(e)))return ge.add(e),!1;return fe.add(e),me.add(e),de.add(e),!0}function Ee(e,t){let r=!1,i=!1;for(const s of e)if(be(s))r=!0;else if(ke(s))i=!0;else if(!N(s))throw new n("Invalid parameter type: "+typeof s,t);if(i){if(r)throw new n("Cannot mix vector and matrix types",t);let i=null,s=null;for(const r of e)if(ke(r))if(null===i)i=r.length,s=r[0].length;else if(r.length!==i||r[0].length!==s)throw new n("Matrix dimensions do not match",t);return["matrix",e.map(e=>ke(e)?e:Array.from({length:i},()=>Array.from({length:s},()=>e)))]}if(r){let r=null;for(const i of e)if(be(i))if(null===r)r=i.length;else if(i.length!==r)throw new n("Vector lengths do not match",t);return["vector",e.map(e=>be(e)?e:Array.from({length:r},()=>e))]}return["number",e]}function Ne(e){return(t,n)=>{const[r,i]=Ee(t,n);return"number"===r?e(i[0]):"vector"===r?i[0].map(t=>e(t)):i[0].map(t=>t.map(t=>e(t)))}}function $e(e){return(t,n)=>{const[r,i]=Ee(t,n);return"number"===r?e(i[0],i[1]):"vector"===r?i[0].map((t,n)=>e(t,i[1][n])):i[0].map((t,n)=>t.map((t,r)=>e(t,i[1][n][r])))}}function Ie(e,t){return(n,r)=>{if(0===n.length)return e;const[i,s]=Ee(n,r);if("number"===i)return s.reduce((e,n)=>t(e,n),e);if("vector"===i){const[e,...n]=s;return n.reduce((e,n)=>e.map((e,r)=>t(e,n[r])),e)}{const[e,...n]=s;return n.reduce((e,n)=>e.map((e,r)=>e.map((e,i)=>t(e,n[r][i]))),e)}}}const Ae={inc:{evaluate:Ne(e=>e+1),arity:z(1)},dec:{evaluate:Ne(e=>e-1),arity:z(1)},"+":{evaluate:Ie(0,(e,t)=>e+t),arity:{}},"*":{evaluate:Ie(1,(e,t)=>e*t),arity:{}},"/":{evaluate:(e,t)=>{if(0===e.length)return 1;const[n,r]=Ee(e,t);if("number"===n){const[e,...t]=r;return 0===t.length?1/e:t.reduce((e,t)=>e/t,e)}if("vector"===n){const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e/t[n]),e)}{const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e.map((e,r)=>e/t[n][r])),e)}},arity:{}},"-":{evaluate:(e,t)=>{if(0===e.length)return 0;const[n,r]=Ee(e,t);if("number"===n){const[e,...t]=r;return 0===t.length?-e:t.reduce((e,t)=>e-t,e)}if("vector"===n){const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e-t[n]),e)}{const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e.map((e,r)=>e-t[n][r])),e)}},arity:{}},quot:{evaluate:$e((e,t)=>Math.trunc(e/t)),arity:z(2)},mod:{evaluate:$e((e,t)=>e-t*Math.floor(e/t)),arity:z(2)},"%":{evaluate:$e((e,t)=>e%t),arity:z(2)},sqrt:{evaluate:Ne(e=>Math.sqrt(e)),arity:z(1)},cbrt:{evaluate:Ne(e=>Math.cbrt(e)),arity:z(1)},"^":{evaluate:$e((e,t)=>e**t),arity:z(2)},round:{evaluate:([e,t],n)=>{const[r,i]=Ee([e],n);if("number"===r){if(void 0===t||0===t)return Math.round(i[0]);{$(t,n,{integer:!0,positive:!0});const e=10**t;return Math.round(i[0]*e)/e}}if("vector"===r){const e=i[0];if(void 0===t||0===t)return e.map(e=>Math.round(e));{$(t,n,{integer:!0,positive:!0});const r=10**t;return e.map(e=>Math.round(e*r)/r)}}{const e=i[0];if(void 0===t||0===t)return e.map(e=>e.map(e=>Math.round(e)));{$(t,n,{integer:!0,positive:!0});const r=10**t;return e.map(e=>e.map(e=>Math.round(e*r)/r))}}},arity:{min:1,max:2}},trunc:{evaluate:Ne(e=>Math.trunc(e)),arity:z(1)},floor:{evaluate:Ne(e=>Math.floor(e)),arity:z(1)},ceil:{evaluate:Ne(e=>Math.ceil(e)),arity:z(1)},min:{evaluate:(e,t)=>{if(1===e.length&&be(e[0])){const n=e[0];return Se(n,t),n.reduce((e,t)=>Math.min(e,t),1/0)}const[n,...r]=e;return $(n,t),r.reduce((e,n)=>($(n,t),Math.min(e,n)),n)},arity:{min:1}},max:{evaluate:(e,t)=>{if(1===e.length&&be(e[0])){const n=e[0];return Se(n,t),n.reduce((e,t)=>Math.max(e,t),-1/0)}const[n,...r]=e;return $(n,t),r.reduce((e,n)=>($(n,t),Math.max(e,n)),n)},arity:{min:1}},abs:{evaluate:Ne(e=>Math.abs(e)),arity:z(1)},sign:{evaluate:Ne(e=>Math.sign(e)),arity:z(1)}};function je([e,...t],n){const r=A(e,n);for(const e of t)if(!Q(r,A(e,n),n))return!1;return!0}const Oe={"==":{evaluate:(e,t)=>je(e,t),arity:{min:1}},"≠":{evaluate:(e,t)=>!je(e,t),arity:{min:1}},"identical?":{evaluate:e=>function([e,...t]){for(const n of t)if(n!==e)return!1;return!0}(e),arity:{min:1}},">":{evaluate:([e,...t],n)=>{let r=K(e);for(const e of t){if(H(r,K(e),n)<=0)return!1;r=K(e)}return!0},arity:{min:1}},"<":{evaluate:([e,...t],n)=>{let r=K(e);for(const e of t){if(H(r,K(e),n)>=0)return!1;r=K(e)}return!0},arity:{min:1}},">=":{evaluate:([e,...t],n)=>{let r=K(e);for(const e of t){if(H(r,K(e),n)<0)return!1;r=K(e)}return!0},arity:{min:1}},"<=":{evaluate:([e,...t],n)=>{let r=K(e);for(const e of t){if(H(r,K(e),n)>0)return!1;r=K(e)}return!0},arity:{min:1}},"!":{evaluate:([e])=>!e,arity:z(1)},"epoch->iso-date":{evaluate:([e],t)=>($(e,t),new Date(e).toISOString()),arity:z(1)},"iso-date->epoch":{evaluate:([e],t)=>{q(e,t);const n=new Date(e).valueOf();return $(n,t,{finite:!0}),n},arity:z(1)},"write!":{evaluate:(e,t)=>(console.log(...e),e.length>0?A(e[e.length-1],t):null),arity:{}},boolean:{evaluate:([e])=>!!e,arity:z(1)},compare:{evaluate:([e,t],n)=>(X(e,n),X(t,n),H(e,t,n)),arity:z(2)},"json-parse":{evaluate:([e],t)=>(q(e,t),JSON.parse(e)),arity:z(1)},"json-stringify":{evaluate:([e,t],n)=>(j(e,n),void 0===t?JSON.stringify(e):($(t,n),JSON.stringify(e,null,t))),arity:{min:1,max:2}},import:{evaluate:([e],t,r)=>{q(e,t);const i=e.indexOf(".");if(-1!==i){const s=e.substring(0,i),o=e.substring(i+1),a=r.getModule(s);if(!a)throw new n(`Unknown module: '${s}'`,t);const u=a.functions[o];if(!u)throw new n(`Function '${o}' not found in module '${s}'`,t);return{[c]:!0,sourceCodeInfo:t,functionType:"Module",moduleName:s,functionName:o,arity:u.arity}}const s=e,o=r.getModule(s);if(!o)throw new n(`Unknown module: '${s}'`,t);const a={};for(const[e,n]of Object.entries(o.functions))a[e]={[c]:!0,sourceCodeInfo:t,functionType:"Module",moduleName:s,functionName:e,arity:n.arity};return a},arity:z(1)}},Ce={keys:{evaluate:([e],t)=>(U(e,t),Object.keys(e)),arity:z(1)},vals:{evaluate:([e],t)=>(U(e,t),Object.values(e)),arity:z(1)},entries:{evaluate:([e],t)=>(U(e,t),Object.entries(e)),arity:z(1)},find:{evaluate:([e,t],n)=>(U(e,n),q(t,n),Z(e,t)?[t,e[t]]:null),arity:z(2)},dissoc:{evaluate:([e,t],n)=>{U(e,n),q(t,n);const r={...e};return delete r[t],r},arity:z(2)},merge:{evaluate:(e,t)=>{if(0===e.length)return null;const[n,...r]=e;return U(n,t),r.reduce((e,n)=>(U(n,t),{...e,...n}),{...n})},arity:{min:0}},"merge-with":{evaluate:(e,t,n,{executeFunction:r})=>{const i=e[0],s=e.at(-1),o=e.slice(1,-1);return U(i,t),_(s,t),o.reduce((e,i)=>(U(i,t),Object.entries(i).forEach(i=>{const o=Y(i[0],t),a=ee(i[1]);Z(e,o)?e[o]=r(s,[e[o],a],n,t):e[o]=a}),e),{...i})},arity:{min:2}},zipmap:{evaluate:([e,t],n)=>{oe(e,n),se(t,n);const r=Math.min(e.length,t.length),i={};for(let s=0;s<r;s+=1){i[Y(e[s],n)]=ee(t[s])}return i},arity:z(2)},"select-keys":{evaluate:([e,t],n)=>(oe(t,n),U(e,n),t.reduce((t,n)=>(Z(e,n)&&(t[n]=ee(e[n])),t),{})),arity:z(2)}},Fe={"function?":{evaluate:([e])=>b(e),arity:z(1)},"string?":{evaluate:([e])=>"string"==typeof e,arity:z(1)},"number?":{evaluate:([e])=>"number"==typeof e,arity:z(1)},"integer?":{evaluate:([e])=>"number"==typeof e&&N(e,{integer:!0}),arity:z(1)},"boolean?":{evaluate:([e])=>"boolean"==typeof e,arity:z(1)},"null?":{evaluate:([e])=>null==e,arity:z(1)},"zero?":{evaluate:([e],t)=>($(e,t,{finite:!0}),Math.abs(e)<re),arity:z(1)},"pos?":{evaluate:([e],t)=>($(e,t,{finite:!0}),e>0),arity:z(1)},"neg?":{evaluate:([e],t)=>($(e,t,{finite:!0}),e<0),arity:z(1)},"even?":{evaluate:([e],t)=>($(e,t,{finite:!0}),e%2==0),arity:z(1)},"odd?":{evaluate:([e],t)=>($(e,t,{finite:!0}),N(e,{integer:!0})&&e%2!=0),arity:z(1)},"array?":{evaluate:([e])=>Array.isArray(e),arity:z(1)},"collection?":{evaluate:([e])=>T(e),arity:z(1)},"sequence?":{evaluate:([e])=>O(e),arity:z(1)},"object?":{evaluate:([e])=>F(e),arity:z(1)},"regexp?":{evaluate:([e])=>M(e),arity:z(1)},"finite?":{evaluate:([e],t)=>($(e,t),Number.isFinite(e)),arity:z(1)},"positive-infinity?":{evaluate:([e],t)=>($(e,t),e===Number.POSITIVE_INFINITY),arity:z(1)},"negative-infinity?":{evaluate:([e],t)=>($(e,t),e===Number.NEGATIVE_INFINITY),arity:z(1)},"true?":{evaluate:([e])=>!0===e,arity:z(1)},"false?":{evaluate:([e])=>!1===e,arity:z(1)},"empty?":{evaluate:([e],t)=>null===e||(P(e,t),"string"==typeof e||Array.isArray(e)?0===e.length:0===Object.keys(e).length),arity:z(1)},"not-empty?":{evaluate:([e],t)=>null!==e&&(P(e,t),"string"==typeof e||Array.isArray(e)?e.length>0:Object.keys(e).length>0),arity:z(1)},"vector?":{evaluate:([e])=>be(e),arity:z(1)},"matrix?":{evaluate:([e])=>ke(e),arity:z(1)},"grid?":{evaluate:([e])=>xe(e),arity:z(1)}},Ue={regexp:{evaluate:([e,t],r)=>{q(e,r);const i=e||"(?:)",s="string"==typeof t?t:"";try{new RegExp(i,s)}catch(e){throw new n(`Invalid regular expression: ${i} ${s}`,r)}return{[l]:!0,sourceCodeInfo:r,s:i,f:s}},arity:{min:1,max:2}},match:{evaluate:([e,t],n)=>{if(function(e,t){if(!M(e))throw g("RegularExpression",e,t)}(t,n),!W(e))return null;const r=new RegExp(t.s,t.f).exec(e);return r?[...r]:null},arity:z(2)},replace:{evaluate:([e,t,n],r)=>{q(e,r),D(t,r),q(n,r);const i=M(t)?new RegExp(t.s,`${t.f}`):t;return e.replace(i,n)},arity:z(3)},"replace-all":{evaluate:([e,t,n],r)=>{q(e,r),D(t,r),q(n,r);const i=M(t)?new RegExp(t.s,`${t.f.includes("g")?t.f:`${t.f}g`}`):t;return e.replaceAll(i,n)},arity:z(3)}},Te=/^\s*$/,Be={str:{evaluate:e=>e.reduce((e,t)=>e+(null==t?"":F(t)||Array.isArray(t)?JSON.stringify(t):`${t}`),""),arity:{}},number:{evaluate:([e],t)=>{q(e,t);const r=Number(e);if(Number.isNaN(r))throw new n(`Could not convert '${e}' to a number.`,t);return r},arity:z(1)},"lower-case":{evaluate:([e],t)=>(q(e,t),e.toLowerCase()),arity:z(1)},"upper-case":{evaluate:([e],t)=>(q(e,t),e.toUpperCase()),arity:z(1)},trim:{evaluate:([e],t)=>(q(e,t),e.trim()),arity:z(1)},join:{evaluate:([e,t],n)=>(se(e,n),e.forEach(e=>X(e,n)),q(t,n),e.join(t)),arity:z(2)},split:{evaluate:([e,t,n],r)=>{q(e,r),D(t,r),void 0!==n&&$(n,r,{integer:!0,nonNegative:!0});const i="string"==typeof t?t:new RegExp(t.s,t.f);return e.split(i,n)},arity:{min:2,max:3}},"blank?":{evaluate:([e],t)=>null===e||(q(e,t),Te.test(e)),arity:z(1)}},Pe={"|>":{evaluate:([e,t],n,r,{executeFunction:i})=>(_(t,n),i(t,[e],r,n)),arity:z(2)},apply:{evaluate:([e,...t],n,r,{executeFunction:i})=>{_(e,n);const s=t[t.length-1];se(s,n);return i(e,[...t.slice(0,-1),...s],r,n)},arity:{min:2}},identity:{evaluate:([e])=>ee(e),arity:z(1)},comp:{evaluate:(e,t)=>{return e.forEach(e=>_(e,t)),{[c]:!0,sourceCodeInfo:t,functionType:"Comp",params:e,arity:e.length>0?(n=e.at(-1),"number"==typeof n||T(n)?z(1):n.arity):{min:1,max:1}};var n},arity:{}},constantly:{evaluate:([e],t)=>({[c]:!0,sourceCodeInfo:t,functionType:"Constantly",value:ee(e),arity:{}}),arity:z(1)}};function Me(e){return ie(`\n ${e.title}\n\n ${e.description.replace(/`(.+?)`/g,"$1").replace(/\$(\w+)/g,"$1").replace(/\*\*\*(.+)\*\*\*/g,"$1").replace(/\*\*(.+)\*\*/g,"$1")}\n\n Signature:\n ${function({title:e,variants:t,args:n,returns:r,_isOperator:i}){const s=t.map(t=>`${` ${e}(${t.argumentNames.map(e=>{let t="";return n[e].rest&&(t+="..."),t+=e,t}).join(", ")})`} -> ${De(r)}`),o=i?["","Operator:",` a ${e} b -> ${De(r)}`]:[];return[...s,...o]}(e).join("\n ")}\n\n Arguments:\n ${function(e){return Object.entries(e.args).map(([e,t])=>`${e}: ${De(t)}`)}(e).join("\n ")}\n\n Examples:\n${e.examples.map(e=>ie(e,4)).join("\n\n")}`)}function De(e){const t=e.type,n=(Array.isArray(t)?t:[t]).join(" | ");return e.array||e.rest?`Array<${n}>`:n}const Re={sum:{evaluate:([e],t)=>(we(e,t),e.reduce((e,t)=>e+t,0)),arity:z(1)},prod:{evaluate:([e],t)=>(we(e,t),e.reduce((e,t)=>e*t,1)),arity:z(1)},mean:{evaluate:([e],t)=>(Se(e,t),e.reduce((e,t)=>e+t,0)/e.length),arity:z(1)},median:{evaluate:([e],t)=>(Se(e,t),function(e){const t=[...e].sort((e,t)=>e-t),n=Math.floor(t.length/2);return t.length%2==0?(t[n-1]+t[n])/2:t[n]}(e)),arity:z(1)}},_e={...J,...ue,...ce,...le,...Ae,...function(e){return{doc:{evaluate:([t],n)=>{if(y(e),_(t,n),!b(t))return"";if("Builtin"===t.functionType){const n=e[t.name];return n?Me(n):""}return"UserDefined"===t.functionType||"NativeJsFunction"===t.functionType?t.docString:""},arity:z(1)},arity:{evaluate:([e],t)=>(_(e,t),b(e)?e.arity:z(1)),arity:z(1)}}}({}),...Oe,...Ce,...Fe,...Ue,...Be,...Pe,...Re};Object.entries(_e).forEach(([e,t])=>{t.name=e});const Le={..._e},Ve={},ze=[];Object.entries(Le).forEach(([e,t],n)=>{Ve[e]=n,ze.push(t)});const Je={arity:{},evaluate:(e,t,{evaluateNode:n})=>{let r=!0;for(const i of e[1][1])if(r=n(i,t),!r)break;return r},evaluateAsNormalExpression:(e,t)=>{let n=!0;for(const r of e)if(n=A(r,t),!n)break;return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n(e[1][1],t,r,i)};function We(e){const t=e[0];return s.UserDefinedSymbol===t||s.NormalBuiltinSymbol===t||s.SpecialBuiltinSymbol===t}function qe(e){return s.UserDefinedSymbol===e[0]}function Ye(e,t){return function(e,t){if(!qe(e))throw g("UserDefinedSymbolNode",e,t)}(e,t),e}function Ge(e){return s.NormalBuiltinSymbol===e[0]}function Ke(e){return s.SpecialBuiltinSymbol===e[0]}function Xe(e){return!!function(e){return e[0]===s.NormalExpression}(e)&&We(e[1][0])}function Ze(e){return e[0]===s.Spread}const He={arity:z(1),evaluate:(e,t)=>{const n=e[1][1];if(function(e,t){if(!We(e))throw g("SymbolNode",e,t)}(n),!qe(n))return!0;return null!==t.lookUp(n)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n([e[1][1]],t,r,i)};const Qe=11,et=12,tt=13,nt=14;function rt(e,t){if(e[0]===tt)Object.values(e[1][0]).forEach(e=>{e[1][1]&&t(e[1][1]),rt(e,t)});else if(e[0]===nt)for(let n=0;n<e[1][0].length;n+=1){const r=e[1][0][n]??null;null!==r&&(r[1][1]&&t(r[1][1]),rt(r,t))}}function it(e,t,n){const r={};return st(e,t,n,e[2],r),r}function st(e,t,r,i,s){if(e[0]===tt){!function(e,t){if(!v(e))throw new n(`Expected UnknownRecord, got ${p(e)}.`,d(e,t))}(t,i);const o=new Set;let a;if(Object.entries(e[1][0]).forEach(([e,n])=>{if(n[0]===et)return void(a=n);o.add(e);const u=(void 0!==t[e]?t[e]:n[1][1]&&r(n[1][1]))??null;j(u,i),st(n,u,r,i,s)}),a){const e=Object.entries(t).filter(([e])=>!o.has(e)).reduce((e,[t,n])=>(e[t]=A(n),e),{});s[a[1][0]]=e}}else if(e[0]===nt){let n=null;se(t,i);for(let o=0;o<e[1][0].length;o+=1){const a=e[1][0][o]??null;if(null===a)continue;if(a[0]===et){n=o;break}const u=(void 0!==t[o]?t[o]:a[1][1]&&r(a[1][1]))??null;j(u,i),st(a,u,r,i,s)}if(null!==n){const r=t.slice(n),i=e[1][0][n];s[i[1][0]]=r}}else e[0]===et?s[e[1][0]]=A(t):s[e[1][0][1]]=A(t)}function ot(e){const t={};return at(e,t),t}function at(e,t){if(null!==e)if(e[0]===nt)for(const n of e[1][0])at(n,t);else if(e[0]===tt)for(const n of Object.values(e[1][0]))at(n,t);else if(e[0]===et){if(t[e[1][0]])throw new n(`Duplicate binding name: ${e[1][0]}`,e[2]);t[e[1][0]]=!0}else{if(t[e[1][0][1]])throw new n(`Duplicate binding name: ${e[1][0]}`,e[2]);t[e[1][0][1]]=!0}}const ut={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1],i=r[1][0],s=r[1][1],o=n(s,t),a=it(i,o,e=>n(e,t));return t.exportValues(a,i[2]),o},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>{const s=e[1][1],o=s[1][0],a=s[1][1],u=n([a],t,r,i);return rt(o,e=>{ne(u,n([e],t,r,i))}),t.addValues(ot(o),o[2]),u}},ct={arity:{},evaluate:(e,t,{builtin:n,getUndefinedSymbols:r,evaluateNode:i})=>{const s=e[1][1],o=e[1][2],a=function(e,t,n,r,i){const s={},o=e[0].reduce((e,t)=>(Object.keys(ot(t)).forEach(t=>{e[t]={value:null}}),e),{}),a=r(e[1],t.new(o),n,i);a.forEach(e=>{const n=t.getValue(e);I(n)&&(s[e]={value:n})});const u=[e[0],e[1],s];return u}(s,t,n,r,i),u=a[0].filter(e=>e[0]!==et&&void 0===e[1][1]).length,l={min:u>0?u:void 0,max:a[0].some(e=>e[0]===et)?void 0:a[0].length};return{[c]:!0,sourceCodeInfo:e[2],functionType:"UserDefined",name:void 0,evaluatedfunction:a,arity:l,docString:o}},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>function(e,t,n,r,i){const s=new Set,o={self:{value:null}};e[0].forEach(e=>{Object.assign(o,ot(e)),rt(e,e=>{ne(s,n([e],t,r,i))})});const a=t.create(o),u=n(e[1],a,r,i);return ne(s,u),s}(e[1][1],t,n,r,i)};const lt={arity:z(0),evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1],i=r[1][0],s=r[1][1],o=n(s,t),a=it(i,o,e=>n(e,t));return t.addValues(a,i[2]),o},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>{const s=e[1][1],o=s[1][0],a=s[1][1],u=n([a],t,r,i);return rt(o,e=>{ne(u,n([e],t,r,i))}),t.addValues(ot(o),o[2]),u}},ft={arity:{},evaluate:(e,r,{evaluateNode:i})=>{const s=e[1][1],o=s.reduce((e,t)=>{const n=i(t[1][1],r.create(e)),s=it(t[1][0],n,e=>i(e,r));return Object.entries(s).forEach(([t,n])=>{e[t]={value:n}}),e},{}),a=r.create(o),u=e[1][2];for(;;){let c=null;try{c=i(u,a)}catch(a){if(a instanceof t){const t=a.params;if(t.length!==s.length)throw new n(`recur expected ${s.length} parameters, got ${p(t.length)}`,e[2]);s.forEach((e,n)=>{const s=it(e[1][0],A(t[n]),e=>i(e,r));for(const[e,t]of Object.entries(s))o[e].value=t});continue}throw a}return c}},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>{const s=e[1][1],o=s.reduce((e,t)=>{const n=ot(t[1][0]);return Object.keys(n).forEach(t=>{e[t]={value:!0}}),e},{});return te(n(s.map(e=>e[1][1]),t,r,i),n([e[1][2]],t.create(o),r,i))}};function ht(e,t,n,r){for(const i of e){const[e,s]=i[1],o=it(e,r(s,n),e=>r(e,n));Object.entries(o).forEach(([e,n])=>{t[e]={value:n}})}}function pt(e,t,n,r){const i=t[2],[,s,o]=t[1],a=[],u=s.map(()=>0);let c=!1;for(;!c;){const t={},l=n.create(t);let f=!1;e:for(let e=0;e<s.length;e+=1){const[n,o,a,h]=s[e],[p,d]=n[1],g=B(r(d,l),i),y=O(g)?g:Object.entries(g);if(0===y.length){f=!0,c=!0;break}const v=m(u[e],i);if(v>=y.length){if(f=!0,0===e){c=!0;break}u[e]=0,u[e-1]=m(u[e-1],i)+1;break}const b=it(p,A(y[v],i),e=>r(e,l));if(Object.entries(b).forEach(([e,n])=>{t[e]={value:n}}),o&&ht(o,t,l,r),a&&!r(a,l)){u[e]=m(u[e],i)+1,f=!0;break e}if(h&&!r(h,l)){u[e]=Number.POSITIVE_INFINITY,f=!0;break e}}if(!f){const t=r(o,l);e&&a.push(t),u.length>0&&(u[u.length-1]+=1)}}return e?a:null}function dt(e,t,n,r,i){const s=new Set,o={},[,a,u]=e[1];return a.forEach(e=>{const[a,u,c,l]=e,[f,h]=a[1];n([h],t.create(o),r,i).forEach(e=>s.add(e)),Object.assign(o,ot(f)),u&&u.forEach(e=>{const[a,u]=e[1];n([u],t.create(o),r,i).forEach(e=>s.add(e)),Object.assign(o,ot(a))}),c&&n([c],t.create(o),r,i).forEach(e=>s.add(e)),l&&n([l],t.create(o),r,i).forEach(e=>s.add(e))}),n([u],t.create(o),r,i).forEach(e=>s.add(e)),s}const gt={arity:z(1),evaluate:(e,t,n)=>pt(!0,e,t,n.evaluateNode),getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>dt(e,t,n,r,i)},mt={arity:z(1),evaluate:(e,t,n)=>(pt(!1,e,t,n.evaluateNode),null),getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>dt(e,t,n,r,i)},yt={arity:{},evaluate:(e,t,{evaluateNode:n})=>{let r=!1;for(const i of e[1][1])if(r=n(i,t),r)break;return r},evaluateAsNormalExpression:(e,t)=>{let n=!1;for(const r of e)if(n=A(r,t),n)break;return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n(e[1][1],t,r,i)},vt={arity:{min:1},evaluate:(e,t,{evaluateNode:n})=>{for(const r of e[1][1]){if(qe(r)&&null===t.lookUp(r))continue;const e=n(r,t);if(null!==e)return e}return null},evaluateAsNormalExpression:(e,t)=>{for(const n of e){const e=A(n,t);if(null!==e)return e}return null},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n(e[1][1],t,r,i)},bt={arity:{},evaluate:(e,n,{evaluateNode:r})=>{const i=e[1][1].map(e=>r(e,n));throw new t(i)},evaluateAsNormalExpression:e=>{throw new t(e)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n(e[1][1],t,r,i)},wt={arity:z(1),evaluate:(e,t,{evaluateNode:n})=>{const i=Y(n(e[1][1],t),e[2],{nonEmpty:!0});throw new r(i,e[2])},evaluateAsNormalExpression:(e,t)=>{const n=Y(e[0],t,{nonEmpty:!0});throw new r(n,void 0)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n([e[1][1]],t,r,i)},St={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[,r,i,s]=e[1];try{return n(r,t)}catch(e){const r=i?{[i[1]]:{value:e}}:{};return n(s,t.create(r))}},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>{const[,s,o,a]=e[1],u=n([s],t,r,i),c=o?{[o[1]]:{value:!0}}:{};return te(u,n([a],t.create(c),r,i))}},xt={arity:{},evaluate:(e,t,{evaluateNode:r})=>{const i=[];for(const s of e[1][1])if(Ze(s)){const e=r(s[1],t);if(!Array.isArray(e))throw new n("Spread value is not an array",s[2]);i.push(...e)}else i.push(r(s,t));return i},evaluateAsNormalExpression:(e,t)=>{const n=[];for(const r of e)n.push(A(r,t));return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n(e[1][1],t,r,i)},kt={arity:{},evaluate:(e,t,{evaluateNode:r})=>{const i={},s=e[1][1];for(let e=0;e<s.length;e+=2){const o=s[e];if(Ze(o)){const s=r(o[1],t);if(!v(s))throw new n("Spread value is not an object",o[2]);Object.assign(i,s),e-=1}else{const a=r(o,t),u=s[e+1];if(void 0===u)throw new n("Missing value for key",o[2]);const c=r(u,t);q(a,o[2]),i[a]=c}}return i},evaluateAsNormalExpression:(e,t)=>{const n={};for(let r=0;r<e.length;r+=2){const i=e[r],s=e[r+1];q(i,t),n[i]=s??null}return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n(e[1][1],t,r,i)},Et={"??":0,"&&":1,"||":2,array:3,cond:4,"0_def":5,"defined?":6,block:7,doseq:8,"0_lambda":9,for:10,if:11,let:12,loop:13,object:14,recur:15,switch:16,throw:17,try:18,unless:19},Nt=[vt,Je,yt,xt,{arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1];for(const[e,i]of r){if(n(e,t))return n(i,t)}return null},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n(e[1][1].flat(),t,r,i)},ut,He,{arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=t.create({});let i=null;for(const t of e[1][1])i=n(t,r);return i},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n(e[1][1],t.create({}),r,i)},mt,ct,gt,{arity:{min:2,max:3},evaluate:(e,t,{evaluateNode:n})=>{const[r,i,s]=e[1][1];return n(r,t)?n(i,t):s?n(s,t):null},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n(e[1][1].filter(e=>!!e),t,r,i)},lt,ft,kt,bt,{arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[,r,i]=e[1],s=n(r,t);for(const[e,r]of i){if(n(e,t)===s)return n(r,t)}return null},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n([e[1][1],...e[1][2].flat()],t,r,i)},wt,St,{arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[r,i,s]=e[1][1];return n(r,t)?s?n(s,t):null:n(i,t)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:i})=>n(e[1][1].filter(e=>!!e),t,r,i)}],$t={normalExpressions:Le,specialExpressions:Nt,allNormalExpressions:ze},It=Object.keys(Le),At=Object.keys(Et);new Set(At);const jt=(e,t,n,r)=>{const i=Array.isArray(e)?e:[[s.SpecialExpression,[Et.block,e.body]]],o=new Set;for(const e of i)Ot(e,t,n,r)?.forEach(e=>o.add(e));return o};function Ot(e,t,r,i){const o=e[0];switch(o){case s.UserDefinedSymbol:{const n=e;return null===t.lookUp(n)?new Set([n[1]]):null}case s.NormalBuiltinSymbol:case s.SpecialBuiltinSymbol:case s.String:case s.Number:case s.ReservedSymbol:case s.Binding:return null;case s.NormalExpression:{const n=e,s=new Set;if(Xe(n)){const[,[e]]=n;if(qe(e)){null===t.lookUp(e)&&s.add(e[1])}}else{const[,[e]]=n;Ot(e,t,r,i)?.forEach(e=>s.add(e))}for(const e of n[1][1])Ot(e,t,r,i)?.forEach(e=>s.add(e));return s}case s.SpecialExpression:{const n=e,s=n[1][0];return(0,r.specialExpressions[s].getUndefinedSymbols)(n,t,{getUndefinedSymbols:jt,builtin:r,evaluateNode:i})}case s.Spread:return Ot(e[1],t,r,i);default:throw new n(`Unhandled node type: ${o}`,e[2])}}const Ct=(1+Math.sqrt(5))/2,Ft={E:Math.E,"-E":-Math.E,"ε":Math.E,"-ε":-Math.E,PI:Math.PI,"-PI":-Math.PI,"π":Math.PI,"-π":-Math.PI,PHI:Ct,"-PHI":-Ct,"φ":Ct,"-φ":-Ct,POSITIVE_INFINITY:Number.POSITIVE_INFINITY,"∞":Number.POSITIVE_INFINITY,NEGATIVE_INFINITY:Number.NEGATIVE_INFINITY,"-∞":Number.NEGATIVE_INFINITY,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,MIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,MAX_VALUE:Number.MAX_VALUE,MIN_VALUE:Number.MIN_VALUE,NaN:Number.NaN},Ut={true:!0,false:!1,null:null,do:null,else:null,case:null,each:null,in:null,when:null,while:null,catch:null,function:null,export:null,as:null,then:null,end:null,_:null,...Ft};const Tt={NativeJsFunction:(e,t,r)=>{try{return ee(e.nativeFn.fn(...t))}catch(e){const t="string"==typeof e?e:v(e)&&"string"==typeof e.message?e.message:"<no message>";throw new n(`Native function threw: "${t}"`,r)}},UserDefined:(e,r,i,s,{evaluateNode:o})=>{for(;;){if(!L(e.arity,r.length))throw new n(`Expected ${e.arity} arguments, got ${r.length}.`,i);const a=e.evaluatedfunction,u=a[0],c=u.filter(e=>e[0]!==et).length,l=s.create(e.evaluatedfunction[2]),f={self:{value:e}},h=[];for(let e=0;e<r.length;e+=1)if(e<c){const t=ee(r[e]),n=it(u[e],t,e=>o(e,l.create(f)));Object.entries(n).forEach(([e,t])=>{f[e]={value:t}})}else h.push(ee(r[e]));for(let e=r.length;e<c;e++){const t=u[e],n=it(t,o(t[1][1],s.create(f)),e=>o(e,s.create(f)));Object.entries(n).forEach(([e,t])=>{f[e]={value:t}})}const p=u.find(e=>e[0]===et);if(void 0!==p){const e=it(p,h,e=>o(e,s.create(f)));Object.entries(e).forEach(([e,t])=>{f[e]={value:t}})}try{let e=null;const t=l.create(f);for(const n of a[1])e=o(n,t);return e}catch(e){if(e instanceof t){r=e.params;continue}throw e}}},Partial:(e,t,r,i,{executeFunction:s})=>{const o=[...e.params];if(t.length!==e.placeholders.length)throw new n(`(partial) expects ${e.placeholders.length} arguments, got ${t.length}.`,r);const a=[...t];for(const t of e.placeholders)o.splice(t,0,a.shift());return s(e.function,o,i,r)},Comp:(e,t,r,i,{executeFunction:s})=>{const{params:o}=e;if(0===o.length){if(1!==t.length)throw new n(`(comp) expects one argument, got ${p(t.length)}.`,r);return A(t[0],r)}return A(o.reduceRight((e,t)=>[s(R(t,r),e,i,r)],t)[0],r)},Constantly:e=>e.value,Juxt:(e,t,n,r,{executeFunction:i})=>e.params.map(e=>i(R(e,n),t,r,n)),Complement:(e,t,n,r,{executeFunction:i})=>!i(e.function,t,r,n),EveryPred:(e,t,n,r,{executeFunction:i})=>{for(const s of e.params)for(const e of t){if(!i(R(s,n),[e],r,n))return!1}return!0},SomePred:(e,t,n,r,{executeFunction:i})=>{for(const s of e.params)for(const e of t){if(i(R(s,n),[e],r,n))return!0}return!1},Fnull:(e,t,n,r,{executeFunction:i})=>{const s=t.map((t,n)=>null===t?ee(e.params[n]):t);return i(R(e.function,n),s,r,n)},Builtin:(e,t,n,r,{executeFunction:i})=>m(ze[e.normalBuiltinSymbolType],n).evaluate(t,n,r,{executeFunction:i}),SpecialBuiltin:(e,t,r,i,{executeFunction:s})=>{const o=m(Nt[e.specialBuiltinSymbolType],r);if(o.evaluateAsNormalExpression)return o.evaluateAsNormalExpression(t,r,i,{executeFunction:s});throw new n(`Special builtin function ${e.specialBuiltinSymbolType} is not supported as normal expression.`,r)},Module:(e,t,r,i,{executeFunction:s})=>{const o=i.getModule(e.moduleName);if(!o)throw new n(`Module '${e.moduleName}' not found.`,r);const a=o.functions[e.functionName];if(!a)throw new n(`Function '${e.functionName}' not found in module '${e.moduleName}'.`,r);return V(a.arity,t.length,r),a.evaluate(t,r,i,{executeFunction:s})}};function Bt(e,t){let n=null;for(const r of e.body)n=Pt(r,t);return n}function Pt(e,t){switch(e[0]){case s.Number:case s.String:return function(e){return e[1]}(e);case s.NormalBuiltinSymbol:case s.SpecialBuiltinSymbol:case s.UserDefinedSymbol:return t.evaluateSymbol(e);case s.ReservedSymbol:return function(e){const t=e[1];if(!["true","false","null"].includes(t))throw new n(`Reserved symbol ${t} cannot be evaluated`,e[2]);return m(Ut[t],e[2])}(e);case s.NormalExpression:{const r=function(e,t){const r=e[2],o=e[1][1],a=[],u=[];if(o.forEach((e,r)=>{if(Ze(e)){const r=Pt(e[1],t);if(!Array.isArray(r))throw new n(`Spread operator requires an array, got ${p(e)}`,e[2]);a.push(...r)}else e[0]===s.ReservedSymbol&&"_"===e[1]?u.push(r):a.push(Pt(e,t))}),Xe(e)){const n=e[1][0];if(u.length>0){const e=Pt(n,t);return{[c]:!0,function:R(e,r),functionType:"Partial",params:a,placeholders:u,sourceCodeInfo:r,arity:z(u.length)}}if(Ge(n)){const r=n[1];return $t.allNormalExpressions[r].evaluate(a,e[2],t,{executeFunction:Mt})}{const s=t.getValue(n[1]);if(void 0!==s)return Mt(R(s,r),a,t,r);throw new i(n[1],e[2])}}{const n=R(Pt(e[1][0],t),r);if(u.length>0){return{[c]:!0,function:n,functionType:"Partial",params:a,placeholders:u,sourceCodeInfo:r,arity:z(u.length)}}return Mt(n,a,t,r)}}(e,t);if("number"==typeof r&&Number.isNaN(r))throw new n("Number is NaN",e[2]);return ve(r)}case s.SpecialExpression:return ve(function(e,t){const n=e[1][0],r=m($t.specialExpressions[n],e[2]);return(0,r.evaluate)(e,t,{evaluateNode:Pt,builtin:$t,getUndefinedSymbols:jt})}(e,t));default:throw new n(`${a(e[0])}-node cannot be evaluated`,e[2])}}function Mt(e,t,r,i){if(b(e))return Tt[e.functionType](e,t,i,r,{evaluateNode:Pt,executeFunction:Mt});if(Array.isArray(e))return function(e,t,r){if(1!==t.length)throw new n("Array as function requires one non negative integer parameter.",r);const i=t[0];return $(i,r,{integer:!0,nonNegative:!0}),ee(e[i])}(e,t,i);if(F(e))return function(e,t,r){if(1!==t.length)throw new n("Object as function requires one string parameter.",r);const i=t[0];return q(i,r),ee(e[i])}(e,t,i);if("string"==typeof e)return function(e,t,r){if(1!==t.length)throw new n("String as function requires one Obj parameter.",r);const i=ee(t[0]);if(F(i))return ee(i[e]);if(N(i,{integer:!0}))return ee(e[i]);throw new n(`string as function expects Obj or integer parameter, got ${p(i)}`,r)}(e,t,i);if(N(e))return function(e,t,r){if($(e,r,{integer:!0}),1!==t.length)throw new n("Number as function requires one Arr parameter.",r);const i=t[0];return C(i,r),ee(i[e])}(e,t,i);throw new n("Unexpected function type",i)}class Dt{contexts;globalContext;values;nativeJsFunctions;modules;constructor({contexts:e,values:t,nativeJsFunctions:n,modules:r}){this.globalContext=m(e[0]),this.contexts=e,this.values=t,this.nativeJsFunctions=n,this.modules=r??new Map}getModule(e){return this.modules.get(e)}create(e){const t=this.globalContext,n=new Dt({contexts:[e,...this.contexts],values:this.values,nativeJsFunctions:this.nativeJsFunctions,modules:this.modules});return n.globalContext=t,n}new(e){return new Dt({contexts:[{},e],modules:this.modules})}exportValues(e,t){for(const[r,i]of Object.entries(e)){if(this.globalContext[r])throw new n(`Cannot redefine exported value "${r}"`,t);const e=Rt(r);if(e)throw new n(`Cannot shadow ${e}`,t);this.globalContext[r]={value:i}}this.contexts[0]!==this.globalContext&&this.addValues(e,t)}addValues(e,t){const r=this.contexts[0];for(const[i,s]of Object.entries(e)){if(r[i])throw new n(`Cannot redefine value "${i}"`,t);const e=Rt(i);if(e)throw new n(`Cannot shadow ${e}`,t);r[i]={value:ee(s)}}}getValue(e){for(const t of this.contexts){const n=t[e];if(n)return n.value}const t=this.nativeJsFunctions?.[e];return t||this.values?.[e]}lookUp(e){const t=e[1];for(const e of this.contexts){const n=e[t];if(n)return n}const n=this.values?.[t];if(void 0!==n)return{value:ee(n)};const r=this.nativeJsFunctions?.[t];return r?{value:r}:null}evaluateSymbol(e){if(Ke(e)){const t=e[1];switch(t){case Et["&&"]:case Et["||"]:case Et.array:case Et.object:case Et["defined?"]:case Et.recur:case Et.throw:case Et["??"]:{const n=m($t.specialExpressions[t],e[2]);return{[c]:!0,functionType:"SpecialBuiltin",specialBuiltinSymbolType:t,sourceCodeInfo:e[2],arity:n.arity}}default:throw new n(`Unknown special builtin symbol type: ${t}`,e[2])}}if(Ge(e)){const t=e[1],n=ze[t],r=n.name;return{[c]:!0,functionType:"Builtin",normalBuiltinSymbolType:t,sourceCodeInfo:e[2],arity:n.arity,name:r}}const t=this.lookUp(e);if(v(r=t)&&void 0!==r.value)return t.value;var r;throw new i(e[1],e[2])}}function Rt(e){return At.includes(e)?`special expression "${e}"`:It.includes(e)?`builtin function "${e}"`:"self"===e?`builtin value "${e}"`:null}function _t(e={},t){const r=e.globalContext??{},i=e.contexts?[r,...e.contexts]:[r],s=new Dt({contexts:i,values:e.values,modules:t,nativeJsFunctions:e.jsFunctions&&Object.entries(e.jsFunctions).reduce((e,[t,r])=>{const i=t.split("."),s=i.pop();if(/^[A-Z]/.test(s))throw new n(`Invalid identifier "${t}" in jsFunctions, function name must not start with an uppercase letter`,void 0);let o=e;for(const e of i){if(0===e.length)throw new n(`Invalid empty identifier "${t}" in jsFunctions`,void 0);if(!/^[A-Z]/.test(e))throw new n(`Invalid identifier "${t}" in jsFunctions, module name must start with an uppercase letter`,void 0);o[e]||(o[e]={}),o=o[e]}!function(e){if(!function(e){return"object"==typeof e&&null!==e&&"fn"in e&&"function"==typeof e.fn}(e))throw new TypeError("Expected a NativeJsFunction")}(r);const a={functionType:"NativeJsFunction",nativeFn:r,name:s,[c]:!0,arity:r.arity??{},docString:r.docString??""};return o===e&&function(e){const t=Rt(e);if(t)throw new n(`Cannot shadow ${t}`,void 0)}(s),o[s]=a,e},{})});return e.globalModuleScope?s:s.create({})}const Lt=["^","*","/","%","+","-","<<",">>",">>>","++","<","<=","≤",">",">=","≥","==","!=","≠","&","xor","|","&&","||","??","|>"],Vt=[...Lt,"?",":","->","...",".",",","=",":",";"],zt=new Set(["comment","cond","def","defined?","block","doseq","if","let","loop","recur","throw","try","unless","while"]);function Jt(e){return!zt.has(e)}const Wt=new Set(Lt);function qt(e){return Wt.has(e)}const Yt=new Set(Vt);function Gt(e){return Yt.has(e)}const Kt=["(",")","[","]","{","}","'",'"',"`",",",".",";"," ","\n","\r","\t"],Xt=["0","1","2","3","4","5","6","7","8","9",...Kt],Zt=new Set(Kt),Ht=new Set(Xt),Qt=/\s/,en=[0],tn=(e,t)=>{if('"'!==e[t])return en;let n='"',r=1,i=e[t+r],s=!1;for(;i&&('"'!==i||s);)r+=1,s?(s=!1,n+=i):("\\"===i&&(s=!0),n+=i),i=e[t+r];return i?(n+='"',[r+1,["string",n]]):[r,["Error",n,void 0,`Unclosed string at position ${t}`]]};function nn(e,t,n,r){return t===n.slice(r,r+t.length)?[t.length,[e,t]]:en}const rn=/\d/,sn=/[0-7]/,on=/[0-9a-f]/i,an=/[01]/,un=/[\s)\]}(,;]/,cn=(e,t)=>{let n=e[t];if("'"===n){let r=1,i=e[t+r],s=!1;for(;"'"!==i||s;){if(void 0===i)return[r,["Error",n,void 0,`Unclosed quoted symbol at position ${t}`]];r+=1,s?(s=!1,n+=i):("\\"===i&&(s=!0),n+=i),i=e[t+r]}return n+="'",[r+1,["Symbol",n]]}if(!Ht.has(n)){const r=t;let i=e[t+=1];for(;i&&!Zt.has(i);)n+=i,i=e[t+=1];return n.endsWith(":")?[t-r-1,["Symbol",n.slice(0,-1)]]:[t-r,["Symbol",n]]}return en},ln=[(e,t)=>{let n=e[t];if(!n||!Qt.test(n))return en;let r=n;for(n=e[t+=1];n&&Qt.test(n);)r+=n,n=e[t+=1];return[r.length,["Whitespace",r]]},(e,t)=>{if("/"===e[t]&&"*"===e[t+1]){let n=2,r="/*";for(;("*"!==e[t+n]||"/"!==e[t+n+1])&&t+n+1<e.length;)r+=e[t+n],n+=1;return t+n+1>=e.length?[n,["Error",r,void 0,`Unclosed multi-line comment at position ${t}`]]:(r+="*/",n+=2,[n,["MultiLineComment",r]])}return en},(e,t)=>{if("/"===e[t]&&"/"===e[t+1]){let n=2,r="//";for(;"\n"!==e[t+n]&&t+n<e.length;)r+=e[t+n],n+=1;return[n,["SingleLineComment",r]]}return en},(e,t)=>{const n=cn(e,t);if(0===n[0]||!n[1])return en;let r=n[1][1];r=r.startsWith("'")?r.slice(1,r.length-1):r;return void 0===Ut[r]?en:[n[0],["ReservedSymbol",r]]},(e,t)=>nn("LParen","(",e,t),(e,t)=>nn("RParen",")",e,t),(e,t)=>nn("LBracket","[",e,t),(e,t)=>nn("RBracket","]",e,t),(e,t)=>nn("LBrace","{",e,t),(e,t)=>nn("RBrace","}",e,t),(e,t)=>{if('"'!==e[t]||'"'!==e[t+1]||'"'!==e[t+2])return en;let n='"""',r=3,i=e[t+r],s=e.slice(t+r,t+r+3),o=!1;for(;i&&('"""'!==s||o);)r+=1,o?(o=!1,n+=i):("\\"===i&&(o=!0),n+=i),i=e[t+r],s=e.slice(t+r,t+r+3);return i?(n+='"""',[r+3,["DocString",n]]):[r,["Error",n,void 0,`Unclosed doc string at position ${t}`]]},tn,(e,t)=>{if("#"!==e[t])return en;const[n,r]=tn(e,t+1);if(!r)return en;if("Error"===r[0]){return[n+1,["Error",`#${r[1]}`,void 0,`Unclosed regexp at position ${t}`]]}t+=n+1;let i=n+1,s="";for(;"g"===e[t]||"i"===e[t];)if(s+=e[t],i+=1,t+=1,s.includes(e[t]))return[i,["Error",`#${r[1]}${s}`,void 0,`Duplicated regexp option "${e[t]}"`]];return[i,["RegexpShorthand",`#${r[1]}${s}`]]},(e,t)=>{if("0"!==e[t])return en;const n=e[t+1],r="b"===n||"B"===n?"binary":"o"===n||"O"===n?"octal":"x"===n||"X"===n?"hex":null;if(null===r)return en;let i;for(i=t+2;i<e.length;i+=1){const t=e[i];if("binary"===r&&!an.test(t))break;if("octal"===r&&!sn.test(t))break;if("hex"===r&&!on.test(t))break}const s=i-t;if(s<=2)return en;const o=e[i];return o&&!un.test(o)?en:[s,["BasePrefixedNumber",e.substring(t,i)]]},(e,t)=>{let n;const r="-"===e[t],i="+"===e[t],s=r||i?t+1:t;let o=!1,a=!1;for(n=s;n<e.length;n+=1){const r=e[n];if("_"===r){if(!rn.test(e[n-1])||!rn.test(e[n+1]))return n===s?en:[n-t+1,["Error",e.substring(t,n+1),void 0,`Invalid number format at position ${n+1}`]]}else if("."===r){if(n===s)return en;if(o||a)return[n-t+1,["Error",e.substring(t,n+1),void 0,`Invalid number format at position ${n+1}`]];o=!0}else if("e"===r||"E"===r){if(n===s)return en;if(a)return[n-t+1,["Error",e.substring(t,n+1),void 0,`Invalid number format at position ${n+1}`]];if("."===e[n-1]||"+"===e[n-1]||"-"===e[n-1])return[n-t+1,["Error",e.substring(t,n+1),void 0,`Invalid number format at position ${n+1}`]];"+"!==e[n+1]&&"-"!==e[n+1]||(n+=1),a=!0}else if(!rn.test(r))break}if((r||i)&&n===s)return en;const u=n-t;if(0===u)return en;const c=e[n];return c&&":"!==c&&!un.test(c)?[n-t+1,["Error",e.substring(t,n+1),void 0,`Invalid number format at position ${n+1}`]]:[u,["Number",e.substring(t,n)]]},(e,t)=>{const n=e.slice(t,t+3);if(t+2<e.length&&Gt(n))return[3,["Operator",n]];const r=e.slice(t,t+2);if(t+1<e.length&&Gt(r))return[2,["Operator",r]];const i=e[t]??"";return Gt(i)?[1,["Operator",i]]:en},cn];function fn(e,t,n){const r=e.substring(0,t+1).split(/\r\n|\r|\n/),i=r[r.length-1],s=function(e,t){return e.split(/\r\n|\r|\n/)[t]}(e,r.length-1);return{code:s,position:{line:r.length,column:i.length},filePath:n}}function hn(e,t){const n=t;if(0===t){const[r,i]=((e,t)=>{if("#"===e[t]&&"!"===e[t+1]){let n=2,r="#!";for(;"\n"!==e[t+n]&&t+n<e.length;)r+=e[t+n],n+=1;return[n,["SingleLineComment",r]]}return en})(e,t);if(t+=r,r>0)return[t-n,i]}for(const r of ln){const[i,s]=r(e,t);if(t+=i,0!==i)return[t-n,s]}return[1,["Error",e[n],void 0,"Unrecognized character"]]}function pn(e,t){return"Symbol"===e?.[0]&&(!t||e[1]===t)}function dn(e,t){return function(e,t){pn(e,t)||Un("Symbol",void 0,e)}(e,t),e}function gn(e,t){return"ReservedSymbol"===e?.[0]&&(!t||e[1]===t)}function mn(e,t){gn(e,t)||Un("ReservedSymbol",t,e)}function yn(e,t){return mn(e,t),e}function vn(e,t){return"Operator"===e?.[0]&&(!t||e[1]===t)}function bn(e,t){vn(e,t)||Un("Operator",t,e)}function wn(e){return"LParen"===e?.[0]}function Sn(e){wn(e)||Un("LParen",void 0,e)}function xn(e){return"RParen"===e?.[0]}function kn(e){xn(e)||Un("RParen",void 0,e)}function En(e){return"LBracket"===e?.[0]}function Nn(e){return function(e){En(e)||Un("LBracket",void 0,e)}(e),e}function $n(e){return"RBracket"===e?.[0]}function In(e){$n(e)||Un("RBracket",void 0,e)}function An(e){return"LBrace"===e?.[0]}function jn(e){return function(e){An(e)||Un("LBrace",void 0,e)}(e),e}function On(e){return"RBrace"===e?.[0]}function Cn(e){return"string"===e?.[0]}function Fn(e){return"Operator"===e?.[0]&&qt(e[1])}function Un(e,t,r){const i=r?`${r[0]} '${r[1]}'`:"end of input";throw new n(`Unexpected token: ${i}, expected ${e}${t?` '${t}'`:""}`,r?.[2])}function Tn(e,{removeWhiteSpace:t}){const n=e.tokens.filter(e=>!(function(e){return"SingleLineComment"===e?.[0]}(e)||function(e){return"MultiLineComment"===e?.[0]}(e)||function(e){return"Shebang"===e?.[0]}(e)||t&&function(e){return"Whitespace"===e?.[0]}(e)));return{...e,tokens:n}}const Bn=Object.entries(Ve).reduce((e,[t,n])=>(e[n]=t,e),[]),Pn=Object.entries(Et).reduce((e,[t,n])=>(e[n]=t,e),[]);function Mn(e){return qe(e)?e[1]:Ge(e)?Bn[e[1]]:Pn[e[1]]}const Dn=/^\$([1-9]\d?)?$/;function Rn(e,t){return t&&(e[2]=t),e}function _n(e,t){switch(e){case"^":return 12;case"*":case"/":case"%":return 11;case"+":case"-":return 10;case"<<":case">>":case">>>":return 9;case"++":return 8;case"<":case"<=":case"≤":case">":case">=":case"≥":return 7;case"==":case"!=":case"≠":return 6;case"&":case"xor":case"|":return 5;case"&&":case"||":case"??":return 4;case"|>":return 2;default:throw new n(`Unknown binary operator: ${e}`,t)}}function Ln(e,t,n){const r=Rn([s.NormalExpression,[e,t]],n);return Ge(e)&&V(ze[e[1]].arity,r[1][1].length,n),r}function Vn(e,t,n){return Rn([s.NormalExpression,[[s.NormalBuiltinSymbol,Ve.get],[e,t]]],n)}function zn(e,t,r,i,o){const a=e[1];switch(a){case"^":case"*":case"/":case"%":case"+":case"-":case"<<":case">>":case">>>":case"++":case"<":case"<=":case"≤":case">":case">=":case"≥":case"==":case"!=":case"≠":case"&":case"xor":case"|":case"|>":return Ln(t,[r,i],o);case"&&":case"||":case"??":return Rn([s.SpecialExpression,[Et[a],[r,i]]],o);default:throw new n(`Unknown binary operator: ${a}`,o)}}class Jn{tokenStream;parseState;constructor(e,t){this.tokenStream=e,this.parseState=t}peek(){return this.tokenStream.tokens[this.parseState.position]}peekSourceCodeInfo(){const e=this.peek();return e?e[2]:this.tokenStream.tokens.at(-1)?.[2]}peekAhead(e){return this.tokenStream.tokens[this.parseState.position+e]}advance(){this.parseState.position+=1}parse(){this.tokenStream.tokens.forEach(e=>{if("Error"===e[0])throw new n(e[3],e[2])});const e=[];for(;!this.isAtEnd();)if(e.push(this.parseExpression(0,!0)),vn(this.peek(),";"))this.advance();else if(!this.isAtEnd())throw new n("Expected ;",this.peekSourceCodeInfo());return e}parseExpression(e=0,t=!1){const r=this.peek();let i;if(pn(r))switch(r[1]){case"let":return this.parseLet(r);case"if":case"unless":i=this.parseIfOrUnless(r);break;case"cond":i=this.parseCond(r);break;case"switch":i=this.parseSwitch(r);break;case"for":case"doseq":i=this.parseForOrDoseq(r);break;case"loop":i=this.parseLoop(r);break;case"try":i=this.parseTry(r)}else if(gn(r,"do"))i=this.parseBlock()[0];else if(gn(r,"export")){if(!t)throw new n("export is only allowed in module scope",r[2]);return this.parseExport(r)}i||=this.parseOperand();let o=this.peek();for(;!this.isAtExpressionEnd();){if(Fn(o)){const t=o[1],n=_n(t,o[2]);if(n<=e&&(12!==n||12!==e))break;const r=Rn(Et[t]?[s.SpecialBuiltinSymbol,Et[t]]:[s.NormalBuiltinSymbol,Ve[t]],o[2]);this.advance();i=zn(o,r,i,this.parseExpression(n),o[2])}else if(pn(o)){if(!Jt(o[1]))break;const t=3;if(t<=e)break;const r=this.parseSymbol(),s=this.parseExpression(t);if(Ke(r))throw new n("Special expressions are not allowed in binary functional operators",r[2]);i=Ln(r,[i,s],o[2])}else{if("?"!==o?.[1])break;{if(1<=e)break;this.advance();const t=this.parseExpression();if(!vn(this.peek(),":"))throw new n("Expected :",this.peekSourceCodeInfo());this.advance();const r=this.parseExpression();i=Rn([s.SpecialExpression,[Et.if,[i,t,r]]],i[2])}}o=this.peek()}return i}asToken(e){if(!e)throw new n("Unexpected end of input",this.peekSourceCodeInfo());return e}parseOperand(){let e=this.parseOperandPart(),t=this.peek();for(;vn(t,".")||En(t)||wn(t);)if("."===t[1]){this.advance();const r=this.asToken(this.peek());if(!pn(r))throw new n("Expected symbol",this.peekSourceCodeInfo());e=Vn(e,Rn([s.String,r[1]],r[2]),t[2]),this.advance(),t=this.peek()}else if(En(t)){this.advance();const r=this.parseExpression();if(!$n(this.peek()))throw new n("Expected closing bracket",this.peekSourceCodeInfo());e=Vn(e,r,t[2]),this.advance(),t=this.peek()}else wn(t)&&(e=this.parseFunctionCall(e),t=this.peek());return e}parseOperandPart(){const e=this.asToken(this.peek());if(wn(e)){const e=this.parseState.position,t=this.parseLambdaFunction();if(t)return t;this.parseState.position=e,this.advance();const r=this.parseExpression();if(!xn(this.peek()))throw new n("Expected closing parenthesis",this.peekSourceCodeInfo());return this.advance(),r}if(vn(e)){const t=e[1];if(qt(t))return this.advance(),Rn(void 0!==Et[t]?[s.SpecialBuiltinSymbol,Et[t]]:[s.NormalBuiltinSymbol,Ve[t]],e[2]);if("->"===t)return this.parseShorthandLambdaFunction();throw new n(`Illegal operator: ${t}`,e[2])}if(An(e))return this.parseObject();if(En(e))return this.parseArray();const t=e[0];switch(t){case"Number":case"BasePrefixedNumber":return this.parseNumber();case"string":return this.parseString(e);case"Symbol":{const e=this.parseState.position,t=this.parseLambdaFunction();return t||(this.parseState.position=e,this.parseSymbol())}case"ReservedSymbol":return this.parseReservedSymbol();case"RegexpShorthand":return this.parseRegexpShorthand();default:throw new n(`Unknown token type: ${t}`,e[2])}}parseObject(){const e=jn(this.peek());this.advance();const t=[];for(;!this.isAtEnd()&&!On(this.peek());){if(vn(this.peek(),"..."))this.advance(),t.push(Rn([s.Spread,this.parseExpression()],this.peekSourceCodeInfo()));else{const e=this.peek();if(Cn(e)){const n=this.parseString(e);t.push(Rn([s.String,n[1]],e[2]))}else if(pn(e)){const n=e[1].startsWith("'")?this.stringFromQuotedSymbol(e[1]):e[1];t.push(Rn([s.String,n],e[2])),this.advance()}else{if(!En(e))throw new n("Expected key to be a symbol or a string",this.peekSourceCodeInfo());this.advance(),t.push(this.parseExpression()),In(this.peek()),this.advance()}bn(this.peek(),":"),this.advance(),t.push(this.parseExpression())}const e=this.peek();if(!vn(e,",")&&!On(e))throw new n("Expected comma or closing brace",this.peekSourceCodeInfo());vn(e,",")&&this.advance()}var r;return On(r=this.peek())||Un("RBrace",void 0,r),this.advance(),Rn([s.SpecialExpression,[Et.object,t]],e[2])}parseArray(){const e=Nn(this.peek());this.advance();const t=[];for(;!this.isAtEnd()&&!$n(this.peek());){vn(this.peek(),"...")?(this.advance(),t.push(Rn([s.Spread,this.parseExpression()],this.peekSourceCodeInfo()))):t.push(this.parseExpression());const e=this.peek();if(!vn(e,",")&&!$n(e))throw new n("Expected comma or closing parenthesis",this.peekSourceCodeInfo());vn(e,",")&&this.advance()}return In(this.peek()),this.advance(),Rn([s.SpecialExpression,[Et.array,t]],e[2])}parseFunctionCall(e){this.advance();const t=[];for(;!this.isAtEnd()&&!xn(this.peek());){vn(this.peek(),"...")?(this.advance(),t.push(Rn([s.Spread,this.parseExpression()],this.peekSourceCodeInfo()))):t.push(this.parseExpression());const e=this.peek();if(!vn(e,",")&&!xn(e))throw new n("Expected comma or closing parenthesis",this.peek()?.[2]);vn(e,",")&&this.advance()}if(!xn(this.peek()))throw new n("Expected closing parenthesis",this.peekSourceCodeInfo());if(this.advance(),!Ke(e))return Ge(e)||qe(e)?Ln(e,t,e[2]):Rn([s.NormalExpression,[e,t]],e[2]);{const r=e[1];switch(V($t.specialExpressions[r].arity,t.length,e[2]),r){case Et["||"]:case Et["&&"]:case Et.recur:case Et.array:case Et.object:case Et["??"]:return Rn([s.SpecialExpression,[r,t]],e[2]);case Et["defined?"]:{const[n]=t;return Rn([s.SpecialExpression,[r,n]],e[2])}case Et.throw:{const[n]=t;return Rn([s.SpecialExpression,[r,n]],e[2])}case Et["0_lambda"]:case Et["0_def"]:throw new n(`${r} is not allowed`,e[2]);default:throw new n(`Unknown special expression: ${r}`,e[2])}}}parseLambdaFunction(){const e=this.asToken(this.peek());if(wn(e)&&pn(this.peekAhead(1))&&vn(this.peekAhead(2),"->"))return null;try{const t=this.parseFunctionArguments();if(!vn(this.peek(),"->"))return null;let n;this.advance();let r="";if(gn(this.peek(),"do")){const e=this.parseBlock(!0);r=e[1],n=e[0][1][1]}else n=[this.parseExpression()];return Rn([s.SpecialExpression,[Et["0_lambda"],[t,n],r]],e[2])}catch{return null}}parseFunctionArguments(){const e=this.peek();if(pn(e))return[Rn([Qe,[this.parseSymbol(),void 0]],e[2])];Sn(e),this.advance();let t=!1,r=!1;const i=[];for(;!this.isAtEnd()&&!xn(this.peek())&&!pn(this.peek(),"let");){if(t)throw new n("Rest argument must be last",this.peekSourceCodeInfo());const e=this.parseBindingTarget();if(void 0!==e[1][1]&&(r=!0),e[0]===et&&(t=!0),r&&!e[1][1])throw new n("Default arguments must be last",this.peekSourceCodeInfo());if(i.push(e),!vn(this.peek(),",")&&!xn(this.peek())&&!pn(this.peek(),"let"))throw new n("Expected comma or closing parenthesis",this.peekSourceCodeInfo());vn(this.peek(),",")&&this.advance()}if(!xn(this.peek()))throw new n("Expected closing parenthesis",this.peekSourceCodeInfo());return this.advance(),i}parseShorthandLambdaFunction(){const e=this.asToken(this.peek());this.advance();const t=this.parseState.position;let r,i="";if(gn(this.peek(),"do")){const e=this.parseBlock(!0);i=e[1],r=e[0][1][1]}else r=[this.parseExpression()];const o=this.parseState.position-1;let a=0,u="NOT_SET";for(let r=t;r<=o;r+=1){const t=this.tokenStream.tokens[r];if(pn(t)){const r=Dn.exec(t[1]);if(r){const t=r[1]??"1";if("1"===t){if(!r[1]&&"WITH_1"===u||r[1]&&"NAKED"===u)throw new n("Please make up your mind, either use $ or $1",e[2]);u=r[1]?"WITH_1":"NAKED"}if(a=Math.max(a,Number(t)),a>20)throw new n("Can't specify more than 20 arguments",e[2])}}}const c=[];for(let t=1;t<=a;t+=1)1===t&&"NAKED"===u?c.push(Rn([Qe,[[s.UserDefinedSymbol,"$"],void 0]],e[2])):c.push(Rn([Qe,[[s.UserDefinedSymbol,`$${t}`],void 0]],e[2]));return Rn([s.SpecialExpression,[Et["0_lambda"],[c,r],i]],e[2])}parseOptionalDefaulValue(){if(vn(this.peek(),"="))return this.advance(),this.parseExpression()}parseBindingTarget({requireDefaultValue:e,noRest:t}={}){const r=this.peek();if(pn(r)){const t=this.parseSymbol();if(!qe(t))throw new n("Expected user defined symbol",r[2]);const i=this.parseOptionalDefaulValue();if(e&&!i)throw new n("Expected assignment",this.peekSourceCodeInfo());return Rn([Qe,[t,i]],r[2])}if(vn(r,"...")){if(t)throw new n("Rest element not allowed",r[2]);this.advance();const e=Ye(this.parseSymbol());if(vn(this.peek(),"="))throw new n("Rest argument can not have default value",this.peekSourceCodeInfo());return Rn([et,[e[1],void 0]],r[2])}if(En(r)){this.advance();const t=[];let i=this.asToken(this.peek()),s=!1;for(;!$n(i);){if(s)throw new n("Rest argument must be last",i[2]);if(vn(i,",")){t.push(null),this.advance(),i=this.asToken(this.peek());continue}const e=this.parseBindingTarget();e[0]===et&&(s=!0),t.push(e),i=this.asToken(this.peek()),$n(i)||(bn(i,","),this.advance()),i=this.asToken(this.peek())}this.advance();const o=this.parseOptionalDefaulValue();if(e&&!o)throw new n("Expected assignment",this.peekSourceCodeInfo());return Rn([nt,[t,o]],r[2])}if(An(r)){this.advance();const t={};let i=this.asToken(this.peek()),s=!1;for(;!On(i);){if(s)throw new n("Rest argument must be last",i[2]);vn(i,"...")&&(s=!0,this.advance());const e=this.parseSymbol(),o=Mn(e);if(i=this.asToken(this.peek()),gn(i,"as")){if(s)throw new n("Rest argument can not have alias",i[2]);this.advance();const e=Ye(this.parseSymbol());if(t[e[1]])throw new n(`Duplicate binding name: ${e}`,i[2]);t[o]=Rn([Qe,[e,this.parseOptionalDefaulValue()]],r[2])}else if(On(i)||vn(i,",")||vn(i,"=")){const o=Ye(e,e[2]);if(t[o[1]])throw new n(`Duplicate binding name: ${o}`,i[2]);if(s&&vn(this.peek(),"="))throw new n("Rest argument can not have default value",this.peekSourceCodeInfo());t[o[1]]=Rn(s?[et,[o[1],this.parseOptionalDefaulValue()]]:[Qe,[o,this.parseOptionalDefaulValue()]],r[2])}else if(vn(i,":")){if(this.advance(),i=this.asToken(this.peek()),!An(i)&&!En(i))throw new n("Expected object or array",i[2]);t[o]=this.parseBindingTarget()}On(this.peek())||(bn(this.peek(),","),this.advance()),i=this.asToken(this.peek())}this.advance(),i=this.asToken(this.peek());const o=this.parseOptionalDefaulValue();if(e&&!o)throw new n("Expected assignment",i[2]);return Rn([tt,[t,o]],r[2])}throw new n("Expected symbol",this.peekSourceCodeInfo())}parseLet(e){this.advance();const t=this.parseBindingTarget({requireDefaultValue:!0,noRest:!0}),n=t[1][1];t[1][1]=void 0;const r=Rn([s.Binding,[t,n]],e[2]);return Rn([s.SpecialExpression,[Et.let,r]],e[2])}parseBlock(e=!1){const t=yn(this.peek(),"do");this.advance();let r="";e&&function(e){return"DocString"===e?.[0]}(this.peek())&&(r=this.parseDocString());const i=[];for(;!this.isAtEnd()&&!gn(this.peek(),"end");)if(i.push(this.parseExpression()),vn(this.peek(),";"))this.advance();else if(!gn(this.peek(),"end"))throw new n("Expected end",this.peekSourceCodeInfo());return mn(this.peek(),"end"),this.advance(),[Rn([s.SpecialExpression,[Et.block,i]],t[2]),r]}parseImplicitBlock(e){const t=[];for(;!this.isAtEnd()&&!this.isImplicitBlockEnd(e);)vn(this.peek(),";")?this.advance():t.push(this.parseExpression());if(this.assertImplicitBlockEnd(e),0===t.length)throw new n("Expected expression",this.peekSourceCodeInfo());return 1===t.length?t[0]:Rn([s.SpecialExpression,[Et.block,t]],this.peekSourceCodeInfo())}assertImplicitBlockEnd(e){if(!this.isImplicitBlockEnd(e))throw new n(`Expected ${e.map(e=>e[1]).join(" or ")}`,this.peekSourceCodeInfo())}isImplicitBlockEnd(e){for(const t of e)if(gn(this.peek(),t))return!0;return!1}parseLoop(e){this.advance(),Sn(this.peek()),this.advance();const t=[];let r=this.peek();for(;!this.isAtEnd()&&!xn(r);){const e=this.parseBindingTarget({requireDefaultValue:!0,noRest:!0}),n=e[1][1];e[1][1]=void 0,t.push(Rn([s.Binding,[e,n]],e[2])),vn(this.peek(),",")&&this.advance(),r=this.peek()}if(0===t.length)throw new n("Expected binding",this.peekSourceCodeInfo());kn(r),this.advance(),bn(this.peek(),"->"),this.advance();const i=this.parseExpression();return Rn([s.SpecialExpression,[Et.loop,t,i]],e[2])}parseTry(e){this.advance();const t=this.parseImplicitBlock(["catch"]);let n;this.advance(),wn(this.peek())&&(this.advance(),n=this.parseSymbol(),kn(this.peek()),this.advance());const r=this.parseImplicitBlock(["end"]);return this.advance(),Rn([s.SpecialExpression,[Et.try,t,n,r]],e[2])}parseForOrDoseq(e){const t="doseq"===e[1];this.advance(),Sn(this.peek()),this.advance();const r=[];for(;!this.isAtEnd()&&!xn(this.peek());){const e=this.parseForLoopBinding(),t=r.flatMap(e=>Object.keys(ot(e[0][1][0]))),i=ot(e[0][1][0]);if(Object.keys(i).some(e=>t.includes(e)))throw new n("Duplicate binding",e[0][2]);r.push(e),vn(this.peek(),",")&&this.advance()}kn(this.peek()),this.advance(),bn(this.peek(),"->"),this.advance();const i=this.parseExpression();return Rn(t?[s.SpecialExpression,[Et.doseq,r,i]]:[s.SpecialExpression,[Et.for,r,i]],e[2])}parseForLoopBinding(){const e=this.parseBinding(),t=[];let r=this.asToken(this.peek());this.assertInternalLoopBindingDelimiter(r,["let","when","while"]);const i=[];if("let"===r[1])for(t.push("&let");pn(r,"let");){const e=this.parseLet(r),t=i.flatMap(e=>Object.keys(ot(e[1][0])));if(Object.keys(ot(e[1][1][1][0])).some(e=>t.includes(e)))throw new n("Duplicate binding",e[1][1][2]);i.push(e[1][1]),r=this.asToken(this.peek()),this.assertInternalLoopBindingDelimiter(r,["let","when","while"]),r=this.asToken(this.peek())}let s,o;for(;gn(r,"when")||gn(r,"while");){this.advance(),"when"===r[1]?(t.push("&when"),s=this.parseExpression()):(t.push("&while"),o=this.parseExpression()),r=this.asToken(this.peek());const e=t.includes("&when")&&t.includes("&while")?[]:t.includes("&when")?["while"]:["when"];this.assertInternalLoopBindingDelimiter(r,e),r=this.asToken(this.peek())}return this.assertInternalLoopBindingDelimiter(r,[]),[e,i,s,o]}assertInternalLoopBindingDelimiter(e,t){if(!this.isInternalLoopBindingDelimiter(e,t)){const r=`${[...t,","].map(e=>`"${e}"`).join(", ")} or ")"`;throw new n(`Expected symbol ${r}`,e[2])}}isInternalLoopBindingDelimiter(e,t){if(vn(e,",")||xn(e))return!0;for(const n of t){if("let"===n&&pn(e,"let"))return!0;if(["when","while"].includes(n)&&gn(e,n))return!0}return!1}parseBinding(){const e=dn(this.peek()),t=Ye(this.parseSymbol());mn(this.peek(),"in"),this.advance();const n=this.parseExpression();return Rn([s.Binding,[Rn([Qe,[t,void 0]],e[2]),n]],e[2])}parseIfOrUnless(e){const t="unless"===e[1];this.advance();const n=this.parseExpression();mn(this.peek(),"then"),this.advance();const r=this.parseImplicitBlock(["else","end"]);let i;return gn(this.peek(),"else")&&(this.advance(),i=this.parseImplicitBlock(["end"])),this.advance(),Rn(t?[s.SpecialExpression,[Et.unless,[n,r,i]]]:[s.SpecialExpression,[Et.if,[n,r,i]]],e[2])}parseCond(e){this.advance();const t=[];for(;!this.isAtEnd()&&!gn(this.peek(),"end");){mn(this.peek(),"case"),this.advance();const e=this.parseExpression();mn(this.peek(),"then"),this.advance();const n=this.parseImplicitBlock(["case","end"]);if(t.push([e,n]),gn(this.peek(),"end"))break}return mn(this.peek()),this.advance(),Rn([s.SpecialExpression,[Et.cond,t]],e[2])}parseSwitch(e){this.advance();const t=this.parseExpression(),n=[];for(;!this.isAtEnd()&&!gn(this.peek(),"end");){mn(this.peek(),"case"),this.advance();const e=this.parseExpression();mn(this.peek(),"then"),this.advance();const t=this.parseImplicitBlock(["case","end"]);if(n.push([e,t]),gn(this.peek(),"end"))break}return mn(this.peek(),"end"),this.advance(),Rn([s.SpecialExpression,[Et.switch,t,n]],e[2])}isAtEnd(){return this.parseState.position>=this.tokenStream.tokens.length}isAtExpressionEnd(){if(this.isAtEnd())return!0;const e=this.peek();return vn(e)?[";",",",":"].includes(e[1]):!!gn(e)&&["else","when","while","case","catch","let","then","end","do"].includes(e[1])}parseExport(e){this.advance();const t=this.peek();if(pn(t,"let")){const n=this.parseLet(dn(t));return Rn([s.SpecialExpression,[Et["0_def"],n[1][1]]],e[2])}throw new n("Expected let",this.peekSourceCodeInfo())}stringToSymbolNode(e,t){return void 0!==Et[e]&&"fn"!==e&&"def"!==e&&"defn"!==e?Rn([s.SpecialBuiltinSymbol,Et[e]],t):void 0!==Ve[e]?Rn([s.NormalBuiltinSymbol,Ve[e]],t):Rn([s.UserDefinedSymbol,e],t)}stringFromQuotedSymbol(e){return e.substring(1,e.length-1).replace(/(\\{2})|(\\')|\\(.)/g,(e,t,n,r)=>t?"\\":n?"'":`\\${r}`)}parseSymbol(){const e=this.asToken(this.peek());if(this.advance(),!pn(e))throw new n(`Expected symbol token, got ${e[0]}`,e[2]);return"'"===e[1][0]?this.stringToSymbolNode(this.stringFromQuotedSymbol(e[1]),e[2]):this.stringToSymbolNode(e[1],e[2])}parseReservedSymbol(){const e=yn(this.peek());this.advance();const t=e[1];return function(e){return e in Ft}(t)?Rn([s.Number,Ft[t]],e[2]):Rn([s.ReservedSymbol,e[1]],e[2])}parseNumber(){const e=this.asToken(this.peek());this.advance();const t=e[1],n="-"===t[0],r=(n?t.substring(1):t).replace(/_/g,"");return Rn([s.Number,n?-Number(r):Number(r)],e[2])}parseDocString(){const e=this.asToken(this.peek()),t=e[2]?["string",e[1].slice(2,-2),e[2]]:["string",e[1].slice(2,-2)];return ie(this.parseString(t)[1])}parseString(e){this.advance();const t=e[1].substring(1,e[1].length-1).replace(/(\\{2})|(\\")|(\\n)|(\\t)|(\\r)|(\\b)|(\\f)|\\(.)/g,(e,t,n,r,i,s,o,a,u)=>t?"\\":r?"\n":i?"\t":s?"\r":o?"\b":a?"\f":n?'"':u);return Rn([s.String,t],e[2])}parseRegexpShorthand(){const e=this.asToken(this.peek());this.advance();const t=e[1].lastIndexOf('"'),n=e[1].substring(2,t),r=e[1].substring(t+1),i=Rn([s.String,n],e[2]),o=Rn([s.String,r],e[2]);return Rn([s.NormalExpression,[Rn([s.NormalBuiltinSymbol,Ve.regexp],e[2]),[i,o]]],e[2])}}const Wn=new Set([...It,...At,...Object.keys(Ut)]);class qn{originalProgram;originalPosition;prefixProgram="";suffixProgram="";searchString="";suggestions=[];suggestionIndex=null;constructor(e,t,n,r){this.originalProgram=e,this.originalPosition=t;const i=this.originalProgram.slice(0,this.originalPosition),s=n.tokenize(i).tokens.at(-1);s&&"Error"!==s[0]&&(this.searchString=s[1],this.prefixProgram=this.originalProgram.slice(0,this.originalPosition-this.searchString.length),this.suffixProgram=this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.suggestions=this.generateSuggestions(r))}getNextSuggestion(){return this.getAutoCompleteSuggestionResult(this.getNextSuggestionSymbol())}getPreviousSuggestion(){return this.getAutoCompleteSuggestionResult(this.getPreviousSuggestionSymbol())}getAutoCompleteSuggestionResult(e){return null===e?null:{program:this.prefixProgram+e+this.suffixProgram,position:this.prefixProgram.length+e.length}}getNextSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=0:(this.suggestionIndex+=1,this.suggestionIndex>=this.suggestions.length&&(this.suggestionIndex=0)),this.suggestions[this.suggestionIndex])}getPreviousSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=this.suggestions.length-1:(this.suggestionIndex-=1,this.suggestionIndex<0&&(this.suggestionIndex=this.suggestions.length-1)),this.suggestions[this.suggestionIndex])}getSuggestions(){return[...this.suggestions]}getSearchString(){return this.searchString}generateSuggestions(e){const t=new Set(["0_def","0_defn","0_lambda"]),n=this.generateWithPredicate(e,e=>!t.has(e)&&e.startsWith(this.searchString));n.forEach(e=>t.add(e));const r=this.generateWithPredicate(e,e=>!t.has(e)&&e.toLowerCase().startsWith(this.searchString.toLowerCase()));r.forEach(e=>t.add(e));const i=this.generateWithPredicate(e,e=>!t.has(e)&&e.includes(this.searchString));i.forEach(e=>t.add(e));const s=this.generateWithPredicate(e,e=>!t.has(e)&&e.includes(this.searchString.toLowerCase()));return s.forEach(e=>t.add(e)),[...n,...r,...i,...s]}generateWithPredicate(e,t){const n=new Set;return Wn.forEach(e=>{t(e)&&n.add(e)}),Object.keys(e.globalContext??{}).filter(t).forEach(e=>n.add(e)),e.contexts?.forEach(e=>{Object.keys(e).filter(t).forEach(e=>n.add(e))}),Object.keys(e.jsFunctions??{}).filter(t).forEach(e=>n.add(e)),Object.keys(e.values??{}).filter(t).forEach(e=>n.add(e)),[...n].sort((e,t)=>e.localeCompare(t))}}class Yn{cache={};firstEntry=void 0;lastEntry=void 0;_size=0;maxSize;constructor(e){var t;if(this.maxSize=null===e?null:(t=e,Math.max(0,Math.ceil(t))),"number"==typeof this.maxSize&&this.maxSize<1)throw new Error(`1 is the minimum maxSize, got ${p(e)}`)}getContent(){return Object.entries(this.cache).reduce((e,[t,n])=>(e[t]=n.value,e),{})}get size(){return this._size}get(e){return this.cache[e]?.value}clear(){this.cache={},this.firstEntry=void 0,this.lastEntry=void 0,this._size=0}has(e){return!!this.cache[e]}set(e,t){if(this.has(e))throw new Error(`AstCache - key already present: ${e}`);const n={value:t,nextEntry:void 0,key:e};for(this.cache[e]=n,this._size+=1,this.lastEntry&&(this.lastEntry.nextEntry=n),this.lastEntry=n,this.firstEntry||(this.firstEntry=this.lastEntry);null!==this.maxSize&&this.size>this.maxSize;)this.dropFirstEntry()}dropFirstEntry(){const e=this.firstEntry;delete this.cache[e.key],this._size-=1,this.firstEntry=e.nextEntry}}exports.Lits=class{astCache;astCacheSize;debug;modules;constructor(e={}){if(this.debug=e.debug??!1,this.astCacheSize=e.astCacheSize??null,this.astCacheSize){this.astCache=new Yn(this.astCacheSize);const t=e.initialCache??{};for(const e of Object.keys(t))this.astCache.set(e,t[e])}else this.astCache=null;const t=e.modules??[];this.modules=new Map(t.map(e=>[e.name,e]))}getRuntimeInfo(){return{astCacheSize:this.astCacheSize,astCache:this.astCache,debug:this.debug}}run(e,t={}){const n=this.generateAst(e,t);return this.evaluate(n,t)}context(e,t={}){const n="string"==typeof e?this.generateAst(e,t):e,r=_t(t,this.modules);return Bt(n,r),r.globalContext}getUndefinedSymbols(e,t={}){const n="string"==typeof e?this.generateAst(e,t):e,r=_t(t,this.modules);return jt(n,r,$t,Pt)}tokenize(e,t={}){const n=function(e,t,n){let r=0;const i={tokens:[],filePath:n,hasDebugData:t};for(;r<e.length;){const s=t?fn(e,r,n):void 0,o=hn(e,r),[a,u]=o;r+=a,u&&(s&&(u[2]=s),i.tokens.push(u))}return i}(e,this.debug,t.filePath);return t.minify?Tn(n,{removeWhiteSpace:!1}):n}parse(e){const t={body:[],hasDebugData:(e=Tn(e,{removeWhiteSpace:!0})).hasDebugData};return t.body=new Jn(e,{position:0}).parse(),t}evaluate(e,t){return Bt(e,_t(t,this.modules))}transformSymbols(e,t){return function(e,t){return{...e,tokens:e.tokens.map(e=>pn(e)?[e[0],t(e[1])]:e)}}(e,t)}untokenize(e){return function(e){return e.tokens.reduce((e,t)=>`${e}${t[1]}`,"")}(e)}apply(e,t,n={}){const r="FN_2eb7b316_471c_5bfa_90cb_d3dfd9164a59",i=this.generateApplyFunctionCall(r,t),s=this.generateAst(i,n),o=t.reduce((e,t,n)=>(e[`${r}_${n}`]=t,e),{[r]:e});return n.values={...n.values,...o},this.evaluate(s,n)}generateApplyFunctionCall(e,t){const n=t.map((t,n)=>`${e}_${n}`).join(", ");return`${e}(${n})`}generateAst(e,t){if(this.astCache){const t=this.astCache.get(e);if(t)return t}const n=this.tokenize(e,{filePath:t.filePath}),r=this.parse(n);return this.astCache?.set(e,r),r}getAutoCompleter(e,t,n={}){return new qn(e,t,this,n)}},exports.asLitsFunction=function(e,t){return w(e,t),e},exports.asNativeJsFunction=function(e,t){return E(e,t),e},exports.asUserDefinedFunction=function(e,t){return x(e,t),e},exports.assertLitsFunction=w,exports.assertNativeJsFunction=E,exports.assertUserDefinedFunction=x,exports.isBuiltinFunction=function(e){return v(e)&&"Builtin"===e.functionType},exports.isGrid=xe,exports.isLitsError=function(e){return e instanceof n},exports.isLitsFunction=b,exports.isMatrix=ke,exports.isNativeJsFunction=k,exports.isUserDefinedFunction=S,exports.isVector=be,exports.normalExpressionKeys=It,exports.specialExpressionKeys=At;
1
+ "use strict";function e(e){if(!e.position||!e.code)return"";const t=e.position.column-1,n=e.code.length-t-1;return`${" ".repeat(Math.max(t,0))}^${" ".repeat(Math.max(n,0))}`}class t extends Error{params;constructor(e){super(`recur, params: ${e}`),Object.setPrototypeOf(this,t.prototype),this.name="RecurSignal",this.params=e}}class n extends Error{sourceCodeInfo;shortMessage;constructor(t,r){const o=t instanceof Error?t.message:`${t}`;super(function(t,n){if(!n)return t;const r=`${n.position.line}:${n.position.column}`;return`${t}${n.filePath?`\n${n.filePath}:${r}`:`\nLocation ${r}`}\n${n.code}\n${e(n)}`}(o,r)),this.shortMessage=o,this.sourceCodeInfo=r,Object.setPrototypeOf(this,n.prototype),this.name="LitsError"}getCodeMarker(){return this.sourceCodeInfo&&e(this.sourceCodeInfo)}}class r extends n{userMessage;constructor(e,t){super(e,t),this.userMessage=e,Object.setPrototypeOf(this,r.prototype),this.name="UserDefinedError"}}class o extends n{symbol;constructor(e,t){super(`Undefined symbol '${e}'.`,t),this.symbol=e,Object.setPrototypeOf(this,o.prototype),this.name="UndefinedSymbolError"}}const i={Number:1,String:2,NormalExpression:3,SpecialExpression:4,UserDefinedSymbol:5,NormalBuiltinSymbol:6,SpecialBuiltinSymbol:7,ReservedSymbol:8,Binding:9,Spread:10},s=new Set(Object.values(i));function a(e){return Object.keys(i).find(t=>i[t]===e)}const u=new Set(["UserDefined","Partial","Comp","Constantly","Juxt","Complement","EveryPred","SomePred","Fnull","Builtin","SpecialBuiltin","NativeJsFunction","Module"]);const c="^^fn^^",l="^^re^^";function f(e){return null!==e&&"object"==typeof e&&(c in e&&"functionType"in e&&function(e){return"string"==typeof e&&u.has(e)}(e.functionType))}function d(e){return!(!Array.isArray(e)||e.length<2)&&function(e){return"number"==typeof e&&s.has(e)}(e[0])}function h(e){return f(e)?`<function ${e.name||"λ"}>`:d(e)?`${a(e[0])}-node`:null===e?"null":"object"==typeof e&&e instanceof RegExp?`${e}`:"object"==typeof e&&e instanceof Error?e.toString():JSON.stringify(e)}function p(e,t){return e?.sourceCodeInfo??t}function y(e,t,r){return new n(`Expected ${e}, got ${h(t)}.`,p(t,r))}function g(e,t){return m(e,t),e}function m(e,t){if(!function(e){return void 0!==e}(e))throw new n("Unexpected undefined",p(e,t))}function v(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function b(e){return null!==e&&"object"==typeof e&&!!e[c]}function w(e,t){if(!b(e))throw y("LitsFunction",e,t)}function x(e){return b(e)&&"UserDefined"===e.functionType}function S(e,t){if(!x(e))throw y("NativeJsFunction",e,t)}function E(e){return b(e)&&"NativeJsFunction"===e.functionType}function k(e,t){if(!E(e))throw y("NativeJsFunction",e,t)}function N(e,t={}){return"number"==typeof e&&(!Number.isNaN(e)&&(!(t.integer&&!Number.isInteger(e))&&(!(t.finite&&!Number.isFinite(e))&&((!t.zero||0===e)&&((!t.nonZero||0!==e)&&(!(t.positive&&e<=0)&&(!(t.negative&&e>=0)&&(!(t.nonPositive&&e>0)&&(!(t.nonNegative&&e<0)&&(!("number"==typeof t.gt&&e<=t.gt)&&(!("number"==typeof t.gte&&e<t.gte)&&(!("number"==typeof t.lt&&e>=t.lt)&&!("number"==typeof t.lte&&e>t.lte)))))))))))))}function $(e,t,r={}){if(!N(e,r))throw new n(`Expected ${function(e){if(e.zero)return"zero";const t=function(e){return e.positive?"positive":e.negative?"negative":e.nonNegative?"non negative":e.nonPositive?"non positive":e.nonZero?"non zero":""}(e),n=e.integer?"integer":"number",r=e.finite?"finite":"",o=function(e){return"number"!=typeof e.gt&&"number"!=typeof e.gte||"number"!=typeof e.lt&&"number"!=typeof e.lte?"number"==typeof e.gt||"number"==typeof e.gte?"number"==typeof e.gt?`n > ${e.gt}`:`n >= ${e.gte}`:"number"==typeof e.lt||"number"==typeof e.lte?"number"==typeof e.lt?`n < ${e.lt}`:`n <= ${e.lte}`:"":`${"number"==typeof e.gt?`${e.gt} < n `:`${e.gte} <= n `}${"number"==typeof e.lt?`< ${e.lt}`:`<= ${e.lte}`}`}(e);return[t,r,n,o].filter(e=>!!e).join(" ")}(r)}, got ${h(e)}.`,p(e,t))}function P(e){return void 0!==e}function A(e,t){return I(e,t),e}function I(e,t){if(!P(e))throw y("not undefined",e,t)}function j(e){return Array.isArray(e)||"string"==typeof e}function C(e,t){if(!j(e))throw y("string or array",e,t)}function O(e){return!(null===e||"object"!=typeof e||Array.isArray(e)||e instanceof RegExp||b(e)||_(e))}function U(e,t){if(!O(e))throw y("object",e,t)}function F(e){return j(e)||O(e)}function M(e,t){return T(e,t),e}function T(e,t){if(!F(e))throw y("string, array or object",e,t)}function _(e){return null!==e&&"object"==typeof e&&!!e[l]}function B(e,t){if(!function(e){return _(e)||"string"==typeof e}(e))throw y("string or RegularExpression",e,t)}function R(e,t){return D(e,t),e}function D(e,t){if(!function(e){return"number"==typeof e||!!F(e)||!!b(e)}(e))throw y("FunctionLike",e,t)}function z(e,t){const{min:n}=e;return!("number"==typeof n&&t<n)}function L(e,t,r){const{min:o,max:i}=e;if("number"==typeof o&&t<o)throw new n(`Wrong number of arguments, expected at least ${o}, got ${h(t)}.`,r);if("number"==typeof i&&t>i)throw new n(`Wrong number of arguments, expected at most ${i}, got ${h(t)}.`,r)}function V(e){return{min:e,max:e}}const J={"<<":{evaluate:([e,t],n)=>($(e,n,{integer:!0}),$(t,n,{integer:!0,nonNegative:!0}),e<<t),arity:V(2)},">>":{evaluate:([e,t],n)=>($(e,n,{integer:!0}),$(t,n,{integer:!0,nonNegative:!0}),e>>t),arity:V(2)},">>>":{evaluate:([e,t],n)=>($(e,n,{integer:!0}),$(t,n,{integer:!0,nonNegative:!0}),e>>>t),arity:V(2)},"&":{evaluate:([e,...t],n)=>($(e,n,{integer:!0}),t.reduce((e,t)=>($(t,n,{integer:!0}),e&t),e)),arity:{min:2}},"|":{evaluate:([e,...t],n)=>($(e,n,{integer:!0}),t.reduce((e,t)=>($(t,n,{integer:!0}),e|t),e)),arity:{min:2}},xor:{evaluate:([e,...t],n)=>($(e,n,{integer:!0}),t.reduce((e,t)=>($(t,n,{integer:!0}),e^t),e)),arity:{min:2}}};function W(e,t={}){return"string"==typeof e&&((!t.nonEmpty||0!==e.length)&&(!t.char||1===e.length))}function q(e,t,n={}){if(!W(e,n))throw y(""+(n.nonEmpty?"non empty string":n.char?"character":"string"),e,t)}function Y(e,t,n={}){return q(e,t,n),e}function G(e){return"string"==typeof e||"number"==typeof e}function K(e,t){return X(e,t),e}function X(e,t){if(!G(e))throw y("string or number",e,t)}function Z(e,t){return!!F(e)&&("string"==typeof e||Array.isArray(e)?!!N(t,{integer:!0})&&(t>=0&&t<e.length):!!Object.getOwnPropertyDescriptor(e,t))}function H(e,t,r){if(X(e,r),X(t,r),"string"==typeof e&&"string"==typeof t)return e<t?-1:e>t?1:0;if("number"==typeof e&&"number"==typeof t)return Math.sign(e-t);throw new n(`Cannot compare values of different types: ${typeof e} and ${typeof t}`,r)}function Q(e,t,n){if(e===t)return!0;if("number"==typeof e&&"number"==typeof t)return function(e,t,n=re){if(e===t)return!0;const r=Math.abs(e-t);if(0===e||0===t||r<n)return r<n;const o=Math.abs(e),i=Math.abs(t);return r/(o+i)<n}(e,t);if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r+=1)if(!Q(A(e[r],n),A(t[r],n),n))return!1;return!0}if(_(e)&&_(t))return e.s===t.s&&e.f===t.f;if(v(e)&&v(t)){const r=Object.keys(e),o=Object.keys(t);if(r.length!==o.length)return!1;for(let o=0;o<r.length;o+=1){const i=Y(r[o],n);if(!Q(e[i],t[i],n))return!1}return!0}return!1}function ee(e){return e??null}function te(...e){const t=new Set;for(const n of e)n.forEach(e=>t.add(e));return t}function ne(e,t){t.forEach(t=>e.add(t))}const re=1e-10;function oe(e,t=0){const n=e.split("\n");for(;n[0]?.match(/^\s*$/);)n.shift();for(;n[n.length-1]?.match(/^\s*$/);)n.pop();const r=n.reduce((e,t)=>{if(t.match(/^\s*$/))return e;const n=t.match(/^\s*/)[0].length;return Math.min(e,n)},1/0);return n.map(e=>" ".repeat(t)+e.slice(r)).join("\n").trimEnd()}function ie(e,t){if(!Array.isArray(e))throw y("array",e,t)}function se(e,t){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}(e))throw y("array of strings",e,t)}function ae(e,t){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e&&1===e.length)}(e))throw y("array of strings",e,t)}const ue={filter:{evaluate:([e,t],n,r,{executeFunction:o})=>{if(T(e,n),D(t,n),Array.isArray(e)){return e.filter(e=>o(t,[e],r,n))}return W(e)?e.split("").filter(e=>o(t,[e],r,n)).join(""):Object.entries(e).filter(([,e])=>o(t,[e],r,n)).reduce((e,[t,n])=>(e[t]=n,e),{})},arity:V(2)},map:{evaluate:(e,t,r,{executeFunction:o})=>{const i=R(e.at(-1),t);if(O(e[0]))return function({colls:e,contextStack:t,executeFunction:r,fn:o,sourceCodeInfo:i}){U(e[0],i);const s=Object.keys(e[0]),a={};return e.forEach(e=>{U(e,i);const t=Object.keys(e);if(t.length!==s.length)throw new n(`All objects must have the same keys. Expected: ${s.join(", ")}. Found: ${t.join(", ")}`,i);if(!t.every(e=>s.includes(e)))throw new n(`All objects must have the same keys. Expected: ${s.join(", ")}. Found: ${t.join(", ")}`,i);Object.entries(e).forEach(([e,t])=>{a[e]||(a[e]=[]),a[e].push(t)})}),s.reduce((e,n)=>(e[n]=r(o,a[n],t,i),e),{})}({colls:e.slice(0,-1),fn:i,sourceCodeInfo:t,contextStack:r,executeFunction:o});const s=e.slice(0,-1);C(s[0],t);const a="string"==typeof s[0];let u=s[0].length;s.slice(1).forEach(e=>{a?q(e,t):ie(e,t),u=Math.min(u,e.length)});const c=[];for(let e=0;e<u;e++)c.push(s.map(t=>t[e]));const l=c.map(e=>o(i,e,r,t));return a?(l.forEach(e=>q(e,t)),l.join("")):l},arity:{min:2}},reduce:{evaluate:([e,t,n],r,o,{executeFunction:i})=>(T(e,r),D(t,r),I(n,r),"string"==typeof e?(q(n,r),0===e.length?n:e.split("").reduce((e,n)=>i(t,[e,n],o,r),n)):Array.isArray(e)?0===e.length?n:e.reduce((e,n)=>i(t,[e,n],o,r),n):0===Object.keys(e).length?n:Object.entries(e).reduce((e,[,n])=>i(t,[e,n],o,r),n)),arity:V(3)},get:{evaluate:(e,t)=>{const[n,r]=e,o=ee(e[2]);if(X(r,t),null===n)return o;T(n,t);const i=function(e,t){if(O(e)){if("string"==typeof t&&Z(e,t))return ee(e[t])}else if(N(t,{nonNegative:!0,integer:!0})&&t>=0&&t<e.length)return ee(e[t])}(n,r);return void 0===i?o:i},arity:{min:2,max:3}},count:{evaluate:([e],t)=>null===e?0:"string"==typeof e?e.length:(T(e,t),Array.isArray(e)?e.length:Object.keys(e).length),arity:V(1)},"contains?":{evaluate:([e,t],n)=>null!==e&&(T(e,n),W(e)?(q(t,n),e.includes(t)):j(e)?(I(t,n),!!e.find(e=>Q(A(e),t,n))):(q(t,n),t in e)),arity:V(2)},assoc:{evaluate:([e,t,n],r)=>(T(e,r),X(t,r),I(n,r),function(e,t,n,r){if(T(e,r),X(t,r),Array.isArray(e)||"string"==typeof e){if($(t,r,{integer:!0}),$(t,r,{gte:0}),$(t,r,{lte:e.length}),"string"==typeof e)return q(n,r,{char:!0}),`${e.slice(0,t)}${n}${e.slice(t+1)}`;const o=[...e];return o[t]=n,o}q(t,r);const o={...e};return o[t]=n,o}(e,t,n,r)),arity:V(3)},"++":{evaluate:(e,t)=>(N(e[0])||T(e[0],t),Array.isArray(e[0])?e.reduce((e,n)=>(ie(n,t),e.concat(n)),[]):G(e[0])?e.reduce((e,n)=>(X(n,t),`${e}${n}`),""):e.reduce((e,n)=>(U(n,t),Object.assign(e,n)),{})),arity:{min:1}}},ce={range:{evaluate:(e,t)=>{const[n,r,o]=e;let i,s,a;$(n,t,{finite:!0}),1===e.length?(i=0,s=n,a=s>=0?1:-1):2===e.length?($(r,t,{finite:!0}),i=n,s=r,a=s>=i?1:-1):($(r,t,{finite:!0}),$(o,t,{finite:!0}),i=n,s=r,a=o,$(a,t,s>i?{positive:!0}:s<i?{negative:!0}:{nonZero:!0}));const u=[];for(let e=i;a<0?e>s:e<s;e+=a)u.push(e);return u},arity:{min:1,max:3}},repeat:{evaluate:([e,t],n)=>{$(t,n,{integer:!0,nonNegative:!0});const r=[];for(let n=0;n<t;n+=1)r.push(e);return r},arity:V(2)},flatten:{evaluate:([e,t],n)=>{ie(e,n);const r=void 0===t||t===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:function(e,t,n={}){return $(e,t,n),e}(t,n,{integer:!0,nonNegative:!0});return e.flat(r)},arity:{min:1,max:2}},mapcat:{evaluate:([e,t],n,r,{executeFunction:o})=>(ie(e,n),D(t,n),e.map(e=>o(t,[e],r,n)).flat(1)),arity:V(2)},"moving-fn":{evaluate:([e,t,n],r,o,{executeFunction:i})=>{ie(e,r),$(t,r,{integer:!0,lte:e.length}),D(n,r);const s=[];for(let a=0;a<=e.length-t;a++){const u=i(n,[e.slice(a,a+t)],o,r);s.push(u)}return s},arity:V(3)},"running-fn":{evaluate:([e,t],n,r,{executeFunction:o})=>{ie(e,n),D(t,n);const i=[];for(let s=0;s<e.length;s+=1){const a=e.slice(0,s+1);i.push(o(t,[a],r,n))}return i},arity:V(2)}},le={nth:{evaluate:(e,t)=>{const[n,r]=e,o=ee(e[2]);if($(r,t,{integer:!0}),null===n)return o;if(C(n,t),r>=0&&r<n.length){return ee(n[r])}return o},arity:{min:2,max:3}},first:{evaluate:([e],t)=>{if(null===e)return null;C(e,t);return ee(e[0])},arity:V(1)},last:{evaluate:([e],t)=>{if(null===e)return null;C(e,t);return ee(e.at(-1))},arity:V(1)},pop:{evaluate:([e],t)=>(C(e,t),"string"==typeof e?e.substring(0,e.length-1):e.slice(0,e.length-1)),arity:V(1)},"index-of":{evaluate:([e,t],n)=>{if(I(t,n),null===e)return null;if(C(e,n),"string"==typeof e){q(t,n);const r=e.indexOf(t);return-1!==r?r:null}{const r=e.findIndex(e=>Q(A(e,n),t),n);return-1!==r?r:null}},arity:V(2)},push:{evaluate:([e,...t],n)=>(C(e,n),"string"==typeof e?(ae(t,n),[e,...t].join("")):[...e,...t]),arity:{min:2}},rest:{evaluate:([e],t)=>(C(e,t),Array.isArray(e)?e.length<=1?[]:e.slice(1):e.substring(1)),arity:V(1)},next:{evaluate:([e],t)=>(C(e,t),Array.isArray(e)?e.length<=1?null:e.slice(1):e.length<=1?null:e.substring(1)),arity:V(1)},reverse:{evaluate:([e],t)=>null===e?null:(C(e,t),Array.isArray(e)?[...e].reverse():e.split("").reverse().join("")),arity:V(1)},second:{evaluate:([e],t)=>null===e?null:(C(e,t),ee(e[1])),arity:V(1)},slice:{evaluate:(e,t)=>{const[n,r,o]=e;return C(n,t),$(r,t,{integer:!0}),2===e.length?(Array.isArray(n),n.slice(r)):($(o,t,{integer:!0}),Array.isArray(n),n.slice(r,o))},arity:{min:2,max:3}},some:{evaluate:([e,t],n,r,{executeFunction:o})=>(D(t,n),null===e?null:(C(e,n),0===e.length?null:"string"==typeof e?e.split("").find(e=>o(t,[e],r,n))??null:ee(e.find(e=>o(t,[e],r,n))))),arity:V(2)},sort:{evaluate:(e,t,n,{executeFunction:r})=>{const[o]=e,i=1===e.length,s=i?null:e[1];if(C(o,t),"string"==typeof o){const e=o.split("");return i?e.sort((e,n)=>H(e,n,t)):(D(s,t),e.sort((e,o)=>{const i=r(s,[e,o],n,t);return $(i,t,{finite:!0}),i})),e.join("")}const a=[...o];return i?a.sort((e,n)=>(X(e,t),X(n,t),H(e,n,t))):a.sort((e,o)=>{D(s,t);const i=r(s,[e,o],n,t);return $(i,t,{finite:!0}),i}),a},arity:{min:1,max:2}}},fe=new WeakSet,de=new WeakSet,he=new WeakSet,pe=new WeakSet,ye=new WeakSet,ge=new WeakSet,me=new WeakSet;function ve(e){return Array.isArray(e)?(fe.has(e)||(be(e),Ee(e)||Se(e)),e):e}function be(e){return!!Array.isArray(e)&&(!!de.has(e)||!he.has(e)&&(e.every(e=>N(e))?(fe.add(e),de.add(e),!0):(he.add(e),!1)))}function we(e,t){if(!be(e))throw new n(`Expected a vector, but got ${e}`,t)}function xe(e,t){if(we(e,t),0===e.length)throw new n(`Expected a non empty vector, but got ${e}`,t)}function Se(e){if(!Array.isArray(e))return!1;if(ge.has(e))return!0;if(me.has(e))return!1;if(0===e.length)return me.add(e),!1;if(!Array.isArray(e[0]))return me.add(e),!1;const t=e[0].length;for(const n of e.slice(1)){if(!Array.isArray(n))return me.add(e),!1;if(n.length!==t)return me.add(e),!1}return fe.add(e),ge.add(e),!0}function Ee(e){if(!Array.isArray(e))return!1;if(pe.has(e))return!0;if(ye.has(e))return!1;if(0===e.length)return ye.add(e),!1;if(!Array.isArray(e[0])||0===e[0].length)return ye.add(e),!1;const t=e[0].length;for(const n of e)if(!Array.isArray(n)||n.length!==t||n.some(e=>!N(e)))return ye.add(e),!1;return fe.add(e),ge.add(e),pe.add(e),!0}function ke(e,t){let r=!1,o=!1;for(const i of e)if(be(i))r=!0;else if(Ee(i))o=!0;else if(!N(i))throw new n("Invalid parameter type: "+typeof i,t);if(o){if(r)throw new n("Cannot mix vector and matrix types",t);let o=null,i=null;for(const r of e)if(Ee(r))if(null===o)o=r.length,i=r[0].length;else if(r.length!==o||r[0].length!==i)throw new n("Matrix dimensions do not match",t);return["matrix",e.map(e=>Ee(e)?e:Array.from({length:o},()=>Array.from({length:i},()=>e)))]}if(r){let r=null;for(const o of e)if(be(o))if(null===r)r=o.length;else if(o.length!==r)throw new n("Vector lengths do not match",t);return["vector",e.map(e=>be(e)?e:Array.from({length:r},()=>e))]}return["number",e]}function Ne(e){return(t,n)=>{const[r,o]=ke(t,n);return"number"===r?e(o[0]):"vector"===r?o[0].map(t=>e(t)):o[0].map(t=>t.map(t=>e(t)))}}function $e(e){return(t,n)=>{const[r,o]=ke(t,n);return"number"===r?e(o[0],o[1]):"vector"===r?o[0].map((t,n)=>e(t,o[1][n])):o[0].map((t,n)=>t.map((t,r)=>e(t,o[1][n][r])))}}function Pe(e,t){return(n,r)=>{if(0===n.length)return e;const[o,i]=ke(n,r);if("number"===o)return i.reduce((e,n)=>t(e,n),e);if("vector"===o){const[e,...n]=i;return n.reduce((e,n)=>e.map((e,r)=>t(e,n[r])),e)}{const[e,...n]=i;return n.reduce((e,n)=>e.map((e,r)=>e.map((e,o)=>t(e,n[r][o]))),e)}}}const Ae={inc:{evaluate:Ne(e=>e+1),arity:V(1)},dec:{evaluate:Ne(e=>e-1),arity:V(1)},"+":{evaluate:Pe(0,(e,t)=>e+t),arity:{}},"*":{evaluate:Pe(1,(e,t)=>e*t),arity:{}},"/":{evaluate:(e,t)=>{if(0===e.length)return 1;const[n,r]=ke(e,t);if("number"===n){const[e,...t]=r;return 0===t.length?1/e:t.reduce((e,t)=>e/t,e)}if("vector"===n){const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e/t[n]),e)}{const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e.map((e,r)=>e/t[n][r])),e)}},arity:{}},"-":{evaluate:(e,t)=>{if(0===e.length)return 0;const[n,r]=ke(e,t);if("number"===n){const[e,...t]=r;return 0===t.length?-e:t.reduce((e,t)=>e-t,e)}if("vector"===n){const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e-t[n]),e)}{const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e.map((e,r)=>e-t[n][r])),e)}},arity:{}},quot:{evaluate:$e((e,t)=>Math.trunc(e/t)),arity:V(2)},mod:{evaluate:$e((e,t)=>e-t*Math.floor(e/t)),arity:V(2)},"%":{evaluate:$e((e,t)=>e%t),arity:V(2)},sqrt:{evaluate:Ne(e=>Math.sqrt(e)),arity:V(1)},cbrt:{evaluate:Ne(e=>Math.cbrt(e)),arity:V(1)},"^":{evaluate:$e((e,t)=>e**t),arity:V(2)},round:{evaluate:([e,t],n)=>{const[r,o]=ke([e],n);if("number"===r){if(void 0===t||0===t)return Math.round(o[0]);{$(t,n,{integer:!0,positive:!0});const e=10**t;return Math.round(o[0]*e)/e}}if("vector"===r){const e=o[0];if(void 0===t||0===t)return e.map(e=>Math.round(e));{$(t,n,{integer:!0,positive:!0});const r=10**t;return e.map(e=>Math.round(e*r)/r)}}{const e=o[0];if(void 0===t||0===t)return e.map(e=>e.map(e=>Math.round(e)));{$(t,n,{integer:!0,positive:!0});const r=10**t;return e.map(e=>e.map(e=>Math.round(e*r)/r))}}},arity:{min:1,max:2}},trunc:{evaluate:Ne(e=>Math.trunc(e)),arity:V(1)},floor:{evaluate:Ne(e=>Math.floor(e)),arity:V(1)},ceil:{evaluate:Ne(e=>Math.ceil(e)),arity:V(1)},min:{evaluate:(e,t)=>{if(1===e.length&&be(e[0])){const n=e[0];return xe(n,t),n.reduce((e,t)=>Math.min(e,t),1/0)}const[n,...r]=e;return $(n,t),r.reduce((e,n)=>($(n,t),Math.min(e,n)),n)},arity:{min:1}},max:{evaluate:(e,t)=>{if(1===e.length&&be(e[0])){const n=e[0];return xe(n,t),n.reduce((e,t)=>Math.max(e,t),-1/0)}const[n,...r]=e;return $(n,t),r.reduce((e,n)=>($(n,t),Math.max(e,n)),n)},arity:{min:1}},abs:{evaluate:Ne(e=>Math.abs(e)),arity:V(1)},sign:{evaluate:Ne(e=>Math.sign(e)),arity:V(1)}};function Ie([e,...t],n){const r=A(e,n);for(const e of t)if(!Q(r,A(e,n),n))return!1;return!0}const je={"==":{evaluate:(e,t)=>Ie(e,t),arity:{min:1}},"≠":{evaluate:(e,t)=>!Ie(e,t),arity:{min:1}},"identical?":{evaluate:e=>function([e,...t]){for(const n of t)if(n!==e)return!1;return!0}(e),arity:{min:1}},">":{evaluate:([e,...t],n)=>{let r=K(e);for(const e of t){if(H(r,K(e),n)<=0)return!1;r=K(e)}return!0},arity:{min:1}},"<":{evaluate:([e,...t],n)=>{let r=K(e);for(const e of t){if(H(r,K(e),n)>=0)return!1;r=K(e)}return!0},arity:{min:1}},">=":{evaluate:([e,...t],n)=>{let r=K(e);for(const e of t){if(H(r,K(e),n)<0)return!1;r=K(e)}return!0},arity:{min:1}},"<=":{evaluate:([e,...t],n)=>{let r=K(e);for(const e of t){if(H(r,K(e),n)>0)return!1;r=K(e)}return!0},arity:{min:1}},"!":{evaluate:([e])=>!e,arity:V(1)},"epoch->iso-date":{evaluate:([e],t)=>($(e,t),new Date(e).toISOString()),arity:V(1)},"iso-date->epoch":{evaluate:([e],t)=>{q(e,t);const n=new Date(e).valueOf();return $(n,t,{finite:!0}),n},arity:V(1)},"write!":{evaluate:(e,t)=>(console.log(...e),e.length>0?A(e[e.length-1],t):null),arity:{}},boolean:{evaluate:([e])=>!!e,arity:V(1)},compare:{evaluate:([e,t],n)=>(X(e,n),X(t,n),H(e,t,n)),arity:V(2)},"json-parse":{evaluate:([e],t)=>(q(e,t),JSON.parse(e)),arity:V(1)},"json-stringify":{evaluate:([e,t],n)=>(I(e,n),void 0===t?JSON.stringify(e):($(t,n),JSON.stringify(e,null,t))),arity:{min:1,max:2}},import:{evaluate:([e],t,r)=>{q(e,t);const o=e.indexOf(".");if(-1!==o){const i=e.substring(0,o),s=e.substring(o+1),a=r.getModule(i);if(!a)throw new n(`Unknown module: '${i}'`,t);const u=a.functions[s];if(!u)throw new n(`Function '${s}' not found in module '${i}'`,t);return{[c]:!0,sourceCodeInfo:t,functionType:"Module",moduleName:i,functionName:s,arity:u.arity}}const i=e,s=r.getModule(i);if(!s)throw new n(`Unknown module: '${i}'`,t);const a={};for(const[e,n]of Object.entries(s.functions))a[e]={[c]:!0,sourceCodeInfo:t,functionType:"Module",moduleName:i,functionName:e,arity:n.arity};return a},arity:V(1)}},Ce={keys:{evaluate:([e],t)=>(U(e,t),Object.keys(e)),arity:V(1)},vals:{evaluate:([e],t)=>(U(e,t),Object.values(e)),arity:V(1)},entries:{evaluate:([e],t)=>(U(e,t),Object.entries(e)),arity:V(1)},find:{evaluate:([e,t],n)=>(U(e,n),q(t,n),Z(e,t)?[t,e[t]]:null),arity:V(2)},dissoc:{evaluate:([e,t],n)=>{U(e,n),q(t,n);const r={...e};return delete r[t],r},arity:V(2)},merge:{evaluate:(e,t)=>{if(0===e.length)return null;const[n,...r]=e;return U(n,t),r.reduce((e,n)=>(U(n,t),{...e,...n}),{...n})},arity:{min:0}},"merge-with":{evaluate:(e,t,n,{executeFunction:r})=>{const o=e[0],i=e.at(-1),s=e.slice(1,-1);return U(o,t),D(i,t),s.reduce((e,o)=>(U(o,t),Object.entries(o).forEach(o=>{const s=Y(o[0],t),a=ee(o[1]);Z(e,s)?e[s]=r(i,[e[s],a],n,t):e[s]=a}),e),{...o})},arity:{min:2}},zipmap:{evaluate:([e,t],n)=>{se(e,n),ie(t,n);const r=Math.min(e.length,t.length),o={};for(let i=0;i<r;i+=1){o[Y(e[i],n)]=ee(t[i])}return o},arity:V(2)},"select-keys":{evaluate:([e,t],n)=>(se(t,n),U(e,n),t.reduce((t,n)=>(Z(e,n)&&(t[n]=ee(e[n])),t),{})),arity:V(2)}},Oe={"function?":{evaluate:([e])=>b(e),arity:V(1)},"string?":{evaluate:([e])=>"string"==typeof e,arity:V(1)},"number?":{evaluate:([e])=>"number"==typeof e,arity:V(1)},"integer?":{evaluate:([e])=>"number"==typeof e&&N(e,{integer:!0}),arity:V(1)},"boolean?":{evaluate:([e])=>"boolean"==typeof e,arity:V(1)},"null?":{evaluate:([e])=>null==e,arity:V(1)},"zero?":{evaluate:([e],t)=>($(e,t,{finite:!0}),Math.abs(e)<re),arity:V(1)},"pos?":{evaluate:([e],t)=>($(e,t,{finite:!0}),e>0),arity:V(1)},"neg?":{evaluate:([e],t)=>($(e,t,{finite:!0}),e<0),arity:V(1)},"even?":{evaluate:([e],t)=>($(e,t,{finite:!0}),e%2==0),arity:V(1)},"odd?":{evaluate:([e],t)=>($(e,t,{finite:!0}),N(e,{integer:!0})&&e%2!=0),arity:V(1)},"array?":{evaluate:([e])=>Array.isArray(e),arity:V(1)},"collection?":{evaluate:([e])=>F(e),arity:V(1)},"sequence?":{evaluate:([e])=>j(e),arity:V(1)},"object?":{evaluate:([e])=>O(e),arity:V(1)},"regexp?":{evaluate:([e])=>_(e),arity:V(1)},"finite?":{evaluate:([e],t)=>($(e,t),Number.isFinite(e)),arity:V(1)},"positive-infinity?":{evaluate:([e],t)=>($(e,t),e===Number.POSITIVE_INFINITY),arity:V(1)},"negative-infinity?":{evaluate:([e],t)=>($(e,t),e===Number.NEGATIVE_INFINITY),arity:V(1)},"true?":{evaluate:([e])=>!0===e,arity:V(1)},"false?":{evaluate:([e])=>!1===e,arity:V(1)},"empty?":{evaluate:([e],t)=>null===e||(T(e,t),"string"==typeof e||Array.isArray(e)?0===e.length:0===Object.keys(e).length),arity:V(1)},"not-empty?":{evaluate:([e],t)=>null!==e&&(T(e,t),"string"==typeof e||Array.isArray(e)?e.length>0:Object.keys(e).length>0),arity:V(1)},"vector?":{evaluate:([e])=>be(e),arity:V(1)},"matrix?":{evaluate:([e])=>Ee(e),arity:V(1)},"grid?":{evaluate:([e])=>Se(e),arity:V(1)}},Ue={regexp:{evaluate:([e,t],r)=>{q(e,r);const o=e||"(?:)",i="string"==typeof t?t:"";try{new RegExp(o,i)}catch(e){throw new n(`Invalid regular expression: ${o} ${i}`,r)}return{[l]:!0,sourceCodeInfo:r,s:o,f:i}},arity:{min:1,max:2}},match:{evaluate:([e,t],n)=>{if(function(e,t){if(!_(e))throw y("RegularExpression",e,t)}(t,n),!W(e))return null;const r=new RegExp(t.s,t.f).exec(e);return r?[...r]:null},arity:V(2)},replace:{evaluate:([e,t,n],r)=>{q(e,r),B(t,r),q(n,r);const o=_(t)?new RegExp(t.s,`${t.f}`):t;return e.replace(o,n)},arity:V(3)},"replace-all":{evaluate:([e,t,n],r)=>{q(e,r),B(t,r),q(n,r);const o=_(t)?new RegExp(t.s,`${t.f.includes("g")?t.f:`${t.f}g`}`):t;return e.replaceAll(o,n)},arity:V(3)}},Fe=/^\s*$/,Me={str:{evaluate:e=>e.reduce((e,t)=>e+(null==t?"":O(t)||Array.isArray(t)?JSON.stringify(t):`${t}`),""),arity:{}},number:{evaluate:([e],t)=>{q(e,t);const r=Number(e);if(Number.isNaN(r))throw new n(`Could not convert '${e}' to a number.`,t);return r},arity:V(1)},"lower-case":{evaluate:([e],t)=>(q(e,t),e.toLowerCase()),arity:V(1)},"upper-case":{evaluate:([e],t)=>(q(e,t),e.toUpperCase()),arity:V(1)},trim:{evaluate:([e],t)=>(q(e,t),e.trim()),arity:V(1)},join:{evaluate:([e,t],n)=>(ie(e,n),e.forEach(e=>X(e,n)),q(t,n),e.join(t)),arity:V(2)},split:{evaluate:([e,t,n],r)=>{q(e,r),B(t,r),void 0!==n&&$(n,r,{integer:!0,nonNegative:!0});const o="string"==typeof t?t:new RegExp(t.s,t.f);return e.split(o,n)},arity:{min:2,max:3}},"blank?":{evaluate:([e],t)=>null===e||(q(e,t),Fe.test(e)),arity:V(1)}},Te={"|>":{evaluate:([e,t],n,r,{executeFunction:o})=>(D(t,n),o(t,[e],r,n)),arity:V(2)},apply:{evaluate:([e,...t],n,r,{executeFunction:o})=>{D(e,n);const i=t[t.length-1];ie(i,n);return o(e,[...t.slice(0,-1),...i],r,n)},arity:{min:2}},identity:{evaluate:([e])=>ee(e),arity:V(1)},comp:{evaluate:(e,t)=>{return e.forEach(e=>D(e,t)),{[c]:!0,sourceCodeInfo:t,functionType:"Comp",params:e,arity:e.length>0?(n=e.at(-1),"number"==typeof n||F(n)?V(1):n.arity):{min:1,max:1}};var n},arity:{}},constantly:{evaluate:([e],t)=>({[c]:!0,sourceCodeInfo:t,functionType:"Constantly",value:ee(e),arity:{}}),arity:V(1)}};function _e(e){return oe(`\n ${e.title}\n\n ${e.description.replace(/`(.+?)`/g,"$1").replace(/\$(\w+)/g,"$1").replace(/\*\*\*(.+)\*\*\*/g,"$1").replace(/\*\*(.+)\*\*/g,"$1")}\n\n Signature:\n ${function({title:e,variants:t,args:n,returns:r,_isOperator:o}){const i=t.map(t=>`${` ${e}(${t.argumentNames.map(e=>{let t="";return n[e].rest&&(t+="..."),t+=e,t}).join(", ")})`} -> ${Be(r)}`),s=o?["","Operator:",` a ${e} b -> ${Be(r)}`]:[];return[...i,...s]}(e).join("\n ")}\n\n Arguments:\n ${function(e){return Object.entries(e.args).map(([e,t])=>`${e}: ${Be(t)}`)}(e).join("\n ")}\n\n Examples:\n${e.examples.map(e=>oe(e,4)).join("\n\n")}`)}function Be(e){const t=e.type,n=(Array.isArray(t)?t:[t]).join(" | ");return e.array||e.rest?`Array<${n}>`:n}const Re={sum:{evaluate:([e],t)=>(we(e,t),e.reduce((e,t)=>e+t,0)),arity:V(1)},prod:{evaluate:([e],t)=>(we(e,t),e.reduce((e,t)=>e*t,1)),arity:V(1)},mean:{evaluate:([e],t)=>(xe(e,t),e.reduce((e,t)=>e+t,0)/e.length),arity:V(1)},median:{evaluate:([e],t)=>(xe(e,t),function(e){const t=[...e].sort((e,t)=>e-t),n=Math.floor(t.length/2);return t.length%2==0?(t[n-1]+t[n])/2:t[n]}(e)),arity:V(1)}},De={...J,...ue,...ce,...le,...Ae,...function(e){return{doc:{evaluate:([t],n)=>{if(m(e),D(t,n),!b(t))return"";if("Builtin"===t.functionType){const n=e[t.name];return n?_e(n):""}return"UserDefined"===t.functionType||"NativeJsFunction"===t.functionType?t.docString:""},arity:V(1)},arity:{evaluate:([e],t)=>(D(e,t),b(e)?e.arity:V(1)),arity:V(1)}}}({}),...je,...Ce,...Oe,...Ue,...Me,...Te,...Re};Object.entries(De).forEach(([e,t])=>{t.name=e});const ze={...De},Le={},Ve=[];Object.entries(ze).forEach(([e,t],n)=>{Le[e]=n,Ve.push(t)});const Je={arity:{},evaluate:(e,t,{evaluateNode:n})=>{let r=!0;for(const o of e[1][1])if(r=n(o,t),!r)break;return r},evaluateAsNormalExpression:(e,t)=>{let n=!0;for(const r of e)if(n=A(r,t),!n)break;return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)};function We(e){const t=e[0];return i.UserDefinedSymbol===t||i.NormalBuiltinSymbol===t||i.SpecialBuiltinSymbol===t}function qe(e){return i.UserDefinedSymbol===e[0]}function Ye(e,t){return function(e,t){if(!qe(e))throw y("UserDefinedSymbolNode",e,t)}(e,t),e}function Ge(e){return i.NormalBuiltinSymbol===e[0]}function Ke(e){return i.SpecialBuiltinSymbol===e[0]}function Xe(e){return!!function(e){return e[0]===i.NormalExpression}(e)&&We(e[1][0])}function Ze(e){return e[0]===i.Spread}const He={arity:V(1),evaluate:(e,t)=>{const n=e[1][1];if(function(e,t){if(!We(e))throw y("SymbolNode",e,t)}(n),!qe(n))return!0;return null!==t.lookUp(n)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n([e[1][1]],t,r,o)};const Qe=11,et=12,tt=13,nt=14;function rt(e,t){if(e[0]===tt)Object.values(e[1][0]).forEach(e=>{e[1][1]&&t(e[1][1]),rt(e,t)});else if(e[0]===nt)for(let n=0;n<e[1][0].length;n+=1){const r=e[1][0][n]??null;null!==r&&(r[1][1]&&t(r[1][1]),rt(r,t))}}function ot(e,t,n){const r={};return it(e,t,n,e[2],r),r}function it(e,t,r,o,i){if(e[0]===tt){!function(e,t){if(!v(e))throw new n(`Expected UnknownRecord, got ${h(e)}.`,p(e,t))}(t,o);const s=new Set;let a;if(Object.entries(e[1][0]).forEach(([e,n])=>{if(n[0]===et)return void(a=n);s.add(e);const u=(void 0!==t[e]?t[e]:n[1][1]&&r(n[1][1]))??null;I(u,o),it(n,u,r,o,i)}),a){const e=Object.entries(t).filter(([e])=>!s.has(e)).reduce((e,[t,n])=>(e[t]=A(n),e),{});i[a[1][0]]=e}}else if(e[0]===nt){let n=null;ie(t,o);for(let s=0;s<e[1][0].length;s+=1){const a=e[1][0][s]??null;if(null===a)continue;if(a[0]===et){n=s;break}const u=(void 0!==t[s]?t[s]:a[1][1]&&r(a[1][1]))??null;I(u,o),it(a,u,r,o,i)}if(null!==n){const r=t.slice(n),o=e[1][0][n];i[o[1][0]]=r}}else e[0]===et?i[e[1][0]]=A(t):i[e[1][0][1]]=A(t)}function st(e){const t={};return at(e,t),t}function at(e,t){if(null!==e)if(e[0]===nt)for(const n of e[1][0])at(n,t);else if(e[0]===tt)for(const n of Object.values(e[1][0]))at(n,t);else if(e[0]===et){if(t[e[1][0]])throw new n(`Duplicate binding name: ${e[1][0]}`,e[2]);t[e[1][0]]=!0}else{if(t[e[1][0][1]])throw new n(`Duplicate binding name: ${e[1][0]}`,e[2]);t[e[1][0][1]]=!0}}const ut={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1],o=r[1][0],i=r[1][1],s=n(i,t),a=ot(o,s,e=>n(e,t));return t.exportValues(a,o[2]),s},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const i=e[1][1],s=i[1][0],a=i[1][1],u=n([a],t,r,o);return rt(s,e=>{ne(u,n([e],t,r,o))}),t.addValues(st(s),s[2]),u}},ct={arity:{},evaluate:(e,t,{builtin:n,getUndefinedSymbols:r,evaluateNode:o})=>{const i=e[1][1],s=e[1][2],a=function(e,t,n,r,o){const i={},s=e[0].reduce((e,t)=>(Object.keys(st(t)).forEach(t=>{e[t]={value:null}}),e),{}),a=r(e[1],t.new(s),n,o);a.forEach(e=>{const n=t.getValue(e);P(n)&&(i[e]={value:n})});const u=[e[0],e[1],i];return u}(i,t,n,r,o),u=a[0].filter(e=>e[0]!==et&&void 0===e[1][1]).length,l={min:u>0?u:void 0,max:a[0].some(e=>e[0]===et)?void 0:a[0].length};return{[c]:!0,sourceCodeInfo:e[2],functionType:"UserDefined",name:void 0,evaluatedfunction:a,arity:l,docString:s}},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>function(e,t,n,r,o){const i=new Set,s={self:{value:null}};e[0].forEach(e=>{Object.assign(s,st(e)),rt(e,e=>{ne(i,n([e],t,r,o))})});const a=t.create(s),u=n(e[1],a,r,o);return ne(i,u),i}(e[1][1],t,n,r,o)};const lt={arity:V(0),evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1],o=r[1][0],i=r[1][1],s=n(i,t),a=ot(o,s,e=>n(e,t));return t.addValues(a,o[2]),s},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const i=e[1][1],s=i[1][0],a=i[1][1],u=n([a],t,r,o);return rt(s,e=>{ne(u,n([e],t,r,o))}),t.addValues(st(s),s[2]),u}},ft={arity:{},evaluate:(e,r,{evaluateNode:o})=>{const i=e[1][1],s=i.reduce((e,t)=>{const n=o(t[1][1],r.create(e)),i=ot(t[1][0],n,e=>o(e,r));return Object.entries(i).forEach(([t,n])=>{e[t]={value:n}}),e},{}),a=r.create(s),u=e[1][2];for(;;){let c=null;try{c=o(u,a)}catch(a){if(a instanceof t){const t=a.params;if(t.length!==i.length)throw new n(`recur expected ${i.length} parameters, got ${h(t.length)}`,e[2]);i.forEach((e,n)=>{const i=ot(e[1][0],A(t[n]),e=>o(e,r));for(const[e,t]of Object.entries(i))s[e].value=t});continue}throw a}return c}},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const i=e[1][1],s=i.reduce((e,t)=>{const n=st(t[1][0]);return Object.keys(n).forEach(t=>{e[t]={value:!0}}),e},{});return te(n(i.map(e=>e[1][1]),t,r,o),n([e[1][2]],t.create(s),r,o))}};function dt(e,t,n,r){for(const o of e){const[e,i]=o[1],s=ot(e,r(i,n),e=>r(e,n));Object.entries(s).forEach(([e,n])=>{t[e]={value:n}})}}function ht(e,t,n,r){const o=t[2],[,i,s]=t[1],a=[],u=i.map(()=>0);let c=!1;for(;!c;){const t={},l=n.create(t);let f=!1;e:for(let e=0;e<i.length;e+=1){const[n,s,a,d]=i[e],[h,p]=n[1],y=M(r(p,l),o),m=j(y)?y:Object.entries(y);if(0===m.length){f=!0,c=!0;break}const v=g(u[e],o);if(v>=m.length){if(f=!0,0===e){c=!0;break}u[e]=0,u[e-1]=g(u[e-1],o)+1;break}const b=ot(h,A(m[v],o),e=>r(e,l));if(Object.entries(b).forEach(([e,n])=>{t[e]={value:n}}),s&&dt(s,t,l,r),a&&!r(a,l)){u[e]=g(u[e],o)+1,f=!0;break e}if(d&&!r(d,l)){u[e]=Number.POSITIVE_INFINITY,f=!0;break e}}if(!f){const t=r(s,l);e&&a.push(t),u.length>0&&(u[u.length-1]+=1)}}return e?a:null}function pt(e,t,n,r,o){const i=new Set,s={},[,a,u]=e[1];return a.forEach(e=>{const[a,u,c,l]=e,[f,d]=a[1];n([d],t.create(s),r,o).forEach(e=>i.add(e)),Object.assign(s,st(f)),u&&u.forEach(e=>{const[a,u]=e[1];n([u],t.create(s),r,o).forEach(e=>i.add(e)),Object.assign(s,st(a))}),c&&n([c],t.create(s),r,o).forEach(e=>i.add(e)),l&&n([l],t.create(s),r,o).forEach(e=>i.add(e))}),n([u],t.create(s),r,o).forEach(e=>i.add(e)),i}const yt={arity:V(1),evaluate:(e,t,n)=>ht(!0,e,t,n.evaluateNode),getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>pt(e,t,n,r,o)},gt={arity:V(1),evaluate:(e,t,n)=>(ht(!1,e,t,n.evaluateNode),null),getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>pt(e,t,n,r,o)},mt={arity:{},evaluate:(e,t,{evaluateNode:n})=>{let r=!1;for(const o of e[1][1])if(r=n(o,t),r)break;return r},evaluateAsNormalExpression:(e,t)=>{let n=!1;for(const r of e)if(n=A(r,t),n)break;return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},vt={arity:{min:1},evaluate:(e,t,{evaluateNode:n})=>{for(const r of e[1][1]){if(qe(r)&&null===t.lookUp(r))continue;const e=n(r,t);if(null!==e)return e}return null},evaluateAsNormalExpression:(e,t)=>{for(const n of e){const e=A(n,t);if(null!==e)return e}return null},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},bt={arity:{},evaluate:(e,n,{evaluateNode:r})=>{const o=e[1][1].map(e=>r(e,n));throw new t(o)},evaluateAsNormalExpression:e=>{throw new t(e)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},wt={arity:V(1),evaluate:(e,t,{evaluateNode:n})=>{const o=Y(n(e[1][1],t),e[2],{nonEmpty:!0});throw new r(o,e[2])},evaluateAsNormalExpression:(e,t)=>{const n=Y(e[0],t,{nonEmpty:!0});throw new r(n,void 0)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n([e[1][1]],t,r,o)},xt={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[,r,o,i]=e[1];try{return n(r,t)}catch(e){const r=o?{[o[1]]:{value:e}}:{};return n(i,t.create(r))}},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const[,i,s,a]=e[1],u=n([i],t,r,o),c=s?{[s[1]]:{value:!0}}:{};return te(u,n([a],t.create(c),r,o))}},St={arity:{},evaluate:(e,t,{evaluateNode:r})=>{const o=[];for(const i of e[1][1])if(Ze(i)){const e=r(i[1],t);if(!Array.isArray(e))throw new n("Spread value is not an array",i[2]);o.push(...e)}else o.push(r(i,t));return o},evaluateAsNormalExpression:(e,t)=>{const n=[];for(const r of e)n.push(A(r,t));return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},Et={arity:{},evaluate:(e,t,{evaluateNode:r})=>{const o={},i=e[1][1];for(let e=0;e<i.length;e+=2){const s=i[e];if(Ze(s)){const i=r(s[1],t);if(!v(i))throw new n("Spread value is not an object",s[2]);Object.assign(o,i),e-=1}else{const a=r(s,t),u=i[e+1];if(void 0===u)throw new n("Missing value for key",s[2]);const c=r(u,t);q(a,s[2]),o[a]=c}}return o},evaluateAsNormalExpression:(e,t)=>{const n={};for(let r=0;r<e.length;r+=2){const o=e[r],i=e[r+1];q(o,t),n[o]=i??null}return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},kt={"??":0,"&&":1,"||":2,array:3,cond:4,"0_def":5,"defined?":6,block:7,doseq:8,"0_lambda":9,for:10,if:11,let:12,loop:13,object:14,recur:15,switch:16,throw:17,try:18,unless:19},Nt=[vt,Je,mt,St,{arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1];for(const[e,o]of r){if(n(e,t))return n(o,t)}return null},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1].flat(),t,r,o)},ut,He,{arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=t.create({});let o=null;for(const t of e[1][1])o=n(t,r);return o},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t.create({}),r,o)},gt,ct,yt,{arity:{min:2,max:3},evaluate:(e,t,{evaluateNode:n})=>{const[r,o,i]=e[1][1];return n(r,t)?n(o,t):i?n(i,t):null},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1].filter(e=>!!e),t,r,o)},lt,ft,Et,bt,{arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[,r,o]=e[1],i=n(r,t);for(const[e,r]of o){if(n(e,t)===i)return n(r,t)}return null},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n([e[1][1],...e[1][2].flat()],t,r,o)},wt,xt,{arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[r,o,i]=e[1][1];return n(r,t)?i?n(i,t):null:n(o,t)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1].filter(e=>!!e),t,r,o)}],$t={normalExpressions:ze,specialExpressions:Nt,allNormalExpressions:Ve},Pt=Object.keys(ze),At=Object.keys(kt),It=(e,t,n,r)=>{const o=Array.isArray(e)?e:[[i.SpecialExpression,[kt.block,e.body]]],s=new Set;for(const e of o)jt(e,t,n,r)?.forEach(e=>s.add(e));return s};function jt(e,t,r,o){const s=e[0];switch(s){case i.UserDefinedSymbol:{const n=e;return null===t.lookUp(n)?new Set([n[1]]):null}case i.NormalBuiltinSymbol:case i.SpecialBuiltinSymbol:case i.String:case i.Number:case i.ReservedSymbol:case i.Binding:return null;case i.NormalExpression:{const n=e,i=new Set;if(Xe(n)){const[,[e]]=n;if(qe(e)){null===t.lookUp(e)&&i.add(e[1])}}else{const[,[e]]=n;jt(e,t,r,o)?.forEach(e=>i.add(e))}for(const e of n[1][1])jt(e,t,r,o)?.forEach(e=>i.add(e));return i}case i.SpecialExpression:{const n=e,i=n[1][0];return(0,r.specialExpressions[i].getUndefinedSymbols)(n,t,{getUndefinedSymbols:It,builtin:r,evaluateNode:o})}case i.Spread:return jt(e[1],t,r,o);default:throw new n(`Unhandled node type: ${s}`,e[2])}}const Ct=(1+Math.sqrt(5))/2,Ot={E:Math.E,"-E":-Math.E,"ε":Math.E,"-ε":-Math.E,PI:Math.PI,"-PI":-Math.PI,"π":Math.PI,"-π":-Math.PI,PHI:Ct,"-PHI":-Ct,"φ":Ct,"-φ":-Ct,POSITIVE_INFINITY:Number.POSITIVE_INFINITY,"∞":Number.POSITIVE_INFINITY,NEGATIVE_INFINITY:Number.NEGATIVE_INFINITY,"-∞":Number.NEGATIVE_INFINITY,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER,MIN_SAFE_INTEGER:Number.MIN_SAFE_INTEGER,MAX_VALUE:Number.MAX_VALUE,MIN_VALUE:Number.MIN_VALUE,NaN:Number.NaN},Ut={true:!0,false:!1,null:null,do:null,else:null,case:null,each:null,in:null,when:null,while:null,catch:null,function:null,export:null,as:null,then:null,end:null,_:null,...Ot};const Ft={NativeJsFunction:(e,t,r)=>{try{return ee(e.nativeFn.fn(...t))}catch(e){const t="string"==typeof e?e:v(e)&&"string"==typeof e.message?e.message:"<no message>";throw new n(`Native function threw: "${t}"`,r)}},UserDefined:(e,r,o,i,{evaluateNode:s})=>{for(;;){if(!z(e.arity,r.length))throw new n(`Expected ${e.arity} arguments, got ${r.length}.`,o);const a=e.evaluatedfunction,u=a[0],c=u.filter(e=>e[0]!==et).length,l=i.create(e.evaluatedfunction[2]),f={self:{value:e}},d=[];for(let e=0;e<r.length;e+=1)if(e<c){const t=ee(r[e]),n=ot(u[e],t,e=>s(e,l.create(f)));Object.entries(n).forEach(([e,t])=>{f[e]={value:t}})}else d.push(ee(r[e]));for(let e=r.length;e<c;e++){const t=u[e],n=ot(t,s(t[1][1],i.create(f)),e=>s(e,i.create(f)));Object.entries(n).forEach(([e,t])=>{f[e]={value:t}})}const h=u.find(e=>e[0]===et);if(void 0!==h){const e=ot(h,d,e=>s(e,i.create(f)));Object.entries(e).forEach(([e,t])=>{f[e]={value:t}})}try{let e=null;const t=l.create(f);for(const n of a[1])e=s(n,t);return e}catch(e){if(e instanceof t){r=e.params;continue}throw e}}},Partial:(e,t,r,o,{executeFunction:i})=>{const s=[...e.params];if(t.length!==e.placeholders.length)throw new n(`(partial) expects ${e.placeholders.length} arguments, got ${t.length}.`,r);const a=[...t];for(const t of e.placeholders)s.splice(t,0,a.shift());return i(e.function,s,o,r)},Comp:(e,t,r,o,{executeFunction:i})=>{const{params:s}=e;if(0===s.length){if(1!==t.length)throw new n(`(comp) expects one argument, got ${h(t.length)}.`,r);return A(t[0],r)}return A(s.reduceRight((e,t)=>[i(R(t,r),e,o,r)],t)[0],r)},Constantly:e=>e.value,Juxt:(e,t,n,r,{executeFunction:o})=>e.params.map(e=>o(R(e,n),t,r,n)),Complement:(e,t,n,r,{executeFunction:o})=>!o(e.function,t,r,n),EveryPred:(e,t,n,r,{executeFunction:o})=>{for(const i of e.params)for(const e of t){if(!o(R(i,n),[e],r,n))return!1}return!0},SomePred:(e,t,n,r,{executeFunction:o})=>{for(const i of e.params)for(const e of t){if(o(R(i,n),[e],r,n))return!0}return!1},Fnull:(e,t,n,r,{executeFunction:o})=>{const i=t.map((t,n)=>null===t?ee(e.params[n]):t);return o(R(e.function,n),i,r,n)},Builtin:(e,t,n,r,{executeFunction:o})=>g(Ve[e.normalBuiltinSymbolType],n).evaluate(t,n,r,{executeFunction:o}),SpecialBuiltin:(e,t,r,o,{executeFunction:i})=>{const s=g(Nt[e.specialBuiltinSymbolType],r);if(s.evaluateAsNormalExpression)return s.evaluateAsNormalExpression(t,r,o,{executeFunction:i});throw new n(`Special builtin function ${e.specialBuiltinSymbolType} is not supported as normal expression.`,r)},Module:(e,t,r,o,{executeFunction:i})=>{const s=o.getModule(e.moduleName);if(!s)throw new n(`Module '${e.moduleName}' not found.`,r);const a=s.functions[e.functionName];if(!a)throw new n(`Function '${e.functionName}' not found in module '${e.moduleName}'.`,r);return L(a.arity,t.length,r),a.evaluate(t,r,o,{executeFunction:i})}};function Mt(e,t){let n=null;for(const r of e.body)n=Tt(r,t);return n}function Tt(e,t){switch(e[0]){case i.Number:case i.String:return function(e){return e[1]}(e);case i.NormalBuiltinSymbol:case i.SpecialBuiltinSymbol:case i.UserDefinedSymbol:return t.evaluateSymbol(e);case i.ReservedSymbol:return function(e){const t=e[1];if(!["true","false","null"].includes(t))throw new n(`Reserved symbol ${t} cannot be evaluated`,e[2]);return g(Ut[t],e[2])}(e);case i.NormalExpression:{const r=function(e,t){const r=e[2],s=e[1][1],a=[],u=[];if(s.forEach((e,r)=>{if(Ze(e)){const r=Tt(e[1],t);if(!Array.isArray(r))throw new n(`Spread operator requires an array, got ${h(e)}`,e[2]);a.push(...r)}else e[0]===i.ReservedSymbol&&"_"===e[1]?u.push(r):a.push(Tt(e,t))}),Xe(e)){const n=e[1][0];if(u.length>0){const e=Tt(n,t);return{[c]:!0,function:R(e,r),functionType:"Partial",params:a,placeholders:u,sourceCodeInfo:r,arity:V(u.length)}}if(Ge(n)){const r=n[1];return $t.allNormalExpressions[r].evaluate(a,e[2],t,{executeFunction:_t})}{const i=t.getValue(n[1]);if(void 0!==i)return _t(R(i,r),a,t,r);throw new o(n[1],e[2])}}{const n=R(Tt(e[1][0],t),r);if(u.length>0){return{[c]:!0,function:n,functionType:"Partial",params:a,placeholders:u,sourceCodeInfo:r,arity:V(u.length)}}return _t(n,a,t,r)}}(e,t);if("number"==typeof r&&Number.isNaN(r))throw new n("Number is NaN",e[2]);return ve(r)}case i.SpecialExpression:return ve(function(e,t){const n=e[1][0],r=g($t.specialExpressions[n],e[2]);return(0,r.evaluate)(e,t,{evaluateNode:Tt,builtin:$t,getUndefinedSymbols:It})}(e,t));default:throw new n(`${a(e[0])}-node cannot be evaluated`,e[2])}}function _t(e,t,r,o){if(b(e))return Ft[e.functionType](e,t,o,r,{evaluateNode:Tt,executeFunction:_t});if(Array.isArray(e))return function(e,t,r){if(1!==t.length)throw new n("Array as function requires one non negative integer parameter.",r);const o=t[0];return $(o,r,{integer:!0,nonNegative:!0}),ee(e[o])}(e,t,o);if(O(e))return function(e,t,r){if(1!==t.length)throw new n("Object as function requires one string parameter.",r);const o=t[0];return q(o,r),ee(e[o])}(e,t,o);if("string"==typeof e)return function(e,t,r){if(1!==t.length)throw new n("String as function requires one Obj parameter.",r);const o=ee(t[0]);if(O(o))return ee(o[e]);if(N(o,{integer:!0}))return ee(e[o]);throw new n(`string as function expects Obj or integer parameter, got ${h(o)}`,r)}(e,t,o);if(N(e))return function(e,t,r){if($(e,r,{integer:!0}),1!==t.length)throw new n("Number as function requires one Arr parameter.",r);const o=t[0];return C(o,r),ee(o[e])}(e,t,o);throw new n("Unexpected function type",o)}class Bt{contexts;globalContext;values;nativeJsFunctions;modules;constructor({contexts:e,values:t,nativeJsFunctions:n,modules:r}){this.globalContext=g(e[0]),this.contexts=e,this.values=t,this.nativeJsFunctions=n,this.modules=r??new Map}getModule(e){return this.modules.get(e)}create(e){const t=this.globalContext,n=new Bt({contexts:[e,...this.contexts],values:this.values,nativeJsFunctions:this.nativeJsFunctions,modules:this.modules});return n.globalContext=t,n}new(e){return new Bt({contexts:[{},e],modules:this.modules})}exportValues(e,t){for(const[r,o]of Object.entries(e)){if(this.globalContext[r])throw new n(`Cannot redefine exported value "${r}"`,t);const e=Rt(r);if(e)throw new n(`Cannot shadow ${e}`,t);this.globalContext[r]={value:o}}this.contexts[0]!==this.globalContext&&this.addValues(e,t)}addValues(e,t){const r=this.contexts[0];for(const[o,i]of Object.entries(e)){if(r[o])throw new n(`Cannot redefine value "${o}"`,t);const e=Rt(o);if(e)throw new n(`Cannot shadow ${e}`,t);r[o]={value:ee(i)}}}getValue(e){for(const t of this.contexts){const n=t[e];if(n)return n.value}const t=this.nativeJsFunctions?.[e];return t||this.values?.[e]}lookUp(e){const t=e[1];for(const e of this.contexts){const n=e[t];if(n)return n}const n=this.values?.[t];if(void 0!==n)return{value:ee(n)};const r=this.nativeJsFunctions?.[t];return r?{value:r}:null}evaluateSymbol(e){if(Ke(e)){const t=e[1];switch(t){case kt["&&"]:case kt["||"]:case kt.array:case kt.object:case kt["defined?"]:case kt.recur:case kt.throw:case kt["??"]:{const n=g($t.specialExpressions[t],e[2]);return{[c]:!0,functionType:"SpecialBuiltin",specialBuiltinSymbolType:t,sourceCodeInfo:e[2],arity:n.arity}}default:throw new n(`Unknown special builtin symbol type: ${t}`,e[2])}}if(Ge(e)){const t=e[1],n=Ve[t],r=n.name;return{[c]:!0,functionType:"Builtin",normalBuiltinSymbolType:t,sourceCodeInfo:e[2],arity:n.arity,name:r}}const t=this.lookUp(e);if(v(r=t)&&void 0!==r.value)return t.value;var r;throw new o(e[1],e[2])}}function Rt(e){return At.includes(e)?`special expression "${e}"`:Pt.includes(e)?`builtin function "${e}"`:"self"===e?`builtin value "${e}"`:null}function Dt(e={},t){const r=e.globalContext??{},o=e.contexts?[r,...e.contexts]:[r],i=new Bt({contexts:o,values:e.values,modules:t,nativeJsFunctions:e.jsFunctions&&Object.entries(e.jsFunctions).reduce((e,[t,r])=>{const o=t.split("."),i=o.pop();if(/^[A-Z]/.test(i))throw new n(`Invalid identifier "${t}" in jsFunctions, function name must not start with an uppercase letter`,void 0);let s=e;for(const e of o){if(0===e.length)throw new n(`Invalid empty identifier "${t}" in jsFunctions`,void 0);if(!/^[A-Z]/.test(e))throw new n(`Invalid identifier "${t}" in jsFunctions, module name must start with an uppercase letter`,void 0);s[e]||(s[e]={}),s=s[e]}!function(e){if(!function(e){return"object"==typeof e&&null!==e&&"fn"in e&&"function"==typeof e.fn}(e))throw new TypeError("Expected a NativeJsFunction")}(r);const a={functionType:"NativeJsFunction",nativeFn:r,name:i,[c]:!0,arity:r.arity??{},docString:r.docString??""};return s===e&&function(e){const t=Rt(e);if(t)throw new n(`Cannot shadow ${t}`,void 0)}(i),s[i]=a,e},{})});return e.globalModuleScope?i:i.create({})}const zt=["^","*","/","%","+","-","<<",">>",">>>","++","<","<=","≤",">",">=","≥","==","!=","≠","&","xor","|","&&","||","??","|>"],Lt=[...zt,"?",":","->","...",".",",","=",":",";"],Vt=new Set(["comment","cond","def","defined?","block","doseq","if","let","loop","recur","throw","try","unless","while"]);function Jt(e){return!Vt.has(e)}const Wt=new Set(zt);function qt(e){return Wt.has(e)}const Yt=new Set(Lt);function Gt(e){return Yt.has(e)}const Kt=["(",")","[","]","{","}","'",'"',"`",",",".",";"," ","\n","\r","\t"],Xt=["0","1","2","3","4","5","6","7","8","9",...Kt],Zt=new Set(Kt),Ht=new Set(Xt),Qt=/\s/,en=[0],tn=(e,t)=>{if('"'!==e[t])return en;let n='"',r=1,o=e[t+r],i=!1;for(;o&&('"'!==o||i);)r+=1,i?(i=!1,n+=o):("\\"===o&&(i=!0),n+=o),o=e[t+r];return o?(n+='"',[r+1,["string",n]]):[r,["Error",n,void 0,`Unclosed string at position ${t}`]]};function nn(e,t,n,r){return t===n.slice(r,r+t.length)?[t.length,[e,t]]:en}const rn=/\d/,on=/[0-7]/,sn=/[0-9a-f]/i,an=/[01]/,un=/[\s)\]}(,;]/,cn=(e,t)=>{let n=e[t];if("'"===n){let r=1,o=e[t+r],i=!1;for(;"'"!==o||i;){if(void 0===o)return[r,["Error",n,void 0,`Unclosed quoted symbol at position ${t}`]];r+=1,i?(i=!1,n+=o):("\\"===o&&(i=!0),n+=o),o=e[t+r]}return n+="'",[r+1,["Symbol",n]]}if(!Ht.has(n)){const r=t;let o=e[t+=1];for(;o&&!Zt.has(o);)n+=o,o=e[t+=1];return n.endsWith(":")?[t-r-1,["Symbol",n.slice(0,-1)]]:[t-r,["Symbol",n]]}return en},ln=[(e,t)=>{let n=e[t];if(!n||!Qt.test(n))return en;let r=n;for(n=e[t+=1];n&&Qt.test(n);)r+=n,n=e[t+=1];return[r.length,["Whitespace",r]]},(e,t)=>{if("/"===e[t]&&"*"===e[t+1]){let n=2,r="/*";for(;("*"!==e[t+n]||"/"!==e[t+n+1])&&t+n+1<e.length;)r+=e[t+n],n+=1;return t+n+1>=e.length?[n,["Error",r,void 0,`Unclosed multi-line comment at position ${t}`]]:(r+="*/",n+=2,[n,["MultiLineComment",r]])}return en},(e,t)=>{if("/"===e[t]&&"/"===e[t+1]){let n=2,r="//";for(;"\n"!==e[t+n]&&t+n<e.length;)r+=e[t+n],n+=1;return[n,["SingleLineComment",r]]}return en},(e,t)=>{const n=cn(e,t);if(0===n[0]||!n[1])return en;let r=n[1][1];r=r.startsWith("'")?r.slice(1,r.length-1):r;return void 0===Ut[r]?en:[n[0],["ReservedSymbol",r]]},(e,t)=>nn("LParen","(",e,t),(e,t)=>nn("RParen",")",e,t),(e,t)=>nn("LBracket","[",e,t),(e,t)=>nn("RBracket","]",e,t),(e,t)=>nn("LBrace","{",e,t),(e,t)=>nn("RBrace","}",e,t),(e,t)=>{if('"'!==e[t]||'"'!==e[t+1]||'"'!==e[t+2])return en;let n='"""',r=3,o=e[t+r],i=e.slice(t+r,t+r+3),s=!1;for(;o&&('"""'!==i||s);)r+=1,s?(s=!1,n+=o):("\\"===o&&(s=!0),n+=o),o=e[t+r],i=e.slice(t+r,t+r+3);return o?(n+='"""',[r+3,["DocString",n]]):[r,["Error",n,void 0,`Unclosed doc string at position ${t}`]]},tn,(e,t)=>{if("#"!==e[t])return en;const[n,r]=tn(e,t+1);if(!r)return en;if("Error"===r[0]){return[n+1,["Error",`#${r[1]}`,void 0,`Unclosed regexp at position ${t}`]]}t+=n+1;let o=n+1,i="";for(;"g"===e[t]||"i"===e[t];)if(i+=e[t],o+=1,t+=1,i.includes(e[t]))return[o,["Error",`#${r[1]}${i}`,void 0,`Duplicated regexp option "${e[t]}"`]];return[o,["RegexpShorthand",`#${r[1]}${i}`]]},(e,t)=>{if("0"!==e[t])return en;const n=e[t+1],r="b"===n||"B"===n?"binary":"o"===n||"O"===n?"octal":"x"===n||"X"===n?"hex":null;if(null===r)return en;let o;for(o=t+2;o<e.length;o+=1){const t=e[o];if("binary"===r&&!an.test(t))break;if("octal"===r&&!on.test(t))break;if("hex"===r&&!sn.test(t))break}const i=o-t;if(i<=2)return en;const s=e[o];return s&&!un.test(s)?en:[i,["BasePrefixedNumber",e.substring(t,o)]]},(e,t)=>{let n;const r="-"===e[t],o="+"===e[t],i=r||o?t+1:t;let s=!1,a=!1;for(n=i;n<e.length;n+=1){const r=e[n];if("_"===r){if(!rn.test(e[n-1])||!rn.test(e[n+1]))return n===i?en:[n-t+1,["Error",e.substring(t,n+1),void 0,`Invalid number format at position ${n+1}`]]}else if("."===r){if(n===i)return en;if(s||a)return[n-t+1,["Error",e.substring(t,n+1),void 0,`Invalid number format at position ${n+1}`]];s=!0}else if("e"===r||"E"===r){if(n===i)return en;if(a)return[n-t+1,["Error",e.substring(t,n+1),void 0,`Invalid number format at position ${n+1}`]];if("."===e[n-1]||"+"===e[n-1]||"-"===e[n-1])return[n-t+1,["Error",e.substring(t,n+1),void 0,`Invalid number format at position ${n+1}`]];"+"!==e[n+1]&&"-"!==e[n+1]||(n+=1),a=!0}else if(!rn.test(r))break}if((r||o)&&n===i)return en;const u=n-t;if(0===u)return en;const c=e[n];return c&&":"!==c&&!un.test(c)?[n-t+1,["Error",e.substring(t,n+1),void 0,`Invalid number format at position ${n+1}`]]:[u,["Number",e.substring(t,n)]]},(e,t)=>{const n=e.slice(t,t+3);if(t+2<e.length&&Gt(n))return[3,["Operator",n]];const r=e.slice(t,t+2);if(t+1<e.length&&Gt(r))return[2,["Operator",r]];const o=e[t]??"";return Gt(o)?[1,["Operator",o]]:en},cn];function fn(e,t,n){const r=e.substring(0,t+1).split(/\r\n|\r|\n/),o=r[r.length-1],i=function(e,t){return e.split(/\r\n|\r|\n/)[t]}(e,r.length-1);return{code:i,position:{line:r.length,column:o.length},filePath:n}}function dn(e,t){const n=t;if(0===t){const[r,o]=((e,t)=>{if("#"===e[t]&&"!"===e[t+1]){let n=2,r="#!";for(;"\n"!==e[t+n]&&t+n<e.length;)r+=e[t+n],n+=1;return[n,["SingleLineComment",r]]}return en})(e,t);if(t+=r,r>0)return[t-n,o]}for(const r of ln){const[o,i]=r(e,t);if(t+=o,0!==o)return[t-n,i]}return[1,["Error",e[n],void 0,"Unrecognized character"]]}function hn(e,t){return"Symbol"===e?.[0]&&(!t||e[1]===t)}function pn(e,t){return function(e,t){hn(e,t)||Un("Symbol",void 0,e)}(e,t),e}function yn(e,t){return"ReservedSymbol"===e?.[0]&&(!t||e[1]===t)}function gn(e,t){yn(e,t)||Un("ReservedSymbol",t,e)}function mn(e,t){return gn(e,t),e}function vn(e,t){return"Operator"===e?.[0]&&(!t||e[1]===t)}function bn(e,t){vn(e,t)||Un("Operator",t,e)}function wn(e){return"LParen"===e?.[0]}function xn(e){wn(e)||Un("LParen",void 0,e)}function Sn(e){return"RParen"===e?.[0]}function En(e){Sn(e)||Un("RParen",void 0,e)}function kn(e){return"LBracket"===e?.[0]}function Nn(e){return function(e){kn(e)||Un("LBracket",void 0,e)}(e),e}function $n(e){return"RBracket"===e?.[0]}function Pn(e){$n(e)||Un("RBracket",void 0,e)}function An(e){return"LBrace"===e?.[0]}function In(e){return function(e){An(e)||Un("LBrace",void 0,e)}(e),e}function jn(e){return"RBrace"===e?.[0]}function Cn(e){return"string"===e?.[0]}function On(e){return"Operator"===e?.[0]&&qt(e[1])}function Un(e,t,r){const o=r?`${r[0]} '${r[1]}'`:"end of input";throw new n(`Unexpected token: ${o}, expected ${e}${t?` '${t}'`:""}`,r?.[2])}function Fn(e,{removeWhiteSpace:t}){const n=e.tokens.filter(e=>!(function(e){return"SingleLineComment"===e?.[0]}(e)||function(e){return"MultiLineComment"===e?.[0]}(e)||function(e){return"Shebang"===e?.[0]}(e)||t&&function(e){return"Whitespace"===e?.[0]}(e)));return{...e,tokens:n}}const Mn=new Set([...Pt,...At,...Object.keys(Ut)]);class Tn{originalProgram;originalPosition;prefixProgram="";suffixProgram="";searchString="";suggestions=[];suggestionIndex=null;constructor(e,t,n,r){this.originalProgram=e,this.originalPosition=t;const o=this.originalProgram.slice(0,this.originalPosition),i=n.tokenize(o).tokens.at(-1);i&&"Error"!==i[0]&&(this.searchString=i[1],this.prefixProgram=this.originalProgram.slice(0,this.originalPosition-this.searchString.length),this.suffixProgram=this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.suggestions=this.generateSuggestions(r))}getNextSuggestion(){return this.getAutoCompleteSuggestionResult(this.getNextSuggestionSymbol())}getPreviousSuggestion(){return this.getAutoCompleteSuggestionResult(this.getPreviousSuggestionSymbol())}getAutoCompleteSuggestionResult(e){return null===e?null:{program:this.prefixProgram+e+this.suffixProgram,position:this.prefixProgram.length+e.length}}getNextSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=0:(this.suggestionIndex+=1,this.suggestionIndex>=this.suggestions.length&&(this.suggestionIndex=0)),this.suggestions[this.suggestionIndex])}getPreviousSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=this.suggestions.length-1:(this.suggestionIndex-=1,this.suggestionIndex<0&&(this.suggestionIndex=this.suggestions.length-1)),this.suggestions[this.suggestionIndex])}getSuggestions(){return[...this.suggestions]}getSearchString(){return this.searchString}generateSuggestions(e){const t=new Set(["0_def","0_defn","0_lambda"]),n=this.generateWithPredicate(e,e=>!t.has(e)&&e.startsWith(this.searchString));n.forEach(e=>t.add(e));const r=this.generateWithPredicate(e,e=>!t.has(e)&&e.toLowerCase().startsWith(this.searchString.toLowerCase()));r.forEach(e=>t.add(e));const o=this.generateWithPredicate(e,e=>!t.has(e)&&e.includes(this.searchString));o.forEach(e=>t.add(e));const i=this.generateWithPredicate(e,e=>!t.has(e)&&e.includes(this.searchString.toLowerCase()));return i.forEach(e=>t.add(e)),[...n,...r,...o,...i]}generateWithPredicate(e,t){const n=new Set;return Mn.forEach(e=>{t(e)&&n.add(e)}),Object.keys(e.globalContext??{}).filter(t).forEach(e=>n.add(e)),e.contexts?.forEach(e=>{Object.keys(e).filter(t).forEach(e=>n.add(e))}),Object.keys(e.jsFunctions??{}).filter(t).forEach(e=>n.add(e)),Object.keys(e.values??{}).filter(t).forEach(e=>n.add(e)),[...n].sort((e,t)=>e.localeCompare(t))}}class _n{tokens;position;storedPosition=0;parseExpression;constructor(e){this.tokens=e.tokens,this.position=0}advance(){this.position+=1}tryPeek(){return this.tokens[this.position]}peek(){const e=this.tokens[this.position];if(!e){const e=this.tokens.at(-1),t=e?e[2]:void 0;throw new n("Unexpected end of input",t)}return e}isAtEnd(){return this.position>=this.tokens.length}peekSourceCodeInfo(){const e=this.tryPeek();return e?e[2]:this.tokens.at(-1)?.[2]}storePosition(){return this.storedPosition=this.position}restorePosition(){this.position=this.storedPosition}peekAhead(e){return this.tokens[this.position+e]}getPosition(){return this.position}getTokenAt(e){return this.tokens[e]}}function Bn(e,t){return t&&(e[2]=t),e}function Rn(e,t){return void 0!==kt[e]&&"fn"!==e&&"def"!==e&&"defn"!==e?Bn([i.SpecialBuiltinSymbol,kt[e]],t):void 0!==Le[e]?Bn([i.NormalBuiltinSymbol,Le[e]],t):Bn([i.UserDefinedSymbol,e],t)}function Dn(e){return e.substring(1,e.length-1).replace(/(\\{2})|(\\')|\\(.)/g,(e,t,n,r)=>t?"\\":n?"'":`\\${r}`)}const zn=Object.entries(Le).reduce((e,[t,n])=>(e[n]=t,e),[]),Ln=Object.entries(kt).reduce((e,[t,n])=>(e[n]=t,e),[]);function Vn(e){return qe(e)?e[1]:Ge(e)?zn[e[1]]:Ln[e[1]]}function Jn(e,t,n){const r=Bn([i.NormalExpression,[e,t]],n);return Ge(e)&&L(Ve[e[1]].arity,r[1][1].length,n),r}function Wn(e){if(e.isAtEnd())return!0;const t=e.tryPeek();return vn(t)?[";",",",":"].includes(t[1]):!!yn(t)&&["else","when","while","case","catch","let","then","end","do"].includes(t[1])}function qn(e,t,r,o,s){const a=e[1];switch(a){case"^":case"*":case"/":case"%":case"+":case"-":case"<<":case">>":case">>>":case"++":case"<":case"<=":case"≤":case">":case">=":case"≥":case"==":case"!=":case"≠":case"&":case"xor":case"|":case"|>":return Jn(t,[r,o],s);case"&&":case"||":case"??":return Bn([i.SpecialExpression,[kt[a],[r,o]]],s);default:throw new n(`Unknown binary operator: ${a}`,s)}}function Yn(e){const t=e.peek();if(e.advance(),!hn(t))throw new n(`Expected symbol token, got ${t[0]}`,t[2]);return"'"===t[1][0]?Rn(Dn(t[1]),t[2]):Rn(t[1],t[2])}function Gn(e,{requireDefaultValue:t,noRest:r}={}){const o=e.tryPeek();if(hn(o)){const r=Yn(e);if(!qe(r))throw new n("Expected user defined symbol",o[2]);const i=Kn(e);if(t&&!i)throw new n("Expected assignment",e.peekSourceCodeInfo());return Bn([Qe,[r,i]],o[2])}if(vn(o,"...")){if(r)throw new n("Rest element not allowed",o[2]);e.advance();const t=Ye(Yn(e));if(vn(e.tryPeek(),"="))throw new n("Rest argument can not have default value",e.peekSourceCodeInfo());return Bn([et,[t[1],void 0]],o[2])}if(kn(o)){e.advance();const r=[];let i=e.peek(),s=!1;for(;!$n(i);){if(s)throw new n("Rest argument must be last",i[2]);if(vn(i,",")){r.push(null),e.advance(),i=e.peek();continue}const t=Gn(e);t[0]===et&&(s=!0),r.push(t),i=e.peek(),$n(i)||(bn(i,","),e.advance()),i=e.peek()}e.advance();const a=Kn(e);if(t&&!a)throw new n("Expected assignment",e.peekSourceCodeInfo());return Bn([nt,[r,a]],o[2])}if(An(o)){e.advance();const r={};let i=e.peek(),s=!1;for(;!jn(i);){if(s)throw new n("Rest argument must be last",i[2]);vn(i,"...")&&(s=!0,e.advance());const t=Yn(e),a=Vn(t);if(i=e.peek(),yn(i,"as")){if(s)throw new n("Rest argument can not have alias",i[2]);e.advance();const t=Ye(Yn(e));if(r[t[1]])throw new n(`Duplicate binding name: ${t}`,i[2]);r[a]=Bn([Qe,[t,Kn(e)]],o[2])}else if(jn(i)||vn(i,",")||vn(i,"=")){const a=Ye(t,t[2]);if(r[a[1]])throw new n(`Duplicate binding name: ${a}`,i[2]);if(s&&vn(e.tryPeek(),"="))throw new n("Rest argument can not have default value",e.peekSourceCodeInfo());r[a[1]]=Bn(s?[et,[a[1],Kn(e)]]:[Qe,[a,Kn(e)]],o[2])}else if(vn(i,":")){if(e.advance(),i=e.peek(),!An(i)&&!kn(i))throw new n("Expected object or array",i[2]);r[a]=Gn(e)}jn(e.peek())||(bn(e.peek(),","),e.advance()),i=e.peek()}e.advance(),i=e.peek();const a=Kn(e);if(t&&!a)throw new n("Expected assignment",i[2]);return Bn([tt,[r,a]],o[2])}throw new n("Expected symbol",e.peekSourceCodeInfo())}function Kn(e){if(vn(e.tryPeek(),"="))return e.advance(),e.parseExpression()}function Xn(e,t){e.advance();const n=Gn(e,{requireDefaultValue:!0,noRest:!0}),r=n[1][1];n[1][1]=void 0;const o=Bn([i.Binding,[n,r]],t[2]);return Bn([i.SpecialExpression,[kt.let,o]],t[2])}function Zn(e,t){const r=[];for(;!e.isAtEnd()&&!Hn(e,t);)vn(e.tryPeek(),";")?e.advance():r.push(e.parseExpression());if(function(e,t){if(!Hn(e,t))throw new n(`Expected ${t.map(e=>e[1]).join(" or ")}`,e.peekSourceCodeInfo())}(e,t),0===r.length)throw new n("Expected expression",e.peekSourceCodeInfo());return 1===r.length?r[0]:Bn([i.SpecialExpression,[kt.block,r]],e.peekSourceCodeInfo())}function Hn(e,t){for(const n of t)if(yn(e.tryPeek(),n))return!0;return!1}function Qn(e){const t=function(e){const t=pn(e.tryPeek()),n=Ye(Yn(e));gn(e.tryPeek(),"in"),e.advance();const r=e.parseExpression();return Bn([i.Binding,[Bn([Qe,[n,void 0]],t[2]),r]],t[2])}(e),r=[];let o=e.peek();er(o,["let","when","while"]);const s=[];if("let"===o[1])for(r.push("&let");hn(o,"let");){const t=Xn(e,o),r=s.flatMap(e=>Object.keys(st(e[1][0])));if(Object.keys(st(t[1][1][1][0])).some(e=>r.includes(e)))throw new n("Duplicate binding",t[1][1][2]);s.push(t[1][1]),o=e.peek(),er(o,["let","when","while"]),o=e.peek()}let a,u;for(;yn(o,"when")||yn(o,"while");){e.advance(),"when"===o[1]?(r.push("&when"),a=e.parseExpression()):(r.push("&while"),u=e.parseExpression()),o=e.peek();er(o,r.includes("&when")&&r.includes("&while")?[]:r.includes("&when")?["while"]:["when"]),o=e.peek()}return er(o,[]),[t,s,a,u]}function er(e,t){if(!function(e,t){if(vn(e,",")||Sn(e))return!0;for(const n of t){if("let"===n&&hn(e,"let"))return!0;if(["when","while"].includes(n)&&yn(e,n))return!0}return!1}(e,t)){const r=`${[...t,","].map(e=>`"${e}"`).join(", ")} or ")"`;throw new n(`Expected symbol ${r}`,e[2])}}function tr(e,t){e.advance();const n=t[1].substring(1,t[1].length-1).replace(/(\\{2})|(\\")|(\\n)|(\\t)|(\\r)|(\\b)|(\\f)|\\(.)/g,(e,t,n,r,o,i,s,a,u)=>t?"\\":r?"\n":o?"\t":i?"\r":s?"\b":a?"\f":n?'"':u);return Bn([i.String,n],t[2])}function nr(e,t=!1){const r=mn(e.tryPeek(),"do");e.advance();let o="";t&&function(e){return"DocString"===e?.[0]}(e.tryPeek())&&(o=function(e){const t=e.peek(),n=t[2]?["string",t[1].slice(2,-2),t[2]]:["string",t[1].slice(2,-2)],r=tr(e,n);return oe(r[1])}(e));const s=[];for(;!e.isAtEnd()&&!yn(e.tryPeek(),"end");)if(s.push(e.parseExpression()),vn(e.tryPeek(),";"))e.advance();else if(!yn(e.tryPeek(),"end"))throw new n("Expected end",e.peekSourceCodeInfo());return gn(e.tryPeek(),"end"),e.advance(),[Bn([i.SpecialExpression,[kt.block,s]],r[2]),o]}function rr(e){const t=mn(e.tryPeek());e.advance();const n=t[1];return function(e){return e in Ot}(n)?Bn([i.Number,Ot[n]],t[2]):Bn([i.ReservedSymbol,t[1]],t[2])}const or=/^\$([1-9]\d?)?$/;function ir(e){const t=e.peek();if(wn(t)&&hn(e.peekAhead(1))&&vn(e.peekAhead(2),"->"))return null;try{const r=function(e){const t=e.peek();if(hn(t))return[Bn([Qe,[Yn(e),void 0]],t[2])];xn(t),e.advance();let r=!1,o=!1;const i=[];for(;!e.isAtEnd()&&!Sn(e.peek())&&!hn(e.peek(),"let");){if(r)throw new n("Rest argument must be last",e.peekSourceCodeInfo());const t=Gn(e);if(void 0!==t[1][1]&&(o=!0),t[0]===et&&(r=!0),o&&!t[1][1])throw new n("Default arguments must be last",e.peekSourceCodeInfo());if(i.push(t),!vn(e.peek(),",")&&!Sn(e.peek())&&!hn(e.peek(),"let"))throw new n("Expected comma or closing parenthesis",e.peekSourceCodeInfo());vn(e.peek(),",")&&e.advance()}if(!Sn(e.peek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),i}(e);if(!vn(e.peek(),"->"))return null;let o;e.advance();let s="";if(yn(e.peek(),"do")){const t=nr(e,!0);s=t[1],o=t[0][1][1]}else o=[e.parseExpression()];return Bn([i.SpecialExpression,[kt["0_lambda"],[r,o],s]],t[2])}catch{return null}}function sr(e,t){e.advance();const r=[];for(;!e.isAtEnd()&&!Sn(e.tryPeek());){vn(e.tryPeek(),"...")?(e.advance(),r.push(Bn([i.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const t=e.tryPeek();if(!vn(t,",")&&!Sn(t))throw new n("Expected comma or closing parenthesis",e.tryPeek()?.[2]);vn(t,",")&&e.advance()}if(!Sn(e.tryPeek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());if(e.advance(),!Ke(t))return Ge(t)||qe(t)?Jn(t,r,t[2]):Bn([i.NormalExpression,[t,r]],t[2]);{const e=t[1];switch(L($t.specialExpressions[e].arity,r.length,t[2]),e){case kt["||"]:case kt["&&"]:case kt.recur:case kt.array:case kt.object:case kt["??"]:return Bn([i.SpecialExpression,[e,r]],t[2]);case kt["defined?"]:{const[n]=r;return Bn([i.SpecialExpression,[e,n]],t[2])}case kt.throw:{const[n]=r;return Bn([i.SpecialExpression,[e,n]],t[2])}case kt["0_lambda"]:case kt["0_def"]:throw new n(`${e} is not allowed`,t[2]);default:throw new n(`Unknown special expression: ${e}`,t[2])}}}function ar(e){const t=In(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!jn(e.tryPeek());){if(vn(e.tryPeek(),"..."))e.advance(),r.push(Bn([i.Spread,e.parseExpression()],e.peekSourceCodeInfo()));else{const t=e.tryPeek();if(Cn(t)){const n=tr(e,t);r.push(Bn([i.String,n[1]],t[2]))}else if(hn(t)){const n=t[1].startsWith("'")?Dn(t[1]):t[1];r.push(Bn([i.String,n],t[2])),e.advance()}else{if(!kn(t))throw new n("Expected key to be a symbol or a string",e.peekSourceCodeInfo());e.advance(),r.push(e.parseExpression()),Pn(e.tryPeek()),e.advance()}bn(e.tryPeek(),":"),e.advance(),r.push(e.parseExpression())}const t=e.tryPeek();if(!vn(t,",")&&!jn(t))throw new n("Expected comma or closing brace",e.peekSourceCodeInfo());vn(t,",")&&e.advance()}var o;return jn(o=e.tryPeek())||Un("RBrace",void 0,o),e.advance(),Bn([i.SpecialExpression,[kt.object,r]],t[2])}function ur(e){let t=function(e){const t=e.peek();if(wn(t)){e.storePosition();const t=ir(e);if(t)return t;e.restorePosition(),e.advance();const r=e.parseExpression();if(!Sn(e.peek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),r}if(vn(t)){const r=t[1];if(qt(r))return e.advance(),Bn(void 0!==kt[r]?[i.SpecialBuiltinSymbol,kt[r]]:[i.NormalBuiltinSymbol,Le[r]],t[2]);if("->"===r)return function(e){const t=e.peek();e.advance();const r=e.getPosition();let o,s="";if(yn(e.peek(),"do")){const t=nr(e,!0);s=t[1],o=t[0][1][1]}else o=[e.parseExpression()];const a=e.getPosition()-1;let u=0,c="NOT_SET";for(let o=r;o<=a;o+=1){const r=e.getTokenAt(o);if(hn(r)){const e=or.exec(r[1]);if(e){const r=e[1]??"1";if("1"===r){if(!e[1]&&"WITH_1"===c||e[1]&&"NAKED"===c)throw new n("Please make up your mind, either use $ or $1",t[2]);c=e[1]?"WITH_1":"NAKED"}if(u=Math.max(u,Number(r)),u>20)throw new n("Can't specify more than 20 arguments",t[2])}}}const l=[];for(let e=1;e<=u;e+=1)1===e&&"NAKED"===c?l.push(Bn([Qe,[[i.UserDefinedSymbol,"$"],void 0]],t[2])):l.push(Bn([Qe,[[i.UserDefinedSymbol,`$${e}`],void 0]],t[2]));return Bn([i.SpecialExpression,[kt["0_lambda"],[l,o],s]],t[2])}(e);throw new n(`Illegal operator: ${r}`,t[2])}if(An(t))return ar(e);if(kn(t))return function(e){const t=Nn(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!$n(e.tryPeek());){vn(e.tryPeek(),"...")?(e.advance(),r.push(Bn([i.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const t=e.tryPeek();if(!vn(t,",")&&!$n(t))throw new n("Expected comma or closing parenthesis",e.peekSourceCodeInfo());vn(t,",")&&e.advance()}return Pn(e.tryPeek()),e.advance(),Bn([i.SpecialExpression,[kt.array,r]],t[2])}(e);const r=t[0];switch(r){case"Number":case"BasePrefixedNumber":return function(e){const t=e.peek();e.advance();const n=t[1],r="-"===n[0],o=(r?n.substring(1):n).replace(/_/g,"");return Bn([i.Number,r?-Number(o):Number(o)],t[2])}(e);case"string":return tr(e,t);case"Symbol":{e.storePosition();const t=ir(e);return t||(e.restorePosition(),Yn(e))}case"ReservedSymbol":return rr(e);case"RegexpShorthand":return function(e){const t=e.peek();e.advance();const n=t[1].lastIndexOf('"'),r=t[1].substring(2,n),o=t[1].substring(n+1),s=Bn([i.String,r],t[2]),a=Bn([i.String,o],t[2]);return Bn([i.NormalExpression,[Bn([i.NormalBuiltinSymbol,Le.regexp],t[2]),[s,a]]],t[2])}(e);default:throw new n(`Unknown token type: ${r}`,t[2])}}(e),r=e.tryPeek();for(;vn(r,".")||kn(r)||wn(r);)if("."===r[1]){e.advance();const o=e.tryPeek();if(!hn(o))throw new n("Expected symbol",e.peekSourceCodeInfo());t=cr(t,Bn([i.String,o[1]],o[2]),r[2]),e.advance(),r=e.tryPeek()}else if(kn(r)){e.advance();const o=e.parseExpression();if(!$n(e.tryPeek()))throw new n("Expected closing bracket",e.peekSourceCodeInfo());t=cr(t,o,r[2]),e.advance(),r=e.tryPeek()}else wn(r)&&(t=sr(e,t),r=e.tryPeek());return t}function cr(e,t,n){return Bn([i.NormalExpression,[[i.NormalBuiltinSymbol,Le.get],[e,t]]],n)}function lr(e,t){switch(e){case"^":return 12;case"*":case"/":case"%":return 11;case"+":case"-":return 10;case"<<":case">>":case">>>":return 9;case"++":return 8;case"<":case"<=":case"≤":case">":case">=":case"≥":return 7;case"==":case"!=":case"≠":return 6;case"&":case"xor":case"|":return 5;case"&&":case"||":case"??":return 4;case"|>":return 2;default:throw new n(`Unknown binary operator: ${e}`,t)}}function fr(e,t=0,r=!1){const o=e.tryPeek();let s;if(hn(o))switch(o[1]){case"let":return Xn(e,o);case"if":case"unless":s=function(e,t){const n="unless"===t[1];e.advance();const r=e.parseExpression();gn(e.tryPeek(),"then"),e.advance();const o=Zn(e,["else","end"]);let s;return yn(e.tryPeek(),"else")&&(e.advance(),s=Zn(e,["end"])),e.advance(),Bn(n?[i.SpecialExpression,[kt.unless,[r,o,s]]]:[i.SpecialExpression,[kt.if,[r,o,s]]],t[2])}(e,o);break;case"cond":s=function(e,t){e.advance();const n=[];for(;!e.isAtEnd()&&!yn(e.tryPeek(),"end");){gn(e.tryPeek(),"case"),e.advance();const t=e.parseExpression();gn(e.tryPeek(),"then"),e.advance();const r=Zn(e,["case","end"]);if(n.push([t,r]),yn(e.tryPeek(),"end"))break}return gn(e.tryPeek()),e.advance(),Bn([i.SpecialExpression,[kt.cond,n]],t[2])}(e,o);break;case"switch":s=function(e,t){e.advance();const n=e.parseExpression(),r=[];for(;!e.isAtEnd()&&!yn(e.tryPeek(),"end");){gn(e.tryPeek(),"case"),e.advance();const t=e.parseExpression();gn(e.tryPeek(),"then"),e.advance();const n=Zn(e,["case","end"]);if(r.push([t,n]),yn(e.tryPeek(),"end"))break}return gn(e.tryPeek(),"end"),e.advance(),Bn([i.SpecialExpression,[kt.switch,n,r]],t[2])}(e,o);break;case"for":case"doseq":s=function(e,t){const r="doseq"===t[1];e.advance(),xn(e.tryPeek()),e.advance();const o=[];for(;!e.isAtEnd()&&!Sn(e.tryPeek());){const t=Qn(e),r=o.flatMap(e=>Object.keys(st(e[0][1][0]))),i=st(t[0][1][0]);if(Object.keys(i).some(e=>r.includes(e)))throw new n("Duplicate binding",t[0][2]);o.push(t),vn(e.tryPeek(),",")&&e.advance()}En(e.tryPeek()),e.advance(),bn(e.tryPeek(),"->"),e.advance();const s=e.parseExpression();return Bn(r?[i.SpecialExpression,[kt.doseq,o,s]]:[i.SpecialExpression,[kt.for,o,s]],t[2])}(e,o);break;case"loop":s=function(e,t){e.advance(),xn(e.tryPeek()),e.advance();const r=[];let o=e.tryPeek();for(;!e.isAtEnd()&&!Sn(o);){const t=Gn(e,{requireDefaultValue:!0,noRest:!0}),n=t[1][1];t[1][1]=void 0,r.push(Bn([i.Binding,[t,n]],t[2])),vn(e.tryPeek(),",")&&e.advance(),o=e.tryPeek()}if(0===r.length)throw new n("Expected binding",e.peekSourceCodeInfo());En(o),e.advance(),bn(e.tryPeek(),"->"),e.advance();const s=e.parseExpression();return Bn([i.SpecialExpression,[kt.loop,r,s]],t[2])}(e,o);break;case"try":s=function(e,t){e.advance();const n=Zn(e,["catch"]);let r;e.advance(),wn(e.tryPeek())&&(e.advance(),r=Yn(e),En(e.tryPeek()),e.advance());const o=Zn(e,["end"]);return e.advance(),Bn([i.SpecialExpression,[kt.try,n,r,o]],t[2])}(e,o)}else if(yn(o,"do"))s=nr(e)[0];else if(yn(o,"export")){if(!r)throw new n("export is only allowed in module scope",o[2]);return function(e,t){e.advance();const r=e.tryPeek();if(hn(r,"let")){const n=Xn(e,pn(r));return Bn([i.SpecialExpression,[kt["0_def"],n[1][1]]],t[2])}throw new n("Expected let",e.peekSourceCodeInfo())}(e,o)}s||=ur(e);let a=e.tryPeek();for(;!Wn(e);){if(On(a)){const n=a[1],r=lr(n,a[2]);if(r<=t&&(12!==r||12!==t))break;const o=Bn(kt[n]?[i.SpecialBuiltinSymbol,kt[n]]:[i.NormalBuiltinSymbol,Le[n]],a[2]);e.advance();s=qn(a,o,s,fr(e,r),a[2])}else if(hn(a)){if(!Jt(a[1]))break;const r=3;if(r<=t)break;const o=Yn(e),i=fr(e,r);if(Ke(o))throw new n("Special expressions are not allowed in binary functional operators",o[2]);s=Jn(o,[s,i],a[2])}else{if("?"!==a?.[1])break;{if(1<=t)break;e.advance();const r=fr(e);if(!vn(e.tryPeek(),":"))throw new n("Expected :",e.peekSourceCodeInfo());e.advance();const o=fr(e);s=Bn([i.SpecialExpression,[kt.if,[s,r,o]]],s[2])}}a=e.tryPeek()}return s}class dr{cache={};firstEntry=void 0;lastEntry=void 0;_size=0;maxSize;constructor(e){var t;if(this.maxSize=null===e?null:(t=e,Math.max(0,Math.ceil(t))),"number"==typeof this.maxSize&&this.maxSize<1)throw new Error(`1 is the minimum maxSize, got ${h(e)}`)}getContent(){return Object.entries(this.cache).reduce((e,[t,n])=>(e[t]=n.value,e),{})}get size(){return this._size}get(e){return this.cache[e]?.value}clear(){this.cache={},this.firstEntry=void 0,this.lastEntry=void 0,this._size=0}has(e){return!!this.cache[e]}set(e,t){if(this.has(e))throw new Error(`AstCache - key already present: ${e}`);const n={value:t,nextEntry:void 0,key:e};for(this.cache[e]=n,this._size+=1,this.lastEntry&&(this.lastEntry.nextEntry=n),this.lastEntry=n,this.firstEntry||(this.firstEntry=this.lastEntry);null!==this.maxSize&&this.size>this.maxSize;)this.dropFirstEntry()}dropFirstEntry(){const e=this.firstEntry;delete this.cache[e.key],this._size-=1,this.firstEntry=e.nextEntry}}exports.Lits=class{astCache;astCacheSize;debug;modules;constructor(e={}){if(this.debug=e.debug??!1,this.astCacheSize=e.astCacheSize??null,this.astCacheSize){this.astCache=new dr(this.astCacheSize);const t=e.initialCache??{};for(const e of Object.keys(t))this.astCache.set(e,t[e])}else this.astCache=null;const t=e.modules??[];this.modules=new Map(t.map(e=>[e.name,e]))}getRuntimeInfo(){return{astCacheSize:this.astCacheSize,astCache:this.astCache,debug:this.debug}}run(e,t={}){const n=this.generateAst(e,t);return this.evaluate(n,t)}context(e,t={}){const n="string"==typeof e?this.generateAst(e,t):e,r=Dt(t,this.modules);return Mt(n,r),r.globalContext}getUndefinedSymbols(e,t={}){const n="string"==typeof e?this.generateAst(e,t):e,r=Dt(t,this.modules);return It(n,r,$t,Tt)}tokenize(e,t={}){const n=function(e,t,n){let r=0;const o={tokens:[],filePath:n,hasDebugData:t};for(;r<e.length;){const i=t?fn(e,r,n):void 0,s=dn(e,r),[a,u]=s;r+=a,u&&(i&&(u[2]=i),o.tokens.push(u))}return o}(e,this.debug,t.filePath);return t.minify?Fn(n,{removeWhiteSpace:!1}):n}parse(e){const t={body:[],hasDebugData:(e=Fn(e,{removeWhiteSpace:!0})).hasDebugData};return t.body=function(e){e.tokens.forEach(e=>{if("Error"===e[0])throw new n(e[3],e[2])});const t=[],r=new _n(e);for(r.parseExpression=(e=0,t=!1)=>fr(r,e,t);!r.isAtEnd();)if(t.push(fr(r,0,!0)),vn(r.tryPeek(),";"))r.advance();else if(!r.isAtEnd())throw new n("Expected ;",r.peekSourceCodeInfo());return t}(e),t}evaluate(e,t){return Mt(e,Dt(t,this.modules))}transformSymbols(e,t){return function(e,t){return{...e,tokens:e.tokens.map(e=>hn(e)?[e[0],t(e[1])]:e)}}(e,t)}untokenize(e){return function(e){return e.tokens.reduce((e,t)=>`${e}${t[1]}`,"")}(e)}apply(e,t,n={}){const r="FN_2eb7b316_471c_5bfa_90cb_d3dfd9164a59",o=this.generateApplyFunctionCall(r,t),i=this.generateAst(o,n),s=t.reduce((e,t,n)=>(e[`${r}_${n}`]=t,e),{[r]:e});return n.values={...n.values,...s},this.evaluate(i,n)}generateApplyFunctionCall(e,t){const n=t.map((t,n)=>`${e}_${n}`).join(", ");return`${e}(${n})`}generateAst(e,t){if(this.astCache){const t=this.astCache.get(e);if(t)return t}const n=this.tokenize(e,{filePath:t.filePath}),r=this.parse(n);return this.astCache?.set(e,r),r}getAutoCompleter(e,t,n={}){return new Tn(e,t,this,n)}},exports.asLitsFunction=function(e,t){return w(e,t),e},exports.asNativeJsFunction=function(e,t){return k(e,t),e},exports.asUserDefinedFunction=function(e,t){return S(e,t),e},exports.assertLitsFunction=w,exports.assertNativeJsFunction=k,exports.assertUserDefinedFunction=S,exports.isBuiltinFunction=function(e){return v(e)&&"Builtin"===e.functionType},exports.isGrid=Se,exports.isLitsError=function(e){return e instanceof n},exports.isLitsFunction=b,exports.isMatrix=Ee,exports.isNativeJsFunction=E,exports.isUserDefinedFunction=x,exports.isVector=be,exports.normalExpressionKeys=Pt,exports.specialExpressionKeys=At;
2
2
  //# sourceMappingURL=index.js.map