@mojir/lits 2.2.2 → 2.2.3

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