From 73446cae381ff29d98978096fc6f03b33e17d95a Mon Sep 17 00:00:00 2001 From: takejohn Date: Fri, 8 Nov 2024 01:34:40 +0000 Subject: [PATCH] deploy: d2f4965cfe8f39c9043702366da02c46dd760ebc --- assets/{index-BGCUd0x7.js => index-nnwHl74Q.js} | 2 +- index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename assets/{index-BGCUd0x7.js => index-nnwHl74Q.js} (99%) diff --git a/assets/index-BGCUd0x7.js b/assets/index-nnwHl74Q.js similarity index 99% rename from assets/index-BGCUd0x7.js rename to assets/index-nnwHl74Q.js index a7e6b038..acb38f80 100644 --- a/assets/index-BGCUd0x7.js +++ b/assets/index-nnwHl74Q.js @@ -18,7 +18,7 @@ `),"Str:lt":_(([e,t])=>(ae(e),ae(t),e.value(ae(e),ae(t),e.value>t.value?F(-1):e.value===t.value?F(0):F(1))),"Str:from_codepoint":_(([e])=>(P(e),te(String.fromCodePoint(e.value)))),"Str:from_unicode_codepoints":_(([e])=>(Ct(e),te(Array.from(e.value.map(t=>(P(t),String.fromCodePoint(t.value)))).join("")))),"Str:from_utf8_bytes":_(([e])=>(Ct(e),te(Du.decode(Uint8Array.from(e.value.map(t=>(P(t),t.value))))))),"Uri:encode_full":_(([e])=>(ae(e),te(encodeURI(e.value)))),"Uri:encode_component":_(([e])=>(ae(e),te(encodeURIComponent(e.value)))),"Uri:decode_full":_(([e])=>(ae(e),te(decodeURI(e.value)))),"Uri:decode_component":_(([e])=>(ae(e),te(decodeURIComponent(e.value)))),"Arr:create":_(([e,t])=>{P(e);try{return de(Array(e.value).fill(t??G))}catch(r){throw e.value<0?new ne("Arr:create expected non-negative number, got negative"):Number.isInteger(e.value)?r:new ne("Arr:create expected integer, got non-integer")}}),"Obj:keys":_(([e])=>(rt(e),de(Array.from(e.value.keys()).map(t=>te(t))))),"Obj:vals":_(([e])=>(rt(e),de(Array.from(e.value.values())))),"Obj:kvs":_(([e])=>(rt(e),de(Array.from(e.value.entries()).map(([t,r])=>de([te(t),r]))))),"Obj:get":_(([e,t])=>(rt(e),ae(t),e.value.get(t.value)??G)),"Obj:set":_(([e,t,r])=>(rt(e),ae(t),Ne(r),e.value.set(t.value,r),G)),"Obj:has":_(([e,t])=>(rt(e),ae(t),Vt(e.value.has(t.value)))),"Obj:copy":_(([e])=>(rt(e),fn(new Map(e.value)))),"Obj:merge":_(([e,t])=>(rt(e),rt(t),fn(new Map([...e.value,...t.value])))),"Error:create":_(([e,t])=>(ae(e),en(e.value,t))),"Async:interval":_(async([e,t,r],n)=>{P(e),be(t),r&&(Be(r),r.value&&n.call(t,[]));const s=setInterval(()=>{n.topCall(t,[])},e.value),i=()=>{clearInterval(s)};return n.registerAbortHandler(i),_(([],a)=>{clearInterval(s),a.unregisterAbortHandler(i)})}),"Async:timeout":_(async([e,t],r)=>{P(e),be(t);const n=setTimeout(()=>{r.topCall(t,[])},e.value),s=()=>{clearTimeout(n)};return r.registerAbortHandler(s),_(([],i)=>{clearTimeout(n),i.unregisterAbortHandler(s)})})};var Zt={},dc=()=>{const e="\\ud800-\\udfff",a="\\u0300-\\u036f"+"\\ufe20-\\ufe2f"+"\\u20d0-\\u20ff"+"\\u1ab0-\\u1aff"+"\\u1dc0-\\u1dff",o="\\ufe0e\\ufe0f",l="\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83C\\uDF93",f=`[${e}]`,c=`[${a}]`,h="\\ud83c[\\udffb-\\udfff]",y=`(?:${c}|${h})`,b=`[^${e}]`,$="(?:\\uD83C[\\uDDE6-\\uDDFF]){2}",I="[\\ud800-\\udbff][\\udc00-\\udfff]",q="\\u200d",j="(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40(?:\\udc65|\\udc73|\\udc77)\\udb40(?:\\udc6e|\\udc63|\\udc6c)\\udb40(?:\\udc67|\\udc74|\\udc73)\\udb40\\udc7f)",m=`[${l}]`,p=`${y}?`,d=`[${o}]?`,v=`(?:${q}(?:${[b,$,I].join("|")})${d+p})*`,x=d+p+v,M=`(?:${[`${b}${c}?`,c,$,I,f,m].join("|")})`;return new RegExp(`${j}|${h}(?=${h})|${M+x}`,"g")},gc=et&&et.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Zt,"__esModule",{value:!0});var Cn=gc(dc);function ls(e){if(typeof e!="string")throw new Error("A string is expected as input");return e.match(Cn.default())||[]}var jn=Zt.toArray=ls;function Rs(e){if(typeof e!="string")throw new Error("Input must be a string");var t=e.match(Cn.default());return t===null?0:t.length}var mc=Zt.length=Rs;function za(e,t,r){if(t===void 0&&(t=0),typeof e!="string")throw new Error("Input must be a string");(typeof t!="number"||t<0)&&(t=0),typeof r=="number"&&r<0&&(r=0);var n=e.match(Cn.default());return n?n.slice(t,r).join(""):""}var vc=Zt.substring=za;function yc(e,t,r){if(t===void 0&&(t=0),typeof e!="string")throw new Error("Input must be a string");var n=Rs(e);if(typeof t!="number"&&(t=parseInt(t,10)),t>=n)return"";t<0&&(t+=n);var s;typeof r>"u"?s=n:(typeof r!="number"&&(r=parseInt(r,10)),s=r>=0?r+t:t);var i=e.match(Cn.default());return i?i.slice(t,s).join(""):""}Zt.substr=yc;function wc(e,t,r,n){if(t===void 0&&(t=16),r===void 0&&(r="#"),n===void 0&&(n="right"),typeof e!="string"||typeof t!="number")throw new Error("Invalid arguments specified");if(["left","right"].indexOf(n)===-1)throw new Error("Pad position should be either left or right");typeof r!="string"&&(r=String(r));var s=Rs(e);if(s>t)return za(e,0,t);if(s=n.length)return t===""?n.length:-1;if(t==="")return r;var s=ls(t),i=!1,a;for(a=r;a_(async(t,r)=>te(e.value.toString())),to_hex:e=>_(async(t,r)=>te(e.value.toString(16)))},str:{to_num:e=>_(async(t,r)=>{const n=parseInt(e.value,10);return isNaN(n)?G:F(n)}),to_arr:e=>_(async(t,r)=>de(jn(e.value).map(n=>te(n)))),to_unicode_arr:e=>_(async(t,r)=>de([...e.value].map(n=>te(n)))),to_unicode_codepoint_arr:e=>_(async(t,r)=>de([...e.value].map(n=>{const s=n.codePointAt(0);return F(s??n.charCodeAt(0))}))),to_char_arr:e=>_(async(t,r)=>de(e.value.split("").map(n=>te(n)))),to_charcode_arr:e=>_(async(t,r)=>de(e.value.split("").map(n=>F(n.charCodeAt(0))))),to_utf8_byte_arr:e=>_(async(t,r)=>de(Array.from(Ha.encode(e.value)).map(n=>F(n)))),len:e=>F(mc(e.value)),replace:e=>_(async([t,r],n)=>(ae(t),ae(r),te(e.value.split(t.value).join(r.value)))),index_of:e=>_(async([t,r],n)=>{ae(t),r&&P(r);const s=r?r.value<0?e.value.length+r.value:r.value:void 0;return F(bc(e.value,t.value,s))}),incl:e=>_(async([t],r)=>(ae(t),e.value.includes(t.value)?Se:Fe)),trim:e=>_(async(t,r)=>te(e.value.trim())),upper:e=>_(async(t,r)=>te(e.value.toUpperCase())),lower:e=>_(async(t,r)=>te(e.value.toLowerCase())),split:e=>_(async([t],r)=>(t&&ae(t),de(t?e.value.split(t?t.value:"").map(n=>te(n)):jn(e.value).map(n=>te(n))))),slice:e=>_(async([t,r],n)=>(P(t),P(r),te(vc(e.value,t.value,r.value)))),pick:e=>_(async([t],r)=>{P(t);const s=jn(e.value)[t.value];return s?te(s):G}),charcode_at:e=>_(([t],r)=>{P(t);const n=e.value.charCodeAt(t.value);return Number.isNaN(n)?G:F(n)}),codepoint_at:e=>_(([t],r)=>{P(t);const n=e.value.codePointAt(t.value)??e.value.charCodeAt(t.value);return Number.isNaN(n)?G:F(n)}),starts_with:e=>_(async([t,r],n)=>{if(ae(t),!t.value)return Se;r&&P(r);const s=r?.value??0;if(s<-e.value.length||s>e.value.length)return Fe;const i=s>=0?s:e.value.length+s;return e.value.startsWith(t.value,i)?Se:Fe}),ends_with:e=>_(async([t,r],n)=>{if(ae(t),!t.value)return Se;r&&P(r);const s=r?.value??e.value.length;if(s<-e.value.length||s>e.value.length)return Fe;const i=s>=0?s:e.value.length+s;return e.value.endsWith(t.value,i)?Se:Fe}),pad_start:e=>_(([t,r],n)=>{P(t);const s=r?(ae(r),r.value):" ";return te(e.value.padStart(t.value,s))}),pad_end:e=>_(([t,r],n)=>{P(t);const s=r?(ae(r),r.value):" ";return te(e.value.padEnd(t.value,s))})},arr:{len:e=>F(e.value.length),push:e=>_(async([t],r)=>(Ne(t),e.value.push(t),e)),unshift:e=>_(async([t],r)=>(Ne(t),e.value.unshift(t),e)),pop:e=>_(async(t,r)=>e.value.pop()??G),shift:e=>_(async(t,r)=>e.value.shift()??G),concat:e=>_(async([t],r)=>(Ct(t),de(e.value.concat(t.value)))),slice:e=>_(async([t,r],n)=>(P(t),P(r),de(e.value.slice(t.value,r.value)))),join:e=>_(async([t],r)=>(t&&ae(t),te(e.value.map(n=>n.type==="str"?n.value:"").join(t?t.value:"")))),map:e=>_(async([t],r)=>{be(t);const n=e.value.map(async(s,i)=>await r.call(t,[s,F(i)]));return de(await Promise.all(n))}),filter:e=>_(async([t],r)=>{be(t);const n=[];for(let s=0;s_(async([t,r],n)=>{be(t);const s=r!=null;if(!s&&e.value.length===0)throw new ne("Reduce of empty array without initial value");let i=s?r:e.value[0];for(let a=s?0:1;a_(async([t],r)=>{be(t);for(let n=0;n_(async([t],r)=>(Ne(t),e.value.some(n=>hr(t,n))?Se:Fe)),index_of:e=>_(async([t,r],n)=>{if(Ne(t),r){P(r);const s=e.value.slice(0,r.value).length,i=e.value.slice(r.value).findIndex(a=>hr(a,t));return F(i<0?i:i+s)}else return F(e.value.findIndex(s=>hr(s,t)))}),reverse:e=>_(async(t,r)=>(e.value.reverse(),G)),copy:e=>_(async(t,r)=>de([...e.value])),sort:e=>_(async([t],r)=>{const n=async(i,a)=>{if(i.length<=1)return i;const o=Math.floor(i.length/2),l=n(i.slice(0,o),a),f=n(i.slice(o),a),[c,h]=await Promise.all([l,f]);return s(c,h,a)},s=async(i,a,o)=>{const l=[];let f=0,c=0;for(;f_(async([t,r,n],s)=>{const i=t??G,a=r&&(P(r),r.value),o=n&&(P(n),n.value);return e.value.fill(i,a,o),e}),repeat:e=>_(async([t],r)=>{P(t);try{return de(Array(t.value).fill(e.value).flat())}catch(n){throw t.value<0?new ne("arr.repeat expected non-negative number, got negative"):Number.isInteger(t.value)?n:new ne("arr.repeat expected integer, got non-integer")}}),splice:e=>_(async([t,r,n],s)=>{P(t);const i=t.value<-e.value.length?0:t.value<0?e.value.length+t.value:t.value>=e.value.length?e.value.length:t.value,a=r!=null?(P(r),r.value):e.value.length-i,o=n!=null?(Ct(n),n.value):[],l=e.value.splice(i,a,...o);return de(l)}),flat:e=>_(async([t],r)=>{if(t=t??F(1),P(t),!Number.isInteger(t.value))throw new ne("arr.flat expected integer, got non-integer");if(t.value<0)throw new ne("arr.flat expected non-negative number, got negative");const n=(i,a,o)=>{if(a===0){o.push(...i);return}for(const l of i)hn(l)?n(l.value,a-1,o):o.push(l)},s=[];return n(e.value,t.value,s),de(s)}),flat_map:e=>_(async([t],r)=>{be(t);const n=e.value.map(async(i,a)=>{const o=await r.call(t,[i,F(a)]);return hn(o)?o.value:o}),s=await Promise.all(n);return de(s.flat())}),every:e=>_(async([t],r)=>{be(t);for(let n=0;n_(async([t],r)=>{be(t);for(let n=0;n_(async([t,r],n)=>(P(t),Ne(r),e.value.splice(t.value,0,r),G)),remove:e=>_(async([t],r)=>(P(t),e.value.splice(t.value,1)[0]??G)),at:e=>_(async([t,r],n)=>(P(t),e.value.at(t.value)??r??G))},error:{name:e=>te(e.value),info:e=>e.info??G}};function _c(e,t){if(Object.hasOwn(Pi,e.type)){const r=Pi[e.type];if(Object.hasOwn(r,t))return r[t](e);throw new ne(`No such prop (${t}) in ${e.type}.`)}else throw new ne(`Cannot read prop of ${e.type}. (reading ${t})`)}const Ec={mut(e){return{isMutable:!0,value:e}},const(e){return{isMutable:!1,value:e}}};var Oe=function(e,t,r,n){var s=arguments.length,i=s<3?t:n===null?n=Object.getOwnPropertyDescriptor(t,r):n,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(e,t,r,n);else for(var o=e.length-1;o>=0;o--)(a=e[o])&&(i=(s<3?a(i):s>3?a(t,r,i):a(t,r))||i);return s>3&&i&&Object.defineProperty(t,r,i),i};class Ce{opts;stepCount=0;stop=!1;scope;abortHandlers=[];vars={};irqRate;irqSleep;constructor(t,r={}){this.opts=r;const n={print:_(([i])=>{Ne(i),this.opts.out&&this.opts.out(i)}),readline:_(async i=>{const a=i[0];if(ae(a),this.opts.in==null)return G;const o=await this.opts.in(a.value);return te(o)})};if(this.vars=Object.fromEntries(Object.entries({...t,...pc,...n}).map(([i,a])=>[i,Ec.const(a)])),this.scope=new Ve([new Map(Object.entries(this.vars))]),this.scope.opts.log=(i,a)=>{switch(i){case"add":this.log("var:add",a);break;case"read":this.log("var:read",a);break;case"write":this.log("var:write",a);break}},!((this.opts.irqRate??300)>=0))throw new bi(`Invalid IRQ rate (${this.opts.irqRate}): must be non-negative number`);this.irqRate=this.opts.irqRate??300;const s=i=>()=>new Promise(a=>setTimeout(a,i));if(typeof this.opts.irqSleep=="function")this.irqSleep=this.opts.irqSleep;else if(this.opts.irqSleep===void 0)this.irqSleep=s(5);else if(this.opts.irqSleep>=0)this.irqSleep=s(this.opts.irqSleep);else throw new bi("irqSleep must be a function or a positive number.")}async exec(t){if(!(t==null||t.length===0))try{await this.collectNs(t);const r=await this._run(t,this.scope,[]);this.log("end",{val:r})}catch(r){this.handleError(r)}}async execFn(t,r){return await this._fn(t,r,[]).catch(n=>(this.handleError(n),en("func_failed")))}execFnSimple(t,r){return this._fn(t,r,[])}static collectMetadata(t){if(t==null||t.length===0)return;function r(s){switch(s.type){case"arr":return s.value.map(i=>r(i));case"bool":return s.value;case"null":return null;case"num":return s.value;case"obj":{const i={};for(const[a,o]of s.value.entries())i[a]=r(o);return i}case"str":return s.value;default:return}}const n=new Map;for(const s of t)switch(s.type){case"meta":{n.set(s.name,r(s.value));break}}return n}handleError(t){if(!this.opts.err)throw t;if(this.opts.abortOnError){if(this.stop)return;this.abort()}t instanceof At?this.opts.err(t):this.opts.err(new wi(t))}log(t,r){this.opts.log&&this.opts.log(t,r)}async collectNs(t,r=this.scope){for(const n of t)switch(n.type){case"ns":{await this.collectNsMember(n,r);break}}}async collectNsMember(t,r=this.scope){const n=r.createChildNamespaceScope(t.name);await this.collectNs(t.members,n);for(const s of t.members)switch(s.type){case"def":{if(s.dest.type!=="identifier")throw new Tn("Destructuring assignment is invalid in namespace declarations.",s.loc.start);if(s.mut)throw new Tn('No "var" in namespace declaration: '+s.dest.name,s.loc.start);const i=await this._eval(s.expr,n,[]);s.expr.type==="fn"&&Ei(i)&&!i.native&&(i.name=n.getNsPrefix()+s.dest.name),await this.define(n,s.dest,i,s.mut);break}case"ns":break;default:{const a=s;throw new Tn("invalid ns member type: "+a.type,a.loc.start)}}}async _fn(t,r,n,s){if(t.native){const i={name:"",pos:s};return t.native(r,{call:(o,l)=>this._fn(o,l,[...n,i]),topCall:this.execFn,registerAbortHandler:this.registerAbortHandler,unregisterAbortHandler:this.unregisterAbortHandler})??G}else{const i=t.scope.createChildScope();for(const[o,l]of t.params.entries()){const f=r[o];l.default||Ne(f),this.define(i,l.dest,f??l.default,!0)}const a={name:t.name??"",pos:s};return Ru(await this._run(t.statements,i,[...n,a]))}}_evalClause(t,r,n){return this._eval(t,Pu(t)?r.createChildScope():r,n)}_eval(t,r,n){return this.__eval(t,r,n).catch(s=>{if(s.pos)throw s;{const i=s instanceof At?s:new wi(s);throw i.pos=t.loc.start,i.message=[i.message,...[...n,{pos:i.pos}].map(({pos:a},o)=>{const l=n[o-1]?.name??"";return a?` at ${l} (Line ${a.line}, Column ${a.column})`:` at ${l}`}).reverse()].join(` `),i}})}async __eval(t,r,n){if(this.stop)return G;if(this.irqRate!==0&&this.stepCount%this.irqRate>=this.irqRate-1&&await this.irqSleep(),this.stepCount++,this.opts.maxStep&&this.stepCount>this.opts.maxStep)throw new ne("max step exceeded");switch(t.type){case"call":{const s=await this._eval(t.target,r,n);be(s);const i=await Promise.all(t.args.map(a=>this._eval(a,r,n)));return this._fn(s,i,n,t.loc.start)}case"if":{const s=await this._eval(t.cond,r,n);if(Be(s),s.value)return this._evalClause(t.then,r,n);for(const i of t.elseif){const a=await this._eval(i.cond,r,n);if(Be(a),a.value)return this._evalClause(i.then,r,n)}return t.else?this._evalClause(t.else,r,n):G}case"match":{const s=await this._eval(t.about,r,n);for(const i of t.qs){const a=await this._eval(i.q,r,n);if(hr(s,a))return await this._evalClause(i.a,r,n)}return t.default?await this._evalClause(t.default,r,n):G}case"loop":{for(;;){const s=await this._run(t.statements,r.createChildScope(),n);if(s.type==="break")break;if(s.type==="return")return s}return G}case"for":{if(t.times){const s=await this._eval(t.times,r,n);P(s);for(let i=0;i0){const i=[];for(const a of t.attr)i.push({name:a.name,value:await this._eval(a.value,r,n)});s.attr=i}return t.expr.type==="fn"&&t.dest.type==="identifier"&&Ei(s)&&!s.native&&(s.name=t.dest.name),await this.define(r,t.dest,s,t.mut),G}case"identifier":return r.get(t.name);case"assign":{const s=await this._eval(t.expr,r,n);return await this.assign(r,t.dest,s,n),G}case"addAssign":{const s=await this._eval(t.dest,r,n);P(s);const i=await this._eval(t.expr,r,n);return P(i),await this.assign(r,t.dest,F(s.value+i.value),n),G}case"subAssign":{const s=await this._eval(t.dest,r,n);P(s);const i=await this._eval(t.expr,r,n);return P(i),await this.assign(r,t.dest,F(s.value-i.value),n),G}case"null":return G;case"bool":return Vt(t.value);case"num":return F(t.value);case"str":return te(t.value);case"arr":return de(await Promise.all(t.value.map(s=>this._eval(s,r,n))));case"obj":{const s=new Map;for(const[i,a]of t.value)s.set(i,await this._eval(a,r,n));return fn(s)}case"prop":{const s=await this._eval(t.target,r,n);return Ln(s)?s.value.has(t.name)?s.value.get(t.name):G:_c(s,t.name)}case"index":{const s=await this._eval(t.target,r,n),i=await this._eval(t.index,r,n);if(hn(s)){P(i);const a=s.value[i.value];if(a===void 0)throw new xi(`Index out of range. index: ${i.value} max: ${s.value.length-1}`);return a}else{if(Ln(s))return ae(i),s.value.has(i.value)?s.value.get(i.value):G;throw new ne(`Cannot read prop (${pr(i)}) of ${s.type}.`)}}case"not":{const s=await this._eval(t.expr,r,n);return Be(s),Vt(!s.value)}case"fn":return ku(await Promise.all(t.params.map(async s=>({dest:s.dest,default:s.default?await this._eval(s.default,r,n):s.optional?G:void 0}))),t.children,r);case"block":return this._run(t.statements,r.createChildScope(),n);case"exists":return Vt(r.exists(t.identifier.name));case"tmpl":{let s="";for(const i of t.tmpl)if(typeof i=="string")s+=i;else{const a=await this._eval(i,r,n);s+=pr(a)}return te(s)}case"return":{const s=await this._eval(t.expr,r,n);return this.log("block:return",{scope:r.name,val:s}),Bu(s)}case"break":return this.log("block:break",{scope:r.name}),Iu();case"continue":return this.log("block:continue",{scope:r.name}),Nu();case"ns":return G;case"meta":return G;case"pow":{const s=r.get("Core:pow");be(s);const i=await this._eval(t.left,r,n),a=await this._eval(t.right,r,n);return this._fn(s,[i,a],n)}case"mul":{const s=r.get("Core:mul");be(s);const i=await this._eval(t.left,r,n),a=await this._eval(t.right,r,n);return this._fn(s,[i,a],n)}case"div":{const s=r.get("Core:div");be(s);const i=await this._eval(t.left,r,n),a=await this._eval(t.right,r,n);return this._fn(s,[i,a],n)}case"rem":{const s=r.get("Core:mod");be(s);const i=await this._eval(t.left,r,n),a=await this._eval(t.right,r,n);return this._fn(s,[i,a],n)}case"add":{const s=r.get("Core:add");be(s);const i=await this._eval(t.left,r,n),a=await this._eval(t.right,r,n);return this._fn(s,[i,a],n)}case"sub":{const s=r.get("Core:sub");be(s);const i=await this._eval(t.left,r,n),a=await this._eval(t.right,r,n);return this._fn(s,[i,a],n)}case"lt":{const s=r.get("Core:lt");be(s);const i=await this._eval(t.left,r,n),a=await this._eval(t.right,r,n);return this._fn(s,[i,a],n)}case"lteq":{const s=r.get("Core:lteq");be(s);const i=await this._eval(t.left,r,n),a=await this._eval(t.right,r,n);return this._fn(s,[i,a],n)}case"gt":{const s=r.get("Core:gt");be(s);const i=await this._eval(t.left,r,n),a=await this._eval(t.right,r,n);return this._fn(s,[i,a],n)}case"gteq":{const s=r.get("Core:gteq");be(s);const i=await this._eval(t.left,r,n),a=await this._eval(t.right,r,n);return this._fn(s,[i,a],n)}case"eq":{const s=r.get("Core:eq");be(s);const i=await this._eval(t.left,r,n),a=await this._eval(t.right,r,n);return this._fn(s,[i,a],n)}case"neq":{const s=r.get("Core:neq");be(s);const i=await this._eval(t.left,r,n),a=await this._eval(t.right,r,n);return this._fn(s,[i,a],n)}case"and":{const s=await this._eval(t.left,r,n);if(Be(s),s.value){const i=await this._eval(t.right,r,n);return Be(i),i}else return s}case"or":{const s=await this._eval(t.left,r,n);if(Be(s),s.value)return s;{const i=await this._eval(t.right,r,n);return Be(i),i}}default:throw new Error("invalid node type")}}async _run(t,r,n){this.log("block:enter",{scope:r.name});let s=G;for(let i=0;ir!==t)}abort(){this.stop=!0;for(const t of this.abortHandlers)t();this.abortHandlers=[]}async define(t,r,n,s){switch(r.type){case"identifier":{t.add(r.name,{isMutable:s,value:n});break}case"arr":{Ct(n),await Promise.all(r.value.map((i,a)=>this.define(t,i,n.value[a]??G,s)));break}case"obj":{rt(n),await Promise.all([...r.value].map(([i,a])=>this.define(t,a,n.value.get(i)??G,s)));break}default:throw new ne("The left-hand side of an definition expression must be a variable.")}}async assign(t,r,n,s){switch(r.type){case"identifier":{t.assign(r.name,n);break}case"index":{const i=await this._eval(r.target,t,s),a=await this._eval(r.index,t,s);if(hn(i)){if(P(a),i.value[a.value]===void 0)throw new xi(`Index out of range. index: ${a.value} max: ${i.value.length-1}`);i.value[a.value]=n}else if(Ln(i))ae(a),i.value.set(a.value,n);else throw new ne(`Cannot read prop (${pr(a)}) of ${i.type}.`);break}case"prop":{const i=await this._eval(r.target,t,s);rt(i),i.value.set(r.name,n);break}case"arr":{Ct(n),await Promise.all(r.value.map((i,a)=>this.assign(t,i,n.value[a]??G,s)));break}case"obj":{rt(n),await Promise.all([...r.value].map(([i,a])=>this.assign(t,a,n.value.get(i)??G,s)));break}default:throw new ne("The left-hand side of an assignment expression must be a variable or a property/index access.")}}}Oe([he],Ce.prototype,"exec",null);Oe([he],Ce.prototype,"execFn",null);Oe([he],Ce.prototype,"execFnSimple",null);Oe([he],Ce.prototype,"handleError",null);Oe([he],Ce.prototype,"log",null);Oe([he],Ce.prototype,"collectNs",null);Oe([he],Ce.prototype,"collectNsMember",null);Oe([he],Ce.prototype,"_fn",null);Oe([he],Ce.prototype,"_evalClause",null);Oe([he],Ce.prototype,"_eval",null);Oe([he],Ce.prototype,"__eval",null);Oe([he],Ce.prototype,"_run",null);Oe([he],Ce.prototype,"registerAbortHandler",null);Oe([he],Ce.prototype,"unregisterAbortHandler",null);Oe([he],Ce.prototype,"abort",null);Oe([he],Ce.prototype,"define",null);Oe([he],Ce.prototype,"assign",null);Oe([he],Ce,"collectMetadata",null);class Cc{pages;firstPageIndex;lastPageIndex;pageIndex;address;_char;line;column;constructor(t,r){this.pages=new Map,this.pages.set(0,t),this.firstPageIndex=0,this.lastPageIndex=0,this.pageIndex=0,this.address=0,this.line=r?.line??0,this.column=r?.column??0,this.moveNext()}get eof(){return this.endOfPage&&this.isLastPage}get char(){if(this.eof)throw new Error("end of stream");return this._char}getPos(){return{line:this.line+1,column:this.column+1}}next(){!this.eof&&this._char===` `?(this.line++,this.column=0):this.column++,this.incAddr(),this.moveNext()}prev(){this.decAddr(),this.movePrev()}get isFirstPage(){return this.pageIndex<=this.firstPageIndex}get isLastPage(){return this.pageIndex>=this.lastPageIndex}get endOfPage(){const t=this.pages.get(this.pageIndex);return this.address>=t.length}moveNext(){for(this.loadChar();;){if(!this.eof&&this._char==="\r"){this.incAddr(),this.loadChar();continue}break}}incAddr(){this.endOfPage?this.isLastPage||(this.pageIndex++,this.address=0):this.address++}movePrev(){for(this.loadChar();;){if(!this.eof&&this._char==="\r"){this.decAddr(),this.loadChar();continue}break}}decAddr(){this.address>0?this.address--:this.isFirstPage||(this.pageIndex--,this.address=this.pages.get(this.pageIndex).length-1)}loadChar(){this.eof?this._char=void 0:this._char=this.pages.get(this.pageIndex)[this.address]}}var u;(function(e){e[e.EOF=0]="EOF",e[e.NewLine=1]="NewLine",e[e.Identifier=2]="Identifier",e[e.NumberLiteral=3]="NumberLiteral",e[e.StringLiteral=4]="StringLiteral",e[e.Template=5]="Template",e[e.TemplateStringElement=6]="TemplateStringElement",e[e.TemplateExprElement=7]="TemplateExprElement",e[e.NullKeyword=8]="NullKeyword",e[e.TrueKeyword=9]="TrueKeyword",e[e.FalseKeyword=10]="FalseKeyword",e[e.EachKeyword=11]="EachKeyword",e[e.ForKeyword=12]="ForKeyword",e[e.LoopKeyword=13]="LoopKeyword",e[e.DoKeyword=14]="DoKeyword",e[e.WhileKeyword=15]="WhileKeyword",e[e.BreakKeyword=16]="BreakKeyword",e[e.ContinueKeyword=17]="ContinueKeyword",e[e.MatchKeyword=18]="MatchKeyword",e[e.CaseKeyword=19]="CaseKeyword",e[e.DefaultKeyword=20]="DefaultKeyword",e[e.IfKeyword=21]="IfKeyword",e[e.ElifKeyword=22]="ElifKeyword",e[e.ElseKeyword=23]="ElseKeyword",e[e.ReturnKeyword=24]="ReturnKeyword",e[e.EvalKeyword=25]="EvalKeyword",e[e.VarKeyword=26]="VarKeyword",e[e.LetKeyword=27]="LetKeyword",e[e.ExistsKeyword=28]="ExistsKeyword",e[e.Not=29]="Not",e[e.NotEq=30]="NotEq",e[e.OpenSharpBracket=31]="OpenSharpBracket",e[e.Sharp3=32]="Sharp3",e[e.Percent=33]="Percent",e[e.And2=34]="And2",e[e.OpenParen=35]="OpenParen",e[e.CloseParen=36]="CloseParen",e[e.Asterisk=37]="Asterisk",e[e.Plus=38]="Plus",e[e.PlusEq=39]="PlusEq",e[e.Comma=40]="Comma",e[e.Minus=41]="Minus",e[e.MinusEq=42]="MinusEq",e[e.Dot=43]="Dot",e[e.Slash=44]="Slash",e[e.Colon=45]="Colon",e[e.Colon2=46]="Colon2",e[e.SemiColon=47]="SemiColon",e[e.Lt=48]="Lt",e[e.LtEq=49]="LtEq",e[e.Out=50]="Out",e[e.Eq=51]="Eq",e[e.Eq2=52]="Eq2",e[e.Arrow=53]="Arrow",e[e.Gt=54]="Gt",e[e.GtEq=55]="GtEq",e[e.Question=56]="Question",e[e.At=57]="At",e[e.OpenBracket=58]="OpenBracket",e[e.BackSlash=59]="BackSlash",e[e.CloseBracket=60]="CloseBracket",e[e.Hat=61]="Hat",e[e.OpenBrace=62]="OpenBrace",e[e.Or2=63]="Or2",e[e.CloseBrace=64]="CloseBrace"})(u||(u={}));class Ac{kind;pos;hasLeftSpacing;value;children;constructor(t,r,n=!1,s,i){this.kind=t,this.pos=r,this.hasLeftSpacing=n,this.value=s,this.children=i}}function D(e,t,r){return new Ac(e,t,r?.hasLeftSpacing,r?.value,r?.children)}const Un=[" "," "],Si=["\r",` -`],Fi=/^[0-9]$/,Pc=/^[A-Za-z0-9_]$/;class Sc{stream;_tokens=[];constructor(t){typeof t=="string"?this.stream=new Cc(t):this.stream=t,this._tokens.push(this.readToken())}getToken(){return this._tokens[0]}is(t){return this.getTokenKind()===t}getTokenKind(){return this.getToken().kind}getTokenValue(){return this.getToken().value}getPos(){return this.getToken().pos}next(){this._tokens[0].kind!==u.EOF&&(this._tokens.shift(),this._tokens.length===0&&this._tokens.push(this.readToken()))}lookahead(t){for(;this._tokens.length<=t;)this._tokens.push(this.readToken());return this._tokens[t]}expect(t){if(!this.is(t))throw new re(`unexpected token: ${u[this.getTokenKind()]}`,this.getPos())}readToken(){let t=!1;for(;;){if(this.stream.eof)return D(u.EOF,this.stream.getPos(),{hasLeftSpacing:t});if(Un.includes(this.stream.char)){this.stream.next(),t=!0;continue}const r=this.stream.getPos();if(Si.includes(this.stream.char))return this.skipEmptyLines(),D(u.NewLine,r,{hasLeftSpacing:t});switch(this.stream.char){case"!":return this.stream.next(),!this.stream.eof&&this.stream.char==="="?(this.stream.next(),D(u.NotEq,r,{hasLeftSpacing:t})):D(u.Not,r,{hasLeftSpacing:t});case'"':case"'":return this.readStringLiteral(t);case"#":if(this.stream.next(),!this.stream.eof&&this.stream.char==="#"){if(this.stream.next(),!this.stream.eof&&this.stream.char==="#")return this.stream.next(),D(u.Sharp3,r,{hasLeftSpacing:t});throw new re('invalid sequence of characters: "##"',r)}else{if(!this.stream.eof&&this.stream.char==="[")return this.stream.next(),D(u.OpenSharpBracket,r,{hasLeftSpacing:t});throw new re('invalid character: "#"',r)}case"%":return this.stream.next(),D(u.Percent,r,{hasLeftSpacing:t});case"&":{if(this.stream.next(),!this.stream.eof&&this.stream.char==="&")return this.stream.next(),D(u.And2,r,{hasLeftSpacing:t});throw new re('invalid character: "&"',r)}case"(":return this.stream.next(),D(u.OpenParen,r,{hasLeftSpacing:t});case")":return this.stream.next(),D(u.CloseParen,r,{hasLeftSpacing:t});case"*":return this.stream.next(),D(u.Asterisk,r,{hasLeftSpacing:t});case"+":return this.stream.next(),!this.stream.eof&&this.stream.char==="="?(this.stream.next(),D(u.PlusEq,r,{hasLeftSpacing:t})):D(u.Plus,r,{hasLeftSpacing:t});case",":return this.stream.next(),D(u.Comma,r,{hasLeftSpacing:t});case"-":return this.stream.next(),!this.stream.eof&&this.stream.char==="="?(this.stream.next(),D(u.MinusEq,r,{hasLeftSpacing:t})):D(u.Minus,r,{hasLeftSpacing:t});case".":return this.stream.next(),D(u.Dot,r,{hasLeftSpacing:t});case"/":if(this.stream.next(),!this.stream.eof&&this.stream.char==="*"){this.stream.next(),this.skipCommentRange();continue}else if(!this.stream.eof&&this.stream.char==="/"){this.stream.next(),this.skipCommentLine();continue}else return D(u.Slash,r,{hasLeftSpacing:t});case":":return this.stream.next(),!this.stream.eof&&this.stream.char===":"?(this.stream.next(),D(u.Colon2,r,{hasLeftSpacing:t})):D(u.Colon,r,{hasLeftSpacing:t});case";":return this.stream.next(),D(u.SemiColon,r,{hasLeftSpacing:t});case"<":return this.stream.next(),!this.stream.eof&&this.stream.char==="="?(this.stream.next(),D(u.LtEq,r,{hasLeftSpacing:t})):!this.stream.eof&&this.stream.char===":"?(this.stream.next(),D(u.Out,r,{hasLeftSpacing:t})):D(u.Lt,r,{hasLeftSpacing:t});case"=":return this.stream.next(),!this.stream.eof&&this.stream.char==="="?(this.stream.next(),D(u.Eq2,r,{hasLeftSpacing:t})):!this.stream.eof&&this.stream.char===">"?(this.stream.next(),D(u.Arrow,r,{hasLeftSpacing:t})):D(u.Eq,r,{hasLeftSpacing:t});case">":return this.stream.next(),!this.stream.eof&&this.stream.char==="="?(this.stream.next(),D(u.GtEq,r,{hasLeftSpacing:t})):D(u.Gt,r,{hasLeftSpacing:t});case"?":return this.stream.next(),D(u.Question,r,{hasLeftSpacing:t});case"@":return this.stream.next(),D(u.At,r,{hasLeftSpacing:t});case"[":return this.stream.next(),D(u.OpenBracket,r,{hasLeftSpacing:t});case"\\":return this.stream.next(),D(u.BackSlash,r,{hasLeftSpacing:t});case"]":return this.stream.next(),D(u.CloseBracket,r,{hasLeftSpacing:t});case"^":return this.stream.next(),D(u.Hat,r,{hasLeftSpacing:t});case"`":return this.readTemplate(t);case"{":return this.stream.next(),D(u.OpenBrace,r,{hasLeftSpacing:t});case"|":{if(this.stream.next(),!this.stream.eof&&this.stream.char==="|")return this.stream.next(),D(u.Or2,r,{hasLeftSpacing:t});throw new re('invalid character: "|"',r)}case"}":return this.stream.next(),D(u.CloseBrace,r,{hasLeftSpacing:t});default:{const n=this.tryReadDigits(t);if(n)return n;const s=this.tryReadWord(t);if(s)return s;throw new re(`invalid character: "${this.stream.char}"`,r)}}break}}tryReadWord(t){let r="";const n=this.stream.getPos();for(;!this.stream.eof&&Pc.test(this.stream.char);)r+=this.stream.char,this.stream.next();if(r.length!==0)switch(r){case"null":return D(u.NullKeyword,n,{hasLeftSpacing:t});case"true":return D(u.TrueKeyword,n,{hasLeftSpacing:t});case"false":return D(u.FalseKeyword,n,{hasLeftSpacing:t});case"each":return D(u.EachKeyword,n,{hasLeftSpacing:t});case"for":return D(u.ForKeyword,n,{hasLeftSpacing:t});case"loop":return D(u.LoopKeyword,n,{hasLeftSpacing:t});case"do":return D(u.DoKeyword,n,{hasLeftSpacing:t});case"while":return D(u.WhileKeyword,n,{hasLeftSpacing:t});case"break":return D(u.BreakKeyword,n,{hasLeftSpacing:t});case"continue":return D(u.ContinueKeyword,n,{hasLeftSpacing:t});case"match":return D(u.MatchKeyword,n,{hasLeftSpacing:t});case"case":return D(u.CaseKeyword,n,{hasLeftSpacing:t});case"default":return D(u.DefaultKeyword,n,{hasLeftSpacing:t});case"if":return D(u.IfKeyword,n,{hasLeftSpacing:t});case"elif":return D(u.ElifKeyword,n,{hasLeftSpacing:t});case"else":return D(u.ElseKeyword,n,{hasLeftSpacing:t});case"return":return D(u.ReturnKeyword,n,{hasLeftSpacing:t});case"eval":return D(u.EvalKeyword,n,{hasLeftSpacing:t});case"var":return D(u.VarKeyword,n,{hasLeftSpacing:t});case"let":return D(u.LetKeyword,n,{hasLeftSpacing:t});case"exists":return D(u.ExistsKeyword,n,{hasLeftSpacing:t});default:return D(u.Identifier,n,{hasLeftSpacing:t,value:r})}}tryReadDigits(t){let r="",n="";const s=this.stream.getPos();for(;!this.stream.eof&&Fi.test(this.stream.char);)r+=this.stream.char,this.stream.next();if(r.length===0)return;if(!this.stream.eof&&this.stream.char==="."){for(this.stream.next();!this.stream.eof&&Fi.test(this.stream.char);)n+=this.stream.char,this.stream.next();if(n.length===0)throw new re("digit expected",s)}let i;return n.length>0?i=r+"."+n:i=r,D(u.NumberLiteral,s,{hasLeftSpacing:t,value:i})}readStringLiteral(t){let r="";const n=this.stream.char;let s="string";const i=this.stream.getPos();for(this.stream.next();s!=="finish";)switch(s){case"string":{if(this.stream.eof)throw new re("unexpected EOF",i);if(this.stream.char==="\\"){this.stream.next(),s="escape";break}if(this.stream.char===n){this.stream.next(),s="finish";break}r+=this.stream.char,this.stream.next();break}case"escape":{if(this.stream.eof)throw new re("unexpected EOF",i);r+=this.stream.char,this.stream.next(),s="string";break}}return D(u.StringLiteral,i,{hasLeftSpacing:t,value:r})}readTemplate(t){const r=[];let n="",s=[],i="string";const a=this.stream.getPos();let o=a;for(this.stream.next();i!=="finish";)switch(i){case"string":{if(this.stream.eof)throw new re("unexpected EOF",a);if(this.stream.char==="\\"){this.stream.next(),i="escape";break}if(this.stream.char==="`"){this.stream.next(),n.length>0&&r.push(D(u.TemplateStringElement,o,{hasLeftSpacing:t,value:n})),i="finish";break}if(this.stream.char==="{"){this.stream.next(),n.length>0&&(r.push(D(u.TemplateStringElement,o,{hasLeftSpacing:t,value:n})),n=""),o=this.stream.getPos(),i="expr";break}n+=this.stream.char,this.stream.next();break}case"escape":{if(this.stream.eof)throw new re("unexpected EOF",a);n+=this.stream.char,this.stream.next(),i="string";break}case"expr":{if(this.stream.eof)throw new re("unexpected EOF",a);if(Un.includes(this.stream.char)){this.stream.next();continue}if(this.stream.char==="}"){r.push(D(u.TemplateExprElement,o,{hasLeftSpacing:t,children:s})),o=this.stream.getPos(),s.push(D(u.EOF,o)),s=[],i="string",this.stream.next();break}const l=this.readToken();s.push(l);break}}return D(u.Template,a,{hasLeftSpacing:t,children:r})}skipEmptyLines(){for(;!this.stream.eof;){if(Un.includes(this.stream.char)||Si.includes(this.stream.char)){this.stream.next();continue}if(this.stream.char==="/")if(this.stream.next(),!this.stream.eof&&this.stream.char==="*"){this.stream.next(),this.skipCommentRange();continue}else if(!this.stream.eof&&this.stream.char==="/"){this.stream.next(),this.skipCommentLine();continue}else{this.stream.prev();break}break}}skipCommentLine(){for(;!(this.stream.eof||this.stream.char===` +`],Fi=/^[0-9]$/,Pc=/^[A-Za-z0-9_]$/;class Sc{stream;_tokens=[];constructor(t){typeof t=="string"?this.stream=new Cc(t):this.stream=t,this._tokens.push(this.readToken())}getToken(){return this._tokens[0]}is(t){return this.getTokenKind()===t}getTokenKind(){return this.getToken().kind}getTokenValue(){return this.getToken().value}getPos(){return this.getToken().pos}next(){this._tokens[0].kind!==u.EOF&&(this._tokens.shift(),this._tokens.length===0&&this._tokens.push(this.readToken()))}lookahead(t){for(;this._tokens.length<=t;)this._tokens.push(this.readToken());return this._tokens[t]}expect(t){if(!this.is(t))throw new re(`unexpected token: ${u[this.getTokenKind()]}`,this.getPos())}readToken(){let t=!1;for(;;){if(this.stream.eof)return D(u.EOF,this.stream.getPos(),{hasLeftSpacing:t});if(Un.includes(this.stream.char)){this.stream.next(),t=!0;continue}const r=this.stream.getPos();if(Si.includes(this.stream.char))return this.skipEmptyLines(),D(u.NewLine,r,{hasLeftSpacing:t});switch(this.stream.char){case"!":return this.stream.next(),!this.stream.eof&&this.stream.char==="="?(this.stream.next(),D(u.NotEq,r,{hasLeftSpacing:t})):D(u.Not,r,{hasLeftSpacing:t});case'"':case"'":return this.readStringLiteral(t);case"#":if(this.stream.next(),!this.stream.eof&&this.stream.char==="#"){if(this.stream.next(),!this.stream.eof&&this.stream.char==="#")return this.stream.next(),D(u.Sharp3,r,{hasLeftSpacing:t});throw new re('invalid sequence of characters: "##"',r)}else{if(!this.stream.eof&&this.stream.char==="[")return this.stream.next(),D(u.OpenSharpBracket,r,{hasLeftSpacing:t});throw new re('invalid character: "#"',r)}case"%":return this.stream.next(),D(u.Percent,r,{hasLeftSpacing:t});case"&":{if(this.stream.next(),!this.stream.eof&&this.stream.char==="&")return this.stream.next(),D(u.And2,r,{hasLeftSpacing:t});throw new re('invalid character: "&"',r)}case"(":return this.stream.next(),D(u.OpenParen,r,{hasLeftSpacing:t});case")":return this.stream.next(),D(u.CloseParen,r,{hasLeftSpacing:t});case"*":return this.stream.next(),D(u.Asterisk,r,{hasLeftSpacing:t});case"+":return this.stream.next(),!this.stream.eof&&this.stream.char==="="?(this.stream.next(),D(u.PlusEq,r,{hasLeftSpacing:t})):D(u.Plus,r,{hasLeftSpacing:t});case",":return this.stream.next(),D(u.Comma,r,{hasLeftSpacing:t});case"-":return this.stream.next(),!this.stream.eof&&this.stream.char==="="?(this.stream.next(),D(u.MinusEq,r,{hasLeftSpacing:t})):D(u.Minus,r,{hasLeftSpacing:t});case".":return this.stream.next(),D(u.Dot,r,{hasLeftSpacing:t});case"/":if(this.stream.next(),!this.stream.eof&&this.stream.char==="*"){this.stream.next(),this.skipCommentRange();continue}else if(!this.stream.eof&&this.stream.char==="/"){this.stream.next(),this.skipCommentLine();continue}else return D(u.Slash,r,{hasLeftSpacing:t});case":":return this.stream.next(),!this.stream.eof&&this.stream.char===":"?(this.stream.next(),D(u.Colon2,r,{hasLeftSpacing:t})):D(u.Colon,r,{hasLeftSpacing:t});case";":return this.stream.next(),D(u.SemiColon,r,{hasLeftSpacing:t});case"<":return this.stream.next(),!this.stream.eof&&this.stream.char==="="?(this.stream.next(),D(u.LtEq,r,{hasLeftSpacing:t})):!this.stream.eof&&this.stream.char===":"?(this.stream.next(),D(u.Out,r,{hasLeftSpacing:t})):D(u.Lt,r,{hasLeftSpacing:t});case"=":return this.stream.next(),!this.stream.eof&&this.stream.char==="="?(this.stream.next(),D(u.Eq2,r,{hasLeftSpacing:t})):!this.stream.eof&&this.stream.char===">"?(this.stream.next(),D(u.Arrow,r,{hasLeftSpacing:t})):D(u.Eq,r,{hasLeftSpacing:t});case">":return this.stream.next(),!this.stream.eof&&this.stream.char==="="?(this.stream.next(),D(u.GtEq,r,{hasLeftSpacing:t})):D(u.Gt,r,{hasLeftSpacing:t});case"?":return this.stream.next(),D(u.Question,r,{hasLeftSpacing:t});case"@":return this.stream.next(),D(u.At,r,{hasLeftSpacing:t});case"[":return this.stream.next(),D(u.OpenBracket,r,{hasLeftSpacing:t});case"\\":return this.stream.next(),D(u.BackSlash,r,{hasLeftSpacing:t});case"]":return this.stream.next(),D(u.CloseBracket,r,{hasLeftSpacing:t});case"^":return this.stream.next(),D(u.Hat,r,{hasLeftSpacing:t});case"`":return this.readTemplate(t);case"{":return this.stream.next(),D(u.OpenBrace,r,{hasLeftSpacing:t});case"|":{if(this.stream.next(),!this.stream.eof&&this.stream.char==="|")return this.stream.next(),D(u.Or2,r,{hasLeftSpacing:t});throw new re('invalid character: "|"',r)}case"}":return this.stream.next(),D(u.CloseBrace,r,{hasLeftSpacing:t});default:{const n=this.tryReadDigits(t);if(n)return n;const s=this.tryReadWord(t);if(s)return s;throw new re(`invalid character: "${this.stream.char}"`,r)}}break}}tryReadWord(t){let r="";const n=this.stream.getPos();for(;!this.stream.eof&&Pc.test(this.stream.char);)r+=this.stream.char,this.stream.next();if(r.length!==0)switch(r){case"null":return D(u.NullKeyword,n,{hasLeftSpacing:t});case"true":return D(u.TrueKeyword,n,{hasLeftSpacing:t});case"false":return D(u.FalseKeyword,n,{hasLeftSpacing:t});case"each":return D(u.EachKeyword,n,{hasLeftSpacing:t});case"for":return D(u.ForKeyword,n,{hasLeftSpacing:t});case"loop":return D(u.LoopKeyword,n,{hasLeftSpacing:t});case"do":return D(u.DoKeyword,n,{hasLeftSpacing:t});case"while":return D(u.WhileKeyword,n,{hasLeftSpacing:t});case"break":return D(u.BreakKeyword,n,{hasLeftSpacing:t});case"continue":return D(u.ContinueKeyword,n,{hasLeftSpacing:t});case"match":return D(u.MatchKeyword,n,{hasLeftSpacing:t});case"case":return D(u.CaseKeyword,n,{hasLeftSpacing:t});case"default":return D(u.DefaultKeyword,n,{hasLeftSpacing:t});case"if":return D(u.IfKeyword,n,{hasLeftSpacing:t});case"elif":return D(u.ElifKeyword,n,{hasLeftSpacing:t});case"else":return D(u.ElseKeyword,n,{hasLeftSpacing:t});case"return":return D(u.ReturnKeyword,n,{hasLeftSpacing:t});case"eval":return D(u.EvalKeyword,n,{hasLeftSpacing:t});case"var":return D(u.VarKeyword,n,{hasLeftSpacing:t});case"let":return D(u.LetKeyword,n,{hasLeftSpacing:t});case"exists":return D(u.ExistsKeyword,n,{hasLeftSpacing:t});default:return D(u.Identifier,n,{hasLeftSpacing:t,value:r})}}tryReadDigits(t){let r="",n="";const s=this.stream.getPos();for(;!this.stream.eof&&Fi.test(this.stream.char);)r+=this.stream.char,this.stream.next();if(r.length===0)return;if(!this.stream.eof&&this.stream.char==="."){for(this.stream.next();!this.stream.eof&&Fi.test(this.stream.char);)n+=this.stream.char,this.stream.next();if(n.length===0)throw new re("digit expected",s)}let i;return n.length>0?i=r+"."+n:i=r,D(u.NumberLiteral,s,{hasLeftSpacing:t,value:i})}readStringLiteral(t){let r="";const n=this.stream.char;let s="string";const i=this.stream.getPos();for(this.stream.next();s!=="finish";)switch(s){case"string":{if(this.stream.eof)throw new re("unexpected EOF",i);if(this.stream.char==="\\"){this.stream.next(),s="escape";break}if(this.stream.char===n){this.stream.next(),s="finish";break}r+=this.stream.char,this.stream.next();break}case"escape":{if(this.stream.eof)throw new re("unexpected EOF",i);r+=this.stream.char,this.stream.next(),s="string";break}}return D(u.StringLiteral,i,{hasLeftSpacing:t,value:r})}readTemplate(t){const r=[];let n="",s=[],i="string",a=0;const o=this.stream.getPos();let l=o;for(this.stream.next();i!=="finish";)switch(i){case"string":{if(this.stream.eof)throw new re("unexpected EOF",o);if(this.stream.char==="\\"){this.stream.next(),i="escape";break}if(this.stream.char==="`"){this.stream.next(),n.length>0&&r.push(D(u.TemplateStringElement,l,{hasLeftSpacing:t,value:n})),i="finish";break}if(this.stream.char==="{"){this.stream.next(),n.length>0&&(r.push(D(u.TemplateStringElement,l,{hasLeftSpacing:t,value:n})),n=""),l=this.stream.getPos(),i="expr";break}n+=this.stream.char,this.stream.next();break}case"escape":{if(this.stream.eof)throw new re("unexpected EOF",o);n+=this.stream.char,this.stream.next(),i="string";break}case"expr":{if(this.stream.eof)throw new re("unexpected EOF",o);if(Un.includes(this.stream.char)){this.stream.next();continue}if(this.stream.char==="{"&&a++,this.stream.char==="}"){if(a===0){r.push(D(u.TemplateExprElement,l,{hasLeftSpacing:t,children:s})),l=this.stream.getPos(),s.push(D(u.EOF,l)),s=[],i="string",this.stream.next();break}a--}const f=this.readToken();s.push(f);break}}return D(u.Template,o,{hasLeftSpacing:t,children:r})}skipEmptyLines(){for(;!this.stream.eof;){if(Un.includes(this.stream.char)||Si.includes(this.stream.char)){this.stream.next();continue}if(this.stream.char==="/")if(this.stream.next(),!this.stream.eof&&this.stream.char==="*"){this.stream.next(),this.skipCommentRange();continue}else if(!this.stream.eof&&this.stream.char==="/"){this.stream.next(),this.skipCommentLine();continue}else{this.stream.prev();break}break}}skipCommentLine(){for(;!(this.stream.eof||this.stream.char===` `);)this.stream.next()}skipCommentRange(){for(;!this.stream.eof;){if(this.stream.char==="*"){if(this.stream.next(),this.stream.char==="/"){this.stream.next();break}continue}this.stream.next()}}}function U(e,t,r,n){const s={type:e};for(const i of Object.keys(t))t[i]!==void 0&&(s[i]=t[i]);return s.loc={start:r,end:n},s}function Fc(e,t,r,n){return U("call",{target:U("identifier",{name:e},r,r),args:t},r,n)}class Mc{source;index;_token;constructor(t){this.source=t,this.index=0,this.load()}get eof(){return this.index>=this.source.length}getToken(){return this.eof?D(u.EOF,{line:-1,column:-1}):this._token}is(t){return this.getTokenKind()===t}getTokenValue(){return this.getToken().value}getTokenKind(){return this.getToken().kind}getPos(){return this.getToken().pos}next(){this.eof||this.index++,this.load()}lookahead(t){return this.index+t0)if(e.is(u.Colon)){if(e.getToken().hasLeftSpacing)throw new re("Cannot use spaces in a reference.",e.getPos());if(e.next(),e.getToken().hasLeftSpacing)throw new re("Cannot use spaces in a reference.",e.getPos())}else break;e.expect(u.Identifier),r.push(e.getTokenValue()),e.next()}return U("identifier",{name:r.join(":")},t,e.getPos())}function Lc(e,t){const r=e.getPos();for(e.expect(u.OpenBrace),e.next();e.is(u.NewLine);)e.next();const n=new Map;for(;!e.is(u.CloseBrace);){e.expect(u.Identifier);const s=e.getTokenValue();e.next(),e.expect(u.Colon),e.next();const i=me(e,t);switch(n.set(s,i),e.getTokenKind()){case u.NewLine:case u.Comma:{for(e.next();e.is(u.NewLine);)e.next();break}case u.CloseBrace:break;default:throw new re("separator expected",e.getPos())}}return e.expect(u.CloseBrace),e.next(),U("obj",{value:n},r,e.getPos())}function jc(e,t){const r=e.getPos();for(e.expect(u.OpenBracket),e.next();e.is(u.NewLine);)e.next();const n=[];for(;!e.is(u.CloseBracket);)switch(n.push(me(e,t)),e.getTokenKind()){case u.NewLine:case u.Comma:{for(e.next();e.is(u.NewLine);)e.next();break}case u.CloseBracket:break;default:throw new re("separator expected",e.getPos())}return e.expect(u.CloseBracket),e.next(),U("arr",{value:n},r,e.getPos())}function Ts(e,t){let r;const n=e.getTokenKind(),s=qn.find(i=>i.opKind==="prefix"&&i.kind===n);for(s!=null?r=Oc(e,s.bp):r=Wa(e,!1);;){e.is(u.BackSlash)&&(e.next(),e.expect(u.NewLine),e.next());const i=e.getTokenKind(),a=qn.find(l=>l.opKind==="postfix"&&l.kind===i);if(a!=null){if(a.bpl.opKind==="infix"&&l.kind===i);if(o!=null){if(o.lbp0)switch(e.getTokenKind()){case u.Comma:{e.next();break}default:throw new re("separator expected",e.getPos())}const s=Gt(e);r.push(s)}e.expect(u.CloseParen),e.next(),e.expect(u.Arrow),e.next();const n=Gt(e);return U("fnTypeSource",{params:r,result:n},t,e.getPos())}function qc(e){const t=e.getPos();let r;e.is(u.Identifier)?(r=e.getTokenValue(),e.next()):(e.expect(u.NullKeyword),e.next(),r="null");let n;return e.is(u.Lt)&&(e.next(),n=Gt(e),e.expect(u.Gt),e.next()),U("namedTypeSource",{name:r,inner:n},t,e.getPos())}function An(e){const t=e.getPos();switch(e.getTokenKind()){case u.VarKeyword:case u.LetKeyword:return Ja(e);case u.At:{if(e.lookahead(1).kind===u.Identifier)return Za(e);break}case u.Out:return Kc(e);case u.ReturnKeyword:return Wc(e);case u.OpenSharpBracket:return Gc(e);case u.EachKeyword:return Vc(e);case u.ForKeyword:return zc(e);case u.LoopKeyword:return Jc(e);case u.DoKeyword:return Zc(e);case u.WhileKeyword:return Xc(e);case u.BreakKeyword:return e.next(),U("break",{},t,e.getPos());case u.ContinueKeyword:return e.next(),U("continue",{},t,e.getPos())}const r=me(e,!1),n=Qc(e,r);return n||r}function Hc(e){switch(e.getTokenKind()){case u.VarKeyword:case u.LetKeyword:return Ja(e);case u.At:return Za(e);default:throw new re(`unexpected token: ${u[e.getTokenKind()]}`,e.getPos())}}function gt(e){if(e.is(u.OpenBrace)){const t=e.getPos(),r=Dr(e);return U("block",{statements:r},t,e.getPos())}else return An(e)}function Ja(e){const t=e.getPos();let r;switch(e.getTokenKind()){case u.LetKeyword:{r=!1;break}case u.VarKeyword:{r=!0;break}default:throw new re(`unexpected token: ${u[e.getTokenKind()]}`,e.getPos())}e.next();const n=Ds(e);let s;e.is(u.Colon)&&(e.next(),s=Gt(e)),e.expect(u.Eq),e.next(),e.is(u.NewLine)&&e.next();const i=me(e,!1);return U("def",{dest:n,varType:s,expr:i,mut:r,attr:[]},t,e.getPos())}function Za(e){const t=e.getPos();e.expect(u.At),e.next(),e.expect(u.Identifier);const r=e.getPos(),n=e.getTokenValue();e.next();const s=U("identifier",{name:n},r,e.getPos()),i=Ya(e);let a;e.is(u.Colon)&&(e.next(),a=Gt(e));const o=Dr(e),l=e.getPos();return U("def",{dest:s,expr:U("fn",{params:i,retType:a,children:o},t,l),mut:!1,attr:[]},t,l)}function Kc(e){const t=e.getPos();e.expect(u.Out),e.next();const r=me(e,!1);return Fc("print",[r],t,e.getPos())}function Vc(e){const t=e.getPos();let r=!1;e.expect(u.EachKeyword),e.next(),e.is(u.OpenParen)&&(r=!0,e.next()),e.expect(u.LetKeyword),e.next();const n=Ds(e);if(e.is(u.Comma))e.next();else throw new re("separator expected",e.getPos());const s=me(e,!1);r&&(e.expect(u.CloseParen),e.next());const i=gt(e);return U("each",{var:n,items:s,for:i},t,e.getPos())}function zc(e){const t=e.getPos();let r=!1;if(e.expect(u.ForKeyword),e.next(),e.is(u.OpenParen)&&(r=!0,e.next()),e.is(u.LetKeyword)){e.next();const n=e.getPos();e.expect(u.Identifier);const s=e.getTokenValue();e.next();let i;if(e.is(u.Eq)?(e.next(),i=me(e,!1)):i=U("num",{value:0},n,n),e.is(u.Comma))e.next();else throw new re("separator expected",e.getPos());const a=me(e,!1);r&&(e.expect(u.CloseParen),e.next());const o=gt(e);return U("for",{var:s,from:i,to:a,for:o},t,e.getPos())}else{const n=me(e,!1);r&&(e.expect(u.CloseParen),e.next());const s=gt(e);return U("for",{times:n,for:s},t,e.getPos())}}function Wc(e){const t=e.getPos();e.expect(u.ReturnKeyword),e.next();const r=me(e,!1);return U("return",{expr:r},t,e.getPos())}function Gc(e){const t=[];for(;e.is(u.OpenSharpBracket);)t.push(Yc(e)),e.expect(u.NewLine),e.next();const r=An(e);if(r.type!=="def")throw new re("invalid attribute.",r.loc.start);return r.attr!=null?r.attr.push(...t):r.attr=t,r}function Yc(e){const t=e.getPos();e.expect(u.OpenSharpBracket),e.next(),e.expect(u.Identifier);const r=e.getTokenValue();e.next();let n;if(!e.is(u.CloseBracket))n=me(e,!0);else{const s=e.getPos();n=U("bool",{value:!0},s,s)}return e.expect(u.CloseBracket),e.next(),U("attr",{name:r,value:n},t,e.getPos())}function Jc(e){const t=e.getPos();e.expect(u.LoopKeyword),e.next();const r=Dr(e);return U("loop",{statements:r},t,e.getPos())}function Zc(e){const t=e.getPos();e.expect(u.DoKeyword),e.next();const r=gt(e),n=e.getPos();e.expect(u.WhileKeyword),e.next();const s=me(e,!1),i=e.getPos();return U("loop",{statements:[r,U("if",{cond:U("not",{expr:s},n,i),then:U("break",{},i,i),elseif:[]},n,i)]},t,i)}function Xc(e){const t=e.getPos();e.expect(u.WhileKeyword),e.next();const r=me(e,!1),n=e.getPos(),s=gt(e);return U("loop",{statements:[U("if",{cond:U("not",{expr:r},t,n),then:U("break",{},n,n),elseif:[]},t,n),s]},t,e.getPos())}function Qc(e,t){const r=e.getPos();switch(e.getTokenKind()){case u.Eq:{e.next();const n=me(e,!1);return U("assign",{dest:t,expr:n},r,e.getPos())}case u.PlusEq:{e.next();const n=me(e,!1);return U("addAssign",{dest:t,expr:n},r,e.getPos())}case u.MinusEq:{e.next();const n=me(e,!1);return U("subAssign",{dest:t,expr:n},r,e.getPos())}default:return}}function ef(e){const t=[];for(;e.is(u.NewLine);)e.next();for(;!e.is(u.EOF);){switch(e.getTokenKind()){case u.Colon2:{t.push(Xa(e));break}case u.Sharp3:{t.push(tf(e));break}default:{t.push(An(e));break}}switch(e.getTokenKind()){case u.NewLine:case u.SemiColon:{for(;e.is(u.NewLine)||e.is(u.SemiColon);)e.next();break}case u.EOF:break;default:throw new re("Multiple statements cannot be placed on a single line.",e.getPos())}}return t}function Xa(e){const t=e.getPos();e.expect(u.Colon2),e.next(),e.expect(u.Identifier);const r=e.getTokenValue();e.next();const n=[];for(e.expect(u.OpenBrace),e.next();e.is(u.NewLine);)e.next();for(;!e.is(u.CloseBrace);){switch(e.getTokenKind()){case u.VarKeyword:case u.LetKeyword:case u.At:{n.push(Hc(e));break}case u.Colon2:{n.push(Xa(e));break}}switch(e.getTokenKind()){case u.NewLine:case u.SemiColon:{for(;e.is(u.NewLine)||e.is(u.SemiColon);)e.next();break}case u.CloseBrace:break;default:throw new re("Multiple statements cannot be placed on a single line.",e.getPos())}}return e.expect(u.CloseBrace),e.next(),U("ns",{name:r,members:n},t,e.getPos())}function tf(e){const t=e.getPos();e.expect(u.Sharp3),e.next();let r=null;e.is(u.Identifier)&&(r=e.getTokenValue(),e.next());const n=me(e,!0);return U("meta",{name:r,value:n},t,n.loc.end)}function Q(e,t){const r=t(e);switch(r.type){case"def":{r.expr=Q(r.expr,t);break}case"return":{r.expr=Q(r.expr,t);break}case"each":{r.items=Q(r.items,t),r.for=Q(r.for,t);break}case"for":{r.from!=null&&(r.from=Q(r.from,t)),r.to!=null&&(r.to=Q(r.to,t)),r.times!=null&&(r.times=Q(r.times,t)),r.for=Q(r.for,t);break}case"loop":{for(let n=0;n{switch(t.type){case"null":{Ht(t.type,t.loc);break}case"bool":{Ht(`${t.value}`,t.loc);break}case"identifier":{br.includes(t.name)&&Ht(t.name,t.loc);break}}return t})}function rf(e){switch(e.type){case"def":{Hn(e.dest);break}case"ns":case"attr":case"identifier":case"prop":{br.includes(e.name)&&Ht(e.name,e.loc);break}case"meta":{e.name!=null&&br.includes(e.name)&&Ht(e.name,e.loc);break}case"each":{Hn(e.var);break}case"for":{e.var!=null&&br.includes(e.var)&&Ht(e.var,e.loc);break}case"fn":{for(const t of e.params)Hn(t.dest);break}case"obj":{for(const t of e.value.keys())br.includes(t)&&Ht(t,e.loc);break}}return e}function nf(e){for(const t of e)Q(t,rf);return e}function $i(e){return{type:"simple",name:e}}function sf(e,t){return{type:"generic",name:e,inners:t}}function af(e,t){return{type:"fn",params:e,result:t}}function tn(e){switch(e.type){case"namedTypeSource":if(e.inner){const t=tn(e.inner);return`${e.name}<${t}>`}else return e.name;case"fnTypeSource":{const t=e.params.map(n=>tn(n)).join(", "),r=tn(e.result);return`@(${t}) { ${r} }`}}}function dr(e){if(e.type==="namedTypeSource"){switch(e.name){case"null":case"bool":case"num":case"str":case"any":case"void":{if(e.inner==null)return $i(e.name);break}case"arr":case"obj":{let t;return e.inner!=null?t=dr(e.inner):t=$i("any"),sf(e.name,[t])}}throw new re(`Unknown type: '${tn(e)}'`,e.loc.start)}else{const t=e.params.map(r=>dr(r));return af(t,dr(e.result))}}function of(e){switch(e.type){case"def":{e.varType!=null&&dr(e.varType);break}case"fn":{for(const t of e.params)t.argType!=null&&dr(t.argType);e.retType!=null&&dr(e.retType);break}}return e}function lf(e){for(const t of e)Q(t,of);return e}class sr{static instance;plugins;constructor(){this.plugins={validate:[nf,lf],transform:[]}}static parse(t){return sr.instance==null&&(sr.instance=new sr),sr.instance.parse(t)}addPlugin(t,r){switch(t){case"validate":this.plugins.validate.push(r);break;case"transform":this.plugins.transform.push(r);break;default:throw new Error("unknown plugin type")}}parse(t){let r;const n=new Sc(t);r=ef(n);for(const s of this.plugins.validate)r=s(r);for(const s of this.plugins.transform)r=s(r);return r}}function Fr(){return Fr=Object.assign||function(e){for(var t=1;t";return t},lineNumbersCount:function(){var t=this.codeData.split(/\r\n|\n/).length;return t}},mounted:function(){this._recordCurrentState(),this.styleLineNumbers()},methods:{setLineNumbersHeight:function(){this.lineNumbersHeight=getComputedStyle(this.$refs.pre).height},styleLineNumbers:function(){if(!(!this.lineNumbers||!this.autoStyleLineNumbers)){var t=this.$refs.pre,r=this.$el.querySelector(".prism-editor__line-numbers"),n=window.getComputedStyle(t);this.$nextTick(function(){var s="border-top-left-radius",i="border-bottom-left-radius";if(r){r.style[s]=n[s],r.style[i]=n[i],t.style[s]="0",t.style[i]="0";var a=["background-color","margin-top","padding-top","font-family","font-size","line-height"];a.forEach(function(o){r.style[o]=n[o]}),r.style["margin-bottom"]="-"+n["padding-top"]}})}},_recordCurrentState:function(){var t=this.$refs.textarea;if(t){var r=t.value,n=t.selectionStart,s=t.selectionEnd;this._recordChange({value:r,selectionStart:n,selectionEnd:s})}},_getLines:function(t,r){return t.substring(0,r).split(` `)},_applyEdits:function(t){var r=this.$refs.textarea,n=this.history.stack[this.history.offset];n&&r&&(this.history.stack[this.history.offset]=Fr({},n,{selectionStart:r.selectionStart,selectionEnd:r.selectionEnd})),this._recordChange(t),this._updateInput(t)},_recordChange:function(t,r){r===void 0&&(r=!1);var n=this.history,s=n.stack,i=n.offset;if(s.length&&i>-1){this.history.stack=s.slice(0,i+1);var a=this.history.stack.length;if(a>Ri){var o=a-Ri;this.history.stack=s.slice(o,a),this.history.offset=Math.max(this.history.offset-o,0)}}var l=Date.now();if(r){var f=this.history.stack[this.history.offset];if(f&&l-f.timestamp=h&&pe<=y&&X.startsWith(f)?X.substring(f.length):X}).join(` diff --git a/index.html b/index.html index 8cff72e5..d1df8d6a 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ AiScript Playground - +