@mojir/lits 2.3.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -22
- package/dist/bundler.esm.js +2 -0
- package/dist/bundler.esm.js.map +1 -0
- package/dist/bundler.js +2 -0
- package/dist/bundler.js.map +1 -0
- package/dist/cli/cli/src/js-interop/Cli/Fs/index.d.ts +2 -2
- package/dist/cli/cli/src/js-interop/Cli/Proc/index.d.ts +2 -2
- package/dist/cli/cli/src/js-interop/Cli/index.d.ts +2 -3
- package/dist/cli/cli.js +2642 -2313
- package/dist/cli/reference/api.d.ts +3 -3
- package/dist/cli/reference/examples.d.ts +2 -2
- package/dist/cli/reference/index.d.ts +0 -1
- package/dist/cli/src/Lits/Lits.d.ts +6 -7
- package/dist/cli/src/builtin/index.d.ts +1 -1
- package/dist/cli/src/builtin/specialExpressionTypes.d.ts +15 -15
- package/dist/cli/src/builtin/specialExpressions/import.d.ts +6 -0
- package/dist/cli/src/bundler/index.d.ts +9 -0
- package/dist/cli/src/bundler/interface.d.ts +15 -0
- package/dist/cli/src/bundler.d.ts +3 -0
- package/dist/cli/src/evaluator/ContextStack.d.ts +10 -4
- package/dist/cli/src/index.d.ts +2 -0
- package/dist/cli/src/js-interop/Cli/Fs/index.d.ts +2 -2
- package/dist/cli/src/js-interop/Cli/Proc/index.d.ts +2 -2
- package/dist/cli/src/js-interop/Cli/index.d.ts +2 -3
- package/dist/cli/src/parser/ParserContext.d.ts +1 -1
- package/dist/cli/src/parser/getPrecedence.d.ts +3 -0
- package/dist/cli/src/parser/index.d.ts +2 -0
- package/dist/cli/src/parser/subParsers/parseExpression.d.ts +5 -0
- package/dist/cli/src/parser/types.d.ts +0 -3
- package/dist/cli/src/tokenizer/reservedNames.d.ts +0 -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/assert.esm.js +1 -1
- package/dist/modules/assert.esm.js.map +1 -1
- package/dist/modules/assert.js +1 -1
- package/dist/modules/assert.js.map +1 -1
- package/dist/modules/bitwise.esm.js +1 -1
- package/dist/modules/bitwise.esm.js.map +1 -1
- package/dist/modules/bitwise.js +1 -1
- package/dist/modules/bitwise.js.map +1 -1
- package/dist/modules/cli/src/js-interop/Cli/Fs/index.d.ts +2 -2
- package/dist/modules/cli/src/js-interop/Cli/Proc/index.d.ts +2 -2
- package/dist/modules/cli/src/js-interop/Cli/index.d.ts +2 -3
- package/dist/modules/collection.esm.js +1 -1
- package/dist/modules/collection.esm.js.map +1 -1
- package/dist/modules/collection.js +1 -1
- package/dist/modules/collection.js.map +1 -1
- package/dist/modules/functional.esm.js +1 -1
- package/dist/modules/functional.esm.js.map +1 -1
- package/dist/modules/functional.js +1 -1
- package/dist/modules/functional.js.map +1 -1
- package/dist/modules/grid.esm.js +1 -1
- package/dist/modules/grid.esm.js.map +1 -1
- package/dist/modules/grid.js +1 -1
- package/dist/modules/grid.js.map +1 -1
- package/dist/modules/linear-algebra.esm.js +1 -1
- package/dist/modules/linear-algebra.esm.js.map +1 -1
- package/dist/modules/linear-algebra.js +1 -1
- package/dist/modules/linear-algebra.js.map +1 -1
- package/dist/modules/math.esm.js +1 -1
- package/dist/modules/math.esm.js.map +1 -1
- package/dist/modules/math.js +1 -1
- package/dist/modules/math.js.map +1 -1
- package/dist/modules/matrix.esm.js +1 -1
- package/dist/modules/matrix.esm.js.map +1 -1
- package/dist/modules/matrix.js +1 -1
- package/dist/modules/matrix.js.map +1 -1
- package/dist/modules/number-theory.esm.js +1 -1
- package/dist/modules/number-theory.esm.js.map +1 -1
- package/dist/modules/number-theory.js +1 -1
- package/dist/modules/number-theory.js.map +1 -1
- package/dist/modules/random.esm.js +1 -1
- package/dist/modules/random.esm.js.map +1 -1
- package/dist/modules/random.js +1 -1
- package/dist/modules/random.js.map +1 -1
- package/dist/modules/reference/api.d.ts +3 -3
- package/dist/modules/reference/index.d.ts +0 -1
- package/dist/modules/sequence.esm.js +1 -1
- package/dist/modules/sequence.esm.js.map +1 -1
- package/dist/modules/sequence.js +1 -1
- package/dist/modules/sequence.js.map +1 -1
- package/dist/modules/src/Lits/Lits.d.ts +6 -7
- package/dist/modules/src/builtin/index.d.ts +1 -1
- package/dist/modules/src/builtin/specialExpressionTypes.d.ts +15 -15
- package/dist/modules/src/builtin/specialExpressions/import.d.ts +6 -0
- package/dist/modules/src/bundler/index.d.ts +9 -0
- package/dist/modules/src/bundler/interface.d.ts +15 -0
- package/dist/modules/src/bundler.d.ts +3 -0
- package/dist/modules/src/evaluator/ContextStack.d.ts +10 -4
- package/dist/modules/src/index.d.ts +2 -0
- package/dist/modules/src/parser/ParserContext.d.ts +1 -1
- package/dist/modules/src/parser/getPrecedence.d.ts +3 -0
- package/dist/modules/src/parser/index.d.ts +2 -0
- package/dist/modules/src/parser/subParsers/parseExpression.d.ts +5 -0
- package/dist/modules/src/parser/types.d.ts +0 -3
- package/dist/modules/src/tokenizer/reservedNames.d.ts +0 -1
- package/dist/modules/string.esm.js +1 -1
- package/dist/modules/string.esm.js.map +1 -1
- package/dist/modules/string.js +1 -1
- package/dist/modules/string.js.map +1 -1
- package/dist/modules/vector.esm.js +1 -1
- package/dist/modules/vector.esm.js.map +1 -1
- package/dist/modules/vector.js +1 -1
- package/dist/modules/vector.js.map +1 -1
- package/dist/reference/api.d.ts +3 -3
- package/dist/reference/index.d.ts +0 -1
- package/dist/src/Lits/Lits.d.ts +6 -7
- package/dist/src/builtin/index.d.ts +1 -1
- package/dist/src/builtin/specialExpressionTypes.d.ts +15 -15
- package/dist/src/builtin/specialExpressions/import.d.ts +6 -0
- package/dist/src/bundler/index.d.ts +9 -0
- package/dist/src/bundler/interface.d.ts +15 -0
- package/dist/src/bundler.d.ts +3 -0
- package/dist/src/evaluator/ContextStack.d.ts +10 -4
- package/dist/src/index.d.ts +2 -0
- package/dist/src/parser/ParserContext.d.ts +1 -1
- package/dist/src/parser/getPrecedence.d.ts +3 -0
- package/dist/src/parser/index.d.ts +2 -0
- package/dist/src/parser/subParsers/parseExpression.d.ts +5 -0
- package/dist/src/parser/types.d.ts +0 -3
- package/dist/src/tokenizer/reservedNames.d.ts +0 -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 -1
- package/dist/cli/cli/src/js-interop/utils.d.ts +0 -2
- package/dist/cli/src/builtin/specialExpressions/def.d.ts +0 -6
- package/dist/cli/src/js-interop/utils.d.ts +0 -2
- package/dist/cli/src/parser/subParsers/getPrecedence.d.ts +0 -3
- package/dist/modules/cli/src/js-interop/utils.d.ts +0 -2
- package/dist/modules/src/builtin/specialExpressions/def.d.ts +0 -6
- package/dist/modules/src/parser/subParsers/getPrecedence.d.ts +0 -3
- package/dist/src/builtin/specialExpressions/def.d.ts +0 -6
- package/dist/src/parser/subParsers/getPrecedence.d.ts +0 -3
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 F(e){return j(e)||O(e)}function M(e,t){if(!F(e))throw y("string, array or object",e,t)}function T(e){return null!==e&&"object"==typeof e&&!!e[l]}function _(e,t){if(!function(e){return T(e)||"string"==typeof e}(e))throw y("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||!!F(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 J(e,t,n={}){if(!V(e,n))throw y(""+(n.nonEmpty?"non empty string":n.char?"character":"string"),e,t)}function W(e,t,n={}){return J(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!!F(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 Z(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(!Z(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=W(r[o],n);if(!Z(e[i],t[i],n))return!1}return!0}return!1}function H(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(M(e,n),R(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=B(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?J(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=>J(e,t)),e.join(""))):l},arity:{min:2}},reduce:{evaluate:([e,t,n],r,o,{executeFunction:i})=>(M(e,r),R(t,r),I(n,r),"string"==typeof e?(J(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=H(e[2]);if(G(r,t),null===n)return o;M(n,t);const i=function(e,t){if(O(e)){if("string"==typeof t&&K(e,t))return H(e[t])}else if(N(t,{nonNegative:!0,integer:!0})&&t>=0&&t<e.length)return H(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:z(1)},"contains?":{evaluate:([e,t],n)=>null!==e&&(M(e,n),V(e)?(J(t,n),e.includes(t)):j(e)?(I(t,n),!!e.find(e=>Z(A(e),t,n))):(J(t,n),t in e)),arity:z(2)},assoc:{evaluate:([e,t,n],r)=>(M(e,r),G(t,r),I(n,r),function(e,t,n,r){if(M(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 J(n,r,{char:!0}),`${e.slice(0,t)}${n}${e.slice(t+1)}`;const o=[...e];return o[t]=n,o}J(t,r);const o={...e};return o[t]=n,o}(e,t,n,r)),arity:z(3)},"++":{evaluate:(e,t)=>(N(e[0])||M(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),R(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}),R(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),R(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=H(e[2]);if(P(r,t,{integer:!0}),null===n)return o;if(C(n,t),r>=0&&r<n.length){return H(n[r])}return o},arity:{min:2,max:3}},first:{evaluate:([e],t)=>{if(null===e)return null;C(e,t);return H(e[0])},arity:z(1)},last:{evaluate:([e],t)=>{if(null===e)return null;C(e,t);return H(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){J(t,n);const r=e.indexOf(t);return-1!==r?r:null}{const r=e.findIndex(e=>Z(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),H(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(R(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?H(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)):(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 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)=>{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 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),R(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),R(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 Fe(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 Me(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:Me(0,(e,t)=>e+t),arity:{}},"*":{evaluate:Me(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:Fe((e,t)=>Math.trunc(e/t)),arity:z(2)},mod:{evaluate:Fe((e,t)=>e-t*Math.floor(e/t)),arity:z(2)},"%":{evaluate:Fe((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:Fe((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 _e([e,...t],n){const r=A(e,n);for(const e of t)if(!Z(r,A(e,n),n))return!1;return!0}const Be={"==":{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=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)=>{J(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),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)=>(J(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}},import:{evaluate:([e],t,r)=>{J(e,t);const o=e.indexOf(".");if(-1!==o){const i=e.substring(0,o),s=e.substring(o+1),a=r.getModule(i);if(!a)throw new n(`Unknown module: '${i}'`,t);const u=a.functions[s];if(!u)throw new n(`Function '${s}' not found in module '${i}'`,t);return{[c]:!0,sourceCodeInfo:t,functionType:"Module",moduleName:i,functionName:s,arity:u.arity}}const i=e,s=r.getModule(i);if(!s)throw new n(`Unknown module: '${i}'`,t);const a={};for(const[e,n]of Object.entries(s.functions))a[e]={[c]:!0,sourceCodeInfo:t,functionType:"Module",moduleName:i,functionName:e,arity:n.arity};return a},arity:z(1)}},Re={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),J(t,n),K(e,t)?[t,e[t]]:null),arity:z(2)},dissoc:{evaluate:([e,t],n)=>{U(e,n),J(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),R(i,t),ce(s,(e,o)=>{U(o,t);return se(ce(Object.entries(o),(e,o)=>{const s=W(o[0],t),a=H(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[W(e[i],n)]=H(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]=H(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])=>F(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||(M(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&&(M(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)=>{J(e,r);const o=e||"(?:)",i="string"==typeof t?t:"";try{new RegExp(o,i)}catch(e){throw new n(`Invalid regular expression: ${o} ${i}`,r)}return{[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)=>{J(e,r),_(t,r),J(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)=>{J(e,r),_(t,r),J(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)=>{J(e,t);const r=Number(e);if(Number.isNaN(r))throw new n(`Could not convert '${e}' to a number.`,t);return r},arity:z(1)},"lower-case":{evaluate:([e],t)=>(J(e,t),e.toLowerCase()),arity:z(1)},"upper-case":{evaluate:([e],t)=>(J(e,t),e.toUpperCase()),arity:z(1)},trim:{evaluate:([e],t)=>(J(e,t),e.trim()),arity:z(1)},join:{evaluate:([e,t],n)=>(re(e,n),e.forEach(e=>G(e,n)),J(t,n),e.join(t)),arity:z(2)},split:{evaluate:([e,t,n],r)=>{J(e,r),_(t,r),void 0!==n&&P(n,r,{integer:!0,nonNegative:!0});const o="string"==typeof t?t:new RegExp(t.s,t.f);return e.split(o,n)},arity:{min:2,max:3}},"blank?":{evaluate:([e],t)=>null===e||(J(e,t),Le.test(e)),arity:z(1)}},Je={"|>":{evaluate:([e,t],n,r,{executeFunction:o})=>(R(t,n),o(t,[e],r,n)),arity:z(2)},apply:{evaluate:([e,...t],n,r,{executeFunction:o})=>{R(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])=>H(e),arity:z(1)},comp:{evaluate:(e,t)=>{return e.forEach(e=>R(e,t)),{[c]:!0,sourceCodeInfo:t,functionType:"Comp",params:e,arity:e.length>0?(n=e.at(-1),"number"==typeof n||F(n)?z(1):n.arity):{min:1,max:1}};var n},arity:{}},constantly:{evaluate:([e],t)=>({[c]:!0,sourceCodeInfo:t,functionType:"Constantly",value:H(e),arity:{}}),arity:z(1)}};function We(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),R(t,n),!b(t))return"";if("Builtin"===t.functionType){const n=e[t.name];return n?We(n):""}return"UserDefined"===t.functionType||"NativeJsFunction"===t.functionType?t.docString:""},arity:z(1)},arity:{evaluate:([e],t)=>(R(e,t),b(e)?e.arity:z(1)),arity:z(1)}}}({}),...Be,...Re,...De,...ze,...Ve,...Je,...Ye};Object.entries(Ge).forEach(([e,t])=>{t.name=e});const Ke={...Ge},Xe={},Ze=[];Object.entries(Ke).forEach(([e,t],n)=>{Xe[e]=n,Ze.push(t)});const He={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)};const ct=11,lt=12,ft=13,dt=14;function ht(e,t){if(e[0]===ft)Object.values(e[1][0]).forEach(e=>{e[1][1]&&t(e[1][1]),ht(e,t)});else if(e[0]===dt)for(let n=0;n<e[1][0].length;n+=1){const r=e[1][0][n]??null;null!==r&&(r[1][1]&&t(r[1][1]),ht(r,t))}}function pt(e,t,n){const r=e[2],o={};return se(yt(e,t,n,r,o),()=>o)}function yt(e,t,r,o,i){if(e[0]===ft){!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]===lt)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),yt(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]===dt){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]===lt){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),yt(e,n,r,o,i)})}),()=>{if(null!==n){const r=t.slice(n),o=e[1][0][n];i[o[1][0]]=r}})}e[0]===lt?i[e[1][0]]=A(t):i[e[1][0][1]]=A(t)}function gt(e){const t={};return mt(e,t),t}function mt(e,t){if(null!==e)if(e[0]===dt)for(const n of e[1][0])mt(n,t);else if(e[0]===ft)for(const n of Object.values(e[1][0]))mt(n,t);else if(e[0]===lt){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 vt={arity:{},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(pt(o,e,e=>n(e,t)),n=>(t.exportValues(n,o[2]),e)))},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const i=e[1][1],s=i[1][0],a=i[1][1],u=n([a],t,r,o);return ht(s,e=>{ee(u,n([e],t,r,o))}),t.addValues(gt(s),s[2]),u}},bt={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)},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(gt(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]!==lt&&void 0===e[1][1]).length,l={min:u>0?u:void 0,max:a[0].some(e=>e[0]===lt)?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,gt(e)),ht(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(pt(o,e,e=>n(e,t)),n=>(t.addValues(n,o[2]),e)))},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>{const i=e[1][1],s=i[1][0],a=i[1][1],u=n([a],t,r,o);return ht(s,e=>{ee(u,n([e],t,r,o))}),t.addValues(gt(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(pt(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(pt(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=pt(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(pt(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=gt(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 M(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(pt(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(pt(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,gt(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,gt(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=W(t,e[2],{nonEmpty:!0});throw new r(n,e[2])}),evaluateAsNormalExpression:(e,t)=>{const n=W(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))}},Ft={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)},Mt={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=>(J(n,a[2]),o[n]=t,e(s+2))))}}(0)},evaluateAsNormalExpression:(e,t)=>{const n={};for(let r=0;r<e.length;r+=2){const o=e[r],i=e[r+1];J(o,t),n[o]=i??null}return n},getUndefinedSymbols:(e,t,{getUndefinedSymbols:n,builtin:r,evaluateNode:o})=>n(e[1][1],t,r,o)},Tt={"??":0,"&&":1,"||":2,array:3,cond:4,"0_def":5,"defined?":6,block:7,doseq:8,"0_lambda":9,for:10,if:11,let:12,loop:13,object:14,recur:15,switch:16,throw:17,try:18,unless:19},_t=[jt,He,It,Ft,Qe,vt,ut,bt,At,wt,$t,xt,Et,kt,Mt,Ct,et,Ot,Ut,St],Bt={normalExpressions:Ke,specialExpressions:_t,allNormalExpressions:Ze},Rt=Object.keys(Ke),Dt=Object.keys(Tt),zt=(e,t,n,r)=>{const o=Array.isArray(e)?e:[[i.SpecialExpression,[Tt.block,e.body]]],s=new Set;for(const e of o)Lt(e,t,n,r)?.forEach(e=>s.add(e));return s};function Lt(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;Lt(e,t,r,o)?.forEach(e=>i.add(e))}for(const e of n[1][1])Lt(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:zt,builtin:r,evaluateNode:o})}case i.Spread:return Lt(e[1],t,r,o);default:throw new n(`Unhandled node type: ${s}`,e[2])}}const Vt=(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:Vt,"-PHI":-Vt,"φ":Vt,"-φ":-Vt,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},Wt={true:!0,false:!1,null:null,do:null,else:null,case:null,each:null,in:null,when:null,while:null,catch:null,function:null,export:null,as:null,then:null,end:null,_:null,...Jt};const qt={NativeJsFunction:(e,t,r)=>{try{const o=e.nativeFn.fn(...t);return o instanceof Promise?o.then(e=>H(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)}):H(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]!==lt).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=H(r[t]);return se(pt(c[t],e,e=>s(e,f.create(d))),e=>{Object.entries(e).forEach(([e,t])=>{d[e]={value:t}})})})}else h.push(H(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(pt(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]===lt),n=void 0!==e?se(pt(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(B(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(B(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(B(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(B(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?H(e.params[n]):t);return o(B(e.function,n),i,r,n)},Builtin:(e,t,n,r,{executeFunction:o})=>g(Ze[e.normalBuiltinSymbolType],n).evaluate(t,n,r,{executeFunction:o}),SpecialBuiltin:(e,t,r,o,{executeFunction:i})=>{const s=g(_t[e.specialBuiltinSymbolType],r);if(s.evaluateAsNormalExpression)return s.evaluateAsNormalExpression(t,r,o,{executeFunction:i});throw new n(`Special builtin function ${e.specialBuiltinSymbolType} is not supported as normal expression.`,r)},Module:(e,t,r,o,{executeFunction:i})=>{const s=o.getModule(e.moduleName);if(!s)throw new n(`Module '${e.moduleName}' not found.`,r);const a=s.functions[e.functionName];if(!a)throw new n(`Function '${e.functionName}' not found in module '${e.moduleName}'.`,r);return D(a.arity,t.length,r),a.evaluate(t,r,o,{executeFunction:i})}};function Yt(e,t){return ce(e.body,(e,n)=>Gt(n,t),null)}function Gt(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(Wt[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(Gt(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(Gt(e,t),e=>{r.push(e)}):void o.push(s));return se(s,()=>({params:r,placeholders:o}))}(e[1][1],t),({params:n,placeholders:i})=>{if(st(e)){const s=e[1][0];if(i.length>0){return se(Gt(s,t),e=>({[c]:!0,function:B(e,r),functionType:"Partial",params:n,placeholders:i,sourceCodeInfo:r,arity:z(i.length)}))}if(ot(s)){const r=s[1];return Bt.allNormalExpressions[r].evaluate(n,e[2],t,{executeFunction:Kt})}{const i=t.getValue(s[1]);if(void 0!==i)return Kt(B(i,r),n,t,r);throw new o(s[1],e[2])}}return se(Gt(e[1][0],t),e=>{const o=B(e,r);if(i.length>0){return{[c]:!0,function:o,functionType:"Partial",params:n,placeholders:i,sourceCodeInfo:r,arity:z(i.length)}}return Kt(o,n,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(Bt.specialExpressions[n],e[2]);return(0,r.evaluate)(e,t,{evaluateNode:Gt,builtin:Bt,getUndefinedSymbols:zt})}(e,t),e=>Pe(e));default:throw new n(`${a(e[0])}-node cannot be evaluated`,e[2])}}function Kt(e,t,r,o){if(b(e))return qt[e.functionType](e,t,o,r,{evaluateNode:Gt,executeFunction:Kt});if(Array.isArray(e))return function(e,t,r){if(1!==t.length)throw new n("Array as function requires one non negative integer parameter.",r);const o=t[0];return P(o,r,{integer:!0,nonNegative:!0}),H(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 J(o,r),H(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=H(t[0]);if(O(o))return H(o[e]);if(N(o,{integer:!0}))return H(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),H(o[e])}(e,t,o);throw new n("Unexpected function type",o)}class Xt{contexts;globalContext;values;nativeJsFunctions;modules;constructor({contexts:e,values:t,nativeJsFunctions:n,modules:r}){this.globalContext=g(e[0]),this.contexts=e,this.values=t,this.nativeJsFunctions=n,this.modules=r??new Map}getModule(e){return this.modules.get(e)}create(e){const t=this.globalContext,n=new Xt({contexts:[e,...this.contexts],values:this.values,nativeJsFunctions:this.nativeJsFunctions,modules:this.modules});return n.globalContext=t,n}new(e){return new Xt({contexts:[{},e],modules:this.modules})}exportValues(e,t){for(const[r,o]of Object.entries(e)){if(this.globalContext[r])throw new n(`Cannot redefine exported value "${r}"`,t);const e=Zt(r);if(e)throw new n(`Cannot shadow ${e}`,t);this.globalContext[r]={value:o}}this.contexts[0]!==this.globalContext&&this.addValues(e,t)}addValues(e,t){const r=this.contexts[0];for(const[o,i]of Object.entries(e)){if(r[o])throw new n(`Cannot redefine value "${o}"`,t);const e=Zt(o);if(e)throw new n(`Cannot shadow ${e}`,t);r[o]={value:H(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:H(n)};const r=this.nativeJsFunctions?.[t];return r?{value:r}:null}evaluateSymbol(e){if(it(e)){const t=e[1];switch(t){case Tt["&&"]:case Tt["||"]:case Tt.array:case Tt.object:case Tt["defined?"]:case Tt.recur:case Tt.throw:case Tt["??"]:{const n=g(Bt.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=Ze[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 Dt.includes(e)?`special expression "${e}"`:Rt.includes(e)?`builtin function "${e}"`:"self"===e?`builtin value "${e}"`:null}function Ht(e={},t){const r=e.globalContext??{},o=e.contexts?[r,...e.contexts]:[r],i=new Xt({contexts:o,values:e.values,modules:t,nativeJsFunctions:e.jsFunctions&&Object.entries(e.jsFunctions).reduce((e,[t,r])=>{const o=t.split("."),i=o.pop();if(/^[A-Z]/.test(i))throw new n(`Invalid identifier "${t}" in jsFunctions, function name must not start with an uppercase letter`,void 0);let s=e;for(const e of o){if(0===e.length)throw new n(`Invalid empty identifier "${t}" in jsFunctions`,void 0);if(!/^[A-Z]/.test(e))throw new n(`Invalid identifier "${t}" in jsFunctions, module name must start with an uppercase letter`,void 0);s[e]||(s[e]={}),s=s[e]}!function(e){if(!function(e){return"object"==typeof e&&null!==e&&"fn"in e&&"function"==typeof e.fn}(e))throw new TypeError("Expected a NativeJsFunction")}(r);const a={functionType:"NativeJsFunction",nativeFn:r,name:i,[c]:!0,arity:r.arity??{},docString:r.docString??""};return s===e&&function(e){const t=Zt(e);if(t)throw new n(`Cannot shadow ${t}`,void 0)}(i),s[i]=a,e},{})});return e.globalModuleScope?i:i.create({})}const Qt=["^","*","/","%","+","-","<<",">>",">>>","++","<","<=","≤",">",">=","≥","==","!=","!=","&","xor","|","&&","||","??","|>"],en=[...Qt,"?",":","->","...",".",",","=",":",";"],tn=new Set(["comment","cond","def","defined?","block","doseq","if","let","loop","recur","throw","try","unless","while"]);function nn(e){return!tn.has(e)}const rn=new Set(Qt);function on(e){return rn.has(e)}const sn=new Set(en);function an(e){return sn.has(e)}const un=["(",")","[","]","{","}","'",'"',"`",",",".",";"," ","\n","\r","\t"],cn=["0","1","2","3","4","5","6","7","8","9",...un],ln=new Set(un),fn=new Set(cn),dn=/\s/,hn=[0],pn=(e,t)=>{if('"'!==e[t])return hn;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 yn(e,t,n,r){return t===n.slice(r,r+t.length)?[t.length,[e,t]]:hn}const gn=/\d/,mn=/[0-7]/,vn=/[0-9a-f]/i,bn=/[01]/,wn=/[\s)\]}(,;]/,xn=(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(!fn.has(n)){const r=t;let o=e[t+=1];for(;o&&!ln.has(o);)n+=o,o=e[t+=1];return n.endsWith(":")?[t-r-1,["Symbol",n.slice(0,-1)]]:[t-r,["Symbol",n]]}return hn},Sn=[(e,t)=>{let n=e[t];if(!n||!dn.test(n))return hn;let r=n;for(n=e[t+=1];n&&dn.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 hn},(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 hn},(e,t)=>{const n=xn(e,t);if(0===n[0]||!n[1])return hn;let r=n[1][1];r=r.startsWith("'")?r.slice(1,r.length-1):r;return void 0===Wt[r]?hn:[n[0],["ReservedSymbol",r]]},(e,t)=>yn("LParen","(",e,t),(e,t)=>yn("RParen",")",e,t),(e,t)=>yn("LBracket","[",e,t),(e,t)=>yn("RBracket","]",e,t),(e,t)=>yn("LBrace","{",e,t),(e,t)=>yn("RBrace","}",e,t),(e,t)=>{if('"'!==e[t]||'"'!==e[t+1]||'"'!==e[t+2])return hn;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}`]]},pn,(e,t)=>{if("#"!==e[t])return hn;const[n,r]=pn(e,t+1);if(!r)return hn;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 hn;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 hn;let o;for(o=t+2;o<e.length;o+=1){const t=e[o];if("binary"===r&&!bn.test(t))break;if("octal"===r&&!mn.test(t))break;if("hex"===r&&!vn.test(t))break}const i=o-t;if(i<=2)return hn;const s=e[o];return s&&!wn.test(s)?hn:[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(!gn.test(e[n-1])||!gn.test(e[n+1]))return n===i?hn:[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 hn;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 hn;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(!gn.test(r))break}if((r||o)&&n===i)return hn;const u=n-t;if(0===u)return hn;const c=e[n];return c&&":"!==c&&!wn.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&&an(n))return[3,["Operator",n]];const r=e.slice(t,t+2);if(t+1<e.length&&an(r))return[2,["Operator",r]];const o=e[t]??"";return an(o)?[1,["Operator",o]]:hn},xn];function En(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 kn(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 hn})(e,t);if(t+=r,r>0)return[t-n,o]}for(const r of Sn){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 Nn(e,t){return"Symbol"===e?.[0]&&(!t||e[1]===t)}function Pn(e,t){return function(e,t){Nn(e,t)||Wn("Symbol",void 0,e)}(e,t),e}function $n(e,t){return"ReservedSymbol"===e?.[0]&&(!t||e[1]===t)}function An(e,t){$n(e,t)||Wn("ReservedSymbol",t,e)}function In(e,t){return An(e,t),e}function jn(e,t){return"Operator"===e?.[0]&&(!t||e[1]===t)}function Cn(e,t){jn(e,t)||Wn("Operator",t,e)}function On(e){return"LParen"===e?.[0]}function Un(e){On(e)||Wn("LParen",void 0,e)}function Fn(e){return"RParen"===e?.[0]}function Mn(e){Fn(e)||Wn("RParen",void 0,e)}function Tn(e){return"LBracket"===e?.[0]}function _n(e){return function(e){Tn(e)||Wn("LBracket",void 0,e)}(e),e}function Bn(e){return"RBracket"===e?.[0]}function Rn(e){Bn(e)||Wn("RBracket",void 0,e)}function Dn(e){return"LBrace"===e?.[0]}function zn(e){return function(e){Dn(e)||Wn("LBrace",void 0,e)}(e),e}function Ln(e){return"RBrace"===e?.[0]}function Vn(e){return"string"===e?.[0]}function Jn(e){return"Operator"===e?.[0]&&on(e[1])}function Wn(e,t,r){const o=r?`${r[0]} '${r[1]}'`:"end of input";throw new n(`Unexpected token: ${o}, expected ${e}${t?` '${t}'`:""}`,r?.[2])}function qn(e,{removeWhiteSpace:t}){const n=e.tokens.filter(e=>!(function(e){return"SingleLineComment"===e?.[0]}(e)||function(e){return"MultiLineComment"===e?.[0]}(e)||function(e){return"Shebang"===e?.[0]}(e)||t&&function(e){return"Whitespace"===e?.[0]}(e)));return{...e,tokens:n}}const Yn=new Set([...Rt,...Dt,...Object.keys(Wt)]);class Gn{originalProgram;originalPosition;prefixProgram="";suffixProgram="";searchString="";suggestions=[];suggestionIndex=null;constructor(e,t,n,r){this.originalProgram=e,this.originalPosition=t;const o=this.originalProgram.slice(0,this.originalPosition),i=n.tokenize(o).tokens.at(-1);i&&"Error"!==i[0]&&(this.searchString=i[1],this.prefixProgram=this.originalProgram.slice(0,this.originalPosition-this.searchString.length),this.suffixProgram=this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.originalProgram.slice(this.prefixProgram.length+this.searchString.length),this.suggestions=this.generateSuggestions(r))}getNextSuggestion(){return this.getAutoCompleteSuggestionResult(this.getNextSuggestionSymbol())}getPreviousSuggestion(){return this.getAutoCompleteSuggestionResult(this.getPreviousSuggestionSymbol())}getAutoCompleteSuggestionResult(e){return null===e?null:{program:this.prefixProgram+e+this.suffixProgram,position:this.prefixProgram.length+e.length}}getNextSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=0:(this.suggestionIndex+=1,this.suggestionIndex>=this.suggestions.length&&(this.suggestionIndex=0)),this.suggestions[this.suggestionIndex])}getPreviousSuggestionSymbol(){return 0===this.suggestions.length?null:(null===this.suggestionIndex?this.suggestionIndex=this.suggestions.length-1:(this.suggestionIndex-=1,this.suggestionIndex<0&&(this.suggestionIndex=this.suggestions.length-1)),this.suggestions[this.suggestionIndex])}getSuggestions(){return[...this.suggestions]}getSearchString(){return this.searchString}generateSuggestions(e){const t=new Set(["0_def","0_defn","0_lambda"]),n=this.generateWithPredicate(e,e=>!t.has(e)&&e.startsWith(this.searchString));n.forEach(e=>t.add(e));const r=this.generateWithPredicate(e,e=>!t.has(e)&&e.toLowerCase().startsWith(this.searchString.toLowerCase()));r.forEach(e=>t.add(e));const o=this.generateWithPredicate(e,e=>!t.has(e)&&e.includes(this.searchString));o.forEach(e=>t.add(e));const i=this.generateWithPredicate(e,e=>!t.has(e)&&e.includes(this.searchString.toLowerCase()));return i.forEach(e=>t.add(e)),[...n,...r,...o,...i]}generateWithPredicate(e,t){const n=new Set;return Yn.forEach(e=>{t(e)&&n.add(e)}),Object.keys(e.globalContext??{}).filter(t).forEach(e=>n.add(e)),e.contexts?.forEach(e=>{Object.keys(e).filter(t).forEach(e=>n.add(e))}),Object.keys(e.jsFunctions??{}).filter(t).forEach(e=>n.add(e)),Object.keys(e.values??{}).filter(t).forEach(e=>n.add(e)),[...n].sort((e,t)=>e.localeCompare(t))}}class Kn{tokens;position;storedPosition=0;parseExpression;constructor(e){this.tokens=e.tokens,this.position=0}advance(){this.position+=1}tryPeek(){return this.tokens[this.position]}peek(){const e=this.tokens[this.position];if(!e){const e=this.tokens.at(-1),t=e?e[2]:void 0;throw new n("Unexpected end of input",t)}return e}isAtEnd(){return this.position>=this.tokens.length}peekSourceCodeInfo(){const e=this.tryPeek();return e?e[2]:this.tokens.at(-1)?.[2]}storePosition(){return this.storedPosition=this.position}restorePosition(){this.position=this.storedPosition}peekAhead(e){return this.tokens[this.position+e]}getPosition(){return this.position}getTokenAt(e){return this.tokens[e]}}function Xn(e,t){return t&&(e[2]=t),e}function Zn(e,t){return void 0!==Tt[e]&&"fn"!==e&&"def"!==e&&"defn"!==e?Xn([i.SpecialBuiltinSymbol,Tt[e]],t):void 0!==Xe[e]?Xn([i.NormalBuiltinSymbol,Xe[e]],t):Xn([i.UserDefinedSymbol,e],t)}function Hn(e){return e.substring(1,e.length-1).replace(/(\\{2})|(\\')|\\(.)/g,(e,t,n,r)=>t?"\\":n?"'":`\\${r}`)}const Qn=Object.entries(Xe).reduce((e,[t,n])=>(e[n]=t,e),[]),er=Object.entries(Tt).reduce((e,[t,n])=>(e[n]=t,e),[]);function tr(e){return nt(e)?e[1]:ot(e)?Qn[e[1]]:er[e[1]]}function nr(e,t,n){const r=Xn([i.NormalExpression,[e,t]],n);return ot(e)&&D(Ze[e[1]].arity,r[1][1].length,n),r}function rr(e){if(e.isAtEnd())return!0;const t=e.tryPeek();return jn(t)?[";",",",":"].includes(t[1]):!!$n(t)&&["else","when","while","case","catch","let","then","end","do"].includes(t[1])}function or(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 nr(t,[r,o],s);case"&&":case"||":case"??":return Xn([i.SpecialExpression,[Tt[a],[r,o]]],s);default:throw new n(`Unknown binary operator: ${a}`,s)}}function ir(e){const t=e.peek();if(e.advance(),!Nn(t))throw new n(`Expected symbol token, got ${t[0]}`,t[2]);return"'"===t[1][0]?Zn(Hn(t[1]),t[2]):Zn(t[1],t[2])}function sr(e,{requireDefaultValue:t,noRest:r}={}){const o=e.tryPeek();if(Nn(o)){const r=ir(e);if(!nt(r))throw new n("Expected user defined symbol",o[2]);const i=ar(e);if(t&&!i)throw new n("Expected assignment",e.peekSourceCodeInfo());return Xn([ct,[r,i]],o[2])}if(jn(o,"...")){if(r)throw new n("Rest element not allowed",o[2]);e.advance();const t=rt(ir(e));if(jn(e.tryPeek(),"="))throw new n("Rest argument can not have default value",e.peekSourceCodeInfo());return Xn([lt,[t[1],void 0]],o[2])}if(Tn(o)){e.advance();const r=[];let i=e.peek(),s=!1;for(;!Bn(i);){if(s)throw new n("Rest argument must be last",i[2]);if(jn(i,",")){r.push(null),e.advance(),i=e.peek();continue}const t=sr(e);t[0]===lt&&(s=!0),r.push(t),i=e.peek(),Bn(i)||(Cn(i,","),e.advance()),i=e.peek()}e.advance();const a=ar(e);if(t&&!a)throw new n("Expected assignment",e.peekSourceCodeInfo());return Xn([dt,[r,a]],o[2])}if(Dn(o)){e.advance();const r={};let i=e.peek(),s=!1;for(;!Ln(i);){if(s)throw new n("Rest argument must be last",i[2]);jn(i,"...")&&(s=!0,e.advance());const t=ir(e),a=tr(t);if(i=e.peek(),$n(i,"as")){if(s)throw new n("Rest argument can not have alias",i[2]);e.advance();const t=rt(ir(e));if(r[t[1]])throw new n(`Duplicate binding name: ${t}`,i[2]);r[a]=Xn([ct,[t,ar(e)]],o[2])}else if(Ln(i)||jn(i,",")||jn(i,"=")){const a=rt(t,t[2]);if(r[a[1]])throw new n(`Duplicate binding name: ${a}`,i[2]);if(s&&jn(e.tryPeek(),"="))throw new n("Rest argument can not have default value",e.peekSourceCodeInfo());r[a[1]]=Xn(s?[lt,[a[1],ar(e)]]:[ct,[a,ar(e)]],o[2])}else if(jn(i,":")){if(e.advance(),i=e.peek(),!Dn(i)&&!Tn(i))throw new n("Expected object or array",i[2]);r[a]=sr(e)}Ln(e.peek())||(Cn(e.peek(),","),e.advance()),i=e.peek()}e.advance(),i=e.peek();const a=ar(e);if(t&&!a)throw new n("Expected assignment",i[2]);return Xn([ft,[r,a]],o[2])}throw new n("Expected symbol",e.peekSourceCodeInfo())}function ar(e){if(jn(e.tryPeek(),"="))return e.advance(),e.parseExpression()}function ur(e,t){e.advance();const n=sr(e,{requireDefaultValue:!0,noRest:!0}),r=n[1][1];n[1][1]=void 0;const o=Xn([i.Binding,[n,r]],t[2]);return Xn([i.SpecialExpression,[Tt.let,o]],t[2])}function cr(e,t){const r=[];for(;!e.isAtEnd()&&!lr(e,t);)jn(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]:Xn([i.SpecialExpression,[Tt.block,r]],e.peekSourceCodeInfo())}function lr(e,t){for(const n of t)if($n(e.tryPeek(),n))return!0;return!1}function fr(e){const t=function(e){const t=Pn(e.tryPeek()),n=rt(ir(e));An(e.tryPeek(),"in"),e.advance();const r=e.parseExpression();return Xn([i.Binding,[Xn([ct,[n,void 0]],t[2]),r]],t[2])}(e),r=[];let o=e.peek();dr(o,["let","when","while"]);const s=[];if("let"===o[1])for(r.push("&let");Nn(o,"let");){const t=ur(e,o),r=s.flatMap(e=>Object.keys(gt(e[1][0])));if(Object.keys(gt(t[1][1][1][0])).some(e=>r.includes(e)))throw new n("Duplicate binding",t[1][1][2]);s.push(t[1][1]),o=e.peek(),dr(o,["let","when","while"]),o=e.peek()}let a,u;for(;$n(o,"when")||$n(o,"while");){e.advance(),"when"===o[1]?(r.push("&when"),a=e.parseExpression()):(r.push("&while"),u=e.parseExpression()),o=e.peek();dr(o,r.includes("&when")&&r.includes("&while")?[]:r.includes("&when")?["while"]:["when"]),o=e.peek()}return dr(o,[]),[t,s,a,u]}function dr(e,t){if(!function(e,t){if(jn(e,",")||Fn(e))return!0;for(const n of t){if("let"===n&&Nn(e,"let"))return!0;if(["when","while"].includes(n)&&$n(e,n))return!0}return!1}(e,t)){const r=`${[...t,","].map(e=>`"${e}"`).join(", ")} or ")"`;throw new n(`Expected symbol ${r}`,e[2])}}function hr(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 Xn([i.String,n],t[2])}function pr(e,t=!1){const r=In(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=hr(e,n);return ne(r[1])}(e));const s=[];for(;!e.isAtEnd()&&!$n(e.tryPeek(),"end");)if(s.push(e.parseExpression()),jn(e.tryPeek(),";"))e.advance();else if(!$n(e.tryPeek(),"end"))throw new n("Expected end",e.peekSourceCodeInfo());return An(e.tryPeek(),"end"),e.advance(),[Xn([i.SpecialExpression,[Tt.block,s]],r[2]),o]}function yr(e){const t=In(e.tryPeek());e.advance();const n=t[1];return function(e){return e in Jt}(n)?Xn([i.Number,Jt[n]],t[2]):Xn([i.ReservedSymbol,t[1]],t[2])}const gr=/^\$([1-9]\d?)?$/;function mr(e){const t=e.peek();if(On(t)&&Nn(e.peekAhead(1))&&jn(e.peekAhead(2),"->"))return null;try{const r=function(e){const t=e.peek();if(Nn(t))return[Xn([ct,[ir(e),void 0]],t[2])];Un(t),e.advance();let r=!1,o=!1;const i=[];for(;!e.isAtEnd()&&!Fn(e.peek())&&!Nn(e.peek(),"let");){if(r)throw new n("Rest argument must be last",e.peekSourceCodeInfo());const t=sr(e);if(void 0!==t[1][1]&&(o=!0),t[0]===lt&&(r=!0),o&&!t[1][1])throw new n("Default arguments must be last",e.peekSourceCodeInfo());if(i.push(t),!jn(e.peek(),",")&&!Fn(e.peek())&&!Nn(e.peek(),"let"))throw new n("Expected comma or closing parenthesis",e.peekSourceCodeInfo());jn(e.peek(),",")&&e.advance()}if(!Fn(e.peek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),i}(e);if(!jn(e.peek(),"->"))return null;let o;e.advance();let s="";if($n(e.peek(),"do")){const t=pr(e,!0);s=t[1],o=t[0][1][1]}else o=[e.parseExpression()];return Xn([i.SpecialExpression,[Tt["0_lambda"],[r,o],s]],t[2])}catch{return null}}function vr(e,t){e.advance();const r=[];for(;!e.isAtEnd()&&!Fn(e.tryPeek());){jn(e.tryPeek(),"...")?(e.advance(),r.push(Xn([i.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const t=e.tryPeek();if(!jn(t,",")&&!Fn(t))throw new n("Expected comma or closing parenthesis",e.tryPeek()?.[2]);jn(t,",")&&e.advance()}if(!Fn(e.tryPeek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());if(e.advance(),!it(t))return ot(t)||nt(t)?nr(t,r,t[2]):Xn([i.NormalExpression,[t,r]],t[2]);{const e=t[1];switch(D(Bt.specialExpressions[e].arity,r.length,t[2]),e){case Tt["||"]:case Tt["&&"]:case Tt.recur:case Tt.array:case Tt.object:case Tt["??"]:return Xn([i.SpecialExpression,[e,r]],t[2]);case Tt["defined?"]:{const[n]=r;return Xn([i.SpecialExpression,[e,n]],t[2])}case Tt.throw:{const[n]=r;return Xn([i.SpecialExpression,[e,n]],t[2])}case Tt["0_lambda"]:case Tt["0_def"]:throw new n(`${e} is not allowed`,t[2]);default:throw new n(`Unknown special expression: ${e}`,t[2])}}}function br(e){const t=zn(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!Ln(e.tryPeek());){if(jn(e.tryPeek(),"..."))e.advance(),r.push(Xn([i.Spread,e.parseExpression()],e.peekSourceCodeInfo()));else{const t=e.tryPeek();if(Vn(t)){const n=hr(e,t);r.push(Xn([i.String,n[1]],t[2]))}else if(Nn(t)){const n=t[1].startsWith("'")?Hn(t[1]):t[1];r.push(Xn([i.String,n],t[2])),e.advance()}else{if(!Tn(t))throw new n("Expected key to be a symbol or a string",e.peekSourceCodeInfo());e.advance(),r.push(e.parseExpression()),Rn(e.tryPeek()),e.advance()}Cn(e.tryPeek(),":"),e.advance(),r.push(e.parseExpression())}const t=e.tryPeek();if(!jn(t,",")&&!Ln(t))throw new n("Expected comma or closing brace",e.peekSourceCodeInfo());jn(t,",")&&e.advance()}var o;return Ln(o=e.tryPeek())||Wn("RBrace",void 0,o),e.advance(),Xn([i.SpecialExpression,[Tt.object,r]],t[2])}function wr(e){let t=function(e){const t=e.peek();if(On(t)){e.storePosition();const t=mr(e);if(t)return t;e.restorePosition(),e.advance();const r=e.parseExpression();if(!Fn(e.peek()))throw new n("Expected closing parenthesis",e.peekSourceCodeInfo());return e.advance(),r}if(jn(t)){const r=t[1];if(on(r))return e.advance(),Xn(void 0!==Tt[r]?[i.SpecialBuiltinSymbol,Tt[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($n(e.peek(),"do")){const t=pr(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(Nn(r)){const e=gr.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(Xn([ct,[[i.UserDefinedSymbol,"$"],void 0]],t[2])):l.push(Xn([ct,[[i.UserDefinedSymbol,`$${e}`],void 0]],t[2]));return Xn([i.SpecialExpression,[Tt["0_lambda"],[l,o],s]],t[2])}(e);throw new n(`Illegal operator: ${r}`,t[2])}if(Dn(t))return br(e);if(Tn(t))return function(e){const t=_n(e.tryPeek());e.advance();const r=[];for(;!e.isAtEnd()&&!Bn(e.tryPeek());){jn(e.tryPeek(),"...")?(e.advance(),r.push(Xn([i.Spread,e.parseExpression()],e.peekSourceCodeInfo()))):r.push(e.parseExpression());const t=e.tryPeek();if(!jn(t,",")&&!Bn(t))throw new n("Expected comma or closing parenthesis",e.peekSourceCodeInfo());jn(t,",")&&e.advance()}return Rn(e.tryPeek()),e.advance(),Xn([i.SpecialExpression,[Tt.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 Xn([i.Number,r?-Number(o):Number(o)],t[2])}(e);case"string":return hr(e,t);case"Symbol":{e.storePosition();const t=mr(e);return t||(e.restorePosition(),ir(e))}case"ReservedSymbol":return yr(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=Xn([i.String,r],t[2]),a=Xn([i.String,o],t[2]);return Xn([i.NormalExpression,[Xn([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(;jn(r,".")||Tn(r)||On(r);)if("."===r[1]){e.advance();const o=e.tryPeek();if(!Nn(o))throw new n("Expected symbol",e.peekSourceCodeInfo());t=xr(t,Xn([i.String,o[1]],o[2]),r[2]),e.advance(),r=e.tryPeek()}else if(Tn(r)){e.advance();const o=e.parseExpression();if(!Bn(e.tryPeek()))throw new n("Expected closing bracket",e.peekSourceCodeInfo());t=xr(t,o,r[2]),e.advance(),r=e.tryPeek()}else On(r)&&(t=vr(e,t),r=e.tryPeek());return t}function xr(e,t,n){return Xn([i.NormalExpression,[[i.NormalBuiltinSymbol,Xe.get],[e,t]]],n)}function Sr(e,t){switch(e){case"^":return 12;case"*":case"/":case"%":return 11;case"+":case"-":return 10;case"<<":case">>":case">>>":return 9;case"++":return 8;case"<":case"<=":case"≤":case">":case">=":case"≥":return 7;case"==":case"!=":return 6;case"&":case"xor":case"|":return 5;case"&&":case"||":case"??":return 4;case"|>":return 2;default:throw new n(`Unknown binary operator: ${e}`,t)}}function Er(e,t=0,r=!1){const o=e.tryPeek();let s;if(Nn(o))switch(o[1]){case"let":return ur(e,o);case"if":case"unless":s=function(e,t){const n="unless"===t[1];e.advance();const r=e.parseExpression();An(e.tryPeek(),"then"),e.advance();const o=cr(e,["else","end"]);let s;return $n(e.tryPeek(),"else")&&(e.advance(),s=cr(e,["end"])),e.advance(),Xn(n?[i.SpecialExpression,[Tt.unless,[r,o,s]]]:[i.SpecialExpression,[Tt.if,[r,o,s]]],t[2])}(e,o);break;case"cond":s=function(e,t){e.advance();const n=[];for(;!e.isAtEnd()&&!$n(e.tryPeek(),"end");){An(e.tryPeek(),"case"),e.advance();const t=e.parseExpression();An(e.tryPeek(),"then"),e.advance();const r=cr(e,["case","end"]);if(n.push([t,r]),$n(e.tryPeek(),"end"))break}return An(e.tryPeek()),e.advance(),Xn([i.SpecialExpression,[Tt.cond,n]],t[2])}(e,o);break;case"switch":s=function(e,t){e.advance();const n=e.parseExpression(),r=[];for(;!e.isAtEnd()&&!$n(e.tryPeek(),"end");){An(e.tryPeek(),"case"),e.advance();const t=e.parseExpression();An(e.tryPeek(),"then"),e.advance();const n=cr(e,["case","end"]);if(r.push([t,n]),$n(e.tryPeek(),"end"))break}return An(e.tryPeek(),"end"),e.advance(),Xn([i.SpecialExpression,[Tt.switch,n,r]],t[2])}(e,o);break;case"for":case"doseq":s=function(e,t){const r="doseq"===t[1];e.advance(),Un(e.tryPeek()),e.advance();const o=[];for(;!e.isAtEnd()&&!Fn(e.tryPeek());){const t=fr(e),r=o.flatMap(e=>Object.keys(gt(e[0][1][0]))),i=gt(t[0][1][0]);if(Object.keys(i).some(e=>r.includes(e)))throw new n("Duplicate binding",t[0][2]);o.push(t),jn(e.tryPeek(),",")&&e.advance()}Mn(e.tryPeek()),e.advance(),Cn(e.tryPeek(),"->"),e.advance();const s=e.parseExpression();return Xn(r?[i.SpecialExpression,[Tt.doseq,o,s]]:[i.SpecialExpression,[Tt.for,o,s]],t[2])}(e,o);break;case"loop":s=function(e,t){e.advance(),Un(e.tryPeek()),e.advance();const r=[];let o=e.tryPeek();for(;!e.isAtEnd()&&!Fn(o);){const t=sr(e,{requireDefaultValue:!0,noRest:!0}),n=t[1][1];t[1][1]=void 0,r.push(Xn([i.Binding,[t,n]],t[2])),jn(e.tryPeek(),",")&&e.advance(),o=e.tryPeek()}if(0===r.length)throw new n("Expected binding",e.peekSourceCodeInfo());Mn(o),e.advance(),Cn(e.tryPeek(),"->"),e.advance();const s=e.parseExpression();return Xn([i.SpecialExpression,[Tt.loop,r,s]],t[2])}(e,o);break;case"try":s=function(e,t){e.advance();const n=cr(e,["catch"]);let r;e.advance(),On(e.tryPeek())&&(e.advance(),r=ir(e),Mn(e.tryPeek()),e.advance());const o=cr(e,["end"]);return e.advance(),Xn([i.SpecialExpression,[Tt.try,n,r,o]],t[2])}(e,o)}else if($n(o,"do"))s=pr(e)[0];else if($n(o,"export")){if(!r)throw new n("export is only allowed in module scope",o[2]);return function(e,t){e.advance();const r=e.tryPeek();if(Nn(r,"let")){const n=ur(e,Pn(r));return Xn([i.SpecialExpression,[Tt["0_def"],n[1][1]]],t[2])}throw new n("Expected let",e.peekSourceCodeInfo())}(e,o)}s||=wr(e);let a=e.tryPeek();for(;!rr(e);){if(Jn(a)){const n=a[1],r=Sr(n,a[2]);if(r<=t&&(12!==r||12!==t))break;const o=Xn(Tt[n]?[i.SpecialBuiltinSymbol,Tt[n]]:[i.NormalBuiltinSymbol,Xe[n]],a[2]);e.advance();s=or(a,o,s,Er(e,r),a[2])}else if(Nn(a)){if(!nn(a[1]))break;const r=3;if(r<=t)break;const o=ir(e),i=Er(e,r);if(it(o))throw new n("Special expressions are not allowed in binary functional operators",o[2]);s=nr(o,[s,i],a[2])}else{if("?"!==a?.[1])break;{if(1<=t)break;e.advance();const r=Er(e);if(!jn(e.tryPeek(),":"))throw new n("Expected :",e.peekSourceCodeInfo());e.advance();const o=Er(e);s=Xn([i.SpecialExpression,[Tt.if,[s,r,o]]],s[2])}}a=e.tryPeek()}return s}class kr{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 kr(this.astCacheSize);const t=e.initialCache??{};for(const e of Object.keys(t))this.astCache.set(e,t[e])}else this.astCache=null;const t=e.modules??[];this.modules=new Map(t.map(e=>[e.name,e]))}getRuntimeInfo(){return{astCacheSize:this.astCacheSize,astCache:this.astCache,debug:this.debug}}async={run:async(e,t={})=>{const n=this.generateAst(e,t);return this.evaluate(n,t)},context:async(e,t={})=>{const n="string"==typeof e?this.generateAst(e,t):e,r=Ht(t,this.modules);return await Yt(n,r),r.globalContext},apply:async(e,t,n={})=>this.apply(e,t,n)};run(e,t={}){const n=this.generateAst(e,t),r=this.evaluate(n,t);if(r instanceof Promise)throw new TypeError("Unexpected async result in synchronous run(). Use lits.async.run() for async operations.");return r}context(e,t={}){const n="string"==typeof e?this.generateAst(e,t):e,r=Ht(t,this.modules);if(Yt(n,r)instanceof Promise)throw new TypeError("Unexpected async result in synchronous context(). Use lits.async.context() for async operations.");return r.globalContext}getUndefinedSymbols(e,t={}){const n="string"==typeof e?this.generateAst(e,t):e,r=Ht(t,this.modules);return zt(n,r,Bt,Gt)}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?En(e,r,n):void 0,s=kn(e,r),[a,u]=s;r+=a,u&&(i&&(u[2]=i),o.tokens.push(u))}return o}(e,this.debug,t.filePath);return t.minify?qn(n,{removeWhiteSpace:!1}):n}parse(e){const t={body:[],hasDebugData:(e=qn(e,{removeWhiteSpace:!0})).hasDebugData};return t.body=function(e){e.tokens.forEach(e=>{if("Error"===e[0])throw new n(e[3],e[2])});const t=[],r=new Kn(e);for(r.parseExpression=(e=0,t=!1)=>Er(r,e,t);!r.isAtEnd();)if(t.push(Er(r,0,!0)),jn(r.tryPeek(),";"))r.advance();else if(!r.isAtEnd())throw new n("Expected ;",r.peekSourceCodeInfo());return t}(e),t}evaluate(e,t){return Yt(e,Ht(t,this.modules))}transformSymbols(e,t){return function(e,t){return{...e,tokens:e.tokens.map(e=>Nn(e)?[e[0],t(e[1])]:e)}}(e,t)}untokenize(e){return function(e){return e.tokens.reduce((e,t)=>`${e}${t[1]}`,"")}(e)}apply(e,t,n={}){const r="FN_2eb7b316_471c_5bfa_90cb_d3dfd9164a59",o=this.generateApplyFunctionCall(r,t),i=this.generateAst(o,n),s=t.reduce((e,t,n)=>(e[`${r}_${n}`]=t,e),{[r]:e});return n.values={...n.values,...s},this.evaluate(i,n)}generateApplyFunctionCall(e,t){const n=t.map((t,n)=>`${e}_${n}`).join(", ");return`${e}(${n})`}generateAst(e,t){if(this.astCache){const t=this.astCache.get(e);if(t)return t}const n=this.tokenize(e,{filePath:t.filePath}),r=this.parse(n);return this.astCache?.set(e,r),r}getAutoCompleter(e,t,n={}){return new Gn(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.isLitsError=function(e){return e instanceof n},exports.isLitsFunction=b,exports.isMatrix=Ce,exports.isNativeJsFunction=E,exports.isUserDefinedFunction=x,exports.isVector=$e,exports.normalExpressionKeys=Rt,exports.specialExpressionKeys=Dt;
|
|
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),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)=>{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,n,r,{executeFunction:o})=>g(He[e.normalBuiltinSymbolType],n).evaluate(t,n,r,{executeFunction:o}),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);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:n,placeholders:i})=>{if(st(e)){const s=e[1][0];if(i.length>0){return se(Kt(s,t),e=>({[c]:!0,function:R(e,r),functionType:"Partial",params:n,placeholders:i,sourceCodeInfo:r,arity:z(i.length)}))}if(ot(s)){const r=s[1];return _t.allNormalExpressions[r].evaluate(n,e[2],t,{executeFunction:Xt})}{const i=t.getValue(s[1]);if(void 0!==i)return Xt(R(i,r),n,t,r);throw new o(s[1],e[2])}}return se(Kt(e[1][0],t),e=>{const o=R(e,r);if(i.length>0){return{[c]:!0,function:o,functionType:"Partial",params:n,placeholders:i,sourceCodeInfo:r,arity:z(i.length)}}return Xt(o,n,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;constructor({contexts:e,values:t,nativeJsFunctions:n,modules:r,valueModules:o}){this.globalContext=g(e[0]),this.contexts=e,this.values=t,this.nativeJsFunctions=n,this.modules=r??new Map,this.valueModules=o??new Map}getModule(e){return this.modules.get(e)}getValueModule(e){return this.valueModules.has(e)?{value:this.valueModules.get(e),found:!0}:{value:void 0,found:!1}}registerValueModule(e,t){this.valueModules.set(e,t)}create(e){const t=this.globalContext,n=new Ht({contexts:[e,...this.contexts],values:this.values,nativeJsFunctions:this.nativeJsFunctions,modules:this.modules,valueModules:this.valueModules});return n.globalContext=t,n}new(e){return new Ht({contexts:[{},e],modules:this.modules,valueModules:this.valueModules})}addValues(e,t){const r=this.contexts[0];for(const[o,i]of Object.entries(e)){if(r[o])throw new n(`Cannot redefine value "${o}"`,t);const e=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){const r=e.globalContext??{},o=e.contexts?[r,...e.contexts]:[r];let i,s;if(e.bindings)for(const[t,r]of Object.entries(e.bindings)){if(t.includes("."))throw new n(`Dots are not allowed in binding keys: "${t}"`,void 0);const e="function"==typeof r,o=lt(r);if(e||o){const e=o?r:{fn:r};Qt(t),s||(s={}),s[t]={functionType:"NativeJsFunction",nativeFn:e,name:t,[c]:!0,arity:e.arity??{},docString:e.docString??""}}else Qt(t),i||(i={}),i[t]=r}const a=new Ht({contexts:o,values:i,modules:t,nativeJsFunctions:s});return e.globalModuleScope?a:a.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));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);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)}const r=Gt(this.generateAst(e.program,t),n);if(r instanceof Promise)throw new TypeError("Unexpected async result in synchronous runBundle(). Use lits.async.run() for async operations.");return r}getUndefinedSymbols(e,t={}){const n="string"==typeof e?this.generateAst(e,t):e,r=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))}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;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|