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