diff --git a/src/launch.js b/src/launch.js index e2a60ac..eeda405 100644 --- a/src/launch.js +++ b/src/launch.js @@ -1,10 +1,10 @@ -(()=>{var Zt=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Me=e=>new Promise(function(t){let r=new MessageChannel;r.port1.onmessage=function(n){t(n.data)},navigator.serviceWorker.controller==null&&window.location.reload(),navigator.serviceWorker.controller.postMessage(e,[r.port2])}),Qt=()=>{Me({type:"SET_DIR_HANDLE",data:null}),clearInterval(Ae),Ae=null},H,Ae,Kn=()=>{Ae==null&&(Ae=setInterval(()=>{Me({type:"SET_DIR_HANDLE",data:H})},1e4))},Vn=async()=>(H=await globalThis.showDirectoryPicker(),await Me({type:"SET_DIR_HANDLE",data:H}),H),_t=e=>{e.navigator.serviceWorker.ready.then(()=>{e.navigator.serviceWorker.addEventListener("message",t=>{t.data.type=="GET_DIR_HANDLE"&&t.ports[0].postMessage(H)})})},Jn=()=>navigator.serviceWorker.register("service_worker.js").then(()=>navigator.serviceWorker.ready).then(()=>_t(globalThis)).then(()=>Me({type:"GET_DIR_HANDLE"})).then(async e=>{if(e==null||await e.queryPermission()!="granted")return null;try{await e.entries().next()}catch{return null}return H=e,H}),ut=async(e,t,r=!1,n)=>{typeof t=="string"&&(t=t.split("/"));let[l,...o]=t;if(o.length==0)return r?await e.getDirectoryHandle(l,n):await e.getFileHandle(l,n);{let i=await e.getDirectoryHandle(l);return ut(i,o,r,n)}},er=async(e,t)=>{let n=await(await ut(H,e)).createWritable();await n.write(t),await n.close()},Gn=e=>e.name=="node_modules"||e.name.startsWith("."),Xn=async e=>await(await e.getFile()).text(),tr=async(e,t)=>{if(e.kind=="directory"){let r=[];for await(let[n,l]of e)Gn(l)||r.push(l);return{name:e.name,path:t,kind:"directory",children:(await Promise.all(r.map(n=>tr(n,t==null?n.name:t+"/"+n.name)))).sort((n,l)=>n.name.localeCompare(l.name))}}else{if(e.kind=="file")return{name:e.name,path:t,kind:"file",contents:await Xn(e)};throw new Error("unknown kind")}},rr=(e,t)=>ut(H,e,t,{create:!0}),he=async e=>{let t;return e?t=await Vn():t=await Jn(),t==null?null:(Kn(),tr(t,null))};lr(window);function lr(e,t=!0){e.onerror=(r,n,l,o,i)=>{i?.__ignore||W.set_status(r)},t&&e.addEventListener("unhandledrejection",r=>{let n=r.reason;n.__ignore||W.set_status(n)})}var dt=new URL("./__leporello_files",globalThis.location),pt=e=>{let t=dt+"/";return e.html_file==""?t+"__leporello_blank.html":t+e.html_file+"?leporello"},nr=e=>{_t(e),me=!1,v("reload_app_window_finished",new Set(Object.getOwnPropertyNames(e)))},Y,or=e=>{me=!0,Y=document.createElement("iframe"),Y.src=pt(e),Y.setAttribute("hidden",""),document.body.appendChild(Y),lr(Y.contentWindow,!1),globalThis.app_window=Y.contentWindow,sr(globalThis.app_window)},ir=e=>{me=!0,v("open_app_window"),globalThis.app_window.close(),globalThis.app_window=open(pt(e)),sr(globalThis.app_window)},sr=e=>{let t=()=>{let l=e.performance.getEntriesByType("navigation")[0];return l!=null&&l.loadEventEnd>0},r=()=>{t()?(n(),nr(e)):e.addEventListener("load",()=>{n(),nr(e)},{once:!0})},n=()=>{e.addEventListener("unload",l=>{setTimeout(()=>{e.closed&&e==globalThis.app_window?(globalThis.app_window=Y.contentWindow,ft($())):r()},100)})};r()},me=!1,ft=e=>{if(!me){if(me=!0,e==null)throw new Error("illegal state");globalThis.app_window.location=pt(e)}};var Yn=e=>e instanceof Error||e instanceof globalThis.app_window.Error,Zn=e=>e?.[Symbol.toStringTag]=="Promise",ht=e=>e.clazz==null||e.clazz=="Object",Ne=e=>e==null?null:e.clazz=="Promise"?e.status==null?null:Ne(e.status.ok?e.status.value:e.status.error):e.array_entries!=null?Array.from(e.array_entries).map((t,r)=>[r,t]):e.object_entries,ar=e=>{if(e.string!=null)return e.string;let t=e.array_entries??e.object_entries;return t==null?"":["Array","Set","Map"].includes(e.clazz)?e.clazz+"("+t.length+")":ht(e)?"":e.clazz},q=(e,t=!1)=>{let r=typeof e;if(e===null)return"null";if(e===void 0)return"undefined";if(r=="function")return"fn "+e.name;if(r=="string")return JSON.stringify(e);if(r!="object")return e.toString();if(e.string!=null)return e.string;if(e.clazz=="Promise")return e.status==null?"Promise":e.status.ok?`Promise`:`Promise`;if(e.array_entries!=null){if(t)return e.clazz+"("+e.array_entries.length+")";{let[l,o,i]=e.clazz=="Array"?["[","]",""]:["{","}",e.clazz+" "];return i+l+e.array_entries.map(s=>q(s,!0)).join(", ")+o}}let n=ht(e)?"":e.clazz+" ";if(t)return ht(e)?e.object_entries.length==0?n+"{}":"{\u2026}":e.clazz;{let l="{"+e.object_entries.map(([o,i])=>{let s=e.clazz=="Map"?q(o,!0):o,a=q(i,!0);return`${s}: ${a}`}).join(", ")+"}";return n+l}},ze=e=>{let t=typeof e;return e===null?"null":e===void 0?"undefined":t=="function"?"fn "+e.name:t=="string"?JSON.stringify(e):t!="object"?e.toString():Zn(e)?e.status==null?"Promise ":e.status.ok?`Promise `:`Promise `:Yn(e)?e.toString():Array.isArray(e)?"[\u2026]":(e.constructor?.name==null||e.constructor?.name=="Object"?"":e.constructor.name+" ")+"{\u2026}"};function d(e,t,...r){let n=document.createElement(e);if(typeof t=="string")n.setAttribute("class",t);else{let l=t;for(let o in l){let i=l[o];["change","click"].includes(o)?n.addEventListener(o,i):o=="checked"?l[o]&&n.setAttribute(o,"checked"):n.setAttribute(o,i)}}return r.forEach(l=>{let o=i=>{if(typeof i>"u")throw new Error("illegal state");i!==null&&i!==!1&&n.appendChild(typeof i=="string"?document.createTextNode(i):i)};Array.isArray(l)?l.forEach(o):o(l)}),n}function Qn(e){let t=e.__location==null?`${e.name}`:`fn ${e.name}`,r=document.createElement("div");r.innerHTML=t;let n=r.children[0];return e.__location!=null&&n.addEventListener("click",l=>{l.stopPropagation(),v("goto_location",e.__location)}),n}function P(e){return typeof e=="function"?Qn(e):ze(e)}function oe(e,t=", "){let r=[];for(let n=0;n{t.offsetTop-e.scrollTop-e.offsetTop<0&&t.scrollIntoView(!0),t.offsetTop-e.scrollTop-e.offsetTop-e.clientHeight+t.clientHeight>0&&t.scrollIntoView(!1)};var Z=(e,t)=>{if(t.length!=0){let[r,...n]=t,l=Ne(e).find(([o,i])=>o==r)[1];return Z(l,n)}else{let r=Ne(e),n=r!=null&&r.length>0;return{displayed_entries:r,header:q(e),short_header:n?ar(e):null,is_exp:n}}},Fe=class{constructor({container:t,event_target:r=t,scroll_to_element:n,on_escape:l=()=>{},on_enter:o=()=>{}}={}){this.container=t,this.scroll_to_element=n,this.on_escape=l,r.addEventListener("keydown",i=>{if(i.key=="F1"){this.on_escape();return}if(i.key=="Enter"){o();return}let s=Z(this.value,this.current_path);if(i.key=="ArrowDown"||i.key=="j")if(i.preventDefault(),s.is_exp&&this.is_expanded(this.current_path))this.select_path(this.current_path.concat(s.displayed_entries[0][0]));else{let a=c=>{if(c.length==0)return null;let u=c.slice(0,c.length-1),p=Z(this.value,u).displayed_entries,f=p.findIndex(([m,y])=>m==c[c.length-1]),h=p[f+1];return h==null?a(u):[...u,h[0]]},_=a(this.current_path);_!=null&&this.select_path(_)}if(i.key=="ArrowUp"||i.key=="k"){if(i.preventDefault(),this.current_path.length==0){this.on_escape();return}let a=this.current_path.slice(0,this.current_path.length-1),_=Z(this.value,a).displayed_entries,c=_.findIndex(([p,f])=>p==this.current_path[this.current_path.length-1]),u=_[c-1];if(u==null)this.select_path(a);else{let p=f=>{let h=Z(this.value,f);if(!h.is_exp||!this.is_expanded(f))return f;{let m=h.displayed_entries.map(([y,x])=>y);return p([...f,m[m.length-1]])}};this.select_path(p([...a,u[0]]))}}if(i.key=="ArrowLeft"||i.key=="h"){i.preventDefault();let a=this.is_expanded(this.current_path);if(!s.is_exp||!a)if(this.current_path.length!=0){let _=this.current_path.slice(0,this.current_path.length-1);this.select_path(_)}else this.on_escape();else this.toggle_expanded()}if((i.key=="ArrowRight"||i.key=="l")&&(i.preventDefault(),s.is_exp))if(!this.is_expanded(this.current_path))this.toggle_expanded();else{let _=Z(this.value,this.current_path).displayed_entries;this.select_path([...this.current_path,_[0][0]])}})}get_node_data(t,r=this.node_data){if(t.length==0)return r;{let[n,...l]=t;return this.get_node_data(l,r.children[n])}}is_expanded(t){return this.get_node_data(t).is_expanded}on_click(t){this.select_path(t),this.toggle_expanded()}render(t,r,n){this.value=r,this.node_data=n;let l=[];this.container.appendChild(this.render_value_explorer_node(l,this.node_data)),this.select_path(l)}select_path(t){if(this.current_path!=null&&this.set_active(this.current_path,!1),this.current_path=t,this.set_active(this.current_path,!0),document.contains(this.container)){let r=this.get_node_data(t).el.getElementsByClassName("value_explorer_header")[0];this.scroll_to_element==null?ie(this.container.parentNode,r):this.scroll_to_element(r)}}set_active(t,r){let n=this.get_node_data(t).el.getElementsByClassName("value_explorer_header")[0];r?n.classList.add("active"):n.classList.remove("active")}set_expanded(t){if(typeof t=="boolean")return this.set_expanded(()=>t);let r=this.get_node_data(this.current_path);r.is_expanded=t(r.is_expanded);let n=r.el,l=this.render_value_explorer_node(this.current_path,r);n.parentNode.replaceChild(l,n)}toggle_expanded(){this.set_expanded(t=>!t),this.set_active(this.current_path,!0)}render_value_explorer_node(t,r){let n=t.length==0,l=t.at(-1),{displayed_entries:o,header:i,short_header:s,is_exp:a}=Z(this.value,t),_=a&&r.is_expanded;r.children??={};let c=d("div","value_explorer_node",d("span",{class:"value_explorer_header",click:this.on_click.bind(this,t)},d("span","expand_icon",a?_?"\u25BC":"\u25B6":"\xA0"),n?null:d("span","value_explorer_key",typeof l=="string"?l:q(l),": "),n||!a||!_?i:l=="*arguments*"?"":s),a&&_?o.map(([u,p])=>(r.children[u]??={},this.render_value_explorer_node([...t,u],r.children[u]))):[]);return r.el=c,c}};var el=(e,{on_change:t,on_change_selection:r,is_change_selection_supressed:n,on_change_immediate:l})=>{let i,s=()=>{i={}};s();let a=()=>{i.change_args!=null?t(...i.change_args):i.change_selection_args!=null&&r(...i.change_selection_args),s()};e.on("change",(..._)=>{l(),i.tid!=null&&clearTimeout(i.tid),i.change_args=_,i.tid=setTimeout(()=>{i.tid=null,a()},1e3)}),e.on("changeSelection",(..._)=>{n()||i.tid==null&&(i.change_selection_args=_,i.is_flush_set||(i.is_flush_set=!0,Promise.resolve().then(()=>{i.tid==null&&a()})))})},De=class{constructor(t,r){this.ui=t,this.editor_container=r,this.make_resizable(),this.markers={},this.sessions={},this.ace_editor=globalThis.ace.edit(this.editor_container),this.ace_editor.setOptions({behavioursEnabled:!1,scrollPastEnd:100,enableLiveAutocompletion:!1,enableBasicAutocompletion:!0}),el(this.ace_editor,{on_change:()=>{try{v("input",this.ace_editor.getValue(),this.get_cursor_position())}catch(n){console.error(n),this.ui.set_status(n.message)}},on_change_immediate:()=>{this.unembed_value_explorer()},on_change_selection:()=>{try{this.is_change_selection_supressed||v("move_cursor",this.get_cursor_position())}catch(n){console.error(n),this.ui.set_status(n.message)}},is_change_selection_supressed:()=>this.is_change_selection_supressed}),this.focus(),this.init_keyboard()}focus(){this.ace_editor.focus()}supress_change_selection(t){try{this.is_change_selection_supressed=!0,t()}finally{this.is_change_selection_supressed=!1}}ensure_session(t,r){let n=this.sessions[t];return n==null&&(n=globalThis.ace.createEditSession(r),this.sessions[t]=n,n.setUseWorker(!1),n.setOptions({mode:"ace/mode/javascript",tabSize:2,useSoftTabs:!0})),n}get_session(t){return this.sessions[t]}switch_session(t){this.supress_change_selection(()=>{this.ace_editor.setSession(this.get_session(t))})}has_value_explorer(){return this.value_explorer!=null}unembed_value_explorer(){if(!this.has_value_explorer())return null;let t=this.ace_editor.getSession(),r=this.value_explorer.el.getBoundingClientRect().bottom;if(t.widgetManager.removeLineWidget(this.value_explorer),this.value_explorer.is_dom_el){let n=t.selection.getCursor().row-this.value_explorer.row;if(n>0){let l=this.ace_editor.renderer.lineHeight,o=r-this.editor_container.getBoundingClientRect().bottom;o>0&&t.setScrollTop(t.getScrollTop()-o-l*n)}}this.value_explorer=null}update_value_explorer_margin(){if(this.value_explorer!=null){let t=this.ace_editor.getSession(),r=0;for(let n=this.value_explorer.row;n<=this.ace_editor.renderer.getLastVisibleRow();n++)r=Math.max(r,t.getLine(n).length);this.value_explorer.content.style.marginLeft=r+1+"ch"}}embed_value_explorer(t,{index:r,length:n,result:{ok:l,value:o,error:i,is_calltree_node_explorer:s}}){this.unembed_value_explorer();let a=this.ace_editor.getSession(),_,c=d("div",{class:"embed_value_explorer_container"},d("div",{class:"embed_value_explorer_wrapper"},_=d("div",{class:"embed_value_explorer_content",tabindex:0}))),u,p=()=>{u!=null&&a.setScrollTop(u),this.value_explorer.return_to==null?this.focus():this.value_explorer.return_to.focus()},f=()=>{v("step_into")};c.addEventListener("keydown",x=>{x.key=="Escape"&&p()});let h=t.selection_state?.node;h!=null&&h.type=="function_call"&&_.append(d("a",{href:"javascript: void(0)",class:"embed_value_explorer_control",click:f},"Step into call (Enter)"));let m;if(l)if(o?.dom_node!=null)if(m=!0,o.is_svg){let x=document.createElementNS("http://www.w3.org/2000/svg","svg");x.appendChild(o.dom_node),_.appendChild(x)}else _.appendChild(o.dom_node);else{m=!1;let x=new Fe({container:_,event_target:c,on_escape:p,on_enter:f,scroll_to_element:E=>{u==null&&(u=a.getScrollTop());let M=E.getBoundingClientRect().bottom-this.editor_container.getBoundingClientRect().bottom;M>0&&a.setScrollTop(a.getScrollTop()+M);let Pe=this.editor_container.getBoundingClientRect().top-E.getBoundingClientRect().top;Pe>0&&a.setScrollTop(a.getScrollTop()-Pe)}});s?x.render(t,{object_entries:Object.entries(o)},{is_expanded:!0,children:{"*arguments*":{is_expanded:!0}}}):x.render(t,o,{is_expanded:!0})}else m=!1,_.appendChild(d("span","eval_error",i==null?""+i:i.toString()));let y=this.value_explorer={selected_node:h,row:m?a.doc.indexToPosition(r+n).row:a.doc.indexToPosition(r).row,fixedWidth:!0,el:c,content:_,is_dom_el:m};if(!a.widgetManager){let x=Zt("ace/line_widgets").LineWidgets;a.widgetManager=new x(a),a.widgetManager.attach(this.ace_editor)}if(m)c.classList.add("is_dom_el"),a.widgetManager.addLineWidget(y);else{c.classList.add("is_not_dom_el");let x=this.ace_editor.renderer.lineHeight;_.style.transform=`translate(0px, -${x}px)`,c.style.display="none",a.widgetManager.addLineWidget(y),setTimeout(()=>{this.update_value_explorer_margin(),c.style.display=""},0)}}focus_value_explorer(t){this.value_explorer!=null&&(this.value_explorer.return_to=t,this.value_explorer.content.focus({preventScroll:!0}))}set_keyboard_handler(t){t!=null&&(localStorage.keyboard=t),this.ace_editor.setKeyboardHandler(t=="vim"?"ace/keyboard/vim":null)}init_keyboard(){this.set_keyboard_handler(localStorage.keyboard),this.ace_editor.keyBinding.addKeyboardHandler((r,n,l,o,i)=>{if(l=="return"&&this.value_explorer?.selected_node?.type=="function_call")return v("step_into"),{command:"null"}});let t=Zt("ace/keyboard/vim").CodeMirror.Vim;this.ace_editor.commands.removeCommand("openCommandPallete"),this.ace_editor.commands.removeCommand("toggleFoldWidget"),this.ace_editor.commands.removeCommand("goToNextError"),this.ace_editor.commands.bindKey("F5","goto_definition"),t._mapCommand({keys:"gd",type:"action",action:"aceCommand",actionArgs:{name:"goto_definition"}}),this.ace_editor.commands.addCommand({name:"goto_definition",exec:r=>{this.goto_definition()}}),this.ace_editor.commands.bindKey("F1","focus_value_explorer"),this.ace_editor.commands.addCommand({name:"focus_value_explorer",exec:r=>{this.focus_value_explorer()}}),this.ace_editor.commands.bindKey("F11","step_into"),this.ace_editor.commands.addCommand({name:"step_into",exec:r=>{v("step_into")}}),this.ace_editor.commands.bindKey("Shift-F11","step_out"),this.ace_editor.commands.addCommand({name:"step_out",exec:r=>{v("calltree.arrow_left")}}),this.ace_editor.commands.addCommand({name:"expand_selection",exec:()=>{v("eval_selection",this.get_cursor_position(),!0)}}),this.ace_editor.commands.addCommand({name:"collapse_selection",exec:()=>{v("eval_selection",this.get_cursor_position(),!1)}}),this.ace_editor.commands.bindKey("ctrl-j","expand_selection"),this.ace_editor.commands.bindKey("ctrl-down","expand_selection"),this.ace_editor.commands.bindKey("ctrl-k","collapse_selection"),this.ace_editor.commands.bindKey("ctrl-up","collapse_selection"),this.ace_editor.commands.addCommand({name:"edit",exec:(r,n)=>{let l=n.args==null?"":n.args[0];v("change_current_module",l)}}),t.defineEx("edit","e",function(r,n){r.ace.execCommand("edit",n)}),this.ace_editor.commands.addCommand({name:"buffer",exec:(r,n)=>{let l=n.args==null?"":n.args[0],o=l==""?"":Object.keys($().files).find(i=>i.includes(l));o!=null&&v("change_current_module",o)}}),t.defineEx("buffer","b",function(r,n){r.ace.execCommand("buffer",n)}),t.map("jj","","insert")}add_marker(t,r,n,l){let o=this.get_session(t),i=o.doc.indexToPosition(n),s=o.doc.indexToPosition(l),a=o.addMarker(new globalThis.ace.Range(i.row,i.column,s.row,s.column),r);this.markers[t]==null&&(this.markers[t]=[]),this.markers[t].push({className:r,from:n,to:l,markerId:a})}remove_markers_of_type(t,r){this.markers[t]==null&&(this.markers[t]=[]);let n=this.markers[t].filter(o=>o.className==r),l=this.get_session(t);for(let o of n)l.removeMarker(o.markerId);this.markers[t]=this.markers[t].filter(o=>o.className!=r)}get_cursor_position(t){let r=t==null?this.ace_editor.getSession():this.get_session(t);if(r==null)throw new Error("illegal state");return r.doc.positionToIndex(r.selection.getCursor())}set_cursor_position(t){if(t==null)throw new Error("illegal state");this.supress_change_selection(()=>{let r=this.ace_editor.session.doc.indexToPosition(t);this.ace_editor.moveCursorToPosition(r),this.ace_editor.clearSelection();let n=this.ace_editor.renderer.getFirstVisibleRow(),l=this.ace_editor.renderer.getLastVisibleRow();(r.rowl)&&this.ace_editor.scrollToLine(r.row)})}goto_definition(){let t=this.get_cursor_position();v("goto_definition",t)}for_each_session(t){for(let r in this.sessions)t(r,this.sessions[r])}make_resizable(){let t=()=>{this.editor_container.style.height=localStorage.editor_height+"vh"},r=new Date().getTime();window.addEventListener("resize",()=>{r=new Date().getTime()}),localStorage.editor_height!=null&&t();let n=!0;new ResizeObserver(l=>{if(n){n=!1;return}if(new Date().getTime()-r<100)return;this.ace_editor.resize();let o=this.editor_container.offsetHeight/window.innerHeight*100;localStorage.editor_height=o,setTimeout(t,0)}).observe(this.editor_container)}};var mi=new Function("arr","pred",` +(()=>{var Qt=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Ne=e=>new Promise(function(t){let r=new MessageChannel;r.port1.onmessage=function(n){t(n.data)},navigator.serviceWorker.controller==null&&window.location.reload(),navigator.serviceWorker.controller.postMessage(e,[r.port2])}),er=()=>{Ne({type:"SET_DIR_HANDLE",data:null}),clearInterval(ze),ze=null},H,ze,Vn=()=>{ze==null&&(ze=setInterval(()=>{Ne({type:"SET_DIR_HANDLE",data:H})},1e4))},Jn=async()=>(H=await globalThis.showDirectoryPicker(),await Ne({type:"SET_DIR_HANDLE",data:H}),H),dt=e=>{e.navigator.serviceWorker.ready.then(()=>{e.navigator.serviceWorker.addEventListener("message",t=>{t.data.type=="GET_DIR_HANDLE"&&t.ports[0].postMessage(H)})})},Gn=()=>navigator.serviceWorker.register("service_worker.js").then(()=>navigator.serviceWorker.ready).then(()=>dt(globalThis)).then(()=>Ne({type:"GET_DIR_HANDLE"})).then(async e=>{if(e==null||await e.queryPermission()!="granted")return null;try{await e.entries().next()}catch{return null}return H=e,H}),pt=async(e,t,r=!1,n)=>{typeof t=="string"&&(t=t.split("/"));let[l,...o]=t;if(o.length==0)return r?await e.getDirectoryHandle(l,n):await e.getFileHandle(l,n);{let i=await e.getDirectoryHandle(l);return pt(i,o,r,n)}},tr=async(e,t)=>{let n=await(await pt(H,e)).createWritable();await n.write(t),await n.close()},Xn=e=>e.name=="node_modules"||e.name.startsWith("."),Yn=async e=>await(await e.getFile()).text(),rr=async(e,t)=>{if(e.kind=="directory"){let r=[];for await(let[n,l]of e)Xn(l)||r.push(l);return{name:e.name,path:t,kind:"directory",children:(await Promise.all(r.map(n=>rr(n,t==null?n.name:t+"/"+n.name)))).sort((n,l)=>n.name.localeCompare(l.name))}}else{if(e.kind=="file")return{name:e.name,path:t,kind:"file",contents:await Yn(e)};throw new Error("unknown kind")}},nr=(e,t)=>pt(H,e,t,{create:!0}),me=async e=>{let t;return e?t=await Jn():t=await Gn(),t==null?null:(Vn(),rr(t,null))};or(window);function or(e,t=!0){e.onerror=(r,n,l,o,i)=>{i?.__ignore||W.set_status(r)},t&&e.addEventListener("unhandledrejection",r=>{let n=r.reason;n.__ignore||W.set_status(n)})}var ft=new URL("./__leporello_files",globalThis.location),ht=e=>{let t=ft+"/";return e.html_file==""?t+"__leporello_blank.html":t+e.html_file+"?leporello"},lr=e=>{dt(e),ge=!1,v("reload_app_window_finished",new Set(Object.getOwnPropertyNames(e)))},Y,ir=e=>{ge=!0,Y=document.createElement("iframe"),Y.src=ht(e),Y.setAttribute("hidden",""),document.body.appendChild(Y),or(Y.contentWindow,!1),globalThis.app_window=Y.contentWindow,ar(globalThis.app_window)},sr=e=>{ge=!0,v("open_app_window"),globalThis.app_window.close(),globalThis.app_window=open(ht(e)),ar(globalThis.app_window)},ar=e=>{let t=()=>{let l=e.performance.getEntriesByType("navigation")[0];return l!=null&&l.loadEventEnd>0},r=()=>{t()?(n(),lr(e)):e.addEventListener("load",()=>{n(),lr(e)},{once:!0})},n=()=>{e.addEventListener("unload",l=>{setTimeout(()=>{e.closed&&e==globalThis.app_window?(globalThis.app_window=Y.contentWindow,mt($())):r()},100)})};r()},ge=!1,mt=e=>{if(!ge){if(ge=!0,e==null)throw new Error("illegal state");globalThis.app_window.location=ht(e)}};var Zn=e=>e instanceof Error||e instanceof globalThis.app_window.Error,Qn=e=>e?.[Symbol.toStringTag]=="Promise",gt=e=>e.clazz==null||e.clazz=="Object",De=e=>e==null?null:e.clazz=="Promise"?e.status==null?null:De(e.status.ok?e.status.value:e.status.error):e.array_entries!=null?Array.from(e.array_entries).map((t,r)=>[r,t]):e.object_entries,cr=e=>{if(e.string!=null)return e.string;let t=e.array_entries??e.object_entries;return t==null?"":["Array","Set","Map"].includes(e.clazz)?e.clazz+"("+t.length+")":gt(e)?"":e.clazz},q=(e,t=!1)=>{let r=typeof e;if(e===null)return"null";if(e===void 0)return"undefined";if(r=="function")return"fn "+e.name;if(r=="string")return JSON.stringify(e);if(r!="object")return e.toString();if(e.string!=null)return e.string;if(e.clazz=="Promise")return e.status==null?"Promise":e.status.ok?`Promise`:`Promise`;if(e.array_entries!=null){if(t)return e.clazz+"("+e.array_entries.length+")";{let[l,o,i]=e.clazz=="Array"?["[","]",""]:["{","}",e.clazz+" "];return i+l+e.array_entries.map(s=>q(s,!0)).join(", ")+o}}let n=gt(e)?"":e.clazz+" ";if(t)return gt(e)?e.object_entries.length==0?n+"{}":"{\u2026}":e.clazz;{let l="{"+e.object_entries.map(([o,i])=>{let s=e.clazz=="Map"?q(o,!0):o,a=q(i,!0);return`${s}: ${a}`}).join(", ")+"}";return n+l}},Fe=e=>{let t=typeof e;return e===null?"null":e===void 0?"undefined":t=="function"?"fn "+e.name:t=="string"?JSON.stringify(e):t!="object"?e.toString():Qn(e)?e.status==null?"Promise ":e.status.ok?`Promise `:`Promise `:Zn(e)?e.toString():Array.isArray(e)?"[\u2026]":(e.constructor?.name==null||e.constructor?.name=="Object"?"":e.constructor.name+" ")+"{\u2026}"};function d(e,t,...r){let n=document.createElement(e);if(typeof t=="string")n.setAttribute("class",t);else{let l=t;for(let o in l){let i=l[o];["change","click"].includes(o)?n.addEventListener(o,i):o=="checked"?l[o]&&n.setAttribute(o,"checked"):n.setAttribute(o,i)}}return r.forEach(l=>{let o=i=>{if(typeof i>"u")throw new Error("illegal state");i!==null&&i!==!1&&n.appendChild(typeof i=="string"?document.createTextNode(i):i)};Array.isArray(l)?l.forEach(o):o(l)}),n}function el(e){let t=e.__location==null?`${e.name}`:`fn ${e.name}`,r=document.createElement("div");r.innerHTML=t;let n=r.children[0];return e.__location!=null&&n.addEventListener("click",l=>{l.stopPropagation(),v("goto_location",e.__location)}),n}function L(e){return typeof e=="function"?el(e):Fe(e)}function oe(e,t=", "){let r=[];for(let n=0;n{t.offsetTop-e.scrollTop-e.offsetTop<0&&t.scrollIntoView(!0),t.offsetTop-e.scrollTop-e.offsetTop-e.clientHeight+t.clientHeight>0&&t.scrollIntoView(!1)};var Z=(e,t)=>{if(t.length!=0){let[r,...n]=t,l=De(e).find(([o,i])=>o==r)[1];return Z(l,n)}else{let r=De(e),n=r!=null&&r.length>0;return{displayed_entries:r,header:q(e),short_header:n?cr(e):null,is_exp:n}}},Re=class{constructor({container:t,event_target:r=t,scroll_to_element:n,on_escape:l=()=>{},on_enter:o=()=>{}}={}){this.container=t,this.scroll_to_element=n,this.on_escape=l,r.addEventListener("keydown",i=>{if(i.key=="F1"){this.on_escape();return}if(i.key=="Enter"){o();return}let s=Z(this.value,this.current_path);if(i.key=="ArrowDown"||i.key=="j")if(i.preventDefault(),s.is_exp&&this.is_expanded(this.current_path))this.select_path(this.current_path.concat(s.displayed_entries[0][0]));else{let a=c=>{if(c.length==0)return null;let u=c.slice(0,c.length-1),p=Z(this.value,u).displayed_entries,f=p.findIndex(([m,y])=>m==c[c.length-1]),h=p[f+1];return h==null?a(u):[...u,h[0]]},_=a(this.current_path);_!=null&&this.select_path(_)}if(i.key=="ArrowUp"||i.key=="k"){if(i.preventDefault(),this.current_path.length==0){this.on_escape();return}let a=this.current_path.slice(0,this.current_path.length-1),_=Z(this.value,a).displayed_entries,c=_.findIndex(([p,f])=>p==this.current_path[this.current_path.length-1]),u=_[c-1];if(u==null)this.select_path(a);else{let p=f=>{let h=Z(this.value,f);if(!h.is_exp||!this.is_expanded(f))return f;{let m=h.displayed_entries.map(([y,x])=>y);return p([...f,m[m.length-1]])}};this.select_path(p([...a,u[0]]))}}if(i.key=="ArrowLeft"||i.key=="h"){i.preventDefault();let a=this.is_expanded(this.current_path);if(!s.is_exp||!a)if(this.current_path.length!=0){let _=this.current_path.slice(0,this.current_path.length-1);this.select_path(_)}else this.on_escape();else this.toggle_expanded()}if((i.key=="ArrowRight"||i.key=="l")&&(i.preventDefault(),s.is_exp))if(!this.is_expanded(this.current_path))this.toggle_expanded();else{let _=Z(this.value,this.current_path).displayed_entries;this.select_path([...this.current_path,_[0][0]])}})}get_node_data(t,r=this.node_data){if(t.length==0)return r;{let[n,...l]=t;return this.get_node_data(l,r.children[n])}}is_expanded(t){return this.get_node_data(t).is_expanded}on_click(t){this.select_path(t),this.toggle_expanded()}render(t,r,n){this.value=r,this.node_data=n;let l=[];this.container.appendChild(this.render_value_explorer_node(l,this.node_data)),this.select_path(l)}select_path(t){if(this.current_path!=null&&this.set_active(this.current_path,!1),this.current_path=t,this.set_active(this.current_path,!0),document.contains(this.container)){let r=this.get_node_data(t).el.getElementsByClassName("value_explorer_header")[0];this.scroll_to_element==null?ie(this.container.parentNode,r):this.scroll_to_element(r)}}set_active(t,r){let n=this.get_node_data(t).el.getElementsByClassName("value_explorer_header")[0];r?n.classList.add("active"):n.classList.remove("active")}set_expanded(t){if(typeof t=="boolean")return this.set_expanded(()=>t);let r=this.get_node_data(this.current_path);r.is_expanded=t(r.is_expanded);let n=r.el,l=this.render_value_explorer_node(this.current_path,r);n.parentNode.replaceChild(l,n)}toggle_expanded(){this.set_expanded(t=>!t),this.set_active(this.current_path,!0)}render_value_explorer_node(t,r){let n=t.length==0,l=t.at(-1),{displayed_entries:o,header:i,short_header:s,is_exp:a}=Z(this.value,t),_=a&&r.is_expanded;r.children??={};let c=d("div","value_explorer_node",d("span",{class:"value_explorer_header",click:this.on_click.bind(this,t)},d("span","expand_icon",a?_?"\u25BC":"\u25B6":"\xA0"),n?null:d("span","value_explorer_key",typeof l=="string"?l:q(l),": "),n||!a||!_?i:l=="*arguments*"?"":s),a&&_?o.map(([u,p])=>(r.children[u]??={},this.render_value_explorer_node([...t,u],r.children[u]))):[]);return r.el=c,c}};var tl=(e,{on_change:t,on_change_selection:r,is_change_selection_supressed:n,on_change_immediate:l})=>{let i,s=()=>{i={}};s();let a=()=>{i.change_args!=null?t(...i.change_args):i.change_selection_args!=null&&r(...i.change_selection_args),s()};e.on("change",(..._)=>{l(),i.tid!=null&&clearTimeout(i.tid),i.change_args=_,i.tid=setTimeout(()=>{i.tid=null,a()},1e3)}),e.on("changeSelection",(..._)=>{n()||i.tid==null&&(i.change_selection_args=_,i.is_flush_set||(i.is_flush_set=!0,Promise.resolve().then(()=>{i.tid==null&&a()})))})},Ie=class{constructor(t,r){this.ui=t,this.editor_container=r,this.make_resizable(),this.markers={},this.sessions={},this.ace_editor=globalThis.ace.edit(this.editor_container),this.ace_editor.setOptions({behavioursEnabled:!1,scrollPastEnd:100,enableLiveAutocompletion:!1,enableBasicAutocompletion:!0}),tl(this.ace_editor,{on_change:()=>{try{v("input",this.ace_editor.getValue(),this.get_cursor_position())}catch(n){console.error(n),this.ui.set_status(n.message)}},on_change_immediate:()=>{this.unembed_value_explorer()},on_change_selection:()=>{try{this.is_change_selection_supressed||v("move_cursor",this.get_cursor_position())}catch(n){console.error(n),this.ui.set_status(n.message)}},is_change_selection_supressed:()=>this.is_change_selection_supressed}),this.focus(),this.init_keyboard()}focus(){this.ace_editor.focus()}supress_change_selection(t){try{this.is_change_selection_supressed=!0,t()}finally{this.is_change_selection_supressed=!1}}ensure_session(t,r){let n=this.sessions[t];return n==null&&(n=globalThis.ace.createEditSession(r),this.sessions[t]=n,n.setUseWorker(!1),n.setOptions({mode:"ace/mode/javascript",tabSize:2,useSoftTabs:!0})),n}get_session(t){return this.sessions[t]}switch_session(t){this.supress_change_selection(()=>{this.ace_editor.setSession(this.get_session(t))})}has_value_explorer(){return this.value_explorer!=null}unembed_value_explorer(){if(!this.has_value_explorer())return null;let t=this.ace_editor.getSession(),r=this.value_explorer.el.getBoundingClientRect().bottom;if(t.widgetManager.removeLineWidget(this.value_explorer),this.value_explorer.is_dom_el){let n=t.selection.getCursor().row-this.value_explorer.row;if(n>0){let l=this.ace_editor.renderer.lineHeight,o=r-this.editor_container.getBoundingClientRect().bottom;o>0&&t.setScrollTop(t.getScrollTop()-o-l*n)}}this.value_explorer=null}update_value_explorer_margin(){if(this.value_explorer!=null){let t=this.ace_editor.getSession(),r=0;for(let n=this.value_explorer.row;n<=this.ace_editor.renderer.getLastVisibleRow();n++)r=Math.max(r,t.getLine(n).length);this.value_explorer.content.style.marginLeft=r+1+"ch"}}embed_value_explorer(t,{index:r,length:n,result:{ok:l,value:o,error:i,is_calltree_node_explorer:s}}){this.unembed_value_explorer();let a=this.ace_editor.getSession(),_,c=d("div",{class:"embed_value_explorer_container"},d("div",{class:"embed_value_explorer_wrapper"},_=d("div",{class:"embed_value_explorer_content",tabindex:0}))),u,p=()=>{u!=null&&a.setScrollTop(u),this.value_explorer.return_to==null?this.focus():this.value_explorer.return_to.focus()},f=()=>{v("step_into")};c.addEventListener("keydown",x=>{x.key=="Escape"&&p()});let h=t.selection_state?.node;h!=null&&h.type=="function_call"&&_.append(d("a",{href:"javascript: void(0)",class:"embed_value_explorer_control",click:f},"Step into call (Enter)"));let m;if(l)if(o?.dom_node!=null)if(m=!0,o.is_svg){let x=document.createElementNS("http://www.w3.org/2000/svg","svg");x.appendChild(o.dom_node),_.appendChild(x)}else _.appendChild(o.dom_node);else{m=!1;let x=new Re({container:_,event_target:c,on_escape:p,on_enter:f,scroll_to_element:E=>{u==null&&(u=a.getScrollTop());let A=E.getBoundingClientRect().bottom-this.editor_container.getBoundingClientRect().bottom;A>0&&a.setScrollTop(a.getScrollTop()+A);let Me=this.editor_container.getBoundingClientRect().top-E.getBoundingClientRect().top;Me>0&&a.setScrollTop(a.getScrollTop()-Me)}});s?x.render(t,{object_entries:Object.entries(o)},{is_expanded:!0,children:{"*arguments*":{is_expanded:!0}}}):x.render(t,o,{is_expanded:!0})}else m=!1,_.appendChild(d("span","eval_error",i==null?""+i:i.toString()));let y=this.value_explorer={selected_node:h,row:m?a.doc.indexToPosition(r+n).row:a.doc.indexToPosition(r).row,fixedWidth:!0,el:c,content:_,is_dom_el:m};if(!a.widgetManager){let x=Qt("ace/line_widgets").LineWidgets;a.widgetManager=new x(a),a.widgetManager.attach(this.ace_editor)}if(m)c.classList.add("is_dom_el"),a.widgetManager.addLineWidget(y);else{c.classList.add("is_not_dom_el");let x=this.ace_editor.renderer.lineHeight;_.style.transform=`translate(0px, -${x}px)`,c.style.display="none",a.widgetManager.addLineWidget(y),setTimeout(()=>{this.update_value_explorer_margin(),c.style.display=""},0)}}focus_value_explorer(t){this.value_explorer!=null&&(this.value_explorer.return_to=t,this.value_explorer.content.focus({preventScroll:!0}))}set_keyboard_handler(t){t!=null&&(localStorage.keyboard=t),this.ace_editor.setKeyboardHandler(t=="vim"?"ace/keyboard/vim":null)}init_keyboard(){this.set_keyboard_handler(localStorage.keyboard),this.ace_editor.keyBinding.addKeyboardHandler((r,n,l,o,i)=>{if(l=="return"&&this.value_explorer?.selected_node?.type=="function_call")return v("step_into"),{command:"null"}});let t=Qt("ace/keyboard/vim").CodeMirror.Vim;this.ace_editor.commands.removeCommand("openCommandPallete"),this.ace_editor.commands.removeCommand("toggleFoldWidget"),this.ace_editor.commands.removeCommand("goToNextError"),this.ace_editor.commands.bindKey("F5","goto_definition"),t._mapCommand({keys:"gd",type:"action",action:"aceCommand",actionArgs:{name:"goto_definition"}}),this.ace_editor.commands.addCommand({name:"goto_definition",exec:r=>{this.goto_definition()}}),this.ace_editor.commands.bindKey("F1","focus_value_explorer"),this.ace_editor.commands.addCommand({name:"focus_value_explorer",exec:r=>{this.focus_value_explorer()}}),this.ace_editor.commands.bindKey("F11","step_into"),this.ace_editor.commands.addCommand({name:"step_into",exec:r=>{v("step_into")}}),this.ace_editor.commands.bindKey("Shift-F11","step_out"),this.ace_editor.commands.addCommand({name:"step_out",exec:r=>{v("calltree.arrow_left")}}),this.ace_editor.commands.addCommand({name:"expand_selection",exec:()=>{v("eval_selection",this.get_cursor_position(),!0)}}),this.ace_editor.commands.addCommand({name:"collapse_selection",exec:()=>{v("eval_selection",this.get_cursor_position(),!1)}}),this.ace_editor.commands.bindKey("ctrl-j","expand_selection"),this.ace_editor.commands.bindKey("ctrl-down","expand_selection"),this.ace_editor.commands.bindKey("ctrl-k","collapse_selection"),this.ace_editor.commands.bindKey("ctrl-up","collapse_selection"),this.ace_editor.commands.addCommand({name:"edit",exec:(r,n)=>{let l=n.args==null?"":n.args[0];v("change_current_module",l)}}),t.defineEx("edit","e",function(r,n){r.ace.execCommand("edit",n)}),this.ace_editor.commands.addCommand({name:"buffer",exec:(r,n)=>{let l=n.args==null?"":n.args[0],o=l==""?"":Object.keys($().files).find(i=>i.includes(l));o!=null&&v("change_current_module",o)}}),t.defineEx("buffer","b",function(r,n){r.ace.execCommand("buffer",n)}),t.map("jj","","insert")}add_marker(t,r,n,l){let o=this.get_session(t),i=o.doc.indexToPosition(n),s=o.doc.indexToPosition(l),a=o.addMarker(new globalThis.ace.Range(i.row,i.column,s.row,s.column),r);this.markers[t]==null&&(this.markers[t]=[]),this.markers[t].push({className:r,from:n,to:l,markerId:a})}remove_markers_of_type(t,r){this.markers[t]==null&&(this.markers[t]=[]);let n=this.markers[t].filter(o=>o.className==r),l=this.get_session(t);for(let o of n)l.removeMarker(o.markerId);this.markers[t]=this.markers[t].filter(o=>o.className!=r)}get_cursor_position(t){let r=t==null?this.ace_editor.getSession():this.get_session(t);if(r==null)throw new Error("illegal state");return r.doc.positionToIndex(r.selection.getCursor())}set_cursor_position(t){if(t==null)throw new Error("illegal state");this.supress_change_selection(()=>{let r=this.ace_editor.session.doc.indexToPosition(t);this.ace_editor.moveCursorToPosition(r),this.ace_editor.clearSelection();let n=this.ace_editor.renderer.getFirstVisibleRow(),l=this.ace_editor.renderer.getLastVisibleRow();(r.rowl)&&this.ace_editor.scrollToLine(r.row)})}goto_definition(){let t=this.get_cursor_position();v("goto_definition",t)}for_each_session(t){for(let r in this.sessions)t(r,this.sessions[r])}make_resizable(){let t=()=>{this.editor_container.style.height=localStorage.editor_height+"vh"},r=new Date().getTime();window.addEventListener("resize",()=>{r=new Date().getTime()}),localStorage.editor_height!=null&&t();let n=!0;new ResizeObserver(l=>{if(n){n=!1;return}if(new Date().getTime()-r<100)return;this.ace_editor.resize();let o=this.editor_container.offsetHeight/window.innerHeight*100;localStorage.editor_height=o,setTimeout(t,0)}).observe(this.editor_container)}};var gi=new Function("arr","pred",` for(let i = arr.length - 1; i >= 0; i--) { if(pred(arr[i])) { return arr[i] } } -`);var cr=(e,t)=>new Set([...e,...t]),_r=(e,t)=>e.size===t.size&&[...e].every(r=>t.has(r)),mt=(e,t)=>new Set([...e].filter(r=>!t.has(r))),gt=(e,t)=>Object.fromEntries(Object.entries(e).map(([r,n])=>[r,t(r,n)])),ur=(e,t)=>Object.fromEntries(Object.entries(e).filter(([r,n])=>t(r,n))),dr=new Function("fn","acc","arr",` +`);var _r=(e,t)=>new Set([...e,...t]),ur=(e,t)=>e.size===t.size&&[...e].every(r=>t.has(r)),yt=(e,t)=>new Set([...e].filter(r=>!t.has(r))),wt=(e,t)=>Object.fromEntries(Object.entries(e).map(([r,n])=>[r,t(r,n)])),dr=(e,t)=>Object.fromEntries(Object.entries(e).filter(([r,n])=>t(r,n))),pr=new Function("fn","acc","arr",` let idx = 0; const len = arr.length; const result = []; @@ -15,7 +15,7 @@ idx += 1; } return [tuple[0], result]; -`),Re=(e,t)=>e.reduce((r,n,l)=>r??t(n,l),null);var pr=(e,t)=>{if(e.length!=t.length)throw new Error("zipped arrays must have same length");return e.map((r,n)=>[r,t[n]])},se=e=>[...new Set(e)],fr=(e,t)=>[...new Map(e.map(r=>[t(r),r])).values()],hr=new Function("node","pred",` +`),Ue=(e,t)=>e.reduce((r,n,l)=>r??t(n,l),null);var fr=(e,t)=>{if(e.length!=t.length)throw new Error("zipped arrays must have same length");return e.map((r,n)=>[r,t[n]])},se=e=>[...new Set(e)],hr=(e,t)=>[...new Map(e.map(r=>[t(r),r])).values()],mr=new Function("node","pred",` const result = [] const do_collect = (node, parent) => { @@ -32,7 +32,7 @@ do_collect(node, null) return result -`);var mr=`function fib(n) { +`);var gr=`function fib(n) { if(n == 0 || n == 1) { return n } else { @@ -41,7 +41,7 @@ } fib(6) -`,gr=(e,t)=>{localStorage["examples_"+e]=t},tl=e=>localStorage["examples_"+e],ge=[{path:"github_api",entrypoint:"github_api/index.js"},{path:"fibonacci",entrypoint:"fibonacci/index.js"},{path:"todos-preact",entrypoint:"todos-preact/index.js",with_app_window:!0,files:["todos-preact/app.js"]},{path:"ethers",entrypoint:"ethers/block_by_timestamp.js"},{path:"plot",entrypoint:"plot/index.js"},{path:"fractal_tree",entrypoint:"fractal_tree/fractal_tree.js",with_app_window:!0},{path:"animated_fractal_tree",entrypoint:"animated_fractal_tree/animated_fractal_tree.js",with_app_window:!0},{path:"canvas_animation_bubbles",entrypoint:"canvas_animation_bubbles/bubbles.js",with_app_window:!0}].map(e=>({...e,entrypoint:e.entrypoint??e.path})),rl=ge.map(e=>(e.files??[]).concat([e.entrypoint])).flat().map(e=>e.split("/")),yr=e=>{let t=rl.filter(l=>e.every((o,i)=>o==l[i])),r=t.filter(l=>l.length==e.length+1),n=[...new Set(t.filter(l=>l.length!=e.length+1).map(l=>l[e.length]))];return Promise.all(r.map(async l=>{let o=l[e.length],i=l.slice(0,e.length+1).join("/");return{name:o,path:i,kind:"file",contents:tl(i)??await fetch(globalThis.location.origin+"/docs/examples/"+i).then(s=>s.text())}}).concat(n.map(async l=>{let o=[...e,l];return{name:l,path:o.join("/"),kind:"directory",children:await yr(o)}})))},yt=yr([]).then(e=>({kind:"directory",name:"examples",path:null,children:e}));var nl=e=>e.endsWith(".htm")||e.endsWith(".html"),ll=e=>e==""||e.endsWith(".js")||e.endsWith(".mjs"),Ie=class{constructor(t){this.ui=t,this.el=d("div","files_container"),this.render($())}change_entrypoint(t,r){v("change_entrypoint",t,r),this.ui.editor.focus()}change_html_file(t){let r=t.target.value;v("change_html_file",r)}render(t){this.file_to_el=new Map;let r=t.has_file_system_access?d("div","file_actions",d("a",{class:"file_action",href:"javascript: void(0)",click:this.create_file.bind(this,!1)},"New file"),d("a",{class:"file_action",href:"javascript: void(0)",click:this.create_file.bind(this,!0)},"New dir"),d("a",{class:"file_action",href:"javascript: void(0)",click:vr},"Revoke access"),d("a",{href:"https://github.com/leporello-js/leporello-js#selecting-entrypoint-module",target:"__blank",class:"select_entrypoint_title",title:"Select entrypoint"},"Entry point")):d("div","file_actions",d("div","file_action allow_file_access",d("a",{href:"javascript: void(0)",click:wr},"Allow access to local project folder"),d("span","subtitle","Your files will never leave your device"))),n=[this.render_file({name:"*scratch*",path:""},t),this.render_file(t.project_dir,t)],l=this.el.querySelector(".files");l==null?(this.el.innerHTML="",this.el.appendChild(r),this.el.appendChild(d("div","files",n))):(this.el.replaceChild(r,this.el.children[0]),l.replaceChildren(...n))}render_current_module(t){this.current_file=t,this.active_el.querySelector(".file_title").classList.remove("active"),this.active_el=this.file_to_el.get(t),this.active_el.querySelector(".file_title").classList.add("active")}render_select_entrypoint(t,r){return!r.has_file_system_access||t.kind=="directory"?null:ll(t.path)?d("span","select_entrypoint",d("input",{type:"radio",name:"js_entrypoint",value:t.path,checked:r.entrypoint==t.path,change:n=>this.change_entrypoint(n.target.value),click:n=>n.stopPropagation()})):nl(t.path)?d("span","select_entrypoint",d("input",{type:"radio",name:"html_file",value:t.path,checked:r.html_file==t.path,change:n=>this.change_html_file(n),click:n=>n.stopPropagation()})):null}render_file(t,r){let n=d("div","file",d("div",{class:"file_title"+(t.path==r.current_module?" active":""),click:l=>this.on_click(l,t)},d("span","icon",t.kind=="directory"?"\u{1F4C1}":"\xA0"),t.name,this.render_select_entrypoint(t,r)),t.children==null?null:t.children.map(l=>this.render_file(l,r)));return this.file_to_el.set(t.path,n),t.path==r.current_module&&(this.active_el=n,this.current_file=t.path),n}async create_file(t){let r=prompt(`Enter ${t?"directory":"file"} name`);if(r==null)return;let n=$().project_dir,l,o;if(this.current_file=="")l=n;else{let s=(a,_)=>a.path==this.current_file?[a,_]:a.children==null?null:Re(a.children,c=>s(c,a));if([o,l]=s(n),o.kind=="directory")l=o;else if(l==null)throw new Error("illegal state")}let i=l==n?r:l.path+"/"+r;await rr(i,t),he(!1).then(s=>{t?v("load_dir",s,!0):v("create_file",s,i)})}on_click(t,r){if(t.stopPropagation(),$().has_file_system_access)r.kind!="directory"&&v("change_current_module",r.path);else if(r.path!=null)if(r.path=="")this.change_entrypoint("");else{let n=i=>i.path==r.path||i.children!=null&&i.children.find(n),l=$().project_dir.children.find(i=>n(i)!=null),o=ge.find(i=>i.path==l.path);this.change_entrypoint(o.entrypoint,r.kind=="directory"?void 0:r.path),o.with_app_window&&!localStorage.onboarding_open_app_window&&this.ui.toggle_open_app_window_tooltip(!0)}this.render_current_module(r.path)}};var ye=(e,t)=>["function_args","array_destructuring","object_destructuring","destructuring_rest"].includes(t.type)||t.type=="destructuring_pair"&&t.children[1]==e||["assignment_pair","decl_pair","destructuring_default"].includes(t.type)&&t.children[0]==e||t.type=="import"&&t.children.includes(e),O=e=>{if(Array.isArray(e))return e.map(O).flat();if(e.type=="identifier")return[e];if(["destructuring_default","destructuring_rest"].includes(e.type))return O(e.name_node);if(e.type=="destructuring_pair")return O(e.value);if(["array_destructuring","object_destructuring","function_args"].includes(e.type))return e.children.map(O).flat();if(e.type=="decl_pair")return O(e.children[0]);throw console.error(e),new Error("not implemented")},Ue=e=>se(e.children.filter(t=>t.type=="import").filter(t=>!t.is_external).map(t=>t.full_import_path)),wt=e=>Object.entries(e).map(([t,r])=>r.children.filter(n=>n.type=="import"&&n.is_external).map(n=>({node:n,module_name:t}))).flat(),N=(e,t)=>e.index<=t&&e.index+e.length>t?e.children==null?e:e.children.map(l=>N(l,t)).find(l=>l!=null)||e:null,vt=(e,t)=>e.index<=t&&e.index+e.length>t,xt=(e,t)=>t.index<=e.index&&t.index+t.length>=e.index+e.length,He=(e,t)=>{if(t==e)return[];if(t.children==null)return null;{let r=t.children.find(n=>xt(e,n));return r==null?null:He(e,r).concat([t])}},B=(e,t)=>[e,...He(e,t)],C=(e,t)=>t(e)?e:e.children==null?null:e.children.reduce((r,n)=>r??C(n,t),null),We=(e,t=!0)=>e.result==null||e.type=="function_expr"&&!t?null:e.result.is_error_origin?e:e.children==null?null:e.children.reduce((r,n)=>r??We(n,!1),null);var ol=new Function("root",` +`,yr=(e,t)=>{localStorage["examples_"+e]=t},rl=e=>localStorage["examples_"+e],ye=[{path:"github_api",entrypoint:"github_api/index.js"},{path:"fibonacci",entrypoint:"fibonacci/index.js"},{path:"todos-preact",entrypoint:"todos-preact/index.js",with_app_window:!0,files:["todos-preact/app.js"]},{path:"ethers",entrypoint:"ethers/block_by_timestamp.js"},{path:"plot",entrypoint:"plot/index.js"},{path:"fractal_tree",entrypoint:"fractal_tree/fractal_tree.js",with_app_window:!0},{path:"animated_fractal_tree",entrypoint:"animated_fractal_tree/animated_fractal_tree.js",with_app_window:!0},{path:"canvas_animation_bubbles",entrypoint:"canvas_animation_bubbles/bubbles.js",with_app_window:!0}].map(e=>({...e,entrypoint:e.entrypoint??e.path})),nl=ye.map(e=>(e.files??[]).concat([e.entrypoint])).flat().map(e=>e.split("/")),wr=e=>{let t=nl.filter(l=>e.every((o,i)=>o==l[i])),r=t.filter(l=>l.length==e.length+1),n=[...new Set(t.filter(l=>l.length!=e.length+1).map(l=>l[e.length]))];return Promise.all(r.map(async l=>{let o=l[e.length],i=l.slice(0,e.length+1).join("/");return{name:o,path:i,kind:"file",contents:rl(i)??await fetch(globalThis.location.origin+"/docs/examples/"+i).then(s=>s.text())}}).concat(n.map(async l=>{let o=[...e,l];return{name:l,path:o.join("/"),kind:"directory",children:await wr(o)}})))},vt=wr([]).then(e=>({kind:"directory",name:"examples",path:null,children:e}));var ll=e=>e.endsWith(".htm")||e.endsWith(".html"),ol=e=>e==""||e.endsWith(".js")||e.endsWith(".mjs"),He=class{constructor(t){this.ui=t,this.el=d("div","files_container"),this.render($())}change_entrypoint(t,r){v("change_entrypoint",t,r),this.ui.editor.focus()}change_html_file(t){let r=t.target.value;v("change_html_file",r)}render(t){this.file_to_el=new Map;let r=t.has_file_system_access?d("div","file_actions",d("a",{class:"file_action",href:"javascript: void(0)",click:this.create_file.bind(this,!1)},"New file"),d("a",{class:"file_action",href:"javascript: void(0)",click:this.create_file.bind(this,!0)},"New dir"),d("a",{class:"file_action",href:"javascript: void(0)",click:xr},"Revoke access"),d("a",{href:"https://github.com/leporello-js/leporello-js#selecting-entrypoint-module",target:"__blank",class:"select_entrypoint_title",title:"Select entrypoint"},"Entry point")):d("div","file_actions",d("div","file_action allow_file_access",d("a",{href:"javascript: void(0)",click:vr},"Allow access to local project folder"),d("span","subtitle","Your files will never leave your device"))),n=[this.render_file({name:"*scratch*",path:""},t),this.render_file(t.project_dir,t)],l=this.el.querySelector(".files");l==null?(this.el.innerHTML="",this.el.appendChild(r),this.el.appendChild(d("div","files",n))):(this.el.replaceChild(r,this.el.children[0]),l.replaceChildren(...n))}render_current_module(t){this.current_file=t,this.active_el.querySelector(".file_title").classList.remove("active"),this.active_el=this.file_to_el.get(t),this.active_el.querySelector(".file_title").classList.add("active")}render_select_entrypoint(t,r){return!r.has_file_system_access||t.kind=="directory"?null:ol(t.path)?d("span","select_entrypoint",d("input",{type:"radio",name:"js_entrypoint",value:t.path,checked:r.entrypoint==t.path,change:n=>this.change_entrypoint(n.target.value),click:n=>n.stopPropagation()})):ll(t.path)?d("span","select_entrypoint",d("input",{type:"radio",name:"html_file",value:t.path,checked:r.html_file==t.path,change:n=>this.change_html_file(n),click:n=>n.stopPropagation()})):null}render_file(t,r){let n=d("div","file",d("div",{class:"file_title"+(t.path==r.current_module?" active":""),click:l=>this.on_click(l,t)},d("span","icon",t.kind=="directory"?"\u{1F4C1}":"\xA0"),t.name,this.render_select_entrypoint(t,r)),t.children==null?null:t.children.map(l=>this.render_file(l,r)));return this.file_to_el.set(t.path,n),t.path==r.current_module&&(this.active_el=n,this.current_file=t.path),n}async create_file(t){let r=prompt(`Enter ${t?"directory":"file"} name`);if(r==null)return;let n=$().project_dir,l,o;if(this.current_file=="")l=n;else{let s=(a,_)=>a.path==this.current_file?[a,_]:a.children==null?null:Ue(a.children,c=>s(c,a));if([o,l]=s(n),o.kind=="directory")l=o;else if(l==null)throw new Error("illegal state")}let i=l==n?r:l.path+"/"+r;await nr(i,t),me(!1).then(s=>{t?v("load_dir",s,!0):v("create_file",s,i)})}on_click(t,r){if(t.stopPropagation(),$().has_file_system_access)r.kind!="directory"&&v("change_current_module",r.path);else if(r.path!=null)if(r.path=="")this.change_entrypoint("");else{let n=i=>i.path==r.path||i.children!=null&&i.children.find(n),l=$().project_dir.children.find(i=>n(i)!=null),o=ye.find(i=>i.path==l.path);this.change_entrypoint(o.entrypoint,r.kind=="directory"?void 0:r.path),o.with_app_window&&!localStorage.onboarding_open_app_window&&this.ui.toggle_open_app_window_tooltip(!0)}this.render_current_module(r.path)}};var we=(e,t)=>["function_args","array_destructuring","object_destructuring","destructuring_rest"].includes(t.type)||t.type=="destructuring_pair"&&t.children[1]==e||["assignment_pair","decl_pair","destructuring_default"].includes(t.type)&&t.children[0]==e||t.type=="import"&&t.children.includes(e),C=e=>{if(Array.isArray(e))return e.map(C).flat();if(e.type=="identifier")return[e];if(["destructuring_default","destructuring_rest"].includes(e.type))return C(e.name_node);if(e.type=="destructuring_pair")return C(e.value);if(["array_destructuring","object_destructuring","function_args"].includes(e.type))return e.children.map(C).flat();if(e.type=="decl_pair")return C(e.children[0]);throw console.error(e),new Error("not implemented")},We=e=>se(e.children.filter(t=>t.type=="import").filter(t=>!t.is_external).map(t=>t.full_import_path)),xt=e=>Object.entries(e).map(([t,r])=>r.children.filter(n=>n.type=="import"&&n.is_external).map(n=>({node:n,module_name:t}))).flat(),z=(e,t)=>e.index<=t&&e.index+e.length>t?e.children==null?e:e.children.map(l=>z(l,t)).find(l=>l!=null)||e:null,ve=(e,t)=>e.index<=t&&e.index+e.length>t,bt=(e,t)=>t.index<=e.index&&t.index+t.length>=e.index+e.length,qe=(e,t)=>{if(t==e)return[];if(t.children==null)return null;{let r=t.children.find(n=>bt(e,n));return r==null?null:qe(e,r).concat([t])}},B=(e,t)=>[e,...qe(e,t)],N=(e,t)=>t(e)?e:e.children==null?null:e.children.reduce((r,n)=>r??N(n,t),null),ae=(e,t)=>t(e)?e:e.children==null?null:e.children.reduce((r,n)=>r??ae(n,t),null),Be=(e,t=!0)=>e.result==null||e.type=="function_expr"&&!t?null:e.result.is_error_origin?e:e.children==null?null:e.children.reduce((r,n)=>r??Be(n,!1),null);var il=new Function("root",` const result = [] function do_collect(n, parent) { if(n.type == 'function_expr') { @@ -57,18 +57,18 @@ fib(6) } do_collect(root) return result -`),we=(e,t)=>e.result==null?t.result==null:t.result!=null&&e.result.ok==t.result.ok&&!!e.result.is_error_origin==!!t.result.is_error_origin,ae=e=>({index:e.index,length:e.length,result:e.result==null||e.type=="function_expr"?null:e.result.ok?{ok:!0}:{ok:!1,is_error_origin:!!e.result.is_error_origin}}),xr=e=>e.type=="binary"||e.type=="ternary",il=(e,t)=>{let r=e.children.map(s=>br(s)).reduce((s,[a,..._])=>{if(s.length==0)return[a,..._];{let c=s[s.length-1];if(we(c,a))return[...s.slice(0,s.length-1),{index:c.index,length:a.index-c.index+a.length,result:a.result==null?null:{ok:a.result.ok}},..._];if(!xr(e)&&c.result==null&&a.result?.ok){let u=c.index+c.length;return[...s,{...a,index:u,length:a.index-u+a.length},..._]}else return!xr(e)&&c.result?.ok&&a.result==null?[...s.slice(0,s.length-1),{...c,length:a.index-c.index},a,..._]:[...s,a,..._]}},[]);if(e.result==null||e.result?.ok&&r.reduce((s,a)=>s&&we(r[0],a),!0)){if(we(e,r[0]))return t&&e.type=="function_expr"?[{...ae(e),result:{ok:e.result.ok}}]:[ae(e)];{let s=ae(e),a=r[0].index+r[0].length;return[{...s,length:r[0].index-s.index},...r,{...s,index:a,length:e.index+e.length-a}]}}if(r.length==0)throw new Error("illegal state");let n=r[0],l=we(n,e)&&e.result?.ok?[{...n,index:e.index,length:n.length+n.index-e.index},...r.slice(1)]:r,o=l[l.length-1];return we(o,e)&&e.result?.ok?[...l.slice(0,l.length-1),{...o,index:o.index,length:e.index+e.length-o.index}]:l},br=(e,t=!1)=>{if(e.type=="function_expr"&&!t)return[{...ae(e),result:null}];if(e.type=="while"&&!t)return[{index:e.index,length:5,result:e.result==null?null:e.result.ok?{ok:!0}:{ok:!1,is_error_origin:!!e.result.is_error_origin}},{index:e.index+5,length:e.length-5,result:null}];if(e.children==null||e.children.length==0)return[ae(e)];if(e.result?.is_error_origin){let n=ae(e),l=ol(e);return l.length==0?[n]:l.map((o,i)=>{let s;if(i==0)s=e.index;else{let a=l[i-1];s=a.index+a.length}return{index:s,length:o.index-s,result:n.result}}).concat([{index:l.at(-1).index+l.at(-1).length,length:e.index+e.length-(l.at(-1).index+l.at(-1).length),result:n.result}])}let r=il(e,t);return e.result!=null&&!e.result.ok?r.map(n=>n.result==null?{...n,result:{ok:!1,is_error_origin:!1}}:n):r},kr=e=>{let t=br(e,!0).filter(n=>n.result!=null&&(n.result.ok||n.result.is_error_origin)),{ok:r}=t.reduce(({ok:n,prev:l},o)=>n?l==null?{ok:n,prev:o}:l.index+l.length>o.index?{ok:!1}:{ok:!0,prev:o}:{ok:n},{ok:!0,prev:null});if(!r)throw new Error("illegal state");return t},Er=(e,t)=>Object.values(e.colored_frames?.[t]??{}).map(r=>e.frames.get(r).coloring).flat();var bt=(e,t)=>{let r=e.map(t),n=r.reduce((o,i)=>i.undeclared==null?o:o.concat(i.undeclared),[]),l=r.map(o=>o.closed).reduce(cr,new Set);return{nodes:r.map(o=>o.node),undeclared:n,closed:l}},Et=e=>e.type=="import"?Object.fromEntries(e.children.map(t=>[t.value,t])):e.type=="export"?Et(e.binding):e.type=="let"||e.type=="const"?Object.fromEntries(e.children.flatMap(O).map(t=>[t.value,t])):(e.type=="function_decl",null),ve=e=>{if(e.type=="identifier")return{...e,definition:"self"};if(["destructuring_default","destructuring_rest"].includes(e.type))return{...e,children:[ve(e.name_node),...e.children.slice(1)]};if(e.type=="destructuring_pair")return{...e,children:[e.children[0],ve(e.children[1])]};if(["array_destructuring","object_destructuring"].includes(e.type))return{...e,children:e.children.map(ve)};if(e.type=="decl_pair")return{...e,children:[ve(e.children[0]),...e.children.slice(1)]};throw console.error(e),new Error("not implemented")},sl=new Set(["leporello"]),xe=(e,t,r={},n={},l)=>{if(!(t instanceof Set))throw new Error("not a set");if(e.type=="identifier"){if(e.definition!=null)return{node:e,undeclared:null,closed:new Set([e.value])};{let o=r[e.value];return o==null?t.has(e.value)||sl.has(e.value)?{node:{...e,definition:"global"},undeclared:null,closed:new Set}:{node:e,undeclared:[e],closed:new Set}:{node:{...e,definition:{index:o.index}},undeclared:null,closed:new Set([e.value])}}}else if(e.type=="do"){let o=Object.fromEntries(e.children.filter(u=>u.type=="function_decl").map(u=>[u.children[0].name,u.children[0]])),i=e.children.reduce(({scope:u,children:p},f)=>({scope:{...u,...Et(f)},children:p.concat([{node:f,scope:u}])}),{scope:o,children:[]}),s=i.scope,{nodes:a,undeclared:_,closed:c}=bt(i.children,u=>xe(u.node,t,{...r,...u.scope},s,l));return{node:{...e,children:a},undeclared:_,closed:mt(c,new Set(Object.keys(s)))}}else if(e.type=="function_expr"){let o=O(e.function_args),i=Object.fromEntries(o.map(u=>[u.value,u])),{nodes:s,undeclared:a,closed:_}=bt(e.children,u=>xe(u,t,{...r,...n,...i})),c=mt(_,new Set(o.map(u=>u.value)));return{node:{...e,children:s,closed:c},undeclared:a,closed:new Set}}else if(e.children!=null){let o,i;e.type=="import"?(i=al(l,e.module),o=e.children.map((u,p)=>({...u,definition:{module:i,is_default:p==0&&e.default_import!=null}}))):e.type=="const"||e.type=="let"?o=e.children.map(ve):o=e.children;let{nodes:s,undeclared:a,closed:_}=bt(o,u=>xe(u,t,r,n)),c={...e,children:s};return e.type=="import"&&(c={...c,full_import_path:i}),e.type=="while"&&(c={...c,closed:_}),{node:c,undeclared:a,closed:_}}else return{node:e,undeclared:null,closed:new Set}},kt="dummy://dummy/",al=(e,t)=>{let r=new URL(t,kt+e).toString();return r.lastIndexOf(kt)==0?r.replace(kt,""):r},jr=e=>{let t=n=>Ue(e[n]).map(l=>t(l)).flat().concat(n);return Object.keys(e).reduce((n,l)=>n.concat(t(l)),[]).reduce((n,l)=>n.includes(l)?n:[...n,l],[])},be=e=>e.type=="unary"&&e.operator=="await"?!0:e.type=="function_expr"||e.children==null?!1:e.children.find(t=>be(t))!=null;var Tr=e=>[...cl(e,!0),..._l(e),...ul(e)],qe=(e,t,r)=>{let{context:n,problems:l}=r(e,t);return e.children==null?l??[]:e.children.reduce((o,i)=>{let s=qe(i,n,r);return s==null?o:o==null?s:o.concat(s)},l)??[]},cl=(e,t=!0)=>qe(e,t,(r,n)=>{if(r.type=="function_expr")return{problems:null,context:r.is_async};if(r.type=="unary"&&r.operator=="await"&&!n){let l=r.children[0];return{problems:[{index:l.index,length:l.length,message:"await is only valid in async functions and the top level bodies of modules"}],context:n}}return{problems:null,context:n}}),Sr=e=>e.filter((n,l)=>e.find((o,i)=>o.value==n.value&&i({index:n.index,length:n.length,message:`Identifier '${n.value}' has already been declared`})),_l=e=>qe(e,null,(t,r)=>{if(t.type=="function_expr"){let n=O(t.function_args);return{context:fr(n,l=>l.value),problems:Sr(n)}}else if(t.type=="do"){let n=t.children.map(o=>{if(o.type=="function_decl"){let i=o.children[0];return{value:i.name,index:i.index,length:i.name.length}}else{let i=Et(o);return i==null?null:Object.values(i)}}).flat().filter(o=>o!=null);return{context:null,problems:Sr([...r??[],...n])}}else return{context:null,problems:null}}),ul=e=>qe(e,!1,(t,r)=>t.type=="function_expr"?{problems:null,context:!1}:t.is_loop?{problems:null,context:!0}:(t.type=="break"||t.type=="continue")&&!r?{problems:[{index:t.index,length:t.length,message:`Illegal ${t.type} statement: no surrounding iteration statement`}],context:r}:{problems:null,context:r});var $r=e=>e.frames.get(e.active_calltree_node.id),Be=(e,t)=>({id:"calltree",children:[e,{id:"deferred_calls",children:t}]}),U=e=>e.calltree.children[1].children,A=e=>e.calltree.children[0];var ce=(e,t,r=!1,n=!1)=>{let l=e;for(let a=0;a{e.io_trace_is_replay_aborted=!0,e.io_trace_abort_replay();let t=new Error("io replay aborted");throw t.__ignore=!0,t},Lr=(e,t,r,n,l)=>{let o=e.__cxt;if(o.io_trace_is_replay_aborted){let i=new Error("io replay was aborted");throw i.__ignore=!0,i}return o.is_recording_deferred_calls?{is_return:!0,value:n?new t(...l):t.apply(r,l)}:{is_return:!1}},Pr=(e,t,r,n,l)=>{let o=function(...i){let s=new.target!=null,{value:a,is_return:_}=Lr(e,t,this,s,i);if(_)return a;let c=e.__cxt,u=c;if(c.io_trace_is_recording){let p,f,h;try{let m=c.io_trace.length;if(r=="setTimeout"){i=i.slice();let y=i[0];i[0]=Object.defineProperty(function(){u==c&&(c.io_trace_is_replay_aborted||(c.io_trace.push({type:"resolution",index:m}),y()))},"name",{value:y.name})}return f=s?new t(...i):t.apply(this,i),p=!0,f?.[Symbol.toStringTag]=="Promise"?(f=f.then(y=>(f.status={ok:!0,value:y},l?y:e.structuredClone(y))).catch(y=>{throw f.status={ok:!1,error:y},e.structuredClone(y)}).finally(()=>{u==c&&(c.io_trace_is_replay_aborted||c.io_trace.push({type:"resolution",index:m}))}),f):l?f:e.structuredClone(f)}catch(m){throw h=m,p=!1,e.structuredClone(m)}finally{c.io_trace.push({type:"call",name:r,ok:p,value:f,error:h,args:i,has_new_target:s,use_context:n,skip_clone:l,context:n?this:void 0})}}else{let p=c.io_trace[c.io_trace_index];if(p==null||p.type!="call"||p.has_new_target!=s||p.use_context&&p.context!=this||p.name!=r||r=="setTimeout"&&i[1]!=p.args[1]||r!="setTimeout"&&JSON.stringify(p.args)!=JSON.stringify(i))Or(c);else if(c.io_trace.find((h,m)=>h.type=="resolution"&&m>c.io_trace_index)!=null&&!c.io_trace_resolver_is_set&&(c.io_trace_resolver_is_set=!0,setTimeout(()=>{if(u!=c||c.io_trace_is_replay_aborted)return;if(c.io_trace_resolver_is_set=!1,c.io_trace_index>=c.io_trace.length)throw new Error("illegal state");if(c.io_trace[c.io_trace_index].type=="call")c.io_trace_is_replay_aborted=!0,c.io_trace_abort_replay();else for(;c.io_trace_index{c.io_trace_resolvers.set(c.io_trace_index-1,{resolve:h,reject:m})});if(r=="setTimeout"){let h=i[0];return c.io_trace_resolvers.set(c.io_trace_index-1,{resolve:h}),p.value}else return l?p.value:e.structuredClone(p.value)}else throw e.structuredClone(p.error)}};return Object.defineProperty(o,"name",{value:t.name}),o},dl=e=>{let t=e.Date,r=t.prototype,n=Pr(e,t,"Date",!1);e.Date=function(...o){return o.length==0?new.target!=null?new n(...o):n(...o):new.target!=null?new t(...o):t(...o)},e.Date.prototype=r,e.Date.parse=Date.parse,e.Date.now=Date.now,e.Date.UTC=Date.UTC,ce(e,["Date","now"])},Cr=(e,t)=>{let r=e[t];e[t]=function(...n){let l=new.target!=null,{value:o,is_return:i}=Lr(e,r,this,l,n);if(i)return o;let s=e.__cxt;return s.io_trace_is_recording||Or(s),l?new r(...n):r.apply(this,n)},Object.defineProperty(e[t],"name",{value:t})},Ar=e=>{if(ce(e,["Math","random"]),ce(e,["setTimeout"],void 0,!0),ce(e,["clearTimeout"]),Cr(e,"setInterval"),Cr(e,"clearInterval"),dl(e),ce(e,["fetch"],void 0,!0),e.Response!=null){let t=["arrayBuffer","blob","formData","json","text"];for(let r of t)ce(e,["Response","prototype",r],!0)}};var Mr=globalThis?.CanvasRenderingContext2D?.prototype?.reset;function pl(e){Mr!=null?Mr.call(e):e.canvas.width=e.canvas.width+0}function fl(e){for(let t of e.contexts)pl(t)}function Nr(e){let t=e?.CanvasRenderingContext2D?.prototype;if(t==null)return;let r=Object.getOwnPropertyDescriptors(t);Object.entries(r).forEach(([n,l])=>{if(l.value!=null){if(typeof l.value!="function")return;let o=l.value;t[n]={[n](){let i=e.__cxt,s=++i.version_counter;try{return o.apply(this,arguments)}finally{i.canvas_ops.contexts.add(this),i.canvas_ops.ops.push({canvas_context:this,method:o,version_number:s,args:arguments})}}}[n]}if(l.set!=null){let o=l.set;Object.defineProperty(t,n,{set(i){let s=e.__cxt,a=++s.version_counter;try{o.call(this,i)}finally{s.canvas_ops.contexts.add(this),s.canvas_ops.ops.push({canvas_context:this,version_number:a,set_op:o,prop_value:i})}}})}})}function zr(e){if(e.method!=null)e.method.apply(e.canvas_context,e.args);else if(e.set_op!=null)e.set_op.call(e.canvas_context,e.prop_value);else throw new Error("illegal op")}function Ke(e,t){if(e.calltree==null)return;let r=e.rt_cxt;if(r.canvas_ops.ops!=null)if(fl(r.canvas_ops),t)for(let n of r.canvas_ops.ops)zr(n);else{let n=e.current_calltree_node.last_version_number;for(let l of r.canvas_ops.ops){if(l.version_number>n)break;zr(l)}}}var hl=["pointerId","buttons","altKey","ctrlKey","shiftKey","metaKey","pageX","pageY","deltaX","deltaY","key","which","timeStamp"],ml=new Set(["blur","focus","click","dblclick","wheel","input","change","contextmenu","pointerdown","pointerup","pointermove","pointerover","pointerenter","pointerleave","pointercancel","mousedown","mouseup","mousemove","mouseover","mouseenter","mouseleave","mousecancel","keydown","keyup","keypress"]),gl=["bubbles","composed","cancelable"],Fr=e=>{let t=e.window,r=t.EventTarget.prototype.addEventListener,n=new Set;t.EventTarget.prototype.addEventListener=function(o,...i){return!n.has(o)&&ml.has(o)&&r.call(t.window,o,s=>{if(e.is_replaying_domevents||["change","input"].includes(o)&&["checkbox","radio"].includes(s.target.type))return;let a=s.constructor.name,_=Object.fromEntries(hl.map(p=>[p,s[p]])),c=Object.fromEntries(gl.map(p=>[p,s[p]])),u=wl(t.window,s.target);e.domevents.push({constructorName:a,type:o,props:_,dispatch_props:c,selectors:u,value:s.target.value})},!0),n.add(o),r.call(this,o,...i)}},Dr=e=>{try{e.is_replaying_domevents=!0,e.window.document.dispatchEvent(new Event("DOMContentLoaded")),e.window.window.dispatchEvent(new Event("DOMContentLoaded")),e.window.window.dispatchEvent(new Event("load"));for(let t of e.domevents){let r=e.window[t.constructorName],n=Object.defineProperties(new r(t.type,t.dispatch_props),Object.fromEntries(Object.entries(t.props).map(([o,i])=>[o,{value:i}]))),l=vl(e.window.window,t.selectors);["input","change"].includes(t.type)&&(l.value=t.value),l.dispatchEvent(n)}}finally{e.is_replaying_domevents=!1}};function yl(e){let t=[];for(;e;){t.unshift(e.tagName.toLowerCase());let r=e.parentNode;if(r){let n=[...r.children];if(n.length>1){let l=n.indexOf(e)+1;l&&(t[0]+=`:nth-child(${l})`)}}if(e.hasAttribute("part")){let n=`[part=${e.getAttribute("part")}]`;t[0]+=n}if(r instanceof Element)e=r;else break}return t.join(" > ")}function wl(e,t){if(t==e)return["window"];let r=[],n;for(;(n=t.getRootNode())&&(r.unshift(yl(t)),!(n===e.document||n===t));)t=n.host;return r}function vl(e,t){let r=e.document,n,l;for(let o of t){if(o==="window")return e;if(l=r?.querySelector(o),!l)return n;if(n=l,r=l?.shadowRoot,!r)break}return n}var _e;try{(function e(){return e()})()}catch(e){_e=e}var xl=500,bl=e=>(...t)=>{let r=e(...t),n=l=>l.done?l.value:l.value?.[Symbol.toStringTag]=="Promise"?l.value.then(o=>n(r.next(o)),o=>n(r.throw(o))):n(r.next(l.value));return n(r.next())},z=(e,t)=>{let r=new Map;return n(t);function n(o){if(o==null||typeof o!="object")return o;let i=r.get(o);if(i!=null)return i;let s={};return r.set(o,s),i=l(o),Object.assign(s,i),i}function l(o){if(Array.isArray(o))return{clazz:"Array",array_entries:o.map(n)};if(e.Element!=null&&o instanceof e.Element&&!o.isConnected)return{clazz:o.constructor?.name,is_svg:e.SVGElement!=null&&o instanceof e.SVGElement,object_entries:[],dom_node:o.cloneNode(!0)};if(o instanceof e.Map)return{clazz:"Map",object_entries:[...o.entries()].map(([i,s])=>[n(i),n(s)])};if(o instanceof e.Set)return{clazz:"Set",array_entries:[...o.values()].map(n)};if(o?.[Symbol.toStringTag]=="Promise"){let i;return o.status!=null&&(i={ok:o.status.ok,value:n(o.status.value),error:n(o.status.error)}),{clazz:"Promise",status:i}}return o instanceof e.Date?{clazz:"Date",string:o.toJSON()}:o instanceof e.Error?{clazz:o.constructor?.name,string:o.toString()}:o==e?{clazz:"Window",object_entries:[]}:{clazz:o.constructor?.name,object_entries:Object.entries(o).map(([i,s])=>[i,n(s)])}}},kl=()=>{let e;return[new Promise(r=>e=r),e]},Rr=bl(function*(e,t,r){let[n,l]=kl();if(t=r==null||r.length==0?{...t,logs:[],io_trace_is_recording:!0,io_trace:[]}:{...t,logs:[],io_trace_is_recording:!1,io_trace:r,io_trace_is_replay_aborted:!1,io_trace_resolver_is_set:!1,io_trace_resolvers:new Map,io_trace_index:0,io_trace_abort_replay:l},t.window.__cxt==null)t.window.__cxt=t,Ol(t.window),Sl(t),Ar(t.window),El(t),Fr(t),Nr(t.window);else throw new Error("illegal state");let o;for(let a=0;a{e.window.leporello={storage:e.storage}},Sl=e=>{let t=e.window.Promise.prototype.then;e.window.Promise.prototype.then=function(n,l){e.children==null&&(e.children=[]);let o=e.children,i=(s,a)=>typeof s!="function"?s:_=>{this.status==null&&(this.status=a?{ok:a,value:_}:{ok:a,error:_});let c=e.children;e.children=o;try{return s(_)}finally{e.children=c}};return t.call(this,i(n,!0),i(l,!1))}},K=e=>{for(let t=0;t{e.children==null&&(e.children=[]);let n={children_copy:e.children,promise:t};return t?.[Symbol.toStringTag]=="Promise"?n.promise=t.then(l=>{n.status={ok:!0,value:l}},l=>{n.status={ok:!1,error:l}}):n.status={ok:!0,value:t},n},Tl=(e,t)=>{if(e.children=t.children_copy,t.status.ok)return t.status.value;throw t.status.error},$l=(e,t,r,n,l)=>{function o(...i){if(e.stack.length>xl)throw new _e.constructor(_e.message);let s=e.children;e.children=null,e.stack.push(!1);let a=++e.call_counter,_=e.version_counter,c,u=e.breakpoint.current_calltree_node_id==a;u&&(c={args:z(e.window,i),context_before:z(e.window,this)},K(e));let p,f,h,m=e.is_toplevel_call;e.is_toplevel_call=!1;try{return new.target==null?f=t(...i):f=new t(...i),p=!0,f?.[Symbol.toStringTag]=="Promise"&&K(e),u&&(c.ok=p,c.context_after=z(e.window,this),c.value=z(e.window,f)),f}catch(y){throw p=!1,h=y,u&&(c.error=z(e.window,h)),K(e),e.is_recording_deferred_calls&&m&&h instanceof e.window.Error&&(h.__ignore=!0),h}finally{let y={id:a,version_number:_,last_version_number:e.version_counter,ok:p,context:this,value:f,error:h,fn:o,args:n==null?i:i.slice(0,n),snapshot:c};if(e.stack.pop()?y.children=e.children:y.has_more_children=e.children!=null&&e.children.length!=0,e.children=s,e.children==null&&(e.children=[]),e.children.push(y),e.is_toplevel_call=m,e.is_recording_deferred_calls&&e.is_toplevel_call){if(e.children.length!=1)throw new Error("illegal state");let E=e.children[0];e.children=null;let M=e.logs;e.logs=[],e.on_deferred_call(E,e.execution_id,M)}}}return Object.defineProperty(o,"name",{value:r}),o.__location=l,o.is_hosted=!0,o},Cl=["log","error","info","debug","warn","trace"],Ol=e=>{let t=e.console,r=e.__cxt;for(let n of Cl){let l=t[n];t[n]={[n](...o){let i=++r.call_counter,s=r.breakpoint.current_calltree_node_id==i,a={id:i,version_number:r.version_counter,last_version_number:r.version_counter,ok:!0,value:void 0,fn:l,args:o,context:t,is_new:!1,snapshot:s?{args:z(r.window,o)}:null};r.children==null&&(r.children=[]),r.children.push(a),r.logs.push(r.call_counter),K(r)}}[n],t[n].is_hosted=!0}},Ll=(e,t,r,n,l,o=!1,i)=>{if(typeof t!="function")throw new TypeError(l+" is not a "+(o?"constructor":"function"));if(t.is_hosted)try{return o?new t(...n):t.apply(r,n)}finally{e.children.at(-1).callsite_location=i}let s=e.children;e.children=null,e.stack.push(!1);let a=++e.call_counter,_=e.version_counter,c,u=e.breakpoint.current_calltree_node_id==a;u&&(c={args:z(e.window,n),context_before:z(e.window,r)},K(e));let p,f,h;try{return o?f=new t(...n):f=t.apply(r,n),p=!0,f?.[Symbol.toStringTag]=="Promise"&&K(e),u&&(c.ok=p,c.context_after=z(e.window,r),c.value=z(e.window,f)),f}catch(m){throw p=!1,h=m,u&&(c.error=z(e.window,h)),K(e),h}finally{let m={id:a,version_number:_,last_version_number:e.version_counter,ok:p,value:f,error:h,fn:t,args:n,context:r,is_new:o,snapshot:c,callsite_location:i};m.children_count=e.children?.length??0,e.stack.pop()?m.children=e.children:m.has_more_children=e.children!=null&&e.children.length!=0,e.children=s,e.children==null&&(e.children=[]),e.children.push(m)}},Pl=(e,t,r)=>{if(!e.is_entrypoint)return;let n=e.snapshots,l=n.get(t);if(!(l==null||r==e.breakpoint.selected_call_id))return null;l==null&&(l=new Map,n.set(t,l));let i=l.get(r);return i==null?(i={call_id:r,ok:!1},K(e),l.set(r,i),i):null},Al=(e,t,r)=>(t!=null&&(t.ok=!0,t.value=z(e.window,r)),r),Ml=(e,t,r,n)=>{if(!e.is_entrypoint)return;let o=e.snapshots.get(t);if(o==null)return n;let i=o.get(r);return i!=null&&!i.ok&&(i.ok=!0,i.value=z(e.window,n)),n},zl=Symbol("loop_break"),Nl=Symbol("loop_continue"),Fl={trace:$l,trace_call:Ll,await_start:jl,await_finish:Tl,before_take_node_snapshot:Pl,take_node_snapshot_fast:Al,take_node_snapshot:Ml,Symbol_loop_break:zl,Symbol_loop_continue:Nl};function St(e){return e.replace(/\s*\n\s*/g,"")}var Tt=(e,t)=>"const __call_id = __cxt.call_counter;"+((e.type=="function_expr"?e.is_async:be(e))?"let __await_state;":"")+(t.should_collect_footprints&&t.breakpoint.function_node==e?` +`),xe=(e,t)=>e.result==null?t.result==null:t.result!=null&&e.result.ok==t.result.ok&&!!e.result.is_error_origin==!!t.result.is_error_origin,ce=e=>({index:e.index,length:e.length,result:e.result==null||e.type=="function_expr"?null:e.result.ok?{ok:!0}:{ok:!1,is_error_origin:!!e.result.is_error_origin}}),br=e=>e.type=="binary"||e.type=="ternary",sl=(e,t)=>{let r=e.children.map(s=>kr(s)).reduce((s,[a,..._])=>{if(s.length==0)return[a,..._];{let c=s[s.length-1];if(xe(c,a))return[...s.slice(0,s.length-1),{index:c.index,length:a.index-c.index+a.length,result:a.result==null?null:{ok:a.result.ok}},..._];if(!br(e)&&c.result==null&&a.result?.ok){let u=c.index+c.length;return[...s,{...a,index:u,length:a.index-u+a.length},..._]}else return!br(e)&&c.result?.ok&&a.result==null?[...s.slice(0,s.length-1),{...c,length:a.index-c.index},a,..._]:[...s,a,..._]}},[]);if(e.result==null||e.result?.ok&&r.reduce((s,a)=>s&&xe(r[0],a),!0)){if(xe(e,r[0]))return t&&e.type=="function_expr"?[{...ce(e),result:{ok:e.result.ok}}]:[ce(e)];{let s=ce(e),a=r[0].index+r[0].length;return[{...s,length:r[0].index-s.index},...r,{...s,index:a,length:e.index+e.length-a}]}}if(r.length==0)throw new Error("illegal state");let n=r[0],l=xe(n,e)&&e.result?.ok?[{...n,index:e.index,length:n.length+n.index-e.index},...r.slice(1)]:r,o=l[l.length-1];return xe(o,e)&&e.result?.ok?[...l.slice(0,l.length-1),{...o,index:o.index,length:e.index+e.length-o.index}]:l},kr=(e,t=!1)=>{if(e.type=="function_expr"&&!t)return[{...ce(e),result:null}];if(e.type=="while"&&!t)return[{index:e.index,length:5,result:e.result==null?null:e.result.ok?{ok:!0}:{ok:!1,is_error_origin:!!e.result.is_error_origin}},{index:e.index+5,length:e.length-5,result:null}];if(e.children==null||e.children.length==0)return[ce(e)];if(e.result?.is_error_origin){let n=ce(e),l=il(e);return l.length==0?[n]:l.map((o,i)=>{let s;if(i==0)s=e.index;else{let a=l[i-1];s=a.index+a.length}return{index:s,length:o.index-s,result:n.result}}).concat([{index:l.at(-1).index+l.at(-1).length,length:e.index+e.length-(l.at(-1).index+l.at(-1).length),result:n.result}])}let r=sl(e,t);return e.result!=null&&!e.result.ok?r.map(n=>n.result==null?{...n,result:{ok:!1,is_error_origin:!1}}:n):r},Er=e=>{let t=kr(e,!0).filter(n=>n.result!=null&&(n.result.ok||n.result.is_error_origin)),{ok:r}=t.reduce(({ok:n,prev:l},o)=>n?l==null?{ok:n,prev:o}:l.index+l.length>o.index?{ok:!1}:{ok:!0,prev:o}:{ok:n},{ok:!0,prev:null});if(!r)throw new Error("illegal state");return t},Sr=(e,t)=>Object.values(e.colored_frames?.[t]??{}).map(r=>e.frames.get(r).coloring).flat();var kt=(e,t)=>{let r=e.map(t),n=r.reduce((o,i)=>i.undeclared==null?o:o.concat(i.undeclared),[]),l=r.map(o=>o.closed).reduce(_r,new Set);return{nodes:r.map(o=>o.node),undeclared:n,closed:l}},St=e=>e.type=="import"?Object.fromEntries(e.children.map(t=>[t.value,t])):e.type=="export"?St(e.binding):e.type=="let"||e.type=="const"?Object.fromEntries(e.children.flatMap(C).map(t=>[t.value,t])):(e.type=="function_decl",null),be=e=>{if(e.type=="identifier")return{...e,definition:"self"};if(["destructuring_default","destructuring_rest"].includes(e.type))return{...e,children:[be(e.name_node),...e.children.slice(1)]};if(e.type=="destructuring_pair")return{...e,children:[e.children[0],be(e.children[1])]};if(["array_destructuring","object_destructuring"].includes(e.type))return{...e,children:e.children.map(be)};if(e.type=="decl_pair")return{...e,children:[be(e.children[0]),...e.children.slice(1)]};throw console.error(e),new Error("not implemented")},al=new Set(["leporello"]),ke=(e,t,r={},n={},l)=>{if(!(t instanceof Set))throw new Error("not a set");if(e.type=="identifier"){if(e.definition!=null)return{node:e,undeclared:null,closed:new Set([e.value])};{let o=r[e.value];return o==null?t.has(e.value)||al.has(e.value)?{node:{...e,definition:"global"},undeclared:null,closed:new Set}:{node:e,undeclared:[e],closed:new Set}:{node:{...e,definition:{index:o.index}},undeclared:null,closed:new Set([e.value])}}}else if(e.type=="do"){let o=Object.fromEntries(e.children.filter(u=>u.type=="function_decl").map(u=>[u.children[0].name,u.children[0]])),i=e.children.reduce(({scope:u,children:p},f)=>({scope:{...u,...St(f)},children:p.concat([{node:f,scope:u}])}),{scope:o,children:[]}),s=i.scope,{nodes:a,undeclared:_,closed:c}=kt(i.children,u=>ke(u.node,t,{...r,...u.scope},s,l));return{node:{...e,children:a},undeclared:_,closed:yt(c,new Set(Object.keys(s)))}}else if(e.type=="function_expr"){let o=C(e.function_args),i=Object.fromEntries(o.map(u=>[u.value,u])),{nodes:s,undeclared:a,closed:_}=kt(e.children,u=>ke(u,t,{...r,...n,...i})),c=yt(_,new Set(o.map(u=>u.value)));return{node:{...e,children:s,closed:c},undeclared:a,closed:new Set}}else if(e.children!=null){let o,i;e.type=="import"?(i=cl(l,e.module),o=e.children.map((u,p)=>({...u,definition:{module:i,is_default:p==0&&e.default_import!=null}}))):e.type=="const"||e.type=="let"?o=e.children.map(be):o=e.children;let{nodes:s,undeclared:a,closed:_}=kt(o,u=>ke(u,t,r,n)),c={...e,children:s};return e.type=="import"&&(c={...c,full_import_path:i}),e.type=="while"&&(c={...c,closed:_}),{node:c,undeclared:a,closed:_}}else return{node:e,undeclared:null,closed:new Set}},Et="dummy://dummy/",cl=(e,t)=>{let r=new URL(t,Et+e).toString();return r.lastIndexOf(Et)==0?r.replace(Et,""):r},Tr=e=>{let t=n=>We(e[n]).map(l=>t(l)).flat().concat(n);return Object.keys(e).reduce((n,l)=>n.concat(t(l)),[]).reduce((n,l)=>n.includes(l)?n:[...n,l],[])},Ee=e=>e.type=="unary"&&e.operator=="await"?!0:e.type=="function_expr"||e.children==null?!1:e.children.find(t=>Ee(t))!=null;var $r=e=>[..._l(e,!0),...ul(e),...dl(e)],Ke=(e,t,r)=>{let{context:n,problems:l}=r(e,t);return e.children==null?l??[]:e.children.reduce((o,i)=>{let s=Ke(i,n,r);return s==null?o:o==null?s:o.concat(s)},l)??[]},_l=(e,t=!0)=>Ke(e,t,(r,n)=>{if(r.type=="function_expr")return{problems:null,context:r.is_async};if(r.type=="unary"&&r.operator=="await"&&!n){let l=r.children[0];return{problems:[{index:l.index,length:l.length,message:"await is only valid in async functions and the top level bodies of modules"}],context:n}}return{problems:null,context:n}}),jr=e=>e.filter((n,l)=>e.find((o,i)=>o.value==n.value&&i({index:n.index,length:n.length,message:`Identifier '${n.value}' has already been declared`})),ul=e=>Ke(e,null,(t,r)=>{if(t.type=="function_expr"){let n=C(t.function_args);return{context:hr(n,l=>l.value),problems:jr(n)}}else if(t.type=="do"){let n=t.children.map(o=>{if(o.type=="function_decl"){let i=o.children[0];return{value:i.name,index:i.index,length:i.name.length}}else{let i=St(o);return i==null?null:Object.values(i)}}).flat().filter(o=>o!=null);return{context:null,problems:jr([...r??[],...n])}}else return{context:null,problems:null}}),dl=e=>Ke(e,!1,(t,r)=>t.type=="function_expr"?{problems:null,context:!1}:t.is_loop?{problems:null,context:!0}:(t.type=="break"||t.type=="continue")&&!r?{problems:[{index:t.index,length:t.length,message:`Illegal ${t.type} statement: no surrounding iteration statement`}],context:r}:{problems:null,context:r});var Cr=e=>e.frames.get(e.active_calltree_node.id),Ve=(e,t)=>({id:"calltree",children:[e,{id:"deferred_calls",children:t}]}),U=e=>e.calltree.children[1].children,P=e=>e.calltree.children[0];var _e=(e,t,r=!1,n=!1)=>{let l=e;for(let a=0;a{e.io_trace_is_replay_aborted=!0,e.io_trace_abort_replay();let t=new Error("io replay aborted");throw t.__ignore=!0,t},Pr=(e,t,r,n,l)=>{let o=e.__cxt;if(o.io_trace_is_replay_aborted){let i=new Error("io replay was aborted");throw i.__ignore=!0,i}return o.is_recording_deferred_calls?{is_return:!0,value:n?new t(...l):t.apply(r,l)}:{is_return:!1}},Ar=(e,t,r,n,l)=>{let o=function(...i){let s=new.target!=null,{value:a,is_return:_}=Pr(e,t,this,s,i);if(_)return a;let c=e.__cxt,u=c;if(c.io_trace_is_recording){let p,f,h;try{let m=c.io_trace.length;if(r=="setTimeout"){i=i.slice();let y=i[0];i[0]=Object.defineProperty(function(){u==c&&(c.io_trace_is_replay_aborted||(c.io_trace.push({type:"resolution",index:m}),y()))},"name",{value:y.name})}return f=s?new t(...i):t.apply(this,i),p=!0,f?.[Symbol.toStringTag]=="Promise"?(f=f.then(y=>(f.status={ok:!0,value:y},l?y:e.structuredClone(y))).catch(y=>{throw f.status={ok:!1,error:y},e.structuredClone(y)}).finally(()=>{u==c&&(c.io_trace_is_replay_aborted||c.io_trace.push({type:"resolution",index:m}))}),f):l?f:e.structuredClone(f)}catch(m){throw h=m,p=!1,e.structuredClone(m)}finally{c.io_trace.push({type:"call",name:r,ok:p,value:f,error:h,args:i,has_new_target:s,use_context:n,skip_clone:l,context:n?this:void 0})}}else{let p=c.io_trace[c.io_trace_index];if(p==null||p.type!="call"||p.has_new_target!=s||p.use_context&&p.context!=this||p.name!=r||r=="setTimeout"&&i[1]!=p.args[1]||r!="setTimeout"&&JSON.stringify(p.args)!=JSON.stringify(i))Lr(c);else if(c.io_trace.find((h,m)=>h.type=="resolution"&&m>c.io_trace_index)!=null&&!c.io_trace_resolver_is_set&&(c.io_trace_resolver_is_set=!0,setTimeout(()=>{if(u!=c||c.io_trace_is_replay_aborted)return;if(c.io_trace_resolver_is_set=!1,c.io_trace_index>=c.io_trace.length)throw new Error("illegal state");if(c.io_trace[c.io_trace_index].type=="call")c.io_trace_is_replay_aborted=!0,c.io_trace_abort_replay();else for(;c.io_trace_index{c.io_trace_resolvers.set(c.io_trace_index-1,{resolve:h,reject:m})});if(r=="setTimeout"){let h=i[0];return c.io_trace_resolvers.set(c.io_trace_index-1,{resolve:h}),p.value}else return l?p.value:e.structuredClone(p.value)}else throw e.structuredClone(p.error)}};return Object.defineProperty(o,"name",{value:t.name}),o},pl=e=>{let t=e.Date,r=t.prototype,n=Ar(e,t,"Date",!1);e.Date=function(...o){return o.length==0?new.target!=null?new n(...o):n(...o):new.target!=null?new t(...o):t(...o)},e.Date.prototype=r,e.Date.parse=Date.parse,e.Date.now=Date.now,e.Date.UTC=Date.UTC,_e(e,["Date","now"])},Or=(e,t)=>{let r=e[t];e[t]=function(...n){let l=new.target!=null,{value:o,is_return:i}=Pr(e,r,this,l,n);if(i)return o;let s=e.__cxt;return s.io_trace_is_recording||Lr(s),l?new r(...n):r.apply(this,n)},Object.defineProperty(e[t],"name",{value:t})},Mr=e=>{if(_e(e,["Math","random"]),_e(e,["setTimeout"],void 0,!0),_e(e,["clearTimeout"]),Or(e,"setInterval"),Or(e,"clearInterval"),pl(e),_e(e,["fetch"],void 0,!0),e.Response!=null){let t=["arrayBuffer","blob","formData","json","text"];for(let r of t)_e(e,["Response","prototype",r],!0)}};var zr=globalThis?.CanvasRenderingContext2D?.prototype?.reset;function fl(e){zr!=null?zr.call(e):e.canvas.width=e.canvas.width+0}function hl(e){for(let t of e.contexts)fl(t)}function Fr(e){let t=e?.CanvasRenderingContext2D?.prototype;if(t==null)return;let r=Object.getOwnPropertyDescriptors(t);Object.entries(r).forEach(([n,l])=>{if(l.value!=null){if(typeof l.value!="function")return;let o=l.value;t[n]={[n](){let i=e.__cxt,s=++i.version_counter;try{return o.apply(this,arguments)}finally{i.canvas_ops.contexts.add(this),i.canvas_ops.ops.push({canvas_context:this,method:o,version_number:s,args:arguments})}}}[n]}if(l.set!=null){let o=l.set;Object.defineProperty(t,n,{set(i){let s=e.__cxt,a=++s.version_counter;try{o.call(this,i)}finally{s.canvas_ops.contexts.add(this),s.canvas_ops.ops.push({canvas_context:this,version_number:a,set_op:o,prop_value:i})}}})}})}function Nr(e){if(e.method!=null)e.method.apply(e.canvas_context,e.args);else if(e.set_op!=null)e.set_op.call(e.canvas_context,e.prop_value);else throw new Error("illegal op")}function Je(e,t){if(e.calltree==null)return;let r=e.rt_cxt;if(r.canvas_ops.ops!=null)if(hl(r.canvas_ops),t)for(let n of r.canvas_ops.ops)Nr(n);else{let n=e.current_calltree_node.last_version_number;for(let l of r.canvas_ops.ops){if(l.version_number>n)break;Nr(l)}}}var ml=["pointerId","buttons","altKey","ctrlKey","shiftKey","metaKey","pageX","pageY","deltaX","deltaY","key","which","timeStamp"],gl=new Set(["blur","focus","click","dblclick","wheel","input","change","contextmenu","pointerdown","pointerup","pointermove","pointerover","pointerenter","pointerleave","pointercancel","mousedown","mouseup","mousemove","mouseover","mouseenter","mouseleave","mousecancel","keydown","keyup","keypress"]),yl=["bubbles","composed","cancelable"],Dr=e=>{let t=e.window,r=t.EventTarget.prototype.addEventListener,n=new Set;t.EventTarget.prototype.addEventListener=function(o,...i){return!n.has(o)&&gl.has(o)&&r.call(t.window,o,s=>{if(e.is_replaying_domevents||["change","input"].includes(o)&&["checkbox","radio"].includes(s.target.type))return;let a=s.constructor.name,_=Object.fromEntries(ml.map(p=>[p,s[p]])),c=Object.fromEntries(yl.map(p=>[p,s[p]])),u=vl(t.window,s.target);e.domevents.push({constructorName:a,type:o,props:_,dispatch_props:c,selectors:u,value:s.target.value})},!0),n.add(o),r.call(this,o,...i)}},Rr=e=>{try{e.is_replaying_domevents=!0,e.window.document.dispatchEvent(new Event("DOMContentLoaded")),e.window.window.dispatchEvent(new Event("DOMContentLoaded")),e.window.window.dispatchEvent(new Event("load"));for(let t of e.domevents){let r=e.window[t.constructorName],n=Object.defineProperties(new r(t.type,t.dispatch_props),Object.fromEntries(Object.entries(t.props).map(([o,i])=>[o,{value:i}]))),l=xl(e.window.window,t.selectors);["input","change"].includes(t.type)&&(l.value=t.value),l.dispatchEvent(n)}}finally{e.is_replaying_domevents=!1}};function wl(e){let t=[];for(;e;){t.unshift(e.tagName.toLowerCase());let r=e.parentNode;if(r){let n=[...r.children];if(n.length>1){let l=n.indexOf(e)+1;l&&(t[0]+=`:nth-child(${l})`)}}if(e.hasAttribute("part")){let n=`[part=${e.getAttribute("part")}]`;t[0]+=n}if(r instanceof Element)e=r;else break}return t.join(" > ")}function vl(e,t){if(t==e)return["window"];let r=[],n;for(;(n=t.getRootNode())&&(r.unshift(wl(t)),!(n===e.document||n===t));)t=n.host;return r}function xl(e,t){let r=e.document,n,l;for(let o of t){if(o==="window")return e;if(l=r?.querySelector(o),!l)return n;if(n=l,r=l?.shadowRoot,!r)break}return n}var ue;try{(function e(){return e()})()}catch(e){ue=e}var bl=500,kl=e=>(...t)=>{let r=e(...t),n=l=>l.done?l.value:l.value?.[Symbol.toStringTag]=="Promise"?l.value.then(o=>n(r.next(o)),o=>n(r.throw(o))):n(r.next(l.value));return n(r.next())},M=(e,t)=>{let r=new Map;return n(t);function n(o){if(o==null||typeof o!="object")return o;let i=r.get(o);if(i!=null)return i;let s={};return r.set(o,s),i=l(o),Object.assign(s,i),i}function l(o){if(Array.isArray(o))return{clazz:"Array",array_entries:o.map(n)};if(e.Element!=null&&o instanceof e.Element&&!o.isConnected)return{clazz:o.constructor?.name,is_svg:e.SVGElement!=null&&o instanceof e.SVGElement,object_entries:[],dom_node:o.cloneNode(!0)};if(o instanceof e.Map)return{clazz:"Map",object_entries:[...o.entries()].map(([i,s])=>[n(i),n(s)])};if(o instanceof e.Set)return{clazz:"Set",array_entries:[...o.values()].map(n)};if(o?.[Symbol.toStringTag]=="Promise"){let i;return o.status!=null&&(i={ok:o.status.ok,value:n(o.status.value),error:n(o.status.error)}),{clazz:"Promise",status:i}}return o instanceof e.Date?{clazz:"Date",string:o.toJSON()}:o instanceof e.Error?{clazz:o.constructor?.name,string:o.toString()}:o==e?{clazz:"Window",object_entries:[]}:{clazz:o.constructor?.name,object_entries:Object.entries(o).map(([i,s])=>[i,n(s)])}}},El=()=>{let e;return[new Promise(r=>e=r),e]},Ir=kl(function*(e,t,r){let[n,l]=El();if(t=r==null||r.length==0?{...t,logs:[],io_trace_is_recording:!0,io_trace:[]}:{...t,logs:[],io_trace_is_recording:!1,io_trace:r,io_trace_is_replay_aborted:!1,io_trace_resolver_is_set:!1,io_trace_resolvers:new Map,io_trace_index:0,io_trace_abort_replay:l},t.window.__cxt==null)t.window.__cxt=t,Ll(t.window),jl(t),Mr(t.window),Sl(t),Dr(t),Fr(t.window);else throw new Error("illegal state");let o;for(let a=0;a{e.window.leporello={storage:e.storage}},jl=e=>{let t=e.window.Promise.prototype.then;e.window.Promise.prototype.then=function(n,l){e.children==null&&(e.children=[]);let o=e.children,i=(s,a)=>typeof s!="function"?s:_=>{this.status==null&&(this.status=a?{ok:a,value:_}:{ok:a,error:_});let c=e.children;e.children=o;try{return s(_)}finally{e.children=c}};return t.call(this,i(n,!0),i(l,!1))}},K=e=>{for(let t=0;t{e.children==null&&(e.children=[]);let n={children_copy:e.children,promise:t};return t?.[Symbol.toStringTag]=="Promise"?n.promise=t.then(l=>{n.status={ok:!0,value:l}},l=>{n.status={ok:!1,error:l}}):n.status={ok:!0,value:t},n},$l=(e,t)=>{if(e.children=t.children_copy,t.status.ok)return t.status.value;throw t.status.error},Cl=(e,t,r,n,l)=>{function o(...i){if(e.stack.length>bl)throw new ue.constructor(ue.message);let s=e.children;e.children=null,e.stack.push(!1);let a=++e.call_counter,_=e.version_counter,c,u=e.breakpoint.current_calltree_node_id==a;u&&(c={args:M(e.window,i),context_before:M(e.window,this)},K(e));let p,f,h,m=e.is_toplevel_call;e.is_toplevel_call=!1;try{return new.target==null?f=t(...i):f=new t(...i),p=!0,f?.[Symbol.toStringTag]=="Promise"&&K(e),u&&(c.ok=p,c.context_after=M(e.window,this),c.value=M(e.window,f)),f}catch(y){throw p=!1,h=y,u&&(c.error=M(e.window,h)),K(e),e.is_recording_deferred_calls&&m&&h instanceof e.window.Error&&(h.__ignore=!0),h}finally{let y={id:a,version_number:_,last_version_number:e.version_counter,ok:p,context:this,value:f,error:h,fn:o,args:n==null?i:i.slice(0,n),snapshot:c};if(e.stack.pop()?y.children=e.children:y.has_more_children=e.children!=null&&e.children.length!=0,e.children=s,e.children==null&&(e.children=[]),e.children.push(y),e.is_toplevel_call=m,e.is_recording_deferred_calls&&e.is_toplevel_call){if(e.children.length!=1)throw new Error("illegal state");let E=e.children[0];e.children=null;let A=e.logs;e.logs=[],e.on_deferred_call(E,e.execution_id,A)}}}return Object.defineProperty(o,"name",{value:r}),o.__location=l,o.is_hosted=!0,o},Ol=["log","error","info","debug","warn","trace"],Ll=e=>{let t=e.console,r=e.__cxt;for(let n of Ol){let l=t[n];t[n]={[n](...o){let i=++r.call_counter,s=r.breakpoint.current_calltree_node_id==i,a={id:i,version_number:r.version_counter,last_version_number:r.version_counter,ok:!0,value:void 0,fn:l,args:o,context:t,is_new:!1,snapshot:s?{args:M(r.window,o)}:null};r.children==null&&(r.children=[]),r.children.push(a),r.logs.push(r.call_counter),K(r)}}[n],t[n].is_hosted=!0}},Pl=(e,t,r,n,l,o=!1,i)=>{if(typeof t!="function")throw new TypeError(l+" is not a "+(o?"constructor":"function"));if(t.is_hosted)try{return o?new t(...n):t.apply(r,n)}finally{e.children.at(-1).callsite_location=i}let s=e.children;e.children=null,e.stack.push(!1);let a=++e.call_counter,_=e.version_counter,c,u=e.breakpoint.current_calltree_node_id==a;u&&(c={args:M(e.window,n),context_before:M(e.window,r)},K(e));let p,f,h;try{return o?f=new t(...n):f=t.apply(r,n),p=!0,f?.[Symbol.toStringTag]=="Promise"&&K(e),u&&(c.ok=p,c.context_after=M(e.window,r),c.value=M(e.window,f)),f}catch(m){throw p=!1,h=m,u&&(c.error=M(e.window,h)),K(e),h}finally{let m={id:a,version_number:_,last_version_number:e.version_counter,ok:p,value:f,error:h,fn:t,args:n,context:r,is_new:o,snapshot:c,callsite_location:i};m.children_count=e.children?.length??0,e.stack.pop()?m.children=e.children:m.has_more_children=e.children!=null&&e.children.length!=0,e.children=s,e.children==null&&(e.children=[]),e.children.push(m)}},Al=(e,t,r)=>{if(!e.is_entrypoint)return;let n=e.snapshots,l=n.get(t);if(!(l==null||r==e.breakpoint.selected_call_id))return null;l==null&&(l=new Map,n.set(t,l));let i=l.get(r);return i==null?(i={call_id:r,ok:!1},K(e),l.set(r,i),i):null},Ml=(e,t,r)=>(t!=null&&(t.ok=!0,t.value=M(e.window,r)),r),zl=(e,t,r,n)=>{if(!e.is_entrypoint)return;let o=e.snapshots.get(t);if(o==null)return n;let i=o.get(r);return i!=null&&!i.ok&&(i.ok=!0,i.value=M(e.window,n)),n},Nl=Symbol("loop_break"),Fl=Symbol("loop_continue"),Dl={trace:Cl,trace_call:Pl,await_start:Tl,await_finish:$l,before_take_node_snapshot:Al,take_node_snapshot_fast:Ml,take_node_snapshot:zl,Symbol_loop_break:Nl,Symbol_loop_continue:Fl};function jt(e){return e.replace(/\s*\n\s*/g,"")}var $t=(e,t)=>"const __call_id = __cxt.call_counter;"+((e.type=="function_expr"?e.is_async:Ee(e))?"let __await_state;":"")+(t.should_collect_footprints&&t.breakpoint.function_node==e?` const __footprints = new Map(); __cxt.footprints.set(__call_id, __footprints); - `:""),Ir=(e,t)=>{let r={...t,current_function:e},n=u=>ue(u,r,e),l=e.is_arrow?"(...__arguments) => ":"function(...__arguments)",o="let ["+e.function_args.children.map(u=>ue(u,r,e.function_args)).join(",")+"] = __arguments;",i=Tt(e,t),s=e.function_args;if(t.breakpoint.function_node==e){let u=`${t.module}_${e.index}_${e.length}`,p="{"+O(s).map(f=>f.value).join(",")+"}";o=`__rt.before_take_node_snapshot(__cxt, '${u}', __call_id);`+o+`__rt.take_node_snapshot(__cxt, '${u}', __call_id, ${p});`,t.should_collect_footprints&&(o=o+`__footprints.set('${s.index}_${s.length}', true); -`)}let a=(e.is_async?"async ":"")+l+(e.body.type=="do"?"{"+i+o+n(e.body)+"}":"{"+i+o+"return "+n(e.body)+"}"),_=e.function_args.children.find(u=>u.type=="destructuring_rest")==null?e.function_args.children.length:null,c=`{index: ${e.index}, length: ${e.length}, module: '${t.module}'}`;return`__rt.trace(__cxt, ${a}, "${e.name}", ${_}, ${c})`},Hr=e=>e.string.replaceAll(new RegExp("\\(.*\\)","g"),"(...)"),jt=(e,t)=>"'"+JSON.stringify({index:e.index,length:e.length,module:t.module}).replaceAll("'","\\'")+"'",Dl=(e,t)=>{let r=(s,a)=>ue(s,t,a??e),n=`[${e.args.children.map(s=>r(s,e.args)).join(",")}]`,l=Hr(e.fn),o=jt(e,t),i=r(e.fn);return e.fn.type=="member_access"?`( + `:""),Ur=(e,t)=>{let r={...t,current_function:e},n=u=>de(u,r,e),l=e.is_arrow?"(...__arguments) => ":"function(...__arguments)",o="let ["+e.function_args.children.map(u=>de(u,r,e.function_args)).join(",")+"] = __arguments;",i=$t(e,t),s=e.function_args;if(t.breakpoint.function_node==e){let u=`${t.module}_${e.index}_${e.length}`,p="{"+C(s).map(f=>f.value).join(",")+"}";o=`__rt.before_take_node_snapshot(__cxt, '${u}', __call_id);`+o+`__rt.take_node_snapshot(__cxt, '${u}', __call_id, ${p});`,t.should_collect_footprints&&(o=o+`__footprints.set('${s.index}_${s.length}', true); +`)}let a=(e.is_async?"async ":"")+l+(e.body.type=="do"?"{"+i+o+n(e.body)+"}":"{"+i+o+"return "+n(e.body)+"}"),_=e.function_args.children.find(u=>u.type=="destructuring_rest")==null?e.function_args.children.length:null,c=`{index: ${e.index}, length: ${e.length}, module: '${t.module}'}`;return`__rt.trace(__cxt, ${a}, "${e.name}", ${_}, ${c})`},Wr=e=>e.string.replaceAll(new RegExp("\\(.*\\)","g"),"(...)"),Tt=(e,t)=>"'"+JSON.stringify({index:e.index,length:e.length,module:t.module}).replaceAll("'","\\'")+"'",Rl=(e,t)=>{let r=(s,a)=>de(s,t,a??e),n=`[${e.args.children.map(s=>r(s,e.args)).join(",")}]`,l=Wr(e.fn),o=Tt(e,t),i=r(e.fn);return e.fn.type=="member_access"?`( __obj = ${r(e.fn.object,e.fn)}, __fn = ${i}, __rt.trace_call(__cxt, __fn, __obj, ${n}, ${JSON.stringify(l)}, false, ${o}) - )`:`__rt.trace_call(__cxt, ${i}, null, ${n}, ${JSON.stringify(l)}, false, ${o})`},Wr=e=>`(__await_state = __rt.await_start(__cxt, ${e}),await __await_state.promise,__rt.await_finish(__cxt, __await_state))`,Ur=(e,t)=>e?Wr(t):t,qr=(e,t,r)=>{let n=(l,o)=>ue(l,t,o??e);if(e.type=="identifier")return e.value;if(["number","string_literal","builtin_identifier","backtick_string"].includes(e.type))return e.value;if(e.type=="do")return[...e.children.filter(l=>l.type=="function_decl"),...e.children.filter(l=>l.type!="function_decl")].reduce((l,o)=>l+n(o)+`; -`,"");if(e.type=="return")return e.expr==null?"return ;":"return "+n(e.expr)+";";if(e.type=="throw")return"throw "+n(e.expr)+";";if(e.type=="if"){let l=s=>"{"+n(s)+"}",o="if("+n(e.cond)+")"+l(e.branches[0]);return e.branches[1]==null?o:o+" else "+l(e.branches[1])}else{if(e.type=="array_literal")return"["+e.elements.map(l=>n(l)).join(", ")+"]";if(e.type=="object_literal")return`{${e.elements.map(o=>{if(o.type=="object_spread")return n(o);if(o.type=="identifier"){let i=n(o);return o.value+": "+i}else{if(o.type=="key_value_pair")return"["+(o.key.type=="computed_property"?n(o.key.expr,o.key):n(o.key,o))+"]: ("+n(o.value,o)+")";throw new Error("unknown node type "+o.type)}}).join(",")}}`;if(e.type=="function_call")return Dl(e,t);if(e.type=="function_expr")return Ir(e,t);if(e.type=="ternary")return"("+n(e.cond)+`) + )`:`__rt.trace_call(__cxt, ${i}, null, ${n}, ${JSON.stringify(l)}, false, ${o})`},qr=e=>`(__await_state = __rt.await_start(__cxt, ${e}),await __await_state.promise,__rt.await_finish(__cxt, __await_state))`,Hr=(e,t)=>e?qr(t):t,Br=(e,t,r)=>{let n=(l,o)=>de(l,t,o??e);if(e.type=="identifier")return e.value;if(["number","string_literal","builtin_identifier","backtick_string"].includes(e.type))return e.value;if(e.type=="do")return[...e.children.filter(l=>l.type=="function_decl"),...e.children.filter(l=>l.type!="function_decl")].reduce((l,o)=>l+n(o)+`; +`,"");if(e.type=="return")return e.expr==null?"return ;":"return "+n(e.expr)+";";if(e.type=="throw")return"throw "+n(e.expr)+";";if(e.type=="if"){let l=s=>"{"+n(s)+"}",o="if("+n(e.cond)+")"+l(e.branches[0]);return e.branches[1]==null?o:o+" else "+l(e.branches[1])}else{if(e.type=="array_literal")return"["+e.elements.map(l=>n(l)).join(", ")+"]";if(e.type=="object_literal")return`{${e.elements.map(o=>{if(o.type=="object_spread")return n(o);if(o.type=="identifier"){let i=n(o);return o.value+": "+i}else{if(o.type=="key_value_pair")return"["+(o.key.type=="computed_property"?n(o.key.expr,o.key):n(o.key,o))+"]: ("+n(o.value,o)+")";throw new Error("unknown node type "+o.type)}}).join(",")}}`;if(e.type=="function_call")return Rl(e,t);if(e.type=="function_expr")return Ur(e,t);if(e.type=="ternary")return"("+n(e.cond)+`) ? `+n(e.branches[0])+` -: `+n(e.branches[1]);if(e.type=="assignment")return"("+e.children.map(l=>n(l,e)).join(",")+")";if(["const","let"].includes(e.type))return e.children.map(o=>{if(o.type=="identifier"){if(e.type!="let")throw new Error("illegal state");return"let "+o.value}return n(o,e)}).join(";")+";";if(e.type=="decl_pair"||e.type=="assignment_pair"){if(r.type=="assignment"&&e.children[0].type!="member_access"){let[a]=e.children;if(a.type!="identifier")throw new Error("TODO: illegal state")}let l=qr(e.children[0],t,e),o=n(e.children[1]),i=t.breakpoint.selected_node;return(i==e.children[0]||i==e)&&(o=ke(t.breakpoint.selected_node,o,t)),(r.type=="assignment"?"":r.type+" ")+" "+l+" = "+o}else{if(e.type=="member_access")return"("+(r.type=="function_call"?"__obj":n(e.object))+(e.is_optional_chaining?")?.[":")[")+n(e.property)+"]";if(e.type=="unary")return e.operator=="await"?Wr(n(e.expr)):"("+e.operator+" "+n(e.expr)+")";if(e.type=="binary")return""+n(e.args[0])+" "+e.operator+" "+n(e.args[1]);if(e.type=="array_spread"||e.type=="object_spread")return"...("+n(e.expr)+")";if(e.type=="new"){let l=`[${e.args.children.map(i=>n(i,e.args)).join(",")}]`,o=Hr(e.constructor);return`__rt.trace_call(__cxt, ${n(e.constructor)}, null, ${l},${JSON.stringify(o)}, true, ${jt(e,t)})`}else{if(e.type=="grouping")return"("+n(e.expr)+")";if(e.type=="array_destructuring")return"["+e.elements.map(l=>n(l,e)).join(", ")+"]";if(e.type=="object_destructuring")return"{"+e.elements.map(l=>n(l)).join(", ")+"}";if(e.type=="destructuring_rest")return"..."+n(e.name_node);if(e.type=="destructuring_default")return n(e.name_node)+" = "+n(e.expr);if(e.type=="destructuring_pair")return"["+n(e.key)+"] : "+n(e.value);if(e.type=="import"){let l,o;return e.default_import!=null?(o=`default: ${e.default_import},`,l=e.children.slice(1).map(i=>i.value)):(o="",l=e.children.map(i=>i.value)),`const {${o} ${l.join(",")}} = __cxt.modules['${e.full_import_path}'];`}else if(e.type=="export"){if(e.is_default)return`__cxt.modules['${t.module}'].default = ${n(e.children[0])};`;{let l=e.binding.children.flatMap(o=>O(o.name_node)).map(o=>o.value);return n(e.binding)+`Object.assign(__cxt.modules['${t.module}'], {${l.join(",")}});`}}else if(e.type=="function_decl"){let l=e.children[0];return`let ${l.name} = ${Ir(l,t)};`}else if(e.type=="while"){let l={...t,current_function:e},o=_=>ue(_,l,e),i=be(e),s=Tt(e,t),a=Ur(i,`__rt.trace_call( +: `+n(e.branches[1]);if(e.type=="assignment")return"("+e.children.map(l=>n(l,e)).join(",")+")";if(["const","let"].includes(e.type))return e.children.map(o=>{if(o.type=="identifier"){if(e.type!="let")throw new Error("illegal state");return"let "+o.value}return n(o,e)}).join(";")+";";if(e.type=="decl_pair"||e.type=="assignment_pair"){if(r.type=="assignment"&&e.children[0].type!="member_access"){let[a]=e.children;if(a.type!="identifier")throw new Error("TODO: illegal state")}let l=Br(e.children[0],t,e),o=n(e.children[1]),i=t.breakpoint.selected_node;return(i==e.children[0]||i==e)&&(o=Se(t.breakpoint.selected_node,o,t)),(r.type=="assignment"?"":r.type+" ")+" "+l+" = "+o}else{if(e.type=="member_access")return"("+(r.type=="function_call"?"__obj":n(e.object))+(e.is_optional_chaining?")?.[":")[")+n(e.property)+"]";if(e.type=="unary")return e.operator=="await"?qr(n(e.expr)):"("+e.operator+" "+n(e.expr)+")";if(e.type=="binary")return""+n(e.args[0])+" "+e.operator+" "+n(e.args[1]);if(e.type=="array_spread"||e.type=="object_spread")return"...("+n(e.expr)+")";if(e.type=="new"){let l=`[${e.args.children.map(i=>n(i,e.args)).join(",")}]`,o=Wr(e.constructor);return`__rt.trace_call(__cxt, ${n(e.constructor)}, null, ${l},${JSON.stringify(o)}, true, ${Tt(e,t)})`}else{if(e.type=="grouping")return"("+n(e.expr)+")";if(e.type=="array_destructuring")return"["+e.elements.map(l=>n(l,e)).join(", ")+"]";if(e.type=="object_destructuring")return"{"+e.elements.map(l=>n(l)).join(", ")+"}";if(e.type=="destructuring_rest")return"..."+n(e.name_node);if(e.type=="destructuring_default")return n(e.name_node)+" = "+n(e.expr);if(e.type=="destructuring_pair")return"["+n(e.key)+"] : "+n(e.value);if(e.type=="import"){let l,o;return e.default_import!=null?(o=`default: ${e.default_import},`,l=e.children.slice(1).map(i=>i.value)):(o="",l=e.children.map(i=>i.value)),`const {${o} ${l.join(",")}} = __cxt.modules['${e.full_import_path}'];`}else if(e.type=="export"){if(e.is_default)return`__cxt.modules['${t.module}'].default = ${n(e.children[0])};`;{let l=e.binding.children.flatMap(o=>C(o.name_node)).map(o=>o.value);return n(e.binding)+`Object.assign(__cxt.modules['${t.module}'], {${l.join(",")}});`}}else if(e.type=="function_decl"){let l=e.children[0];return`let ${l.name} = ${Ur(l,t)};`}else if(e.type=="while"){let l={...t,current_function:e},o=_=>de(_,l,e),i=Ee(e),s=$t(e,t),a=Hr(i,`__rt.trace_call( __cxt, Object.defineProperty( ${i?"async":""} () => { @@ -78,7 +78,7 @@ fib(6) __cxt, ${i?"async":""} () => { ${s}; - ${t.breakpoint.function_node==e?ke(e,"null",t):""} + ${t.breakpoint.function_node==e?Se(e,"null",t):""} if(${o(e.cond)}) { ${o(e.body)} return __rt.Symbol_loop_continue @@ -97,7 +97,7 @@ fib(6) if(__loop_counter_${e.index}++ > 1000) { throw new RangeError('Potential infinite loop: exceeded 1000 iterations.') } - const __loop_result_iter_${e.index} = ${Ur(i,"__loop_body_"+e.index+"()")}; + const __loop_result_iter_${e.index} = ${Hr(i,"__loop_body_"+e.index+"()")}; if(__loop_result_iter_${e.index} == __rt.Symbol_loop_continue) { // do nothing, continue loop } else { @@ -113,49 +113,49 @@ fib(6) null, null, false, - ${jt(e,t)}, + ${Tt(e,t)}, )`);return` const __loop_location_${e.index} = {index: ${e.index}, length: ${e.length}, module: '${t.module}'} const __loop_result_${e.index} = ${a}; if(__loop_result_${e.index} != __rt.Symbol_loop_break) { return __loop_result_${e.index} } - `}else{if(e.type=="break")return"return __rt.Symbol_loop_break;";if(e.type=="continue")return"return __rt.Symbol_loop_continue;";throw console.error(e),new Error("unknown node type: "+e.type)}}}}},ke=(e,t,r)=>{let n=`${r.module}_${e.index}_${e.length}`;return St(` + `}else{if(e.type=="break")return"return __rt.Symbol_loop_break;";if(e.type=="continue")return"return __rt.Symbol_loop_continue;";throw console.error(e),new Error("unknown node type: "+e.type)}}}}},Se=(e,t,r)=>{let n=`${r.module}_${e.index}_${e.length}`;return jt(` __rt.take_node_snapshot_fast( __cxt, __rt.before_take_node_snapshot(__cxt, '${n}', __call_id), ${t} ) - `)},ue=(e,t,r)=>{if(r==null&&e!=t.toplevel)throw console.error("node",e),new Error("illegal state");if(r!=null&&!r.children.includes(e))throw console.error("node",e),new Error("illegal state");let n=qr(e,t,r);if(t.should_collect_footprints&&t.breakpoint.function_node==t.current_function&&(r==null||!ye(e,r))&&!["array_spread","object_spread"].includes(e.type)&&(e.type=="do"?e.children.length==0&&(n=`__footprints.set('${e.index}_${e.length}', true);`):e.is_statement&&e.type!="assignment"||(e.type=="decl_pair"||e.type=="assignment_pair")&&r.type!="assignment"?n=` __footprints.set('${e.index}_${e.length}', false); -`+n+`; __footprints.set('${e.index}_${e.length}', true);`:n=St(` + `)},de=(e,t,r)=>{if(r==null&&e!=t.toplevel)throw console.error("node",e),new Error("illegal state");if(r!=null&&!r.children.includes(e))throw console.error("node",e),new Error("illegal state");let n=Br(e,t,r);if(t.should_collect_footprints&&t.breakpoint.function_node==t.current_function&&(r==null||!we(e,r))&&!["array_spread","object_spread"].includes(e.type)&&(e.type=="do"?e.children.length==0&&(n=`__footprints.set('${e.index}_${e.length}', true);`):e.is_statement&&e.type!="assignment"||(e.type=="decl_pair"||e.type=="assignment_pair")&&r.type!="assignment"?n=` __footprints.set('${e.index}_${e.length}', false); +`+n+`; __footprints.set('${e.index}_${e.length}', true);`:n=jt(` ( __footprints.set('${e.index}_${e.length}', false), __tmp = ${n}, __footprints.set('${e.index}_${e.length}', true), __tmp ) - `)),t.breakpoint.selected_node!=e||e.type=="decl_pair"||e.type=="assignment_pair")return n;if(e.type=="throw"){let o=`${t.module}_${e.index}_${e.length}`;return`__rt.before_take_node_snapshot(__cxt, '${o}', __call_id);`+n+`__rt.take_node_snapshot(__cxt, '${o}', __call_id, null);`}else{if(["return","break","continue"].includes(e.type))return ke(e,"undefined",t)+";"+n;if(e.type=="assignment")return ke(e,n,t);if(["let","const"].includes(e.type)){let o=`${t.module}_${e.index}_${e.length}`,i,s=e.children.flatMap(O).map(a=>a.value);if(e.children.length==1&&(e.children[0].type=="identifier"||e.children[0].type=="decl_pair"&&e.children[0].name_node.type=="identifier")){if(s.length!=1)throw new Error("illegal state");i=s[0]}else i="{"+s.join(", ")+"}";return`__rt.before_take_node_snapshot(__cxt, '${o}', __call_id);`+n+`__rt.take_node_snapshot(__cxt, '${o}', __call_id, ${i});`}else if(e.type=="import"){let o=`${t.module}_${e.index}_${e.length}`;return`__rt.before_take_node_snapshot(__cxt, '${o}', __call_id);`+n+St(` + `)),t.breakpoint.selected_node!=e||e.type=="decl_pair"||e.type=="assignment_pair")return n;if(e.type=="throw"){let o=`${t.module}_${e.index}_${e.length}`;return`__rt.before_take_node_snapshot(__cxt, '${o}', __call_id);`+n+`__rt.take_node_snapshot(__cxt, '${o}', __call_id, null);`}else{if(["return","break","continue"].includes(e.type))return Se(e,"undefined",t)+";"+n;if(e.type=="assignment")return Se(e,n,t);if(["let","const"].includes(e.type)){let o=`${t.module}_${e.index}_${e.length}`,i,s=e.children.flatMap(C).map(a=>a.value);if(e.children.length==1&&(e.children[0].type=="identifier"||e.children[0].type=="decl_pair"&&e.children[0].name_node.type=="identifier")){if(s.length!=1)throw new Error("illegal state");i=s[0]}else i="{"+s.join(", ")+"}";return`__rt.before_take_node_snapshot(__cxt, '${o}', __call_id);`+n+`__rt.take_node_snapshot(__cxt, '${o}', __call_id, ${i});`}else if(e.type=="import"){let o=`${t.module}_${e.index}_${e.length}`;return`__rt.before_take_node_snapshot(__cxt, '${o}', __call_id);`+n+jt(` __rt.take_node_snapshot( __cxt, '${o}', __call_id, __cxt.modules['${e.full_import_path}'] ); - `)}else return e.is_statement?n:ke(e,n,t)}},Br=(e,t,r,n,l,o,i,s,a,_)=>{let c=globalThis.app_window.Function,u=globalThis.app_window.eval("(async function(){})").constructor,p=e.sorted.map(y=>{let x=e.modules[y],E={module:y,toplevel:x,breakpoint:_,current_function:x,should_collect_footprints:a},M=`"use strict"; -let __obj, __fn, __tmp;`+Tt(x,E)+ue(x,E),Pe=be(x)?u:c;return{module:y,fn:new Pe("__cxt","__rt",M)}}),f={modules:t==null?{}:gt(t,(y,{module:x})=>x),call_counter:0,version_counter:0,children:null,stack:new Array,is_recording_deferred_calls:!1,on_deferred_call:(y,x,E)=>r(Ve(e.modules,y),x,E),domevents:n,execution_id:l,is_toplevel_call:!0,window:globalThis.app_window,storage:i,canvas_ops:{ops:[],contexts:new Set},snapshots:s,footprints:new Map,breakpoint:_},h=Rr(p,f,o),m=y=>{let x=Ve(e.modules,Be(y.calltree,y.deferred_calls));return{...y,breakpoint:_,calltree:x,io_trace:y.rt_cxt.io_trace}};return h?.[Symbol.toStringTag]=="Promise"?Promise.resolve(h).then(m):m(h)},Kr=(e,t)=>{if(e.index==t.index&&e.length==t.length&&(e.type=="function_expr"||e.is_loop))return e;if(e.children==null)throw new Error("illegal state");{let r=e.children.find(n=>xt(t,n));if(r==null)throw new Error("illegal state");return Kr(r,t)}},Ve=(e,t)=>t.toplevel?{...t,code:e[t.module],children:t.children&&t.children.map(r=>Ve(e,r))}:{...t,code:t.fn==null||t.fn.__location==null?null:Kr(e[t.fn.__location.module],t.fn.__location),children:t.children&&t.children.map(r=>Ve(e,r))},$t=(e,t,r)=>e.type=="unary"&&e.operator=="await"&&!r&&!t.toplevel&&t.value.status==null,Ct=(e,t,r,n)=>{let l=Rl(e,t,r,n);if(l.index!=null)throw new Error("illegal state");return{...e,...l,orig:e}},Rl=(e,t,r,n)=>{let l=u=>Ct(u,t,r,e),o=u=>r.get(u.index+"_"+u.length),i=o(e);if($t(e,t,i)&&(i=void 0),e.type=="function_expr"){if(n!=null)return{result:i==null?void 0:{ok:i}};{let[u,p]=e.children;return u=l(u),o(e.function_args)?(u={...u,result:{ok:!0}},p=l(p)):u={...u,result:{ok:!1,is_error_origin:!0}},{children:[u,p],result:{ok:p.result?.ok}}}}if(e.type=="while"&&n!=null)return{result:i==null?void 0:{ok:i,is_error_origin:!i}};if(n!=null&&ye(e,n))if(e.type=="member_access"){let u=e.children.map(f=>l(f)),p=u.every(f=>f.result?.ok);return{children:u,result:{ok:p}}}else i=!0;if(e.type=="decl_pair"){let[u,p]=e.children;if(u.type=="member_access")throw new Error("illegal state");return p=l(p),p.result?.ok&&(u=l(u)),{children:[u,p],result:{ok:i,is_error_origin:i?void 0:p.result?.ok}}}if(n?.type=="let"&&e.type=="identifier")return{result:{ok:!0}};let s=e.children&&e.children.map(u=>l(u)),a=s==null||s.every(u=>u.result?.ok),_=!i&&a;if(e.type=="do"&&(e.children.length!=0&&(i=s.reduce((u,p)=>u&&p.result?.ok,!0)),_=!1),e.type=="if"&&(i=o(e.cond),s.some(u=>u.result?.ok===!1)&&(i=!1)),e.is_loop)return{result:void 0,children:s};if(e.is_loop&&t.error?.message?.startsWith?.("Potential infinite loop")&&(_=!0),["return","break","continue"].includes(e.type)&&(i!=null&&(i=a),_=!1),e.type=="throw"&&(_=s.every(u=>u.result?.ok)),e.type=="key_value_pair"||e.type=="computed_property")return{result:{ok:a},children:s};if(e.type=="call_args"){let u;if(n.type=="new")u=n.constructor;else if(n.type=="function_call")u=n.fn;else throw new Error("illegal state");return o(u)?{children:s,result:{ok:a}}:{children:e.children}}return{result:i===void 0?void 0:{ok:i,is_error_origin:i?void 0:_},children:s}};var Vr=["break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield","enum","implements","interface","let","package","private","protected","public","static","yield","await"];var Il=["true","false","null"],Ul=new Function("regexp","str",` + `)}else return e.is_statement?n:Se(e,n,t)}},Kr=(e,t,r,n,l,o,i,s,a,_)=>{let c=globalThis.app_window.Function,u=globalThis.app_window.eval("(async function(){})").constructor,p=e.sorted.map(y=>{let x=e.modules[y],E={module:y,toplevel:x,breakpoint:_,current_function:x,should_collect_footprints:a},A=`"use strict"; +let __obj, __fn, __tmp;`+$t(x,E)+de(x,E),Me=Ee(x)?u:c;return{module:y,fn:new Me("__cxt","__rt",A)}}),f={modules:t==null?{}:wt(t,(y,{module:x})=>x),call_counter:0,version_counter:0,children:null,stack:new Array,is_recording_deferred_calls:!1,on_deferred_call:(y,x,E)=>r(Ge(e.modules,y),x,E),domevents:n,execution_id:l,is_toplevel_call:!0,window:globalThis.app_window,storage:i,canvas_ops:{ops:[],contexts:new Set},snapshots:s,footprints:new Map,breakpoint:_},h=Ir(p,f,o),m=y=>{let x=Ge(e.modules,Ve(y.calltree,y.deferred_calls));return{...y,breakpoint:_,calltree:x,io_trace:y.rt_cxt.io_trace}};return h?.[Symbol.toStringTag]=="Promise"?Promise.resolve(h).then(m):m(h)},Vr=(e,t)=>{if(e.index==t.index&&e.length==t.length&&(e.type=="function_expr"||e.is_loop))return e;if(e.children==null)throw new Error("illegal state");{let r=e.children.find(n=>bt(t,n));if(r==null)throw new Error("illegal state");return Vr(r,t)}},Ge=(e,t)=>t.toplevel?{...t,code:e[t.module],children:t.children&&t.children.map(r=>Ge(e,r))}:{...t,code:t.fn==null||t.fn.__location==null?null:Vr(e[t.fn.__location.module],t.fn.__location),children:t.children&&t.children.map(r=>Ge(e,r))},Ct=(e,t,r)=>e.type=="unary"&&e.operator=="await"&&!r&&!t.toplevel&&t.value.status==null,Ot=(e,t,r,n)=>{let l=Il(e,t,r,n);if(l.index!=null)throw new Error("illegal state");return{...e,...l,orig:e}},Il=(e,t,r,n)=>{let l=u=>Ot(u,t,r,e),o=u=>r.get(u.index+"_"+u.length),i=o(e);if(Ct(e,t,i)&&(i=void 0),e.type=="function_expr"){if(n!=null)return{result:i==null?void 0:{ok:i}};{let[u,p]=e.children;return u=l(u),o(e.function_args)?(u={...u,result:{ok:!0}},p=l(p)):u={...u,result:{ok:!1,is_error_origin:!0}},{children:[u,p],result:{ok:p.result?.ok}}}}if(e.type=="while"&&n!=null)return{result:i==null?void 0:{ok:i,is_error_origin:!i}};if(n!=null&&we(e,n))if(e.type=="member_access"){let u=e.children.map(f=>l(f)),p=u.every(f=>f.result?.ok);return{children:u,result:{ok:p}}}else i=!0;if(e.type=="decl_pair"){let[u,p]=e.children;if(u.type=="member_access")throw new Error("illegal state");return p=l(p),p.result?.ok&&(u=l(u)),{children:[u,p],result:{ok:i,is_error_origin:i?void 0:p.result?.ok}}}if(n?.type=="let"&&e.type=="identifier")return{result:{ok:!0}};let s=e.children&&e.children.map(u=>l(u)),a=s==null||s.every(u=>u.result?.ok),_=!i&&a;if(e.type=="do"&&(e.children.length!=0&&(i=s.reduce((u,p)=>u&&p.result?.ok,!0)),_=!1),e.type=="if"&&(i=o(e.cond),s.some(u=>u.result?.ok===!1)&&(i=!1)),e.is_loop)return{result:void 0,children:s};if(e.is_loop&&t.error?.message?.startsWith?.("Potential infinite loop")&&(_=!0),["return","break","continue"].includes(e.type)&&(i!=null&&(i=a),_=!1),e.type=="throw"&&(_=s.every(u=>u.result?.ok)),e.type=="key_value_pair"||e.type=="computed_property")return{result:{ok:a},children:s};if(e.type=="call_args"){let u;if(n.type=="new")u=n.constructor;else if(n.type=="function_call")u=n.fn;else throw new Error("illegal state");return o(u)?{children:s,result:{ok:a}}:{children:e.children}}return{result:i===void 0?void 0:{ok:i,is_error_origin:i?void 0:_},children:s}};var Jr=["break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield","enum","implements","interface","let","package","private","protected","public","static","yield","await"];var Ul=["true","false","null"],Hl=new Function("regexp","str",` const result = [] let match while((match = regexp.exec(str)) != null) { result.push(match) } return result -`),Hl=e=>{let t=["+","-","*","/","%","**"],r=["===","==","!==","!=","!","&&","||","??"],n=["(",")","[","]","{","}","...",".","?.",";",",","=>",...t,...r,"=","<=",">=",">","<","?",":"],l=[{name:"pragma_external",re:`//[\\s]*external[\\s]*[\r +`),Wl=e=>{let t=["+","-","*","/","%","**"],r=["===","==","!==","!=","!","&&","||","??"],n=["(",")","[","]","{","}","...",".","?.",";",",","=>",...t,...r,"=","<=",">=",">","<","?",":"],l=[{name:"pragma_external",re:`//[\\s]*external[\\s]*[\r ]`},{name:"pragma_external",re:"\\/\\*[\\s]*external[\\s]*\\*\\/"},{name:"comment",re:`//[^ ]*`},{name:"comment",re:"\\/\\*[\\s\\S]*?\\*\\/"},{name:"newline",re:`[\r -]+`},{name:"whitespace",re:"[^\\S\\r\\n]+"},{name:"string_literal",re:"'.*?'"},{name:"string_literal",re:'".*?"'},{name:"backtick_string",re:"`[\\s\\S]*?`"},{name:"builtin_identifier",re:Il.map(_=>"\\b"+_+"\\b").join("|")},{name:"keyword",re:Vr.map(_=>"\\b"+_+"\\b").join("|")},{name:"number",re:"\\d*\\.?\\d+"},{name:"identifier",re:"[A-Za-z_$][A-Za-z0-9_$]*"},{name:"punctuation",re:"("+n.map(_=>[..._].map(c=>"\\"+c).join("")).join("|")+")"}],o=l.map(({re:_})=>"("+_+")").join("|"),i=new RegExp(o,"mg"),a=Ul(i,e).map(_=>({type:l.find((u,p)=>_[p+1]!=null).name,index:_.index,string:_[0],length:_[0].length}));if(a.length==0)return{ok:!0,tokens:a};{let _=pr([{index:0,length:0},...a],[...a,{index:e.length}]).find(([c,u])=>c.index+c.length!=u.index);if(_!=null){let c=_[0];return{ok:!1,index:c.index+c.length,message:"unexpected lexical token"}}else return{ok:!0,tokens:a}}},At=e=>e.currentMt(t=>t.string==e,"expected "+e),Jr=new Set(["newline","pragma_external"]),Mt=(e,t)=>{let r=n=>{let l=At(n);return l==null?{ok:!1,error:t,cxt:n}:e(l)?{ok:!0,value:{...l,value:l.string,string:void 0},cxt:{...n,current:n.current+1}}:Jr.has(l.type)?r({...n,current:n.current+1}):{ok:!1,error:t,cxt:n}};return r},V=e=>Mt(t=>t.type==e,"expected "+e),zt=V("newline"),je=e=>{let t=At(e);return t==null?{ok:!0,cxt:e}:Jr.has(t.type)?je({...e,current:e.current+1}):{ok:!1,error:"unexpected token, expected eof",cxt:e}},b=(...e)=>t=>e.reduce((r,n)=>{if(r.ok)return r;{let l=n(t);return l.ok?l:r.cxt.current>l.cxt.current?r:l}},{ok:!1,cxt:{current:0}}),D=e=>t=>{let r=e(t);return r.ok?r:{ok:!0,value:null,cxt:t}},Ye=e=>{if(e.ok){let t=e.value.find(l=>l!=null),r=[...e.value].reverse().find(l=>l!=null),n={value:e.value,index:t.index,length:r.index+r.length-t.index};return{...e,value:n}}else return e},j=e=>t=>{let r=e.reduce((n,l)=>{if(n.ok){let o=l(n.cxt);return o.ok?{...o,value:n.value.concat([o.value])}:o}else return n},{cxt:t,ok:!0,value:[]});return r.ok?Ye(r):r},w=(e,t)=>r=>{let n=e(r);return n.ok?{...n,value:t(n.value)}:n},Wl=(e,t)=>r=>{let n=e(r);if(n.ok){let{ok:l,error:o}=t(n.value);return l?n:{ok:!1,error:o,cxt:r}}else return n},Gr=(e,t)=>r=>{let n=e(r);return n.ok?n:{...n,error:t}},Ee=(e,t)=>r=>{let n=e(r);return n.ok?t(n.value)(n.cxt):n},T=(e,t)=>w(j(t),r=>({...r,value:r.value[e]})),Xr=e=>t=>{let r=(l,o)=>{let i=e(l);return i.ok?r(i.cxt,o.concat([i.value])):o.length==0?i:{ok:!0,value:o,cxt:l}},n=r(t,[]);return n.ok?Ye(n):n},ql=(e,t)=>r=>{let n=(o,i)=>{if(t(o).ok)return{ok:!0,cxt:o,value:i};{let a=e(o);return a.ok?n(a.cxt,i.concat([a.value])):a}},l=n(r,[]);return l.ok?l.value.length==0?{...l,value:{value:l.value}}:Ye(l):l},Ot=e=>t=>{let r=e(t);return r.ok?{...r,cxt:t}:r},Bl=e=>w(T(0,[e,je]),({value:t})=>t),Te=(e,t)=>r=>{let n=e(r);return n.ok&&t(n.cxt).ok?{ok:!1,cxt:r,error:"not_followed_by"}:n},Ge=e=>t=>({ok:!0,value:e,cxt:t}),Nt=(e,t,r)=>w(j([e,D(t)]),({value:n,...l})=>{let[o,i]=n;return i==null?o:{...l,...r(o,i)}}),L=V("identifier"),Kl=w(V("builtin_identifier"),({...e})=>({...e,type:"builtin_identifier"})),Ft=V("string_literal"),Je=e=>t=>w(j([D(g(e)),t]),({value:r,...n})=>r[0]==null?r[1]:{...n,type:"unary",operator:e,children:[r[1]]}),Q=e=>t=>Nt(t,Xr(j([Mt(r=>e.includes(r.string),"expected "+e.join(",")),t])),(r,n)=>n.value.reduce((l,o)=>{let i=[l,o.value[1]];return{index:r.index,length:o.index-r.index+o.length,type:"binary",operator:o.value[0].value,children:i}},r)),Vl=e=>Nt(e,w(j([g("?"),t=>S(t),g(":"),t=>S(t)]),t=>{let[r,n,l,o]=t.value;return{...t,value:[n,o]}}),(t,{value:r})=>({type:"ternary",cond:t,branches:r,children:[t,...r]})),ee=(e,t)=>r=>{let n=Ee(D(Ot(g(e[1]))),l=>l!=null?Ge([]):Ee(t,o=>Ee(D(g(",")),i=>i==null?Ge([o]):Ee(n,s=>Ge([o,...s])))));return T(1,[g(e[0]),n,g(e[1])])(r)},Yr=e=>t=>{let r=l=>{let o=e(l);if(!o.ok)return o;let i=g(",")(o.cxt);if(!i.ok)return{...o,value:[o.value]};let s=r(i.cxt);return s.ok?{...s,value:[o.value,...s.value]}:s},n=r(t);return n.ok?Ye(n):n},Dt=(e,t)=>w(ee(e,b(w(j([r=>Se(r),g("="),r=>S(r)]),({value:r,...n})=>({...n,not_evaluatable:!0,type:"destructuring_default",children:[r[0],r[2]]})),r=>Se(r),w(T(1,[g("..."),r=>Se(r)]),({value:r,...n})=>({...n,type:"destructuring_rest",not_evaluatable:!0,children:[r]})))),({value:r,...n})=>({...n,type:t,not_evaluatable:!0,children:r})),Jl=Dt(["[","]"],"array_destructuring"),Gl=w(ee(["{","}"],b(w(j([w(L,e=>({...e,type:"string_literal",value:'"'+e.value+'"'})),g(":"),e=>Se(e)]),({value:e,...t})=>({...t,not_evaluatable:!0,type:"destructuring_pair",children:[e[0],e[2]]})),L,w(T(1,[g("..."),L]),({value:e,...t})=>({...t,type:"destructuring_rest",not_evaluatable:!0,children:[e]})))),({value:e,...t})=>({...t,type:"object_destructuring",not_evaluatable:!0,children:e})),Se=b(L,Jl,Gl),Xl=e=>Nt(e,Xr(b(w(j([b(g("?."),g(".")),w(b(L,V("keyword")),t=>({...t,type:"string_literal",value:'"'+t.value+'"',not_evaluatable:!0}))]),({value:[t,r],...n})=>({...n,value:r,type:"member_access",is_optional_chaining:t.value=="?."})),w(j([D(g("?.")),g("["),t=>S(t),g("]")]),({value:[t,r,n,l],...o})=>({...o,value:n,type:"computed_member_access",is_optional_chaining:t!=null})),w(ee(["(",")"],Rt),t=>({...t,type:"function_call"})))),(t,r)=>r.value.reduce((n,l)=>{let o=n.index,i=l.index-n.index+l.length,s;if(l.type=="member_access"||l.type=="computed_member_access")s={type:"member_access",is_optional_chaining:l.is_optional_chaining,children:[n,l.value]};else if(l.type=="function_call"){let a=n,{value:_,...c}=l,u={...c,children:_,not_evaluatable:!0,type:"call_args"};s={type:"function_call",children:[a,u]}}else throw new Error;return{...s,index:o,length:i}},t)),Yl=e=>b(w(Te(T(1,[g("("),e,g(")")]),g("=>")),({value:t,...r})=>({...r,type:"grouping",children:[t]})),ro),Rt=b(w(T(1,[g("..."),e=>S(e)]),({value:e,...t})=>({...t,type:"array_spread",not_evaluatable:!0,children:[e]})),e=>S(e)),Zl=w(ee(["[","]"],Rt),({value:e,...t})=>({...t,type:"array_literal",children:e})),Ql=w(ee(["{","}"],b(w(T(1,[g("..."),e=>S(e)]),({value:e,...t})=>({...t,type:"object_spread",children:[e],not_evaluatable:!0})),w(j([b(w(L,e=>({...e,type:"string_literal",value:'"'+e.value+'"'})),Ft,w(T(1,[g("["),e=>S(e),g("]")]),({value:e,...t})=>({...t,type:"computed_property",not_evaluatable:!0,children:[e]}))),g(":"),e=>S(e)]),({value:[e,t,r],...n})=>({...n,type:"key_value_pair",not_evaluatable:!0,children:[e,r]})),L)),({value:e,...t})=>({...t,type:"object_literal",children:e})),Zr=w(T(1,[g("{"),e=>Ht(e),g("}")]),({value:e,...t})=>({...e,...t})),Qr=e=>w(j([D(g("async")),g("function"),e?L:D(L),Dt(["(",")"],"function_args"),Zr]),({value:t,...r})=>{let[n,l,o,i,s]=t,a={...i,not_evaluatable:i.children.length==0};return{...r,type:"function_expr",is_async:n!=null,is_arrow:!1,name:o?.value,body:s,children:[a,s]}}),eo=w(j([D(g("async")),b(Dt(["(",")"],"function_args"),L),g("=>"),b(Zr,e=>S(e))]),({value:e,...t})=>{let[r,n,l,o]=e,i=n.type=="identifier"?{...n,not_evaluatable:!0,type:"function_args",children:[n]}:{...n,not_evaluatable:n.children.length==0};return{...t,type:"function_expr",is_async:r!=null,is_arrow:!0,body:o,children:[i,o]}}),to=w(j([g("new"),b(L,w(T(1,[g("("),e=>S(e),g(")")]),({value:e})=>e)),ee(["(",")"],Rt)]),({value:e,...t})=>{let{value:r,...n}=e[2],l={...n,children:r,not_evaluatable:!0,type:"call_args"};return{...t,type:"new",children:[e[1],l]}}),ro=Gr(b(to,Ql,Zl,Qr(!1),eo,Te(Kl,g("=>")),Te(L,g("=>")),Ft,V("backtick_string"),V("number")),"expected expression"),S=[Yl,Xl,Je("!"),Je("-"),Je("typeof"),Je("await"),Q(["**"]),Q(["*","/","%"]),Q(["+","-"]),Q(["<",">","<=",">=","instanceof"]),Q(["===","==","!==","!="]),Q(["&&"]),Q(["||","??"]),Vl].reduce((e,t)=>t(e),e=>S(e)),en=w(Qr(!0),e=>({...e,type:"function_decl",children:[e]})),Lt=w(j([Se,g("="),S]),({value:e,...t})=>{let[r,n,l]=e;return{...t,type:"decl_pair",children:[r,l]}}),tn=e=>w(T(1,[g(e?"const":"let"),Yr(e?Lt:b(Lt,L))]),({value:t,...r})=>({...r,type:e?"const":"let",children:t.value})),It=tn(!0),rn=tn(!1),nn=w(Yr(b(Lt,Wl(w(j([S,g("="),S]),({value:[e,t,r],...n})=>({...n,type:"assignment_pair",children:[e,r]})),e=>{let[t,r]=e.children;return t.type!="member_access"||t.is_optional_chaining?{ok:!1,error:"Invalid left-hand side in assignment"}:{ok:!0}}))),({value:e,...t})=>({...t,type:"assignment",children:e})),no=b(w(T(1,[Te(g("return"),zt),S]),({value:e,...t})=>({...t,type:"return",children:[e]})),w(g("return"),e=>({...e,type:"return",children:[],value:null}))),Pt=w(T(1,[g("{"),e=>Ht(e),g("}")]),({value:e,...t})=>({...e,...t})),Ut=w(j([g("if"),g("("),S,g(")"),Pt,Ee(D(g("else")),e=>e==null?Ge(null):b(Pt,t=>Ut(t)))]),({value:e,...t})=>{let r=e[2],n=e[4],l=e[5];return l==null?{...t,type:"if",children:[r,n]}:{...t,type:"if",children:[r,n,l]}}),ln=w(T(1,[Te(g("throw"),zt),S]),({value:e,...t})=>({...t,type:"throw",children:[e]})),lo=w(j([D(V("pragma_external")),j([g("import"),D(T(0,[b(ee(["{","}"],L),L),g("from")])),Ft])]),({value:[e,t]})=>{let{value:[r,n,l],...o}=t,i,s;n==null?s=[]:n.value.type=="identifier"?(i=n.value.value,s=[n.value]):s=n.value.value;let a=l.value.slice(1,l.value.length-1),_=new RegExp("^\\w+://").test(a);return{...o,not_evaluatable:!0,type:"import",is_external:_||e!=null,module:a,default_import:i,children:s}}),oo=b(w(T(1,[g("export"),It]),({value:e,...t})=>({...t,not_evaluatable:!0,type:"export",is_default:!1,children:[e]})),w(T(2,[g("export"),g("default"),S]),({value:e,...t})=>({...t,not_evaluatable:!0,type:"export",is_default:!0,children:[e]}))),on=w(j([g("while"),g("("),S,g(")"),Pt]),({value:e,...t})=>({...t,type:"while",children:[e[2],e[4]]})),io=w(g("break"),e=>({...e,type:"break",children:[],value:null})),so=w(g("continue"),e=>({...e,type:"continue",children:[],value:null})),ao=b(It,rn,nn,Ut,ln,on,en,io,so,no),co=b(It,rn,nn,Ut,ln,on,en,lo,oo),sn=e=>w(ql(b(g(";"),w(T(0,[b(e?co:ao,S),Gr(b(g(";"),zt,je,Ot(g("}"))),"unexpected token")]),t=>t.value)),b(je,Ot(g("}")))),({value:t,...r})=>({...r,type:"do",children:t.filter(n=>n.type!="punctuation")})),Ht=sn(!1),_o=e=>b(w(je,t=>({type:"do",index:0,length:0,children:[]})),e?sn(!0):Ht),uo=e=>Bl(_o(e)),po=(e,t=e.children)=>{if(e.type=="object_literal")return{...e,elements:t};if(e.type=="array_literal")return{...e,elements:t};if(["identifier","number","string_literal","builtin_identifier","backtick_string"].includes(e.type))return e;if(e.type=="function_expr")return{...e,function_args:t[0],body:t[t.length-1]};if(e.type=="ternary")return{...e,cond:t[0],branches:t.slice(1)};if(e.type=="const")return{...e,is_statement:!0};if(e.type=="let")return{...e,is_statement:!0};if(e.type=="decl_pair")return{...e,expr:t[1],name_node:t[0]};if(e.type=="assignment_pair")return{...e,children:t};if(e.type=="assignment")return{...e,is_statement:!0};if(e.type=="do")return{...e,is_statement:!0};if(e.type=="function_decl")return{...e,is_statement:!0};if(e.type=="unary")return{...e,expr:t[0]};if(e.type=="binary")return{...e,args:t};if(e.type=="member_access")return{...e,object:t[0],property:t[1]};if(e.type=="function_call")return{...e,fn:t[0],args:t[1]};if(e.type=="call_args")return e;if(e.type=="array_spread"||e.type=="object_spread")return{...e,expr:t[0]};if(e.type=="key_value_pair")return{...e,key:t[0],value:t[1]};if(e.type=="computed_property")return{...e,expr:t[0]};if(e.type=="new")return{...e,constructor:t[0],args:t[1]};if(e.type=="grouping")return{...e,expr:t[0]};if(e.type=="return")return{...e,expr:t[0],is_statement:!0};if(e.type=="throw")return{...e,expr:t[0],is_statement:!0};if(e.type=="if")return{...e,cond:t[0],branches:t.slice(1),is_statement:!0};if(["array_destructuring","object_destructuring","function_args"].includes(e.type))return{...e,elements:t};if(e.type=="destructuring_default")return{...e,name_node:t[0],expr:t[1]};if(e.type=="destructuring_rest")return{...e,name_node:t[0]};if(e.type=="destructuring_pair")return{...e,key:t[0],value:t[1]};if(e.type=="import")return{...e,is_statement:!0};if(e.type=="export")return{...e,binding:t[0],is_statement:!0};if(e.type=="while")return{...e,cond:t[0],body:t[1],is_statement:!0,is_loop:!0};if(e.type=="break"||e.type=="continue")return{...e,is_statement:!0};throw console.error("invalid node",e),new Error("unknown node type "+e.type)},Xe=e=>{if(Array.isArray(e))return e.map(Xe);{let t=e.children==null?null:Xe(e.children);return{...po(e,t),children:t}}},an=(e,t)=>{let r,n;if(e.children==null)n=e,r=!1;else{let l=e.children.map(o=>an(o,e));r=l.some(o=>o[1]),r?n={...e,children:l.map(o=>o[0])}:n=e}if(n.type=="function_expr"&&n.name==null){let l;if(t?.type=="decl_pair")t.name_node.type=="identifier"&&(l=t.name_node.value);else if(t?.type=="key_value_pair"){let o=t.key.value;l=o.substr(1,o.length-2)}else l="anonymous";r=!0,n={...n,name:l}}return[n,r]},fo=e=>an(e,null)[0],ho=(e,t,r=!1,n)=>{let l=_=>{if(_.index==null||_.length==null||isNaN(_.index)||isNaN(_.length))throw console.error(_),new Error("invalid node");{let c={..._,string:e.slice(_.index,_.index+_.length)};return c.children==null?c:{...c,children:c.children.map(l)}}},{tokens:o,ok:i,index:s,message:a}=Hl(e);if(i){let c={tokens:o.filter(p=>p.type!="whitespace"&&p.type!="comment"),current:0,str:e},u=uo(r)(c);if(u.ok){let{node:p,undeclared:f}=xe(Xe(u.value),t,null,null,n);if(f.length!=0)return{ok:!1,problems:f.map(h=>({index:h.index,length:h.length,message:"undeclared identifier: "+h.value}))};{let h=Xe(fo(l(p))),m=Tr(h);return m.length!=0?{ok:!1,problems:m}:{ok:!0,node:h}}}else{let p=At(u.cxt),f=p==null?e.length-1:p.index;return{ok:!1,problems:[{message:u.error,token:p,index:f,errorlocation:e.slice(f,20)}]}}}else return{ok:!1,problems:[{message:a,index:s}]}};var cn=(e,t,r,n,l)=>{let o=e.filter(p=>r[p]==null).map(p=>{if(n[p]!=null)return[p,n[p]];let f=t(p);if(f==null)return[p,{ok:!1,problems:[{is_load_error:!0}]}];if(typeof f=="string")return[p,ho(f,l,!0,p)];throw new Error("illegal state")}),{ok:i,problems:s}=o.reduce(({ok:p,problems:f},[h,m])=>({ok:p&&m.ok,problems:[...f,...(m.problems??[]).map(y=>({...y,module:h}))]}),{ok:!0,problems:[]}),a=Object.fromEntries(o);if(!i)return{ok:!1,problems:s,cache:a};let _=Object.fromEntries(o.map(([p,f])=>[p,f.node])),c=se(Object.values(_).map(p=>Ue(p)).flat());if(c.length==0)return{ok:!0,modules:_,cache:a};let u=cn(c,t,{...r,..._},n,l);if(u.ok)return{ok:!0,modules:{..._,...u.modules},cache:{...a,...u.cache}};{let p=u.problems.filter(h=>h.is_load_error).map(h=>h.module);return{ok:!1,problems:[...Object.entries(_).map(([h,m])=>m.children.filter(y=>y.type=="import").map(y=>[h,y])).flat().filter(([h,m])=>p.find(y=>y==m.full_import_path)!=null).map(([h,m])=>({message:"failed lo load module "+m.full_import_path,module:h,index:m.index})),...u.problems.filter(h=>!h.is_load_error)],cache:{...a,...u.cache}}}},_n=(e,t,r,n)=>{let l=cn([e],t,{},r,n);return l.ok?{...l,sorted:jr(l.modules)}:l};var de=class extends Map{get_by_module_and_node(t,r){if(r.index==null||r.length==null)throw new Error("illegal state");return this.get(`${t}_${r.index}_${r.length}`)}set_by_module_and_node(t,r,n){if(r.index==null||r.length==null)throw new Error("illegal state");return this.set(`${t}_${r.index}_${r.length}`,n)}};var un=e=>e.type=="return"?e.expr==null?e:e.expr:e.type=="export"?un(e.children[0]):e,Ze=(e,t)=>{if(e.type=="function_expr"&&t>=e.children[0].index&&tr.index?N(e,t-1):r;if(n==null||n.type=="do"||e==n)return null;let l=B(n,e);if(l.find(a=>a!=e&&a!=n&&a.type=="function_expr")!=null)return null;if(e.type=="while"&&l.includes(e.cond))return e.cond;let i=l.findIndex(a=>a.type=="do"),s=l[i-1];return un(s)};var k={reload_app_window:"reload_app_window",reload_app_window_finished:"reload_app_window_finished",load_external_imports:"load_external_imports",eval_modules:"eval_modules",eval_modules_finished:"eval_modules_finished"},hn=(e,t)=>{let r=new Set(e),n=new Map(hr(t,l=>r.has(l.id)).map(({parent:l,node:o})=>[o.id,{id:o.id,version_number:o.version_number,toplevel:l.toplevel,module:l.toplevel?l.module:l.fn?.__location?.module,parent_name:l.fn?.name,args:o.args,log_fn_name:o.fn.name}]));return e.map(l=>n.get(l))},mo=(e,t)=>e.run_state.status!=k.reload_app_window?te(e,!0,t):e.run_state.on_reload_app_window_finished(e,t),Wt=(e,t,r,n)=>({function_node:r,module:t,selected_node:n,selected_call_id:On(e,t,r)}),qt=e=>{let t=re(e),r=Oe(e,e.current_module,t),n=Ze(r,t);return Wt(e,e.current_module,r,n)},te=(e,t,r)=>(e={...e,parse_result:{cache:e.parse_result?.cache,globals:e.parse_result?.globals},calltree:null,modules:null,execution_id:e.execution_id+1,rt_cxt:null,logs:null,current_calltree_node:null,active_calltree_node:null,calltree_node_is_expanded:null,collected_footprints_functions:new Set,frames:new Map,colored_frames:null,selected_calltree_node_by_loc:null,selection_state:null,value_explorer:null,snapshots:null,domevents:null,footprints:null},t||e.run_state?.status==k.reload_app_window_finished?dn(e,r??e.parse_result?.globals):{...e,run_state:{status:k.reload_app_window,on_reload_app_window_finished:dn}}),dn=(e,t)=>{if(t==null)throw new Error("illegal state");let n=(e.parse_result?.globals==null?t==null:_r(e.parse_result.globals,t))?e.parse_result.cache:{},l=s=>e.files[s],o={..._n(e.entrypoint,l,n,t),globals:t},i={...e,parse_result:o};return i.parse_result.ok?(i={...i,snapshots:new de,domevents:[],run_state:{breakpoint:qt(i),on_eval_modules_finished:go}},Qe(i)):{...i,run_state:{status:k.reload_app_window_finished}}},Qe=e=>{let t=se(wt(e.parse_result.modules).map(r=>r.node.full_import_path));return t.length!=0?{...e,run_state:{...e.run_state,status:k.load_external_imports,external_imports:t}}:mn(e,e)},mn=(e,t,r)=>{if(e.run_state!=t.run_state)return e;if(r!=null){let o=new Set(Object.entries(r).filter(([i,s])=>!s.ok).map(([i,s])=>i));if(o.size!=0){let i=wt(e.parse_result.modules).filter(({node:s})=>o.has(s.full_import_path)).map(({node:s,module_name:a})=>({index:s.index,message:r[s.full_import_path].error.message,module:a}));return{...e,parse_result:{ok:!1,modules:e.parse_result.modules,cache:e.parse_result.cache,problems:i}}}}let n=new de([...e.snapshots.entries()].map(([o,i])=>[o,i==null?i:new Map(i)])),l=Br(e.parse_result,r,e.on_deferred_call,e.domevents,e.execution_id,e.io_trace,e.storage,n,!e.collected_footprints_functions.has(e.run_state.breakpoint.function_node),e.run_state.breakpoint);return l.then!=null?{...e,run_state:{...e.run_state,status:k.eval_modules,promise:l}}:gn(e,e.execution_id,l)},gn=(e,t,r)=>{if(e.execution_id!=t)return e;if(e.calltree!=null){if(r.rt_cxt.io_trace_is_replay_aborted)throw new Error("illegal state");e={...e,calltree:Ln(e.calltree,r.calltree)}}let n=r.rt_cxt.snapshots,l=r.breakpoint,o=l.function_node.type=="do"?[l.selected_node]:[l.selected_node,l.function_node];for(let s of o){let a=[l.module,s];s!=null&&n.get_by_module_and_node(...a)===void 0&&n.set_by_module_and_node(...a,null)}if(l.selected_node!=null&&l.selected_call_id!=null){let s=n.get_by_module_and_node(l.module,l.selected_node);s!=null&&s.get(l.selected_call_id)===void 0&&s.set(l.selected_call_id,null)}let i={...e,snapshots:n,footprints:new Map([...e.footprints??[],...r.rt_cxt.footprints]),rt_cxt:r.rt_cxt,run_state:{status:k.eval_modules_finished}};if(e.run_state.breakpoint.function_node==null)throw new Error("illegal state");return e.collected_footprints_functions.add(e.run_state.breakpoint.function_node),e.run_state.on_eval_modules_finished(i,r,e.run_state.breakpoint)},go=(e,t)=>{if(t.rt_cxt.io_trace_is_replay_aborted)return jn(e);if(e={...e,calltree:t.calltree,rt_cxt:t.rt_cxt,logs:{logs:hn(t.logs,t.calltree),log_position:null},modules:t.modules,io_trace:t.io_trace==null||t.io_trace.length==0?e.io_trace:t.io_trace},e=Sn(e),e.active_calltree_node==null){let{node:r,state:n}=Vt(e);e=fe(n,null,r)}else e=Pn(X(e,e.active_calltree_node));if(e.run_state.status==k.reload_app_window)return e;if(e.run_state.status!=k.eval_modules_finished)throw new Error("illegal state");return e},yo=(e,t,r)=>{let n={...e.files,[e.current_module]:t},l={...e,files:n,parse_result:e.parse_result==null?null:{...e.parse_result,cache:ur(e.parse_result.cache,a=>a!=e.current_module)}},o=tt(l,r),i={type:"write",args:[o.current_module,o.files[o.current_module]]};return{state:!e.parse_result.ok||e.parse_result.modules?.[e.current_module]!=null?te(o):o,effects:[i]}},Bt=(e,t)=>{if(!e.parse_result.ok)return{state:e,effects:{type:"set_status",args:["invalid syntax"]}};if(e.calltree==null)return{state:e,effects:{type:"set_status",args:["code is executing"]}};let r=Oe(e,e.current_module,t);if(r==null||r.type=="do"&&r!=$e(e)||r.type=="function_expr"&&e.snapshots.get_by_module_and_node(e.current_module,r)===null)return{state:e,effects:{type:"set_status",args:["code was not reached during program execution"]}}},wo=(e,t)=>{let r=e.parse_result.modules[e.current_module],n=N(r,t);if(n==null)return null;let l=B(n,r).find(o=>o.type=="function_call"||o.type=="function_expr");return l==null||l.type=="function_expr"?null:l},vo=e=>{let t=re(e),r=Bt(e,t);if(r!=null)return r;let n=wo(e,t);if(n==null)return{state:e,effects:{type:"set_status",args:["no function call to step into"]}};if(e.run_state.status!=k.eval_modules_finished)return{state:e,effects:{type:"set_status",args:["code is not executed yet"]}};let l=(e.active_calltree_node.children??[]).find(o=>{let i=JSON.parse(o.callsite_location);return i.index==n.index&&i.length==n.length});return l==null?{state:e,effects:{type:"set_status",args:["call was not reached during program execution"]}}:pe(l)?{state:e,effects:{type:"set_status",args:["Cannot step into: function is either builtin or from external lib"]}}:Ce(e,!0,l)},yn=(e,t)=>!e.not_evaluatable&&(t==null||!ye(e,t)),pn=e=>e.find((t,r)=>{let n=e[r+1];return yn(t,n)}),xo=(e,t,r,n)=>{if(N(t,n)==null)return{ok:!1,message:"out of scope"};if(e!=null&&e.index==n){let o;if(e.initial_is_expand==r)e.node==t?o=e.node:(o=pn(He(e.node,t)),o.is_statement&&(o=e.node));else if(e.node.children!=null){let s=N(e.node,n),a=B(s,e.node);o=a.findLast((_,c)=>{let u=a[c+1];return _!=e.node&&yn(_,u)}),o==null&&(o=e.node)}else o=e.node;return{ok:!0,initial_is_expand:e.initial_is_expand,node:o,index:n}}else{let o=N(t,n),i=pn(B(o,t));return i.is_statement?{ok:!1,message:"can only evaluate expression, not statement"}:{ok:!0,index:n,node:i,initial_is_expand:r}}},bo=(e,t,r)=>{let n=Bt(e,t);if(n!=null)return n;let l=Oe(e,e.current_module,t);if(l==null)throw new Error("not implemented");let o=xo(e.selection_state,l,r,t),i={...e,selection_state:o,value_explorer:null};if(!o.ok)return{state:i,effects:{type:"set_status",args:[o.message]}};let s=Wt(e,e.current_module,l,o.node);return vn(i,s,!0)},wn=(e,t,r,n)=>{let l=e.snapshots.get_by_module_and_node(t,r);if(l===null)return{has_snapshot:!0,node_snapshot:null};if(l===void 0)return{has_snapshot:!1};let o=l.get(n);return{has_snapshot:o!==void 0,node_snapshot:o}},fn=(e,t,r,n=void 0)=>{let l=e.snapshots.get_by_module_and_node(t,r);if(l===null)return{has_snapshot:!0,node_snapshot:null};if(l===void 0)return{has_snapshot:!1};if(n!=null){let s=l.get(n);if(s!=null)return{has_snapshot:!0,node_snapshot:s};if(s===void 0)return{has_snapshot:!1}}let[o,i]=[...l.entries()].sort((s,a)=>s[0]-a[0]).find(([s,a])=>a!=null);if(o==null)throw new Error("illegal state");return{has_snapshot:!0,node_snapshot:i}},vn=(e,t,r=!1)=>(e=kn(e,t,r),e.run_state.status==k.reload_app_window?{...e,run_state:{...e.run_state,on_eval_modules_finished:ko}}:e.value_explorer!=null?e:{state:e,effects:{type:"set_status",args:["expression was not reached during program execution"]}}),ko=e=>{let t=e.selection_state;if(t==null||e.value_explorer!=null)return e;let r=Oe(e,e.current_module,t.node.index),n=Wt(e,e.current_module,r,t.node);return vn(e,n,!1)},Eo=(e,t)=>e.files[t]==null?{state:e,effects:{type:"set_status",args:["File not found"]}}:{...e,current_module:t,selection_state:null,value_explorer:null},So=(e,t,r=t)=>te({...e,entrypoint:t,current_module:r}),jo=(e,t)=>te({...e,html_file:t,run_state:{status:k.reload_app_window}}),xn=(e,t)=>({state:bn(J(e,t),t.index),effects:{type:"set_focus"}}),To=(e,t)=>{if(e.parse_result.ok){let r=e.parse_result.modules[e.current_module],n=N(r,t);if(n==null||n.type!="identifier")return{state:e,effects:{type:"set_status",args:["not an identifier"]}};{let l=n.definition;if(l=="global")return{state:e,effects:{type:"set_status",args:["global variable"]}};if(l=="self")return{state:e};{let o;if(l.module!=null){let i=Re(e.parse_result.modules[l.module].children,s=>{if(s.type!="export")return null;if(s.is_default&&l.is_default)return s.children[0];if(!s.is_default&&!l.is_default)return s.binding.children.flatMap(_=>O(_.name_node)).find(_=>_.value==n.value)});o={module:l.module,index:i.index}}else o={module:e.current_module,index:l.index};return xn(e,o)}}}else return{state:e,effects:{type:"set_status",args:["unresolved syntax errors"]}}},$o=(e,t)=>({state:J(e,t),effects:{type:"set_focus"}}),bn=(e,t)=>(e=tt(e,t),e={...e,selection_state:null,value_explorer:null},Bt(e,t)!=null?e:En(e,qt(e),!0)),Kt=(e,t,r,n)=>{let l=n.call_id;if(l==null)throw new Error("illegal state");let o=C(e.calltree,s=>s.id==l);if($t(r,o,n.ok)||["break","continue"].includes(r.type))return null;let i;return n.ok?i=void 0:i=G(o).error,{index:r.index,length:r.length,result:{ok:n.ok,value:n.value,error:i}}},kn=(e,t,r=!1)=>{if(t.selected_call_id==null){let i=C(e.calltree,s=>G(s)?.ok==!1&&s.code==t.function_node&&(!s.code.is_loop||s.fn.__type=="loop_iteration"));i!=null&&(t={...t,selected_call_id:i.id})}let n=t.selected_node,{has_snapshot:l,node_snapshot:o}=n==null?{has_snapshot:!0,node_snapshot:null}:fn(e,t.module,t.selected_node.type=="function_args"?t.function_node:t.selected_node,t.selected_call_id);if(l){let i=!1,s,a;if(o==null)if(s=null,t.function_node==$e(e))a=A(e).id,i=e.footprints.get(a)==null;else{let{has_snapshot:_,node_snapshot:c}=fn(e,t.module,t.function_node,t.selected_call_id);i=!_,a=c?.call_id}else o!=null&&(a=o.call_id,s=Kt(e,t.function_node,n,o));if(!i)return An({...e,value_explorer:s},t.function_node,a)}if(!r)throw new Error("illegal state");return{...e,run_state:{status:k.reload_app_window,reload_counter:(e.run_state.reload_counter??0)+1,on_reload_app_window_finished:Qe,breakpoint:t}}},En=(e,t,r)=>t.function_node.type=="do"&&t.function_node!=$e(e)?e:(e=kn(e,t,r),e.run_state.status==k.reload_app_window?{...e,run_state:{...e.run_state,on_eval_modules_finished:Sn}}:e),Sn=e=>e.selection_state!=null||e.value_explorer!=null?e:En(e,qt(e),!0),Co=(e,t,r,n)=>e.execution_id!=r?e:{...e,snapshots:new de,footprints:new Map,collected_footprints_functions:new Set,calltree:Be(A(e),[...U(e)??[],t]),logs:{...e.logs,logs:e.logs.logs.concat(hn(n,t))}},jn=e=>te({...e,io_trace:null}),Tn=(e,t)=>{let r=l=>l.kind=="file"?[l]:l.children.map(r).flat(),n=Object.fromEntries(r(t).map(l=>[l.path,l.contents]));return{...e,project_dir:t,files:{...n,"":e.files[""]}}},$n=(e,t)=>{let r=i=>e.files[t[i]]==null?"":t[i],n=r("entrypoint"),l=r("current_module"),o=r("html_file");return{...e,entrypoint:n,current_module:l,html_file:o}},Cn=(e,t,r,n)=>{let l=Tn(e,t);return te({...n==null?l:$n(l,n),has_file_system_access:r,parse_result:{...e.parse_result,cache:{}}})},Oo=(e,t,r)=>({...Cn(e,t,!0),current_module:r}),Lo=e=>({...e,storage:new Map}),Po=(e,t,r=0)=>{let n=e.project_dir==null?e:Tn(e,e.project_dir),l=$n(n,t);return te({...l,execution_id:0,storage:new Map,cursor_position_by_file:{[l.current_module]:r}})},et={get_initial_state:Po,input:yo,open_app_window:Lo,load_dir:Cn,create_file:Oo,step_into:vo,change_current_module:Eo,change_entrypoint:So,change_html_file:jo,goto_location:xn,goto_definition:To,goto_problem:$o,move_cursor:bn,eval_selection:bo,reload_app_window_finished:mo,external_imports_loaded:mn,eval_modules_finished:gn,on_deferred_call:Co,clear_io_trace:jn};var re=e=>e.cursor_position_by_file[e.current_module]??0,tt=(e,t)=>({...e,cursor_position_by_file:{...e.cursor_position_by_file,[e.current_module]:t}});var J=(e,t)=>tt({...e,current_module:t.module},t.index),Ao=e=>e.error?.constructor==_e.constructor&&e.error?.message==_e.message,ne=e=>!e.ok||e.value?.[Symbol.toStringTag]=="Promise"&&e.value.status!=null&&!e.value.status.ok,G=e=>e.value?.[Symbol.toStringTag]=="Promise"?e.value.status:e,R=e=>e.toplevel?{module:e.module}:e.fn.__location,Mo=e=>A(e).module,$e=e=>e.parse_result.modules[Mo(e)],pe=e=>!e.toplevel&&!e.fn.is_hosted,zo=(e,t)=>e?.[t.module]?.[t.index??-1],Mn=(e,t,r)=>({...e,[t.module]:{...e?.[t.module],[t.index??-1]:r}}),On=(e,t,r)=>e.selected_calltree_node_by_loc?.[t]?.[e.parse_result.modules[t]==r?-1:r.index],No=(e,t,r)=>({...e,selected_calltree_node_by_loc:Mn(e.selected_calltree_node_by_loc,t,r)}),fe=(e,t,r=e.current_calltree_node)=>({...e,active_calltree_node:t,current_calltree_node:r}),Jt=(e,t,r=t)=>{let n=R(t);if(zo(e.colored_frames,n)!=t.id){e={...e,colored_frames:Mn(e.colored_frames,n,t.id)};let o=e.frames.get(t.id);if(o==null){let i=e.footprints.get(t.id);if(i==null)throw new Error("illegal state");o=Ct(t.code,t,i);let s=kr(o);e.frames.set(t.id,{...o,coloring:s})}}return fe(e,t,r)},Ln=(e,t)=>rt(e,t)[1],rt=(e,t)=>{if(e.id!=t.id)throw new Error("illegal state: merge_calltree");if(e.callsite_location==null&&t.callsite_location!=null)return[!0,rt({...e,callsite_location:t.callsite_location},t)[1]];if(e.snapshot==null&&t.snapshot!=null)return[!0,rt({...e,snapshot:t.snapshot},t)[1]];if(e.has_more_children){if(t.has_more_children)return[!1,e];if(e.id!=t.id)throw new Error("illegal state");return[!0,t]}if(e.children==null)return[!1,e];if(t.has_more_children)return[!1,e];let[r,n]=dr((l,o,i)=>{let[s,a]=rt(o,t.children[i]);return[l||s,a]},!1,e.children);return r?[!0,{...e,children:n}]:[!1,e]},Gt=(e,t)=>{let r=e.callsite_location;if(r==null)return null;r=JSON.parse(r);let n=C(t.code,l=>l.index==r.index&&l.length==r.length&&(l.type=="new"||l.type=="function_call"||l.is_loop));if(n==null)throw new Error("illegal state");return n},I=(e,t,r=o=>o,n=!1,l=!1)=>{function o(f){if(l)throw new Error("illegal state");let h=_.code;return{...e,value_explorer:null,run_state:{status:k.reload_app_window,on_reload_app_window_finished:Qe,on_eval_modules_finished:i,breakpoint:{module:_?.fn?.__location?.module,function_node:h,selected_call_id:_.id,current_calltree_node_id:t.id,selected_node:f}}}}function i(f,h,m){if(m.current_calltree_node_id!=f.current_calltree_node.id)return f;let y=C(f.calltree,x=>x.id==t.id);return I(f,y,r,n,!0)}let[s]=Le(e.calltree,t);if(!t.toplevel&&!t.fn.is_hosted&&!s.toplevel&&!s.fn.is_hosted)return r({...fe(e,null,t),value_explorer:null,selection_state:null});let a;t.toplevel||t.fn.__type=="loop_iteration"?a=!0:t.code?.type=="while"?a=!1:s.id=="deferred_calls"?a=!0:pe(t)?a=!1:pe(s)?a=!0:a=e.calltree_node_is_expanded[t.id];let _=a?t:s;e=fe(e,_,t);let c,u,p;if(t.toplevel){if(e.footprints.get(A(e).id)==null)return o();u=null,p=null,c=R(_)}else if(t.fn.__type=="loop_iteration"){let f=R(t).module,h=re(e);if(e.current_module==f&&vt(t.code,h)&&h!=t.code.index)c={module:f,index:h};else{let E=t.code,M=E.body.children.length==0?E.cond:E.body.children[0];c={module:f,index:M.index}}let m=e.selection_state?.node,y=m!=null&&vt(t.code,m.index),x;if(y?(p=e.selection_state,x=e.selection_state.node):(p=null,x=Ze(t.code,c.index)),x==null)u=null,p=null;else{let{has_snapshot:E,node_snapshot:M}=wn(e,R(t).module,x,t.id);if(E)M==null?u=null:u=Kt(e,_.code,x,M);else return o(x)}}else if(t.code?.type=="while"){if(t.has_more_children)return o();u=null,p=null;let f=Gt(t,_);c={module:R(_).module,index:f.index}}else{if(t.snapshot==null)return o();let f;if(a){c=R(t),p=null;let m=e.snapshots.get_by_module_and_node(_.fn.__location.module,_.code)?.get(_.id);if(m==null)return o();m.ok?f=m.value:f=t.snapshot.args}else{let m=Gt(t,_);if(m==null)return o();c={module:R(_).module,index:m.index},f=t.snapshot.args,p={node:m}}if(f==null)throw new Error("illegal state");let h=t.ok?{"*arguments*":f,"*return*":t.snapshot.value}:{"*arguments*":f,"*throws*":t.snapshot.error};t.context!=null&&(h={...h,"*this before call*":t.snapshot.context_before,"*this after call*":t.snapshot.context_after}),u={index:c.index,result:{ok:!0,is_calltree_node_explorer:!0,value:h}}}return e=n?e:t.toplevel?{...e,current_module:c.module}:J(e,c),e.footprints.get(_.id)==null?o():r({...Jt(No(e,R(_),e.active_calltree_node.id),_,t),value_explorer:u,selection_state:p})},Fo=e=>I(e,e.current_calltree_node,void 0,!0),Le=(e,t)=>{let r=l=>l.id==t.id?[]:l.children==null?null:l.children.reduce((o,i)=>{if(o!=null)return o;let s=r(i);return s==null?null:[...s,l]},null),n=r(e);if(n==null)throw new Error("illegal state");return n},le=e=>pe(e)||e.code.is_loop?e.children!=null&&e.children.length!=0||e.has_more_children:e.toplevel?e.children!=null&&e.children.length!=0:!0,Do=e=>{let t=e.current_calltree_node,r;if(le(t)&&e.calltree_node_is_expanded[t.id]&&t.children!=null)r=t.children[0];else{let n=(l,o)=>{if(l.id=="calltree")return null;let[i,...s]=o,a=i.children.findIndex(c=>c==l),_=i.children[a+1];return _??n(i,s)};r=n(t,Le(e.calltree,t))}return r?.id=="deferred_calls"&&(r.children==null?r=null:r=r.children[0]),r==null?e:I(e,r)},Ro=e=>{let t=e.current_calltree_node;if(t.toplevel)return e;let[r]=Le(e.calltree,t),n=r.children.findIndex(s=>s==t),l=r.children[n-1],o=s=>!le(s)||!e.calltree_node_is_expanded[s.id]||s.children==null?s:o(s.children[s.children.length-1]),i;return l==null?i=r.id=="deferred_calls"?o(A(e)):r:i=o(l),I(e,i)},Io=e=>{let t=e.current_calltree_node,r=e.calltree_node_is_expanded[t.id];if(!le(t)||!r){let[n]=Le(e.calltree,t);return n.id=="calltree"||n.id=="deferred_calls"?e:I(e,n)}else return Ce(e)},Uo=e=>{let t=e.current_calltree_node;return le(t)?e.calltree_node_is_expanded[t.id]?t.children!=null?I(e,t.children[0]):e:Ce(e):e},Ce=(e,t,r=e.current_calltree_node)=>{let n=r.id,l=e.calltree_node_is_expanded[n],o=t??!l,i={...e,calltree_node_is_expanded:{...e.calltree_node_is_expanded,[n]:o}};return I(i,r)},Ho=(e,t)=>{let r=C(e.calltree,n=>n.id==t);return I(e,r)},Wo=(e,t)=>{let r=C(e.calltree,n=>n.id==t);return le(r)?Ce(e,void 0,r):I(e,r)},X=(e,t)=>e.calltree_node_is_expanded?.[t.id]?e:{...e,calltree_node_is_expanded:{...e.calltree_node_is_expanded,...Object.fromEntries(Le(e.calltree,t).map(r=>[r.id,!0])),[t.id]:!0}},Vt=e=>{let t=A(e);if(t.ok||Ao(t))return{state:X(e,t),node:t};{let r=C(t,n=>!G(n).ok&&(n.children==null||n.children.find(l=>!G(l).ok)==null));return{state:X(e,r),node:r}}},Pn=e=>Vt(e).state,Oe=(e,t,r)=>{let n=e.parse_result.modules[t];if(n==null)return null;if(r=n.index+n.length)return n;{let l=N(n,r),i=B(l,n).find(s=>s.type=="function_expr"||s.is_loop);return i??n}},An=(e,t,r)=>{if(t==$e(e)){let l=A(e);return Jt(X(e,l),l)}if(t.type=="do")return e;if(r==null)return fe(e,null);let n=C(e.calltree,l=>l.id==r);if(n==null)throw new Error("illegal state");return Jt(X(e,n),n)},qo=e=>{if(e.current_calltree_node.toplevel)return{state:e};let t=e.active_calltree_node.code,r=R(e.active_calltree_node),n,l;if(e.current_calltree_node==e.active_calltree_node){let o=e.frames.get(e.active_calltree_node.id);if(e.active_calltree_node.ok)if(t.body.type=="do"){let i=C(o,s=>s.type=="return"&&s.result?.ok);if(i==null)return{state:J(e,{module:r.module,index:t.body.index}),effects:{type:"set_focus"}};l=i.children[0]}else l=o.children[o.children.length-1];else l=We(o);n=C(t,i=>i==l.orig)}else{let o=e.current_calltree_node.callsite_location;o=JSON.parse(o),n=C(e.active_calltree_node.code,i=>i.index==o.index&&i.length==o.length)}return{state:{...J(e,{module:r.module,index:n.index}),selection_state:{node:n},value_explorer:{index:n.index,length:n.length,result:e.current_calltree_node.snapshot}},effects:{type:"set_focus"}}},zn=(e,t=!0)=>{if(e.current_calltree_node.toplevel)return{state:e};let r=R(e.active_calltree_node),n,l;if(e.current_calltree_node==e.active_calltree_node){if(e.active_calltree_node.toplevel)return{state:e};let o=e.active_calltree_node.code;n=o.function_args;let i=e.snapshots.get_by_module_and_node(e.active_calltree_node.fn.__location.module,o)?.get(e.active_calltree_node.id);if(i==null)return{state:e};l=i.ok?i:{ok:!1,error:e.active_calltree_node.error}}else{let o=Gt(e.current_calltree_node,e.active_calltree_node);if(o==null)return{state:e};l={ok:!0,value:e.current_calltree_node.snapshot.args},n=o.children[1]}return{state:{...J(e,{module:r.module,index:n.index}),selection_state:{node:n},value_explorer:{index:n.index,length:n.length,result:l}},effects:t?{type:"set_focus"}:null}},Bo=e=>{let t=[e.current_calltree_node,e.active_calltree_node,A(e)].find(n=>ne(n));if(t==null)return{state:e,effects:[{type:"set_status",args:["no error found"]}]};let r=C(t,n=>ne(n)&&(n.children==null||n.children.every(l=>!ne(l)||pe(l)&&l.children==null)));if(r==null)throw new Error("illegal state: error origin not found");return I(X(e,r),r,n=>{let l=$r(n),o=We(l);return{state:J(n,{module:R(r).module,index:o.index}),effects:{type:"set_focus"}}})},Ko=(e,t)=>{if(e.logs.logs.length==0)return{state:e};let r=Math.max(Math.min(e.logs.log_position==null?0:e.logs.log_position+t,e.logs.logs.length-1),0);return Nn(e,r)},Nn=(e,t)=>{e={...e,logs:{...e.logs,log_position:t}};let r=C(e.calltree,n=>n.id==e.logs.logs[t].id);return I(X(e,r),r,n=>{if(n.active_calltree_node==null)return n;let l=zn(n,!1);if(l.effects!=null)throw new Error("illegal state");return l.state})};et.calltree={arrow_down:Do,arrow_up:Ro,arrow_left:Io,arrow_right:Uo,select_node:Ho,select_and_toggle_expanded:Wo,select_return_value:qo,select_arguments:zn,select_error:Bo,navigate_logs_position:Nn,navigate_logs_increment:Ko,show_value_explorer:Fo};var nt=class{constructor(t,r){this.ui=t,this.container=r,this.container.addEventListener("keydown",n=>{n.key=="r"&&(n.ctrlKey||n.metaKey)||n.preventDefault(),n.key=="Escape"&&this.ui.editor.focus(),n.key=="F1"&&this.ui.editor.focus_value_explorer(this.container),n.key=="F2"&&this.ui.editor.focus(),n.key=="a"&&v("calltree.select_arguments"),n.key=="e"&&v("calltree.select_error"),(n.key=="r"||n.key=="Enter")&&v("calltree.select_return_value"),(n.key=="ArrowDown"||n.key=="j")&&v("calltree.arrow_down"),(n.key=="ArrowUp"||n.key=="k")&&v("calltree.arrow_up"),(n.key=="ArrowLeft"||n.key=="h")&&v("calltree.arrow_left"),(n.key=="ArrowRight"||n.key=="l")&&v("calltree.arrow_right")})}on_click_node(t,r){t.target.classList.contains("expand_icon")?v("calltree.select_and_toggle_expanded",r):v("calltree.select_node",r)}clear_calltree(){this.container.innerHTML="",this.node_to_el=new Map,this.state=null}render_loop_while(t){let{ok:r,error:n}=G(t);return d("span","call_header "+(r?"":"error"),"while loop("+t.children_count+")",r?null:[": ",P(n)])}render_loop_iteration(t,r){let{ok:n,error:l}=G(t),o=r.children.indexOf(t);return d("span","call_header "+(n?"":"error"),d("span",null,"iteration "+o),n?"":d("span","call_header error",":\xA0",P(l)))}render_node(t,r){let n=this.state.calltree_node_is_expanded[t.id],l=d("div","callnode",d("div",{class:"call_el",click:o=>this.on_click_node(o,t.id)},le(t)?n&&t.has_more_children?d("div","spinner"):d("span","expand_icon",n?"\u25BC":"\u25B6"):d("span","expand_icon_placeholder","\xA0"),t.toplevel?d("span",t.ok?"":"call_header error",d("i","","toplevel: "+(t.module==""?"*scratch*":t.module)),t.ok?"":d("span","",":\xA0",P(t.error))):t.fn.__type=="loop_iteration"?this.render_loop_iteration(t,r):t.code?.type=="while"?this.render_loop_while(t):d("span","call_header "+(ne(t)?"error":"")+(t.fn.is_hosted?"":" native"),t.is_new?"new ":"",t.context==null?"":d("span","",typeof t.context=="object"?t.context.constructor?.name||"":P(t.context),"."),t.fn.name,"(",...oe(t.args.map(o=>P(o))),")",": ",t.ok?P(t.value):P(t.error))),t.children==null||!n?null:t.children.map(o=>this.render_node(o,t)));return this.node_to_el.set(t.id,l),l.is_expanded=n,l}render_active(t,r){let n=this.node_to_el.get(t.id).getElementsByClassName("call_el")[0];r?n.classList.add("active"):n.classList.remove("active")}render_select_node(t,r){if(t!=null&&this.render_active(t.current_calltree_node,!1),this.state=r,this.render_active(this.state.current_calltree_node,!0),t?.current_calltree_node!=r.current_calltree_node){let n=this.container.scrollLeft;ie(this.container,this.node_to_el.get(this.state.current_calltree_node.id).getElementsByClassName("call_el")[0]),this.container.scrollLeft=n}}render_expand_node(t,r){this.state=r,this.do_render_expand_node(t.calltree_node_is_expanded,r.calltree_node_is_expanded,A(t),A(r));let n=U(t),l=U(r);if(n!=null){for(let o=0;othis.render_node(r))))))}};var lt=class{constructor(t,r){this.el=r,this.ui=t,this.el.addEventListener("keydown",n=>{n.key=="Escape"&&this.ui.editor.focus(),n.key=="Enter"&&this.ui.editor.focus(),n.key=="F1"&&this.ui.editor.focus_value_explorer(this.el),n.key=="F3"&&this.ui.editor.focus(),(n.key=="ArrowDown"||n.key=="j")&&(n.preventDefault(),v("calltree.navigate_logs_increment",1)),(n.key=="ArrowUp"||n.key=="k")&&(n.preventDefault(),v("calltree.navigate_logs_increment",-1))})}rerender_logs(t,r){this.el.innerHTML="",this.render_logs(t,null,r)}render_logs(t,r,n){for(let l=r==null?0:r.logs.length;lv("calltree.navigate_logs_position",l)},d("a",{href:"javascript: void(0)"},i+": "+(o.toplevel?"toplevel":"fn "+(o.parent_name==""?"anonymous":o.parent_name))+":")," ",...oe(o.args.map(a=>P(a)))))}if(r?.log_position!=n.log_position&&(r?.logs==n.logs&&r?.log_position!=null&&this.el.children[r.log_position].classList.remove("active"),n.log_position!=null)){let l=this.el.children[n.log_position];l.classList.add("active"),ie(this.el,l)}}};var ot=class{constructor(t,r){this.el=r,this.ui=t,this.el.addEventListener("keydown",n=>{n.key=="Escape"&&this.ui.editor.focus(),n.key=="F4"&&this.ui.editor.focus()})}clear(){this.el.innerHTML="",this.is_rendered=!1}render_io_trace(t,r){if(r&&(this.is_rendered=!1),this.is_rendered)return;this.is_rendered=!0,this.el.innerHTML="";let n=t.io_trace??[],l=t.rt_cxt.io_trace_index??n.length;for(let o=0;oP(a))),"): ",i.ok?P(i.value):P(i.error)))}}};var Vo="leporello-js",Fn=`https://firebasestorage.googleapis.com/v0/b/${Vo}.appspot.com/o/`;async function Jo(e){let t=new TextEncoder().encode(e),r=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(r)).map(o=>o.toString(16).padStart(2,"0")).join("")}async function Go(e){let t=(await Jo(e)).slice(0,40),r=new Blob([e],{type:"text/plain"}),n=new FormData;n.append("file",r);let l=await fetch(Fn+t,{method:"POST",body:n});if(!l.ok){let i=(await l.json())?.error?.message;throw new Error("Failed to upload: "+i)}return t}async function Xo(e){let t=await fetch(Fn+e+"?alt=media");if(!t.ok){let n=(await t.json())?.error?.message;throw new Error("Failed to fetch: "+n)}return t.text()}async function Dn(){let t=new URLSearchParams(window.location.search).get("share_id");if(t==null)return null;let r=localStorage["share_"+t];if(r!=null)return r;try{return await Xo(t)}catch(n){return alert(n.message),null}}async function Rn(e){let t=await Go(e),r=new URL(window.location);r.searchParams.set("share_id",t),history.replaceState(null,null,r.href)}var it=class{constructor(){this.el=d("dialog","share_dialog",this.upload_begin=d("p","",d("p","","This button will upload your scratch file to the cloud for sharing with others."),d("ul","",d("li","","Please ensure that no personal data or confidential information is included."),d("li","","Avoid including copyrighted materials.")),d("span",{style:"color: red"},"Caution: Once shared, files cannot be deleted."),this.upload_buttons=d("p",{style:"text-align: center"},d("button",{class:"upload_button",click:()=>this.upload()},"Upload"),this.cancel_button=d("button",{style:"margin-left: 1em",click:()=>this.cancel()},"Cancel"))),this.uploading=d("span",{style:"display: none"},"Uploading..."),this.upload_finish=d("p",{style:"display: none"},d("p","",d("p",{style:` +]+`},{name:"whitespace",re:"[^\\S\\r\\n]+"},{name:"string_literal",re:"'.*?'"},{name:"string_literal",re:'".*?"'},{name:"backtick_string",re:"`[\\s\\S]*?`"},{name:"builtin_identifier",re:Ul.map(_=>"\\b"+_+"\\b").join("|")},{name:"keyword",re:Jr.map(_=>"\\b"+_+"\\b").join("|")},{name:"number",re:"\\d*\\.?\\d+"},{name:"identifier",re:"[A-Za-z_$][A-Za-z0-9_$]*"},{name:"punctuation",re:"("+n.map(_=>[..._].map(c=>"\\"+c).join("")).join("|")+")"}],o=l.map(({re:_})=>"("+_+")").join("|"),i=new RegExp(o,"mg"),a=Hl(i,e).map(_=>({type:l.find((u,p)=>_[p+1]!=null).name,index:_.index,string:_[0],length:_[0].length}));if(a.length==0)return{ok:!0,tokens:a};{let _=fr([{index:0,length:0},...a],[...a,{index:e.length}]).find(([c,u])=>c.index+c.length!=u.index);if(_!=null){let c=_[0];return{ok:!1,index:c.index+c.length,message:"unexpected lexical token"}}else return{ok:!0,tokens:a}}},Mt=e=>e.currentzt(t=>t.string==e,"expected "+e),Gr=new Set(["newline","pragma_external"]),zt=(e,t)=>{let r=n=>{let l=Mt(n);return l==null?{ok:!1,error:t,cxt:n}:e(l)?{ok:!0,value:{...l,value:l.string,string:void 0},cxt:{...n,current:n.current+1}}:Gr.has(l.type)?r({...n,current:n.current+1}):{ok:!1,error:t,cxt:n}};return r},V=e=>zt(t=>t.type==e,"expected "+e),Nt=V("newline"),$e=e=>{let t=Mt(e);return t==null?{ok:!0,cxt:e}:Gr.has(t.type)?$e({...e,current:e.current+1}):{ok:!1,error:"unexpected token, expected eof",cxt:e}},b=(...e)=>t=>e.reduce((r,n)=>{if(r.ok)return r;{let l=n(t);return l.ok?l:r.cxt.current>l.cxt.current?r:l}},{ok:!1,cxt:{current:0}}),D=e=>t=>{let r=e(t);return r.ok?r:{ok:!0,value:null,cxt:t}},Qe=e=>{if(e.ok){let t=e.value.find(l=>l!=null),r=[...e.value].reverse().find(l=>l!=null),n={value:e.value,index:t.index,length:r.index+r.length-t.index};return{...e,value:n}}else return e},j=e=>t=>{let r=e.reduce((n,l)=>{if(n.ok){let o=l(n.cxt);return o.ok?{...o,value:n.value.concat([o.value])}:o}else return n},{cxt:t,ok:!0,value:[]});return r.ok?Qe(r):r},w=(e,t)=>r=>{let n=e(r);return n.ok?{...n,value:t(n.value)}:n},ql=(e,t)=>r=>{let n=e(r);if(n.ok){let{ok:l,error:o}=t(n.value);return l?n:{ok:!1,error:o,cxt:r}}else return n},Xr=(e,t)=>r=>{let n=e(r);return n.ok?n:{...n,error:t}},je=(e,t)=>r=>{let n=e(r);return n.ok?t(n.value)(n.cxt):n},T=(e,t)=>w(j(t),r=>({...r,value:r.value[e]})),Yr=e=>t=>{let r=(l,o)=>{let i=e(l);return i.ok?r(i.cxt,o.concat([i.value])):o.length==0?i:{ok:!0,value:o,cxt:l}},n=r(t,[]);return n.ok?Qe(n):n},Bl=(e,t)=>r=>{let n=(o,i)=>{if(t(o).ok)return{ok:!0,cxt:o,value:i};{let a=e(o);return a.ok?n(a.cxt,i.concat([a.value])):a}},l=n(r,[]);return l.ok?l.value.length==0?{...l,value:{value:l.value}}:Qe(l):l},Lt=e=>t=>{let r=e(t);return r.ok?{...r,cxt:t}:r},Kl=e=>w(T(0,[e,$e]),({value:t})=>t),Ce=(e,t)=>r=>{let n=e(r);return n.ok&&t(n.cxt).ok?{ok:!1,cxt:r,error:"not_followed_by"}:n},Ye=e=>t=>({ok:!0,value:e,cxt:t}),Ft=(e,t,r)=>w(j([e,D(t)]),({value:n,...l})=>{let[o,i]=n;return i==null?o:{...l,...r(o,i)}}),O=V("identifier"),Vl=w(V("builtin_identifier"),({...e})=>({...e,type:"builtin_identifier"})),Dt=V("string_literal"),Xe=e=>t=>w(j([D(g(e)),t]),({value:r,...n})=>r[0]==null?r[1]:{...n,type:"unary",operator:e,children:[r[1]]}),Q=e=>t=>Ft(t,Yr(j([zt(r=>e.includes(r.string),"expected "+e.join(",")),t])),(r,n)=>n.value.reduce((l,o)=>{let i=[l,o.value[1]];return{index:r.index,length:o.index-r.index+o.length,type:"binary",operator:o.value[0].value,children:i}},r)),Jl=e=>Ft(e,w(j([g("?"),t=>S(t),g(":"),t=>S(t)]),t=>{let[r,n,l,o]=t.value;return{...t,value:[n,o]}}),(t,{value:r})=>({type:"ternary",cond:t,branches:r,children:[t,...r]})),ee=(e,t)=>r=>{let n=je(D(Lt(g(e[1]))),l=>l!=null?Ye([]):je(t,o=>je(D(g(",")),i=>i==null?Ye([o]):je(n,s=>Ye([o,...s])))));return T(1,[g(e[0]),n,g(e[1])])(r)},Zr=e=>t=>{let r=l=>{let o=e(l);if(!o.ok)return o;let i=g(",")(o.cxt);if(!i.ok)return{...o,value:[o.value]};let s=r(i.cxt);return s.ok?{...s,value:[o.value,...s.value]}:s},n=r(t);return n.ok?Qe(n):n},Rt=(e,t)=>w(ee(e,b(w(j([r=>Te(r),g("="),r=>S(r)]),({value:r,...n})=>({...n,not_evaluatable:!0,type:"destructuring_default",children:[r[0],r[2]]})),r=>Te(r),w(T(1,[g("..."),r=>Te(r)]),({value:r,...n})=>({...n,type:"destructuring_rest",not_evaluatable:!0,children:[r]})))),({value:r,...n})=>({...n,type:t,not_evaluatable:!0,children:r})),Gl=Rt(["[","]"],"array_destructuring"),Xl=w(ee(["{","}"],b(w(j([w(O,e=>({...e,type:"string_literal",value:'"'+e.value+'"'})),g(":"),e=>Te(e)]),({value:e,...t})=>({...t,not_evaluatable:!0,type:"destructuring_pair",children:[e[0],e[2]]})),O,w(T(1,[g("..."),O]),({value:e,...t})=>({...t,type:"destructuring_rest",not_evaluatable:!0,children:[e]})))),({value:e,...t})=>({...t,type:"object_destructuring",not_evaluatable:!0,children:e})),Te=b(O,Gl,Xl),Yl=e=>Ft(e,Yr(b(w(j([b(g("?."),g(".")),w(b(O,V("keyword")),t=>({...t,type:"string_literal",value:'"'+t.value+'"',not_evaluatable:!0}))]),({value:[t,r],...n})=>({...n,value:r,type:"member_access",is_optional_chaining:t.value=="?."})),w(j([D(g("?.")),g("["),t=>S(t),g("]")]),({value:[t,r,n,l],...o})=>({...o,value:n,type:"computed_member_access",is_optional_chaining:t!=null})),w(ee(["(",")"],It),t=>({...t,type:"function_call"})))),(t,r)=>r.value.reduce((n,l)=>{let o=n.index,i=l.index-n.index+l.length,s;if(l.type=="member_access"||l.type=="computed_member_access")s={type:"member_access",is_optional_chaining:l.is_optional_chaining,children:[n,l.value]};else if(l.type=="function_call"){let a=n,{value:_,...c}=l,u={...c,children:_,not_evaluatable:!0,type:"call_args"};s={type:"function_call",children:[a,u]}}else throw new Error;return{...s,index:o,length:i}},t)),Zl=e=>b(w(Ce(T(1,[g("("),e,g(")")]),g("=>")),({value:t,...r})=>({...r,type:"grouping",children:[t]})),no),It=b(w(T(1,[g("..."),e=>S(e)]),({value:e,...t})=>({...t,type:"array_spread",not_evaluatable:!0,children:[e]})),e=>S(e)),Ql=w(ee(["[","]"],It),({value:e,...t})=>({...t,type:"array_literal",children:e})),eo=w(ee(["{","}"],b(w(T(1,[g("..."),e=>S(e)]),({value:e,...t})=>({...t,type:"object_spread",children:[e],not_evaluatable:!0})),w(j([b(w(O,e=>({...e,type:"string_literal",value:'"'+e.value+'"'})),Dt,w(T(1,[g("["),e=>S(e),g("]")]),({value:e,...t})=>({...t,type:"computed_property",not_evaluatable:!0,children:[e]}))),g(":"),e=>S(e)]),({value:[e,t,r],...n})=>({...n,type:"key_value_pair",not_evaluatable:!0,children:[e,r]})),O)),({value:e,...t})=>({...t,type:"object_literal",children:e})),Qr=w(T(1,[g("{"),e=>Wt(e),g("}")]),({value:e,...t})=>({...e,...t})),en=e=>w(j([D(g("async")),g("function"),e?O:D(O),Rt(["(",")"],"function_args"),Qr]),({value:t,...r})=>{let[n,l,o,i,s]=t,a={...i,not_evaluatable:i.children.length==0};return{...r,type:"function_expr",is_async:n!=null,is_arrow:!1,name:o?.value,body:s,children:[a,s]}}),to=w(j([D(g("async")),b(Rt(["(",")"],"function_args"),O),g("=>"),b(Qr,e=>S(e))]),({value:e,...t})=>{let[r,n,l,o]=e,i=n.type=="identifier"?{...n,not_evaluatable:!0,type:"function_args",children:[n]}:{...n,not_evaluatable:n.children.length==0};return{...t,type:"function_expr",is_async:r!=null,is_arrow:!0,body:o,children:[i,o]}}),ro=w(j([g("new"),b(O,w(T(1,[g("("),e=>S(e),g(")")]),({value:e})=>e)),ee(["(",")"],It)]),({value:e,...t})=>{let{value:r,...n}=e[2],l={...n,children:r,not_evaluatable:!0,type:"call_args"};return{...t,type:"new",children:[e[1],l]}}),no=Xr(b(ro,eo,Ql,en(!1),to,Ce(Vl,g("=>")),Ce(O,g("=>")),Dt,V("backtick_string"),V("number")),"expected expression"),S=[Zl,Yl,Xe("!"),Xe("-"),Xe("typeof"),Xe("await"),Q(["**"]),Q(["*","/","%"]),Q(["+","-"]),Q(["<",">","<=",">=","instanceof"]),Q(["===","==","!==","!="]),Q(["&&"]),Q(["||","??"]),Jl].reduce((e,t)=>t(e),e=>S(e)),tn=w(en(!0),e=>({...e,type:"function_decl",children:[e]})),Pt=w(j([Te,g("="),S]),({value:e,...t})=>{let[r,n,l]=e;return{...t,type:"decl_pair",children:[r,l]}}),rn=e=>w(T(1,[g(e?"const":"let"),Zr(e?Pt:b(Pt,O))]),({value:t,...r})=>({...r,type:e?"const":"let",children:t.value})),Ut=rn(!0),nn=rn(!1),ln=w(Zr(b(Pt,ql(w(j([S,g("="),S]),({value:[e,t,r],...n})=>({...n,type:"assignment_pair",children:[e,r]})),e=>{let[t,r]=e.children;return t.type!="member_access"||t.is_optional_chaining?{ok:!1,error:"Invalid left-hand side in assignment"}:{ok:!0}}))),({value:e,...t})=>({...t,type:"assignment",children:e})),lo=b(w(T(1,[Ce(g("return"),Nt),S]),({value:e,...t})=>({...t,type:"return",children:[e]})),w(g("return"),e=>({...e,type:"return",children:[],value:null}))),At=w(T(1,[g("{"),e=>Wt(e),g("}")]),({value:e,...t})=>({...e,...t})),Ht=w(j([g("if"),g("("),S,g(")"),At,je(D(g("else")),e=>e==null?Ye(null):b(At,t=>Ht(t)))]),({value:e,...t})=>{let r=e[2],n=e[4],l=e[5];return l==null?{...t,type:"if",children:[r,n]}:{...t,type:"if",children:[r,n,l]}}),on=w(T(1,[Ce(g("throw"),Nt),S]),({value:e,...t})=>({...t,type:"throw",children:[e]})),oo=w(j([D(V("pragma_external")),j([g("import"),D(T(0,[b(ee(["{","}"],O),O),g("from")])),Dt])]),({value:[e,t]})=>{let{value:[r,n,l],...o}=t,i,s;n==null?s=[]:n.value.type=="identifier"?(i=n.value.value,s=[n.value]):s=n.value.value;let a=l.value.slice(1,l.value.length-1),_=new RegExp("^\\w+://").test(a);return{...o,not_evaluatable:!0,type:"import",is_external:_||e!=null,module:a,default_import:i,children:s}}),io=b(w(T(1,[g("export"),Ut]),({value:e,...t})=>({...t,not_evaluatable:!0,type:"export",is_default:!1,children:[e]})),w(T(2,[g("export"),g("default"),S]),({value:e,...t})=>({...t,not_evaluatable:!0,type:"export",is_default:!0,children:[e]}))),sn=w(j([g("while"),g("("),S,g(")"),At]),({value:e,...t})=>({...t,type:"while",children:[e[2],e[4]]})),so=w(g("break"),e=>({...e,type:"break",children:[],value:null})),ao=w(g("continue"),e=>({...e,type:"continue",children:[],value:null})),co=b(Ut,nn,ln,Ht,on,sn,tn,so,ao,lo),_o=b(Ut,nn,ln,Ht,on,sn,tn,oo,io),an=e=>w(Bl(b(g(";"),w(T(0,[b(e?_o:co,S),Xr(b(g(";"),Nt,$e,Lt(g("}"))),"unexpected token")]),t=>t.value)),b($e,Lt(g("}")))),({value:t,...r})=>({...r,type:"do",children:t.filter(n=>n.type!="punctuation")})),Wt=an(!1),uo=e=>b(w($e,t=>({type:"do",index:0,length:0,children:[]})),e?an(!0):Wt),po=e=>Kl(uo(e)),fo=(e,t=e.children)=>{if(e.type=="object_literal")return{...e,elements:t};if(e.type=="array_literal")return{...e,elements:t};if(["identifier","number","string_literal","builtin_identifier","backtick_string"].includes(e.type))return e;if(e.type=="function_expr")return{...e,function_args:t[0],body:t[t.length-1]};if(e.type=="ternary")return{...e,cond:t[0],branches:t.slice(1)};if(e.type=="const")return{...e,is_statement:!0};if(e.type=="let")return{...e,is_statement:!0};if(e.type=="decl_pair")return{...e,expr:t[1],name_node:t[0]};if(e.type=="assignment_pair")return{...e,children:t};if(e.type=="assignment")return{...e,is_statement:!0};if(e.type=="do")return{...e,is_statement:!0};if(e.type=="function_decl")return{...e,is_statement:!0};if(e.type=="unary")return{...e,expr:t[0]};if(e.type=="binary")return{...e,args:t};if(e.type=="member_access")return{...e,object:t[0],property:t[1]};if(e.type=="function_call")return{...e,fn:t[0],args:t[1]};if(e.type=="call_args")return e;if(e.type=="array_spread"||e.type=="object_spread")return{...e,expr:t[0]};if(e.type=="key_value_pair")return{...e,key:t[0],value:t[1]};if(e.type=="computed_property")return{...e,expr:t[0]};if(e.type=="new")return{...e,constructor:t[0],args:t[1]};if(e.type=="grouping")return{...e,expr:t[0]};if(e.type=="return")return{...e,expr:t[0],is_statement:!0};if(e.type=="throw")return{...e,expr:t[0],is_statement:!0};if(e.type=="if")return{...e,cond:t[0],branches:t.slice(1),is_statement:!0};if(["array_destructuring","object_destructuring","function_args"].includes(e.type))return{...e,elements:t};if(e.type=="destructuring_default")return{...e,name_node:t[0],expr:t[1]};if(e.type=="destructuring_rest")return{...e,name_node:t[0]};if(e.type=="destructuring_pair")return{...e,key:t[0],value:t[1]};if(e.type=="import")return{...e,is_statement:!0};if(e.type=="export")return{...e,binding:t[0],is_statement:!0};if(e.type=="while")return{...e,cond:t[0],body:t[1],is_statement:!0,is_loop:!0};if(e.type=="break"||e.type=="continue")return{...e,is_statement:!0};throw console.error("invalid node",e),new Error("unknown node type "+e.type)},Ze=e=>{if(Array.isArray(e))return e.map(Ze);{let t=e.children==null?null:Ze(e.children);return{...fo(e,t),children:t}}},cn=(e,t)=>{let r,n;if(e.children==null)n=e,r=!1;else{let l=e.children.map(o=>cn(o,e));r=l.some(o=>o[1]),r?n={...e,children:l.map(o=>o[0])}:n=e}if(n.type=="function_expr"&&n.name==null){let l;if(t?.type=="decl_pair")t.name_node.type=="identifier"&&(l=t.name_node.value);else if(t?.type=="key_value_pair"){let o=t.key.value;l=o.substr(1,o.length-2)}else l="anonymous";r=!0,n={...n,name:l}}return[n,r]},ho=e=>cn(e,null)[0],mo=(e,t,r=!1,n)=>{let l=_=>{if(_.index==null||_.length==null||isNaN(_.index)||isNaN(_.length))throw console.error(_),new Error("invalid node");{let c={..._,string:e.slice(_.index,_.index+_.length)};return c.children==null?c:{...c,children:c.children.map(l)}}},{tokens:o,ok:i,index:s,message:a}=Wl(e);if(i){let c={tokens:o.filter(p=>p.type!="whitespace"&&p.type!="comment"),current:0,str:e},u=po(r)(c);if(u.ok){let{node:p,undeclared:f}=ke(Ze(u.value),t,null,null,n);if(f.length!=0)return{ok:!1,problems:f.map(h=>({index:h.index,length:h.length,message:"undeclared identifier: "+h.value}))};{let h=Ze(ho(l(p))),m=$r(h);return m.length!=0?{ok:!1,problems:m}:{ok:!0,node:h}}}else{let p=Mt(u.cxt),f=p==null?e.length-1:p.index;return{ok:!1,problems:[{message:u.error,token:p,index:f,errorlocation:e.slice(f,20)}]}}}else return{ok:!1,problems:[{message:a,index:s}]}};var _n=(e,t,r,n,l)=>{let o=e.filter(p=>r[p]==null).map(p=>{if(n[p]!=null)return[p,n[p]];let f=t(p);if(f==null)return[p,{ok:!1,problems:[{is_load_error:!0}]}];if(typeof f=="string")return[p,mo(f,l,!0,p)];throw new Error("illegal state")}),{ok:i,problems:s}=o.reduce(({ok:p,problems:f},[h,m])=>({ok:p&&m.ok,problems:[...f,...(m.problems??[]).map(y=>({...y,module:h}))]}),{ok:!0,problems:[]}),a=Object.fromEntries(o);if(!i)return{ok:!1,problems:s,cache:a};let _=Object.fromEntries(o.map(([p,f])=>[p,f.node])),c=se(Object.values(_).map(p=>We(p)).flat());if(c.length==0)return{ok:!0,modules:_,cache:a};let u=_n(c,t,{...r,..._},n,l);if(u.ok)return{ok:!0,modules:{..._,...u.modules},cache:{...a,...u.cache}};{let p=u.problems.filter(h=>h.is_load_error).map(h=>h.module);return{ok:!1,problems:[...Object.entries(_).map(([h,m])=>m.children.filter(y=>y.type=="import").map(y=>[h,y])).flat().filter(([h,m])=>p.find(y=>y==m.full_import_path)!=null).map(([h,m])=>({message:"failed lo load module "+m.full_import_path,module:h,index:m.index})),...u.problems.filter(h=>!h.is_load_error)],cache:{...a,...u.cache}}}},un=(e,t,r,n)=>{let l=_n([e],t,{},r,n);return l.ok?{...l,sorted:Tr(l.modules)}:l};var pe=class extends Map{get_by_module_and_node(t,r){if(r.index==null||r.length==null)throw new Error("illegal state");return this.get(`${t}_${r.index}_${r.length}`)}set_by_module_and_node(t,r,n){if(r.index==null||r.length==null)throw new Error("illegal state");return this.set(`${t}_${r.index}_${r.length}`,n)}};var dn=e=>e.type=="return"?e.expr==null?e:e.expr:e.type=="export"?dn(e.children[0]):e,et=(e,t)=>{if(e.type=="function_expr"&&ve(e.children[0],t))return e.children[0].children.length==0?null:e.children[0];if(e.type=="function_expr"&&e.body.type!="do")return e.children[1];let r=z(e,t),n=r==null||r.type=="do"&&t>r.index?z(e,t-1):r;if(n==null||n.type=="do"||e==n)return null;let l=B(n,e);if(l.find(a=>a!=e&&a!=n&&a.type=="function_expr")!=null)return null;if(e.type=="while"&&l.includes(e.cond))return e.cond;let i=l.findIndex(a=>a.type=="do"),s=l[i-1];return dn(s)};var k={reload_app_window:"reload_app_window",reload_app_window_finished:"reload_app_window_finished",load_external_imports:"load_external_imports",eval_modules:"eval_modules",eval_modules_finished:"eval_modules_finished"},mn=(e,t)=>{let r=new Set(e),n=new Map(mr(t,l=>r.has(l.id)).map(({parent:l,node:o})=>[o.id,{id:o.id,version_number:o.version_number,toplevel:l.toplevel,module:l.toplevel?l.module:l.fn?.__location?.module,parent_name:l.fn?.name,args:o.args,log_fn_name:o.fn.name}]));return e.map(l=>n.get(l))},go=(e,t)=>e.run_state.status!=k.reload_app_window?te(e,!0,t):e.run_state.on_reload_app_window_finished(e,t),qt=(e,t,r,n)=>({function_node:r,module:t,selected_node:n,selected_call_id:Ln(e,t,r)}),Bt=e=>{let t=re(e),r=Pe(e,e.current_module,t),n=et(r,t);return qt(e,e.current_module,r,n)},te=(e,t,r)=>(e={...e,parse_result:{cache:e.parse_result?.cache,globals:e.parse_result?.globals},calltree:null,modules:null,execution_id:e.execution_id+1,rt_cxt:null,logs:null,current_calltree_node:null,active_calltree_node:null,calltree_node_is_expanded:null,collected_footprints_functions:new Set,frames:new Map,colored_frames:null,selected_calltree_node_by_loc:null,selection_state:null,value_explorer:null,snapshots:null,domevents:null,footprints:null},t||e.run_state?.status==k.reload_app_window_finished?pn(e,r??e.parse_result?.globals):{...e,run_state:{status:k.reload_app_window,on_reload_app_window_finished:pn}}),pn=(e,t)=>{if(t==null)throw new Error("illegal state");let n=(e.parse_result?.globals==null?t==null:ur(e.parse_result.globals,t))?e.parse_result.cache:{},l=s=>e.files[s],o={...un(e.entrypoint,l,n,t),globals:t},i={...e,parse_result:o};return i.parse_result.ok?(i={...i,snapshots:new pe,domevents:[],run_state:{breakpoint:Bt(i),on_eval_modules_finished:yo}},tt(i)):{...i,run_state:{status:k.reload_app_window_finished}}},tt=e=>{let t=se(xt(e.parse_result.modules).map(r=>r.node.full_import_path));return t.length!=0?{...e,run_state:{...e.run_state,status:k.load_external_imports,external_imports:t}}:gn(e,e)},gn=(e,t,r)=>{if(e.run_state!=t.run_state)return e;if(r!=null){let o=new Set(Object.entries(r).filter(([i,s])=>!s.ok).map(([i,s])=>i));if(o.size!=0){let i=xt(e.parse_result.modules).filter(({node:s})=>o.has(s.full_import_path)).map(({node:s,module_name:a})=>({index:s.index,message:r[s.full_import_path].error.message,module:a}));return{...e,parse_result:{ok:!1,modules:e.parse_result.modules,cache:e.parse_result.cache,problems:i}}}}let n=new pe([...e.snapshots.entries()].map(([o,i])=>[o,i==null?i:new Map(i)])),l=Kr(e.parse_result,r,e.on_deferred_call,e.domevents,e.execution_id,e.io_trace,e.storage,n,!e.collected_footprints_functions.has(e.run_state.breakpoint.function_node),e.run_state.breakpoint);return l.then!=null?{...e,run_state:{...e.run_state,status:k.eval_modules,promise:l}}:yn(e,e.execution_id,l)},yn=(e,t,r)=>{if(e.execution_id!=t)return e;if(e.calltree!=null){if(r.rt_cxt.io_trace_is_replay_aborted)throw new Error("illegal state");e={...e,calltree:Pn(e.calltree,r.calltree)}}let n=r.rt_cxt.snapshots,l=r.breakpoint,o=l.function_node.type=="do"?[l.selected_node]:[l.selected_node,l.function_node];for(let s of o){let a=[l.module,s];s!=null&&n.get_by_module_and_node(...a)===void 0&&n.set_by_module_and_node(...a,null)}if(l.selected_node!=null&&l.selected_call_id!=null){let s=n.get_by_module_and_node(l.module,l.selected_node);s!=null&&s.get(l.selected_call_id)===void 0&&s.set(l.selected_call_id,null)}let i={...e,snapshots:n,footprints:new Map([...e.footprints??[],...r.rt_cxt.footprints]),rt_cxt:r.rt_cxt,run_state:{status:k.eval_modules_finished}};if(e.run_state.breakpoint.function_node==null)throw new Error("illegal state");return e.collected_footprints_functions.add(e.run_state.breakpoint.function_node),e.run_state.on_eval_modules_finished(i,r,e.run_state.breakpoint)},yo=(e,t)=>{if(t.rt_cxt.io_trace_is_replay_aborted)return Tn(e);if(e={...e,calltree:t.calltree,rt_cxt:t.rt_cxt,logs:{logs:mn(t.logs,t.calltree),log_position:null},modules:t.modules,io_trace:t.io_trace==null||t.io_trace.length==0?e.io_trace:t.io_trace},e=jn(e),e.active_calltree_node==null){let{node:r,state:n}=Jt(e);e=he(n,null,r)}else e=An(X(e,e.active_calltree_node));if(e.run_state.status==k.reload_app_window)return e;if(e.run_state.status!=k.eval_modules_finished)throw new Error("illegal state");return e},wo=(e,t,r)=>{let n={...e.files,[e.current_module]:t},l={...e,files:n,parse_result:e.parse_result==null?null:{...e.parse_result,cache:dr(e.parse_result.cache,a=>a!=e.current_module)}},o=nt(l,r),i={type:"write",args:[o.current_module,o.files[o.current_module]]};return{state:!e.parse_result.ok||e.parse_result.modules?.[e.current_module]!=null?te(o):o,effects:[i]}},Kt=(e,t)=>{if(!e.parse_result.ok)return{state:e,effects:{type:"set_status",args:["invalid syntax"]}};if(e.calltree==null)return{state:e,effects:{type:"set_status",args:["code is executing"]}};let r=Pe(e,e.current_module,t);if(r==null||r.type=="do"&&r!=Oe(e)||r.type=="function_expr"&&e.snapshots.get_by_module_and_node(e.current_module,r)===null)return{state:e,effects:{type:"set_status",args:["code was not reached during program execution"]}}},vo=(e,t)=>{let r=e.parse_result.modules[e.current_module],n=z(r,t);if(n==null)return null;let l=B(n,r).find(o=>o.type=="function_call"||o.type=="function_expr");return l==null||l.type=="function_expr"?null:l},xo=e=>{let t=re(e),r=Kt(e,t);if(r!=null)return r;let n=vo(e,t);if(n==null)return{state:e,effects:{type:"set_status",args:["no function call to step into"]}};if(e.run_state.status!=k.eval_modules_finished)return{state:e,effects:{type:"set_status",args:["code is not executed yet"]}};let l=(e.active_calltree_node.children??[]).find(o=>{let i=JSON.parse(o.callsite_location);return i.index==n.index&&i.length==n.length});return l==null?{state:e,effects:{type:"set_status",args:["call was not reached during program execution"]}}:fe(l)?{state:e,effects:{type:"set_status",args:["Cannot step into: function is either builtin or from external lib"]}}:Le(e,!0,l)},wn=(e,t)=>!e.not_evaluatable&&(t==null||!we(e,t)),fn=e=>e.find((t,r)=>{let n=e[r+1];return wn(t,n)}),bo=(e,t,r,n)=>{if(z(t,n)==null)return{ok:!1,message:"out of scope"};if(e!=null&&e.index==n){let o;if(e.initial_is_expand==r)e.node==t?o=e.node:(o=fn(qe(e.node,t)),o.is_statement&&(o=e.node));else if(e.node.children!=null){let s=z(e.node,n),a=B(s,e.node);o=a.findLast((_,c)=>{let u=a[c+1];return _!=e.node&&wn(_,u)}),o==null&&(o=e.node)}else o=e.node;return{ok:!0,initial_is_expand:e.initial_is_expand,node:o,index:n}}else{let o=z(t,n),i=fn(B(o,t));return i.is_statement?{ok:!1,message:"can only evaluate expression, not statement"}:{ok:!0,index:n,node:i,initial_is_expand:r}}},ko=(e,t,r)=>{let n=Kt(e,t);if(n!=null)return n;let l=Pe(e,e.current_module,t);if(l==null)throw new Error("not implemented");let o=bo(e.selection_state,l,r,t),i={...e,selection_state:o,value_explorer:null};if(!o.ok)return{state:i,effects:{type:"set_status",args:[o.message]}};let s=qt(e,e.current_module,l,o.node);return xn(i,s,!0)},vn=(e,t,r,n)=>{let l=e.snapshots.get_by_module_and_node(t,r);if(l===null)return{has_snapshot:!0,node_snapshot:null};if(l===void 0)return{has_snapshot:!1};let o=l.get(n);return{has_snapshot:o!==void 0,node_snapshot:o}},hn=(e,t,r,n=void 0)=>{let l=e.snapshots.get_by_module_and_node(t,r);if(l===null)return{has_snapshot:!0,node_snapshot:null};if(l===void 0)return{has_snapshot:!1};if(n!=null){let s=l.get(n);if(s!=null)return{has_snapshot:!0,node_snapshot:s};if(s===void 0)return{has_snapshot:!1}}let[o,i]=[...l.entries()].sort((s,a)=>s[0]-a[0]).find(([s,a])=>a!=null);if(o==null)throw new Error("illegal state");return{has_snapshot:!0,node_snapshot:i}},xn=(e,t,r=!1)=>(e=En(e,t,r),e.run_state.status==k.reload_app_window?{...e,run_state:{...e.run_state,on_eval_modules_finished:Eo}}:e.value_explorer!=null?e:{state:e,effects:{type:"set_status",args:["expression was not reached during program execution"]}}),Eo=e=>{let t=e.selection_state;if(t==null||e.value_explorer!=null)return e;let r=Pe(e,e.current_module,t.node.index),n=qt(e,e.current_module,r,t.node);return xn(e,n,!1)},So=(e,t)=>e.files[t]==null?{state:e,effects:{type:"set_status",args:["File not found"]}}:{...e,current_module:t,selection_state:null,value_explorer:null},jo=(e,t,r=t)=>te({...e,entrypoint:t,current_module:r}),To=(e,t)=>te({...e,html_file:t,run_state:{status:k.reload_app_window}}),bn=(e,t)=>({state:kn(J(e,t),t.index),effects:{type:"set_focus"}}),$o=(e,t)=>{if(e.parse_result.ok){let r=e.parse_result.modules[e.current_module],n=z(r,t);if(n==null||n.type!="identifier")return{state:e,effects:{type:"set_status",args:["not an identifier"]}};{let l=n.definition;if(l=="global")return{state:e,effects:{type:"set_status",args:["global variable"]}};if(l=="self")return{state:e};{let o;if(l.module!=null){let i=Ue(e.parse_result.modules[l.module].children,s=>{if(s.type!="export")return null;if(s.is_default&&l.is_default)return s.children[0];if(!s.is_default&&!l.is_default)return s.binding.children.flatMap(_=>C(_.name_node)).find(_=>_.value==n.value)});o={module:l.module,index:i.index}}else o={module:e.current_module,index:l.index};return bn(e,o)}}}else return{state:e,effects:{type:"set_status",args:["unresolved syntax errors"]}}},Co=(e,t)=>({state:J(e,t),effects:{type:"set_focus"}}),kn=(e,t)=>(e=nt(e,t),e={...e,selection_state:null,value_explorer:null},Kt(e,t)!=null?e:Sn(e,Bt(e),!0)),Vt=(e,t,r,n)=>{let l=n.call_id;if(l==null)throw new Error("illegal state");let o=N(e.calltree,s=>s.id==l);if(Ct(r,o,n.ok)||["break","continue"].includes(r.type))return null;let i;return n.ok?i=void 0:i=G(o).error,{index:r.index,length:r.length,result:{ok:n.ok,value:n.value,error:i}}},En=(e,t,r=!1)=>{if(t.selected_call_id==null){let i=N(e.calltree,s=>G(s)?.ok==!1&&s.code==t.function_node&&(!s.code.is_loop||s.fn.__type=="loop_iteration"));i!=null&&(t={...t,selected_call_id:i.id})}let n=t.selected_node,{has_snapshot:l,node_snapshot:o}=n==null?{has_snapshot:!0,node_snapshot:null}:hn(e,t.module,t.selected_node.type=="function_args"?t.function_node:t.selected_node,t.selected_call_id);if(l){let i=!1,s,a;if(o==null)if(s=null,t.function_node==Oe(e))a=P(e).id,i=e.footprints.get(a)==null;else{let{has_snapshot:_,node_snapshot:c}=hn(e,t.module,t.function_node,t.selected_call_id);i=!_,a=c?.call_id}else o!=null&&(a=o.call_id,s=Vt(e,t.function_node,n,o));if(!i)return Mn({...e,value_explorer:s},t.function_node,a)}if(!r)throw new Error("illegal state");return{...e,run_state:{status:k.reload_app_window,reload_counter:(e.run_state.reload_counter??0)+1,on_reload_app_window_finished:tt,breakpoint:t}}},Sn=(e,t,r)=>t.function_node.type=="do"&&t.function_node!=Oe(e)?e:(e=En(e,t,r),e.run_state.status==k.reload_app_window?{...e,run_state:{...e.run_state,on_eval_modules_finished:jn}}:e),jn=e=>e.selection_state!=null||e.value_explorer!=null?e:Sn(e,Bt(e),!0),Oo=(e,t,r,n)=>e.execution_id!=r?e:{...e,snapshots:new pe,footprints:new Map,collected_footprints_functions:new Set,calltree:Ve(P(e),[...U(e)??[],t]),logs:{...e.logs,logs:e.logs.logs.concat(mn(n,t))}},Tn=e=>te({...e,io_trace:null}),$n=(e,t)=>{let r=l=>l.kind=="file"?[l]:l.children.map(r).flat(),n=Object.fromEntries(r(t).map(l=>[l.path,l.contents]));return{...e,project_dir:t,files:{...n,"":e.files[""]}}},Cn=(e,t)=>{let r=i=>e.files[t[i]]==null?"":t[i],n=r("entrypoint"),l=r("current_module"),o=r("html_file");return{...e,entrypoint:n,current_module:l,html_file:o}},On=(e,t,r,n)=>{let l=$n(e,t);return te({...n==null?l:Cn(l,n),has_file_system_access:r,parse_result:{...e.parse_result,cache:{}}})},Lo=(e,t,r)=>({...On(e,t,!0),current_module:r}),Po=e=>({...e,storage:new Map}),Ao=(e,t,r=0)=>{let n=e.project_dir==null?e:$n(e,e.project_dir),l=Cn(n,t);return te({...l,execution_id:0,storage:new Map,cursor_position_by_file:{[l.current_module]:r}})},rt={get_initial_state:Ao,input:wo,open_app_window:Po,load_dir:On,create_file:Lo,step_into:xo,change_current_module:So,change_entrypoint:jo,change_html_file:To,goto_location:bn,goto_definition:$o,goto_problem:Co,move_cursor:kn,eval_selection:ko,reload_app_window_finished:go,external_imports_loaded:gn,eval_modules_finished:yn,on_deferred_call:Oo,clear_io_trace:Tn};var re=e=>e.cursor_position_by_file[e.current_module]??0,nt=(e,t)=>({...e,cursor_position_by_file:{...e.cursor_position_by_file,[e.current_module]:t}});var J=(e,t)=>nt({...e,current_module:t.module},t.index),Mo=e=>e.error?.constructor==ue.constructor&&e.error?.message==ue.message,ne=e=>!e.ok||e.value?.[Symbol.toStringTag]=="Promise"&&e.value.status!=null&&!e.value.status.ok,G=e=>e.value?.[Symbol.toStringTag]=="Promise"?e.value.status:e,R=e=>e.toplevel?{module:e.module}:e.fn.__location,zo=e=>P(e).module,Oe=e=>e.parse_result.modules[zo(e)],fe=e=>!e.toplevel&&!e.fn.is_hosted,No=(e,t)=>e?.[t.module]?.[t.index??-1],zn=(e,t,r)=>({...e,[t.module]:{...e?.[t.module],[t.index??-1]:r}}),Ln=(e,t,r)=>e.selected_calltree_node_by_loc?.[t]?.[e.parse_result.modules[t]==r?-1:r.index],Fo=(e,t,r)=>({...e,selected_calltree_node_by_loc:zn(e.selected_calltree_node_by_loc,t,r)}),he=(e,t,r=e.current_calltree_node)=>({...e,active_calltree_node:t,current_calltree_node:r}),Gt=(e,t,r=t)=>{let n=R(t);if(No(e.colored_frames,n)!=t.id){e={...e,colored_frames:zn(e.colored_frames,n,t.id)};let o=e.frames.get(t.id);if(o==null){let i=e.footprints.get(t.id);if(i==null)throw new Error("illegal state");o=Ot(t.code,t,i);let s=Er(o);e.frames.set(t.id,{...o,coloring:s})}}return he(e,t,r)},Pn=(e,t)=>lt(e,t)[1],lt=(e,t)=>{if(e.id!=t.id)throw new Error("illegal state: merge_calltree");if(e.callsite_location==null&&t.callsite_location!=null)return[!0,lt({...e,callsite_location:t.callsite_location},t)[1]];if(e.snapshot==null&&t.snapshot!=null)return[!0,lt({...e,snapshot:t.snapshot},t)[1]];if(e.has_more_children){if(t.has_more_children)return[!1,e];if(e.id!=t.id)throw new Error("illegal state");return[!0,t]}if(e.children==null)return[!1,e];if(t.has_more_children)return[!1,e];let[r,n]=pr((l,o,i)=>{let[s,a]=lt(o,t.children[i]);return[l||s,a]},!1,e.children);return r?[!0,{...e,children:n}]:[!1,e]},Xt=(e,t)=>{let r=e.callsite_location;if(r==null)return null;r=JSON.parse(r);let n=ae(t.code,l=>l.index==r.index&&l.length==r.length&&(l.type=="new"||l.type=="function_call"||l.is_loop));if(n==null)throw new Error("illegal state");return n},I=(e,t,r=o=>o,n=!1,l=!1)=>{function o(f){if(l)throw new Error("illegal state");let h=_.code;return{...e,value_explorer:null,run_state:{status:k.reload_app_window,on_reload_app_window_finished:tt,on_eval_modules_finished:i,breakpoint:{module:_?.fn?.__location?.module,function_node:h,selected_call_id:_.id,current_calltree_node_id:t.id,selected_node:f}}}}function i(f,h,m){if(m.current_calltree_node_id!=f.current_calltree_node.id)return f;let y=N(f.calltree,x=>x.id==t.id);return I(f,y,r,n,!0)}let[s]=Ae(e.calltree,t);if(!t.toplevel&&!t.fn.is_hosted&&!s.toplevel&&!s.fn.is_hosted)return r({...he(e,null,t),value_explorer:null,selection_state:null});let a;t.toplevel||t.fn.__type=="loop_iteration"?a=!0:t.code?.type=="while"?a=!1:s.id=="deferred_calls"?a=!0:fe(t)?a=!1:fe(s)?a=!0:a=e.calltree_node_is_expanded[t.id];let _=a?t:s;e=he(e,_,t);let c,u,p;if(t.toplevel){if(e.footprints.get(P(e).id)==null)return o();u=null,p=null,c=R(_)}else if(t.fn.__type=="loop_iteration"){let f=R(t).module,h=re(e);if(e.current_module==f&&ve(t.code,h)&&h!=t.code.index)c={module:f,index:h};else{let E=t.code,A=E.body.children.length==0?E.cond:E.body.children[0];c={module:f,index:A.index}}let m=e.selection_state?.node,y=m!=null&&ve(t.code,m.index),x;if(y?(p=e.selection_state,x=e.selection_state.node):(p=null,x=et(t.code,c.index)),x==null)u=null,p=null;else{let{has_snapshot:E,node_snapshot:A}=vn(e,R(t).module,x,t.id);if(E)A==null?u=null:u=Vt(e,_.code,x,A);else return o(x)}}else if(t.code?.type=="while"){if(t.has_more_children)return o();u=null,p=null;let f=Xt(t,_);c={module:R(_).module,index:f.index}}else{if(t.snapshot==null)return o();let f;if(a){c=R(t),p=null;let m=e.snapshots.get_by_module_and_node(_.fn.__location.module,_.code)?.get(_.id);if(m==null)return o();m.ok?f=m.value:f=t.snapshot.args}else{let m=Xt(t,_);if(m==null)return o();c={module:R(_).module,index:m.index},f=t.snapshot.args,p={node:m}}if(f==null)throw new Error("illegal state");let h=t.ok?{"*arguments*":f,"*return*":t.snapshot.value}:{"*arguments*":f,"*throws*":t.snapshot.error};t.context!=null&&(h={...h,"*this before call*":t.snapshot.context_before,"*this after call*":t.snapshot.context_after}),u={index:c.index,result:{ok:!0,is_calltree_node_explorer:!0,value:h}}}return e=n?e:t.toplevel?{...e,current_module:c.module}:J(e,c),e.footprints.get(_.id)==null?o():r({...Gt(Fo(e,R(_),e.active_calltree_node.id),_,t),value_explorer:u,selection_state:p})},Do=e=>I(e,e.current_calltree_node,void 0,!0),Ae=(e,t)=>{let r=l=>l.id==t.id?[]:l.children==null?null:l.children.reduce((o,i)=>{if(o!=null)return o;let s=r(i);return s==null?null:[...s,l]},null),n=r(e);if(n==null)throw new Error("illegal state");return n},le=e=>fe(e)||e.code.is_loop?e.children!=null&&e.children.length!=0||e.has_more_children:e.toplevel?e.children!=null&&e.children.length!=0:!0,Ro=e=>{let t=e.current_calltree_node,r;if(le(t)&&e.calltree_node_is_expanded[t.id]&&t.children!=null)r=t.children[0];else{let n=(l,o)=>{if(l.id=="calltree")return null;let[i,...s]=o,a=i.children.findIndex(c=>c==l),_=i.children[a+1];return _??n(i,s)};r=n(t,Ae(e.calltree,t))}return r?.id=="deferred_calls"&&(r.children==null?r=null:r=r.children[0]),r==null?e:I(e,r)},Io=e=>{let t=e.current_calltree_node;if(t.toplevel)return e;let[r]=Ae(e.calltree,t),n=r.children.findIndex(s=>s==t),l=r.children[n-1],o=s=>!le(s)||!e.calltree_node_is_expanded[s.id]||s.children==null?s:o(s.children[s.children.length-1]),i;return l==null?i=r.id=="deferred_calls"?o(P(e)):r:i=o(l),I(e,i)},Uo=e=>{let t=e.current_calltree_node,r=e.calltree_node_is_expanded[t.id];if(!le(t)||!r){let[n]=Ae(e.calltree,t);return n.id=="calltree"||n.id=="deferred_calls"?e:I(e,n)}else return Le(e)},Ho=e=>{let t=e.current_calltree_node;return le(t)?e.calltree_node_is_expanded[t.id]?t.children!=null?I(e,t.children[0]):e:Le(e):e},Le=(e,t,r=e.current_calltree_node)=>{let n=r.id,l=e.calltree_node_is_expanded[n],o=t??!l,i={...e,calltree_node_is_expanded:{...e.calltree_node_is_expanded,[n]:o}};return I(i,r)},Wo=(e,t)=>{let r=N(e.calltree,n=>n.id==t);return I(e,r)},qo=(e,t)=>{let r=N(e.calltree,n=>n.id==t);return le(r)?Le(e,void 0,r):I(e,r)},X=(e,t)=>e.calltree_node_is_expanded?.[t.id]?e:{...e,calltree_node_is_expanded:{...e.calltree_node_is_expanded,...Object.fromEntries(Ae(e.calltree,t).map(r=>[r.id,!0])),[t.id]:!0}},Jt=e=>{let t=P(e);if(t.ok||Mo(t))return{state:X(e,t),node:t};{let r=N(t,n=>!G(n).ok&&(n.children==null||n.children.find(l=>!G(l).ok)==null));return{state:X(e,r),node:r}}},An=e=>Jt(e).state,Pe=(e,t,r)=>{let n=e.parse_result.modules[t];if(n==null)return null;if(r=n.index+n.length)return n;{let l=z(n,r),i=B(l,n).find(s=>s.type=="function_expr"||s.is_loop);return i??n}},Mn=(e,t,r)=>{if(t==Oe(e)){let l=P(e);return Gt(X(e,l),l)}if(t.type=="do")return e;if(r==null)return he(e,null);let n=N(e.calltree,l=>l.id==r);if(n==null)throw new Error("illegal state");return Gt(X(e,n),n)},Bo=e=>{if(e.current_calltree_node.toplevel)return{state:e};let t=e.active_calltree_node.code,r=R(e.active_calltree_node),n,l;if(e.current_calltree_node==e.active_calltree_node){let o=e.frames.get(e.active_calltree_node.id);if(e.active_calltree_node.ok)if(t.body.type=="do"){let i=ae(o,s=>s.type=="return"&&s.result?.ok);if(i==null)return{state:J(e,{module:r.module,index:t.body.index}),effects:{type:"set_focus"}};l=i.children[0]}else l=o.children[o.children.length-1];else l=Be(o);n=ae(t,i=>i==l.orig)}else{let o=e.current_calltree_node.callsite_location;o=JSON.parse(o),n=ae(e.active_calltree_node.code,i=>i.index==o.index&&i.length==o.length)}return{state:{...J(e,{module:r.module,index:n.index}),selection_state:{node:n},value_explorer:{index:n.index,length:n.length,result:e.current_calltree_node.snapshot}},effects:{type:"set_focus"}}},Nn=(e,t=!0)=>{if(e.current_calltree_node.toplevel)return{state:e};let r=R(e.active_calltree_node),n,l;if(e.current_calltree_node==e.active_calltree_node){if(e.active_calltree_node.toplevel)return{state:e};let o=e.active_calltree_node.code;n=o.function_args;let i=e.snapshots.get_by_module_and_node(e.active_calltree_node.fn.__location.module,o)?.get(e.active_calltree_node.id);if(i==null)return{state:e};l=i.ok?i:{ok:!1,error:e.active_calltree_node.error}}else{let o=Xt(e.current_calltree_node,e.active_calltree_node);if(o==null)return{state:e};l={ok:!0,value:e.current_calltree_node.snapshot.args},n=o.children[1]}return{state:{...J(e,{module:r.module,index:n.index}),selection_state:{node:n},value_explorer:{index:n.index,length:n.length,result:l}},effects:t?{type:"set_focus"}:null}},Ko=e=>{let t=[e.current_calltree_node,e.active_calltree_node,P(e)].find(n=>ne(n));if(t==null)return{state:e,effects:[{type:"set_status",args:["no error found"]}]};let r=N(t,n=>ne(n)&&(n.children==null||n.children.every(l=>!ne(l)||fe(l)&&l.children==null)));if(r==null)throw new Error("illegal state: error origin not found");return I(X(e,r),r,n=>{let l=Cr(n),o=Be(l);return{state:J(n,{module:R(r).module,index:o.index}),effects:{type:"set_focus"}}})},Vo=(e,t)=>{if(e.logs.logs.length==0)return{state:e};let r=Math.max(Math.min(e.logs.log_position==null?0:e.logs.log_position+t,e.logs.logs.length-1),0);return Fn(e,r)},Fn=(e,t)=>{e={...e,logs:{...e.logs,log_position:t}};let r=N(e.calltree,n=>n.id==e.logs.logs[t].id);return I(X(e,r),r,n=>{if(n.active_calltree_node==null)return n;let l=Nn(n,!1);if(l.effects!=null)throw new Error("illegal state");return l.state})};rt.calltree={arrow_down:Ro,arrow_up:Io,arrow_left:Uo,arrow_right:Ho,select_node:Wo,select_and_toggle_expanded:qo,select_return_value:Bo,select_arguments:Nn,select_error:Ko,navigate_logs_position:Fn,navigate_logs_increment:Vo,show_value_explorer:Do};var ot=class{constructor(t,r){this.ui=t,this.container=r,this.container.addEventListener("keydown",n=>{n.key=="r"&&(n.ctrlKey||n.metaKey)||n.preventDefault(),n.key=="Escape"&&this.ui.editor.focus(),n.key=="F1"&&this.ui.editor.focus_value_explorer(this.container),n.key=="F2"&&this.ui.editor.focus(),n.key=="a"&&v("calltree.select_arguments"),n.key=="e"&&v("calltree.select_error"),(n.key=="r"||n.key=="Enter")&&v("calltree.select_return_value"),(n.key=="ArrowDown"||n.key=="j")&&v("calltree.arrow_down"),(n.key=="ArrowUp"||n.key=="k")&&v("calltree.arrow_up"),(n.key=="ArrowLeft"||n.key=="h")&&v("calltree.arrow_left"),(n.key=="ArrowRight"||n.key=="l")&&v("calltree.arrow_right")})}on_click_node(t,r){t.target.classList.contains("expand_icon")?v("calltree.select_and_toggle_expanded",r):v("calltree.select_node",r)}clear_calltree(){this.container.innerHTML="",this.node_to_el=new Map,this.state=null}render_loop_while(t){let{ok:r,error:n}=G(t);return d("span","call_header "+(r?"":"error"),"while loop("+t.children_count+")",r?null:[": ",L(n)])}render_loop_iteration(t,r){let{ok:n,error:l}=G(t),o=r.children.indexOf(t);return d("span","call_header "+(n?"":"error"),d("span",null,"iteration "+o),n?"":d("span","call_header error",":\xA0",L(l)))}render_node(t,r){let n=this.state.calltree_node_is_expanded[t.id],l=d("div","callnode",d("div",{class:"call_el",click:o=>this.on_click_node(o,t.id)},le(t)?n&&t.has_more_children?d("div","spinner"):d("span","expand_icon",n?"\u25BC":"\u25B6"):d("span","expand_icon_placeholder","\xA0"),t.toplevel?d("span",t.ok?"":"call_header error",d("i","","toplevel: "+(t.module==""?"*scratch*":t.module)),t.ok?"":d("span","",":\xA0",L(t.error))):t.fn.__type=="loop_iteration"?this.render_loop_iteration(t,r):t.code?.type=="while"?this.render_loop_while(t):d("span","call_header "+(ne(t)?"error":"")+(t.fn.is_hosted?"":" native"),t.is_new?"new ":"",t.context==null?"":d("span","",typeof t.context=="object"?t.context.constructor?.name||"":L(t.context),"."),t.fn.name,"(",...oe(t.args.map(o=>L(o))),")",": ",t.ok?L(t.value):L(t.error))),t.children==null||!n?null:t.children.map(o=>this.render_node(o,t)));return this.node_to_el.set(t.id,l),l.is_expanded=n,l}render_active(t,r){let n=this.node_to_el.get(t.id).getElementsByClassName("call_el")[0];r?n.classList.add("active"):n.classList.remove("active")}render_select_node(t,r){if(t!=null&&this.render_active(t.current_calltree_node,!1),this.state=r,this.render_active(this.state.current_calltree_node,!0),t?.current_calltree_node!=r.current_calltree_node){let n=this.container.scrollLeft;ie(this.container,this.node_to_el.get(this.state.current_calltree_node.id).getElementsByClassName("call_el")[0]),this.container.scrollLeft=n}}render_expand_node(t,r){this.state=r,this.do_render_expand_node(t.calltree_node_is_expanded,r.calltree_node_is_expanded,P(t),P(r));let n=U(t),l=U(r);if(n!=null){for(let o=0;othis.render_node(r))))))}};var it=class{constructor(t,r){this.el=r,this.ui=t,this.el.addEventListener("keydown",n=>{n.key=="Escape"&&this.ui.editor.focus(),n.key=="Enter"&&this.ui.editor.focus(),n.key=="F1"&&this.ui.editor.focus_value_explorer(this.el),n.key=="F3"&&this.ui.editor.focus(),(n.key=="ArrowDown"||n.key=="j")&&(n.preventDefault(),v("calltree.navigate_logs_increment",1)),(n.key=="ArrowUp"||n.key=="k")&&(n.preventDefault(),v("calltree.navigate_logs_increment",-1))})}rerender_logs(t,r){this.el.innerHTML="",this.render_logs(t,null,r)}render_logs(t,r,n){for(let l=r==null?0:r.logs.length;lv("calltree.navigate_logs_position",l)},d("a",{href:"javascript: void(0)"},i+": "+(o.toplevel?"toplevel":"fn "+(o.parent_name==""?"anonymous":o.parent_name))+":")," ",...oe(o.args.map(a=>L(a)))))}if(r?.log_position!=n.log_position&&(r?.logs==n.logs&&r?.log_position!=null&&this.el.children[r.log_position].classList.remove("active"),n.log_position!=null)){let l=this.el.children[n.log_position];l.classList.add("active"),ie(this.el,l)}}};var st=class{constructor(t,r){this.el=r,this.ui=t,this.el.addEventListener("keydown",n=>{n.key=="Escape"&&this.ui.editor.focus(),n.key=="F4"&&this.ui.editor.focus()})}clear(){this.el.innerHTML="",this.is_rendered=!1}render_io_trace(t,r){if(r&&(this.is_rendered=!1),this.is_rendered)return;this.is_rendered=!0,this.el.innerHTML="";let n=t.io_trace??[],l=t.rt_cxt.io_trace_index??n.length;for(let o=0;oL(a))),"): ",i.ok?L(i.value):L(i.error)))}}};var Jo="leporello-js",Dn=`https://firebasestorage.googleapis.com/v0/b/${Jo}.appspot.com/o/`;async function Go(e){let t=new TextEncoder().encode(e),r=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(r)).map(o=>o.toString(16).padStart(2,"0")).join("")}async function Xo(e){let t=(await Go(e)).slice(0,40),r=new Blob([e],{type:"text/plain"}),n=new FormData;n.append("file",r);let l=await fetch(Dn+t,{method:"POST",body:n});if(!l.ok){let i=(await l.json())?.error?.message;throw new Error("Failed to upload: "+i)}return t}async function Yo(e){let t=await fetch(Dn+e+"?alt=media");if(!t.ok){let n=(await t.json())?.error?.message;throw new Error("Failed to fetch: "+n)}return t.text()}async function Rn(){let t=new URLSearchParams(window.location.search).get("share_id");if(t==null)return null;let r=localStorage["share_"+t];if(r!=null)return r;try{return await Yo(t)}catch(n){return alert(n.message),null}}async function In(e){let t=await Xo(e),r=new URL(window.location);r.searchParams.set("share_id",t),history.replaceState(null,null,r.href)}var at=class{constructor(){this.el=d("dialog","share_dialog",this.upload_begin=d("p","",d("p","","This button will upload your scratch file to the cloud for sharing with others."),d("ul","",d("li","","Please ensure that no personal data or confidential information is included."),d("li","","Avoid including copyrighted materials.")),d("span",{style:"color: red"},"Caution: Once shared, files cannot be deleted."),this.upload_buttons=d("p",{style:"text-align: center"},d("button",{class:"upload_button",click:()=>this.upload()},"Upload"),this.cancel_button=d("button",{style:"margin-left: 1em",click:()=>this.cancel()},"Cancel"))),this.uploading=d("span",{style:"display: none"},"Uploading..."),this.upload_finish=d("p",{style:"display: none"},d("p","",d("p",{style:` text-align: center; margin-bottom: 1em; font-size: 1.2em - `},"Upload successful"),this.url_share=d("input",{type:"text",readonly:!0,style:"min-width: 30em"}),this.copy_button=d("button",{click:()=>this.copy(),style:"margin-left: 1em"},"Copy URL")),this.close_button=d("button",{style:"display: block; margin: auto",click:()=>this.cancel()},"Close")))}async upload(){this.uploading.style.display="",this.upload_begin.style.display="none";try{await Rn($().files[""]),this.url_share.value=window.location.toString(),this.upload_finish.style.display=""}catch(t){alert(t.message),this.upload_begin.style.display=""}finally{this.uploading.style.display="none"}}copy(){this.url_share.select(),document.execCommand("copy")}cancel(){this.upload_finish.style.display="none",this.upload_begin.style.display="",this.el.close()}};var st=class{constructor(t,r){this.open_app_window=this.open_app_window.bind(this),this.files=new Ie(this),this.tabs={},this.debugger={},t.appendChild(this.root=d("div","root",this.editor_container=d("div","editor_container"),d("div","bottom",this.debugger_container=d("div","debugger",this.debugger_loaded=d("div","debugger_wrapper",d("div","tabs",this.tabs.calltree=d("div","tab",d("a",{click:()=>this.set_active_tab("calltree"),href:"javascript: void(0)"},"Call tree (F2)")),this.tabs.logs=d("div","tab",d("a",{click:()=>this.set_active_tab("logs"),href:"javascript: void(0)"},"Logs (F3)")),this.tabs.io_trace=d("div","tab",d("a",{click:()=>this.set_active_tab("io_trace"),href:"javascript: void(0)"},"IO trace (F4)"))),this.debugger.calltree=d("div",{class:"tab_content",tabindex:0}),this.debugger.logs=d("div",{class:"tab_content logs",tabindex:0}),this.debugger.io_trace=d("div",{class:"tab_content io_trace",tabindex:0})),this.debugger_loading=d("div","debugger_wrapper",this.debugger_loading_message=d("div"))),this.problems_container=d("div",{class:"problems_container",tabindex:0},this.problems=d("div"))),this.files.el,this.statusbar=d("div","statusbar",this.loading_spinner=d("div","spinner"),this.status=d("div","status"),this.current_module=d("div","current_module"),d("a",{class:"statusbar_action first",href:"javascript: void(0)",click:()=>this.clear_io_trace()},"Clear IO trace (F6)"),d("a",{class:"statusbar_action open_app_window_button",href:"javascript: void(0)",click:this.open_app_window},"(Re)open app window (F7)",this.open_app_window_tooltip=d("div",{class:"open_app_window_tooltip"},"Click here to open app window")),this.options=d("div","options",d("label",{for:"standard"},d("input",{id:"standard",type:"radio",name:"keyboard",checked:localStorage.keyboard=="standard"||localStorage.keyboard==null,change:()=>{this.editor.set_keyboard_handler("standard")}}),"Standard"),d("label",{for:"vim"},d("input",{id:"vim",type:"radio",name:"keyboard",checked:localStorage.keyboard=="vim",change:()=>{this.editor.set_keyboard_handler("vim")}}),"VIM")),d("a",{class:"show_help",href:"javascript: void(0)",click:()=>this.help_dialog.showModal()},"Help"),d("a",{class:"github",href:"https://leporello.tech",target:"__blank"},"Website"),d("button",{class:"share_button",click:()=>this.share_dialog.showModal()},"Share"),this.help_dialog=this.render_help(),this.share_dialog=new it().el))),window.addEventListener("keydown",()=>this.clear_status(),!0),window.addEventListener("click",()=>this.clear_status(),!0),window.addEventListener("keydown",n=>{n.key=="F2"&&this.set_active_tab("calltree"),n.key=="F3"&&this.set_active_tab("logs"),n.key=="F4"&&this.set_active_tab("io_trace"),n.key=="F6"&&this.clear_io_trace(),n.key=="F7"&&this.open_app_window()}),this.editor=new De(this,this.editor_container),this.calltree=new nt(this,this.debugger.calltree),this.logs=new lt(this,this.debugger.logs),this.io_trace=new ot(this,this.debugger.io_trace),this.render_current_module(r.current_module),this.set_active_tab("calltree",!0),t.addEventListener("focusin",n=>{let l;this.editor_container.contains(document.activeElement)?this.editor.has_value_explorer()?l=!this.debugger_container.contains(this.editor.value_explorer.return_to):l=!0:l=!1,this.prev_is_focus_in_editor!=l&&(this.prev_is_focus_in_editor=l,Ke($(),l))})}set_active_tab(t,r=!1){this.active_tab=t,Object.values(this.tabs).forEach(n=>n.classList.remove("active")),this.tabs[t].classList.add("active"),Object.values(this.debugger).forEach(n=>n.style.display="none"),this.debugger[t].style.display="block",t=="io_trace"&&this.io_trace.render_io_trace($(),!1),r||this.debugger[t].focus(),t=="calltree"&&!r&&v("calltree.show_value_explorer")}clear_io_trace(){v("clear_io_trace")}open_app_window(){this.toggle_open_app_window_tooltip(!1),localStorage.onboarding_open_app_window=!0,ir($())}render_debugger_loading(t){this.debugger_container.style="",this.problems_container.style="display: none",this.debugger_loaded.style="display: none",this.debugger_loading.style="",this.debugger_loading_message.innerText=t.run_state.status==k.load_external_imports?"Loading external modules...":"Executing code..."}render_debugger(t){this.debugger_container.style="",this.problems_container.style="display: none",this.debugger_loading.style="display: none",this.debugger_loaded.style="",this.calltree.render_calltree(t),this.logs.render_logs(t,null,t.logs)}render_io_trace(t){this.active_tab=="io_trace"?this.io_trace.render_io_trace(t,!0):this.io_trace.clear()}render_problems(t){this.debugger_container.style="display: none",this.problems_container.style="",this.problems.innerHTML="",t.forEach(r=>{let l=this.editor.get_session(r.module).doc.indexToPosition(r.index),o=r.module==""?"*scratch*":r.module;this.problems.appendChild(d("div","problem",d("a",{href:"javascript:void(0)",click:()=>v("goto_problem",r)},`${o}:${l.row+1}:${l.column} - ${r.message}`)))})}set_status(t){this.current_module.style="display: none",this.status.style="",this.status.innerText=t}clear_status(){this.render_current_module($().current_module)}render_current_module(t){this.status.style="display: none",this.current_module.innerText=t==""?"*scratch*":t,this.current_module.style=""}render_help(){let t=[["Focus value explorer","F1"],["Navigate value explorer","\u2190 \u2192 \u2191 \u2193 or hjkl"],["Leave value explorer","F1 or Esc"],["Focus call tree view","F2"],["Navigate call tree view","\u2190 \u2192 \u2191 \u2193 or hjkl"],["Leave call tree view","F2 or Esc"],["Focus console logs","F3"],["Navigate console logs","\u2191 \u2193 or jk"],["Leave console logs","F3 or Esc"],["Focus IO trace","F4"],["Leave IO trace","F4 or Esc"],["Jump to definition","F5","gd"],["Expand selection to eval expression","Ctrl-\u2193 or Ctrl-j"],["Collapse selection","Ctrl-\u2191 or Ctrl-k"],["Step into call","F11"],["Step out of call","Shift-F11"],["When in call tree view, jump to return statement","Enter"],["When in call tree view, jump to function arguments","a"],["When in call tree view, jump to error origin","e"],["Clear IO trace","F6"],["(Re)open run window (F7)","F7"]];return d("dialog","help_dialog",d("table","help",d("thead","",d("th","","Action"),d("th","key","Standard"),d("th","key","VIM")),d("tbody","",t.map(([r,n,l])=>d("tr","",d("td","",r),d("td",l==null?{class:"key spanned",colspan:2}:{class:"key"},n),l==null?null:d("td","key",l))))),d("form",{method:"dialog"},d("button",null,"Close")))}toggle_open_app_window_tooltip(t){this.open_app_window_tooltip.classList.toggle("on",t)}};var Yo=e=>new globalThis.app_window.Function("url",` + `},"Upload successful"),this.url_share=d("input",{type:"text",readonly:!0,style:"min-width: 30em"}),this.copy_button=d("button",{click:()=>this.copy(),style:"margin-left: 1em"},"Copy URL")),this.close_button=d("button",{style:"display: block; margin: auto",click:()=>this.cancel()},"Close")))}async upload(){this.uploading.style.display="",this.upload_begin.style.display="none";try{await In($().files[""]),this.url_share.value=window.location.toString(),this.upload_finish.style.display=""}catch(t){alert(t.message),this.upload_begin.style.display=""}finally{this.uploading.style.display="none"}}copy(){this.url_share.select(),document.execCommand("copy")}cancel(){this.upload_finish.style.display="none",this.upload_begin.style.display="",this.el.close()}};var ct=class{constructor(t,r){this.open_app_window=this.open_app_window.bind(this),this.files=new He(this),this.tabs={},this.debugger={},t.appendChild(this.root=d("div","root",this.editor_container=d("div","editor_container"),d("div","bottom",this.debugger_container=d("div","debugger",this.debugger_loaded=d("div","debugger_wrapper",d("div","tabs",this.tabs.calltree=d("div","tab",d("a",{click:()=>this.set_active_tab("calltree"),href:"javascript: void(0)"},"Call tree (F2)")),this.tabs.logs=d("div","tab",d("a",{click:()=>this.set_active_tab("logs"),href:"javascript: void(0)"},"Logs (F3)")),this.tabs.io_trace=d("div","tab",d("a",{click:()=>this.set_active_tab("io_trace"),href:"javascript: void(0)"},"IO trace (F4)"))),this.debugger.calltree=d("div",{class:"tab_content",tabindex:0}),this.debugger.logs=d("div",{class:"tab_content logs",tabindex:0}),this.debugger.io_trace=d("div",{class:"tab_content io_trace",tabindex:0})),this.debugger_loading=d("div","debugger_wrapper",this.debugger_loading_message=d("div"))),this.problems_container=d("div",{class:"problems_container",tabindex:0},this.problems=d("div"))),this.files.el,this.statusbar=d("div","statusbar",this.loading_spinner=d("div","spinner"),this.status=d("div","status"),this.current_module=d("div","current_module"),d("a",{class:"statusbar_action first",href:"javascript: void(0)",click:()=>this.clear_io_trace()},"Clear IO trace (F6)"),d("a",{class:"statusbar_action open_app_window_button",href:"javascript: void(0)",click:this.open_app_window},"(Re)open app window (F7)",this.open_app_window_tooltip=d("div",{class:"open_app_window_tooltip"},"Click here to open app window")),this.options=d("div","options",d("label",{for:"standard"},d("input",{id:"standard",type:"radio",name:"keyboard",checked:localStorage.keyboard=="standard"||localStorage.keyboard==null,change:()=>{this.editor.set_keyboard_handler("standard")}}),"Standard"),d("label",{for:"vim"},d("input",{id:"vim",type:"radio",name:"keyboard",checked:localStorage.keyboard=="vim",change:()=>{this.editor.set_keyboard_handler("vim")}}),"VIM")),d("a",{class:"show_help",href:"javascript: void(0)",click:()=>this.help_dialog.showModal()},"Help"),d("a",{class:"github",href:"https://leporello.tech",target:"__blank"},"Website"),d("button",{class:"share_button",click:()=>this.share_dialog.showModal()},"Share"),this.help_dialog=this.render_help(),this.share_dialog=new at().el))),window.addEventListener("keydown",()=>this.clear_status(),!0),window.addEventListener("click",()=>this.clear_status(),!0),window.addEventListener("keydown",n=>{n.key=="F2"&&this.set_active_tab("calltree"),n.key=="F3"&&this.set_active_tab("logs"),n.key=="F4"&&this.set_active_tab("io_trace"),n.key=="F6"&&this.clear_io_trace(),n.key=="F7"&&this.open_app_window()}),this.editor=new Ie(this,this.editor_container),this.calltree=new ot(this,this.debugger.calltree),this.logs=new it(this,this.debugger.logs),this.io_trace=new st(this,this.debugger.io_trace),this.render_current_module(r.current_module),this.set_active_tab("calltree",!0),t.addEventListener("focusin",n=>{let l;this.editor_container.contains(document.activeElement)?this.editor.has_value_explorer()?l=!this.debugger_container.contains(this.editor.value_explorer.return_to):l=!0:l=!1,this.prev_is_focus_in_editor!=l&&(this.prev_is_focus_in_editor=l,Je($(),l))})}set_active_tab(t,r=!1){this.active_tab=t,Object.values(this.tabs).forEach(n=>n.classList.remove("active")),this.tabs[t].classList.add("active"),Object.values(this.debugger).forEach(n=>n.style.display="none"),this.debugger[t].style.display="block",t=="io_trace"&&this.io_trace.render_io_trace($(),!1),r||this.debugger[t].focus(),t=="calltree"&&!r&&v("calltree.show_value_explorer")}clear_io_trace(){v("clear_io_trace")}open_app_window(){this.toggle_open_app_window_tooltip(!1),localStorage.onboarding_open_app_window=!0,sr($())}render_debugger_loading(t){this.debugger_container.style="",this.problems_container.style="display: none",this.debugger_loaded.style="display: none",this.debugger_loading.style="",this.debugger_loading_message.innerText=t.run_state.status==k.load_external_imports?"Loading external modules...":"Executing code..."}render_debugger(t){this.debugger_container.style="",this.problems_container.style="display: none",this.debugger_loading.style="display: none",this.debugger_loaded.style="",this.calltree.render_calltree(t),this.logs.render_logs(t,null,t.logs)}render_io_trace(t){this.active_tab=="io_trace"?this.io_trace.render_io_trace(t,!0):this.io_trace.clear()}render_problems(t){this.debugger_container.style="display: none",this.problems_container.style="",this.problems.innerHTML="",t.forEach(r=>{let l=this.editor.get_session(r.module).doc.indexToPosition(r.index),o=r.module==""?"*scratch*":r.module;this.problems.appendChild(d("div","problem",d("a",{href:"javascript:void(0)",click:()=>v("goto_problem",r)},`${o}:${l.row+1}:${l.column} - ${r.message}`)))})}set_status(t){this.current_module.style="display: none",this.status.style="",this.status.innerText=t}clear_status(){this.render_current_module($().current_module)}render_current_module(t){this.status.style="display: none",this.current_module.innerText=t==""?"*scratch*":t,this.current_module.style=""}render_help(){let t=[["Focus value explorer","F1"],["Navigate value explorer","\u2190 \u2192 \u2191 \u2193 or hjkl"],["Leave value explorer","F1 or Esc"],["Focus call tree view","F2"],["Navigate call tree view","\u2190 \u2192 \u2191 \u2193 or hjkl"],["Leave call tree view","F2 or Esc"],["Focus console logs","F3"],["Navigate console logs","\u2191 \u2193 or jk"],["Leave console logs","F3 or Esc"],["Focus IO trace","F4"],["Leave IO trace","F4 or Esc"],["Jump to definition","F5","gd"],["Expand selection to eval expression","Ctrl-\u2193 or Ctrl-j"],["Collapse selection","Ctrl-\u2191 or Ctrl-k"],["Step into call","F11"],["Step out of call","Shift-F11"],["When in call tree view, jump to return statement","Enter"],["When in call tree view, jump to function arguments","a"],["When in call tree view, jump to error origin","e"],["Clear IO trace","F6"],["(Re)open run window (F7)","F7"]];return d("dialog","help_dialog",d("table","help",d("thead","",d("th","","Action"),d("th","key","Standard"),d("th","key","VIM")),d("tbody","",t.map(([r,n,l])=>d("tr","",d("td","",r),d("td",l==null?{class:"key spanned",colspan:2}:{class:"key"},n),l==null?null:d("td","key",l))))),d("form",{method:"dialog"},d("button",null,"Close")))}toggle_open_app_window_tooltip(t){this.open_app_window_tooltip.classList.toggle("on",t)}};var Zo=e=>new globalThis.app_window.Function("url",` return import(url) - `)(e),Zo=async e=>{let t=e.run_state.external_imports,r=await Promise.allSettled(t.map(l=>Yo(/^\w+:\/\//.test(l)?l:dt+"/"+l))),n=Object.fromEntries(r.map((l,o)=>[t[o],{ok:l.status=="fulfilled",error:l.reason,module:l.value}]));v("external_imports_loaded",e,n)},at=(e,t,r=t.current_module)=>{e.editor.ensure_session(r,t.files[r])},Un=(e,t)=>{e.editor.remove_markers_of_type(t,"evaluated_ok"),e.editor.remove_markers_of_type(t,"evaluated_error")},Xt=e=>{e.editor.for_each_session((t,r)=>Un(e,t))},In=(e,t)=>{let r=t.current_module;Un(e,r),Er(t,r).forEach(n=>{e.editor.add_marker(r,n.result.ok?"evaluated_ok":"evaluated_error",n.index,n.index+n.length)})},Qo=(e,t)=>{e.editor.for_each_session((r,n)=>{e.editor.remove_markers_of_type(r,"error-code"),n.clearAnnotations()}),t.parse_result.ok!=null&&(t.parse_result.ok?Object.keys(t.parse_result.modules).forEach(r=>{at(e,t,r)}):(e.editor.for_each_session((r,n)=>{n.setAnnotations(t.parse_result.problems.filter(l=>l.module==r).map(l=>{let o=n.doc.indexToPosition(l.index);return{row:o.row,column:o.column,text:l.message,type:"error"}}))}),t.parse_result.problems.forEach(r=>{at(e,t,r.module),e.editor.add_marker(r.module,"error-code",r.index,r.token==null?r.index+1:r.index+r.token.length)}),e.render_problems(t.parse_result.problems)))},Hn=(e,t,r)=>{at(e,t),e.editor.switch_session(t.current_module),r!=null&&r.with_app_window&&!localStorage.onboarding_open_app_window&&e.toggle_open_app_window_tooltip(!0)},Wn=(e,t,r,n)=>{if(e!=t){if(e.project_dir!=t.project_dir&&r.files.render(t),e.current_module!=t.current_module&&r.files.render_current_module(t.current_module),e.current_module!=t.current_module&&(localStorage.current_module=t.current_module,r.render_current_module(t.current_module)),e.entrypoint!=t.entrypoint&&(localStorage.entrypoint=t.entrypoint),e.html_file!=t.html_file&&(localStorage.html_file=t.html_file),e.current_module!=t.current_module&&(at(r,t),r.editor.unembed_value_explorer(),r.editor.switch_session(t.current_module)),re(t)!=r.editor.get_cursor_position()&&n!="on_deferred_call"&&r.editor.set_cursor_position(re(t)),(e.run_state.status!=t.run_state.status||t.run_state.status==k.reload_app_window&&e.run_state.reload_counter!=t.run_state.reload_counter)&&(t.run_state.status==k.reload_app_window&&ft(t),t.run_state.status==k.load_external_imports&&Zo(t),t.run_state.status==k.eval_modules&&t.run_state.promise.then(l=>{v("eval_modules_finished",t.execution_id,l)}),r.loading_spinner.style.visibility=t.run_state.status==k.eval_modules_finished?"hidden":"initial"),e.parse_result!=t.parse_result&&Qo(r,t),t.parse_result.ok?e.calltree==null||e.execution_id!=t.execution_id?t.calltree==null?(r.calltree.clear_calltree(),Xt(r),r.render_debugger_loading(t)):(r.render_debugger(t),Xt(r),In(r,t),r.logs.rerender_logs(t,t.logs),(e.io_trace!=t.io_trace||e.rt_cxt?.io_trace_index!=t.rt_cxt.io_trace_index)&&r.render_io_trace(t)):(U(e)==null&&U(t)!=null&&r.calltree.render_deferred_calls(t),(e.calltree!=t.calltree||e.calltree_node_is_expanded!=t.calltree_node_is_expanded)&&r.calltree.render_expand_node(e,t),t.current_calltree_node!=e.current_calltree_node&&r.calltree.render_select_node(e,t),e.colored_frames!=t.colored_frames&&In(r,t),r.logs.render_logs(t,e.logs,t.logs),(e.run_state.status!=t.run_state.status&&t.run_state.status=="eval_modules_finished"||(e.current_calltree_node!=t.current_calltree_node||e.calltree_node_is_expanded!=t.calltree_node_is_expanded)&&t.run_state.status=="eval_modules_finished")&&Ke(t,r.is_focus_in_editor)):(r.calltree.clear_calltree(),Xt(r)),e.selection_state!=t.selection_state){r.editor.remove_markers_of_type(t.current_module,"selection");let l=t.selection_state?.node;l!=null&&r.editor.add_marker(t.current_module,"selection",l.index,l.index+l.length)}e.value_explorer!=t.value_explorer&&(t.value_explorer==null?r.editor.unembed_value_explorer():r.editor.embed_value_explorer(t,t.value_explorer))}},qn={set_focus:(e,t,r)=>{r.editor.focus()},set_status:(e,[t],r)=>{r.set_status(t)},save_to_localstorage(e,[t,r]){localStorage[t]=r},write:(e,[t,r],n,l)=>{if(t==""){let o=new URL(window.location).searchParams.get("share_id");if(o==null)localStorage.code=r;else{let i="share_"+o;localStorage.code==l.files[""]&&(localStorage.code=r),localStorage[i]=r}}else e.has_file_system_access?er(t,r):gr(t,r)}};var ct=()=>({current_module:localStorage.current_module??"",entrypoint:localStorage.entrypoint??"",html_file:localStorage.html_file??""}),wr=()=>{if(globalThis.showDirectoryPicker==null)throw new Error("Your browser is not supporting File System Access API");he(!0).then(e=>{v("load_dir",e,!0,ct())})},vr=async()=>{Qt(),v("load_dir",await yt,!1,ct())},Yt,W,F,Bn=async(e,t)=>{Yt=t;let r={"":localStorage.code||mr},n,l,o=await he(!1),i;if(o==null){let a=new URLSearchParams(window.location.search).get("example"),_=new URL(window.location);if(_.searchParams.delete("example"),history.replaceState(null,null,_.href),i=ge.find(c=>c.path==a),i==null){let c=await Dn();c==null?l=ct():(r={"":c},l={current_module:"",entrypoint:""})}else l={current_module:i.entrypoint,entrypoint:i.entrypoint};n={project_dir:await yt,files:r,has_file_system_access:!1}}else l=ct(),n={project_dir:o,files:r,has_file_system_access:!0};F=Yt.get_initial_state({...n,on_deferred_call:(...s)=>v("on_deferred_call",...s)},l),globalThis.__state=F,W=new st(e,F),globalThis.__ui=W,Hn(W,F,i),or(F)},$=()=>F,v=(e,...t)=>{e=="input"||e=="write"?console.log("exec",e):console.log("exec",e,...t);let r=e.split(".").reduce((i,s)=>i?.[s],Yt);if(r==null)throw new Error("command "+e+" + not found");let n=r(F,...t);console.log("nextstate",n);let l,o;if(n.state!=null?{state:l,effects:o}=n:(l=n,o=null),F?.current_module==null)throw console.error("command did not return state, returned",n),new Error("illegal state");Wn(F,l,W,e),o!=null&&(Array.isArray(o)?o:[o]).forEach(i=>{i.type=="write"||i.type=="save_to_localstorage"?console.log("apply effect",i.type):console.log("apply effect",i.type,...i.args??[]),qn[i.type](l,i.args,W,F)}),globalThis.__prev_state=F,globalThis.__state=l,F=l};Bn(globalThis.document.getElementById("app"),et);})(); + `)(e),Qo=async e=>{let t=e.run_state.external_imports,r=await Promise.allSettled(t.map(l=>Zo(/^\w+:\/\//.test(l)?l:ft+"/"+l))),n=Object.fromEntries(r.map((l,o)=>[t[o],{ok:l.status=="fulfilled",error:l.reason,module:l.value}]));v("external_imports_loaded",e,n)},_t=(e,t,r=t.current_module)=>{e.editor.ensure_session(r,t.files[r])},Hn=(e,t)=>{e.editor.remove_markers_of_type(t,"evaluated_ok"),e.editor.remove_markers_of_type(t,"evaluated_error")},Yt=e=>{e.editor.for_each_session((t,r)=>Hn(e,t))},Un=(e,t)=>{let r=t.current_module;Hn(e,r),Sr(t,r).forEach(n=>{e.editor.add_marker(r,n.result.ok?"evaluated_ok":"evaluated_error",n.index,n.index+n.length)})},ei=(e,t)=>{e.editor.for_each_session((r,n)=>{e.editor.remove_markers_of_type(r,"error-code"),n.clearAnnotations()}),t.parse_result.ok!=null&&(t.parse_result.ok?Object.keys(t.parse_result.modules).forEach(r=>{_t(e,t,r)}):(e.editor.for_each_session((r,n)=>{n.setAnnotations(t.parse_result.problems.filter(l=>l.module==r).map(l=>{let o=n.doc.indexToPosition(l.index);return{row:o.row,column:o.column,text:l.message,type:"error"}}))}),t.parse_result.problems.forEach(r=>{_t(e,t,r.module),e.editor.add_marker(r.module,"error-code",r.index,r.token==null?r.index+1:r.index+r.token.length)}),e.render_problems(t.parse_result.problems)))},Wn=(e,t,r)=>{_t(e,t),e.editor.switch_session(t.current_module),r!=null&&r.with_app_window&&!localStorage.onboarding_open_app_window&&e.toggle_open_app_window_tooltip(!0)},qn=(e,t,r,n)=>{if(e!=t){if(e.project_dir!=t.project_dir&&r.files.render(t),e.current_module!=t.current_module&&r.files.render_current_module(t.current_module),e.current_module!=t.current_module&&(localStorage.current_module=t.current_module,r.render_current_module(t.current_module)),e.entrypoint!=t.entrypoint&&(localStorage.entrypoint=t.entrypoint),e.html_file!=t.html_file&&(localStorage.html_file=t.html_file),e.current_module!=t.current_module&&(_t(r,t),r.editor.unembed_value_explorer(),r.editor.switch_session(t.current_module)),re(t)!=r.editor.get_cursor_position()&&n!="on_deferred_call"&&r.editor.set_cursor_position(re(t)),(e.run_state.status!=t.run_state.status||t.run_state.status==k.reload_app_window&&e.run_state.reload_counter!=t.run_state.reload_counter)&&(t.run_state.status==k.reload_app_window&&mt(t),t.run_state.status==k.load_external_imports&&Qo(t),t.run_state.status==k.eval_modules&&t.run_state.promise.then(l=>{v("eval_modules_finished",t.execution_id,l)}),r.loading_spinner.style.visibility=t.run_state.status==k.eval_modules_finished?"hidden":"initial"),e.parse_result!=t.parse_result&&ei(r,t),t.parse_result.ok?e.calltree==null||e.execution_id!=t.execution_id?t.calltree==null?(r.calltree.clear_calltree(),Yt(r),r.render_debugger_loading(t)):(r.render_debugger(t),Yt(r),Un(r,t),r.logs.rerender_logs(t,t.logs),(e.io_trace!=t.io_trace||e.rt_cxt?.io_trace_index!=t.rt_cxt.io_trace_index)&&r.render_io_trace(t)):(U(e)==null&&U(t)!=null&&r.calltree.render_deferred_calls(t),(e.calltree!=t.calltree||e.calltree_node_is_expanded!=t.calltree_node_is_expanded)&&r.calltree.render_expand_node(e,t),t.current_calltree_node!=e.current_calltree_node&&r.calltree.render_select_node(e,t),e.colored_frames!=t.colored_frames&&Un(r,t),r.logs.render_logs(t,e.logs,t.logs),(e.run_state.status!=t.run_state.status&&t.run_state.status=="eval_modules_finished"||(e.current_calltree_node!=t.current_calltree_node||e.calltree_node_is_expanded!=t.calltree_node_is_expanded)&&t.run_state.status=="eval_modules_finished")&&Je(t,r.is_focus_in_editor)):(r.calltree.clear_calltree(),Yt(r)),e.selection_state!=t.selection_state){r.editor.remove_markers_of_type(t.current_module,"selection");let l=t.selection_state?.node;l!=null&&r.editor.add_marker(t.current_module,"selection",l.index,l.index+l.length)}e.value_explorer!=t.value_explorer&&(t.value_explorer==null?r.editor.unembed_value_explorer():r.editor.embed_value_explorer(t,t.value_explorer))}},Bn={set_focus:(e,t,r)=>{r.editor.focus()},set_status:(e,[t],r)=>{r.set_status(t)},save_to_localstorage(e,[t,r]){localStorage[t]=r},write:(e,[t,r],n,l)=>{if(t==""){let o=new URL(window.location).searchParams.get("share_id");if(o==null)localStorage.code=r;else{let i="share_"+o;localStorage.code==l.files[""]&&(localStorage.code=r),localStorage[i]=r}}else e.has_file_system_access?tr(t,r):yr(t,r)}};var ut=()=>({current_module:localStorage.current_module??"",entrypoint:localStorage.entrypoint??"",html_file:localStorage.html_file??""}),vr=()=>{if(globalThis.showDirectoryPicker==null)throw new Error("Your browser is not supporting File System Access API");me(!0).then(e=>{v("load_dir",e,!0,ut())})},xr=async()=>{er(),v("load_dir",await vt,!1,ut())},Zt,W,F,Kn=async(e,t)=>{Zt=t;let r={"":localStorage.code||gr},n,l,o=await me(!1),i;if(o==null){let a=new URLSearchParams(window.location.search).get("example"),_=new URL(window.location);if(_.searchParams.delete("example"),history.replaceState(null,null,_.href),i=ye.find(c=>c.path==a),i==null){let c=await Rn();c==null?l=ut():(r={"":c},l={current_module:"",entrypoint:""})}else l={current_module:i.entrypoint,entrypoint:i.entrypoint};n={project_dir:await vt,files:r,has_file_system_access:!1}}else l=ut(),n={project_dir:o,files:r,has_file_system_access:!0};F=Zt.get_initial_state({...n,on_deferred_call:(...s)=>v("on_deferred_call",...s)},l),globalThis.__state=F,W=new ct(e,F),globalThis.__ui=W,Wn(W,F,i),ir(F)},$=()=>F,v=(e,...t)=>{e=="input"||e=="write"?console.log("exec",e):console.log("exec",e,...t);let r=e.split(".").reduce((i,s)=>i?.[s],Zt);if(r==null)throw new Error("command "+e+" + not found");let n=r(F,...t);console.log("nextstate",n);let l,o;if(n.state!=null?{state:l,effects:o}=n:(l=n,o=null),F?.current_module==null)throw console.error("command did not return state, returned",n),new Error("illegal state");qn(F,l,W,e),o!=null&&(Array.isArray(o)?o:[o]).forEach(i=>{i.type=="write"||i.type=="save_to_localstorage"?console.log("apply effect",i.type):console.log("apply effect",i.type,...i.args??[]),Bn[i.type](l,i.args,W,F)}),globalThis.__prev_state=F,globalThis.__state=l,F=l};Kn(globalThis.document.getElementById("app"),rt);})();