@mojir/lits 2.3.1 → 2.4.1

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