@mojir/lits 2.6.2 → 2.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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{constructor(e,t){super(e,t),Object.setPrototypeOf(this,o.prototype),this.name="AssertionError"}}class i extends n{symbol;constructor(e,t){super(`Undefined symbol '${e}'.`,t),this.symbol=e,Object.setPrototypeOf(this,i.prototype),this.name="UndefinedSymbolError"}}function s(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},u=new Set(Object.values(a));function c(e){return Object.keys(a).find(t=>a[t]===e)}const l=new Set(["UserDefined","Partial","Comp","Constantly","Juxt","Complement","EveryPred","SomePred","Fnull","Builtin","SpecialBuiltin","NativeJsFunction","Module"]);const f="^^fn^^",d="^^re^^";function h(e){return null!==e&&"object"==typeof e&&(f in e&&"functionType"in e&&function(e){return"string"==typeof e&&l.has(e)}(e.functionType))}function p(e){return!(!Array.isArray(e)||e.length<2)&&function(e){return"number"==typeof e&&u.has(e)}(e[0])}function y(e){return h(e)?`<function ${e.name||"λ"}>`:p(e)?`${c(e[0])}-node`:null===e?"null":"object"==typeof e&&e instanceof RegExp?`${e}`:"object"==typeof e&&e instanceof Error?e.toString():JSON.stringify(e)}function g(e,t){return e?.sourceCodeInfo??t}function m(e,t,r){return new n(`Expected ${e}, got ${y(t)}.`,g(t,r))}function v(e,t){return b(e,t),e}function b(e,t){if(!function(e){return void 0!==e}(e))throw new n("Unexpected undefined",g(e,t))}function w(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function S(e){return null!==e&&"object"==typeof e&&!!e[f]}function x(e,t){return E(e,t),e}function E(e,t){if(!S(e))throw m("LitsFunction",e,t)}function k(e){return S(e)&&"UserDefined"===e.functionType}function N(e,t){return P(e,t),e}function P(e,t){if(!k(e))throw m("NativeJsFunction",e,t)}function $(e){return S(e)&&"NativeJsFunction"===e.functionType}function A(e,t){return I(e,t),e}function I(e,t){if(!$(e))throw m("NativeJsFunction",e,t)}function j(e){return w(e)&&"Builtin"===e.functionType}function C(e){return void 0!==e}function O(e,t){return M(e,t),e}function M(e,t){if(!C(e))throw m("not undefined",e,t)}function U(e){return Array.isArray(e)||"string"==typeof e}function F(e,t){if(!U(e))throw m("string or array",e,t)}function T(e){return!(null===e||"object"!=typeof e||Array.isArray(e)||e instanceof RegExp||S(e)||D(e))}function B(e,t){if(!T(e))throw m("object",e,t)}function R(e){return U(e)||T(e)}function _(e,t){if(!R(e))throw m("string, array or object",e,t)}function D(e){return null!==e&&"object"==typeof e&&!!e[d]}function z(e,t){if(!function(e){return D(e)||"string"==typeof e}(e))throw m("string or RegularExpression",e,t)}function L(e,t){return V(e,t),e}function V(e,t){if(!function(e){return"number"==typeof e||!!R(e)||!!S(e)}(e))throw m("FunctionLike",e,t)}function W(e,t={}){return"string"==typeof e&&((!t.nonEmpty||0!==e.length)&&(!t.char||1===e.length))}function J(e,t,n={}){if(!W(e,n))throw m(""+(n.nonEmpty?"non empty string":n.char?"character":"string"),e,t)}function q(e,t,n={}){return J(e,t,n),e}function Y(e){return"string"==typeof e||"number"==typeof e}function G(e,t){return X(e,t),e}function X(e,t){if(!Y(e))throw m("string or number",e,t)}const H={assert:{evaluate:(e,t)=>{const n=e[0],r=2===e.length?e[1]:`${n}`;if(J(r,t),!n)throw new o(r,t);return O(n,t)},arity:{min:1,max:2}}};function K(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 Z(e,t,r={}){if(!K(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 ${y(e)}.`,g(e,t))}function Q(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 ${y(t)}.`,r);if("number"==typeof i&&t>i)throw new n(`Wrong number of arguments, expected at most ${i}, got ${y(t)}.`,r)}function ee(e){return{min:e,max:e}}const te={"<<":{evaluate:([e,t],n)=>(Z(e,n,{integer:!0}),Z(t,n,{integer:!0,nonNegative:!0}),e<<t),arity:ee(2)},">>":{evaluate:([e,t],n)=>(Z(e,n,{integer:!0}),Z(t,n,{integer:!0,nonNegative:!0}),e>>t),arity:ee(2)},">>>":{evaluate:([e,t],n)=>(Z(e,n,{integer:!0}),Z(t,n,{integer:!0,nonNegative:!0}),e>>>t),arity:ee(2)},"&":{evaluate:([e,...t],n)=>(Z(e,n,{integer:!0}),t.reduce((e,t)=>(Z(t,n,{integer:!0}),e&t),e)),arity:{min:2}},"|":{evaluate:([e,...t],n)=>(Z(e,n,{integer:!0}),t.reduce((e,t)=>(Z(t,n,{integer:!0}),e|t),e)),arity:{min:2}},xor:{evaluate:([e,...t],n)=>(Z(e,n,{integer:!0}),t.reduce((e,t)=>(Z(t,n,{integer:!0}),e^t),e)),arity:{min:2}}};function ne(e,t){return!!R(e)&&("string"==typeof e||Array.isArray(e)?!!K(t,{integer:!0})&&(t>=0&&t<e.length):!!Object.getOwnPropertyDescriptor(e,t))}function re(e,t,r){if(X(e,r),X(t,r),"string"==typeof e&&"string"==typeof t)return e<t?-1:e>t?1:0;if("number"==typeof e&&"number"==typeof t)return Math.sign(e-t);throw new n(`Cannot compare values of different types: ${typeof e} and ${typeof t}`,r)}function 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(O(e[r],n),O(t[r],n),n))return!1;return!0}if(D(e)&&D(t))return e.s===t.s&&e.f===t.f;if(w(e)&&w(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=q(r[o],n);if(!oe(e[i],t[i],n))return!1}return!0}return!1}function ie(e){return e??null}function se(...e){const t=new Set;for(const n of e)n.forEach(e=>t.add(e));return t}function ae(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 m("array",e,t)}function fe(e,t){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}(e))throw m("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 m("array of strings",e,t)}function he(e,t){return e instanceof Promise?e.then(t):t(e)}function pe(e,t){const n=[];for(let r=0;r<e.length;r++){const o=t(e[r],r);if(o instanceof Promise)return ye(o,n,e,t,r);n.push(o)}return n}async function ye(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 ge(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 me(o,e,t,n);r=o}return r}async function me(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 ve(e,t){for(let n=0;n<e.length;n++){const r=t(e[n],n);if(r instanceof Promise)return be(r,e,t,n)}}async function be(e,t,n,r){await e;for(let e=r+1;e<t.length;e++)await n(t[e],e)}function we(e,t){try{const n=e();return n instanceof Promise?n.catch(t):n}catch(e){return t(e)}}function Se(e,t){for(let n=0;n<e.length;n++){const r=t(e[n],n);if(r instanceof Promise)return xe(r,e,t,n);if(r)return n}return-1}async function xe(e,t,n,r){if(await e)return r;for(let e=r+1;e<t.length;e++)if(await n(t[e],e))return e;return-1}const Ee={filter:{evaluate:([e,t],n,r,{executeFunction:o})=>{if(_(e,n),V(t,n),Array.isArray(e))return ge(e,(e,i)=>he(o(t,[i],r,n),t=>(t&&e.push(i),e)),[]);if(W(e)){return he(ge(e.split(""),(e,i)=>he(o(t,[i],r,n),t=>(t&&e.push(i),e)),[]),e=>e.join(""))}return ge(Object.entries(e),(e,[i,s])=>he(o(t,[s],r,n),t=>(t&&(e[i]=s),e)),{})},arity:ee(2)},map:{evaluate:(e,t,r,{executeFunction:o})=>{const i=L(e.at(-1),t);if(T(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)})}),ge(s,(e,n)=>he(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);F(s[0],t);const a="string"==typeof s[0];let u=s[0].length;s.slice(1).forEach(e=>{a?J(e,t):le(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=pe(c,e=>o(i,e,r,t));return a?he(l,e=>(e.forEach(e=>J(e,t)),e.join(""))):l},arity:{min:2}},reduce:{evaluate:([e,t,n],r,o,{executeFunction:i})=>(_(e,r),V(t,r),M(n,r),"string"==typeof e?(J(n,r),0===e.length?n:ge(e.split(""),(e,n)=>i(t,[e,n],o,r),n)):Array.isArray(e)?0===e.length?n:ge(e,(e,n)=>i(t,[e,n],o,r),n):0===Object.keys(e).length?n:ge(Object.entries(e),(e,[,n])=>i(t,[e,n],o,r),n)),arity:ee(3)},get:{evaluate:(e,t)=>{const[n,r]=e,o=ie(e[2]);if(X(r,t),null===n)return o;_(n,t);const i=function(e,t){if(T(e)){if("string"==typeof t&&ne(e,t))return ie(e[t])}else if(K(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:(_(e,t),Array.isArray(e)?e.length:Object.keys(e).length),arity:ee(1)},"contains?":{evaluate:([e,t],n)=>null!==e&&(_(e,n),W(e)?(J(t,n),e.includes(t)):U(e)?(M(t,n),!!e.find(e=>oe(O(e),t,n))):(J(t,n),t in e)),arity:ee(2)},assoc:{evaluate:([e,t,n],r)=>(_(e,r),X(t,r),M(n,r),function(e,t,n,r){if(_(e,r),X(t,r),Array.isArray(e)||"string"==typeof e){if(Z(t,r,{integer:!0}),Z(t,r,{gte:0}),Z(t,r,{lte:e.length}),"string"==typeof e)return J(n,r,{char:!0}),`${e.slice(0,t)}${n}${e.slice(t+1)}`;const o=[...e];return o[t]=n,o}J(t,r);const o={...e};return o[t]=n,o}(e,t,n,r)),arity:ee(3)},"++":{evaluate:(e,t)=>(K(e[0])||_(e[0],t),Array.isArray(e[0])?e.reduce((e,n)=>(le(n,t),e.concat(n)),[]):Y(e[0])?e.reduce((e,n)=>(X(n,t),`${e}${n}`),""):e.reduce((e,n)=>(B(n,t),Object.assign(e,n)),{})),arity:{min:1}}},ke={range:{evaluate:(e,t)=>{const[n,r,o]=e;let i,s,a;Z(n,t,{finite:!0}),1===e.length?(i=0,s=n,a=s>=0?1:-1):2===e.length?(Z(r,t,{finite:!0}),i=n,s=r,a=s>=i?1:-1):(Z(r,t,{finite:!0}),Z(o,t,{finite:!0}),i=n,s=r,a=o,Z(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)=>{Z(t,n,{integer:!0,nonNegative:!0});const r=[];for(let n=0;n<t;n+=1)r.push(e);return r},arity:ee(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 Z(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),V(t,n),he(pe(e,e=>o(t,[e],r,n)),e=>e.flat(1))),arity:ee(2)},"moving-fn":{evaluate:([e,t,n],r,o,{executeFunction:i})=>{le(e,r),Z(t,r,{integer:!0,lte:e.length}),V(n,r);const s=[];for(let n=0;n<=e.length-t;n++)s.push(e.slice(n,n+t));return pe(s,e=>i(n,[e],o,r))},arity:ee(3)},"running-fn":{evaluate:([e,t],n,r,{executeFunction:o})=>{le(e,n),V(t,n);const i=[];for(let t=0;t<e.length;t+=1)i.push(e.slice(0,t+1));return pe(i,e=>o(t,[e],r,n))},arity:ee(2)}},Ne={nth:{evaluate:(e,t)=>{const[n,r]=e,o=ie(e[2]);if(Z(r,t,{integer:!0}),null===n)return o;if(F(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;F(e,t);return ie(e[0])},arity:ee(1)},last:{evaluate:([e],t)=>{if(null===e)return null;F(e,t);return ie(e.at(-1))},arity:ee(1)},pop:{evaluate:([e],t)=>(F(e,t),"string"==typeof e?e.substring(0,e.length-1):e.slice(0,e.length-1)),arity:ee(1)},"index-of":{evaluate:([e,t],n)=>{if(M(t,n),null===e)return null;if(F(e,n),"string"==typeof e){J(t,n);const r=e.indexOf(t);return-1!==r?r:null}{const r=e.findIndex(e=>oe(O(e,n),t),n);return-1!==r?r:null}},arity:ee(2)},push:{evaluate:([e,...t],n)=>(F(e,n),"string"==typeof e?(de(t,n),[e,...t].join("")):[...e,...t]),arity:{min:2}},rest:{evaluate:([e],t)=>(F(e,t),Array.isArray(e)?e.length<=1?[]:e.slice(1):e.substring(1)),arity:ee(1)},next:{evaluate:([e],t)=>(F(e,t),Array.isArray(e)?e.length<=1?null:e.slice(1):e.length<=1?null:e.substring(1)),arity:ee(1)},reverse:{evaluate:([e],t)=>null===e?null:(F(e,t),Array.isArray(e)?[...e].reverse():e.split("").reverse().join("")),arity:ee(1)},second:{evaluate:([e],t)=>null===e?null:(F(e,t),ie(e[1])),arity:ee(1)},slice:{evaluate:(e,t)=>{const[n,r,o]=e;return F(n,t),Z(r,t,{integer:!0}),2===e.length?(Array.isArray(n),n.slice(r)):(Z(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(V(t,n),null===e)return null;if(F(e,n),0===e.length)return null;return ge("string"==typeof e?e.split(""):e,(e,i)=>null!==e?e:he(o(t,[i],r,n),e=>e?ie(i):null),null)},arity:ee(2)},sort:{evaluate:(e,t,n,{executeFunction:r})=>{const[o]=e,i=1===e.length,s=i?null:e[1];if(F(o,t),"string"==typeof o){const e=o.split("");return i?e.sort((e,n)=>re(e,n,t)):(V(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 Z(i,t,{finite:!0}),i})),e.join("")}const a=[...o];return i?a.sort((e,n)=>(X(e,t),X(n,t),re(e,n,t))):a.sort((e,o)=>{V(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 Z(i,t,{finite:!0}),i}),a},arity:{min:1,max:2}},take:{evaluate:([e,t],n)=>{Z(t,n),F(e,n);const r=Math.max(Math.ceil(t),0);return e.slice(0,r)},arity:ee(2)},"take-last":{evaluate:([e,t],n)=>{F(e,n),Z(t,n);const r=Math.max(Math.ceil(t),0),o=e.length-r;return e.slice(o)},arity:ee(2)},drop:{evaluate:([e,t],n)=>{Z(t,n);const r=Math.max(Math.ceil(t),0);return F(e,n),e.slice(r)},arity:ee(2)},"drop-last":{evaluate:([e,t],n)=>{F(e,n),Z(t,n);const r=Math.max(Math.ceil(t),0),o=e.length-r;return e.slice(0,o)},arity:ee(2)},"take-while":{evaluate:([e,t],n,r,{executeFunction:o})=>{F(e,n),V(t,n);const i="string"==typeof e?e.split(""):Array.from(e);return he(Se(i,e=>he(o(t,[e],r,n),e=>!e)),t=>{const n=-1===t?i:i.slice(0,t);return"string"==typeof e?n.join(""):n})},arity:ee(2)},"drop-while":{evaluate:([e,t],n,r,{executeFunction:o})=>{F(e,n),V(t,n);const i=Array.isArray(e)?e:e.split("");return he(Se(i,e=>he(o(t,[e],r,n),e=>!e)),t=>-1===t?"string"==typeof e?"":[]:"string"==typeof e?i.slice(t).join(""):e.slice(t))},arity:ee(2)}},Pe=new WeakSet,$e=new WeakSet,Ae=new WeakSet,Ie=new WeakSet,je=new WeakSet,Ce=new WeakSet,Oe=new WeakSet;function Me(e){return Array.isArray(e)?(Pe.has(e)||(Ue(e),Re(e)||Be(e)),e):e}function Ue(e){return!!Array.isArray(e)&&(!!$e.has(e)||!Ae.has(e)&&(e.every(e=>K(e))?(Pe.add(e),$e.add(e),!0):(Ae.add(e),!1)))}function Fe(e,t){if(!Ue(e))throw new n(`Expected a vector, but got ${e}`,t)}function Te(e,t){if(Fe(e,t),0===e.length)throw new n(`Expected a non empty vector, but got ${e}`,t)}function Be(e){if(!Array.isArray(e))return!1;if(Ce.has(e))return!0;if(Oe.has(e))return!1;if(0===e.length)return Oe.add(e),!1;if(!Array.isArray(e[0]))return Oe.add(e),!1;const t=e[0].length;for(const n of e.slice(1)){if(!Array.isArray(n))return Oe.add(e),!1;if(n.length!==t)return Oe.add(e),!1}return Pe.add(e),Ce.add(e),!0}function Re(e){if(!Array.isArray(e))return!1;if(Ie.has(e))return!0;if(je.has(e))return!1;if(0===e.length)return je.add(e),!1;if(!Array.isArray(e[0])||0===e[0].length)return je.add(e),!1;const t=e[0].length;for(const n of e)if(!Array.isArray(n)||n.length!==t||n.some(e=>!K(e)))return je.add(e),!1;return Pe.add(e),Ce.add(e),Ie.add(e),!0}function _e(e,t){let r=!1,o=!1;for(const i of e)if(Ue(i))r=!0;else if(Re(i))o=!0;else if(!K(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(Re(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=>Re(e)?e:Array.from({length:o},()=>Array.from({length:i},()=>e)))]}if(r){let r=null;for(const o of e)if(Ue(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=>Ue(e)?e:Array.from({length:r},()=>e))]}return["number",e]}function De(e){return(t,n)=>{const[r,o]=_e(t,n);return"number"===r?e(o[0]):"vector"===r?o[0].map(t=>e(t)):o[0].map(t=>t.map(t=>e(t)))}}function ze(e){return(t,n)=>{const[r,o]=_e(t,n);return"number"===r?e(o[0],o[1]):"vector"===r?o[0].map((t,n)=>e(t,o[1][n])):o[0].map((t,n)=>t.map((t,r)=>e(t,o[1][n][r])))}}function Le(e,t){return(n,r)=>{if(0===n.length)return e;const[o,i]=_e(n,r);if("number"===o)return i.reduce((e,n)=>t(e,n),e);if("vector"===o){const[e,...n]=i;return n.reduce((e,n)=>e.map((e,r)=>t(e,n[r])),e)}{const[e,...n]=i;return n.reduce((e,n)=>e.map((e,r)=>e.map((e,o)=>t(e,n[r][o]))),e)}}}const Ve={inc:{evaluate:De(e=>e+1),arity:ee(1)},dec:{evaluate:De(e=>e-1),arity:ee(1)},"+":{evaluate:Le(0,(e,t)=>e+t),arity:{}},"*":{evaluate:Le(1,(e,t)=>e*t),arity:{}},"/":{evaluate:(e,t)=>{if(0===e.length)return 1;const[n,r]=_e(e,t);if("number"===n){const[e,...t]=r;return 0===t.length?1/e:t.reduce((e,t)=>e/t,e)}if("vector"===n){const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e/t[n]),e)}{const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e.map((e,r)=>e/t[n][r])),e)}},arity:{}},"-":{evaluate:(e,t)=>{if(0===e.length)return 0;const[n,r]=_e(e,t);if("number"===n){const[e,...t]=r;return 0===t.length?-e:t.reduce((e,t)=>e-t,e)}if("vector"===n){const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e-t[n]),e)}{const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e.map((e,r)=>e-t[n][r])),e)}},arity:{}},quot:{evaluate:ze((e,t)=>Math.trunc(e/t)),arity:ee(2)},mod:{evaluate:ze((e,t)=>e-t*Math.floor(e/t)),arity:ee(2)},"%":{evaluate:ze((e,t)=>e%t),arity:ee(2)},sqrt:{evaluate:De(e=>Math.sqrt(e)),arity:ee(1)},cbrt:{evaluate:De(e=>Math.cbrt(e)),arity:ee(1)},"^":{evaluate:ze((e,t)=>e**t),arity:ee(2)},round:{evaluate:([e,t],n)=>{const[r,o]=_e([e],n);if("number"===r){if(void 0===t||0===t)return Math.round(o[0]);{Z(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));{Z(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)));{Z(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:De(e=>Math.trunc(e)),arity:ee(1)},floor:{evaluate:De(e=>Math.floor(e)),arity:ee(1)},ceil:{evaluate:De(e=>Math.ceil(e)),arity:ee(1)},min:{evaluate:(e,t)=>{if(1===e.length&&Ue(e[0])){const n=e[0];return Te(n,t),n.reduce((e,t)=>Math.min(e,t),1/0)}const[n,...r]=e;return Z(n,t),r.reduce((e,n)=>(Z(n,t),Math.min(e,n)),n)},arity:{min:1}},max:{evaluate:(e,t)=>{if(1===e.length&&Ue(e[0])){const n=e[0];return Te(n,t),n.reduce((e,t)=>Math.max(e,t),-1/0)}const[n,...r]=e;return Z(n,t),r.reduce((e,n)=>(Z(n,t),Math.max(e,n)),n)},arity:{min:1}},abs:{evaluate:De(e=>Math.abs(e)),arity:ee(1)},sign:{evaluate:De(e=>Math.sign(e)),arity:ee(1)}};function We([e,...t],n){const r=O(e,n);for(const e of t)if(!oe(r,O(e,n),n))return!1;return!0}const Je={"==":{evaluate:(e,t)=>We(e,t),arity:{min:1}},"!=":{evaluate:(e,t)=>!We(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=G(e);for(const e of t){if(re(r,G(e),n)<=0)return!1;r=G(e)}return!0},arity:{min:1}},"<":{evaluate:([e,...t],n)=>{let r=G(e);for(const e of t){if(re(r,G(e),n)>=0)return!1;r=G(e)}return!0},arity:{min:1}},">=":{evaluate:([e,...t],n)=>{let r=G(e);for(const e of t){if(re(r,G(e),n)<0)return!1;r=G(e)}return!0},arity:{min:1}},"<=":{evaluate:([e,...t],n)=>{let r=G(e);for(const e of t){if(re(r,G(e),n)>0)return!1;r=G(e)}return!0},arity:{min:1}},not:{evaluate:([e])=>!e,arity:ee(1)},"epoch->iso-date":{evaluate:([e],t)=>(Z(e,t),new Date(e).toISOString()),arity:ee(1)},"iso-date->epoch":{evaluate:([e],t)=>{J(e,t);const n=new Date(e).valueOf();return Z(n,t,{finite:!0}),n},arity:ee(1)},"write!":{evaluate:(e,t)=>(console.log(...e),e.length>0?O(e[e.length-1],t):null),pure:!1,arity:{}},boolean:{evaluate:([e])=>!!e,arity:ee(1)},compare:{evaluate:([e,t],n)=>(X(e,n),X(t,n),re(e,t,n)),arity:ee(2)},"json-parse":{evaluate:([e],t)=>(J(e,t),JSON.parse(e)),arity:ee(1)},"json-stringify":{evaluate:([e,t],n)=>(M(e,n),void 0===t?JSON.stringify(e):(Z(t,n),JSON.stringify(e,null,t))),arity:{min:1,max:2}}},qe={keys:{evaluate:([e],t)=>(B(e,t),Object.keys(e)),arity:ee(1)},vals:{evaluate:([e],t)=>(B(e,t),Object.values(e)),arity:ee(1)},entries:{evaluate:([e],t)=>(B(e,t),Object.entries(e)),arity:ee(1)},find:{evaluate:([e,t],n)=>(B(e,n),J(t,n),ne(e,t)?[t,e[t]]:null),arity:ee(2)},dissoc:{evaluate:([e,t],n)=>{B(e,n),J(t,n);const r={...e};return delete r[t],r},arity:ee(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),V(i,t),ge(s,(e,o)=>{B(o,t);return he(ge(Object.entries(o),(e,o)=>{const s=q(o[0],t),a=ie(o[1]);return ne(e,s)?he(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)=>{fe(e,n),le(t,n);const r=Math.min(e.length,t.length),o={};for(let i=0;i<r;i+=1){o[q(e[i],n)]=ie(t[i])}return o},arity:ee(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:ee(2)}},Ye={"function?":{evaluate:([e])=>S(e),arity:ee(1)},"string?":{evaluate:([e])=>"string"==typeof e,arity:ee(1)},"number?":{evaluate:([e])=>"number"==typeof e,arity:ee(1)},"integer?":{evaluate:([e])=>"number"==typeof e&&K(e,{integer:!0}),arity:ee(1)},"boolean?":{evaluate:([e])=>"boolean"==typeof e,arity:ee(1)},"null?":{evaluate:([e])=>null==e,arity:ee(1)},"zero?":{evaluate:([e],t)=>(Z(e,t,{finite:!0}),Math.abs(e)<ue),arity:ee(1)},"pos?":{evaluate:([e],t)=>(Z(e,t,{finite:!0}),e>0),arity:ee(1)},"neg?":{evaluate:([e],t)=>(Z(e,t,{finite:!0}),e<0),arity:ee(1)},"even?":{evaluate:([e],t)=>(Z(e,t,{finite:!0}),e%2==0),arity:ee(1)},"odd?":{evaluate:([e],t)=>(Z(e,t,{finite:!0}),K(e,{integer:!0})&&e%2!=0),arity:ee(1)},"array?":{evaluate:([e])=>Array.isArray(e),arity:ee(1)},"collection?":{evaluate:([e])=>R(e),arity:ee(1)},"sequence?":{evaluate:([e])=>U(e),arity:ee(1)},"object?":{evaluate:([e])=>T(e),arity:ee(1)},"regexp?":{evaluate:([e])=>D(e),arity:ee(1)},"finite?":{evaluate:([e],t)=>(Z(e,t),Number.isFinite(e)),arity:ee(1)},"positive-infinity?":{evaluate:([e],t)=>(Z(e,t),e===Number.POSITIVE_INFINITY),arity:ee(1)},"negative-infinity?":{evaluate:([e],t)=>(Z(e,t),e===Number.NEGATIVE_INFINITY),arity:ee(1)},"true?":{evaluate:([e])=>!0===e,arity:ee(1)},"false?":{evaluate:([e])=>!1===e,arity:ee(1)},"empty?":{evaluate:([e],t)=>null===e||(_(e,t),"string"==typeof e||Array.isArray(e)?0===e.length:0===Object.keys(e).length),arity:ee(1)},"not-empty?":{evaluate:([e],t)=>null!==e&&(_(e,t),"string"==typeof e||Array.isArray(e)?e.length>0:Object.keys(e).length>0),arity:ee(1)},"vector?":{evaluate:([e])=>Ue(e),arity:ee(1)},"matrix?":{evaluate:([e])=>Re(e),arity:ee(1)},"grid?":{evaluate:([e])=>Be(e),arity:ee(1)}},Ge={regexp:{evaluate:([e,t],r)=>{J(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{[d]:!0,sourceCodeInfo:r,s:o,f:i}},arity:{min:1,max:2}},"re-match":{evaluate:([e,t],n)=>{if(function(e,t){if(!D(e))throw m("RegularExpression",e,t)}(t,n),!W(e))return null;const r=new RegExp(t.s,t.f).exec(e);return r?[...r]:null},arity:ee(2)},replace:{evaluate:([e,t,n],r)=>{J(e,r),z(t,r),J(n,r);const o=D(t)?new RegExp(t.s,`${t.f}`):t;return e.replace(o,n)},arity:ee(3)},"replace-all":{evaluate:([e,t,n],r)=>{J(e,r),z(t,r),J(n,r);const o=D(t)?new RegExp(t.s,`${t.f.includes("g")?t.f:`${t.f}g`}`):t;return e.replaceAll(o,n)},arity:ee(3)}},Xe=/^\s*$/,He={str:{evaluate:e=>e.reduce((e,t)=>e+(null==t?"":T(t)||Array.isArray(t)?JSON.stringify(t):`${t}`),""),arity:{}},number:{evaluate:([e],t)=>{J(e,t);const r=Number(e);if(Number.isNaN(r))throw new n(`Could not convert '${e}' to a number.`,t);return r},arity:ee(1)},"lower-case":{evaluate:([e],t)=>(J(e,t),e.toLowerCase()),arity:ee(1)},"upper-case":{evaluate:([e],t)=>(J(e,t),e.toUpperCase()),arity:ee(1)},trim:{evaluate:([e],t)=>(J(e,t),e.trim()),arity:ee(1)},join:{evaluate:([e,t],n)=>(le(e,n),e.forEach(e=>X(e,n)),J(t,n),e.join(t)),arity:ee(2)},split:{evaluate:([e,t,n],r)=>{J(e,r),z(t,r),void 0!==n&&Z(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||(J(e,t),Xe.test(e)),arity:ee(1)}},Ke={"|>":{evaluate:([e,t],n,r,{executeFunction:o})=>(V(t,n),o(t,[e],r,n)),arity:ee(2)},apply:{evaluate:([e,...t],n,r,{executeFunction:o})=>{V(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:ee(1)},comp:{evaluate:(e,t)=>{return e.forEach(e=>V(e,t)),{[f]:!0,sourceCodeInfo:t,functionType:"Comp",params:e,arity:e.length>0?(n=e.at(-1),"number"==typeof n||R(n)?ee(1):n.arity):{min:1,max:1}};var n},arity:{}},constantly:{evaluate:([e],t)=>({[f]:!0,sourceCodeInfo:t,functionType:"Constantly",value:ie(e),arity:{}}),arity:ee(1)}};function Ze(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(", ")})`} -> ${Qe(r)}`),s=o?["","Operator:",` a ${e} b -> ${Qe(r)}`]:[];return[...i,...s]}(e).join("\n ")}\n\n Arguments:\n ${function(e){return Object.entries(e.args).map(([e,t])=>`${e}: ${Qe(t)}`)}(e).join("\n ")}\n\n Examples:\n${e.examples.map(e=>ce(e,4)).join("\n\n")}`)}function Qe(e){const t=e.type,n=(Array.isArray(t)?t:[t]).join(" | ");return e.array||e.rest?`Array<${n}>`:n}const et={sum:{evaluate:([e],t)=>(Fe(e,t),e.reduce((e,t)=>e+t,0)),arity:ee(1)},prod:{evaluate:([e],t)=>(Fe(e,t),e.reduce((e,t)=>e*t,1)),arity:ee(1)},mean:{evaluate:([e],t)=>(Te(e,t),e.reduce((e,t)=>e+t,0)/e.length),arity:ee(1)},median:{evaluate:([e],t)=>(Te(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:ee(1)}},tt={...H,...te,...Ee,...ke,...Ne,...Ve,...function(e){return{doc:{evaluate:([t],n)=>{if(b(e),V(t,n),!S(t))return"";if("Builtin"===t.functionType){const n=e[t.name];return n?Ze(n):""}return"UserDefined"===t.functionType||"NativeJsFunction"===t.functionType?t.docString:""},arity:ee(1)},arity:{evaluate:([e],t)=>(V(e,t),S(e)?e.arity:ee(1)),arity:ee(1)}}}({}),...Je,...qe,...Ye,...Ge,...He,...Ke,...et};Object.entries(tt).forEach(([e,t])=>{t.name=e});const nt={...tt},rt={},ot=[];Object.entries(nt).forEach(([e,t],n)=>{rt[e]=n,ot.push(t)});const it={arity:{},evaluate:(e,t,{evaluateNode:n})=>ge(e[1][1],(e,r)=>e?n(r,t):e,!0),evaluateAsNormalExpression:(e,t)=>{let n=!0;for(const r of e)if(n=O(r,t),!n)break;return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},st={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1];return function e(o){if(o>=r.length)return null;const[i,s]=r[o];return he(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)};function at(e){return"object"==typeof e&&null!==e&&"fn"in e&&"function"==typeof e.fn}const ut=11,ct=12,lt=13,ft=14,dt=15,ht=16;function pt(e,t){if(e[0]===lt)Object.values(e[1][0]).forEach(e=>{e[1][1]&&t(e[1][1]),pt(e,t)});else if(e[0]===ft)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]),pt(r,t))}}function yt(e,t,n){const r=e[2],o={};return he(gt(e,t,n,r,o),()=>o)}function gt(e,t,r,o,i){if(e[0]===lt){!function(e,t){if(!w(e))throw new n(`Expected UnknownRecord, got ${y(e)}.`,g(e,t))}(t,o);const s=new Set;let a;return he(ve(Object.entries(e[1][0]),([e,n])=>{if(n[0]===ct)return void(a=n);s.add(e);const u=t[e];return he(void 0!==u?u:n[1][1]?r(n[1][1]):null,e=>{const t=e??null;return M(t,o),gt(n,t,r,o,i)})}),()=>{if(a){const e=Object.entries(t).filter(([e])=>!s.has(e)).reduce((e,[t,n])=>(e[t]=O(n),e),{});i[a[1][0]]=e}})}if(e[0]===ft){let n=null;le(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]===ct){n=t;break}s.push({element:r,index:t})}}return he(ve(s,({element:e,index:n})=>{const s=t[n];return he(void 0!==s?s:e[1][1]?r(e[1][1]):null,t=>{const n=t??null;return M(n,o),gt(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]===ct?i[e[1][0]]=O(t):i[e[1][0][1]]=O(t)}function mt(e){const t={};return vt(e,t),t}function vt(e,t){if(null!==e)if(e[0]===ft)for(const n of e[1][0])vt(n,t);else if(e[0]===lt)for(const n of Object.values(e[1][0]))vt(n,t);else if(e[0]===ct){if(t[e[1][0]])throw new n(`Duplicate binding name: ${e[1][0]}`,e[2]);t[e[1][0]]=!0}else if(e[0]===ut){if(t[e[1][0][1]])throw new n(`Duplicate binding name: ${e[1][0]}`,e[2]);t[e[1][0][1]]=!0}}function bt(e,t,n){const r={};return he(wt(e,t,n,r),e=>e?r:null)}function wt(e,t,n,r){if(e[0]===ht)return!0;if(e[0]===dt){const r=e[1][0];return he(n(r),e=>oe(t,e))}if(e[0]===ut){const o=e[1][0],i=e[1][1];if(null==t){if(i)return he(n(i),e=>(r[o[1]]=O(e),!0));r[o[1]]=t??null}else r[o[1]]=O(t);return!0}if(e[0]===lt){if(!w(t))return!1;const o=new Set;let i;const s=Object.entries(e[1][0]);let a=!0;for(const[e,u]of s)a=he(a,s=>{if(!s)return!1;if(u[0]===ct)return i=u,!0;o.add(e);const a=t[e];if(void 0===a&&u[0]===dt)return he(n(u[1][0]),e=>oe(void 0,e));return he(void 0!==a?a:u[1]&&u[1][1]?n(u[1][1]):null,e=>wt(u,e??null,n,r))});return he(a,e=>{if(!e)return!1;if(i){const e=Object.entries(t).filter(([e])=>!o.has(e)).reduce((e,[t,n])=>(e[t]=O(n),e),{});r[i[1][0]]=e}return!0})}{const o=e;if(!Array.isArray(t))return!1;const i=o[1][0];let s=null;for(let e=0;e<i.length;e+=1){const t=i[e];if(null!==t&&t[0]===ct){s=e;break}}if(null===s&&t.length!==i.length)return!1;if(null!==s&&t.length<s)return!1;let a=!0;for(let e=0;e<i.length;e+=1){const o=i[e];if(null===o)continue;if(o[0]===ct){r[o[1][0]]=t.slice(e);break}const s=o;a=he(a,o=>!!o&&wt(s,O(t[e]),n,r))}return a}}const St={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[,r,o]=e[1];return he(n(r,t),e=>function r(i){if(i>=o.length)return null;const[s,a,u]=o[i];return he(bt(s,e,e=>n(e,t)),e=>{if(null===e)return r(i+1);const o={};for(const[t,n]of Object.entries(e))o[t]={value:n};const s=t.create(o);return u?he(n(u,s),e=>e?n(a,s):r(i+1)):n(a,s)})}(0))},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const i=new Set;n([e[1][1]],t,r,o).forEach(e=>i.add(e));for(const[s,a,u]of e[1][2]){const e={};Object.assign(e,mt(s));const c=t.create(e);u&&n([u],c,r,o).forEach(e=>i.add(e)),n([a],c,r,o).forEach(e=>i.add(e))}return i}};function xt(e){const t=e[0];return a.UserDefinedSymbol===t||a.NormalBuiltinSymbol===t||a.SpecialBuiltinSymbol===t}function Et(e){return a.UserDefinedSymbol===e[0]}function kt(e,t){return function(e,t){if(!Et(e))throw m("UserDefinedSymbolNode",e,t)}(e,t),e}function Nt(e){return a.NormalBuiltinSymbol===e[0]}function Pt(e){return a.SpecialBuiltinSymbol===e[0]}function $t(e){return!!function(e){return e[0]===a.NormalExpression}(e)&&xt(e[1][0])}function At(e){return e[0]===a.Spread}const It={arity:ee(1),evaluate:(e,t)=>{const n=e[1][1];if(function(e,t){if(!xt(e))throw m("SymbolNode",e,t)}(n),!Et(n))return!0;return null!==t.lookUp(n)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n([e[1][1]],t,r,o)},jt={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=t.create({});return ge(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)},Ct={arity:{},evaluate:(e,t,{builtin:n,getUndefinedSymbols:r,evaluateNode:o})=>{const i=e[1][1],s=e[1][2],a=function(e,t,n,r,o){const i={},s=e[0].reduce((e,t)=>(Object.keys(mt(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);C(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]!==ct&&void 0===e[1][1]).length,c={min:u>0?u:void 0,max:a[0].some(e=>e[0]===ct)?void 0:a[0].length};return{[f]:!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,mt(e)),pt(e,e=>{ae(i,n([e],t,r,o))})});const a=t.create(s),u=n(e[1],a,r,o);return ae(i,u),i}(e[1][1],t,n,r,o)};const Ot={arity:{min:2,max:3},evaluate:(e,t,{evaluateNode:n})=>{const[r,o,i]=e[1][1];return he(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)},Mt={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[r,o,i]=e[1][1];return he(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)},Ut={arity:ee(0),evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1],o=r[1][0],i=r[1][1];return he(n(i,t),e=>he(yt(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 pt(s,e=>{ae(u,n([e],t,r,o))}),t.addValues(mt(s),s[2]),u}},Ft={arity:{},evaluate:(e,r,{evaluateNode:o})=>{const i=e[1][1],s=ge(i,(e,t)=>he(o(t[1][1],r.create(e)),n=>he(yt(t[1][0],n,e=>o(e,r)),t=>(Object.entries(t).forEach(([t,n])=>{e[t]={value:n}}),e))),{});return he(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 ${y(t.length)}`,e[2]);return he(ve(i,(e,n)=>he(yt(e[1][0],O(t[n]),e=>o(e,r)),e=>{for(const[t,n]of Object.entries(e))s[t].value=n})),()=>l())}function l(){return we(()=>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 ${y(t.length)}`,e[2]);for(let e=0;e<i.length;e+=1){const n=yt(i[e][1][0],O(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 he(ve(i.slice(e+1),(n,i)=>he(yt(n[1][0],O(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=mt(t[1][0]);return Object.keys(n).forEach(t=>{e[t]={value:!0}}),e},{});return se(n(i.map(e=>e[1][1]),t,r,o),n([e[1][2]],t.create(s),r,o))}};function Tt(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 he(function e(t){if(t>=i.length)return"continue";const[n,s,a,f]=i[t],[d,h]=n[1];return he(r(h,l),n=>{const i=function(e,t){return _(e,t),e}(n,o),h=U(i)?i:Object.entries(i);if(0===h.length)return"abort";const p=v(u[t],o);if(p>=h.length)return 0===t?"abort":(u[t]=0,u[t-1]=v(u[t-1],o)+1,"skip");const y=O(h[p],o);return he(yt(d,y,e=>r(e,l)),n=>(Object.entries(n).forEach(([e,t])=>{c[e]={value:t}}),he(s.length>0?function(e,t,n,r){let o;for(const i of e)o=he(o,()=>{const[e,o]=i[1];return he(r(o,n),o=>he(yt(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?he(r(a,l),n=>n?f?he(r(f,l),n=>n?e(t+1):(u[t]=Number.POSITIVE_INFINITY,"skip")):e(t+1):(u[t]=v(u[t],o)+1,"skip")):f?he(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():he(r(s,l),n=>(e&&a.push(n),u.length>0&&(u[u.length-1]+=1),t())))}()}function Bt(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,mt(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,mt(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 Rt={arity:ee(1),evaluate:(e,t,n)=>Tt(!0,e,t,n.evaluateNode),getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>Bt(e,t,n,r,o)},_t={arity:ee(1),evaluate:(e,t,n)=>he(Tt(!1,e,t,n.evaluateNode),()=>null),getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>Bt(e,t,n,r,o)},Dt={arity:{},evaluate:(e,t,{evaluateNode:n})=>ge(e[1][1],(e,r)=>e||n(r,t),!1),evaluateAsNormalExpression:(e,t)=>{let n=!1;for(const r of e)if(n=O(r,t),n)break;return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},zt={arity:{min:1},evaluate:(e,t,{evaluateNode:n})=>{const r=Symbol("qq-sentinel");return he(ge(e[1][1],(e,o)=>e!==r?e:Et(o)&&null===t.lookUp(o)?r:he(n(o,t),e=>null!==e?e:r),r),e=>e===r?null:e)},evaluateAsNormalExpression:(e,t)=>{for(const n of e){const e=O(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)},Lt={arity:{},evaluate:(e,n,{evaluateNode:r})=>he(pe(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)},Vt={arity:ee(1),evaluate:(e,t,{evaluateNode:n})=>he(n(e[1][1],t),t=>{const n=q(t,e[2],{nonEmpty:!0});throw new r(n,e[2])}),evaluateAsNormalExpression:(e,t)=>{const n=q(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)},Wt={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[,r,o,i]=e[1];return we(()=>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 se(u,n([a],t.create(c),r,o))}},Jt={arity:{},evaluate:(e,t,{evaluateNode:r})=>{const o=[];return he(ve(e[1][1],e=>At(e)?he(r(e[1],t),t=>{if(!Array.isArray(t))throw new n("Spread value is not an array",e[2]);o.push(...t)}):he(r(e,t),e=>{o.push(e)})),()=>o)},evaluateAsNormalExpression:(e,t)=>{const n=[];for(const r of e)n.push(O(r,t));return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},qt={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(At(a))return he(r(a[1],t),t=>{if(!w(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 he(r(a,t),n=>he(r(u,t),t=>(J(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];J(o,t),n[o]=i??null}return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},Yt={arity:ee(1),evaluate:(e,t)=>{const r=e[1][1],o=e[2],i=t.getValueModule(r);if(i.found)return i.value;const s=t.getModule(r);if(!s)throw new n(`Unknown module: '${r}'`,o);const a={};for(const[e,t]of Object.entries(s.functions))a[e]={[f]:!0,sourceCodeInfo:o,functionType:"Module",moduleName:r,functionName:e,arity:t.arity};return a},getUndefinedSymbols:()=>new Set},Gt={"??":0,"&&":1,"||":2,array:3,cond:4,"defined?":5,block:6,doseq:7,"0_lambda":8,for:9,if:10,let:11,loop:12,object:13,recur:14,match:15,throw:16,try:17,unless:18,import:19},Xt=[zt,it,Dt,Jt,st,It,jt,_t,Ct,Rt,Ot,Ut,Ft,qt,Lt,St,Vt,Wt,Mt,Yt],Ht={normalExpressions:nt,specialExpressions:Xt,allNormalExpressions:ot},Kt=Object.keys(nt),Zt=Object.keys(Gt),Qt=(e,t,n,r)=>{const o=Array.isArray(e)?e:[[a.SpecialExpression,[Gt.block,e.body]]],i=new Set;for(const e of o)en(e,t,n,r)?.forEach(e=>i.add(e));return i};function en(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($t(n)){const[,[e]]=n;if(Et(e)){null===t.lookUp(e)&&i.add(e[1])}}else{const[,[e]]=n;en(e,t,r,o)?.forEach(e=>i.add(e))}for(const e of n[1][1])en(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:Qt,builtin:r,evaluateNode:o})}case a.Spread:return en(e[1],t,r,o);default:throw new n(`Unhandled node type: ${i}`,e[2])}}const tn=(1+Math.sqrt(5))/2,nn={E:Math.E,"-E":-Math.E,"ε":Math.E,"-ε":-Math.E,PI:Math.PI,"-PI":-Math.PI,"π":Math.PI,"-π":-Math.PI,PHI:tn,"-PHI":-tn,"φ":tn,"-φ":-tn,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},rn={true:!0,false:!1,null:null,do:null,else:null,case:null,each:null,in:null,when:null,while:null,catch:null,function:null,as:null,then:null,end:null,_:null,...nn};const on={NativeJsFunction:(e,t,r,o)=>{if(o.pure&&!e.nativeFn.pure)throw new n(`Cannot call impure native function '${e.name}' in pure mode`,r);try{const o=e.nativeFn.fn(...t);return o instanceof Promise?o.then(e=>ie(e),e=>{const t="string"==typeof e?e:w(e)&&"string"==typeof e.message?e.message:"<no message>";throw new n(`Native function threw: "${t}"`,r)}):ie(o)}catch(e){const t="string"==typeof e?e:w(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]!==ct).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=he(p,()=>{const e=ie(r[t]);return he(yt(c[t],e,e=>s(e,f.create(d))),e=>{Object.entries(e).forEach(([e,t])=>{d[e]={value:t}})})})}else h.push(ie(r[e]));for(let e=r.length;e<l;e++){const t=e;y=he(y,()=>{const e=c[t];return he(s(e[1][1],i.create(d)),t=>he(yt(e,t,e=>s(e,i.create(d))),e=>{Object.entries(e).forEach(([e,t])=>{d[e]={value:t}})}))})}return he(p,()=>he(y,()=>{const e=c.find(e=>e[0]===ct),n=void 0!==e?he(yt(e,h,e=>s(e,i.create(d))),e=>{Object.entries(e).forEach(([e,t])=>{d[e]={value:t}})}):void 0;return he(n,()=>{const e=f.create(d),n=ge(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 ${y(t.length)}.`,r);return O(t[0],r)}let a=t;for(let e=s.length-1;e>=0;e--){const t=s[e];a=he(a,e=>he(i(L(t,r),e,o,r),e=>[e]))}return he(a,e=>O(e[0],r))},Constantly:e=>e.value,Juxt:(e,t,n,r,{executeFunction:o})=>pe(e.params,e=>o(L(e,n),t,r,n)),Complement:(e,t,n,r,{executeFunction:o})=>he(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 ge(i,(e,t)=>!!e&&he(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 ge(i,(e,t)=>!!e||he(t(),e=>!!e),!1)},Fnull:(e,t,n,r,{executeFunction:o})=>{const i=t.map((t,n)=>null===t?ie(e.params[n]):t);return o(L(e.function,n),i,r,n)},Builtin:(e,t,r,o,{executeFunction:i})=>{const s=v(ot[e.normalBuiltinSymbolType],r);if(o.pure&&!1===s.pure)throw new n(`Cannot call impure function '${e.name}' in pure mode`,r);return s.evaluate(t,r,o,{executeFunction:i})},SpecialBuiltin:(e,t,r,o,{executeFunction:i})=>{const s=v(Xt[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);if(o.pure&&!1===a.pure)throw new n(`Cannot call impure function '${e.functionName}' in pure mode`,r);return Q(a.arity,t.length,r),a.evaluate(t,r,o,{executeFunction:i})}};function sn(e,t){return ge(e.body,(e,n)=>an(n,t),null)}function an(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 v(rn[t],e[2])}(e);case a.NormalExpression:{const r=function(e,t){const r=e[2];return he(function(e,t){const r=[],o=[],i=ve(e,(e,i)=>At(e)?he(an(e[1],t),t=>{if(!Array.isArray(t))throw new n(`Spread operator requires an array, got ${y(e)}`,e[2]);r.push(...t)}):e[0]!==a.ReservedSymbol||"_"!==e[1]?he(an(e,t),e=>{r.push(e)}):void o.push(i));return he(i,()=>({params:r,placeholders:o}))}(e[1][1],t),({params:o,placeholders:s})=>{if($t(e)){const a=e[1][0];if(s.length>0){return he(an(a,t),e=>({[f]:!0,function:L(e,r),functionType:"Partial",params:o,placeholders:s,sourceCodeInfo:r,arity:ee(s.length)}))}if(Nt(a)){const r=a[1],i=Ht.allNormalExpressions[r];if(t.pure&&!1===i.pure)throw new n(`Cannot call impure function '${i.name}' in pure mode`,e[2]);return i.evaluate(o,e[2],t,{executeFunction:un})}{const n=t.getValue(a[1]);if(void 0!==n)return un(L(n,r),o,t,r);throw new i(a[1],e[2])}}return he(an(e[1][0],t),e=>{const n=L(e,r);if(s.length>0){return{[f]:!0,function:n,functionType:"Partial",params:o,placeholders:s,sourceCodeInfo:r,arity:ee(s.length)}}return un(n,o,t,r)})})}(e,t);return he(r,t=>{if("number"==typeof t&&Number.isNaN(t))throw new n("Number is NaN",e[2]);return Me(t)})}case a.SpecialExpression:return he(function(e,t){const n=e[1][0],r=v(Ht.specialExpressions[n],e[2]);return(0,r.evaluate)(e,t,{evaluateNode:an,builtin:Ht,getUndefinedSymbols:Qt})}(e,t),e=>Me(e));default:throw new n(`${c(e[0])}-node cannot be evaluated`,e[2])}}function un(e,t,r,o){if(S(e))return on[e.functionType](e,t,o,r,{evaluateNode:an,executeFunction:un});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 Z(o,r,{integer:!0,nonNegative:!0}),ie(e[o])}(e,t,o);if(T(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 J(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(T(o))return ie(o[e]);if(K(o,{integer:!0}))return ie(e[o]);throw new n(`string as function expects Obj or integer parameter, got ${y(o)}`,r)}(e,t,o);if(K(e))return function(e,t,r){if(Z(e,r,{integer:!0}),1!==t.length)throw new n("Number as function requires one Arr parameter.",r);const o=t[0];return F(o,r),ie(o[e])}(e,t,o);throw new n("Unexpected function type",o)}class cn{contexts;globalContext;values;nativeJsFunctions;modules;valueModules;pure;constructor({contexts:e,values:t,nativeJsFunctions:n,modules:r,valueModules:o,pure:i}){this.globalContext=v(e[0]),this.contexts=e,this.values=t,this.nativeJsFunctions=n,this.modules=r??new Map,this.valueModules=o??new Map,this.pure=i??!1}getModule(e){return this.modules.get(e)}getValueModule(e){return this.valueModules.has(e)?{value:this.valueModules.get(e),found:!0}:{value:void 0,found:!1}}registerValueModule(e,t){this.valueModules.set(e,t)}create(e){const t=this.globalContext,n=new cn({contexts:[e,...this.contexts],values:this.values,nativeJsFunctions:this.nativeJsFunctions,modules:this.modules,valueModules:this.valueModules,pure:this.pure});return n.globalContext=t,n}new(e){return new cn({contexts:[{},e],modules:this.modules,valueModules:this.valueModules,pure:this.pure})}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=ln(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(Pt(e)){const t=e[1];switch(t){case Gt["&&"]:case Gt["||"]:case Gt.array:case Gt.object:case Gt["defined?"]:case Gt.recur:case Gt.throw:case Gt["??"]:{const n=v(Ht.specialExpressions[t],e[2]);return{[f]:!0,functionType:"SpecialBuiltin",specialBuiltinSymbolType:t,sourceCodeInfo:e[2],arity:n.arity}}default:throw new n(`Unknown special builtin symbol type: ${t}`,e[2])}}if(Nt(e)){const t=e[1],n=ot[t],r=n.name;return{[f]:!0,functionType:"Builtin",normalBuiltinSymbolType:t,sourceCodeInfo:e[2],arity:n.arity,name:r}}const t=this.lookUp(e);if(w(r=t)&&void 0!==r.value)return t.value;var r;throw new i(e[1],e[2])}}function ln(e){return Zt.includes(e)?`special expression "${e}"`:Kt.includes(e)?`builtin function "${e}"`:"self"===e?`builtin value "${e}"`:null}function fn(e){const t=ln(e);if(t)throw new n(`Cannot shadow ${t}`,void 0)}function dn(e={},t,r){const o=e.globalContext??{},i=e.contexts?[o,...e.contexts]:[o];let s,a;if(e.bindings)for(const[t,r]of Object.entries(e.bindings)){if(t.includes("."))throw new n(`Dots are not allowed in binding keys: "${t}"`,void 0);const e="function"==typeof r,o=at(r);if(e||o){const e=o?r:{fn:r};fn(t),a||(a={}),a[t]={functionType:"NativeJsFunction",nativeFn:e,name:t,[f]:!0,arity:e.arity??{},docString:e.docString??""}}else fn(t),s||(s={}),s[t]=r}const u=new cn({contexts:i,values:s,modules:t,nativeJsFunctions:a,pure:r});return e.globalModuleScope?u:u.create({})}const hn=["^","*","/","%","+","-","<<",">>",">>>","++","<","<=","≤",">",">=","≥","==","!=","!=","&","xor","|","&&","||","??","|>"],pn=[...hn,"?",":","->","...",".",",","=",":",";"],yn=new Set(["comment","cond","defined?","block","doseq","if","let","loop","recur","throw","try","unless","while"]);function gn(e){return!yn.has(e)}const mn=new Set(hn);function vn(e){return mn.has(e)}const bn=new Set(pn);function wn(e){return bn.has(e)}const Sn=["(",")","[","]","{","}","'",'"',"`",",",".",";"," ","\n","\r","\t"],xn=["0","1","2","3","4","5","6","7","8","9",...Sn],En=new Set(Sn),kn=new Set(xn),Nn=/\s/,Pn=[0],$n=(e,t)=>{if('"'!==e[t])return Pn;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 An(e,t,n,r){return t===n.slice(r,r+t.length)?[t.length,[e,t]]:Pn}const In=/\d/,jn=/[0-7]/,Cn=/[0-9a-f]/i,On=/[01]/,Mn=/[\s)\]}(,;]/,Un=(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(!kn.has(n)){const r=t;let o=e[t+=1];for(;o&&!En.has(o);)n+=o,o=e[t+=1];return n.endsWith(":")?[t-r-1,["Symbol",n.slice(0,-1)]]:[t-r,["Symbol",n]]}return Pn},Fn=[(e,t)=>{let n=e[t];if(!n||!Nn.test(n))return Pn;let r=n;for(n=e[t+=1];n&&Nn.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 Pn},(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 Pn},(e,t)=>{const n=Un(e,t);if(0===n[0]||!n[1])return Pn;let r=n[1][1];r=r.startsWith("'")?r.slice(1,r.length-1):r;return void 0===rn[r]?Pn:[n[0],["ReservedSymbol",r]]},(e,t)=>An("LParen","(",e,t),(e,t)=>An("RParen",")",e,t),(e,t)=>An("LBracket","[",e,t),(e,t)=>An("RBracket","]",e,t),(e,t)=>An("LBrace","{",e,t),(e,t)=>An("RBrace","}",e,t),(e,t)=>{if('"'!==e[t]||'"'!==e[t+1]||'"'!==e[t+2])return Pn;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}`]]},$n,(e,t)=>{if("#"!==e[t])return Pn;const[n,r]=$n(e,t+1);if(!r)return Pn;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 Pn;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 Pn;let o;for(o=t+2;o<e.length;o+=1){const t=e[o];if("binary"===r&&!On.test(t))break;if("octal"===r&&!jn.test(t))break;if("hex"===r&&!Cn.test(t))break}const i=o-t;if(i<=2)return Pn;const s=e[o];return s&&!Mn.test(s)?Pn:[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(!In.test(e[n-1])||!In.test(e[n+1]))return n===i?Pn:[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 Pn;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 Pn;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(!In.test(r))break}if((r||o)&&n===i)return Pn;const u=n-t;if(0===u)return Pn;const c=e[n];return c&&":"!==c&&!Mn.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&&wn(n))return[3,["Operator",n]];const r=e.slice(t,t+2);if(t+1<e.length&&wn(r))return[2,["Operator",r]];const o=e[t]??"";return wn(o)?[1,["Operator",o]]:Pn},Un];function Tn(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 Bn(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 Pn})(e,t);if(t+=r,r>0)return[t-n,o]}for(const r of Fn){const[o,i]=r(e,t);if(t+=o,0!==o)return[t-n,i]}return[1,["Error",e[n],void 0,"Unrecognized character"]]}function Rn(e,t){return"Symbol"===e?.[0]&&(!t||e[1]===t)}function _n(e,t){return function(e,t){Rn(e,t)||sr("Symbol",void 0,e)}(e,t),e}function Dn(e,t){return"ReservedSymbol"===e?.[0]&&(!t||e[1]===t)}function zn(e,t){Dn(e,t)||sr("ReservedSymbol",t,e)}function Ln(e,t){return zn(e,t),e}function Vn(e,t){return"Operator"===e?.[0]&&(!t||e[1]===t)}function Wn(e,t){Vn(e,t)||sr("Operator",t,e)}function Jn(e){return"Number"===e?.[0]}function qn(e){return"BasePrefixedNumber"===e?.[0]}function Yn(e){return"LParen"===e?.[0]}function Gn(e){Yn(e)||sr("LParen",void 0,e)}function Xn(e){return"RParen"===e?.[0]}function Hn(e){Xn(e)||sr("RParen",void 0,e)}function Kn(e){return"LBracket"===e?.[0]}function Zn(e){return function(e){Kn(e)||sr("LBracket",void 0,e)}(e),e}function Qn(e){return"RBracket"===e?.[0]}function er(e){Qn(e)||sr("RBracket",void 0,e)}function tr(e){return"LBrace"===e?.[0]}function nr(e){return function(e){tr(e)||sr("LBrace",void 0,e)}(e),e}function rr(e){return"RBrace"===e?.[0]}function or(e){return"string"===e?.[0]}function ir(e){return"Operator"===e?.[0]&&vn(e[1])}function sr(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 ar(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 ur=new Set([...Kt,...Zt,...Object.keys(rn)]);class cr{originalProgram;originalPosition;prefixProgram="";suffixProgram="";searchString="";suggestions=[];suggestionIndex=null;constructor(e,t,n,r){this.originalProgram=e,this.originalPosition=t;const o=this.originalProgram.slice(0,this.originalPosition),i=n.tokenize(o).tokens.at(-1);i&&"Error"!==i[0]&&(this.searchString=i[1],this.prefixProgram=this.originalProgram.slice(0,this.originalPosition-this.searchString.length),this.suffixProgram=this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.suggestions=this.generateSuggestions(r))}getNextSuggestion(){return this.getAutoCompleteSuggestionResult(this.getNextSuggestionSymbol())}getPreviousSuggestion(){return this.getAutoCompleteSuggestionResult(this.getPreviousSuggestionSymbol())}getAutoCompleteSuggestionResult(e){return null===e?null:{program:this.prefixProgram+e+this.suffixProgram,position:this.prefixProgram.length+e.length}}getNextSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=0:(this.suggestionIndex+=1,this.suggestionIndex>=this.suggestions.length&&(this.suggestionIndex=0)),this.suggestions[this.suggestionIndex])}getPreviousSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=this.suggestions.length-1:(this.suggestionIndex-=1,this.suggestionIndex<0&&(this.suggestionIndex=this.suggestions.length-1)),this.suggestions[this.suggestionIndex])}getSuggestions(){return[...this.suggestions]}getSearchString(){return this.searchString}generateSuggestions(e){const t=new Set(["0_defn","0_lambda"]),n=this.generateWithPredicate(e,e=>!t.has(e)&&e.startsWith(this.searchString));n.forEach(e=>t.add(e));const r=this.generateWithPredicate(e,e=>!t.has(e)&&e.toLowerCase().startsWith(this.searchString.toLowerCase()));r.forEach(e=>t.add(e));const o=this.generateWithPredicate(e,e=>!t.has(e)&&e.includes(this.searchString));o.forEach(e=>t.add(e));const i=this.generateWithPredicate(e,e=>!t.has(e)&&e.includes(this.searchString.toLowerCase()));return i.forEach(e=>t.add(e)),[...n,...r,...o,...i]}generateWithPredicate(e,t){const n=new Set;return ur.forEach(e=>{t(e)&&n.add(e)}),Object.keys(e.globalContext??{}).filter(t).forEach(e=>n.add(e)),e.contexts?.forEach(e=>{Object.keys(e).filter(t).forEach(e=>n.add(e))}),Object.keys(e.bindings??{}).filter(t).forEach(e=>n.add(e)),[...n].sort((e,t)=>e.localeCompare(t))}}function lr(e){return"object"==typeof e&&null!==e&&"string"==typeof e.program&&Array.isArray(e.fileModules)}function fr(e,t){return t&&(e[2]=t),e}function dr(e,t){return void 0!==Gt[e]&&"fn"!==e&&"defn"!==e?fr([a.SpecialBuiltinSymbol,Gt[e]],t):void 0!==rt[e]?fr([a.NormalBuiltinSymbol,rt[e]],t):fr([a.UserDefinedSymbol,e],t)}function hr(e){return e.substring(1,e.length-1).replace(/(\\{2})|(\\')|\\(.)/g,(e,t,n,r)=>t?"\\":n?"'":`\\${r}`)}const pr=Object.entries(rt).reduce((e,[t,n])=>(e[n]=t,e),[]),yr=Object.entries(Gt).reduce((e,[t,n])=>(e[n]=t,e),[]);function gr(e){return Et(e)?e[1]:Nt(e)?pr[e[1]]:yr[e[1]]}function mr(e,t,n){const r=fr([a.NormalExpression,[e,t]],n);return Nt(e)&&Q(ot[e[1]].arity,r[1][1].length,n),r}function vr(e){if(e.isAtEnd())return!0;const t=e.tryPeek();return Vn(t)?[";",",",":"].includes(t[1]):!!Dn(t)&&["else","when","while","case","catch","let","then","end","do"].includes(t[1])}function br(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"xor":case"|":case"|>":return mr(t,[r,o],i);case"&&":case"||":case"??":return fr([a.SpecialExpression,[Gt[s],[r,o]]],i);default:throw new n(`Unknown binary operator: ${s}`,i)}}class wr{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 Sr(e,t){switch(e){case"^":return 12;case"*":case"/":case"%":return 11;case"+":case"-":return 10;case"<<":case">>":case">>>":return 9;case"++":return 8;case"<":case"<=":case"≤":case">":case">=":case"≥":return 7;case"==":case"!=":return 6;case"&":case"xor":case"|":return 5;case"&&":case"||":case"??":return 4;case"|>":return 2;default:throw new n(`Unknown binary operator: ${e}`,t)}}function xr(e,t){const r=[];for(;!e.isAtEnd()&&!Er(e,t);)Vn(e.tryPeek(),";")?e.advance():r.push(e.parseExpression());if(function(e,t){if(!Er(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]:fr([a.SpecialExpression,[Gt.block,r]],e.peekSourceCodeInfo())}function Er(e,t){for(const n of t)if(Dn(e.tryPeek(),n))return!0;return!1}function kr(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 fr([a.String,n],t[2])}function Nr(e,t=!1){const r=Ln(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=kr(e,n);return ce(r[1])}(e),e.isAtEnd()||Dn(e.tryPeek(),"end")||(Wn(e.tryPeek(),";"),e.advance()));const i=[];for(;!e.isAtEnd()&&!Dn(e.tryPeek(),"end");)if(i.push(e.parseExpression()),Vn(e.tryPeek(),";"))e.advance();else if(!Dn(e.tryPeek(),"end"))throw new n("Expected end",e.peekSourceCodeInfo());return zn(e.tryPeek(),"end"),e.advance(),[fr([a.SpecialExpression,[Gt.block,i]],r[2]),o]}function Pr(e){const t=e.peek();if(e.advance(),!Rn(t))throw new n(`Expected symbol token, got ${t[0]}`,t[2]);return"'"===t[1][0]?dr(hr(t[1]),t[2]):dr(t[1],t[2])}function $r(e){const t=e.peek();e.advance();const n=t[1],r="-"===n[0],o=(r?n.substring(1):n).replace(/_/g,"");return fr([a.Number,r?-Number(o):Number(o)],t[2])}function Ar(e,{requireDefaultValue:t,noRest:r,allowLiteralPatterns:o}={}){const i=e.tryPeek();if(o&&Dn(i,"_"))return e.advance(),fr([ht,[]],i[2]);if(o&&jr(i)){if(Jn(i)||qn(i)){const t=$r(e);return fr([dt,[t]],i[2])}if(or(i)){const t=kr(e,i);return fr([dt,[t]],i[2])}if(Dn(i,"true")){e.advance();const t=fr([a.ReservedSymbol,"true"],i[2]);return fr([dt,[t]],i[2])}if(Dn(i,"false")){e.advance();const t=fr([a.ReservedSymbol,"false"],i[2]);return fr([dt,[t]],i[2])}if(Dn(i,"null")){e.advance();const t=fr([a.ReservedSymbol,"null"],i[2]);return fr([dt,[t]],i[2])}}if(Rn(i)){const r=Pr(e);if(!Et(r))throw new n("Expected user defined symbol",i[2]);const o=Ir(e);if(t&&!o)throw new n("Expected assignment",e.peekSourceCodeInfo());return fr([ut,[r,o]],i[2])}if(Vn(i,"...")){if(r)throw new n("Rest element not allowed",i[2]);e.advance();const t=kt(Pr(e));if(Vn(e.tryPeek(),"="))throw new n("Rest argument can not have default value",e.peekSourceCodeInfo());return fr([ct,[t[1],void 0]],i[2])}if(Kn(i)){e.advance();const r=[];let s=e.peek(),a=!1;for(;!Qn(s);){if(a)throw new n("Rest argument must be last",s[2]);if(Vn(s,",")){r.push(null),e.advance(),s=e.peek();continue}const t=Ar(e,{allowLiteralPatterns:o});t[0]===ct&&(a=!0),r.push(t),s=e.peek(),Qn(s)||(Wn(s,","),e.advance()),s=e.peek()}e.advance();const u=Ir(e);if(t&&!u)throw new n("Expected assignment",e.peekSourceCodeInfo());return fr([ft,[r,u]],i[2])}if(tr(i)){e.advance();const r={};let s=e.peek(),a=!1;for(;!rr(s);){if(a)throw new n("Rest argument must be last",s[2]);Vn(s,"...")&&(a=!0,e.advance());const t=Pr(e),u=gr(t);if(s=e.peek(),Dn(s,"as")){if(a)throw new n("Rest argument can not have alias",s[2]);e.advance();const t=kt(Pr(e));if(r[t[1]])throw new n(`Duplicate binding name: ${t}`,s[2]);r[u]=fr([ut,[t,Ir(e)]],i[2])}else if(rr(s)||Vn(s,",")||Vn(s,"=")){const o=kt(t,t[2]);if(r[o[1]])throw new n(`Duplicate binding name: ${o}`,s[2]);if(a&&Vn(e.tryPeek(),"="))throw new n("Rest argument can not have default value",e.peekSourceCodeInfo());r[o[1]]=fr(a?[ct,[o[1],Ir(e)]]:[ut,[o,Ir(e)]],i[2])}else if(Vn(s,":")){if(e.advance(),s=e.peek(),o){if(!tr(s)&&!Kn(s)&&!jr(s))throw new n("Expected literal, object or array pattern",s[2])}else if(!tr(s)&&!Kn(s))throw new n("Expected object or array",s[2]);r[u]=Ar(e,{allowLiteralPatterns:o})}rr(e.peek())||(Wn(e.peek(),","),e.advance()),s=e.peek()}e.advance(),s=e.peek();const u=Ir(e);if(t&&!u)throw new n("Expected assignment",s[2]);return fr([lt,[r,u]],i[2])}throw new n("Expected symbol",e.peekSourceCodeInfo())}function Ir(e){if(Vn(e.tryPeek(),"="))return e.advance(),e.parseExpression()}function jr(e){return Jn(e)||qn(e)||or(e)||Dn(e,"true")||Dn(e,"false")||Dn(e,"null")}function Cr(e,t){e.advance();const n=Ar(e,{requireDefaultValue:!0,noRest:!0}),r=n[1][1];n[1][1]=void 0;const o=fr([a.Binding,[n,r]],t[2]);return fr([a.SpecialExpression,[Gt.let,o]],t[2])}function Or(e){const t=function(e){const t=_n(e.tryPeek()),n=kt(Pr(e));zn(e.tryPeek(),"in"),e.advance();const r=e.parseExpression();return fr([a.Binding,[fr([ut,[n,void 0]],t[2]),r]],t[2])}(e),r=[];let o=e.peek();Mr(o,["let","when","while"]);const i=[];if("let"===o[1])for(r.push("&let");Rn(o,"let");){const t=Cr(e,o),r=i.flatMap(e=>Object.keys(mt(e[1][0])));if(Object.keys(mt(t[1][1][1][0])).some(e=>r.includes(e)))throw new n("Duplicate binding",t[1][1][2]);i.push(t[1][1]),o=e.peek(),Mr(o,["let","when","while"]),o=e.peek()}let s,u;for(;Dn(o,"when")||Dn(o,"while");){e.advance(),"when"===o[1]?(r.push("&when"),s=e.parseExpression()):(r.push("&while"),u=e.parseExpression()),o=e.peek();Mr(o,r.includes("&when")&&r.includes("&while")?[]:r.includes("&when")?["while"]:["when"]),o=e.peek()}return Mr(o,[]),[t,i,s,u]}function Mr(e,t){if(!function(e,t){if(Vn(e,",")||Xn(e))return!0;for(const n of t){if("let"===n&&Rn(e,"let"))return!0;if(["when","while"].includes(n)&&Dn(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 Ur(e){const t=Ln(e.tryPeek());e.advance();const n=t[1];return function(e){return e in nn}(n)?fr([a.Number,nn[n]],t[2]):fr([a.ReservedSymbol,t[1]],t[2])}const Fr=/^\$([1-9]\d?)?$/;function Tr(e){const t=e.peek();if(Yn(t)&&Rn(e.peekAhead(1))&&Vn(e.peekAhead(2),"->"))return null;try{const r=function(e){const t=e.peek();if(Rn(t))return[fr([ut,[Pr(e),void 0]],t[2])];Gn(t),e.advance();let r=!1,o=!1;const i=[];for(;!e.isAtEnd()&&!Xn(e.peek())&&!Rn(e.peek(),"let");){if(r)throw new n("Rest argument must be last",e.peekSourceCodeInfo());const t=Ar(e);if(void 0!==t[1][1]&&(o=!0),t[0]===ct&&(r=!0),o&&!t[1][1])throw new n("Default arguments must be last",e.peekSourceCodeInfo());if(i.push(t),!Vn(e.peek(),",")&&!Xn(e.peek())&&!Rn(e.peek(),"let"))throw new n("Expected comma or closing parenthesis",e.peekSourceCodeInfo());Vn(e.peek(),",")&&e.advance()}if(!Xn(e.peek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),i}(e);if(!Vn(e.peek(),"->"))return null;let o;e.advance();let i="";if(Dn(e.peek(),"do")){const t=Nr(e,!0);i=t[1],o=t[0][1][1]}else o=[e.parseExpression()];return fr([a.SpecialExpression,[Gt["0_lambda"],[r,o],i]],t[2])}catch{return null}}function Br(e,t){e.advance();const r=[];for(;!e.isAtEnd()&&!Xn(e.tryPeek());){Vn(e.tryPeek(),"...")?(e.advance(),r.push(fr([a.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const t=e.tryPeek();if(!Vn(t,",")&&!Xn(t))throw new n("Expected comma or closing parenthesis",e.tryPeek()?.[2]);Vn(t,",")&&e.advance()}if(!Xn(e.tryPeek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());if(e.advance(),!Pt(t))return Nt(t)||Et(t)?mr(t,r,t[2]):fr([a.NormalExpression,[t,r]],t[2]);{const e=t[1];if(e===Gt.import){if(1!==r.length)throw new n(`import expects exactly 1 argument, got ${r.length}`,t[2]);const o=r[0];if(!Et(o))throw new n("import expects a module name (symbol), got a non-symbol argument",o[2]??t[2]);const i=o[1];return fr([a.SpecialExpression,[e,i]],t[2])}const o=e;switch(Q(Ht.specialExpressions[o].arity,r.length,t[2]),o){case Gt["||"]:case Gt["&&"]:case Gt.recur:case Gt.array:case Gt.object:case Gt["??"]:return fr([a.SpecialExpression,[o,r]],t[2]);case Gt["defined?"]:{const[e]=r;return fr([a.SpecialExpression,[o,e]],t[2])}case Gt.throw:{const[e]=r;return fr([a.SpecialExpression,[o,e]],t[2])}case Gt["0_lambda"]:throw new n(`${o} is not allowed`,t[2]);default:throw new n(`Unknown special expression: ${o}`,t[2])}}}function Rr(e){const t=nr(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!rr(e.tryPeek());){if(Vn(e.tryPeek(),"..."))e.advance(),r.push(fr([a.Spread,e.parseExpression()],e.peekSourceCodeInfo()));else{const t=e.tryPeek();if(or(t)){const n=kr(e,t);r.push(fr([a.String,n[1]],t[2]))}else if(Rn(t)){const n=t[1].startsWith("'")?hr(t[1]):t[1];r.push(fr([a.String,n],t[2])),e.advance()}else{if(!Kn(t))throw new n("Expected key to be a symbol or a string",e.peekSourceCodeInfo());e.advance(),r.push(e.parseExpression()),er(e.tryPeek()),e.advance()}Wn(e.tryPeek(),":"),e.advance(),r.push(e.parseExpression())}const t=e.tryPeek();if(!Vn(t,",")&&!rr(t))throw new n("Expected comma or closing brace",e.peekSourceCodeInfo());Vn(t,",")&&e.advance()}var o;return rr(o=e.tryPeek())||sr("RBrace",void 0,o),e.advance(),fr([a.SpecialExpression,[Gt.object,r]],t[2])}function _r(e){let t=function(e){const t=e.peek();if(Yn(t)){e.storePosition();const t=Tr(e);if(t)return t;e.restorePosition(),e.advance();const r=e.parseExpression();if(!Xn(e.peek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),r}if(Vn(t)){const r=t[1];if(vn(r))return e.advance(),fr(void 0!==Gt[r]?[a.SpecialBuiltinSymbol,Gt[r]]:[a.NormalBuiltinSymbol,rt[r]],t[2]);if("->"===r)return function(e){const t=e.peek();e.advance();const r=e.getPosition();let o,i="";if(Dn(e.peek(),"do")){const t=Nr(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(Rn(r)){const e=Fr.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(fr([ut,[[a.UserDefinedSymbol,"$"],void 0]],t[2])):l.push(fr([ut,[[a.UserDefinedSymbol,`$${e}`],void 0]],t[2]));return fr([a.SpecialExpression,[Gt["0_lambda"],[l,o],i]],t[2])}(e);throw new n(`Illegal operator: ${r}`,t[2])}if(tr(t))return Rr(e);if(Kn(t))return function(e){const t=Zn(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!Qn(e.tryPeek());){Vn(e.tryPeek(),"...")?(e.advance(),r.push(fr([a.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const t=e.tryPeek();if(!Vn(t,",")&&!Qn(t))throw new n("Expected comma or closing parenthesis",e.peekSourceCodeInfo());Vn(t,",")&&e.advance()}return er(e.tryPeek()),e.advance(),fr([a.SpecialExpression,[Gt.array,r]],t[2])}(e);const r=t[0];switch(r){case"Number":case"BasePrefixedNumber":return $r(e);case"string":return kr(e,t);case"Symbol":{e.storePosition();const t=Tr(e);return t||(e.restorePosition(),Pr(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=fr([a.String,r],t[2]),s=fr([a.String,o],t[2]);return fr([a.NormalExpression,[fr([a.NormalBuiltinSymbol,rt.regexp],t[2]),[i,s]]],t[2])}(e);default:throw new n(`Unknown token type: ${r}`,t[2])}}(e),r=e.tryPeek();for(;Vn(r,".")||Kn(r)||Yn(r);)if("."===r[1]){e.advance();const o=e.tryPeek();if(!Rn(o))throw new n("Expected symbol",e.peekSourceCodeInfo());t=Dr(t,fr([a.String,o[1]],o[2]),r[2]),e.advance(),r=e.tryPeek()}else if(Kn(r)){e.advance();const o=e.parseExpression();if(!Qn(e.tryPeek()))throw new n("Expected closing bracket",e.peekSourceCodeInfo());t=Dr(t,o,r[2]),e.advance(),r=e.tryPeek()}else Yn(r)&&(t=Br(e,t),r=e.tryPeek());return t}function Dr(e,t,n){return fr([a.NormalExpression,[[a.NormalBuiltinSymbol,rt.get],[e,t]]],n)}function zr(e,t=0){const r=e.tryPeek();let o;if(Rn(r))switch(r[1]){case"let":return Cr(e,r);case"if":case"unless":o=function(e,t){const n="unless"===t[1];e.advance();const r=e.parseExpression();zn(e.tryPeek(),"then"),e.advance();const o=xr(e,["else","end"]);let i;return Dn(e.tryPeek(),"else")&&(e.advance(),i=xr(e,["end"])),e.advance(),fr(n?[a.SpecialExpression,[Gt.unless,[r,o,i]]]:[a.SpecialExpression,[Gt.if,[r,o,i]]],t[2])}(e,r);break;case"cond":o=function(e,t){e.advance();const n=[];for(;!e.isAtEnd()&&!Dn(e.tryPeek(),"end");){zn(e.tryPeek(),"case"),e.advance();const t=e.parseExpression();zn(e.tryPeek(),"then"),e.advance();const r=xr(e,["case","end"]);if(n.push([t,r]),Dn(e.tryPeek(),"end"))break}return zn(e.tryPeek()),e.advance(),fr([a.SpecialExpression,[Gt.cond,n]],t[2])}(e,r);break;case"match":o=function(e,t){e.advance();const n=e.parseExpression(),r=[];for(;!e.isAtEnd()&&!Dn(e.tryPeek(),"end");){zn(e.tryPeek(),"case"),e.advance();const t=Ar(e,{allowLiteralPatterns:!0});let n;Dn(e.tryPeek(),"when")&&(e.advance(),n=e.parseExpression()),zn(e.tryPeek(),"then"),e.advance();const o=xr(e,["case","end"]);if(r.push([t,o,n]),Dn(e.tryPeek(),"end"))break}return zn(e.tryPeek(),"end"),e.advance(),fr([a.SpecialExpression,[Gt.match,n,r]],t[2])}(e,r);break;case"for":case"doseq":o=function(e,t){const r="doseq"===t[1];e.advance(),Gn(e.tryPeek()),e.advance();const o=[];for(;!e.isAtEnd()&&!Xn(e.tryPeek());){const t=Or(e),r=o.flatMap(e=>Object.keys(mt(e[0][1][0]))),i=mt(t[0][1][0]);if(Object.keys(i).some(e=>r.includes(e)))throw new n("Duplicate binding",t[0][2]);o.push(t),Vn(e.tryPeek(),",")&&e.advance()}Hn(e.tryPeek()),e.advance(),Wn(e.tryPeek(),"->"),e.advance();const i=e.parseExpression();return fr(r?[a.SpecialExpression,[Gt.doseq,o,i]]:[a.SpecialExpression,[Gt.for,o,i]],t[2])}(e,r);break;case"loop":o=function(e,t){e.advance(),Gn(e.tryPeek()),e.advance();const r=[];let o=e.tryPeek();for(;!e.isAtEnd()&&!Xn(o);){const t=Ar(e,{requireDefaultValue:!0,noRest:!0}),n=t[1][1];t[1][1]=void 0,r.push(fr([a.Binding,[t,n]],t[2])),Vn(e.tryPeek(),",")&&e.advance(),o=e.tryPeek()}if(0===r.length)throw new n("Expected binding",e.peekSourceCodeInfo());Hn(o),e.advance(),Wn(e.tryPeek(),"->"),e.advance();const i=e.parseExpression();return fr([a.SpecialExpression,[Gt.loop,r,i]],t[2])}(e,r);break;case"try":o=function(e,t){e.advance();const n=xr(e,["catch"]);let r;e.advance(),Yn(e.tryPeek())&&(e.advance(),r=Pr(e),Hn(e.tryPeek()),e.advance());const o=xr(e,["end"]);return e.advance(),fr([a.SpecialExpression,[Gt.try,n,r,o]],t[2])}(e,r)}else Dn(r,"do")&&(o=Nr(e)[0]);o||=_r(e);let i=e.tryPeek();for(;!vr(e);){if(ir(i)){const n=i[1],r=Sr(n,i[2]);if(r<=t&&(12!==r||12!==t))break;const s=fr(Gt[n]?[a.SpecialBuiltinSymbol,Gt[n]]:[a.NormalBuiltinSymbol,rt[n]],i[2]);e.advance();o=br(i,s,o,zr(e,r),i[2])}else if(Rn(i)){if(!gn(i[1]))break;const r=3;if(r<=t)break;const s=Pr(e),a=zr(e,r);if(Pt(s))throw new n("Special expressions are not allowed in binary functional operators",s[2]);o=mr(s,[o,a],i[2])}else{if("?"!==i?.[1])break;{if(1<=t)break;e.advance();const r=zr(e);if(!Vn(e.tryPeek(),":"))throw new n("Expected :",e.peekSourceCodeInfo());e.advance();const i=zr(e);o=fr([a.SpecialExpression,[Gt.if,[o,r,i]]],o[2])}}i=e.tryPeek()}return o}function Lr(e){e.tokens.forEach(e=>{if("Error"===e[0])throw new n(e[3],e[2])});const t=[],r=function(e){const t=new wr(e);return t.parseExpression=(e=0)=>zr(t,e),t}(e);for(;!r.isAtEnd();)if(t.push(zr(r,0)),Vn(r.tryPeek(),";"))r.advance();else if(!r.isAtEnd())throw new n("Expected ;",r.peekSourceCodeInfo());return t}class Vr{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 ${y(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 Wr{astCache;astCacheSize;debug;modules;constructor(e={}){if(this.debug=e.debug??!1,this.astCacheSize=e.astCacheSize??null,this.astCacheSize){this.astCache=new Vr(this.astCacheSize);const t=e.initialCache??{};for(const e of Object.keys(t))this.astCache.set(e,t[e])}else this.astCache=null;const t=e.modules??[];this.modules=new Map(t.map(e=>[e.name,e]))}getRuntimeInfo(){return{astCacheSize:this.astCacheSize,astCache:this.astCache,debug:this.debug}}async={run:async(e,t={})=>{if(lr(e))return this.runBundle(e,t);const n=this.generateAst(e,t);return this.evaluate(n,t)},apply:async(e,t,n={})=>this.apply(e,t,n)};run(e,t={}){if(lr(e))return this.runBundle(e,t);const n=this.generateAst(e,t),r=this.evaluate(n,t);if(r instanceof Promise)throw new TypeError("Unexpected async result in synchronous run(). Use lits.async.run() for async operations.");return r}runBundle(e,t={}){const n=dn(t,this.modules,t.pure),r=n.pure;n.pure=!0;for(const[r,o]of e.fileModules){const e=sn(this.generateAst(o,t),n.create({}));if(e instanceof Promise)throw new TypeError("Unexpected async result in synchronous runBundle(). Use lits.async.run() for async operations.");n.registerValueModule(r,e)}n.pure=r;const o=sn(this.generateAst(e.program,t),n);if(o instanceof Promise)throw new TypeError("Unexpected async result in synchronous runBundle(). Use lits.async.run() for async operations.");return o}getUndefinedSymbols(e,t={}){const n="string"==typeof e?this.generateAst(e,t):e,r=dn(t,this.modules);return Qt(n,r,Ht,an)}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?Tn(e,r,n):void 0,s=Bn(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?ar(n,{removeWhiteSpace:!1}):n}parse(e){const t={body:[],hasDebugData:(e=ar(e,{removeWhiteSpace:!0})).hasDebugData};return t.body=Lr(e),t}evaluate(e,t){return sn(e,dn(t,this.modules,t.pure))}transformSymbols(e,t){return function(e,t){return{...e,tokens:e.tokens.map(e=>Rn(e)?[e[0],t(e[1])]:e)}}(e,t)}untokenize(e){return function(e){return e.tokens.reduce((e,t)=>`${e}${t[1]}`,"")}(e)}apply(e,t,n={}){const r="FN_2eb7b316_471c_5bfa_90cb_d3dfd9164a59",o=this.generateApplyFunctionCall(r,t),i=this.generateAst(o,n),s=t.reduce((e,t,n)=>(e[`${r}_${n}`]=t,e),{[r]:e});return n.bindings={...n.bindings,...s},this.evaluate(i,n)}generateApplyFunctionCall(e,t){const n=t.map((t,n)=>`${e}_${n}`).join(", ");return`${e}(${n})`}generateAst(e,t){if(this.astCache){const t=this.astCache.get(e);if(t)return t}const n=this.tokenize(e,{filePath:t.filePath}),r=this.parse(n);return this.astCache?.set(e,r),r}getAutoCompleter(e,t,n={}){return new cr(e,t,this,n)}}export{Wr as Lits,x as asLitsFunction,A as asNativeJsFunction,N as asUserDefinedFunction,E as assertLitsFunction,I as assertNativeJsFunction,P as assertUserDefinedFunction,j as isBuiltinFunction,Be as isGrid,lr as isLitsBundle,s as isLitsError,S as isLitsFunction,Re as isMatrix,$ as isNativeJsFunction,k as isUserDefinedFunction,Ue as isVector,Kt as normalExpressionKeys,Zt 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{constructor(e,t){super(e,t),Object.setPrototypeOf(this,o.prototype),this.name="AssertionError"}}class i extends n{symbol;constructor(e,t){super(`Undefined symbol '${e}'.`,t),this.symbol=e,Object.setPrototypeOf(this,i.prototype),this.name="UndefinedSymbolError"}}function a(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},u=new Set(Object.values(s));function c(e){return Object.keys(s).find(t=>s[t]===e)}const l=new Set(["UserDefined","Partial","Comp","Constantly","Juxt","Complement","EveryPred","SomePred","Fnull","Builtin","SpecialBuiltin","NativeJsFunction","Module"]);const f="^^fn^^",d="^^re^^";function h(e){return null!==e&&"object"==typeof e&&(f in e&&"functionType"in e&&function(e){return"string"==typeof e&&l.has(e)}(e.functionType))}function p(e){return!(!Array.isArray(e)||e.length<2)&&function(e){return"number"==typeof e&&u.has(e)}(e[0])}function y(e){return h(e)?`<function ${e.name||"λ"}>`:p(e)?`${c(e[0])}-node`:null===e?"null":"object"==typeof e&&e instanceof RegExp?`${e}`:"object"==typeof e&&e instanceof Error?e.toString():JSON.stringify(e)}function g(e,t){return e?.sourceCodeInfo??t}function m(e,t,r){return new n(`Expected ${e}, got ${y(t)}.`,g(t,r))}function v(e,t){return b(e,t),e}function b(e,t){if(!function(e){return void 0!==e}(e))throw new n("Unexpected undefined",g(e,t))}function w(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function S(e){return null!==e&&"object"==typeof e&&!!e[f]}function x(e,t){return E(e,t),e}function E(e,t){if(!S(e))throw m("LitsFunction",e,t)}function k(e){return S(e)&&"UserDefined"===e.functionType}function N(e,t){return P(e,t),e}function P(e,t){if(!k(e))throw m("NativeJsFunction",e,t)}function $(e){return S(e)&&"NativeJsFunction"===e.functionType}function A(e,t){return I(e,t),e}function I(e,t){if(!$(e))throw m("NativeJsFunction",e,t)}function j(e){return w(e)&&"Builtin"===e.functionType}function C(e){return void 0!==e}function O(e,t){return M(e,t),e}function M(e,t){if(!C(e))throw m("not undefined",e,t)}function U(e){return Array.isArray(e)||"string"==typeof e}function F(e,t){if(!U(e))throw m("string or array",e,t)}function T(e){return!(null===e||"object"!=typeof e||Array.isArray(e)||e instanceof RegExp||S(e)||D(e))}function B(e,t){if(!T(e))throw m("object",e,t)}function R(e){return U(e)||T(e)}function _(e,t){if(!R(e))throw m("string, array or object",e,t)}function D(e){return null!==e&&"object"==typeof e&&!!e[d]}function z(e,t){if(!function(e){return D(e)||"string"==typeof e}(e))throw m("string or RegularExpression",e,t)}function L(e,t){return V(e,t),e}function V(e,t){if(!function(e){return"number"==typeof e||!!R(e)||!!S(e)}(e))throw m("FunctionLike",e,t)}function W(e,t={}){return"string"==typeof e&&((!t.nonEmpty||0!==e.length)&&(!t.char||1===e.length))}function J(e,t,n={}){if(!W(e,n))throw m(""+(n.nonEmpty?"non empty string":n.char?"character":"string"),e,t)}function q(e,t,n={}){return J(e,t,n),e}function Y(e){return"string"==typeof e||"number"==typeof e}function G(e,t){return X(e,t),e}function X(e,t){if(!Y(e))throw m("string or number",e,t)}const H={assert:{evaluate:(e,t)=>{const n=e[0],r=2===e.length?e[1]:`${n}`;if(J(r,t),!n)throw new o(r,t);return O(n,t)},arity:{min:1,max:2}}};function K(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 Z(e,t,r={}){if(!K(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 ${y(e)}.`,g(e,t))}function Q(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 ${y(t)}.`,r);if("number"==typeof i&&t>i)throw new n(`Wrong number of arguments, expected at most ${i}, got ${y(t)}.`,r)}function ee(e){return{min:e,max:e}}const te={"<<":{evaluate:([e,t],n)=>(Z(e,n,{integer:!0}),Z(t,n,{integer:!0,nonNegative:!0}),e<<t),arity:ee(2)},">>":{evaluate:([e,t],n)=>(Z(e,n,{integer:!0}),Z(t,n,{integer:!0,nonNegative:!0}),e>>t),arity:ee(2)},">>>":{evaluate:([e,t],n)=>(Z(e,n,{integer:!0}),Z(t,n,{integer:!0,nonNegative:!0}),e>>>t),arity:ee(2)},"&":{evaluate:([e,...t],n)=>(Z(e,n,{integer:!0}),t.reduce((e,t)=>(Z(t,n,{integer:!0}),e&t),e)),arity:{min:2}},"|":{evaluate:([e,...t],n)=>(Z(e,n,{integer:!0}),t.reduce((e,t)=>(Z(t,n,{integer:!0}),e|t),e)),arity:{min:2}},xor:{evaluate:([e,...t],n)=>(Z(e,n,{integer:!0}),t.reduce((e,t)=>(Z(t,n,{integer:!0}),e^t),e)),arity:{min:2}}};function ne(e,t){return!!R(e)&&("string"==typeof e||Array.isArray(e)?!!K(t,{integer:!0})&&(t>=0&&t<e.length):!!Object.getOwnPropertyDescriptor(e,t))}function re(e,t,r){if(X(e,r),X(t,r),"string"==typeof e&&"string"==typeof t)return e<t?-1:e>t?1:0;if("number"==typeof e&&"number"==typeof t)return Math.sign(e-t);throw new n(`Cannot compare values of different types: ${typeof e} and ${typeof t}`,r)}function 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(O(e[r],n),O(t[r],n),n))return!1;return!0}if(D(e)&&D(t))return e.s===t.s&&e.f===t.f;if(w(e)&&w(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=q(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 m("array",e,t)}function fe(e,t){if(!function(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}(e))throw m("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 m("array of strings",e,t)}function he(e,t){return e instanceof Promise?e.then(t):t(e)}function pe(e,t){const n=[];for(let r=0;r<e.length;r++){const o=t(e[r],r);if(o instanceof Promise)return ye(o,n,e,t,r);n.push(o)}return n}async function ye(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 ge(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 me(o,e,t,n);r=o}return r}async function me(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 ve(e,t){for(let n=0;n<e.length;n++){const r=t(e[n],n);if(r instanceof Promise)return be(r,e,t,n)}}async function be(e,t,n,r){await e;for(let e=r+1;e<t.length;e++)await n(t[e],e)}function we(e,t){try{const n=e();return n instanceof Promise?n.catch(t):n}catch(e){return t(e)}}function Se(e,t){for(let n=0;n<e.length;n++){const r=t(e[n],n);if(r instanceof Promise)return xe(r,e,t,n);if(r)return n}return-1}async function xe(e,t,n,r){if(await e)return r;for(let e=r+1;e<t.length;e++)if(await n(t[e],e))return e;return-1}const Ee={filter:{evaluate:([e,t],n,r,{executeFunction:o})=>{if(_(e,n),V(t,n),Array.isArray(e))return ge(e,(e,i)=>he(o(t,[i],r,n),t=>(t&&e.push(i),e)),[]);if(W(e)){return he(ge(e.split(""),(e,i)=>he(o(t,[i],r,n),t=>(t&&e.push(i),e)),[]),e=>e.join(""))}return ge(Object.entries(e),(e,[i,a])=>he(o(t,[a],r,n),t=>(t&&(e[i]=a),e)),{})},arity:ee(2)},map:{evaluate:(e,t,r,{executeFunction:o})=>{const i=L(e.at(-1),t);if(T(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)})}),ge(a,(e,n)=>he(r(o,s[n],t,i),t=>(e[n]=t,e)),{})}({colls:e.slice(0,-1),fn:i,sourceCodeInfo:t,contextStack:r,executeFunction:o});const a=e.slice(0,-1);F(a[0],t);const s="string"==typeof a[0];let u=a[0].length;a.slice(1).forEach(e=>{s?J(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=pe(c,e=>o(i,e,r,t));return s?he(l,e=>(e.forEach(e=>J(e,t)),e.join(""))):l},arity:{min:2}},reduce:{evaluate:([e,t,n],r,o,{executeFunction:i})=>(_(e,r),V(t,r),M(n,r),"string"==typeof e?(J(n,r),0===e.length?n:ge(e.split(""),(e,n)=>i(t,[e,n],o,r),n)):Array.isArray(e)?0===e.length?n:ge(e,(e,n)=>i(t,[e,n],o,r),n):0===Object.keys(e).length?n:ge(Object.entries(e),(e,[,n])=>i(t,[e,n],o,r),n)),arity:ee(3)},get:{evaluate:(e,t)=>{const[n,r]=e,o=ie(e[2]);if(X(r,t),null===n)return o;_(n,t);const i=function(e,t){if(T(e)){if("string"==typeof t&&ne(e,t))return ie(e[t])}else if(K(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:(_(e,t),Array.isArray(e)?e.length:Object.keys(e).length),arity:ee(1)},"contains?":{evaluate:([e,t],n)=>null!==e&&(_(e,n),W(e)?(J(t,n),e.includes(t)):U(e)?(M(t,n),!!e.find(e=>oe(O(e),t,n))):(J(t,n),t in e)),arity:ee(2)},assoc:{evaluate:([e,t,n],r)=>(_(e,r),X(t,r),M(n,r),function(e,t,n,r){if(_(e,r),X(t,r),Array.isArray(e)||"string"==typeof e){if(Z(t,r,{integer:!0}),Z(t,r,{gte:0}),Z(t,r,{lte:e.length}),"string"==typeof e)return J(n,r,{char:!0}),`${e.slice(0,t)}${n}${e.slice(t+1)}`;const o=[...e];return o[t]=n,o}J(t,r);const o={...e};return o[t]=n,o}(e,t,n,r)),arity:ee(3)},"++":{evaluate:(e,t)=>(K(e[0])||_(e[0],t),Array.isArray(e[0])?e.reduce((e,n)=>(le(n,t),e.concat(n)),[]):Y(e[0])?e.reduce((e,n)=>(X(n,t),`${e}${n}`),""):e.reduce((e,n)=>(B(n,t),Object.assign(e,n)),{})),arity:{min:1}}},ke={range:{evaluate:(e,t)=>{const[n,r,o]=e;let i,a,s;Z(n,t,{finite:!0}),1===e.length?(i=0,a=n,s=a>=0?1:-1):2===e.length?(Z(r,t,{finite:!0}),i=n,a=r,s=a>=i?1:-1):(Z(r,t,{finite:!0}),Z(o,t,{finite:!0}),i=n,a=r,s=o,Z(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)=>{Z(t,n,{integer:!0,nonNegative:!0});const r=[];for(let n=0;n<t;n+=1)r.push(e);return r},arity:ee(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 Z(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),V(t,n),he(pe(e,e=>o(t,[e],r,n)),e=>e.flat(1))),arity:ee(2)},"moving-fn":{evaluate:([e,t,n],r,o,{executeFunction:i})=>{le(e,r),Z(t,r,{integer:!0,lte:e.length}),V(n,r);const a=[];for(let n=0;n<=e.length-t;n++)a.push(e.slice(n,n+t));return pe(a,e=>i(n,[e],o,r))},arity:ee(3)},"running-fn":{evaluate:([e,t],n,r,{executeFunction:o})=>{le(e,n),V(t,n);const i=[];for(let t=0;t<e.length;t+=1)i.push(e.slice(0,t+1));return pe(i,e=>o(t,[e],r,n))},arity:ee(2)}},Ne={nth:{evaluate:(e,t)=>{const[n,r]=e,o=ie(e[2]);if(Z(r,t,{integer:!0}),null===n)return o;if(F(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;F(e,t);return ie(e[0])},arity:ee(1)},last:{evaluate:([e],t)=>{if(null===e)return null;F(e,t);return ie(e.at(-1))},arity:ee(1)},pop:{evaluate:([e],t)=>(F(e,t),"string"==typeof e?e.substring(0,e.length-1):e.slice(0,e.length-1)),arity:ee(1)},"index-of":{evaluate:([e,t],n)=>{if(M(t,n),null===e)return null;if(F(e,n),"string"==typeof e){J(t,n);const r=e.indexOf(t);return-1!==r?r:null}{const r=e.findIndex(e=>oe(O(e,n),t),n);return-1!==r?r:null}},arity:ee(2)},push:{evaluate:([e,...t],n)=>(F(e,n),"string"==typeof e?(de(t,n),[e,...t].join("")):[...e,...t]),arity:{min:2}},rest:{evaluate:([e],t)=>(F(e,t),Array.isArray(e)?e.length<=1?[]:e.slice(1):e.substring(1)),arity:ee(1)},next:{evaluate:([e],t)=>(F(e,t),Array.isArray(e)?e.length<=1?null:e.slice(1):e.length<=1?null:e.substring(1)),arity:ee(1)},reverse:{evaluate:([e],t)=>null===e?null:(F(e,t),Array.isArray(e)?[...e].reverse():e.split("").reverse().join("")),arity:ee(1)},second:{evaluate:([e],t)=>null===e?null:(F(e,t),ie(e[1])),arity:ee(1)},slice:{evaluate:(e,t)=>{const[n,r,o]=e;return F(n,t),Z(r,t,{integer:!0}),2===e.length?(Array.isArray(n),n.slice(r)):(Z(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(V(t,n),null===e)return null;if(F(e,n),0===e.length)return null;return ge("string"==typeof e?e.split(""):e,(e,i)=>null!==e?e:he(o(t,[i],r,n),e=>e?ie(i):null),null)},arity:ee(2)},sort:{evaluate:(e,t,n,{executeFunction:r})=>{const[o]=e,i=1===e.length,a=i?null:e[1];if(F(o,t),"string"==typeof o){const e=o.split("");return i?e.sort((e,n)=>re(e,n,t)):(V(a,t),e.sort((e,o)=>{const i=r(a,[e,o],n,t);if(i instanceof Promise)throw new TypeError("Async functions cannot be used as sort comparators");return Z(i,t,{finite:!0}),i})),e.join("")}const s=[...o];return i?s.sort((e,n)=>(X(e,t),X(n,t),re(e,n,t))):s.sort((e,o)=>{V(a,t);const i=r(a,[e,o],n,t);if(i instanceof Promise)throw new TypeError("Async functions cannot be used as sort comparators");return Z(i,t,{finite:!0}),i}),s},arity:{min:1,max:2}},take:{evaluate:([e,t],n)=>{Z(t,n),F(e,n);const r=Math.max(Math.ceil(t),0);return e.slice(0,r)},arity:ee(2)},"take-last":{evaluate:([e,t],n)=>{F(e,n),Z(t,n);const r=Math.max(Math.ceil(t),0),o=e.length-r;return e.slice(o)},arity:ee(2)},drop:{evaluate:([e,t],n)=>{Z(t,n);const r=Math.max(Math.ceil(t),0);return F(e,n),e.slice(r)},arity:ee(2)},"drop-last":{evaluate:([e,t],n)=>{F(e,n),Z(t,n);const r=Math.max(Math.ceil(t),0),o=e.length-r;return e.slice(0,o)},arity:ee(2)},"take-while":{evaluate:([e,t],n,r,{executeFunction:o})=>{F(e,n),V(t,n);const i="string"==typeof e?e.split(""):Array.from(e);return he(Se(i,e=>he(o(t,[e],r,n),e=>!e)),t=>{const n=-1===t?i:i.slice(0,t);return"string"==typeof e?n.join(""):n})},arity:ee(2)},"drop-while":{evaluate:([e,t],n,r,{executeFunction:o})=>{F(e,n),V(t,n);const i=Array.isArray(e)?e:e.split("");return he(Se(i,e=>he(o(t,[e],r,n),e=>!e)),t=>-1===t?"string"==typeof e?"":[]:"string"==typeof e?i.slice(t).join(""):e.slice(t))},arity:ee(2)}},Pe=new WeakSet,$e=new WeakSet,Ae=new WeakSet,Ie=new WeakSet,je=new WeakSet,Ce=new WeakSet,Oe=new WeakSet;function Me(e){return Array.isArray(e)?(Pe.has(e)||(Ue(e),Re(e)||Be(e)),e):e}function Ue(e){return!!Array.isArray(e)&&(!!$e.has(e)||!Ae.has(e)&&(e.every(e=>K(e))?(Pe.add(e),$e.add(e),!0):(Ae.add(e),!1)))}function Fe(e,t){if(!Ue(e))throw new n(`Expected a vector, but got ${e}`,t)}function Te(e,t){if(Fe(e,t),0===e.length)throw new n(`Expected a non empty vector, but got ${e}`,t)}function Be(e){if(!Array.isArray(e))return!1;if(Ce.has(e))return!0;if(Oe.has(e))return!1;if(0===e.length)return Oe.add(e),!1;if(!Array.isArray(e[0]))return Oe.add(e),!1;const t=e[0].length;for(const n of e.slice(1)){if(!Array.isArray(n))return Oe.add(e),!1;if(n.length!==t)return Oe.add(e),!1}return Pe.add(e),Ce.add(e),!0}function Re(e){if(!Array.isArray(e))return!1;if(Ie.has(e))return!0;if(je.has(e))return!1;if(0===e.length)return je.add(e),!1;if(!Array.isArray(e[0])||0===e[0].length)return je.add(e),!1;const t=e[0].length;for(const n of e)if(!Array.isArray(n)||n.length!==t||n.some(e=>!K(e)))return je.add(e),!1;return Pe.add(e),Ce.add(e),Ie.add(e),!0}function _e(e,t){let r=!1,o=!1;for(const i of e)if(Ue(i))r=!0;else if(Re(i))o=!0;else if(!K(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(Re(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=>Re(e)?e:Array.from({length:o},()=>Array.from({length:i},()=>e)))]}if(r){let r=null;for(const o of e)if(Ue(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=>Ue(e)?e:Array.from({length:r},()=>e))]}return["number",e]}function De(e){return(t,n)=>{const[r,o]=_e(t,n);return"number"===r?e(o[0]):"vector"===r?o[0].map(t=>e(t)):o[0].map(t=>t.map(t=>e(t)))}}function ze(e){return(t,n)=>{const[r,o]=_e(t,n);return"number"===r?e(o[0],o[1]):"vector"===r?o[0].map((t,n)=>e(t,o[1][n])):o[0].map((t,n)=>t.map((t,r)=>e(t,o[1][n][r])))}}function Le(e,t){return(n,r)=>{if(0===n.length)return e;const[o,i]=_e(n,r);if("number"===o)return i.reduce((e,n)=>t(e,n),e);if("vector"===o){const[e,...n]=i;return n.reduce((e,n)=>e.map((e,r)=>t(e,n[r])),e)}{const[e,...n]=i;return n.reduce((e,n)=>e.map((e,r)=>e.map((e,o)=>t(e,n[r][o]))),e)}}}const Ve={inc:{evaluate:De(e=>e+1),arity:ee(1)},dec:{evaluate:De(e=>e-1),arity:ee(1)},"+":{evaluate:Le(0,(e,t)=>e+t),arity:{}},"*":{evaluate:Le(1,(e,t)=>e*t),arity:{}},"/":{evaluate:(e,t)=>{if(0===e.length)return 1;const[n,r]=_e(e,t);if("number"===n){const[e,...t]=r;return 0===t.length?1/e:t.reduce((e,t)=>e/t,e)}if("vector"===n){const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e/t[n]),e)}{const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e.map((e,r)=>e/t[n][r])),e)}},arity:{}},"-":{evaluate:(e,t)=>{if(0===e.length)return 0;const[n,r]=_e(e,t);if("number"===n){const[e,...t]=r;return 0===t.length?-e:t.reduce((e,t)=>e-t,e)}if("vector"===n){const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e-t[n]),e)}{const e=r[0];return r.slice(1).reduce((e,t)=>e.map((e,n)=>e.map((e,r)=>e-t[n][r])),e)}},arity:{}},quot:{evaluate:ze((e,t)=>Math.trunc(e/t)),arity:ee(2)},mod:{evaluate:ze((e,t)=>e-t*Math.floor(e/t)),arity:ee(2)},"%":{evaluate:ze((e,t)=>e%t),arity:ee(2)},sqrt:{evaluate:De(e=>Math.sqrt(e)),arity:ee(1)},cbrt:{evaluate:De(e=>Math.cbrt(e)),arity:ee(1)},"^":{evaluate:ze((e,t)=>e**t),arity:ee(2)},round:{evaluate:([e,t],n)=>{const[r,o]=_e([e],n);if("number"===r){if(void 0===t||0===t)return Math.round(o[0]);{Z(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));{Z(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)));{Z(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:De(e=>Math.trunc(e)),arity:ee(1)},floor:{evaluate:De(e=>Math.floor(e)),arity:ee(1)},ceil:{evaluate:De(e=>Math.ceil(e)),arity:ee(1)},min:{evaluate:(e,t)=>{if(1===e.length&&Ue(e[0])){const n=e[0];return Te(n,t),n.reduce((e,t)=>Math.min(e,t),1/0)}const[n,...r]=e;return Z(n,t),r.reduce((e,n)=>(Z(n,t),Math.min(e,n)),n)},arity:{min:1}},max:{evaluate:(e,t)=>{if(1===e.length&&Ue(e[0])){const n=e[0];return Te(n,t),n.reduce((e,t)=>Math.max(e,t),-1/0)}const[n,...r]=e;return Z(n,t),r.reduce((e,n)=>(Z(n,t),Math.max(e,n)),n)},arity:{min:1}},abs:{evaluate:De(e=>Math.abs(e)),arity:ee(1)},sign:{evaluate:De(e=>Math.sign(e)),arity:ee(1)}};function We([e,...t],n){const r=O(e,n);for(const e of t)if(!oe(r,O(e,n),n))return!1;return!0}const Je={"==":{evaluate:(e,t)=>We(e,t),arity:{min:1}},"!=":{evaluate:(e,t)=>!We(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=G(e);for(const e of t){if(re(r,G(e),n)<=0)return!1;r=G(e)}return!0},arity:{min:1}},"<":{evaluate:([e,...t],n)=>{let r=G(e);for(const e of t){if(re(r,G(e),n)>=0)return!1;r=G(e)}return!0},arity:{min:1}},">=":{evaluate:([e,...t],n)=>{let r=G(e);for(const e of t){if(re(r,G(e),n)<0)return!1;r=G(e)}return!0},arity:{min:1}},"<=":{evaluate:([e,...t],n)=>{let r=G(e);for(const e of t){if(re(r,G(e),n)>0)return!1;r=G(e)}return!0},arity:{min:1}},not:{evaluate:([e])=>!e,arity:ee(1)},"epoch->iso-date":{evaluate:([e],t)=>(Z(e,t),new Date(e).toISOString()),arity:ee(1)},"iso-date->epoch":{evaluate:([e],t)=>{J(e,t);const n=new Date(e).valueOf();return Z(n,t,{finite:!0}),n},arity:ee(1)},"write!":{evaluate:(e,t)=>(console.log(...e),e.length>0?O(e[e.length-1],t):null),pure:!1,arity:{}},boolean:{evaluate:([e])=>!!e,arity:ee(1)},compare:{evaluate:([e,t],n)=>(X(e,n),X(t,n),re(e,t,n)),arity:ee(2)},"json-parse":{evaluate:([e],t)=>(J(e,t),JSON.parse(e)),arity:ee(1)},"json-stringify":{evaluate:([e,t],n)=>(M(e,n),void 0===t?JSON.stringify(e):(Z(t,n),JSON.stringify(e,null,t))),arity:{min:1,max:2}}},qe={keys:{evaluate:([e],t)=>(B(e,t),Object.keys(e)),arity:ee(1)},vals:{evaluate:([e],t)=>(B(e,t),Object.values(e)),arity:ee(1)},entries:{evaluate:([e],t)=>(B(e,t),Object.entries(e)),arity:ee(1)},find:{evaluate:([e,t],n)=>(B(e,n),J(t,n),ne(e,t)?[t,e[t]]:null),arity:ee(2)},dissoc:{evaluate:([e,t],n)=>{B(e,n),J(t,n);const r={...e};return delete r[t],r},arity:ee(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),V(i,t),ge(a,(e,o)=>{B(o,t);return he(ge(Object.entries(o),(e,o)=>{const a=q(o[0],t),s=ie(o[1]);return ne(e,a)?he(r(i,[e[a],s],n,t),t=>(e[a]=t,e)):(e[a]=s,e)},e),e=>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[q(e[i],n)]=ie(t[i])}return o},arity:ee(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:ee(2)}},Ye={"function?":{evaluate:([e])=>S(e),arity:ee(1)},"string?":{evaluate:([e])=>"string"==typeof e,arity:ee(1)},"number?":{evaluate:([e])=>"number"==typeof e,arity:ee(1)},"integer?":{evaluate:([e])=>"number"==typeof e&&K(e,{integer:!0}),arity:ee(1)},"boolean?":{evaluate:([e])=>"boolean"==typeof e,arity:ee(1)},"null?":{evaluate:([e])=>null==e,arity:ee(1)},"zero?":{evaluate:([e],t)=>(Z(e,t,{finite:!0}),Math.abs(e)<ue),arity:ee(1)},"pos?":{evaluate:([e],t)=>(Z(e,t,{finite:!0}),e>0),arity:ee(1)},"neg?":{evaluate:([e],t)=>(Z(e,t,{finite:!0}),e<0),arity:ee(1)},"even?":{evaluate:([e],t)=>(Z(e,t,{finite:!0}),e%2==0),arity:ee(1)},"odd?":{evaluate:([e],t)=>(Z(e,t,{finite:!0}),K(e,{integer:!0})&&e%2!=0),arity:ee(1)},"array?":{evaluate:([e])=>Array.isArray(e),arity:ee(1)},"collection?":{evaluate:([e])=>R(e),arity:ee(1)},"sequence?":{evaluate:([e])=>U(e),arity:ee(1)},"object?":{evaluate:([e])=>T(e),arity:ee(1)},"regexp?":{evaluate:([e])=>D(e),arity:ee(1)},"finite?":{evaluate:([e],t)=>(Z(e,t),Number.isFinite(e)),arity:ee(1)},"positive-infinity?":{evaluate:([e],t)=>(Z(e,t),e===Number.POSITIVE_INFINITY),arity:ee(1)},"negative-infinity?":{evaluate:([e],t)=>(Z(e,t),e===Number.NEGATIVE_INFINITY),arity:ee(1)},"true?":{evaluate:([e])=>!0===e,arity:ee(1)},"false?":{evaluate:([e])=>!1===e,arity:ee(1)},"empty?":{evaluate:([e],t)=>null===e||(_(e,t),"string"==typeof e||Array.isArray(e)?0===e.length:0===Object.keys(e).length),arity:ee(1)},"not-empty?":{evaluate:([e],t)=>null!==e&&(_(e,t),"string"==typeof e||Array.isArray(e)?e.length>0:Object.keys(e).length>0),arity:ee(1)},"vector?":{evaluate:([e])=>Ue(e),arity:ee(1)},"matrix?":{evaluate:([e])=>Re(e),arity:ee(1)},"grid?":{evaluate:([e])=>Be(e),arity:ee(1)}},Ge={regexp:{evaluate:([e,t],r)=>{J(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{[d]:!0,sourceCodeInfo:r,s:o,f:i}},arity:{min:1,max:2}},"re-match":{evaluate:([e,t],n)=>{if(function(e,t){if(!D(e))throw m("RegularExpression",e,t)}(t,n),!W(e))return null;const r=new RegExp(t.s,t.f).exec(e);return r?[...r]:null},arity:ee(2)},replace:{evaluate:([e,t,n],r)=>{J(e,r),z(t,r),J(n,r);const o=D(t)?new RegExp(t.s,`${t.f}`):t;return e.replace(o,n)},arity:ee(3)},"replace-all":{evaluate:([e,t,n],r)=>{J(e,r),z(t,r),J(n,r);const o=D(t)?new RegExp(t.s,`${t.f.includes("g")?t.f:`${t.f}g`}`):t;return e.replaceAll(o,n)},arity:ee(3)}},Xe=/^\s*$/,He={str:{evaluate:e=>e.reduce((e,t)=>e+(null==t?"":T(t)||Array.isArray(t)?JSON.stringify(t):`${t}`),""),arity:{}},number:{evaluate:([e],t)=>{J(e,t);const r=Number(e);if(Number.isNaN(r))throw new n(`Could not convert '${e}' to a number.`,t);return r},arity:ee(1)},"lower-case":{evaluate:([e],t)=>(J(e,t),e.toLowerCase()),arity:ee(1)},"upper-case":{evaluate:([e],t)=>(J(e,t),e.toUpperCase()),arity:ee(1)},trim:{evaluate:([e],t)=>(J(e,t),e.trim()),arity:ee(1)},join:{evaluate:([e,t],n)=>(le(e,n),e.forEach(e=>X(e,n)),J(t,n),e.join(t)),arity:ee(2)},split:{evaluate:([e,t,n],r)=>{J(e,r),z(t,r),void 0!==n&&Z(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||(J(e,t),Xe.test(e)),arity:ee(1)}},Ke={"|>":{evaluate:([e,t],n,r,{executeFunction:o})=>(V(t,n),o(t,[e],r,n)),arity:ee(2)},apply:{evaluate:([e,...t],n,r,{executeFunction:o})=>{V(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:ee(1)},comp:{evaluate:(e,t)=>{return e.forEach(e=>V(e,t)),{[f]:!0,sourceCodeInfo:t,functionType:"Comp",params:e,arity:e.length>0?(n=e.at(-1),"number"==typeof n||R(n)?ee(1):n.arity):{min:1,max:1}};var n},arity:{}},constantly:{evaluate:([e],t)=>({[f]:!0,sourceCodeInfo:t,functionType:"Constantly",value:ie(e),arity:{}}),arity:ee(1)}};function Ze(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(", ")})`} -> ${Qe(r)}`),a=o?["","Operator:",` a ${e} b -> ${Qe(r)}`]:[];return[...i,...a]}(e).join("\n ")}\n\n Arguments:\n ${function(e){return Object.entries(e.args).map(([e,t])=>`${e}: ${Qe(t)}`)}(e).join("\n ")}\n\n Examples:\n${e.examples.map(e=>ce(e,4)).join("\n\n")}`)}function Qe(e){const t=e.type,n=(Array.isArray(t)?t:[t]).join(" | ");return e.array||e.rest?`Array<${n}>`:n}const et={sum:{evaluate:([e],t)=>(Fe(e,t),e.reduce((e,t)=>e+t,0)),arity:ee(1)},prod:{evaluate:([e],t)=>(Fe(e,t),e.reduce((e,t)=>e*t,1)),arity:ee(1)},mean:{evaluate:([e],t)=>(Te(e,t),e.reduce((e,t)=>e+t,0)/e.length),arity:ee(1)},median:{evaluate:([e],t)=>(Te(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:ee(1)}},tt={...H,...te,...Ee,...ke,...Ne,...Ve,...function(e){return{doc:{evaluate:([t],n)=>{if(b(e),V(t,n),!S(t))return"";if("Builtin"===t.functionType){const n=e[t.name];return n?Ze(n):""}return"UserDefined"===t.functionType||"NativeJsFunction"===t.functionType?t.docString:""},arity:ee(1)},arity:{evaluate:([e],t)=>(V(e,t),S(e)?e.arity:ee(1)),arity:ee(1)}}}({}),...Je,...qe,...Ye,...Ge,...He,...Ke,...et};Object.entries(tt).forEach(([e,t])=>{t.name=e});const nt={...tt},rt={},ot=[];Object.entries(nt).forEach(([e,t],n)=>{rt[e]=n,ot.push(t)});const it={arity:{},evaluate:(e,t,{evaluateNode:n})=>ge(e[1][1],(e,r)=>e?n(r,t):e,!0),evaluateAsNormalExpression:(e,t)=>{let n=!0;for(const r of e)if(n=O(r,t),!n)break;return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},at={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1];return function e(o){if(o>=r.length)return null;const[i,a]=r[o];return he(n(i,t),r=>r?n(a,t):e(o+1))}(0)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1].flat(),t,r,o)},st=11,ut=12,ct=13,lt=14,ft=15,dt=16;function ht(e,t){if(e[0]===ct)Object.values(e[1][0]).forEach(e=>{e[1][1]&&t(e[1][1]),ht(e,t)});else if(e[0]===lt)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]),ht(r,t))}}function pt(e,t,n){const r=e[2],o={};return he(yt(e,t,n,r,o),()=>o)}function yt(e,t,r,o,i){if(e[0]===ct){!function(e,t){if(!w(e))throw new n(`Expected UnknownRecord, got ${y(e)}.`,g(e,t))}(t,o);const a=new Set;let s;return he(ve(Object.entries(e[1][0]),([e,n])=>{if(n[0]===ut)return void(s=n);a.add(e);const u=t[e];return he(void 0!==u?u:n[1][1]?r(n[1][1]):null,e=>{const t=e??null;return M(t,o),yt(n,t,r,o,i)})}),()=>{if(s){const e=Object.entries(t).filter(([e])=>!a.has(e)).reduce((e,[t,n])=>(e[t]=O(n),e),{});i[s[1][0]]=e}})}if(e[0]===lt){let n=null;le(t,o);const a=[];for(let t=0;t<e[1][0].length;t+=1){const r=e[1][0][t]??null;if(null!==r){if(r[0]===ut){n=t;break}a.push({element:r,index:t})}}return he(ve(a,({element:e,index:n})=>{const a=t[n];return he(void 0!==a?a:e[1][1]?r(e[1][1]):null,t=>{const n=t??null;return M(n,o),yt(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]===ut?i[e[1][0]]=O(t):i[e[1][0][1]]=O(t)}function gt(e){const t={};return mt(e,t),t}function mt(e,t){if(null!==e)if(e[0]===lt)for(const n of e[1][0])mt(n,t);else if(e[0]===ct)for(const n of Object.values(e[1][0]))mt(n,t);else if(e[0]===ut){if(t[e[1][0]])throw new n(`Duplicate binding name: ${e[1][0]}`,e[2]);t[e[1][0]]=!0}else if(e[0]===st){if(t[e[1][0][1]])throw new n(`Duplicate binding name: ${e[1][0]}`,e[2]);t[e[1][0][1]]=!0}}function vt(e,t,n){const r={};return he(bt(e,t,n,r),e=>e?r:null)}function bt(e,t,n,r){if(e[0]===dt)return!0;if(e[0]===ft){const r=e[1][0];return he(n(r),e=>oe(t,e))}if(e[0]===st){const o=e[1][0],i=e[1][1];if(null==t){if(i)return he(n(i),e=>(r[o[1]]=O(e),!0));r[o[1]]=t??null}else r[o[1]]=O(t);return!0}if(e[0]===ct){if(!w(t))return!1;const o=new Set;let i;const a=Object.entries(e[1][0]);let s=!0;for(const[e,u]of a)s=he(s,a=>{if(!a)return!1;if(u[0]===ut)return i=u,!0;o.add(e);const s=t[e];if(void 0===s&&u[0]===ft)return he(n(u[1][0]),e=>oe(void 0,e));return he(void 0!==s?s:u[1]&&u[1][1]?n(u[1][1]):null,e=>bt(u,e??null,n,r))});return he(s,e=>{if(!e)return!1;if(i){const e=Object.entries(t).filter(([e])=>!o.has(e)).reduce((e,[t,n])=>(e[t]=O(n),e),{});r[i[1][0]]=e}return!0})}{const o=e;if(!Array.isArray(t))return!1;const i=o[1][0];let a=null;for(let e=0;e<i.length;e+=1){const t=i[e];if(null!==t&&t[0]===ut){a=e;break}}if(null===a&&t.length!==i.length)return!1;if(null!==a&&t.length<a)return!1;let s=!0;for(let e=0;e<i.length;e+=1){const o=i[e];if(null===o)continue;if(o[0]===ut){r[o[1][0]]=t.slice(e);break}const a=o;s=he(s,o=>!!o&&bt(a,O(t[e]),n,r))}return s}}const wt={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[,r,o]=e[1];return he(n(r,t),e=>function r(i){if(i>=o.length)return null;const[a,s,u]=o[i];return he(vt(a,e,e=>n(e,t)),e=>{if(null===e)return r(i+1);const o={};for(const[t,n]of Object.entries(e))o[t]={value:n};const a=t.create(o);return u?he(n(u,a),e=>e?n(s,a):r(i+1)):n(s,a)})}(0))},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const i=new Set;n([e[1][1]],t,r,o).forEach(e=>i.add(e));for(const[a,s,u]of e[1][2]){const e={};Object.assign(e,gt(a));const c=t.create(e);u&&n([u],c,r,o).forEach(e=>i.add(e)),n([s],c,r,o).forEach(e=>i.add(e))}return i}};function St(e){const t=e[0];return s.UserDefinedSymbol===t||s.NormalBuiltinSymbol===t||s.SpecialBuiltinSymbol===t}function xt(e){return s.UserDefinedSymbol===e[0]}function Et(e,t){return function(e,t){if(!xt(e))throw m("UserDefinedSymbolNode",e,t)}(e,t),e}function kt(e){return s.NormalBuiltinSymbol===e[0]}function Nt(e){return s.SpecialBuiltinSymbol===e[0]}function Pt(e){return!!function(e){return e[0]===s.NormalExpression}(e)&&St(e[1][0])}function $t(e){return e[0]===s.Spread}const At={arity:ee(1),evaluate:(e,t)=>{const n=e[1][1];if(function(e,t){if(!St(e))throw m("SymbolNode",e,t)}(n),!xt(n))return!0;return null!==t.lookUp(n)},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n([e[1][1]],t,r,o)},It={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const r=t.create({});return ge(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)},jt={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(gt(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);C(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]!==ut&&void 0===e[1][1]).length,c={min:u>0?u:void 0,max:s[0].some(e=>e[0]===ut)?void 0:s[0].length};return{[f]:!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,gt(e)),ht(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 Ct={arity:{min:2,max:3},evaluate:(e,t,{evaluateNode:n})=>{const[r,o,i]=e[1][1];return he(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)},Ot={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[r,o,i]=e[1][1];return he(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)},Mt={arity:ee(0),evaluate:(e,t,{evaluateNode:n})=>{const r=e[1][1],o=r[1][0],i=r[1][1];return he(n(i,t),e=>he(pt(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],a=i[1][0],s=i[1][1],u=n([s],t,r,o);return ht(a,e=>{se(u,n([e],t,r,o))}),t.addValues(gt(a),a[2]),u}},Ut={arity:{},evaluate:(e,r,{evaluateNode:o})=>{const i=e[1][1],a=ge(i,(e,t)=>he(o(t[1][1],r.create(e)),n=>he(pt(t[1][0],n,e=>o(e,r)),t=>(Object.entries(t).forEach(([t,n])=>{e[t]={value:n}}),e))),{});return he(a,a=>{const s=r.create(a),u=e[1][2];function c(t){if(t.length!==i.length)throw new n(`recur expected ${i.length} parameters, got ${y(t.length)}`,e[2]);return he(ve(i,(e,n)=>he(pt(e[1][0],O(t[n]),e=>o(e,r)),e=>{for(const[t,n]of Object.entries(e))a[t].value=n})),()=>l())}function l(){return we(()=>o(u,s),e=>{if(e instanceof t)return c(e.params);throw e})}for(;;)try{const e=o(u,s);return e instanceof Promise?e.catch(e=>{if(e instanceof t)return c(e.params);throw e}):e}catch(s){if(s instanceof t){const t=s.params;if(t.length!==i.length)throw new n(`recur expected ${i.length} parameters, got ${y(t.length)}`,e[2]);for(let e=0;e<i.length;e+=1){const n=pt(i[e][1][0],O(t[e]),e=>o(e,r));if(n instanceof Promise)return n.then(n=>{for(const[e,t]of Object.entries(n))a[e].value=t;return he(ve(i.slice(e+1),(n,i)=>he(pt(n[1][0],O(t[e+1+i]),e=>o(e,r)),e=>{for(const[t,n]of Object.entries(e))a[t].value=n})),()=>l())});for(const[e,t]of Object.entries(n))a[e].value=t}continue}throw s}})},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const i=e[1][1],a=i.reduce((e,t)=>{const n=gt(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 Ft(e,t,n,r){const o=t[2],[,i,a]=t[1],s=[],u=i.map(()=>0);return function t(){const c={},l=n.create(c);return he(function e(t){if(t>=i.length)return"continue";const[n,a,s,f]=i[t],[d,h]=n[1];return he(r(h,l),n=>{const i=function(e,t){return _(e,t),e}(n,o),h=U(i)?i:Object.entries(i);if(0===h.length)return"abort";const p=v(u[t],o);if(p>=h.length)return 0===t?"abort":(u[t]=0,u[t-1]=v(u[t-1],o)+1,"skip");const y=O(h[p],o);return he(pt(d,y,e=>r(e,l)),n=>(Object.entries(n).forEach(([e,t])=>{c[e]={value:t}}),he(a.length>0?function(e,t,n,r){let o;for(const i of e)o=he(o,()=>{const[e,o]=i[1];return he(r(o,n),o=>he(pt(e,o,e=>r(e,n)),e=>{Object.entries(e).forEach(([e,n])=>{t[e]={value:n}})}))});return o}(a,c,l,r):void 0,()=>s?he(r(s,l),n=>n?f?he(r(f,l),n=>n?e(t+1):(u[t]=Number.POSITIVE_INFINITY,"skip")):e(t+1):(u[t]=v(u[t],o)+1,"skip")):f?he(r(f,l),n=>n?e(t+1):(u[t]=Number.POSITIVE_INFINITY,"skip")):e(t+1))))})}(0),n=>"abort"===n?e?s:null:"skip"===n?t():he(r(a,l),n=>(e&&s.push(n),u.length>0&&(u[u.length-1]+=1),t())))}()}function Tt(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,gt(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,gt(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 Bt={arity:ee(1),evaluate:(e,t,n)=>Ft(!0,e,t,n.evaluateNode),getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>Tt(e,t,n,r,o)},Rt={arity:ee(1),evaluate:(e,t,n)=>he(Ft(!1,e,t,n.evaluateNode),()=>null),getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>Tt(e,t,n,r,o)},_t={arity:{},evaluate:(e,t,{evaluateNode:n})=>ge(e[1][1],(e,r)=>e||n(r,t),!1),evaluateAsNormalExpression:(e,t)=>{let n=!1;for(const r of e)if(n=O(r,t),n)break;return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},Dt={arity:{min:1},evaluate:(e,t,{evaluateNode:n})=>{const r=Symbol("qq-sentinel");return he(ge(e[1][1],(e,o)=>e!==r?e:xt(o)&&null===t.lookUp(o)?r:he(n(o,t),e=>null!==e?e:r),r),e=>e===r?null:e)},evaluateAsNormalExpression:(e,t)=>{for(const n of e){const e=O(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)},zt={arity:{},evaluate:(e,n,{evaluateNode:r})=>he(pe(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)},Lt={arity:ee(1),evaluate:(e,t,{evaluateNode:n})=>he(n(e[1][1],t),t=>{const n=q(t,e[2],{nonEmpty:!0});throw new r(n,e[2])}),evaluateAsNormalExpression:(e,t)=>{const n=q(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)},Vt={arity:{},evaluate:(e,t,{evaluateNode:n})=>{const[,r,o,i]=e[1];return we(()=>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,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))}},Wt={arity:{},evaluate:(e,t,{evaluateNode:r})=>{const o=[];return he(ve(e[1][1],e=>$t(e)?he(r(e[1],t),t=>{if(!Array.isArray(t))throw new n("Spread value is not an array",e[2]);o.push(...t)}):he(r(e,t),e=>{o.push(e)})),()=>o)},evaluateAsNormalExpression:(e,t)=>{const n=[];for(const r of e)n.push(O(r,t));return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},Jt={arity:{},evaluate:(e,t,{evaluateNode:r})=>{const o={},i=e[1][1];return function e(a){if(a>=i.length)return o;const s=i[a];if($t(s))return he(r(s[1],t),t=>{if(!w(t))throw new n("Spread value is not an object",s[2]);return Object.assign(o,t),e(a+1)});{const u=i[a+1];if(void 0===u)throw new n("Missing value for key",s[2]);return he(r(s,t),n=>he(r(u,t),t=>(J(n,s[2]),o[n]=t,e(a+2))))}}(0)},evaluateAsNormalExpression:(e,t)=>{const n={};for(let r=0;r<e.length;r+=2){const o=e[r],i=e[r+1];J(o,t),n[o]=i??null}return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},qt={arity:ee(1),evaluate:(e,t)=>{const r=e[1][1],o=e[2],i=t.getValueModule(r);if(i.found)return i.value;const a=t.getModule(r);if(!a)throw new n(`Unknown module: '${r}'`,o);const s={};for(const[e,t]of Object.entries(a.functions))s[e]={[f]:!0,sourceCodeInfo:o,functionType:"Module",moduleName:r,functionName:e,arity:t.arity};return s},getUndefinedSymbols:()=>new Set},Yt={"??":0,"&&":1,"||":2,array:3,cond:4,"defined?":5,block:6,doseq:7,"0_lambda":8,for:9,if:10,let:11,loop:12,object:13,recur:14,match:15,throw:16,try:17,unless:18,import:19},Gt=[Dt,it,_t,Wt,at,At,It,Rt,jt,Bt,Ct,Mt,Ut,Jt,zt,wt,Lt,Vt,Ot,qt],Xt={normalExpressions:nt,specialExpressions:Gt,allNormalExpressions:ot},Ht=Object.keys(nt),Kt=Object.keys(Yt),Zt=(e,t,n,r)=>{const o=Array.isArray(e)?e:[[s.SpecialExpression,[Yt.block,e.body]]],i=new Set;for(const e of o)Qt(e,t,n,r)?.forEach(e=>i.add(e));return i};function Qt(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(Pt(n)){const[,[e]]=n;if(xt(e)){null===t.lookUp(e)&&i.add(e[1])}}else{const[,[e]]=n;Qt(e,t,r,o)?.forEach(e=>i.add(e))}for(const e of n[1][1])Qt(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:Zt,builtin:r,evaluateNode:o})}case s.Spread:return Qt(e[1],t,r,o);default:throw new n(`Unhandled node type: ${i}`,e[2])}}const en=(1+Math.sqrt(5))/2,tn={E:Math.E,"-E":-Math.E,"ε":Math.E,"-ε":-Math.E,PI:Math.PI,"-PI":-Math.PI,"π":Math.PI,"-π":-Math.PI,PHI:en,"-PHI":-en,"φ":en,"-φ":-en,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},nn={true:!0,false:!1,null:null,do:null,else:null,case:null,each:null,in:null,when:null,while:null,catch:null,function:null,as:null,then:null,end:null,_:null,...tn};const rn={NativeJsFunction:(e,t,r,o)=>{if(o.pure&&!e.nativeFn.pure)throw new n(`Cannot call impure native function '${e.name}' in pure mode`,r);try{const o=e.nativeFn.fn(...t);return o instanceof Promise?o.then(e=>ie(e),e=>{const t="string"==typeof e?e:w(e)&&"string"==typeof e.message?e.message:"<no message>";throw new n(`Native function threw: "${t}"`,r)}):ie(o)}catch(e){const t="string"==typeof e?e:w(e)&&"string"==typeof e.message?e.message:"<no message>";throw new n(`Native function threw: "${t}"`,r)}},UserDefined:(e,r,o,i,{evaluateNode:a})=>{function s(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]!==ut).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=he(p,()=>{const e=ie(r[t]);return he(pt(c[t],e,e=>a(e,f.create(d))),e=>{Object.entries(e).forEach(([e,t])=>{d[e]={value:t}})})})}else h.push(ie(r[e]));for(let e=r.length;e<l;e++){const t=e;y=he(y,()=>{const e=c[t];return he(a(e[1][1],i.create(d)),t=>he(pt(e,t,e=>a(e,i.create(d))),e=>{Object.entries(e).forEach(([e,t])=>{d[e]={value:t}})}))})}return he(p,()=>he(y,()=>{const e=c.find(e=>e[0]===ut),n=void 0!==e?he(pt(e,h,e=>a(e,i.create(d))),e=>{Object.entries(e).forEach(([e,t])=>{d[e]={value:t}})}):void 0;return he(n,()=>{const e=f.create(d),n=ge(u[1],(t,n)=>a(n,e),null);return n instanceof Promise?n.catch(e=>{if(e instanceof t)return s(e.params);throw e}):n})}))}for(;;)try{return s(r)}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 ${y(t.length)}.`,r);return O(t[0],r)}let s=t;for(let e=a.length-1;e>=0;e--){const t=a[e];s=he(s,e=>he(i(L(t,r),e,o,r),e=>[e]))}return he(s,e=>O(e[0],r))},Constantly:e=>e.value,Juxt:(e,t,n,r,{executeFunction:o})=>pe(e.params,e=>o(L(e,n),t,r,n)),Complement:(e,t,n,r,{executeFunction:o})=>he(o(e.function,t,r,n),e=>!e),EveryPred:(e,t,n,r,{executeFunction:o})=>{const i=[];for(const a of e.params)for(const e of t)i.push(()=>o(L(a,n),[e],r,n));return ge(i,(e,t)=>!!e&&he(t(),e=>!!e),!0)},SomePred:(e,t,n,r,{executeFunction:o})=>{const i=[];for(const a of e.params)for(const e of t)i.push(()=>o(L(a,n),[e],r,n));return ge(i,(e,t)=>!!e||he(t(),e=>!!e),!1)},Fnull:(e,t,n,r,{executeFunction:o})=>{const i=t.map((t,n)=>null===t?ie(e.params[n]):t);return o(L(e.function,n),i,r,n)},Builtin:(e,t,r,o,{executeFunction:i})=>{const a=v(ot[e.normalBuiltinSymbolType],r);if(o.pure&&!1===a.pure)throw new n(`Cannot call impure function '${e.name}' in pure mode`,r);return a.evaluate(t,r,o,{executeFunction:i})},SpecialBuiltin:(e,t,r,o,{executeFunction:i})=>{const a=v(Gt[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);if(o.pure&&!1===s.pure)throw new n(`Cannot call impure function '${e.functionName}' in pure mode`,r);return Q(s.arity,t.length,r),s.evaluate(t,r,o,{executeFunction:i})}};function on(e,t){return ge(e.body,(e,n)=>an(n,t),null)}function an(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 v(nn[t],e[2])}(e);case s.NormalExpression:{const r=function(e,t){const r=e[2];return he(function(e,t){const r=[],o=[],i=ve(e,(e,i)=>$t(e)?he(an(e[1],t),t=>{if(!Array.isArray(t))throw new n(`Spread operator requires an array, got ${y(e)}`,e[2]);r.push(...t)}):e[0]!==s.ReservedSymbol||"_"!==e[1]?he(an(e,t),e=>{r.push(e)}):void o.push(i));return he(i,()=>({params:r,placeholders:o}))}(e[1][1],t),({params:o,placeholders:a})=>{if(Pt(e)){const s=e[1][0];if(a.length>0){return he(an(s,t),e=>({[f]:!0,function:L(e,r),functionType:"Partial",params:o,placeholders:a,sourceCodeInfo:r,arity:ee(a.length)}))}if(kt(s)){const r=s[1],i=Xt.allNormalExpressions[r];if(t.pure&&!1===i.pure)throw new n(`Cannot call impure function '${i.name}' in pure mode`,e[2]);return i.evaluate(o,e[2],t,{executeFunction:sn})}{const n=t.getValue(s[1]);if(void 0!==n)return sn(L(n,r),o,t,r);throw new i(s[1],e[2])}}return he(an(e[1][0],t),e=>{const n=L(e,r);if(a.length>0){return{[f]:!0,function:n,functionType:"Partial",params:o,placeholders:a,sourceCodeInfo:r,arity:ee(a.length)}}return sn(n,o,t,r)})})}(e,t);return he(r,t=>{if("number"==typeof t&&Number.isNaN(t))throw new n("Number is NaN",e[2]);return Me(t)})}case s.SpecialExpression:return he(function(e,t){const n=e[1][0],r=v(Xt.specialExpressions[n],e[2]);return(0,r.evaluate)(e,t,{evaluateNode:an,builtin:Xt,getUndefinedSymbols:Zt})}(e,t),e=>Me(e));default:throw new n(`${c(e[0])}-node cannot be evaluated`,e[2])}}function sn(e,t,r,o){if(S(e))return rn[e.functionType](e,t,o,r,{evaluateNode:an,executeFunction:sn});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 Z(o,r,{integer:!0,nonNegative:!0}),ie(e[o])}(e,t,o);if(T(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 J(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(T(o))return ie(o[e]);if(K(o,{integer:!0}))return ie(e[o]);throw new n(`string as function expects Obj or integer parameter, got ${y(o)}`,r)}(e,t,o);if(K(e))return function(e,t,r){if(Z(e,r,{integer:!0}),1!==t.length)throw new n("Number as function requires one Arr parameter.",r);const o=t[0];return F(o,r),ie(o[e])}(e,t,o);throw new n("Unexpected function type",o)}class un{contexts;globalContext;values;nativeJsFunctions;modules;valueModules;pure;constructor({contexts:e,values:t,nativeJsFunctions:n,modules:r,valueModules:o,pure:i}){this.globalContext=v(e[0]),this.contexts=e,this.values=t,this.nativeJsFunctions=n,this.modules=r??new Map,this.valueModules=o??new Map,this.pure=i??!1}getModule(e){return this.modules.get(e)}getValueModule(e){return this.valueModules.has(e)?{value:this.valueModules.get(e),found:!0}:{value:void 0,found:!1}}registerValueModule(e,t){this.valueModules.set(e,t)}create(e){const t=this.globalContext,n=new un({contexts:[e,...this.contexts],values:this.values,nativeJsFunctions:this.nativeJsFunctions,modules:this.modules,valueModules:this.valueModules,pure:this.pure});return n.globalContext=t,n}new(e){return new un({contexts:[{},e],modules:this.modules,valueModules:this.valueModules,pure:this.pure})}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=cn(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(Nt(e)){const t=e[1];switch(t){case Yt["&&"]:case Yt["||"]:case Yt.array:case Yt.object:case Yt["defined?"]:case Yt.recur:case Yt.throw:case Yt["??"]:{const n=v(Xt.specialExpressions[t],e[2]);return{[f]:!0,functionType:"SpecialBuiltin",specialBuiltinSymbolType:t,sourceCodeInfo:e[2],arity:n.arity}}default:throw new n(`Unknown special builtin symbol type: ${t}`,e[2])}}if(kt(e)){const t=e[1],n=ot[t],r=n.name;return{[f]:!0,functionType:"Builtin",normalBuiltinSymbolType:t,sourceCodeInfo:e[2],arity:n.arity,name:r}}const t=this.lookUp(e);if(w(r=t)&&void 0!==r.value)return t.value;var r;throw new i(e[1],e[2])}}function cn(e){return Kt.includes(e)?`special expression "${e}"`:Ht.includes(e)?`builtin function "${e}"`:"self"===e?`builtin value "${e}"`:null}function ln(e){const t=cn(e);if(t)throw new n(`Cannot shadow ${t}`,void 0)}function fn(e={},t,r){const o=e.globalContext??{},i=e.contexts?[o,...e.contexts]:[o];let a,s;if(e.bindings)for(const[t,r]of Object.entries(e.bindings)){if(t.includes("."))throw new n(`Dots are not allowed in binding keys: "${t}"`,void 0);if("function"==typeof r){const e={fn:r};ln(t),s||(s={}),s[t]={functionType:"NativeJsFunction",nativeFn:e,name:t,[f]:!0,arity:e.arity??{},docString:e.docString??""}}else ln(t),a||(a={}),a[t]=r}const u=new un({contexts:i,values:a,modules:t,nativeJsFunctions:s,pure:r});return e.globalModuleScope?u:u.create({})}const dn=["^","*","/","%","+","-","<<",">>",">>>","++","<","<=","≤",">",">=","≥","==","!=","!=","&","xor","|","&&","||","??","|>"],hn=[...dn,"?",":","->","...",".",",","=",":",";"],pn=new Set(["comment","cond","defined?","block","doseq","if","let","loop","recur","throw","try","unless","while"]);function yn(e){return!pn.has(e)}const gn=new Set(dn);function mn(e){return gn.has(e)}const vn=new Set(hn);function bn(e){return vn.has(e)}const wn=["(",")","[","]","{","}","'",'"',"`",",",".",";"," ","\n","\r","\t"],Sn=["0","1","2","3","4","5","6","7","8","9",...wn],xn=new Set(wn),En=new Set(Sn),kn=/\s/,Nn=[0],Pn=(e,t)=>{if('"'!==e[t])return Nn;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 $n(e,t,n,r){return t===n.slice(r,r+t.length)?[t.length,[e,t]]:Nn}const An=/\d/,In=/[0-7]/,jn=/[0-9a-f]/i,Cn=/[01]/,On=/[\s)\]}(,;]/,Mn=(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(!En.has(n)){const r=t;let o=e[t+=1];for(;o&&!xn.has(o);)n+=o,o=e[t+=1];return n.endsWith(":")?[t-r-1,["Symbol",n.slice(0,-1)]]:[t-r,["Symbol",n]]}return Nn},Un=[(e,t)=>{let n=e[t];if(!n||!kn.test(n))return Nn;let r=n;for(n=e[t+=1];n&&kn.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 Nn},(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 Nn},(e,t)=>{const n=Mn(e,t);if(0===n[0]||!n[1])return Nn;let r=n[1][1];r=r.startsWith("'")?r.slice(1,r.length-1):r;return void 0===nn[r]?Nn:[n[0],["ReservedSymbol",r]]},(e,t)=>$n("LParen","(",e,t),(e,t)=>$n("RParen",")",e,t),(e,t)=>$n("LBracket","[",e,t),(e,t)=>$n("RBracket","]",e,t),(e,t)=>$n("LBrace","{",e,t),(e,t)=>$n("RBrace","}",e,t),(e,t)=>{if('"'!==e[t]||'"'!==e[t+1]||'"'!==e[t+2])return Nn;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}`]]},Pn,(e,t)=>{if("#"!==e[t])return Nn;const[n,r]=Pn(e,t+1);if(!r)return Nn;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 Nn;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 Nn;let o;for(o=t+2;o<e.length;o+=1){const t=e[o];if("binary"===r&&!Cn.test(t))break;if("octal"===r&&!In.test(t))break;if("hex"===r&&!jn.test(t))break}const i=o-t;if(i<=2)return Nn;const a=e[o];return a&&!On.test(a)?Nn:[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(!An.test(e[n-1])||!An.test(e[n+1]))return n===i?Nn:[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 Nn;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 Nn;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(!An.test(r))break}if((r||o)&&n===i)return Nn;const u=n-t;if(0===u)return Nn;const c=e[n];return c&&":"!==c&&!On.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&&bn(n))return[3,["Operator",n]];const r=e.slice(t,t+2);if(t+1<e.length&&bn(r))return[2,["Operator",r]];const o=e[t]??"";return bn(o)?[1,["Operator",o]]:Nn},Mn];function Fn(e,t,n){const r=e.substring(0,t+1).split(/\r\n|\r|\n/),o=r[r.length-1],i=function(e,t){return e.split(/\r\n|\r|\n/)[t]}(e,r.length-1);return{code:i,position:{line:r.length,column:o.length},filePath:n}}function Tn(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 Nn})(e,t);if(t+=r,r>0)return[t-n,o]}for(const r of Un){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 Bn(e,t){return"Symbol"===e?.[0]&&(!t||e[1]===t)}function Rn(e,t){return function(e,t){Bn(e,t)||ir("Symbol",void 0,e)}(e,t),e}function _n(e,t){return"ReservedSymbol"===e?.[0]&&(!t||e[1]===t)}function Dn(e,t){_n(e,t)||ir("ReservedSymbol",t,e)}function zn(e,t){return Dn(e,t),e}function Ln(e,t){return"Operator"===e?.[0]&&(!t||e[1]===t)}function Vn(e,t){Ln(e,t)||ir("Operator",t,e)}function Wn(e){return"Number"===e?.[0]}function Jn(e){return"BasePrefixedNumber"===e?.[0]}function qn(e){return"LParen"===e?.[0]}function Yn(e){qn(e)||ir("LParen",void 0,e)}function Gn(e){return"RParen"===e?.[0]}function Xn(e){Gn(e)||ir("RParen",void 0,e)}function Hn(e){return"LBracket"===e?.[0]}function Kn(e){return function(e){Hn(e)||ir("LBracket",void 0,e)}(e),e}function Zn(e){return"RBracket"===e?.[0]}function Qn(e){Zn(e)||ir("RBracket",void 0,e)}function er(e){return"LBrace"===e?.[0]}function tr(e){return function(e){er(e)||ir("LBrace",void 0,e)}(e),e}function nr(e){return"RBrace"===e?.[0]}function rr(e){return"string"===e?.[0]}function or(e){return"Operator"===e?.[0]&&mn(e[1])}function ir(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 ar(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 sr=new Set([...Ht,...Kt,...Object.keys(nn)]);class ur{originalProgram;originalPosition;prefixProgram="";suffixProgram="";searchString="";suggestions=[];suggestionIndex=null;constructor(e,t,n,r){this.originalProgram=e,this.originalPosition=t;const o=this.originalProgram.slice(0,this.originalPosition),i=n.tokenize(o).tokens.at(-1);i&&"Error"!==i[0]&&(this.searchString=i[1],this.prefixProgram=this.originalProgram.slice(0,this.originalPosition-this.searchString.length),this.suffixProgram=this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.suggestions=this.generateSuggestions(r))}getNextSuggestion(){return this.getAutoCompleteSuggestionResult(this.getNextSuggestionSymbol())}getPreviousSuggestion(){return this.getAutoCompleteSuggestionResult(this.getPreviousSuggestionSymbol())}getAutoCompleteSuggestionResult(e){return null===e?null:{program:this.prefixProgram+e+this.suffixProgram,position:this.prefixProgram.length+e.length}}getNextSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=0:(this.suggestionIndex+=1,this.suggestionIndex>=this.suggestions.length&&(this.suggestionIndex=0)),this.suggestions[this.suggestionIndex])}getPreviousSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=this.suggestions.length-1:(this.suggestionIndex-=1,this.suggestionIndex<0&&(this.suggestionIndex=this.suggestions.length-1)),this.suggestions[this.suggestionIndex])}getSuggestions(){return[...this.suggestions]}getSearchString(){return this.searchString}generateSuggestions(e){const t=new Set(["0_defn","0_lambda"]),n=this.generateWithPredicate(e,e=>!t.has(e)&&e.startsWith(this.searchString));n.forEach(e=>t.add(e));const r=this.generateWithPredicate(e,e=>!t.has(e)&&e.toLowerCase().startsWith(this.searchString.toLowerCase()));r.forEach(e=>t.add(e));const o=this.generateWithPredicate(e,e=>!t.has(e)&&e.includes(this.searchString));o.forEach(e=>t.add(e));const i=this.generateWithPredicate(e,e=>!t.has(e)&&e.includes(this.searchString.toLowerCase()));return i.forEach(e=>t.add(e)),[...n,...r,...o,...i]}generateWithPredicate(e,t){const n=new Set;return sr.forEach(e=>{t(e)&&n.add(e)}),Object.keys(e.globalContext??{}).filter(t).forEach(e=>n.add(e)),e.contexts?.forEach(e=>{Object.keys(e).filter(t).forEach(e=>n.add(e))}),Object.keys(e.bindings??{}).filter(t).forEach(e=>n.add(e)),[...n].sort((e,t)=>e.localeCompare(t))}}function cr(e){return"object"==typeof e&&null!==e&&"string"==typeof e.program&&Array.isArray(e.fileModules)}function lr(e,t){return t&&(e[2]=t),e}function fr(e,t){return void 0!==Yt[e]&&"fn"!==e&&"defn"!==e?lr([s.SpecialBuiltinSymbol,Yt[e]],t):void 0!==rt[e]?lr([s.NormalBuiltinSymbol,rt[e]],t):lr([s.UserDefinedSymbol,e],t)}function dr(e){return e.substring(1,e.length-1).replace(/(\\{2})|(\\')|\\(.)/g,(e,t,n,r)=>t?"\\":n?"'":`\\${r}`)}const hr=Object.entries(rt).reduce((e,[t,n])=>(e[n]=t,e),[]),pr=Object.entries(Yt).reduce((e,[t,n])=>(e[n]=t,e),[]);function yr(e){return xt(e)?e[1]:kt(e)?hr[e[1]]:pr[e[1]]}function gr(e,t,n){const r=lr([s.NormalExpression,[e,t]],n);return kt(e)&&Q(ot[e[1]].arity,r[1][1].length,n),r}function mr(e){if(e.isAtEnd())return!0;const t=e.tryPeek();return Ln(t)?[";",",",":"].includes(t[1]):!!_n(t)&&["else","when","while","case","catch","let","then","end","do"].includes(t[1])}function vr(e,t,r,o,i){const a=e[1];switch(a){case"^":case"*":case"/":case"%":case"+":case"-":case"<<":case">>":case">>>":case"++":case"<":case"<=":case"≤":case">":case">=":case"≥":case"==":case"!=":case"&":case"xor":case"|":case"|>":return gr(t,[r,o],i);case"&&":case"||":case"??":return lr([s.SpecialExpression,[Yt[a],[r,o]]],i);default:throw new n(`Unknown binary operator: ${a}`,i)}}class br{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 wr(e,t){switch(e){case"^":return 12;case"*":case"/":case"%":return 11;case"+":case"-":return 10;case"<<":case">>":case">>>":return 9;case"++":return 8;case"<":case"<=":case"≤":case">":case">=":case"≥":return 7;case"==":case"!=":return 6;case"&":case"xor":case"|":return 5;case"&&":case"||":case"??":return 4;case"|>":return 2;default:throw new n(`Unknown binary operator: ${e}`,t)}}function Sr(e,t){const r=[];for(;!e.isAtEnd()&&!xr(e,t);)Ln(e.tryPeek(),";")?e.advance():r.push(e.parseExpression());if(function(e,t){if(!xr(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]:lr([s.SpecialExpression,[Yt.block,r]],e.peekSourceCodeInfo())}function xr(e,t){for(const n of t)if(_n(e.tryPeek(),n))return!0;return!1}function Er(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 lr([s.String,n],t[2])}function kr(e,t=!1){const r=zn(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=Er(e,n);return ce(r[1])}(e),e.isAtEnd()||_n(e.tryPeek(),"end")||(Vn(e.tryPeek(),";"),e.advance()));const i=[];for(;!e.isAtEnd()&&!_n(e.tryPeek(),"end");)if(i.push(e.parseExpression()),Ln(e.tryPeek(),";"))e.advance();else if(!_n(e.tryPeek(),"end"))throw new n("Expected end",e.peekSourceCodeInfo());return Dn(e.tryPeek(),"end"),e.advance(),[lr([s.SpecialExpression,[Yt.block,i]],r[2]),o]}function Nr(e){const t=e.peek();if(e.advance(),!Bn(t))throw new n(`Expected symbol token, got ${t[0]}`,t[2]);return"'"===t[1][0]?fr(dr(t[1]),t[2]):fr(t[1],t[2])}function Pr(e){const t=e.peek();e.advance();const n=t[1],r="-"===n[0],o=(r?n.substring(1):n).replace(/_/g,"");return lr([s.Number,r?-Number(o):Number(o)],t[2])}function $r(e,{requireDefaultValue:t,noRest:r,allowLiteralPatterns:o}={}){const i=e.tryPeek();if(o&&_n(i,"_"))return e.advance(),lr([dt,[]],i[2]);if(o&&Ir(i)){if(Wn(i)||Jn(i)){const t=Pr(e);return lr([ft,[t]],i[2])}if(rr(i)){const t=Er(e,i);return lr([ft,[t]],i[2])}if(_n(i,"true")){e.advance();const t=lr([s.ReservedSymbol,"true"],i[2]);return lr([ft,[t]],i[2])}if(_n(i,"false")){e.advance();const t=lr([s.ReservedSymbol,"false"],i[2]);return lr([ft,[t]],i[2])}if(_n(i,"null")){e.advance();const t=lr([s.ReservedSymbol,"null"],i[2]);return lr([ft,[t]],i[2])}}if(Bn(i)){const r=Nr(e);if(!xt(r))throw new n("Expected user defined symbol",i[2]);const o=Ar(e);if(t&&!o)throw new n("Expected assignment",e.peekSourceCodeInfo());return lr([st,[r,o]],i[2])}if(Ln(i,"...")){if(r)throw new n("Rest element not allowed",i[2]);e.advance();const t=Et(Nr(e));if(Ln(e.tryPeek(),"="))throw new n("Rest argument can not have default value",e.peekSourceCodeInfo());return lr([ut,[t[1],void 0]],i[2])}if(Hn(i)){e.advance();const r=[];let a=e.peek(),s=!1;for(;!Zn(a);){if(s)throw new n("Rest argument must be last",a[2]);if(Ln(a,",")){r.push(null),e.advance(),a=e.peek();continue}const t=$r(e,{allowLiteralPatterns:o});t[0]===ut&&(s=!0),r.push(t),a=e.peek(),Zn(a)||(Vn(a,","),e.advance()),a=e.peek()}e.advance();const u=Ar(e);if(t&&!u)throw new n("Expected assignment",e.peekSourceCodeInfo());return lr([lt,[r,u]],i[2])}if(er(i)){e.advance();const r={};let a=e.peek(),s=!1;for(;!nr(a);){if(s)throw new n("Rest argument must be last",a[2]);Ln(a,"...")&&(s=!0,e.advance());const t=Nr(e),u=yr(t);if(a=e.peek(),_n(a,"as")){if(s)throw new n("Rest argument can not have alias",a[2]);e.advance();const t=Et(Nr(e));if(r[t[1]])throw new n(`Duplicate binding name: ${t}`,a[2]);r[u]=lr([st,[t,Ar(e)]],i[2])}else if(nr(a)||Ln(a,",")||Ln(a,"=")){const o=Et(t,t[2]);if(r[o[1]])throw new n(`Duplicate binding name: ${o}`,a[2]);if(s&&Ln(e.tryPeek(),"="))throw new n("Rest argument can not have default value",e.peekSourceCodeInfo());r[o[1]]=lr(s?[ut,[o[1],Ar(e)]]:[st,[o,Ar(e)]],i[2])}else if(Ln(a,":")){if(e.advance(),a=e.peek(),o){if(!er(a)&&!Hn(a)&&!Ir(a))throw new n("Expected literal, object or array pattern",a[2])}else if(!er(a)&&!Hn(a))throw new n("Expected object or array",a[2]);r[u]=$r(e,{allowLiteralPatterns:o})}nr(e.peek())||(Vn(e.peek(),","),e.advance()),a=e.peek()}e.advance(),a=e.peek();const u=Ar(e);if(t&&!u)throw new n("Expected assignment",a[2]);return lr([ct,[r,u]],i[2])}throw new n("Expected symbol",e.peekSourceCodeInfo())}function Ar(e){if(Ln(e.tryPeek(),"="))return e.advance(),e.parseExpression()}function Ir(e){return Wn(e)||Jn(e)||rr(e)||_n(e,"true")||_n(e,"false")||_n(e,"null")}function jr(e,t){e.advance();const n=$r(e,{requireDefaultValue:!0,noRest:!0}),r=n[1][1];n[1][1]=void 0;const o=lr([s.Binding,[n,r]],t[2]);return lr([s.SpecialExpression,[Yt.let,o]],t[2])}function Cr(e){const t=function(e){const t=Rn(e.tryPeek()),n=Et(Nr(e));Dn(e.tryPeek(),"in"),e.advance();const r=e.parseExpression();return lr([s.Binding,[lr([st,[n,void 0]],t[2]),r]],t[2])}(e),r=[];let o=e.peek();Or(o,["let","when","while"]);const i=[];if("let"===o[1])for(r.push("&let");Bn(o,"let");){const t=jr(e,o),r=i.flatMap(e=>Object.keys(gt(e[1][0])));if(Object.keys(gt(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(),Or(o,["let","when","while"]),o=e.peek()}let a,u;for(;_n(o,"when")||_n(o,"while");){e.advance(),"when"===o[1]?(r.push("&when"),a=e.parseExpression()):(r.push("&while"),u=e.parseExpression()),o=e.peek();Or(o,r.includes("&when")&&r.includes("&while")?[]:r.includes("&when")?["while"]:["when"]),o=e.peek()}return Or(o,[]),[t,i,a,u]}function Or(e,t){if(!function(e,t){if(Ln(e,",")||Gn(e))return!0;for(const n of t){if("let"===n&&Bn(e,"let"))return!0;if(["when","while"].includes(n)&&_n(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 Mr(e){const t=zn(e.tryPeek());e.advance();const n=t[1];return function(e){return e in tn}(n)?lr([s.Number,tn[n]],t[2]):lr([s.ReservedSymbol,t[1]],t[2])}const Ur=/^\$([1-9]\d?)?$/;function Fr(e){const t=e.peek();if(qn(t)&&Bn(e.peekAhead(1))&&Ln(e.peekAhead(2),"->"))return null;try{const r=function(e){const t=e.peek();if(Bn(t))return[lr([st,[Nr(e),void 0]],t[2])];Yn(t),e.advance();let r=!1,o=!1;const i=[];for(;!e.isAtEnd()&&!Gn(e.peek())&&!Bn(e.peek(),"let");){if(r)throw new n("Rest argument must be last",e.peekSourceCodeInfo());const t=$r(e);if(void 0!==t[1][1]&&(o=!0),t[0]===ut&&(r=!0),o&&!t[1][1])throw new n("Default arguments must be last",e.peekSourceCodeInfo());if(i.push(t),!Ln(e.peek(),",")&&!Gn(e.peek())&&!Bn(e.peek(),"let"))throw new n("Expected comma or closing parenthesis",e.peekSourceCodeInfo());Ln(e.peek(),",")&&e.advance()}if(!Gn(e.peek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),i}(e);if(!Ln(e.peek(),"->"))return null;let o;e.advance();let i="";if(_n(e.peek(),"do")){const t=kr(e,!0);i=t[1],o=t[0][1][1]}else o=[e.parseExpression()];return lr([s.SpecialExpression,[Yt["0_lambda"],[r,o],i]],t[2])}catch{return null}}function Tr(e,t){e.advance();const r=[];for(;!e.isAtEnd()&&!Gn(e.tryPeek());){Ln(e.tryPeek(),"...")?(e.advance(),r.push(lr([s.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const t=e.tryPeek();if(!Ln(t,",")&&!Gn(t))throw new n("Expected comma or closing parenthesis",e.tryPeek()?.[2]);Ln(t,",")&&e.advance()}if(!Gn(e.tryPeek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());if(e.advance(),!Nt(t))return kt(t)||xt(t)?gr(t,r,t[2]):lr([s.NormalExpression,[t,r]],t[2]);{const e=t[1];if(e===Yt.import){if(1!==r.length)throw new n(`import expects exactly 1 argument, got ${r.length}`,t[2]);const o=r[0];if(!xt(o))throw new n("import expects a module name (symbol), got a non-symbol argument",o[2]??t[2]);const i=o[1];return lr([s.SpecialExpression,[e,i]],t[2])}const o=e;switch(Q(Xt.specialExpressions[o].arity,r.length,t[2]),o){case Yt["||"]:case Yt["&&"]:case Yt.recur:case Yt.array:case Yt.object:case Yt["??"]:return lr([s.SpecialExpression,[o,r]],t[2]);case Yt["defined?"]:{const[e]=r;return lr([s.SpecialExpression,[o,e]],t[2])}case Yt.throw:{const[e]=r;return lr([s.SpecialExpression,[o,e]],t[2])}case Yt["0_lambda"]:throw new n(`${o} is not allowed`,t[2]);default:throw new n(`Unknown special expression: ${o}`,t[2])}}}function Br(e){const t=tr(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!nr(e.tryPeek());){if(Ln(e.tryPeek(),"..."))e.advance(),r.push(lr([s.Spread,e.parseExpression()],e.peekSourceCodeInfo()));else{const t=e.tryPeek();if(rr(t)){const n=Er(e,t);r.push(lr([s.String,n[1]],t[2]))}else if(Bn(t)){const n=t[1].startsWith("'")?dr(t[1]):t[1];r.push(lr([s.String,n],t[2])),e.advance()}else{if(!Hn(t))throw new n("Expected key to be a symbol or a string",e.peekSourceCodeInfo());e.advance(),r.push(e.parseExpression()),Qn(e.tryPeek()),e.advance()}Vn(e.tryPeek(),":"),e.advance(),r.push(e.parseExpression())}const t=e.tryPeek();if(!Ln(t,",")&&!nr(t))throw new n("Expected comma or closing brace",e.peekSourceCodeInfo());Ln(t,",")&&e.advance()}var o;return nr(o=e.tryPeek())||ir("RBrace",void 0,o),e.advance(),lr([s.SpecialExpression,[Yt.object,r]],t[2])}function Rr(e){let t=function(e){const t=e.peek();if(qn(t)){e.storePosition();const t=Fr(e);if(t)return t;e.restorePosition(),e.advance();const r=e.parseExpression();if(!Gn(e.peek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),r}if(Ln(t)){const r=t[1];if(mn(r))return e.advance(),lr(void 0!==Yt[r]?[s.SpecialBuiltinSymbol,Yt[r]]:[s.NormalBuiltinSymbol,rt[r]],t[2]);if("->"===r)return function(e){const t=e.peek();e.advance();const r=e.getPosition();let o,i="";if(_n(e.peek(),"do")){const t=kr(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(Bn(r)){const e=Ur.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(lr([st,[[s.UserDefinedSymbol,"$"],void 0]],t[2])):l.push(lr([st,[[s.UserDefinedSymbol,`$${e}`],void 0]],t[2]));return lr([s.SpecialExpression,[Yt["0_lambda"],[l,o],i]],t[2])}(e);throw new n(`Illegal operator: ${r}`,t[2])}if(er(t))return Br(e);if(Hn(t))return function(e){const t=Kn(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!Zn(e.tryPeek());){Ln(e.tryPeek(),"...")?(e.advance(),r.push(lr([s.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const t=e.tryPeek();if(!Ln(t,",")&&!Zn(t))throw new n("Expected comma or closing parenthesis",e.peekSourceCodeInfo());Ln(t,",")&&e.advance()}return Qn(e.tryPeek()),e.advance(),lr([s.SpecialExpression,[Yt.array,r]],t[2])}(e);const r=t[0];switch(r){case"Number":case"BasePrefixedNumber":return Pr(e);case"string":return Er(e,t);case"Symbol":{e.storePosition();const t=Fr(e);return t||(e.restorePosition(),Nr(e))}case"ReservedSymbol":return Mr(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=lr([s.String,r],t[2]),a=lr([s.String,o],t[2]);return lr([s.NormalExpression,[lr([s.NormalBuiltinSymbol,rt.regexp],t[2]),[i,a]]],t[2])}(e);default:throw new n(`Unknown token type: ${r}`,t[2])}}(e),r=e.tryPeek();for(;Ln(r,".")||Hn(r)||qn(r);)if("."===r[1]){e.advance();const o=e.tryPeek();if(!Bn(o))throw new n("Expected symbol",e.peekSourceCodeInfo());t=_r(t,lr([s.String,o[1]],o[2]),r[2]),e.advance(),r=e.tryPeek()}else if(Hn(r)){e.advance();const o=e.parseExpression();if(!Zn(e.tryPeek()))throw new n("Expected closing bracket",e.peekSourceCodeInfo());t=_r(t,o,r[2]),e.advance(),r=e.tryPeek()}else qn(r)&&(t=Tr(e,t),r=e.tryPeek());return t}function _r(e,t,n){return lr([s.NormalExpression,[[s.NormalBuiltinSymbol,rt.get],[e,t]]],n)}function Dr(e,t=0){const r=e.tryPeek();let o;if(Bn(r))switch(r[1]){case"let":return jr(e,r);case"if":case"unless":o=function(e,t){const n="unless"===t[1];e.advance();const r=e.parseExpression();Dn(e.tryPeek(),"then"),e.advance();const o=Sr(e,["else","end"]);let i;return _n(e.tryPeek(),"else")&&(e.advance(),i=Sr(e,["end"])),e.advance(),lr(n?[s.SpecialExpression,[Yt.unless,[r,o,i]]]:[s.SpecialExpression,[Yt.if,[r,o,i]]],t[2])}(e,r);break;case"cond":o=function(e,t){e.advance();const n=[];for(;!e.isAtEnd()&&!_n(e.tryPeek(),"end");){Dn(e.tryPeek(),"case"),e.advance();const t=e.parseExpression();Dn(e.tryPeek(),"then"),e.advance();const r=Sr(e,["case","end"]);if(n.push([t,r]),_n(e.tryPeek(),"end"))break}return Dn(e.tryPeek()),e.advance(),lr([s.SpecialExpression,[Yt.cond,n]],t[2])}(e,r);break;case"match":o=function(e,t){e.advance();const n=e.parseExpression(),r=[];for(;!e.isAtEnd()&&!_n(e.tryPeek(),"end");){Dn(e.tryPeek(),"case"),e.advance();const t=$r(e,{allowLiteralPatterns:!0});let n;_n(e.tryPeek(),"when")&&(e.advance(),n=e.parseExpression()),Dn(e.tryPeek(),"then"),e.advance();const o=Sr(e,["case","end"]);if(r.push([t,o,n]),_n(e.tryPeek(),"end"))break}return Dn(e.tryPeek(),"end"),e.advance(),lr([s.SpecialExpression,[Yt.match,n,r]],t[2])}(e,r);break;case"for":case"doseq":o=function(e,t){const r="doseq"===t[1];e.advance(),Yn(e.tryPeek()),e.advance();const o=[];for(;!e.isAtEnd()&&!Gn(e.tryPeek());){const t=Cr(e),r=o.flatMap(e=>Object.keys(gt(e[0][1][0]))),i=gt(t[0][1][0]);if(Object.keys(i).some(e=>r.includes(e)))throw new n("Duplicate binding",t[0][2]);o.push(t),Ln(e.tryPeek(),",")&&e.advance()}Xn(e.tryPeek()),e.advance(),Vn(e.tryPeek(),"->"),e.advance();const i=e.parseExpression();return lr(r?[s.SpecialExpression,[Yt.doseq,o,i]]:[s.SpecialExpression,[Yt.for,o,i]],t[2])}(e,r);break;case"loop":o=function(e,t){e.advance(),Yn(e.tryPeek()),e.advance();const r=[];let o=e.tryPeek();for(;!e.isAtEnd()&&!Gn(o);){const t=$r(e,{requireDefaultValue:!0,noRest:!0}),n=t[1][1];t[1][1]=void 0,r.push(lr([s.Binding,[t,n]],t[2])),Ln(e.tryPeek(),",")&&e.advance(),o=e.tryPeek()}if(0===r.length)throw new n("Expected binding",e.peekSourceCodeInfo());Xn(o),e.advance(),Vn(e.tryPeek(),"->"),e.advance();const i=e.parseExpression();return lr([s.SpecialExpression,[Yt.loop,r,i]],t[2])}(e,r);break;case"try":o=function(e,t){e.advance();const n=Sr(e,["catch"]);let r;e.advance(),qn(e.tryPeek())&&(e.advance(),r=Nr(e),Xn(e.tryPeek()),e.advance());const o=Sr(e,["end"]);return e.advance(),lr([s.SpecialExpression,[Yt.try,n,r,o]],t[2])}(e,r)}else _n(r,"do")&&(o=kr(e)[0]);o||=Rr(e);let i=e.tryPeek();for(;!mr(e);){if(or(i)){const n=i[1],r=wr(n,i[2]);if(r<=t&&(12!==r||12!==t))break;const a=lr(Yt[n]?[s.SpecialBuiltinSymbol,Yt[n]]:[s.NormalBuiltinSymbol,rt[n]],i[2]);e.advance();o=vr(i,a,o,Dr(e,r),i[2])}else if(Bn(i)){if(!yn(i[1]))break;const r=3;if(r<=t)break;const a=Nr(e),s=Dr(e,r);if(Nt(a))throw new n("Special expressions are not allowed in binary functional operators",a[2]);o=gr(a,[o,s],i[2])}else{if("?"!==i?.[1])break;{if(1<=t)break;e.advance();const r=Dr(e);if(!Ln(e.tryPeek(),":"))throw new n("Expected :",e.peekSourceCodeInfo());e.advance();const i=Dr(e);o=lr([s.SpecialExpression,[Yt.if,[o,r,i]]],o[2])}}i=e.tryPeek()}return o}function zr(e){e.tokens.forEach(e=>{if("Error"===e[0])throw new n(e[3],e[2])});const t=[],r=function(e){const t=new br(e);return t.parseExpression=(e=0)=>Dr(t,e),t}(e);for(;!r.isAtEnd();)if(t.push(Dr(r,0)),Ln(r.tryPeek(),";"))r.advance();else if(!r.isAtEnd())throw new n("Expected ;",r.peekSourceCodeInfo());return t}class Lr{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 ${y(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 Lr(this.astCacheSize);const t=e.initialCache??{};for(const e of Object.keys(t))this.astCache.set(e,t[e])}else this.astCache=null;const t=e.modules??[];this.modules=new Map(t.map(e=>[e.name,e]))}getRuntimeInfo(){return{astCacheSize:this.astCacheSize,astCache:this.astCache,debug:this.debug}}async={run:async(e,t={})=>{if(cr(e))return this.runBundle(e,t);const n=this.generateAst(e,t);return this.evaluate(n,t)},apply:async(e,t,n={})=>this.apply(e,t,n)};run(e,t={}){if(cr(e))return this.runBundle(e,t);const n=this.generateAst(e,t),r=this.evaluate(n,t);if(r instanceof Promise)throw new TypeError("Unexpected async result in synchronous run(). Use lits.async.run() for async operations.");return r}runBundle(e,t={}){const n=fn(t,this.modules,t.pure),r=n.pure;n.pure=!0;for(const[r,o]of e.fileModules){const e=on(this.generateAst(o,t),n.create({}));n.registerValueModule(r,e)}n.pure=r;const o=on(this.generateAst(e.program,t),n);if(o instanceof Promise)throw new TypeError("Unexpected async result in synchronous runBundle(). Use lits.async.run() for async operations.");return o}getUndefinedSymbols(e,t={}){const n="string"==typeof e?this.generateAst(e,t):e,r=fn(t,this.modules);return Zt(n,r,Xt,an)}tokenize(e,t={}){const n=function(e,t,n){let r=0;const o={tokens:[],filePath:n,hasDebugData:t};for(;r<e.length;){const i=t?Fn(e,r,n):void 0,a=Tn(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?ar(n,{removeWhiteSpace:!1}):n}parse(e){const t={body:[],hasDebugData:(e=ar(e,{removeWhiteSpace:!0})).hasDebugData};return t.body=zr(e),t}evaluate(e,t){return on(e,fn(t,this.modules,t.pure))}transformSymbols(e,t){return function(e,t){return{...e,tokens:e.tokens.map(e=>Bn(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.bindings={...n.bindings,...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 ur(e,t,this,n)}}export{Vr as Lits,x as asLitsFunction,A as asNativeJsFunction,N as asUserDefinedFunction,E as assertLitsFunction,I as assertNativeJsFunction,P as assertUserDefinedFunction,j as isBuiltinFunction,Be as isGrid,cr as isLitsBundle,a as isLitsError,S as isLitsFunction,Re as isMatrix,$ as isNativeJsFunction,k as isUserDefinedFunction,Ue as isVector,Ht as normalExpressionKeys,Kt as specialExpressionKeys};
2
2
  //# sourceMappingURL=index.esm.js.map