@mojir/lits 2.2.4 → 2.3.0

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 (65) hide show
  1. package/README.md +1 -0
  2. package/dist/cli/cli.js +1264 -909
  3. package/dist/cli/src/Lits/Lits.d.ts +8 -2
  4. package/dist/cli/src/builtin/bindingNode.d.ts +2 -1
  5. package/dist/cli/src/builtin/interface.d.ts +3 -2
  6. package/dist/cli/src/builtin/modules/number-theory/sequences/index.d.ts +2 -1
  7. package/dist/cli/src/evaluator/functionExecutors.d.ts +2 -1
  8. package/dist/cli/src/evaluator/index.d.ts +3 -2
  9. package/dist/cli/src/evaluator/interface.d.ts +3 -2
  10. package/dist/cli/src/utils/maybePromise.d.ts +54 -0
  11. package/dist/full.esm.js +1 -1
  12. package/dist/full.esm.js.map +1 -1
  13. package/dist/full.js +1 -1
  14. package/dist/full.js.map +1 -1
  15. package/dist/index.esm.js +1 -1
  16. package/dist/index.esm.js.map +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/lits.iife.js +1 -1
  20. package/dist/lits.iife.js.map +1 -1
  21. package/dist/modules/assert.esm.js +1 -1
  22. package/dist/modules/assert.esm.js.map +1 -1
  23. package/dist/modules/assert.js +1 -1
  24. package/dist/modules/assert.js.map +1 -1
  25. package/dist/modules/collection.esm.js +1 -1
  26. package/dist/modules/collection.esm.js.map +1 -1
  27. package/dist/modules/collection.js +1 -1
  28. package/dist/modules/collection.js.map +1 -1
  29. package/dist/modules/grid.esm.js +1 -1
  30. package/dist/modules/grid.esm.js.map +1 -1
  31. package/dist/modules/grid.js +1 -1
  32. package/dist/modules/grid.js.map +1 -1
  33. package/dist/modules/number-theory.esm.js +1 -1
  34. package/dist/modules/number-theory.esm.js.map +1 -1
  35. package/dist/modules/number-theory.js +1 -1
  36. package/dist/modules/number-theory.js.map +1 -1
  37. package/dist/modules/sequence.esm.js +1 -1
  38. package/dist/modules/sequence.esm.js.map +1 -1
  39. package/dist/modules/sequence.js +1 -1
  40. package/dist/modules/sequence.js.map +1 -1
  41. package/dist/modules/src/Lits/Lits.d.ts +8 -2
  42. package/dist/modules/src/builtin/bindingNode.d.ts +2 -1
  43. package/dist/modules/src/builtin/interface.d.ts +3 -2
  44. package/dist/modules/src/builtin/modules/number-theory/sequences/index.d.ts +2 -1
  45. package/dist/modules/src/evaluator/functionExecutors.d.ts +2 -1
  46. package/dist/modules/src/evaluator/index.d.ts +3 -2
  47. package/dist/modules/src/evaluator/interface.d.ts +3 -2
  48. package/dist/modules/src/utils/maybePromise.d.ts +54 -0
  49. package/dist/modules/vector.esm.js +1 -1
  50. package/dist/modules/vector.esm.js.map +1 -1
  51. package/dist/modules/vector.js +1 -1
  52. package/dist/modules/vector.js.map +1 -1
  53. package/dist/src/Lits/Lits.d.ts +8 -2
  54. package/dist/src/builtin/bindingNode.d.ts +2 -1
  55. package/dist/src/builtin/interface.d.ts +3 -2
  56. package/dist/src/builtin/modules/number-theory/sequences/index.d.ts +2 -1
  57. package/dist/src/evaluator/functionExecutors.d.ts +2 -1
  58. package/dist/src/evaluator/index.d.ts +3 -2
  59. package/dist/src/evaluator/interface.d.ts +3 -2
  60. package/dist/src/utils/maybePromise.d.ts +54 -0
  61. package/dist/testFramework.esm.js +1 -1
  62. package/dist/testFramework.esm.js.map +1 -1
  63. package/dist/testFramework.js +1 -1
  64. package/dist/testFramework.js.map +1 -1
  65. package/package.json +1 -1
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 a={Number:1,String:2,NormalExpression:3,SpecialExpression:4,UserDefinedSymbol:5,NormalBuiltinSymbol:6,SpecialBuiltinSymbol:7,ReservedSymbol:8,Binding:9,Spread:10},s=new Set(Object.values(a));function u(e){return Object.keys(a).find(t=>a[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&&s.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 $(e){return w(e)&&"NativeJsFunction"===e.functionType}function P(e,t){return A(e,t),e}function A(e,t){if(!$(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)||V(e))}function B(e,t){if(!_(e))throw g("object",e,t)}function R(e){return M(e)||_(e)}function D(e,t){return z(e,t),e}function z(e,t){if(!R(e))throw g("string, array or object",e,t)}function V(e){return null!==e&&"object"==typeof e&&!!e[f]}function L(e,t){if(!function(e){return V(e)||"string"==typeof e}(e))throw g("string or RegularExpression",e,t)}function W(e,t){return J(e,t),e}function J(e,t){if(!function(e){return"number"==typeof e||!!R(e)||!!w(e)}(e))throw g("FunctionLike",e,t)}function q(e,t){const{min:n}=e;return!("number"==typeof n&&t<n)}function Y(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 G(e){return{min:e,max:e}}const X={"<<":{evaluate:([e,t],n)=>(C(e,n,{integer:!0}),C(t,n,{integer:!0,nonNegative:!0}),e<<t),arity:G(2)},">>":{evaluate:([e,t],n)=>(C(e,n,{integer:!0}),C(t,n,{integer:!0,nonNegative:!0}),e>>t),arity:G(2)},">>>":{evaluate:([e,t],n)=>(C(e,n,{integer:!0}),C(t,n,{integer:!0,nonNegative:!0}),e>>>t),arity:G(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 Z(e,t={}){return"string"==typeof e&&((!t.nonEmpty||0!==e.length)&&(!t.char||1===e.length))}function H(e,t,n={}){if(!Z(e,n))throw g(""+(n.nonEmpty?"non empty string":n.char?"character":"string"),e,t)}function K(e,t,n={}){return H(e,t,n),e}function Q(e){return"string"==typeof e||"number"==typeof e}function ee(e,t){return te(e,t),e}function te(e,t){if(!Q(e))throw g("string or number",e,t)}function ne(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 re(e,t,r){if(te(e,r),te(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 oe(e,t,n){if(e===t)return!0;if("number"==typeof e&&"number"==typeof t)return function(e,t,n=ue){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(!oe(U(e[r],n),U(t[r],n),n))return!1;return!0}if(V(e)&&V(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=K(r[o],n);if(!oe(e[i],t[i],n))return!1}return!0}return!1}function ie(e){return e??null}function ae(...e){const t=new Set;for(const n of e)n.forEach(e=>t.add(e));return t}function se(e,t){t.forEach(t=>e.add(t))}const ue=1e-10;function ce(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 le(e,t){if(!Array.isArray(e))throw g("array",e,t)}function fe(e,t){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}(e))throw g("array of strings",e,t)}function de(e,t){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e&&1===e.length)}(e))throw g("array of strings",e,t)}const he={filter:{evaluate:([e,t],n,r,{executeFunction:o})=>{if(z(e,n),J(t,n),Array.isArray(e)){return e.filter(e=>o(t,[e],r,n))}return Z(e)?e.split("").filter(e=>o(t,[e],r,n)).join(""):Object.entries(e).filter(([,e])=>o(t,[e],r,n)).reduce((e,[t,n])=>(e[t]=n,e),{})},arity:G(2)},map:{evaluate:(e,t,r,{executeFunction:o})=>{const i=W(e.at(-1),t);if(_(e[0]))return function({colls:e,contextStack:t,executeFunction:r,fn:o,sourceCodeInfo:i}){B(e[0],i);const a=Object.keys(e[0]),s={};return e.forEach(e=>{B(e,i);const t=Object.keys(e);if(t.length!==a.length)throw new n(`All objects must have the same keys. Expected: ${a.join(", ")}. Found: ${t.join(", ")}`,i);if(!t.every(e=>a.includes(e)))throw new n(`All objects must have the same keys. Expected: ${a.join(", ")}. Found: ${t.join(", ")}`,i);Object.entries(e).forEach(([e,t])=>{s[e]||(s[e]=[]),s[e].push(t)})}),a.reduce((e,n)=>(e[n]=r(o,s[n],t,i),e),{})}({colls:e.slice(0,-1),fn:i,sourceCodeInfo:t,contextStack:r,executeFunction:o});const a=e.slice(0,-1);T(a[0],t);const s="string"==typeof a[0];let u=a[0].length;a.slice(1).forEach(e=>{s?H(e,t):le(e,t),u=Math.min(u,e.length)});const c=[];for(let e=0;e<u;e++)c.push(a.map(t=>t[e]));const l=c.map(e=>o(i,e,r,t));return s?(l.forEach(e=>H(e,t)),l.join("")):l},arity:{min:2}},reduce:{evaluate:([e,t,n],r,o,{executeFunction:i})=>(z(e,r),J(t,r),F(n,r),"string"==typeof e?(H(n,r),0===e.length?n:e.split("").reduce((e,n)=>i(t,[e,n],o,r),n)):Array.isArray(e)?0===e.length?n:e.reduce((e,n)=>i(t,[e,n],o,r),n):0===Object.keys(e).length?n:Object.entries(e).reduce((e,[,n])=>i(t,[e,n],o,r),n)),arity:G(3)},get:{evaluate:(e,t)=>{const[n,r]=e,o=ie(e[2]);if(te(r,t),null===n)return o;z(n,t);const i=function(e,t){if(_(e)){if("string"==typeof t&&ne(e,t))return ie(e[t])}else if(j(t,{nonNegative:!0,integer:!0})&&t>=0&&t<e.length)return ie(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:(z(e,t),Array.isArray(e)?e.length:Object.keys(e).length),arity:G(1)},"contains?":{evaluate:([e,t],n)=>null!==e&&(z(e,n),Z(e)?(H(t,n),e.includes(t)):M(e)?(F(t,n),!!e.find(e=>oe(U(e),t,n))):(H(t,n),t in e)),arity:G(2)},assoc:{evaluate:([e,t,n],r)=>(z(e,r),te(t,r),F(n,r),function(e,t,n,r){if(z(e,r),te(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 H(n,r,{char:!0}),`${e.slice(0,t)}${n}${e.slice(t+1)}`;const o=[...e];return o[t]=n,o}H(t,r);const o={...e};return o[t]=n,o}(e,t,n,r)),arity:G(3)},"++":{evaluate:(e,t)=>(j(e[0])||z(e[0],t),Array.isArray(e[0])?e.reduce((e,n)=>(le(n,t),e.concat(n)),[]):Q(e[0])?e.reduce((e,n)=>(te(n,t),`${e}${n}`),""):e.reduce((e,n)=>(B(n,t),Object.assign(e,n)),{})),arity:{min:1}}},pe={range:{evaluate:(e,t)=>{const[n,r,o]=e;let i,a,s;C(n,t,{finite:!0}),1===e.length?(i=0,a=n,s=a>=0?1:-1):2===e.length?(C(r,t,{finite:!0}),i=n,a=r,s=a>=i?1:-1):(C(r,t,{finite:!0}),C(o,t,{finite:!0}),i=n,a=r,s=o,C(s,t,a>i?{positive:!0}:a<i?{negative:!0}:{nonZero:!0}));const u=[];for(let e=i;s<0?e>a:e<a;e+=s)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:G(2)},flatten:{evaluate:([e,t],n)=>{le(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})=>(le(e,n),J(t,n),e.map(e=>o(t,[e],r,n)).flat(1)),arity:G(2)},"moving-fn":{evaluate:([e,t,n],r,o,{executeFunction:i})=>{le(e,r),C(t,r,{integer:!0,lte:e.length}),J(n,r);const a=[];for(let s=0;s<=e.length-t;s++){const u=i(n,[e.slice(s,s+t)],o,r);a.push(u)}return a},arity:G(3)},"running-fn":{evaluate:([e,t],n,r,{executeFunction:o})=>{le(e,n),J(t,n);const i=[];for(let a=0;a<e.length;a+=1){const s=e.slice(0,a+1);i.push(o(t,[s],r,n))}return i},arity:G(2)}},ye={nth:{evaluate:(e,t)=>{const[n,r]=e,o=ie(e[2]);if(C(r,t,{integer:!0}),null===n)return o;if(T(n,t),r>=0&&r<n.length){return ie(n[r])}return o},arity:{min:2,max:3}},first:{evaluate:([e],t)=>{if(null===e)return null;T(e,t);return ie(e[0])},arity:G(1)},last:{evaluate:([e],t)=>{if(null===e)return null;T(e,t);return ie(e.at(-1))},arity:G(1)},pop:{evaluate:([e],t)=>(T(e,t),"string"==typeof e?e.substring(0,e.length-1):e.slice(0,e.length-1)),arity:G(1)},"index-of":{evaluate:([e,t],n)=>{if(F(t,n),null===e)return null;if(T(e,n),"string"==typeof e){H(t,n);const r=e.indexOf(t);return-1!==r?r:null}{const r=e.findIndex(e=>oe(U(e,n),t),n);return-1!==r?r:null}},arity:G(2)},push:{evaluate:([e,...t],n)=>(T(e,n),"string"==typeof e?(de(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:G(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:G(1)},reverse:{evaluate:([e],t)=>null===e?null:(T(e,t),Array.isArray(e)?[...e].reverse():e.split("").reverse().join("")),arity:G(1)},second:{evaluate:([e],t)=>null===e?null:(T(e,t),ie(e[1])),arity:G(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})=>(J(t,n),null===e?null:(T(e,n),0===e.length?null:"string"==typeof e?e.split("").find(e=>o(t,[e],r,n))??null:ie(e.find(e=>o(t,[e],r,n))))),arity:G(2)},sort:{evaluate:(e,t,n,{executeFunction:r})=>{const[o]=e,i=1===e.length,a=i?null:e[1];if(T(o,t),"string"==typeof o){const e=o.split("");return i?e.sort((e,n)=>re(e,n,t)):(J(a,t),e.sort((e,o)=>{const i=r(a,[e,o],n,t);return C(i,t,{finite:!0}),i})),e.join("")}const s=[...o];return i?s.sort((e,n)=>(te(e,t),te(n,t),re(e,n,t))):s.sort((e,o)=>{J(a,t);const i=r(a,[e,o],n,t);return C(i,t,{finite:!0}),i}),s},arity:{min:1,max:2}}},ge=new WeakSet,me=new WeakSet,ve=new WeakSet,be=new WeakSet,we=new WeakSet,xe=new WeakSet,Se=new WeakSet;function Ee(e){return Array.isArray(e)?(ge.has(e)||(ke(e),Ae(e)||Pe(e)),e):e}function ke(e){return!!Array.isArray(e)&&(!!me.has(e)||!ve.has(e)&&(e.every(e=>j(e))?(ge.add(e),me.add(e),!0):(ve.add(e),!1)))}function Ne(e,t){if(!ke(e))throw new n(`Expected a vector, but got ${e}`,t)}function $e(e,t){if(Ne(e,t),0===e.length)throw new n(`Expected a non empty vector, but got ${e}`,t)}function Pe(e){if(!Array.isArray(e))return!1;if(xe.has(e))return!0;if(Se.has(e))return!1;if(0===e.length)return Se.add(e),!1;if(!Array.isArray(e[0]))return Se.add(e),!1;const t=e[0].length;for(const n of e.slice(1)){if(!Array.isArray(n))return Se.add(e),!1;if(n.length!==t)return Se.add(e),!1}return ge.add(e),xe.add(e),!0}function Ae(e){if(!Array.isArray(e))return!1;if(be.has(e))return!0;if(we.has(e))return!1;if(0===e.length)return we.add(e),!1;if(!Array.isArray(e[0])||0===e[0].length)return we.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 we.add(e),!1;return ge.add(e),xe.add(e),be.add(e),!0}function Ie(e,t){let r=!1,o=!1;for(const i of e)if(ke(i))r=!0;else if(Ae(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(Ae(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=>Ae(e)?e:Array.from({length:o},()=>Array.from({length:i},()=>e)))]}if(r){let r=null;for(const o of e)if(ke(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=>ke(e)?e:Array.from({length:r},()=>e))]}return["number",e]}function je(e){return(t,n)=>{const[r,o]=Ie(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 Ce(e){return(t,n)=>{const[r,o]=Ie(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 Oe(e,t){return(n,r)=>{if(0===n.length)return e;const[o,i]=Ie(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 Ue={inc:{evaluate:je(e=>e+1),arity:G(1)},dec:{evaluate:je(e=>e-1),arity:G(1)},"+":{evaluate:Oe(0,(e,t)=>e+t),arity:{}},"*":{evaluate:Oe(1,(e,t)=>e*t),arity:{}},"/":{evaluate:(e,t)=>{if(0===e.length)return 1;const[n,r]=Ie(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]=Ie(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:Ce((e,t)=>Math.trunc(e/t)),arity:G(2)},mod:{evaluate:Ce((e,t)=>e-t*Math.floor(e/t)),arity:G(2)},"%":{evaluate:Ce((e,t)=>e%t),arity:G(2)},sqrt:{evaluate:je(e=>Math.sqrt(e)),arity:G(1)},cbrt:{evaluate:je(e=>Math.cbrt(e)),arity:G(1)},"^":{evaluate:Ce((e,t)=>e**t),arity:G(2)},round:{evaluate:([e,t],n)=>{const[r,o]=Ie([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:je(e=>Math.trunc(e)),arity:G(1)},floor:{evaluate:je(e=>Math.floor(e)),arity:G(1)},ceil:{evaluate:je(e=>Math.ceil(e)),arity:G(1)},min:{evaluate:(e,t)=>{if(1===e.length&&ke(e[0])){const n=e[0];return $e(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&&ke(e[0])){const n=e[0];return $e(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:je(e=>Math.abs(e)),arity:G(1)},sign:{evaluate:je(e=>Math.sign(e)),arity:G(1)}};function Fe([e,...t],n){const r=U(e,n);for(const e of t)if(!oe(r,U(e,n),n))return!1;return!0}const Me={"==":{evaluate:(e,t)=>Fe(e,t),arity:{min:1}},"≠":{evaluate:(e,t)=>!Fe(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=ee(e);for(const e of t){if(re(r,ee(e),n)<=0)return!1;r=ee(e)}return!0},arity:{min:1}},"<":{evaluate:([e,...t],n)=>{let r=ee(e);for(const e of t){if(re(r,ee(e),n)>=0)return!1;r=ee(e)}return!0},arity:{min:1}},">=":{evaluate:([e,...t],n)=>{let r=ee(e);for(const e of t){if(re(r,ee(e),n)<0)return!1;r=ee(e)}return!0},arity:{min:1}},"<=":{evaluate:([e,...t],n)=>{let r=ee(e);for(const e of t){if(re(r,ee(e),n)>0)return!1;r=ee(e)}return!0},arity:{min:1}},"!":{evaluate:([e])=>!e,arity:G(1)},"epoch->iso-date":{evaluate:([e],t)=>(C(e,t),new Date(e).toISOString()),arity:G(1)},"iso-date->epoch":{evaluate:([e],t)=>{H(e,t);const n=new Date(e).valueOf();return C(n,t,{finite:!0}),n},arity:G(1)},"write!":{evaluate:(e,t)=>(console.log(...e),e.length>0?U(e[e.length-1],t):null),arity:{}},boolean:{evaluate:([e])=>!!e,arity:G(1)},compare:{evaluate:([e,t],n)=>(te(e,n),te(t,n),re(e,t,n)),arity:G(2)},"json-parse":{evaluate:([e],t)=>(H(e,t),JSON.parse(e)),arity:G(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)=>{H(e,t);const o=e.indexOf(".");if(-1!==o){const i=e.substring(0,o),a=e.substring(o+1),s=r.getModule(i);if(!s)throw new n(`Unknown module: '${i}'`,t);const u=s.functions[a];if(!u)throw new n(`Function '${a}' not found in module '${i}'`,t);return{[l]:!0,sourceCodeInfo:t,functionType:"Module",moduleName:i,functionName:a,arity:u.arity}}const i=e,a=r.getModule(i);if(!a)throw new n(`Unknown module: '${i}'`,t);const s={};for(const[e,n]of Object.entries(a.functions))s[e]={[l]:!0,sourceCodeInfo:t,functionType:"Module",moduleName:i,functionName:e,arity:n.arity};return s},arity:G(1)}},Te={keys:{evaluate:([e],t)=>(B(e,t),Object.keys(e)),arity:G(1)},vals:{evaluate:([e],t)=>(B(e,t),Object.values(e)),arity:G(1)},entries:{evaluate:([e],t)=>(B(e,t),Object.entries(e)),arity:G(1)},find:{evaluate:([e,t],n)=>(B(e,n),H(t,n),ne(e,t)?[t,e[t]]:null),arity:G(2)},dissoc:{evaluate:([e,t],n)=>{B(e,n),H(t,n);const r={...e};return delete r[t],r},arity:G(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),a=e.slice(1,-1);return B(o,t),J(i,t),a.reduce((e,o)=>(B(o,t),Object.entries(o).forEach(o=>{const a=K(o[0],t),s=ie(o[1]);ne(e,a)?e[a]=r(i,[e[a],s],n,t):e[a]=s}),e),{...o})},arity:{min:2}},zipmap:{evaluate:([e,t],n)=>{fe(e,n),le(t,n);const r=Math.min(e.length,t.length),o={};for(let i=0;i<r;i+=1){o[K(e[i],n)]=ie(t[i])}return o},arity:G(2)},"select-keys":{evaluate:([e,t],n)=>(fe(t,n),B(e,n),t.reduce((t,n)=>(ne(e,n)&&(t[n]=ie(e[n])),t),{})),arity:G(2)}},_e={"function?":{evaluate:([e])=>w(e),arity:G(1)},"string?":{evaluate:([e])=>"string"==typeof e,arity:G(1)},"number?":{evaluate:([e])=>"number"==typeof e,arity:G(1)},"integer?":{evaluate:([e])=>"number"==typeof e&&j(e,{integer:!0}),arity:G(1)},"boolean?":{evaluate:([e])=>"boolean"==typeof e,arity:G(1)},"null?":{evaluate:([e])=>null==e,arity:G(1)},"zero?":{evaluate:([e],t)=>(C(e,t,{finite:!0}),Math.abs(e)<ue),arity:G(1)},"pos?":{evaluate:([e],t)=>(C(e,t,{finite:!0}),e>0),arity:G(1)},"neg?":{evaluate:([e],t)=>(C(e,t,{finite:!0}),e<0),arity:G(1)},"even?":{evaluate:([e],t)=>(C(e,t,{finite:!0}),e%2==0),arity:G(1)},"odd?":{evaluate:([e],t)=>(C(e,t,{finite:!0}),j(e,{integer:!0})&&e%2!=0),arity:G(1)},"array?":{evaluate:([e])=>Array.isArray(e),arity:G(1)},"collection?":{evaluate:([e])=>R(e),arity:G(1)},"sequence?":{evaluate:([e])=>M(e),arity:G(1)},"object?":{evaluate:([e])=>_(e),arity:G(1)},"regexp?":{evaluate:([e])=>V(e),arity:G(1)},"finite?":{evaluate:([e],t)=>(C(e,t),Number.isFinite(e)),arity:G(1)},"positive-infinity?":{evaluate:([e],t)=>(C(e,t),e===Number.POSITIVE_INFINITY),arity:G(1)},"negative-infinity?":{evaluate:([e],t)=>(C(e,t),e===Number.NEGATIVE_INFINITY),arity:G(1)},"true?":{evaluate:([e])=>!0===e,arity:G(1)},"false?":{evaluate:([e])=>!1===e,arity:G(1)},"empty?":{evaluate:([e],t)=>null===e||(z(e,t),"string"==typeof e||Array.isArray(e)?0===e.length:0===Object.keys(e).length),arity:G(1)},"not-empty?":{evaluate:([e],t)=>null!==e&&(z(e,t),"string"==typeof e||Array.isArray(e)?e.length>0:Object.keys(e).length>0),arity:G(1)},"vector?":{evaluate:([e])=>ke(e),arity:G(1)},"matrix?":{evaluate:([e])=>Ae(e),arity:G(1)},"grid?":{evaluate:([e])=>Pe(e),arity:G(1)}},Be={regexp:{evaluate:([e,t],r)=>{H(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(!V(e))throw g("RegularExpression",e,t)}(t,n),!Z(e))return null;const r=new RegExp(t.s,t.f).exec(e);return r?[...r]:null},arity:G(2)},replace:{evaluate:([e,t,n],r)=>{H(e,r),L(t,r),H(n,r);const o=V(t)?new RegExp(t.s,`${t.f}`):t;return e.replace(o,n)},arity:G(3)},"replace-all":{evaluate:([e,t,n],r)=>{H(e,r),L(t,r),H(n,r);const o=V(t)?new RegExp(t.s,`${t.f.includes("g")?t.f:`${t.f}g`}`):t;return e.replaceAll(o,n)},arity:G(3)}},Re=/^\s*$/,De={str:{evaluate:e=>e.reduce((e,t)=>e+(null==t?"":_(t)||Array.isArray(t)?JSON.stringify(t):`${t}`),""),arity:{}},number:{evaluate:([e],t)=>{H(e,t);const r=Number(e);if(Number.isNaN(r))throw new n(`Could not convert '${e}' to a number.`,t);return r},arity:G(1)},"lower-case":{evaluate:([e],t)=>(H(e,t),e.toLowerCase()),arity:G(1)},"upper-case":{evaluate:([e],t)=>(H(e,t),e.toUpperCase()),arity:G(1)},trim:{evaluate:([e],t)=>(H(e,t),e.trim()),arity:G(1)},join:{evaluate:([e,t],n)=>(le(e,n),e.forEach(e=>te(e,n)),H(t,n),e.join(t)),arity:G(2)},split:{evaluate:([e,t,n],r)=>{H(e,r),L(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||(H(e,t),Re.test(e)),arity:G(1)}},ze={"|>":{evaluate:([e,t],n,r,{executeFunction:o})=>(J(t,n),o(t,[e],r,n)),arity:G(2)},apply:{evaluate:([e,...t],n,r,{executeFunction:o})=>{J(e,n);const i=t[t.length-1];le(i,n);return o(e,[...t.slice(0,-1),...i],r,n)},arity:{min:2}},identity:{evaluate:([e])=>ie(e),arity:G(1)},comp:{evaluate:(e,t)=>{return e.forEach(e=>J(e,t)),{[l]:!0,sourceCodeInfo:t,functionType:"Comp",params:e,arity:e.length>0?(n=e.at(-1),"number"==typeof n||R(n)?G(1):n.arity):{min:1,max:1}};var n},arity:{}},constantly:{evaluate:([e],t)=>({[l]:!0,sourceCodeInfo:t,functionType:"Constantly",value:ie(e),arity:{}}),arity:G(1)}};function Ve(e){return ce(`\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(", ")})`} -> ${Le(r)}`),a=o?["","Operator:",` a ${e} b -> ${Le(r)}`]:[];return[...i,...a]}(e).join("\n ")}\n\n Arguments:\n ${function(e){return Object.entries(e.args).map(([e,t])=>`${e}: ${Le(t)}`)}(e).join("\n ")}\n\n Examples:\n${e.examples.map(e=>ce(e,4)).join("\n\n")}`)}function Le(e){const t=e.type,n=(Array.isArray(t)?t:[t]).join(" | ");return e.array||e.rest?`Array<${n}>`:n}const We={sum:{evaluate:([e],t)=>(Ne(e,t),e.reduce((e,t)=>e+t,0)),arity:G(1)},prod:{evaluate:([e],t)=>(Ne(e,t),e.reduce((e,t)=>e*t,1)),arity:G(1)},mean:{evaluate:([e],t)=>($e(e,t),e.reduce((e,t)=>e+t,0)/e.length),arity:G(1)},median:{evaluate:([e],t)=>($e(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:G(1)}},Je={...X,...he,...pe,...ye,...Ue,...function(e){return{doc:{evaluate:([t],n)=>{if(v(e),J(t,n),!w(t))return"";if("Builtin"===t.functionType){const n=e[t.name];return n?Ve(n):""}return"UserDefined"===t.functionType||"NativeJsFunction"===t.functionType?t.docString:""},arity:G(1)},arity:{evaluate:([e],t)=>(J(e,t),w(e)?e.arity:G(1)),arity:G(1)}}}({}),...Me,...Te,..._e,...Be,...De,...ze,...We};Object.entries(Je).forEach(([e,t])=>{t.name=e});const qe={...Je},Ye={},Ge=[];Object.entries(qe).forEach(([e,t],n)=>{Ye[e]=n,Ge.push(t)});const Xe={arity:{},evaluate:(e,t,{evaluateNode:n})=>{let r=!0;for(const o of e[1][1])if(r=n(o,t),!r)break;return r},evaluateAsNormalExpression:(e,t)=>{let n=!0;for(const r of e)if(n=U(r,t),!n)break;return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)};function Ze(e){const t=e[0];return a.UserDefinedSymbol===t||a.NormalBuiltinSymbol===t||a.SpecialBuiltinSymbol===t}function He(e){return a.UserDefinedSymbol===e[0]}function Ke(e,t){return function(e,t){if(!He(e))throw g("UserDefinedSymbolNode",e,t)}(e,t),e}function Qe(e){return a.NormalBuiltinSymbol===e[0]}function et(e){return a.SpecialBuiltinSymbol===e[0]}function tt(e){return!!function(e){return e[0]===a.NormalExpression}(e)&&Ze(e[1][0])}function nt(e){return e[0]===a.Spread}const rt={arity:G(1),evaluate:(e,t)=>{const n=e[1][1];if(function(e,t){if(!Ze(e))throw g("SymbolNode",e,t)}(n),!He(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 ot=11,it=12,at=13,st=14;function ut(e,t){if(e[0]===at)Object.values(e[1][0]).forEach(e=>{e[1][1]&&t(e[1][1]),ut(e,t)});else if(e[0]===st)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]),ut(r,t))}}function ct(e,t,n){const r={};return lt(e,t,n,e[2],r),r}function lt(e,t,r,o,i){if(e[0]===at){!function(e,t){if(!b(e))throw new n(`Expected UnknownRecord, got ${p(e)}.`,y(e,t))}(t,o);const a=new Set;let s;if(Object.entries(e[1][0]).forEach(([e,n])=>{if(n[0]===it)return void(s=n);a.add(e);const u=(void 0!==t[e]?t[e]:n[1][1]&&r(n[1][1]))??null;F(u,o),lt(n,u,r,o,i)}),s){const e=Object.entries(t).filter(([e])=>!a.has(e)).reduce((e,[t,n])=>(e[t]=U(n),e),{});i[s[1][0]]=e}}else if(e[0]===st){let n=null;le(t,o);for(let a=0;a<e[1][0].length;a+=1){const s=e[1][0][a]??null;if(null===s)continue;if(s[0]===it){n=a;break}const u=(void 0!==t[a]?t[a]:s[1][1]&&r(s[1][1]))??null;F(u,o),lt(s,u,r,o,i)}if(null!==n){const r=t.slice(n),o=e[1][0][n];i[o[1][0]]=r}}else e[0]===it?i[e[1][0]]=U(t):i[e[1][0][1]]=U(t)}function ft(e){const t={};return dt(e,t),t}function dt(e,t){if(null!==e)if(e[0]===st)for(const n of e[1][0])dt(n,t);else if(e[0]===at)for(const n of Object.values(e[1][0]))dt(n,t);else if(e[0]===it){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 ht={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1],o=r[1][0],i=r[1][1],a=n(i,t),s=ct(o,a,e=>n(e,t));return t.exportValues(s,o[2]),a},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const i=e[1][1],a=i[1][0],s=i[1][1],u=n([s],t,r,o);return ut(a,e=>{se(u,n([e],t,r,o))}),t.addValues(ft(a),a[2]),u}},pt={arity:{},evaluate:(e,t,{builtin:n,getUndefinedSymbols:r,evaluateNode:o})=>{const i=e[1][1],a=e[1][2],s=function(e,t,n,r,o){const i={},a=e[0].reduce((e,t)=>(Object.keys(ft(t)).forEach(t=>{e[t]={value:null}}),e),{}),s=r(e[1],t.new(a),n,o);s.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=s[0].filter(e=>e[0]!==it&&void 0===e[1][1]).length,c={min:u>0?u:void 0,max:s[0].some(e=>e[0]===it)?void 0:s[0].length};return{[l]:!0,sourceCodeInfo:e[2],functionType:"UserDefined",name:void 0,evaluatedfunction:s,arity:c,docString:a}},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>function(e,t,n,r,o){const i=new Set,a={self:{value:null}};e[0].forEach(e=>{Object.assign(a,ft(e)),ut(e,e=>{se(i,n([e],t,r,o))})});const s=t.create(a),u=n(e[1],s,r,o);return se(i,u),i}(e[1][1],t,n,r,o)};const yt={arity:G(0),evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1],o=r[1][0],i=r[1][1],a=n(i,t),s=ct(o,a,e=>n(e,t));return t.addValues(s,o[2]),a},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const i=e[1][1],a=i[1][0],s=i[1][1],u=n([s],t,r,o);return ut(a,e=>{se(u,n([e],t,r,o))}),t.addValues(ft(a),a[2]),u}},gt={arity:{},evaluate:(e,r,{evaluateNode:o})=>{const i=e[1][1],a=i.reduce((e,t)=>{const n=o(t[1][1],r.create(e)),i=ct(t[1][0],n,e=>o(e,r));return Object.entries(i).forEach(([t,n])=>{e[t]={value:n}}),e},{}),s=r.create(a),u=e[1][2];for(;;){let c=null;try{c=o(u,s)}catch(s){if(s instanceof t){const t=s.params;if(t.length!==i.length)throw new n(`recur expected ${i.length} parameters, got ${p(t.length)}`,e[2]);i.forEach((e,n)=>{const i=ct(e[1][0],U(t[n]),e=>o(e,r));for(const[e,t]of Object.entries(i))a[e].value=t});continue}throw s}return c}},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const i=e[1][1],a=i.reduce((e,t)=>{const n=ft(t[1][0]);return Object.keys(n).forEach(t=>{e[t]={value:!0}}),e},{});return ae(n(i.map(e=>e[1][1]),t,r,o),n([e[1][2]],t.create(a),r,o))}};function mt(e,t,n,r){for(const o of e){const[e,i]=o[1],a=ct(e,r(i,n),e=>r(e,n));Object.entries(a).forEach(([e,n])=>{t[e]={value:n}})}}function vt(e,t,n,r){const o=t[2],[,i,a]=t[1],s=[],u=i.map(()=>0);let c=!1;for(;!c;){const t={},l=n.create(t);let f=!1;e:for(let e=0;e<i.length;e+=1){const[n,a,s,d]=i[e],[h,p]=n[1],y=D(r(p,l),o),g=M(y)?y:Object.entries(y);if(0===g.length){f=!0,c=!0;break}const v=m(u[e],o);if(v>=g.length){if(f=!0,0===e){c=!0;break}u[e]=0,u[e-1]=m(u[e-1],o)+1;break}const b=ct(h,U(g[v],o),e=>r(e,l));if(Object.entries(b).forEach(([e,n])=>{t[e]={value:n}}),a&&mt(a,t,l,r),s&&!r(s,l)){u[e]=m(u[e],o)+1,f=!0;break e}if(d&&!r(d,l)){u[e]=Number.POSITIVE_INFINITY,f=!0;break e}}if(!f){const t=r(a,l);e&&s.push(t),u.length>0&&(u[u.length-1]+=1)}}return e?s:null}function bt(e,t,n,r,o){const i=new Set,a={},[,s,u]=e[1];return s.forEach(e=>{const[s,u,c,l]=e,[f,d]=s[1];n([d],t.create(a),r,o).forEach(e=>i.add(e)),Object.assign(a,ft(f)),u&&u.forEach(e=>{const[s,u]=e[1];n([u],t.create(a),r,o).forEach(e=>i.add(e)),Object.assign(a,ft(s))}),c&&n([c],t.create(a),r,o).forEach(e=>i.add(e)),l&&n([l],t.create(a),r,o).forEach(e=>i.add(e))}),n([u],t.create(a),r,o).forEach(e=>i.add(e)),i}const wt={arity:G(1),evaluate:(e,t,n)=>vt(!0,e,t,n.evaluateNode),getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>bt(e,t,n,r,o)},xt={arity:G(1),evaluate:(e,t,n)=>(vt(!1,e,t,n.evaluateNode),null),getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>bt(e,t,n,r,o)},St={arity:{},evaluate:(e,t,{evaluateNode:n})=>{let r=!1;for(const o of e[1][1])if(r=n(o,t),r)break;return r},evaluateAsNormalExpression:(e,t)=>{let n=!1;for(const r of e)if(n=U(r,t),n)break;return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},Et={arity:{min:1},evaluate:(e,t,{evaluateNode:n})=>{for(const r of e[1][1]){if(He(r)&&null===t.lookUp(r))continue;const e=n(r,t);if(null!==e)return e}return null},evaluateAsNormalExpression:(e,t)=>{for(const n of e){const e=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)},kt={arity:{},evaluate:(e,n,{evaluateNode:r})=>{const o=e[1][1].map(e=>r(e,n));throw new t(o)},evaluateAsNormalExpression:e=>{throw new t(e)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},Nt={arity:G(1),evaluate:(e,t,{evaluateNode:n})=>{const o=K(n(e[1][1],t),e[2],{nonEmpty:!0});throw new r(o,e[2])},evaluateAsNormalExpression:(e,t)=>{const n=K(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)},$t={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[,r,o,i]=e[1];try{return n(r,t)}catch(e){const r=o?{[o[1]]:{value:e}}:{};return n(i,t.create(r))}},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const[,i,a,s]=e[1],u=n([i],t,r,o),c=a?{[a[1]]:{value:!0}}:{};return ae(u,n([s],t.create(c),r,o))}},Pt={arity:{},evaluate:(e,t,{evaluateNode:r})=>{const o=[];for(const i of e[1][1])if(nt(i)){const e=r(i[1],t);if(!Array.isArray(e))throw new n("Spread value is not an array",i[2]);o.push(...e)}else o.push(r(i,t));return o},evaluateAsNormalExpression:(e,t)=>{const n=[];for(const r of e)n.push(U(r,t));return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},At={arity:{},evaluate:(e,t,{evaluateNode:r})=>{const o={},i=e[1][1];for(let e=0;e<i.length;e+=2){const a=i[e];if(nt(a)){const i=r(a[1],t);if(!b(i))throw new n("Spread value is not an object",a[2]);Object.assign(o,i),e-=1}else{const s=r(a,t),u=i[e+1];if(void 0===u)throw new n("Missing value for key",a[2]);const c=r(u,t);H(s,a[2]),o[s]=c}}return o},evaluateAsNormalExpression:(e,t)=>{const n={};for(let r=0;r<e.length;r+=2){const o=e[r],i=e[r+1];H(o,t),n[o]=i??null}return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},It={"??":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},jt=[Et,Xe,St,Pt,{arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1];for(const[e,o]of r){if(n(e,t))return n(o,t)}return null},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1].flat(),t,r,o)},ht,rt,{arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=t.create({});let o=null;for(const t of e[1][1])o=n(t,r);return o},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t.create({}),r,o)},xt,pt,wt,{arity:{min:2,max:3},evaluate:(e,t,{evaluateNode:n})=>{const[r,o,i]=e[1][1];return n(r,t)?n(o,t):i?n(i,t):null},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1].filter(e=>!!e),t,r,o)},yt,gt,At,kt,{arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[,r,o]=e[1],i=n(r,t);for(const[e,r]of o){if(n(e,t)===i)return n(r,t)}return null},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n([e[1][1],...e[1][2].flat()],t,r,o)},Nt,$t,{arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[r,o,i]=e[1][1];return n(r,t)?i?n(i,t):null:n(o,t)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1].filter(e=>!!e),t,r,o)}],Ct={normalExpressions:qe,specialExpressions:jt,allNormalExpressions:Ge},Ot=Object.keys(qe),Ut=Object.keys(It),Ft=(e,t,n,r)=>{const o=Array.isArray(e)?e:[[a.SpecialExpression,[It.block,e.body]]],i=new Set;for(const e of o)Mt(e,t,n,r)?.forEach(e=>i.add(e));return i};function Mt(e,t,r,o){const i=e[0];switch(i){case a.UserDefinedSymbol:{const n=e;return null===t.lookUp(n)?new Set([n[1]]):null}case a.NormalBuiltinSymbol:case a.SpecialBuiltinSymbol:case a.String:case a.Number:case a.ReservedSymbol:case a.Binding:return null;case a.NormalExpression:{const n=e,i=new Set;if(tt(n)){const[,[e]]=n;if(He(e)){null===t.lookUp(e)&&i.add(e[1])}}else{const[,[e]]=n;Mt(e,t,r,o)?.forEach(e=>i.add(e))}for(const e of n[1][1])Mt(e,t,r,o)?.forEach(e=>i.add(e));return i}case a.SpecialExpression:{const n=e,i=n[1][0];return(0,r.specialExpressions[i].getUndefinedSymbols)(n,t,{getUndefinedSymbols:Ft,builtin:r,evaluateNode:o})}case a.Spread:return Mt(e[1],t,r,o);default:throw new n(`Unhandled node type: ${i}`,e[2])}}const Tt=(1+Math.sqrt(5))/2,_t={E:Math.E,"-E":-Math.E,"ε":Math.E,"-ε":-Math.E,PI:Math.PI,"-PI":-Math.PI,"π":Math.PI,"-π":-Math.PI,PHI:Tt,"-PHI":-Tt,"φ":Tt,"-φ":-Tt,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},Bt={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,..._t};const Rt={NativeJsFunction:(e,t,r)=>{try{return ie(e.nativeFn.fn(...t))}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:a})=>{for(;;){if(!q(e.arity,r.length))throw new n(`Expected ${e.arity} arguments, got ${r.length}.`,o);const s=e.evaluatedfunction,u=s[0],c=u.filter(e=>e[0]!==it).length,l=i.create(e.evaluatedfunction[2]),f={self:{value:e}},d=[];for(let e=0;e<r.length;e+=1)if(e<c){const t=ie(r[e]),n=ct(u[e],t,e=>a(e,l.create(f)));Object.entries(n).forEach(([e,t])=>{f[e]={value:t}})}else d.push(ie(r[e]));for(let e=r.length;e<c;e++){const t=u[e],n=ct(t,a(t[1][1],i.create(f)),e=>a(e,i.create(f)));Object.entries(n).forEach(([e,t])=>{f[e]={value:t}})}const h=u.find(e=>e[0]===it);if(void 0!==h){const e=ct(h,d,e=>a(e,i.create(f)));Object.entries(e).forEach(([e,t])=>{f[e]={value:t}})}try{let e=null;const t=l.create(f);for(const n of s[1])e=a(n,t);return e}catch(e){if(e instanceof t){r=e.params;continue}throw e}}},Partial:(e,t,r,o,{executeFunction:i})=>{const a=[...e.params];if(t.length!==e.placeholders.length)throw new n(`(partial) expects ${e.placeholders.length} arguments, got ${t.length}.`,r);const s=[...t];for(const t of e.placeholders)a.splice(t,0,s.shift());return i(e.function,a,o,r)},Comp:(e,t,r,o,{executeFunction:i})=>{const{params:a}=e;if(0===a.length){if(1!==t.length)throw new n(`(comp) expects one argument, got ${p(t.length)}.`,r);return U(t[0],r)}return U(a.reduceRight((e,t)=>[i(W(t,r),e,o,r)],t)[0],r)},Constantly:e=>e.value,Juxt:(e,t,n,r,{executeFunction:o})=>e.params.map(e=>o(W(e,n),t,r,n)),Complement:(e,t,n,r,{executeFunction:o})=>!o(e.function,t,r,n),EveryPred:(e,t,n,r,{executeFunction:o})=>{for(const i of e.params)for(const e of t){if(!o(W(i,n),[e],r,n))return!1}return!0},SomePred:(e,t,n,r,{executeFunction:o})=>{for(const i of e.params)for(const e of t){if(o(W(i,n),[e],r,n))return!0}return!1},Fnull:(e,t,n,r,{executeFunction:o})=>{const i=t.map((t,n)=>null===t?ie(e.params[n]):t);return o(W(e.function,n),i,r,n)},Builtin:(e,t,n,r,{executeFunction:o})=>m(Ge[e.normalBuiltinSymbolType],n).evaluate(t,n,r,{executeFunction:o}),SpecialBuiltin:(e,t,r,o,{executeFunction:i})=>{const a=m(jt[e.specialBuiltinSymbolType],r);if(a.evaluateAsNormalExpression)return a.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 a=o.getModule(e.moduleName);if(!a)throw new n(`Module '${e.moduleName}' not found.`,r);const s=a.functions[e.functionName];if(!s)throw new n(`Function '${e.functionName}' not found in module '${e.moduleName}'.`,r);return Y(s.arity,t.length,r),s.evaluate(t,r,o,{executeFunction:i})}};function Dt(e,t){let n=null;for(const r of e.body)n=zt(r,t);return n}function zt(e,t){switch(e[0]){case a.Number:case a.String:return function(e){return e[1]}(e);case a.NormalBuiltinSymbol:case a.SpecialBuiltinSymbol:case a.UserDefinedSymbol:return t.evaluateSymbol(e);case a.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(Bt[t],e[2])}(e);case a.NormalExpression:{const r=function(e,t){const r=e[2],i=e[1][1],s=[],u=[];if(i.forEach((e,r)=>{if(nt(e)){const r=zt(e[1],t);if(!Array.isArray(r))throw new n(`Spread operator requires an array, got ${p(e)}`,e[2]);s.push(...r)}else e[0]===a.ReservedSymbol&&"_"===e[1]?u.push(r):s.push(zt(e,t))}),tt(e)){const n=e[1][0];if(u.length>0){const e=zt(n,t);return{[l]:!0,function:W(e,r),functionType:"Partial",params:s,placeholders:u,sourceCodeInfo:r,arity:G(u.length)}}if(Qe(n)){const r=n[1];return Ct.allNormalExpressions[r].evaluate(s,e[2],t,{executeFunction:Vt})}{const i=t.getValue(n[1]);if(void 0!==i)return Vt(W(i,r),s,t,r);throw new o(n[1],e[2])}}{const n=W(zt(e[1][0],t),r);if(u.length>0){return{[l]:!0,function:n,functionType:"Partial",params:s,placeholders:u,sourceCodeInfo:r,arity:G(u.length)}}return Vt(n,s,t,r)}}(e,t);if("number"==typeof r&&Number.isNaN(r))throw new n("Number is NaN",e[2]);return Ee(r)}case a.SpecialExpression:return Ee(function(e,t){const n=e[1][0],r=m(Ct.specialExpressions[n],e[2]);return(0,r.evaluate)(e,t,{evaluateNode:zt,builtin:Ct,getUndefinedSymbols:Ft})}(e,t));default:throw new n(`${u(e[0])}-node cannot be evaluated`,e[2])}}function Vt(e,t,r,o){if(w(e))return Rt[e.functionType](e,t,o,r,{evaluateNode:zt,executeFunction:Vt});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}),ie(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 H(o,r),ie(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=ie(t[0]);if(_(o))return ie(o[e]);if(j(o,{integer:!0}))return ie(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),ie(o[e])}(e,t,o);throw new n("Unexpected function type",o)}class Lt{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 Lt({contexts:[e,...this.contexts],values:this.values,nativeJsFunctions:this.nativeJsFunctions,modules:this.modules});return n.globalContext=t,n}new(e){return new Lt({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=Wt(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=Wt(o);if(e)throw new n(`Cannot shadow ${e}`,t);r[o]={value:ie(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:ie(n)};const r=this.nativeJsFunctions?.[t];return r?{value:r}:null}evaluateSymbol(e){if(et(e)){const t=e[1];switch(t){case It["&&"]:case It["||"]:case It.array:case It.object:case It["defined?"]:case It.recur:case It.throw:case It["??"]:{const n=m(Ct.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(Qe(e)){const t=e[1],n=Ge[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 Wt(e){return Ut.includes(e)?`special expression "${e}"`:Ot.includes(e)?`builtin function "${e}"`:"self"===e?`builtin value "${e}"`:null}function Jt(e={},t){const r=e.globalContext??{},o=e.contexts?[r,...e.contexts]:[r],i=new Lt({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 a=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);a[e]||(a[e]={}),a=a[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 s={functionType:"NativeJsFunction",nativeFn:r,name:i,[l]:!0,arity:r.arity??{},docString:r.docString??""};return a===e&&function(e){const t=Wt(e);if(t)throw new n(`Cannot shadow ${t}`,void 0)}(i),a[i]=s,e},{})});return e.globalModuleScope?i:i.create({})}const qt=["^","*","/","%","+","-","<<",">>",">>>","++","<","<=","≤",">",">=","≥","==","!=","≠","&","xor","|","&&","||","??","|>"],Yt=[...qt,"?",":","->","...",".",",","=",":",";"],Gt=new Set(["comment","cond","def","defined?","block","doseq","if","let","loop","recur","throw","try","unless","while"]);function Xt(e){return!Gt.has(e)}const Zt=new Set(qt);function Ht(e){return Zt.has(e)}const Kt=new Set(Yt);function Qt(e){return Kt.has(e)}const en=["(",")","[","]","{","}","'",'"',"`",",",".",";"," ","\n","\r","\t"],tn=["0","1","2","3","4","5","6","7","8","9",...en],nn=new Set(en),rn=new Set(tn),on=/\s/,an=[0],sn=(e,t)=>{if('"'!==e[t])return an;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 un(e,t,n,r){return t===n.slice(r,r+t.length)?[t.length,[e,t]]:an}const cn=/\d/,ln=/[0-7]/,fn=/[0-9a-f]/i,dn=/[01]/,hn=/[\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(!rn.has(n)){const r=t;let o=e[t+=1];for(;o&&!nn.has(o);)n+=o,o=e[t+=1];return n.endsWith(":")?[t-r-1,["Symbol",n.slice(0,-1)]]:[t-r,["Symbol",n]]}return an},yn=[(e,t)=>{let n=e[t];if(!n||!on.test(n))return an;let r=n;for(n=e[t+=1];n&&on.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 an},(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 an},(e,t)=>{const n=pn(e,t);if(0===n[0]||!n[1])return an;let r=n[1][1];r=r.startsWith("'")?r.slice(1,r.length-1):r;return void 0===Bt[r]?an:[n[0],["ReservedSymbol",r]]},(e,t)=>un("LParen","(",e,t),(e,t)=>un("RParen",")",e,t),(e,t)=>un("LBracket","[",e,t),(e,t)=>un("RBracket","]",e,t),(e,t)=>un("LBrace","{",e,t),(e,t)=>un("RBrace","}",e,t),(e,t)=>{if('"'!==e[t]||'"'!==e[t+1]||'"'!==e[t+2])return an;let n='"""',r=3,o=e[t+r],i=e.slice(t+r,t+r+3),a=!1;for(;o&&('"""'!==i||a);)r+=1,a?(a=!1,n+=o):("\\"===o&&(a=!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}`]]},sn,(e,t)=>{if("#"!==e[t])return an;const[n,r]=sn(e,t+1);if(!r)return an;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 an;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 an;let o;for(o=t+2;o<e.length;o+=1){const t=e[o];if("binary"===r&&!dn.test(t))break;if("octal"===r&&!ln.test(t))break;if("hex"===r&&!fn.test(t))break}const i=o-t;if(i<=2)return an;const a=e[o];return a&&!hn.test(a)?an:[i,["BasePrefixedNumber",e.substring(t,o)]]},(e,t)=>{let n;const r="-"===e[t],o="+"===e[t],i=r||o?t+1:t;let a=!1,s=!1;for(n=i;n<e.length;n+=1){const r=e[n];if("_"===r){if(!cn.test(e[n-1])||!cn.test(e[n+1]))return n===i?an:[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 an;if(a||s)return[n-t+1,["Error",e.substring(t,n+1),void 0,`Invalid number format at position ${n+1}`]];a=!0}else if("e"===r||"E"===r){if(n===i)return an;if(s)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),s=!0}else if(!cn.test(r))break}if((r||o)&&n===i)return an;const u=n-t;if(0===u)return an;const c=e[n];return c&&":"!==c&&!hn.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&&Qt(n))return[3,["Operator",n]];const r=e.slice(t,t+2);if(t+1<e.length&&Qt(r))return[2,["Operator",r]];const o=e[t]??"";return Qt(o)?[1,["Operator",o]]:an},pn];function gn(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 mn(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 an})(e,t);if(t+=r,r>0)return[t-n,o]}for(const r of yn){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 vn(e,t){return"Symbol"===e?.[0]&&(!t||e[1]===t)}function bn(e,t){return function(e,t){vn(e,t)||Bn("Symbol",void 0,e)}(e,t),e}function wn(e,t){return"ReservedSymbol"===e?.[0]&&(!t||e[1]===t)}function xn(e,t){wn(e,t)||Bn("ReservedSymbol",t,e)}function Sn(e,t){return xn(e,t),e}function En(e,t){return"Operator"===e?.[0]&&(!t||e[1]===t)}function kn(e,t){En(e,t)||Bn("Operator",t,e)}function Nn(e){return"LParen"===e?.[0]}function $n(e){Nn(e)||Bn("LParen",void 0,e)}function Pn(e){return"RParen"===e?.[0]}function An(e){Pn(e)||Bn("RParen",void 0,e)}function In(e){return"LBracket"===e?.[0]}function jn(e){return function(e){In(e)||Bn("LBracket",void 0,e)}(e),e}function Cn(e){return"RBracket"===e?.[0]}function On(e){Cn(e)||Bn("RBracket",void 0,e)}function Un(e){return"LBrace"===e?.[0]}function Fn(e){return function(e){Un(e)||Bn("LBrace",void 0,e)}(e),e}function Mn(e){return"RBrace"===e?.[0]}function Tn(e){return"string"===e?.[0]}function _n(e){return"Operator"===e?.[0]&&Ht(e[1])}function Bn(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 Rn(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 Dn=new Set([...Ot,...Ut,...Object.keys(Bt)]);class zn{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 Dn.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 Vn{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 Ln(e,t){return t&&(e[2]=t),e}function Wn(e,t){return void 0!==It[e]&&"fn"!==e&&"def"!==e&&"defn"!==e?Ln([a.SpecialBuiltinSymbol,It[e]],t):void 0!==Ye[e]?Ln([a.NormalBuiltinSymbol,Ye[e]],t):Ln([a.UserDefinedSymbol,e],t)}function Jn(e){return e.substring(1,e.length-1).replace(/(\\{2})|(\\')|\\(.)/g,(e,t,n,r)=>t?"\\":n?"'":`\\${r}`)}const qn=Object.entries(Ye).reduce((e,[t,n])=>(e[n]=t,e),[]),Yn=Object.entries(It).reduce((e,[t,n])=>(e[n]=t,e),[]);function Gn(e){return He(e)?e[1]:Qe(e)?qn[e[1]]:Yn[e[1]]}function Xn(e,t,n){const r=Ln([a.NormalExpression,[e,t]],n);return Qe(e)&&Y(Ge[e[1]].arity,r[1][1].length,n),r}function Zn(e){if(e.isAtEnd())return!0;const t=e.tryPeek();return En(t)?[";",",",":"].includes(t[1]):!!wn(t)&&["else","when","while","case","catch","let","then","end","do"].includes(t[1])}function Hn(e,t,r,o,i){const s=e[1];switch(s){case"^":case"*":case"/":case"%":case"+":case"-":case"<<":case">>":case">>>":case"++":case"<":case"<=":case"≤":case">":case">=":case"≥":case"==":case"!=":case"≠":case"&":case"xor":case"|":case"|>":return Xn(t,[r,o],i);case"&&":case"||":case"??":return Ln([a.SpecialExpression,[It[s],[r,o]]],i);default:throw new n(`Unknown binary operator: ${s}`,i)}}function Kn(e){const t=e.peek();if(e.advance(),!vn(t))throw new n(`Expected symbol token, got ${t[0]}`,t[2]);return"'"===t[1][0]?Wn(Jn(t[1]),t[2]):Wn(t[1],t[2])}function Qn(e,{requireDefaultValue:t,noRest:r}={}){const o=e.tryPeek();if(vn(o)){const r=Kn(e);if(!He(r))throw new n("Expected user defined symbol",o[2]);const i=er(e);if(t&&!i)throw new n("Expected assignment",e.peekSourceCodeInfo());return Ln([ot,[r,i]],o[2])}if(En(o,"...")){if(r)throw new n("Rest element not allowed",o[2]);e.advance();const t=Ke(Kn(e));if(En(e.tryPeek(),"="))throw new n("Rest argument can not have default value",e.peekSourceCodeInfo());return Ln([it,[t[1],void 0]],o[2])}if(In(o)){e.advance();const r=[];let i=e.peek(),a=!1;for(;!Cn(i);){if(a)throw new n("Rest argument must be last",i[2]);if(En(i,",")){r.push(null),e.advance(),i=e.peek();continue}const t=Qn(e);t[0]===it&&(a=!0),r.push(t),i=e.peek(),Cn(i)||(kn(i,","),e.advance()),i=e.peek()}e.advance();const s=er(e);if(t&&!s)throw new n("Expected assignment",e.peekSourceCodeInfo());return Ln([st,[r,s]],o[2])}if(Un(o)){e.advance();const r={};let i=e.peek(),a=!1;for(;!Mn(i);){if(a)throw new n("Rest argument must be last",i[2]);En(i,"...")&&(a=!0,e.advance());const t=Kn(e),s=Gn(t);if(i=e.peek(),wn(i,"as")){if(a)throw new n("Rest argument can not have alias",i[2]);e.advance();const t=Ke(Kn(e));if(r[t[1]])throw new n(`Duplicate binding name: ${t}`,i[2]);r[s]=Ln([ot,[t,er(e)]],o[2])}else if(Mn(i)||En(i,",")||En(i,"=")){const s=Ke(t,t[2]);if(r[s[1]])throw new n(`Duplicate binding name: ${s}`,i[2]);if(a&&En(e.tryPeek(),"="))throw new n("Rest argument can not have default value",e.peekSourceCodeInfo());r[s[1]]=Ln(a?[it,[s[1],er(e)]]:[ot,[s,er(e)]],o[2])}else if(En(i,":")){if(e.advance(),i=e.peek(),!Un(i)&&!In(i))throw new n("Expected object or array",i[2]);r[s]=Qn(e)}Mn(e.peek())||(kn(e.peek(),","),e.advance()),i=e.peek()}e.advance(),i=e.peek();const s=er(e);if(t&&!s)throw new n("Expected assignment",i[2]);return Ln([at,[r,s]],o[2])}throw new n("Expected symbol",e.peekSourceCodeInfo())}function er(e){if(En(e.tryPeek(),"="))return e.advance(),e.parseExpression()}function tr(e,t){e.advance();const n=Qn(e,{requireDefaultValue:!0,noRest:!0}),r=n[1][1];n[1][1]=void 0;const o=Ln([a.Binding,[n,r]],t[2]);return Ln([a.SpecialExpression,[It.let,o]],t[2])}function nr(e,t){const r=[];for(;!e.isAtEnd()&&!rr(e,t);)En(e.tryPeek(),";")?e.advance():r.push(e.parseExpression());if(function(e,t){if(!rr(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]:Ln([a.SpecialExpression,[It.block,r]],e.peekSourceCodeInfo())}function rr(e,t){for(const n of t)if(wn(e.tryPeek(),n))return!0;return!1}function or(e){const t=function(e){const t=bn(e.tryPeek()),n=Ke(Kn(e));xn(e.tryPeek(),"in"),e.advance();const r=e.parseExpression();return Ln([a.Binding,[Ln([ot,[n,void 0]],t[2]),r]],t[2])}(e),r=[];let o=e.peek();ir(o,["let","when","while"]);const i=[];if("let"===o[1])for(r.push("&let");vn(o,"let");){const t=tr(e,o),r=i.flatMap(e=>Object.keys(ft(e[1][0])));if(Object.keys(ft(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(),ir(o,["let","when","while"]),o=e.peek()}let s,u;for(;wn(o,"when")||wn(o,"while");){e.advance(),"when"===o[1]?(r.push("&when"),s=e.parseExpression()):(r.push("&while"),u=e.parseExpression()),o=e.peek();ir(o,r.includes("&when")&&r.includes("&while")?[]:r.includes("&when")?["while"]:["when"]),o=e.peek()}return ir(o,[]),[t,i,s,u]}function ir(e,t){if(!function(e,t){if(En(e,",")||Pn(e))return!0;for(const n of t){if("let"===n&&vn(e,"let"))return!0;if(["when","while"].includes(n)&&wn(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 ar(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,a,s,u)=>t?"\\":r?"\n":o?"\t":i?"\r":a?"\b":s?"\f":n?'"':u);return Ln([a.String,n],t[2])}function sr(e,t=!1){const r=Sn(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=ar(e,n);return ce(r[1])}(e));const i=[];for(;!e.isAtEnd()&&!wn(e.tryPeek(),"end");)if(i.push(e.parseExpression()),En(e.tryPeek(),";"))e.advance();else if(!wn(e.tryPeek(),"end"))throw new n("Expected end",e.peekSourceCodeInfo());return xn(e.tryPeek(),"end"),e.advance(),[Ln([a.SpecialExpression,[It.block,i]],r[2]),o]}function ur(e){const t=Sn(e.tryPeek());e.advance();const n=t[1];return function(e){return e in _t}(n)?Ln([a.Number,_t[n]],t[2]):Ln([a.ReservedSymbol,t[1]],t[2])}const cr=/^\$([1-9]\d?)?$/;function lr(e){const t=e.peek();if(Nn(t)&&vn(e.peekAhead(1))&&En(e.peekAhead(2),"->"))return null;try{const r=function(e){const t=e.peek();if(vn(t))return[Ln([ot,[Kn(e),void 0]],t[2])];$n(t),e.advance();let r=!1,o=!1;const i=[];for(;!e.isAtEnd()&&!Pn(e.peek())&&!vn(e.peek(),"let");){if(r)throw new n("Rest argument must be last",e.peekSourceCodeInfo());const t=Qn(e);if(void 0!==t[1][1]&&(o=!0),t[0]===it&&(r=!0),o&&!t[1][1])throw new n("Default arguments must be last",e.peekSourceCodeInfo());if(i.push(t),!En(e.peek(),",")&&!Pn(e.peek())&&!vn(e.peek(),"let"))throw new n("Expected comma or closing parenthesis",e.peekSourceCodeInfo());En(e.peek(),",")&&e.advance()}if(!Pn(e.peek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),i}(e);if(!En(e.peek(),"->"))return null;let o;e.advance();let i="";if(wn(e.peek(),"do")){const t=sr(e,!0);i=t[1],o=t[0][1][1]}else o=[e.parseExpression()];return Ln([a.SpecialExpression,[It["0_lambda"],[r,o],i]],t[2])}catch{return null}}function fr(e,t){e.advance();const r=[];for(;!e.isAtEnd()&&!Pn(e.tryPeek());){En(e.tryPeek(),"...")?(e.advance(),r.push(Ln([a.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const t=e.tryPeek();if(!En(t,",")&&!Pn(t))throw new n("Expected comma or closing parenthesis",e.tryPeek()?.[2]);En(t,",")&&e.advance()}if(!Pn(e.tryPeek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());if(e.advance(),!et(t))return Qe(t)||He(t)?Xn(t,r,t[2]):Ln([a.NormalExpression,[t,r]],t[2]);{const e=t[1];switch(Y(Ct.specialExpressions[e].arity,r.length,t[2]),e){case It["||"]:case It["&&"]:case It.recur:case It.array:case It.object:case It["??"]:return Ln([a.SpecialExpression,[e,r]],t[2]);case It["defined?"]:{const[n]=r;return Ln([a.SpecialExpression,[e,n]],t[2])}case It.throw:{const[n]=r;return Ln([a.SpecialExpression,[e,n]],t[2])}case It["0_lambda"]:case It["0_def"]:throw new n(`${e} is not allowed`,t[2]);default:throw new n(`Unknown special expression: ${e}`,t[2])}}}function dr(e){const t=Fn(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!Mn(e.tryPeek());){if(En(e.tryPeek(),"..."))e.advance(),r.push(Ln([a.Spread,e.parseExpression()],e.peekSourceCodeInfo()));else{const t=e.tryPeek();if(Tn(t)){const n=ar(e,t);r.push(Ln([a.String,n[1]],t[2]))}else if(vn(t)){const n=t[1].startsWith("'")?Jn(t[1]):t[1];r.push(Ln([a.String,n],t[2])),e.advance()}else{if(!In(t))throw new n("Expected key to be a symbol or a string",e.peekSourceCodeInfo());e.advance(),r.push(e.parseExpression()),On(e.tryPeek()),e.advance()}kn(e.tryPeek(),":"),e.advance(),r.push(e.parseExpression())}const t=e.tryPeek();if(!En(t,",")&&!Mn(t))throw new n("Expected comma or closing brace",e.peekSourceCodeInfo());En(t,",")&&e.advance()}var o;return Mn(o=e.tryPeek())||Bn("RBrace",void 0,o),e.advance(),Ln([a.SpecialExpression,[It.object,r]],t[2])}function hr(e){let t=function(e){const t=e.peek();if(Nn(t)){e.storePosition();const t=lr(e);if(t)return t;e.restorePosition(),e.advance();const r=e.parseExpression();if(!Pn(e.peek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),r}if(En(t)){const r=t[1];if(Ht(r))return e.advance(),Ln(void 0!==It[r]?[a.SpecialBuiltinSymbol,It[r]]:[a.NormalBuiltinSymbol,Ye[r]],t[2]);if("->"===r)return function(e){const t=e.peek();e.advance();const r=e.getPosition();let o,i="";if(wn(e.peek(),"do")){const t=sr(e,!0);i=t[1],o=t[0][1][1]}else o=[e.parseExpression()];const s=e.getPosition()-1;let u=0,c="NOT_SET";for(let o=r;o<=s;o+=1){const r=e.getTokenAt(o);if(vn(r)){const e=cr.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(Ln([ot,[[a.UserDefinedSymbol,"$"],void 0]],t[2])):l.push(Ln([ot,[[a.UserDefinedSymbol,`$${e}`],void 0]],t[2]));return Ln([a.SpecialExpression,[It["0_lambda"],[l,o],i]],t[2])}(e);throw new n(`Illegal operator: ${r}`,t[2])}if(Un(t))return dr(e);if(In(t))return function(e){const t=jn(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!Cn(e.tryPeek());){En(e.tryPeek(),"...")?(e.advance(),r.push(Ln([a.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const t=e.tryPeek();if(!En(t,",")&&!Cn(t))throw new n("Expected comma or closing parenthesis",e.peekSourceCodeInfo());En(t,",")&&e.advance()}return On(e.tryPeek()),e.advance(),Ln([a.SpecialExpression,[It.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 Ln([a.Number,r?-Number(o):Number(o)],t[2])}(e);case"string":return ar(e,t);case"Symbol":{e.storePosition();const t=lr(e);return t||(e.restorePosition(),Kn(e))}case"ReservedSymbol":return ur(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=Ln([a.String,r],t[2]),s=Ln([a.String,o],t[2]);return Ln([a.NormalExpression,[Ln([a.NormalBuiltinSymbol,Ye.regexp],t[2]),[i,s]]],t[2])}(e);default:throw new n(`Unknown token type: ${r}`,t[2])}}(e),r=e.tryPeek();for(;En(r,".")||In(r)||Nn(r);)if("."===r[1]){e.advance();const o=e.tryPeek();if(!vn(o))throw new n("Expected symbol",e.peekSourceCodeInfo());t=pr(t,Ln([a.String,o[1]],o[2]),r[2]),e.advance(),r=e.tryPeek()}else if(In(r)){e.advance();const o=e.parseExpression();if(!Cn(e.tryPeek()))throw new n("Expected closing bracket",e.peekSourceCodeInfo());t=pr(t,o,r[2]),e.advance(),r=e.tryPeek()}else Nn(r)&&(t=fr(e,t),r=e.tryPeek());return t}function pr(e,t,n){return Ln([a.NormalExpression,[[a.NormalBuiltinSymbol,Ye.get],[e,t]]],n)}function yr(e,t){switch(e){case"^":return 12;case"*":case"/":case"%":return 11;case"+":case"-":return 10;case"<<":case">>":case">>>":return 9;case"++":return 8;case"<":case"<=":case"≤":case">":case">=":case"≥":return 7;case"==":case"!=":case"≠":return 6;case"&":case"xor":case"|":return 5;case"&&":case"||":case"??":return 4;case"|>":return 2;default:throw new n(`Unknown binary operator: ${e}`,t)}}function gr(e,t=0,r=!1){const o=e.tryPeek();let i;if(vn(o))switch(o[1]){case"let":return tr(e,o);case"if":case"unless":i=function(e,t){const n="unless"===t[1];e.advance();const r=e.parseExpression();xn(e.tryPeek(),"then"),e.advance();const o=nr(e,["else","end"]);let i;return wn(e.tryPeek(),"else")&&(e.advance(),i=nr(e,["end"])),e.advance(),Ln(n?[a.SpecialExpression,[It.unless,[r,o,i]]]:[a.SpecialExpression,[It.if,[r,o,i]]],t[2])}(e,o);break;case"cond":i=function(e,t){e.advance();const n=[];for(;!e.isAtEnd()&&!wn(e.tryPeek(),"end");){xn(e.tryPeek(),"case"),e.advance();const t=e.parseExpression();xn(e.tryPeek(),"then"),e.advance();const r=nr(e,["case","end"]);if(n.push([t,r]),wn(e.tryPeek(),"end"))break}return xn(e.tryPeek()),e.advance(),Ln([a.SpecialExpression,[It.cond,n]],t[2])}(e,o);break;case"switch":i=function(e,t){e.advance();const n=e.parseExpression(),r=[];for(;!e.isAtEnd()&&!wn(e.tryPeek(),"end");){xn(e.tryPeek(),"case"),e.advance();const t=e.parseExpression();xn(e.tryPeek(),"then"),e.advance();const n=nr(e,["case","end"]);if(r.push([t,n]),wn(e.tryPeek(),"end"))break}return xn(e.tryPeek(),"end"),e.advance(),Ln([a.SpecialExpression,[It.switch,n,r]],t[2])}(e,o);break;case"for":case"doseq":i=function(e,t){const r="doseq"===t[1];e.advance(),$n(e.tryPeek()),e.advance();const o=[];for(;!e.isAtEnd()&&!Pn(e.tryPeek());){const t=or(e),r=o.flatMap(e=>Object.keys(ft(e[0][1][0]))),i=ft(t[0][1][0]);if(Object.keys(i).some(e=>r.includes(e)))throw new n("Duplicate binding",t[0][2]);o.push(t),En(e.tryPeek(),",")&&e.advance()}An(e.tryPeek()),e.advance(),kn(e.tryPeek(),"->"),e.advance();const i=e.parseExpression();return Ln(r?[a.SpecialExpression,[It.doseq,o,i]]:[a.SpecialExpression,[It.for,o,i]],t[2])}(e,o);break;case"loop":i=function(e,t){e.advance(),$n(e.tryPeek()),e.advance();const r=[];let o=e.tryPeek();for(;!e.isAtEnd()&&!Pn(o);){const t=Qn(e,{requireDefaultValue:!0,noRest:!0}),n=t[1][1];t[1][1]=void 0,r.push(Ln([a.Binding,[t,n]],t[2])),En(e.tryPeek(),",")&&e.advance(),o=e.tryPeek()}if(0===r.length)throw new n("Expected binding",e.peekSourceCodeInfo());An(o),e.advance(),kn(e.tryPeek(),"->"),e.advance();const i=e.parseExpression();return Ln([a.SpecialExpression,[It.loop,r,i]],t[2])}(e,o);break;case"try":i=function(e,t){e.advance();const n=nr(e,["catch"]);let r;e.advance(),Nn(e.tryPeek())&&(e.advance(),r=Kn(e),An(e.tryPeek()),e.advance());const o=nr(e,["end"]);return e.advance(),Ln([a.SpecialExpression,[It.try,n,r,o]],t[2])}(e,o)}else if(wn(o,"do"))i=sr(e)[0];else if(wn(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(vn(r,"let")){const n=tr(e,bn(r));return Ln([a.SpecialExpression,[It["0_def"],n[1][1]]],t[2])}throw new n("Expected let",e.peekSourceCodeInfo())}(e,o)}i||=hr(e);let s=e.tryPeek();for(;!Zn(e);){if(_n(s)){const n=s[1],r=yr(n,s[2]);if(r<=t&&(12!==r||12!==t))break;const o=Ln(It[n]?[a.SpecialBuiltinSymbol,It[n]]:[a.NormalBuiltinSymbol,Ye[n]],s[2]);e.advance();i=Hn(s,o,i,gr(e,r),s[2])}else if(vn(s)){if(!Xt(s[1]))break;const r=3;if(r<=t)break;const o=Kn(e),a=gr(e,r);if(et(o))throw new n("Special expressions are not allowed in binary functional operators",o[2]);i=Xn(o,[i,a],s[2])}else{if("?"!==s?.[1])break;{if(1<=t)break;e.advance();const r=gr(e);if(!En(e.tryPeek(),":"))throw new n("Expected :",e.peekSourceCodeInfo());e.advance();const o=gr(e);i=Ln([a.SpecialExpression,[It.if,[i,r,o]]],i[2])}}s=e.tryPeek()}return i}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 vr{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}}run(e,t={}){const n=this.generateAst(e,t);return this.evaluate(n,t)}context(e,t={}){const n="string"==typeof e?this.generateAst(e,t):e,r=Jt(t,this.modules);return Dt(n,r),r.globalContext}getUndefinedSymbols(e,t={}){const n="string"==typeof e?this.generateAst(e,t):e,r=Jt(t,this.modules);return Ft(n,r,Ct,zt)}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?gn(e,r,n):void 0,a=mn(e,r),[s,u]=a;r+=s,u&&(i&&(u[2]=i),o.tokens.push(u))}return o}(e,this.debug,t.filePath);return t.minify?Rn(n,{removeWhiteSpace:!1}):n}parse(e){const t={body:[],hasDebugData:(e=Rn(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 Vn(e);for(r.parseExpression=(e=0,t=!1)=>gr(r,e,t);!r.isAtEnd();)if(t.push(gr(r,0,!0)),En(r.tryPeek(),";"))r.advance();else if(!r.isAtEnd())throw new n("Expected ;",r.peekSourceCodeInfo());return t}(e),t}evaluate(e,t){return Dt(e,Jt(t,this.modules))}transformSymbols(e,t){return function(e,t){return{...e,tokens:e.tokens.map(e=>vn(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),a=t.reduce((e,t,n)=>(e[`${r}_${n}`]=t,e),{[r]:e});return n.values={...n.values,...a},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 zn(e,t,this,n)}}export{vr as Lits,x as asLitsFunction,P as asNativeJsFunction,k as asUserDefinedFunction,S as assertLitsFunction,A as assertNativeJsFunction,N as assertUserDefinedFunction,I as isBuiltinFunction,Pe as isGrid,i as isLitsError,w as isLitsFunction,Ae as isMatrix,$ as isNativeJsFunction,E as isUserDefinedFunction,ke as isVector,Ot as normalExpressionKeys,Ut 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 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)}}const be={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}}},we={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)}},xe={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}}},Se=new WeakSet,Ee=new WeakSet,ke=new WeakSet,Ne=new WeakSet,Pe=new WeakSet,$e=new WeakSet,Ae=new WeakSet;function Ie(e){return Array.isArray(e)?(Se.has(e)||(je(e),Fe(e)||Ue(e)),e):e}function je(e){return!!Array.isArray(e)&&(!!Ee.has(e)||!ke.has(e)&&(e.every(e=>j(e))?(Se.add(e),Ee.add(e),!0):(ke.add(e),!1)))}function Ce(e,t){if(!je(e))throw new n(`Expected a vector, but got ${e}`,t)}function Oe(e,t){if(Ce(e,t),0===e.length)throw new n(`Expected a non empty vector, but got ${e}`,t)}function Ue(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]))return Ae.add(e),!1;const t=e[0].length;for(const n of e.slice(1)){if(!Array.isArray(n))return Ae.add(e),!1;if(n.length!==t)return Ae.add(e),!1}return Se.add(e),$e.add(e),!0}function Fe(e){if(!Array.isArray(e))return!1;if(Ne.has(e))return!0;if(Pe.has(e))return!1;if(0===e.length)return Pe.add(e),!1;if(!Array.isArray(e[0])||0===e[0].length)return Pe.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 Pe.add(e),!1;return Se.add(e),$e.add(e),Ne.add(e),!0}function Me(e,t){let r=!1,o=!1;for(const i of e)if(je(i))r=!0;else if(Fe(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(Fe(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=>Fe(e)?e:Array.from({length:o},()=>Array.from({length:i},()=>e)))]}if(r){let r=null;for(const o of e)if(je(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=>je(e)?e:Array.from({length:r},()=>e))]}return["number",e]}function Te(e){return(t,n)=>{const[r,o]=Me(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]=Me(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 Be(e,t){return(n,r)=>{if(0===n.length)return e;const[o,i]=Me(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 Re={inc:{evaluate:Te(e=>e+1),arity:q(1)},dec:{evaluate:Te(e=>e-1),arity:q(1)},"+":{evaluate:Be(0,(e,t)=>e+t),arity:{}},"*":{evaluate:Be(1,(e,t)=>e*t),arity:{}},"/":{evaluate:(e,t)=>{if(0===e.length)return 1;const[n,r]=Me(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]=Me(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:Te(e=>Math.sqrt(e)),arity:q(1)},cbrt:{evaluate:Te(e=>Math.cbrt(e)),arity:q(1)},"^":{evaluate:_e((e,t)=>e**t),arity:q(2)},round:{evaluate:([e,t],n)=>{const[r,o]=Me([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:Te(e=>Math.trunc(e)),arity:q(1)},floor:{evaluate:Te(e=>Math.floor(e)),arity:q(1)},ceil:{evaluate:Te(e=>Math.ceil(e)),arity:q(1)},min:{evaluate:(e,t)=>{if(1===e.length&&je(e[0])){const n=e[0];return Oe(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&&je(e[0])){const n=e[0];return Oe(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:Te(e=>Math.abs(e)),arity:q(1)},sign:{evaluate:Te(e=>Math.sign(e)),arity:q(1)}};function De([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 ze={"==":{evaluate:(e,t)=>De(e,t),arity:{min:1}},"≠":{evaluate:(e,t)=>!De(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}},"!":{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)}},Ve={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)}},Le={"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])=>je(e),arity:q(1)},"matrix?":{evaluate:([e])=>Fe(e),arity:q(1)},"grid?":{evaluate:([e])=>Ue(e),arity:q(1)}},We={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)}},Je=/^\s*$/,qe={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),Je.test(e)),arity:q(1)}},Ye={"|>":{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 Ge(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(", ")})`} -> ${Xe(r)}`),s=o?["","Operator:",` a ${e} b -> ${Xe(r)}`]:[];return[...i,...s]}(e).join("\n ")}\n\n Arguments:\n ${function(e){return Object.entries(e.args).map(([e,t])=>`${e}: ${Xe(t)}`)}(e).join("\n ")}\n\n Examples:\n${e.examples.map(e=>ae(e,4)).join("\n\n")}`)}function Xe(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)=>(Ce(e,t),e.reduce((e,t)=>e+t,0)),arity:q(1)},prod:{evaluate:([e],t)=>(Ce(e,t),e.reduce((e,t)=>e*t,1)),arity:q(1)},mean:{evaluate:([e],t)=>(Oe(e,t),e.reduce((e,t)=>e+t,0)/e.length),arity:q(1)},median:{evaluate:([e],t)=>(Oe(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)}},He={...Y,...be,...we,...xe,...Re,...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?Ge(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)}}}({}),...ze,...Ve,...Le,...We,...qe,...Ye,...Ze};Object.entries(He).forEach(([e,t])=>{t.name=e});const Ke={...He},Qe={},et=[];Object.entries(Ke).forEach(([e,t],n)=>{Qe[e]=n,et.push(t)});const tt={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)},nt={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)},rt={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 ot(e){const t=e[0];return s.UserDefinedSymbol===t||s.NormalBuiltinSymbol===t||s.SpecialBuiltinSymbol===t}function it(e){return s.UserDefinedSymbol===e[0]}function st(e,t){return function(e,t){if(!it(e))throw g("UserDefinedSymbolNode",e,t)}(e,t),e}function at(e){return s.NormalBuiltinSymbol===e[0]}function ut(e){return s.SpecialBuiltinSymbol===e[0]}function ct(e){return!!function(e){return e[0]===s.NormalExpression}(e)&&ot(e[1][0])}function lt(e){return e[0]===s.Spread}const ft={arity:q(1),evaluate:(e,t)=>{const n=e[1][1];if(function(e,t){if(!ot(e))throw g("SymbolNode",e,t)}(n),!it(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 dt=11,ht=12,pt=13,yt=14;function gt(e,t){if(e[0]===pt)Object.values(e[1][0]).forEach(e=>{e[1][1]&&t(e[1][1]),gt(e,t)});else if(e[0]===yt)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]),gt(r,t))}}function mt(e,t,n){const r=e[2],o={};return fe(vt(e,t,n,r,o),()=>o)}function vt(e,t,r,o,i){if(e[0]===pt){!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]===ht)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),vt(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]===yt){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]===ht){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),vt(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]===ht?i[e[1][0]]=U(t):i[e[1][0][1]]=U(t)}function bt(e){const t={};return wt(e,t),t}function wt(e,t){if(null!==e)if(e[0]===yt)for(const n of e[1][0])wt(n,t);else if(e[0]===pt)for(const n of Object.values(e[1][0]))wt(n,t);else if(e[0]===ht){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 xt={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(mt(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 gt(s,e=>{ie(u,n([e],t,r,o))}),t.addValues(bt(s),s[2]),u}},St={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)},Et={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(bt(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]!==ht&&void 0===e[1][1]).length,c={min:u>0?u:void 0,max:a[0].some(e=>e[0]===ht)?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,bt(e)),gt(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 kt={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)},Nt={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)},Pt={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(mt(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 gt(s,e=>{ie(u,n([e],t,r,o))}),t.addValues(bt(s),s[2]),u}},$t={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(mt(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(mt(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=mt(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(mt(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=bt(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 At(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(mt(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(mt(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 It(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,bt(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,bt(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 jt={arity:q(1),evaluate:(e,t,n)=>At(!0,e,t,n.evaluateNode),getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>It(e,t,n,r,o)},Ct={arity:q(1),evaluate:(e,t,n)=>fe(At(!1,e,t,n.evaluateNode),()=>null),getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>It(e,t,n,r,o)},Ot={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)},Ut={arity:{min:1},evaluate:(e,t,{evaluateNode:n})=>{const r=Symbol("qq-sentinel");return fe(pe(e[1][1],(e,o)=>e!==r?e:it(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)},Ft={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)},Mt={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)},Tt={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=>lt(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)},Bt={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(lt(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)},Rt={"??":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},Dt=[Ut,tt,Ot,_t,nt,xt,ft,St,Ct,Et,jt,kt,Pt,$t,Bt,Ft,rt,Mt,Tt,Nt],zt={normalExpressions:Ke,specialExpressions:Dt,allNormalExpressions:et},Vt=Object.keys(Ke),Lt=Object.keys(Rt),Wt=(e,t,n,r)=>{const o=Array.isArray(e)?e:[[s.SpecialExpression,[Rt.block,e.body]]],i=new Set;for(const e of o)Jt(e,t,n,r)?.forEach(e=>i.add(e));return i};function Jt(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(ct(n)){const[,[e]]=n;if(it(e)){null===t.lookUp(e)&&i.add(e[1])}}else{const[,[e]]=n;Jt(e,t,r,o)?.forEach(e=>i.add(e))}for(const e of n[1][1])Jt(e,t,r,o)?.forEach(e=>i.add(e));return i}case s.SpecialExpression:{const n=e,i=n[1][0];return(0,r.specialExpressions[i].getUndefinedSymbols)(n,t,{getUndefinedSymbols:Wt,builtin:r,evaluateNode:o})}case s.Spread:return Jt(e[1],t,r,o);default:throw new n(`Unhandled node type: ${i}`,e[2])}}const qt=(1+Math.sqrt(5))/2,Yt={E:Math.E,"-E":-Math.E,"ε":Math.E,"-ε":-Math.E,PI:Math.PI,"-PI":-Math.PI,"π":Math.PI,"-π":-Math.PI,PHI:qt,"-PHI":-qt,"φ":qt,"-φ":-qt,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},Gt={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,...Yt};const Xt={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]!==ht).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(mt(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(mt(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]===ht),n=void 0!==e?fe(mt(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(et[e.normalBuiltinSymbolType],n).evaluate(t,n,r,{executeFunction:o}),SpecialBuiltin:(e,t,r,o,{executeFunction:i})=>{const s=m(Dt[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 Zt(e,t){return pe(e.body,(e,n)=>Ht(n,t),null)}function Ht(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(Gt[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)=>lt(e)?fe(Ht(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(Ht(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(ct(e)){const s=e[1][0];if(i.length>0){return fe(Ht(s,t),e=>({[l]:!0,function:L(e,r),functionType:"Partial",params:n,placeholders:i,sourceCodeInfo:r,arity:q(i.length)}))}if(at(s)){const r=s[1];return zt.allNormalExpressions[r].evaluate(n,e[2],t,{executeFunction:Kt})}{const i=t.getValue(s[1]);if(void 0!==i)return Kt(L(i,r),n,t,r);throw new o(s[1],e[2])}}return fe(Ht(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 Kt(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 Ie(t)})}case s.SpecialExpression:return fe(function(e,t){const n=e[1][0],r=m(zt.specialExpressions[n],e[2]);return(0,r.evaluate)(e,t,{evaluateNode:Ht,builtin:zt,getUndefinedSymbols:Wt})}(e,t),e=>Ie(e));default:throw new n(`${u(e[0])}-node cannot be evaluated`,e[2])}}function Kt(e,t,r,o){if(w(e))return Xt[e.functionType](e,t,o,r,{evaluateNode:Ht,executeFunction:Kt});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 Qt{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 Qt({contexts:[e,...this.contexts],values:this.values,nativeJsFunctions:this.nativeJsFunctions,modules:this.modules});return n.globalContext=t,n}new(e){return new Qt({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=en(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=en(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(ut(e)){const t=e[1];switch(t){case Rt["&&"]:case Rt["||"]:case Rt.array:case Rt.object:case Rt["defined?"]:case Rt.recur:case Rt.throw:case Rt["??"]:{const n=m(zt.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(at(e)){const t=e[1],n=et[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 en(e){return Lt.includes(e)?`special expression "${e}"`:Vt.includes(e)?`builtin function "${e}"`:"self"===e?`builtin value "${e}"`:null}function tn(e={},t){const r=e.globalContext??{},o=e.contexts?[r,...e.contexts]:[r],i=new Qt({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=en(e);if(t)throw new n(`Cannot shadow ${t}`,void 0)}(i),s[i]=a,e},{})});return e.globalModuleScope?i:i.create({})}const nn=["^","*","/","%","+","-","<<",">>",">>>","++","<","<=","≤",">",">=","≥","==","!=","≠","&","xor","|","&&","||","??","|>"],rn=[...nn,"?",":","->","...",".",",","=",":",";"],on=new Set(["comment","cond","def","defined?","block","doseq","if","let","loop","recur","throw","try","unless","while"]);function sn(e){return!on.has(e)}const an=new Set(nn);function un(e){return an.has(e)}const cn=new Set(rn);function ln(e){return cn.has(e)}const fn=["(",")","[","]","{","}","'",'"',"`",",",".",";"," ","\n","\r","\t"],dn=["0","1","2","3","4","5","6","7","8","9",...fn],hn=new Set(fn),pn=new Set(dn),yn=/\s/,gn=[0],mn=(e,t)=>{if('"'!==e[t])return gn;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 vn(e,t,n,r){return t===n.slice(r,r+t.length)?[t.length,[e,t]]:gn}const bn=/\d/,wn=/[0-7]/,xn=/[0-9a-f]/i,Sn=/[01]/,En=/[\s)\]}(,;]/,kn=(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(!pn.has(n)){const r=t;let o=e[t+=1];for(;o&&!hn.has(o);)n+=o,o=e[t+=1];return n.endsWith(":")?[t-r-1,["Symbol",n.slice(0,-1)]]:[t-r,["Symbol",n]]}return gn},Nn=[(e,t)=>{let n=e[t];if(!n||!yn.test(n))return gn;let r=n;for(n=e[t+=1];n&&yn.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 gn},(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 gn},(e,t)=>{const n=kn(e,t);if(0===n[0]||!n[1])return gn;let r=n[1][1];r=r.startsWith("'")?r.slice(1,r.length-1):r;return void 0===Gt[r]?gn:[n[0],["ReservedSymbol",r]]},(e,t)=>vn("LParen","(",e,t),(e,t)=>vn("RParen",")",e,t),(e,t)=>vn("LBracket","[",e,t),(e,t)=>vn("RBracket","]",e,t),(e,t)=>vn("LBrace","{",e,t),(e,t)=>vn("RBrace","}",e,t),(e,t)=>{if('"'!==e[t]||'"'!==e[t+1]||'"'!==e[t+2])return gn;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}`]]},mn,(e,t)=>{if("#"!==e[t])return gn;const[n,r]=mn(e,t+1);if(!r)return gn;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 gn;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 gn;let o;for(o=t+2;o<e.length;o+=1){const t=e[o];if("binary"===r&&!Sn.test(t))break;if("octal"===r&&!wn.test(t))break;if("hex"===r&&!xn.test(t))break}const i=o-t;if(i<=2)return gn;const s=e[o];return s&&!En.test(s)?gn:[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(!bn.test(e[n-1])||!bn.test(e[n+1]))return n===i?gn:[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 gn;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 gn;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(!bn.test(r))break}if((r||o)&&n===i)return gn;const u=n-t;if(0===u)return gn;const c=e[n];return c&&":"!==c&&!En.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&&ln(n))return[3,["Operator",n]];const r=e.slice(t,t+2);if(t+1<e.length&&ln(r))return[2,["Operator",r]];const o=e[t]??"";return ln(o)?[1,["Operator",o]]:gn},kn];function Pn(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 $n(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 gn})(e,t);if(t+=r,r>0)return[t-n,o]}for(const r of Nn){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 An(e,t){return"Symbol"===e?.[0]&&(!t||e[1]===t)}function In(e,t){return function(e,t){An(e,t)||Gn("Symbol",void 0,e)}(e,t),e}function jn(e,t){return"ReservedSymbol"===e?.[0]&&(!t||e[1]===t)}function Cn(e,t){jn(e,t)||Gn("ReservedSymbol",t,e)}function On(e,t){return Cn(e,t),e}function Un(e,t){return"Operator"===e?.[0]&&(!t||e[1]===t)}function Fn(e,t){Un(e,t)||Gn("Operator",t,e)}function Mn(e){return"LParen"===e?.[0]}function Tn(e){Mn(e)||Gn("LParen",void 0,e)}function _n(e){return"RParen"===e?.[0]}function Bn(e){_n(e)||Gn("RParen",void 0,e)}function Rn(e){return"LBracket"===e?.[0]}function Dn(e){return function(e){Rn(e)||Gn("LBracket",void 0,e)}(e),e}function zn(e){return"RBracket"===e?.[0]}function Vn(e){zn(e)||Gn("RBracket",void 0,e)}function Ln(e){return"LBrace"===e?.[0]}function Wn(e){return function(e){Ln(e)||Gn("LBrace",void 0,e)}(e),e}function Jn(e){return"RBrace"===e?.[0]}function qn(e){return"string"===e?.[0]}function Yn(e){return"Operator"===e?.[0]&&un(e[1])}function Gn(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 Xn(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 Zn=new Set([...Vt,...Lt,...Object.keys(Gt)]);class Hn{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 Zn.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 Kn{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 Qn(e,t){return t&&(e[2]=t),e}function er(e,t){return void 0!==Rt[e]&&"fn"!==e&&"def"!==e&&"defn"!==e?Qn([s.SpecialBuiltinSymbol,Rt[e]],t):void 0!==Qe[e]?Qn([s.NormalBuiltinSymbol,Qe[e]],t):Qn([s.UserDefinedSymbol,e],t)}function tr(e){return e.substring(1,e.length-1).replace(/(\\{2})|(\\')|\\(.)/g,(e,t,n,r)=>t?"\\":n?"'":`\\${r}`)}const nr=Object.entries(Qe).reduce((e,[t,n])=>(e[n]=t,e),[]),rr=Object.entries(Rt).reduce((e,[t,n])=>(e[n]=t,e),[]);function or(e){return it(e)?e[1]:at(e)?nr[e[1]]:rr[e[1]]}function ir(e,t,n){const r=Qn([s.NormalExpression,[e,t]],n);return at(e)&&J(et[e[1]].arity,r[1][1].length,n),r}function sr(e){if(e.isAtEnd())return!0;const t=e.tryPeek();return Un(t)?[";",",",":"].includes(t[1]):!!jn(t)&&["else","when","while","case","catch","let","then","end","do"].includes(t[1])}function ar(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"&":case"xor":case"|":case"|>":return ir(t,[r,o],i);case"&&":case"||":case"??":return Qn([s.SpecialExpression,[Rt[a],[r,o]]],i);default:throw new n(`Unknown binary operator: ${a}`,i)}}function ur(e){const t=e.peek();if(e.advance(),!An(t))throw new n(`Expected symbol token, got ${t[0]}`,t[2]);return"'"===t[1][0]?er(tr(t[1]),t[2]):er(t[1],t[2])}function cr(e,{requireDefaultValue:t,noRest:r}={}){const o=e.tryPeek();if(An(o)){const r=ur(e);if(!it(r))throw new n("Expected user defined symbol",o[2]);const i=lr(e);if(t&&!i)throw new n("Expected assignment",e.peekSourceCodeInfo());return Qn([dt,[r,i]],o[2])}if(Un(o,"...")){if(r)throw new n("Rest element not allowed",o[2]);e.advance();const t=st(ur(e));if(Un(e.tryPeek(),"="))throw new n("Rest argument can not have default value",e.peekSourceCodeInfo());return Qn([ht,[t[1],void 0]],o[2])}if(Rn(o)){e.advance();const r=[];let i=e.peek(),s=!1;for(;!zn(i);){if(s)throw new n("Rest argument must be last",i[2]);if(Un(i,",")){r.push(null),e.advance(),i=e.peek();continue}const t=cr(e);t[0]===ht&&(s=!0),r.push(t),i=e.peek(),zn(i)||(Fn(i,","),e.advance()),i=e.peek()}e.advance();const a=lr(e);if(t&&!a)throw new n("Expected assignment",e.peekSourceCodeInfo());return Qn([yt,[r,a]],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]);Un(i,"...")&&(s=!0,e.advance());const t=ur(e),a=or(t);if(i=e.peek(),jn(i,"as")){if(s)throw new n("Rest argument can not have alias",i[2]);e.advance();const t=st(ur(e));if(r[t[1]])throw new n(`Duplicate binding name: ${t}`,i[2]);r[a]=Qn([dt,[t,lr(e)]],o[2])}else if(Jn(i)||Un(i,",")||Un(i,"=")){const a=st(t,t[2]);if(r[a[1]])throw new n(`Duplicate binding name: ${a}`,i[2]);if(s&&Un(e.tryPeek(),"="))throw new n("Rest argument can not have default value",e.peekSourceCodeInfo());r[a[1]]=Qn(s?[ht,[a[1],lr(e)]]:[dt,[a,lr(e)]],o[2])}else if(Un(i,":")){if(e.advance(),i=e.peek(),!Ln(i)&&!Rn(i))throw new n("Expected object or array",i[2]);r[a]=cr(e)}Jn(e.peek())||(Fn(e.peek(),","),e.advance()),i=e.peek()}e.advance(),i=e.peek();const a=lr(e);if(t&&!a)throw new n("Expected assignment",i[2]);return Qn([pt,[r,a]],o[2])}throw new n("Expected symbol",e.peekSourceCodeInfo())}function lr(e){if(Un(e.tryPeek(),"="))return e.advance(),e.parseExpression()}function fr(e,t){e.advance();const n=cr(e,{requireDefaultValue:!0,noRest:!0}),r=n[1][1];n[1][1]=void 0;const o=Qn([s.Binding,[n,r]],t[2]);return Qn([s.SpecialExpression,[Rt.let,o]],t[2])}function dr(e,t){const r=[];for(;!e.isAtEnd()&&!hr(e,t);)Un(e.tryPeek(),";")?e.advance():r.push(e.parseExpression());if(function(e,t){if(!hr(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]:Qn([s.SpecialExpression,[Rt.block,r]],e.peekSourceCodeInfo())}function hr(e,t){for(const n of t)if(jn(e.tryPeek(),n))return!0;return!1}function pr(e){const t=function(e){const t=In(e.tryPeek()),n=st(ur(e));Cn(e.tryPeek(),"in"),e.advance();const r=e.parseExpression();return Qn([s.Binding,[Qn([dt,[n,void 0]],t[2]),r]],t[2])}(e),r=[];let o=e.peek();yr(o,["let","when","while"]);const i=[];if("let"===o[1])for(r.push("&let");An(o,"let");){const t=fr(e,o),r=i.flatMap(e=>Object.keys(bt(e[1][0])));if(Object.keys(bt(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(),yr(o,["let","when","while"]),o=e.peek()}let a,u;for(;jn(o,"when")||jn(o,"while");){e.advance(),"when"===o[1]?(r.push("&when"),a=e.parseExpression()):(r.push("&while"),u=e.parseExpression()),o=e.peek();yr(o,r.includes("&when")&&r.includes("&while")?[]:r.includes("&when")?["while"]:["when"]),o=e.peek()}return yr(o,[]),[t,i,a,u]}function yr(e,t){if(!function(e,t){if(Un(e,",")||_n(e))return!0;for(const n of t){if("let"===n&&An(e,"let"))return!0;if(["when","while"].includes(n)&&jn(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 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 Qn([s.String,n],t[2])}function mr(e,t=!1){const r=On(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()&&!jn(e.tryPeek(),"end");)if(i.push(e.parseExpression()),Un(e.tryPeek(),";"))e.advance();else if(!jn(e.tryPeek(),"end"))throw new n("Expected end",e.peekSourceCodeInfo());return Cn(e.tryPeek(),"end"),e.advance(),[Qn([s.SpecialExpression,[Rt.block,i]],r[2]),o]}function vr(e){const t=On(e.tryPeek());e.advance();const n=t[1];return function(e){return e in Yt}(n)?Qn([s.Number,Yt[n]],t[2]):Qn([s.ReservedSymbol,t[1]],t[2])}const br=/^\$([1-9]\d?)?$/;function wr(e){const t=e.peek();if(Mn(t)&&An(e.peekAhead(1))&&Un(e.peekAhead(2),"->"))return null;try{const r=function(e){const t=e.peek();if(An(t))return[Qn([dt,[ur(e),void 0]],t[2])];Tn(t),e.advance();let r=!1,o=!1;const i=[];for(;!e.isAtEnd()&&!_n(e.peek())&&!An(e.peek(),"let");){if(r)throw new n("Rest argument must be last",e.peekSourceCodeInfo());const t=cr(e);if(void 0!==t[1][1]&&(o=!0),t[0]===ht&&(r=!0),o&&!t[1][1])throw new n("Default arguments must be last",e.peekSourceCodeInfo());if(i.push(t),!Un(e.peek(),",")&&!_n(e.peek())&&!An(e.peek(),"let"))throw new n("Expected comma or closing parenthesis",e.peekSourceCodeInfo());Un(e.peek(),",")&&e.advance()}if(!_n(e.peek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),i}(e);if(!Un(e.peek(),"->"))return null;let o;e.advance();let i="";if(jn(e.peek(),"do")){const t=mr(e,!0);i=t[1],o=t[0][1][1]}else o=[e.parseExpression()];return Qn([s.SpecialExpression,[Rt["0_lambda"],[r,o],i]],t[2])}catch{return null}}function xr(e,t){e.advance();const r=[];for(;!e.isAtEnd()&&!_n(e.tryPeek());){Un(e.tryPeek(),"...")?(e.advance(),r.push(Qn([s.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const t=e.tryPeek();if(!Un(t,",")&&!_n(t))throw new n("Expected comma or closing parenthesis",e.tryPeek()?.[2]);Un(t,",")&&e.advance()}if(!_n(e.tryPeek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());if(e.advance(),!ut(t))return at(t)||it(t)?ir(t,r,t[2]):Qn([s.NormalExpression,[t,r]],t[2]);{const e=t[1];switch(J(zt.specialExpressions[e].arity,r.length,t[2]),e){case Rt["||"]:case Rt["&&"]:case Rt.recur:case Rt.array:case Rt.object:case Rt["??"]:return Qn([s.SpecialExpression,[e,r]],t[2]);case Rt["defined?"]:{const[n]=r;return Qn([s.SpecialExpression,[e,n]],t[2])}case Rt.throw:{const[n]=r;return Qn([s.SpecialExpression,[e,n]],t[2])}case Rt["0_lambda"]:case Rt["0_def"]:throw new n(`${e} is not allowed`,t[2]);default:throw new n(`Unknown special expression: ${e}`,t[2])}}}function Sr(e){const t=Wn(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!Jn(e.tryPeek());){if(Un(e.tryPeek(),"..."))e.advance(),r.push(Qn([s.Spread,e.parseExpression()],e.peekSourceCodeInfo()));else{const t=e.tryPeek();if(qn(t)){const n=gr(e,t);r.push(Qn([s.String,n[1]],t[2]))}else if(An(t)){const n=t[1].startsWith("'")?tr(t[1]):t[1];r.push(Qn([s.String,n],t[2])),e.advance()}else{if(!Rn(t))throw new n("Expected key to be a symbol or a string",e.peekSourceCodeInfo());e.advance(),r.push(e.parseExpression()),Vn(e.tryPeek()),e.advance()}Fn(e.tryPeek(),":"),e.advance(),r.push(e.parseExpression())}const t=e.tryPeek();if(!Un(t,",")&&!Jn(t))throw new n("Expected comma or closing brace",e.peekSourceCodeInfo());Un(t,",")&&e.advance()}var o;return Jn(o=e.tryPeek())||Gn("RBrace",void 0,o),e.advance(),Qn([s.SpecialExpression,[Rt.object,r]],t[2])}function Er(e){let t=function(e){const t=e.peek();if(Mn(t)){e.storePosition();const t=wr(e);if(t)return t;e.restorePosition(),e.advance();const r=e.parseExpression();if(!_n(e.peek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),r}if(Un(t)){const r=t[1];if(un(r))return e.advance(),Qn(void 0!==Rt[r]?[s.SpecialBuiltinSymbol,Rt[r]]:[s.NormalBuiltinSymbol,Qe[r]],t[2]);if("->"===r)return function(e){const t=e.peek();e.advance();const r=e.getPosition();let o,i="";if(jn(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(An(r)){const e=br.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(Qn([dt,[[s.UserDefinedSymbol,"$"],void 0]],t[2])):l.push(Qn([dt,[[s.UserDefinedSymbol,`$${e}`],void 0]],t[2]));return Qn([s.SpecialExpression,[Rt["0_lambda"],[l,o],i]],t[2])}(e);throw new n(`Illegal operator: ${r}`,t[2])}if(Ln(t))return Sr(e);if(Rn(t))return function(e){const t=Dn(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!zn(e.tryPeek());){Un(e.tryPeek(),"...")?(e.advance(),r.push(Qn([s.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const t=e.tryPeek();if(!Un(t,",")&&!zn(t))throw new n("Expected comma or closing parenthesis",e.peekSourceCodeInfo());Un(t,",")&&e.advance()}return Vn(e.tryPeek()),e.advance(),Qn([s.SpecialExpression,[Rt.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 Qn([s.Number,r?-Number(o):Number(o)],t[2])}(e);case"string":return gr(e,t);case"Symbol":{e.storePosition();const t=wr(e);return t||(e.restorePosition(),ur(e))}case"ReservedSymbol":return vr(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=Qn([s.String,r],t[2]),a=Qn([s.String,o],t[2]);return Qn([s.NormalExpression,[Qn([s.NormalBuiltinSymbol,Qe.regexp],t[2]),[i,a]]],t[2])}(e);default:throw new n(`Unknown token type: ${r}`,t[2])}}(e),r=e.tryPeek();for(;Un(r,".")||Rn(r)||Mn(r);)if("."===r[1]){e.advance();const o=e.tryPeek();if(!An(o))throw new n("Expected symbol",e.peekSourceCodeInfo());t=kr(t,Qn([s.String,o[1]],o[2]),r[2]),e.advance(),r=e.tryPeek()}else if(Rn(r)){e.advance();const o=e.parseExpression();if(!zn(e.tryPeek()))throw new n("Expected closing bracket",e.peekSourceCodeInfo());t=kr(t,o,r[2]),e.advance(),r=e.tryPeek()}else Mn(r)&&(t=xr(e,t),r=e.tryPeek());return t}function kr(e,t,n){return Qn([s.NormalExpression,[[s.NormalBuiltinSymbol,Qe.get],[e,t]]],n)}function Nr(e,t){switch(e){case"^":return 12;case"*":case"/":case"%":return 11;case"+":case"-":return 10;case"<<":case">>":case">>>":return 9;case"++":return 8;case"<":case"<=":case"≤":case">":case">=":case"≥":return 7;case"==":case"!=":case"≠":return 6;case"&":case"xor":case"|":return 5;case"&&":case"||":case"??":return 4;case"|>":return 2;default:throw new n(`Unknown binary operator: ${e}`,t)}}function Pr(e,t=0,r=!1){const o=e.tryPeek();let i;if(An(o))switch(o[1]){case"let":return fr(e,o);case"if":case"unless":i=function(e,t){const n="unless"===t[1];e.advance();const r=e.parseExpression();Cn(e.tryPeek(),"then"),e.advance();const o=dr(e,["else","end"]);let i;return jn(e.tryPeek(),"else")&&(e.advance(),i=dr(e,["end"])),e.advance(),Qn(n?[s.SpecialExpression,[Rt.unless,[r,o,i]]]:[s.SpecialExpression,[Rt.if,[r,o,i]]],t[2])}(e,o);break;case"cond":i=function(e,t){e.advance();const n=[];for(;!e.isAtEnd()&&!jn(e.tryPeek(),"end");){Cn(e.tryPeek(),"case"),e.advance();const t=e.parseExpression();Cn(e.tryPeek(),"then"),e.advance();const r=dr(e,["case","end"]);if(n.push([t,r]),jn(e.tryPeek(),"end"))break}return Cn(e.tryPeek()),e.advance(),Qn([s.SpecialExpression,[Rt.cond,n]],t[2])}(e,o);break;case"switch":i=function(e,t){e.advance();const n=e.parseExpression(),r=[];for(;!e.isAtEnd()&&!jn(e.tryPeek(),"end");){Cn(e.tryPeek(),"case"),e.advance();const t=e.parseExpression();Cn(e.tryPeek(),"then"),e.advance();const n=dr(e,["case","end"]);if(r.push([t,n]),jn(e.tryPeek(),"end"))break}return Cn(e.tryPeek(),"end"),e.advance(),Qn([s.SpecialExpression,[Rt.switch,n,r]],t[2])}(e,o);break;case"for":case"doseq":i=function(e,t){const r="doseq"===t[1];e.advance(),Tn(e.tryPeek()),e.advance();const o=[];for(;!e.isAtEnd()&&!_n(e.tryPeek());){const t=pr(e),r=o.flatMap(e=>Object.keys(bt(e[0][1][0]))),i=bt(t[0][1][0]);if(Object.keys(i).some(e=>r.includes(e)))throw new n("Duplicate binding",t[0][2]);o.push(t),Un(e.tryPeek(),",")&&e.advance()}Bn(e.tryPeek()),e.advance(),Fn(e.tryPeek(),"->"),e.advance();const i=e.parseExpression();return Qn(r?[s.SpecialExpression,[Rt.doseq,o,i]]:[s.SpecialExpression,[Rt.for,o,i]],t[2])}(e,o);break;case"loop":i=function(e,t){e.advance(),Tn(e.tryPeek()),e.advance();const r=[];let o=e.tryPeek();for(;!e.isAtEnd()&&!_n(o);){const t=cr(e,{requireDefaultValue:!0,noRest:!0}),n=t[1][1];t[1][1]=void 0,r.push(Qn([s.Binding,[t,n]],t[2])),Un(e.tryPeek(),",")&&e.advance(),o=e.tryPeek()}if(0===r.length)throw new n("Expected binding",e.peekSourceCodeInfo());Bn(o),e.advance(),Fn(e.tryPeek(),"->"),e.advance();const i=e.parseExpression();return Qn([s.SpecialExpression,[Rt.loop,r,i]],t[2])}(e,o);break;case"try":i=function(e,t){e.advance();const n=dr(e,["catch"]);let r;e.advance(),Mn(e.tryPeek())&&(e.advance(),r=ur(e),Bn(e.tryPeek()),e.advance());const o=dr(e,["end"]);return e.advance(),Qn([s.SpecialExpression,[Rt.try,n,r,o]],t[2])}(e,o)}else if(jn(o,"do"))i=mr(e)[0];else if(jn(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(An(r,"let")){const n=fr(e,In(r));return Qn([s.SpecialExpression,[Rt["0_def"],n[1][1]]],t[2])}throw new n("Expected let",e.peekSourceCodeInfo())}(e,o)}i||=Er(e);let a=e.tryPeek();for(;!sr(e);){if(Yn(a)){const n=a[1],r=Nr(n,a[2]);if(r<=t&&(12!==r||12!==t))break;const o=Qn(Rt[n]?[s.SpecialBuiltinSymbol,Rt[n]]:[s.NormalBuiltinSymbol,Qe[n]],a[2]);e.advance();i=ar(a,o,i,Pr(e,r),a[2])}else if(An(a)){if(!sn(a[1]))break;const r=3;if(r<=t)break;const o=ur(e),s=Pr(e,r);if(ut(o))throw new n("Special expressions are not allowed in binary functional operators",o[2]);i=ir(o,[i,s],a[2])}else{if("?"!==a?.[1])break;{if(1<=t)break;e.advance();const r=Pr(e);if(!Un(e.tryPeek(),":"))throw new n("Expected :",e.peekSourceCodeInfo());e.advance();const o=Pr(e);i=Qn([s.SpecialExpression,[Rt.if,[i,r,o]]],i[2])}}a=e.tryPeek()}return i}class $r{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 Ar{astCache;astCacheSize;debug;modules;constructor(e={}){if(this.debug=e.debug??!1,this.astCacheSize=e.astCacheSize??null,this.astCacheSize){this.astCache=new $r(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=tn(t,this.modules);return await Zt(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=tn(t,this.modules);if(Zt(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=tn(t,this.modules);return Wt(n,r,zt,Ht)}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?Pn(e,r,n):void 0,s=$n(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?Xn(n,{removeWhiteSpace:!1}):n}parse(e){const t={body:[],hasDebugData:(e=Xn(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 Kn(e);for(r.parseExpression=(e=0,t=!1)=>Pr(r,e,t);!r.isAtEnd();)if(t.push(Pr(r,0,!0)),Un(r.tryPeek(),";"))r.advance();else if(!r.isAtEnd())throw new n("Expected ;",r.peekSourceCodeInfo());return t}(e),t}evaluate(e,t){return Zt(e,tn(t,this.modules))}transformSymbols(e,t){return function(e,t){return{...e,tokens:e.tokens.map(e=>An(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 Hn(e,t,this,n)}}export{Ar as Lits,x as asLitsFunction,$ as asNativeJsFunction,k as asUserDefinedFunction,S as assertLitsFunction,A as assertNativeJsFunction,N as assertUserDefinedFunction,I as isBuiltinFunction,Ue as isGrid,i as isLitsError,w as isLitsFunction,Fe as isMatrix,P as isNativeJsFunction,E as isUserDefinedFunction,je as isVector,Vt as normalExpressionKeys,Lt as specialExpressionKeys};
2
2
  //# sourceMappingURL=index.esm.js.map