solve-engine 2.38.19 → 2.38.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-X2UPN2J3.js → chunk-3JSXJSMT.js} +2 -2
- package/dist/{chunk-X2UPN2J3.js.map → chunk-3JSXJSMT.js.map} +1 -1
- package/dist/{chunk-TVT3SOU5.cjs → chunk-6W3JFXPQ.cjs} +2 -2
- package/dist/{chunk-TVT3SOU5.cjs.map → chunk-6W3JFXPQ.cjs.map} +1 -1
- package/dist/{chunk-5QZQIZTS.cjs → chunk-7PUNL5CJ.cjs} +3 -3
- package/dist/{chunk-5QZQIZTS.cjs.map → chunk-7PUNL5CJ.cjs.map} +1 -1
- package/dist/{chunk-ZYITLCTW.js → chunk-BHHTXIUL.js} +2 -2
- package/dist/{chunk-ZYITLCTW.js.map → chunk-BHHTXIUL.js.map} +1 -1
- package/dist/{chunk-WR5HTFDE.cjs → chunk-EPLOL7WC.cjs} +2 -2
- package/dist/{chunk-WR5HTFDE.cjs.map → chunk-EPLOL7WC.cjs.map} +1 -1
- package/dist/{chunk-JUIHUG4M.cjs → chunk-EZ7R3ZHM.cjs} +3 -3
- package/dist/{chunk-JUIHUG4M.cjs.map → chunk-EZ7R3ZHM.cjs.map} +1 -1
- package/dist/{chunk-45J6ALYU.js → chunk-H4G3UXJV.js} +3 -3
- package/dist/{chunk-45J6ALYU.js.map → chunk-H4G3UXJV.js.map} +1 -1
- package/dist/{chunk-5MFUZDYK.cjs → chunk-HNXV35Q2.cjs} +2 -2
- package/dist/{chunk-5MFUZDYK.cjs.map → chunk-HNXV35Q2.cjs.map} +1 -1
- package/dist/{chunk-XPP5U527.cjs → chunk-I4PKEUMZ.cjs} +2 -2
- package/dist/{chunk-XPP5U527.cjs.map → chunk-I4PKEUMZ.cjs.map} +1 -1
- package/dist/{chunk-4I7XP3KF.js → chunk-JZQRUOO6.js} +2 -2
- package/dist/{chunk-4I7XP3KF.js.map → chunk-JZQRUOO6.js.map} +1 -1
- package/dist/{chunk-NN6Q5S4I.cjs → chunk-KZPA4DUF.cjs} +3 -3
- package/dist/{chunk-NN6Q5S4I.cjs.map → chunk-KZPA4DUF.cjs.map} +1 -1
- package/dist/{chunk-VSYQSSN6.js → chunk-MXMMDSX4.js} +3 -3
- package/dist/{chunk-VSYQSSN6.js.map → chunk-MXMMDSX4.js.map} +1 -1
- package/dist/{chunk-P3ODL6WX.js → chunk-RTEWTZ6I.js} +3 -3
- package/dist/{chunk-P3ODL6WX.js.map → chunk-RTEWTZ6I.js.map} +1 -1
- package/dist/{chunk-XDL542DB.js → chunk-SIUHB77U.js} +2 -2
- package/dist/{chunk-XDL542DB.js.map → chunk-SIUHB77U.js.map} +1 -1
- package/dist/{chunk-SSS3ZMKX.js → chunk-TFZNEEJR.js} +3 -3
- package/dist/{chunk-SSS3ZMKX.js.map → chunk-TFZNEEJR.js.map} +1 -1
- package/dist/{chunk-U45F6L2L.cjs → chunk-UOLCBH37.cjs} +4 -4
- package/dist/{chunk-U45F6L2L.cjs.map → chunk-UOLCBH37.cjs.map} +1 -1
- package/dist/{chunk-5N4XDULO.cjs → chunk-Z4MIX43O.cjs} +2 -2
- package/dist/chunk-Z4MIX43O.cjs.map +1 -0
- package/dist/{chunk-IHPYXJIY.js → chunk-ZSFOIBIH.js} +2 -2
- package/dist/chunk-ZSFOIBIH.js.map +1 -0
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/engine.cjs +1 -1
- package/dist/engine.js +1 -1
- package/dist/engine.worker.cjs +1 -1
- package/dist/engine.worker.js +1 -1
- package/dist/format.cjs +1 -1
- package/dist/format.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/packages.cjs +1 -1
- package/dist/packages.js +1 -1
- package/dist/testing.cjs +2 -2
- package/dist/testing.js +1 -1
- package/dist/vm.cjs +1 -1
- package/dist/vm.js +1 -1
- package/dist/worker.cjs +2 -2
- package/dist/worker.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-5N4XDULO.cjs.map +0 -1
- package/dist/chunk-IHPYXJIY.js.map +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {a}from'./chunk-RAF57WYO.js';import {m,n,h as h$1}from'./chunk-
|
|
2
|
-
`),i=new Array(n.length);for(let s=0;s<n.length;s++){let r=this.nextLineId++;i[s]=r,this.lines.set(r,{lineId:r,textHash:a(n[s]),text:n[s],expressions:[],bytecodes:[],reads:[],writes:[],results:[],result:null,dirty:true,isVariableDef:false,isEmpty:n[s].trim().length===0,inlineSolveCount:0});}this.orderTree.replaceAll(i);for(let s of i)this.dirtyLineIds.add(s);}applyChanges(e){let t=[],n=[],i=[...e].sort((s,r)=>r.startLine-s.startLine);for(let s of i){let r=s.startLine-1,l=[];for(let o of s.insertLines){let c=this.nextLineId++;l.push(c),t.push(c),this.lines.set(c,{lineId:c,textHash:a(o),text:o,expressions:[],bytecodes:[],reads:[],writes:[],results:[],result:null,dirty:true,isVariableDef:false,isEmpty:o.trim().length===0,inlineSolveCount:0});}for(let o of l)this.dirtyLineIds.add(o);if(this.tagIndex!==null)for(let o of l)this.indexTags(o,this.lines.get(o).text);let u=this.orderTree.spliceAt(r,s.deleteCount,l);for(let o of u)n.push(o),this.tagIndex!==null&&this.unindexTags(o,this.lines.get(o)?.text??""),this.lines.delete(o),this.dirtyLineIds.delete(o);}return this._positionCache=null,{inserted:t,removed:n}}insertLines(e,t){let n={startLine:e,deleteCount:0,insertLines:t};return this.applyChanges([n]).inserted}deleteLines(e,t){let n={startLine:e,deleteCount:t-e+1,insertLines:[]};return this.applyChanges([n]).removed}editLine(e,t){let n=this.getLineAt(e);if(!n)return false;let i=a(t);return i===n.textHash?false:(this.tagIndex!==null&&(this.unindexTags(n.lineId,n.text),this.indexTags(n.lineId,t)),n.text=t,n.textHash=i,n.expressions=[],n.bytecodes=[],n.results=[],n.result=null,n.inlineSolveCount=0,n.dirty=true,this.dirtyLineIds.add(n.lineId),n.isEmpty=t.trim().length===0,true)}linesCarryingTag(e){let t=this.ensureTagIndex().get(e.toLowerCase());if(t===void 0||t.size===0)return [];let n=[];for(let i of t){let s=this.getLinePosition(i);s>0&&n.push(s);}return n.sort((i,s)=>i-s),n}ensureTagIndex(){if(this.tagIndex!==null)return this.tagIndex;this.tagIndex=new Map;for(let e of this.lines.values())this.indexTags(e.lineId,e.text);return this.tagIndex}indexTags(e,t){if(!(t.indexOf("#")<0))for(let n of b$2(t)){let i=this.tagIndex.get(n);i===void 0?this.tagIndex.set(n,new Set([e])):i.add(e);}}unindexTags(e,t){if(!(t.indexOf("#")<0))for(let n of b$2(t)){let i=this.tagIndex.get(n);i!==void 0&&(i.delete(e),i.size===0&&this.tagIndex.delete(n));}}getLineAt(e){let t=e-1,n=this.orderTree.getAt(t);if(n!==void 0)return this.lines.get(n)}getLinePosition(e){if(this._positionCache)return this._positionCache.get(e)??-1;this._positionCache=new Map;let t=1;for(let n of this.orderTree)this._positionCache.set(n,t++);return this._positionCache.get(e)??-1}getVisibleLines(e,t){let n=this.orderTree.getRange(e-1,t-1),i=[];for(let s of n){let r=this.lines.get(s);r&&i.push(r);}return i}getLineStatesInRange(e,t){let n=this.orderTree.getRange(e-1,t-1),i=new Array(n.length);for(let s=0;s<n.length;s++)i[s]=this.lines.get(n[s]);return i}getAllLines(){return this.getVisibleLines(1,this.lineCount)}getLineById(e){return this.lines.get(e)}getDirtyLines(){let e=[];for(let t of this.lines.values())t.dirty&&e.push(t);return e}hasAnyDirtyLineBefore(e){for(let t of this.dirtyLineIds){let n=this.getLinePosition(t);if(n>=1&&n<e)return true}return false}hasAnyDirtyVariableDefLineBefore(e){for(let t of this.dirtyLineIds){let n=this.lines.get(t);if(!n||!n.isVariableDef)continue;let i=this.getLinePosition(t);if(i>=1&&i<e)return true}return false}get dirtyCount(){return this.dirtyLineIds.size}isBytecodeValid(e,t){let n=this.lines.get(e);return n!==void 0&&n.textHash===t}forgetResult(e){let t=this.lines.get(e);t&&(t.result=null,t.results=[]);}markClean(e){let t=this.lines.get(e);t&&(t.dirty=false,this.dirtyLineIds.delete(e));}markDirtyByLineNumber(e){let t=this.getLineAt(e);t&&(t.dirty=true,this.dirtyLineIds.add(t.lineId));}markDirty(e){let t=this.lines.get(e);t&&(t.dirty=true,this.dirtyLineIds.add(e));}invalidateAll(){for(let e of this.lines.values())e.dirty=true;this.dirtyLineIds=new Set(this.lines.keys());}updateLineResult(e,t,n,i,s,r,l,u=0){let o=this.lines.get(e);o&&(o.results=t,o.result=t[0]?.[0]??null,o.bytecodes=n,o.expressions=i,o.reads=s,o.writes=r,o.isVariableDef=l,o.inlineSolveCount=u,o.dirty=false,this.dirtyLineIds.delete(e));}updateLineCompiled(e,t,n,i,s,r,l=0){let u=this.lines.get(e);u&&(u.expressions=t,u.bytecodes=n,u.reads=i,u.writes=s,u.isVariableDef=r,u.inlineSolveCount=l);}get lineCount(){return this.orderTree.length}get isEmpty(){return this.orderTree.isEmpty}*[Symbol.iterator](){for(let e of this.orderTree){let t=this.lines.get(e);t&&(yield t);}}clear(){this.lines.clear(),this.orderTree.clear(),this._positionCache=null,this.nextLineId=1,this.tagIndex=null;}toJSON(){return {lineCount:this.lineCount,lines:this.getAllLines().map(e=>({lineId:e.lineId,text:e.text.substring(0,80),textHash:e.textHash,dirty:e.dirty,isVariableDef:e.isVariableDef,isEmpty:e.isEmpty,hasBytecode:e.bytecodes.length>0,hasResult:e.results.length>0,inlineSolveCount:e.inlineSolveCount,reads:e.reads,writes:e.writes}))}}};var A=class{constructor(){this.worker=null;this.nextId=1;this.pending=new Map;}ensureWorker(){if(this.worker)return this.worker;let e=h$1();if(e===null)throw new Error("no engine worker factory registered, so compilation stays on the main thread");return this.worker=e(),this.worker.onmessage=t=>{let n=t.data;if(!n||n.type!=="COMPILE_RESULT")return;let i=this.pending.get(n.id);if(!i)return;this.pending.delete(n.id);let s=[];for(let r of n.results)s.push(this.reconstructResult(r));i.resolve(s);},this.worker.onerror=t=>{for(let[n,i]of this.pending)i.reject(new Error(`Compilation worker error: ${t.message}`)),this.pending.delete(n);},this.worker}async compileBatch(e){if(e.length===0)return [];let t=this.ensureWorker(),n=this.nextId++;return new Promise((i,s)=>{this.pending.set(n,{resolve:i,reject:s}),t.postMessage({type:"COMPILE_BATCH",id:n,items:e});})}storeResults(e,t){let n=new Map;for(let r of e){if(r.error)continue;let l=t.getLineById(r.lineId);if(!l||l.textHash!==r.compiledAgainstHash)continue;let u=n.get(r.lineId);u||(u={bytecodes:[],reads:new Set,writes:new Set,isVariableDef:false,expressions:l.expressions.length>0?[...l.expressions]:[],textHash:r.compiledAgainstHash},n.set(r.lineId,u)),u.bytecodes.push(r.program);for(let o of r.reads)u.reads.add(o);for(let o of r.writes)u.writes.add(o);r.isVariableDef&&(u.isVariableDef=true);}let s=0;for(let[r,l]of n){if(l.bytecodes.length===0)continue;let o=t.getLineById(r)?.inlineSolveCount??0;t.updateLineCompiled(r,l.expressions,l.bytecodes,[...l.reads],[...l.writes],l.isVariableDef,o),s+=l.bytecodes.length;}return s}terminate(){this.worker&&(this.worker.terminate(),this.worker=null,this.pending.clear());}get isActive(){return this.worker!==null}reconstructResult(e){if(e.error)return {lineId:e.lineId,compiledAgainstHash:e.compiledAgainstHash,program:{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},reads:[],writes:[],isVariableDef:false,error:e.error};let t=e.opcodesLength>0?new Uint8Array(e.opcodesBuffer,0,e.opcodesLength):new Uint8Array(0),n=e.numbersLength>0?new Float64Array(e.numbersBuffer,0,e.numbersLength):new Float64Array(0),i={opcodes:t,numbers:n,strings:e.strings,hasAsync:false};return {lineId:e.lineId,compiledAgainstHash:e.compiledAgainstHash,program:i,reads:e.reads,writes:e.writes,isVariableDef:e.isVariableDef,error:null}}};var G=128,k=3,te=6,ne=2,ie=k,W=class a{constructor(){this.lastViewportStart=null;this.savedDirection=null;this.pageAccess=new Map;this.accessSeq=0;}static pageForLine(e){return Math.floor((e-1)/G)}static pageRange(e,t){return {startLine:e*G+1,endLine:Math.min((e+1)*G,t)}}detectDirection(e){return this.lastViewportStart===null?null:e.startLine>this.lastViewportStart?"down":e.startLine<this.lastViewportStart?"up":null}maintainAfterEval(e,t){this.savedDirection=this.detectDirection(e),this.lastViewportStart=e.startLine;let n=t.lineCount,i=a.pageForLine(e.startLine),s=a.pageForLine(e.endLine),r=a.pageForLine(n),l=Math.max(0,i-k),u=Math.min(r,s+k),o=Math.max(0,i-te),c=Math.min(r,s+te);for(let p=l;p<=u;p++)this.touchPage(p);for(let p=o;p<=c;p++)p>=l&&p<=u||this.evictPageResults(p,t,n);let d=o-1,h=Math.max(0,d-ie+1);for(let p=h;p<=d;p++)this.evictPageBytecode(p,t,n);let g=c+1,f=Math.min(r,g+ie-1);for(let p=g;p<=f;p++)this.evictPageBytecode(p,t,n);}getPreloadTargets(e,t){let n=this.savedDirection;if(!n)return [];let i=[],s=a.pageForLine(e.endLine),r=a.pageForLine(e.startLine),l=a.pageForLine(t.lineCount),u=[];if(n==="down"){let o=s+k+1,c=Math.min(o+ne-1,l);for(let d=o;d<=c&&d<=l;d++)u.push(d);}else {let o=r-k-1;for(let c=o;c>o-ne&&c>=0;c--)u.push(c);}for(let o of u){let c=a.pageRange(o,t.lineCount);for(let d=c.startLine;d<=c.endLine;d++){let h=t.getLineAt(d);if(h&&h.dirty&&!(h.bytecodes.length>0&&!h.isVariableDef)&&!h.isEmpty)if(h.expressions.length>0)for(let g of h.expressions)g.trim()&&i.push({lineId:h.lineId,expression:g,textHash:h.textHash});else {let g=c$1.findInlineSolves(h.text);if(g.length>0)for(let f of g)f.expression.trim()&&i.push({lineId:h.lineId,expression:f.expression,textHash:h.textHash});else {let f=h.text.trim();f&&i.push({lineId:h.lineId,expression:f,textHash:h.textHash});}}}}return i}clear(){this.pageAccess.clear(),this.accessSeq=0,this.lastViewportStart=null,this.savedDirection=null;}touchPage(e){this.pageAccess.set(e,++this.accessSeq);}evictPageResults(e,t,n){let i=a.pageRange(e,n);for(let s=i.startLine;s<=i.endLine;s++){let r=t.getLineAt(s);r&&!r.isVariableDef&&r.results.length>0&&(r.results=[],r.result=null);}}evictPageBytecode(e,t,n){let i=a.pageRange(e,n);for(let s=i.startLine;s<=i.endLine;s++){let r=t.getLineAt(s);!r||r.isVariableDef||(r.bytecodes.length>0||r.results.length>0)&&(r.bytecodes=[],r.results=[],r.result=null,t.markDirty(r.lineId));}}};var re=(i=>(i[i.Tier1=1]="Tier1",i[i.Tier2=2]="Tier2",i[i.Tier3=3]="Tier3",i[i.Skipped=0]="Skipped",i))(re||{}),w=class{constructor(e,t,n){this.compilationWorker=null;this.globalUnsubscribe=null;this.doc=e,this.engine=t,this.dag=t.getDag(),this.checkpointer=n??new a$1(t.getVM()),this.pageManager=new W,this.engine.getBatcher().checkpointer=this.checkpointer,this.engine.setDocumentModel(this.doc),this.globalUnsubscribe=N.subscribe(i=>{for(let s of this.dag.getAffectedLines(O$1(i)))this.doc.markDirtyByLineNumber(s);});}evaluate(e,t){this.engine.setKeystrokeSignal(t??null),h();try{this.reseedAccumulators();let n=this.engine.userUnitNames(),i=[],s=new Map,r={tier1:0,tier2:0,tier3:0,skipped:0},l=this.doc.lineCount,u=Math.min(e.endLine,l),o=this.doc.getLineStatesInRange(1,u);for(let d=1;d<=u;d++){let h=o[d-1];if(!h){r.skipped++;continue}let g=d>=e.startLine&&d<=e.endLine,f=this.evaluateSingleLine(h,d,g);i.push(f),f.tier===1?r.tier1++:f.tier===2?r.tier2++:f.tier===3?r.tier3++:r.skipped++,f.results&&g&&s.set(d,f.results.flat());}this.pageManager.maintainAfterEval(e,this.doc),this.engine.settleOrphanedNames();let c=new Set(this.engine.userUnitNames());return n.some(d=>!c.has(d))&&this.engine.invalidateForRemovedUserUnits(),{lines:i,resultMap:s,tierCounts:r}}finally{this.engine.setKeystrokeSignal(null),i();}}backgroundCompile(e){let t=[],n=this.doc.lineCount,i=e.endLine+1;for(let s=i;s<=n;s++){let r=this.doc.getLineAt(s);if(!r||!r.dirty||r.bytecodes.length>0&&!r.isVariableDef)continue;let l=this.evaluateSingleLine(r,s,false);t.push(l);}return t}dispatchBackgroundCompiles(e){let t=this.collectInvisibleCompileTargets(e);t.length!==0&&(this.compilationWorker||(this.compilationWorker=new A),this.compilationWorker.compileBatch(t).then(n=>{this.compilationWorker.storeResults(n,this.doc);}).catch(n=>{}));}terminateWorker(){this.compilationWorker&&(this.compilationWorker.terminate(),this.compilationWorker=null),this.globalUnsubscribe&&(this.globalUnsubscribe(),this.globalUnsubscribe=null);}getDoc(){return this.doc}evaluateAll(e){let t={startLine:1,endLine:this.doc.lineCount};return this.evaluate(t,e)}setViewport(e,t){if(this.engine.setKeystrokeSignal(t??null),e.startLine>1&&this.hasDirtyLinesBefore(e.startLine))return this.checkpointer?.clear(),this.evaluate(e,t);this.reseedAccumulators(),this.pageManager.maintainAfterEval(e,this.doc),this.preloadNextPages(e),this.restoreTo(e.startLine-1),h();try{return this.collectEvalResults(e.startLine,e.endLine)}finally{this.engine.setKeystrokeSignal(null),i();}}applyTransaction(e){let t=new Set;for(let r of e)for(let l=0;l<r.deleteCount;l++){let u=r.startLine+l,o=this.dag.getWrites(u);for(let c of o)t.add(c);this.undefineOrphans(this.dag.removeLine(u)),this.engine.undefineUserUnitsFrom(this.doc.getLineAt(u)?.lineId??-1)&&this.engine.invalidateForRemovedUserUnits(),this.engine.getLineCache().removeAllForLine(u);}let n=new Set,i=new Set;for(let r of this.dag.linesReadingAPosition()){let l=this.doc.getLineAt(r);l&&(n.add(l.lineId),i.add(l.lineId));}for(let r of t){let l=this.dag.getAffectedLines(r);for(let u of l){let o=this.doc.getLineAt(u);o&&n.add(o.lineId);}}let s=this.doc.applyChanges(e);this.checkpointer?.clear();for(let r of n)this.doc.markDirty(r);for(let r of i)this.doc.forgetResult(r);return this.dag.clear(),{inserted:s.inserted,removed:s.removed}}reseedAccumulators(){let e=this.engine.resetAccumulators();if(e.size===0)return;let t=this.doc.lineCount;for(let n=1;n<=t;n++){let i=this.doc.getLineAt(n);if(!(i===void 0||i.writes.length===0)){for(let s of i.writes)if(e.has(s)){this.doc.markDirtyByLineNumber(n);break}}}}collectEvalResults(e,t){let n=[],i=new Map,s={tier1:0,tier2:0,tier3:0,skipped:0},r=this.doc.lineCount,l=Math.min(t,r);for(let u=e;u<=l;u++){let o=this.doc.getLineAt(u);if(!o)continue;let c=this.evaluateSingleLine(o,u,true);n.push(c),c.tier===1?s.tier1++:c.tier===2?s.tier2++:c.tier===3?s.tier3++:s.skipped++,c.results&&i.set(u,c.results.flat());}return {lines:n,resultMap:i,tierCounts:s}}hasDirtyLinesBefore(e){return this.doc.hasAnyDirtyVariableDefLineBefore(e)}evaluateSingleLine(e,t,n){let i={lineId:e.lineId,lineNumber:t};if(!e.dirty&&!n)return {...i,tier:0,result:null,error:null};if(e.isEmpty||m(e.text))return this.deregisterIfDirty(e,t),e.isEmpty=true,this.doc.markClean(e.lineId),{...i,tier:0,result:null,error:null};let{expressions:s,inlineSolveCount:r}=this.extractExpressions(e);return s.length===0?(this.deregisterIfDirty(e,t),e.isEmpty=true,this.doc.markClean(e.lineId),{...i,tier:0,result:null,error:null}):e.dirty?n?this.evaluateTier1(e,t,s,r,i):e.bytecodes.length>0&&e.bytecodes.length===s.length&&!e.isVariableDef?{...i,tier:0,result:null,error:null}:this.evaluateTier3(e,t,s,r,i):n&&e.bytecodes.length>0?this.evaluateTier2(e,t,i):{...i,tier:0,result:null,error:null}}deregisterIfDirty(e,t){e.dirty&&(e.reads=[],e.writes=[],this.registerWithTags(t,[],[]),this.engine.undefineUserUnitsFrom(e.lineId));}registerWithTags(e,t,n){let i=this.doc.getLineAt(e)?.text??"",s=a$2(i,t,n);this.undefineOrphans(this.dag.registerLine(e,s.reads,s.writes));}undefineOrphans(e){this.engine.forgetOrphanedNames(e);}evaluateTier1(e,t,n,i,s){this.engine.undefineUserUnitsFrom(e.lineId);let r=[],l=[],u=new Set,o=new Set,c=false,d=null,h=null,g=false,f=false;for(let y of n){if(!y.trim())continue;let b=null,L;try{let m=this.engine.evaluateLine(t,y);b=[m],d=m,L=this.engine.getLineCache().get(t,y);}catch(m){let x=m instanceof Error?m.message:String(m);h||(h=x),g=true,b=null;}if(b&&b.some(m=>m.type===12)&&(f=true),b?r.push(b):r.push([P$1("eval_failed",h??"unknown error")]),L){l.push(L.bytecode);for(let m of L.readVariables)u.add(m);L.writeVariable&&(o.add(L.writeVariable),c=true);}else try{let{program:m,reads:x,writes:I}=this.engine.compileExpression(y);l.push(m);for(let E of x)u.add(E);for(let E of I)o.add(E);I.length>0&&(c=!0);}catch(m){if(l.push({opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false}),m instanceof b$3&&m.context){let x=m.context.reads,I=m.context.writes;if(Array.isArray(x))for(let E of x)u.add(E);if(Array.isArray(I))for(let E of I)o.add(E);}}}let p=[...u],v=[...o];return g||f?(this.doc.updateLineCompiled(e.lineId,n,l,p,v,c,i),e.results=r,e.result=r[0]?.[0]??null,e.inlineSolveCount=i,e.expressions=n):this.doc.updateLineResult(e.lineId,r,l,n,p,v,c,i),this.registerWithTags(t,p,v),this.checkpointer&&v.length>0&&!g&&!f&&this.checkpointer.snapshot(t,e.lineId,v),{...s,tier:1,result:d,results:r,error:h}}evaluateTier2(e,t,n){if(e.bytecodes.length===0)return {...n,tier:0,result:null,error:null};let i=[],s=null,r=null,l=false;for(let u of e.bytecodes)if(u.opcodes.length!==0)try{let o=this.engine.executeCached(u,t);s=o,i.push([o]);}catch(o){let c=o instanceof Error?o.message:String(o);r||(r=c),l=true,i.push([P$1("exec_failed",c)]);}return this.registerWithTags(t,e.reads,e.writes),i.length>0?(e.results=i,e.result=i[0][0]??null):e.result!==null&&j$1()&&(e.results=e.results.map(u=>u.map(k$1)),e.result=e.results[0]?.[0]??k$1(e.result)),l&&this.doc.markDirty(e.lineId),this.checkpointer&&e.writes.length>0&&!l&&this.checkpointer.snapshot(t,e.lineId,e.writes),{...n,tier:2,result:i.length>0?s:e.result,results:i.length>0?i:e.results,error:r}}evaluateTier3(e,t,n,i,s){let r=[],l=new Set,u=new Set,o=false,c=null,d=null,h=false,g=false;for(let v of n)if(v.trim())try{let{program:y,reads:b,writes:L}=this.engine.compileExpression(v);r.push(y);for(let m of b)l.add(m);for(let m of L)u.add(m);L.length>0&&(o=!0),L.length>0&&y.opcodes.length>0&&(c=this.engine.executeCached(y,t),c&&c.type===12&&(g=!0));}catch(y){let b=y instanceof Error?y.message:String(y);d||(d=b),h=true,r.push({opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false});}let f=[...l],p=[...u];return this.doc.updateLineCompiled(e.lineId,n,r,f,p,o,i),this.registerWithTags(t,f,p),o&&c&&!h&&!g&&(e.results=[[c]],e.result=c,this.doc.markClean(e.lineId),this.checkpointer&&this.checkpointer.snapshot(t,e.lineId,p)),{...s,tier:3,result:c,results:o&&c&&!h&&!g?[[c]]:void 0,error:d}}restoreTo(e){this.checkpointer&&this.checkpointer.restoreTo(e);}getCheckpointer(){return this.checkpointer}getPageManager(){return this.pageManager}preloadNextPages(e){let t=this.pageManager.getPreloadTargets(e,this.doc);t.length!==0&&(this.compilationWorker||(this.compilationWorker=new A),this.compilationWorker.compileBatch(t).then(n=>{this.compilationWorker.storeResults(n,this.doc);}).catch(n=>{}));}collectInvisibleCompileTargets(e){let t=[],n=this.doc.lineCount,i=e.endLine+1;for(let s=i;s<=n;s++){let r=this.doc.getLineAt(s);if(!r||!r.dirty||r.bytecodes.length>0&&!r.isVariableDef||r.isEmpty||m(r.text))continue;let{expressions:l}=this.extractExpressions(r);if(l.length!==0)for(let u of l)u.trim()&&t.push({lineId:r.lineId,expression:u,textHash:r.textHash});}return t}extractExpressions(e){if(e.expressions.length>0)return {expressions:e.expressions,inlineSolveCount:e.inlineSolveCount};let t=e.text.trim();if(t.length===0)return {expressions:[],inlineSolveCount:0};let n=c$1.findInlineSolves(e.text);return n.length>0?{expressions:n.map(i=>i.expression),inlineSolveCount:n.length}:{expressions:[t],inlineSolveCount:0}}};function se(a){return typeof a.unit=="string"?a.unit:String(a.value)}function ue(a,e,t={inputType:"markdown"}){let n$1=a.getDocumentModel(),i=new R;i.setDocument(e);let s=new w(i,a,new a$1(a.getVM()));try{let r=i.lineCount;s.evaluate({startLine:1,endLine:r});let l=[],u=[],o=0;for(let c=1;c<=r;c++){let d=i.getLineAt(c),h=d.text,g=o,f=o+h.length;o=f+1;let p=d.inlineSolveCount>0,v=[],y=null,b=null;d.isEmpty||(p?v=n(h,c).map((L,m)=>{let x=d.results[m]?.[0]??null;if(x&&x.type===13){let I=se(x);return u.push(`Line ${c}: ${I}`),{...L,result:null,error:I}}return {...L,result:x,error:null}}):(y=d.expressions[0]??null,b=d.result??null,b&&b.type===13&&u.push(`Line ${c}: ${se(b)}`))),l.push({lineNumber:c,text:h,startPosition:g,endPosition:f,isEmpty:d.isEmpty,hasInlineSolves:p,inlineSolves:v,expression:y,error:null,result:b});}return {lines:l,totalLines:r,errors:u}}finally{s.terminateWorker(),a.setDocumentModel(n$1);}}export{R as a,re as b,w as c,ue as d};//# sourceMappingURL=chunk-VSYQSSN6.js.map
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a}from'./chunk-RAF57WYO.js';import {m,n,h as h$1}from'./chunk-RTEWTZ6I.js';import {a as a$1}from'./chunk-2YHOWQ43.js';import {b as b$2,a as a$2}from'./chunk-3JSXJSMT.js';import {b as b$1}from'./chunk-76F3LCIL.js';import {N,O as O$1}from'./chunk-JZQRUOO6.js';import {h,i,P as P$1,j as j$1,k as k$1}from'./chunk-A34R65WT.js';import {b}from'./chunk-BHHTXIUL.js';import {c as c$1}from'./chunk-6NL7RBAG.js';import {c,b as b$3}from'./chunk-6G2NES2I.js';var P=class{constructor(){this.root=null;}get length(){return this.root?this.root.size:0}get isEmpty(){return this.root===null}getAt(e){if(!(e<0||e>=(this.root?.size??0)))return this.nodeAt(this.root,e).lineId}insertAt(e,t){let[n,i]=C(this.root,e);this.root=S(S(n,oe(t)),i);}deleteAt(e){if(e<0||e>=(this.root?.size??0))return;let[t,n]=C(this.root,e),[i,s]=C(n,1),r=i?i.lineId:void 0;return this.root=S(t,s),r}spliceAt(e,t,n){let i=Math.max(0,e),s=Math.min(Math.max(0,t),(this.root?.size??0)-i),[r,l]=C(this.root,i),[u,o]=C(l,s),c=le(u),d=O(n,0,n.length);return this.root=S(S(r,d),o),c}replaceAll(e){this.root=O(e,0,e.length);}getRange(e,t){let n=Math.max(0,e),i=Math.min((this.root?.size??0)-1,t);if(n>i)return [];let s=[];return this.collectRange(this.root,n,i,0,s),s}clear(){this.root=null;}*[Symbol.iterator](){yield*this.inOrder(this.root);}*inOrder(e){e&&(yield*this.inOrder(e.left),yield e.lineId,yield*this.inOrder(e.right));}nodeAt(e,t){let n=e.left?e.left.size:0;return t<n?this.nodeAt(e.left,t):t===n?e:this.nodeAt(e.right,t-n-1)}collectRange(e,t,n,i,s){if(!e)return;let r=e.left?e.left.size:0,l=i+r;l>t&&e.left&&this.collectRange(e.left,t,n,i,s),l>=t&&l<=n&&s.push(e.lineId),l<n&&e.right&&this.collectRange(e.right,t,n,l+1,s);}};function oe(a){return {lineId:a,size:1,priority:Math.random(),left:null,right:null}}function B(a){a.size=1+(a.left?a.left.size:0)+(a.right?a.right.size:0);}function S(a,e){return a?e?a.priority>e.priority?(a.right=S(a.right,e),B(a),a):(e.left=S(a,e.left),B(e),e):a:e}function C(a,e){if(!a)return [null,null];let t=a.left?a.left.size:0;if(e<=t){let[n,i]=C(a.left,e);return a.left=i,B(a),[n,a]}else {let[n,i]=C(a.right,e-t-1);return a.right=n,B(a),[a,i]}}function le(a){let e=[];return j(a,e),e}function j(a,e){a&&(j(a.left,e),e.push(a.lineId),j(a.right,e));}function O(a,e,t){if(e>=t)return null;let n=Math.floor((e+t)/2),i=ae(a[n]);return {lineId:a[n],size:t-e,priority:i,left:O(a,e,n),right:O(a,n+1,t)}}function ae(a){let e=a+2654435769|0;return e=Math.imul(e>>>16^e,73244475),e=Math.imul(e>>>16^e,73244475),e=(e>>>16^e)>>>0,e/4294967296}var R=class{constructor(e=b.performance.maxDocumentLines){this.lines=new Map;this.orderTree=new P;this.nextLineId=1;this._positionCache=null;this.dirtyLineIds=new Set;this.tagIndex=null;this.maxLines=e;}setDocument(e){if(b$1(e,this.maxLines)>this.maxLines)throw c.execution("DOCUMENT_TOO_LARGE",`This document has more than ${this.maxLines.toLocaleString("en-US")} lines, which is the most the engine will hold at once`,{maxLines:this.maxLines});this.lines.clear(),this.orderTree.clear(),this._positionCache=null,this.dirtyLineIds.clear(),this.nextLineId=1,this.tagIndex=null;let n=e.split(`
|
|
2
|
+
`),i=new Array(n.length);for(let s=0;s<n.length;s++){let r=this.nextLineId++;i[s]=r,this.lines.set(r,{lineId:r,textHash:a(n[s]),text:n[s],expressions:[],bytecodes:[],reads:[],writes:[],results:[],result:null,dirty:true,isVariableDef:false,isEmpty:n[s].trim().length===0,inlineSolveCount:0});}this.orderTree.replaceAll(i);for(let s of i)this.dirtyLineIds.add(s);}applyChanges(e){let t=[],n=[],i=[...e].sort((s,r)=>r.startLine-s.startLine);for(let s of i){let r=s.startLine-1,l=[];for(let o of s.insertLines){let c=this.nextLineId++;l.push(c),t.push(c),this.lines.set(c,{lineId:c,textHash:a(o),text:o,expressions:[],bytecodes:[],reads:[],writes:[],results:[],result:null,dirty:true,isVariableDef:false,isEmpty:o.trim().length===0,inlineSolveCount:0});}for(let o of l)this.dirtyLineIds.add(o);if(this.tagIndex!==null)for(let o of l)this.indexTags(o,this.lines.get(o).text);let u=this.orderTree.spliceAt(r,s.deleteCount,l);for(let o of u)n.push(o),this.tagIndex!==null&&this.unindexTags(o,this.lines.get(o)?.text??""),this.lines.delete(o),this.dirtyLineIds.delete(o);}return this._positionCache=null,{inserted:t,removed:n}}insertLines(e,t){let n={startLine:e,deleteCount:0,insertLines:t};return this.applyChanges([n]).inserted}deleteLines(e,t){let n={startLine:e,deleteCount:t-e+1,insertLines:[]};return this.applyChanges([n]).removed}editLine(e,t){let n=this.getLineAt(e);if(!n)return false;let i=a(t);return i===n.textHash?false:(this.tagIndex!==null&&(this.unindexTags(n.lineId,n.text),this.indexTags(n.lineId,t)),n.text=t,n.textHash=i,n.expressions=[],n.bytecodes=[],n.results=[],n.result=null,n.inlineSolveCount=0,n.dirty=true,this.dirtyLineIds.add(n.lineId),n.isEmpty=t.trim().length===0,true)}linesCarryingTag(e){let t=this.ensureTagIndex().get(e.toLowerCase());if(t===void 0||t.size===0)return [];let n=[];for(let i of t){let s=this.getLinePosition(i);s>0&&n.push(s);}return n.sort((i,s)=>i-s),n}ensureTagIndex(){if(this.tagIndex!==null)return this.tagIndex;this.tagIndex=new Map;for(let e of this.lines.values())this.indexTags(e.lineId,e.text);return this.tagIndex}indexTags(e,t){if(!(t.indexOf("#")<0))for(let n of b$2(t)){let i=this.tagIndex.get(n);i===void 0?this.tagIndex.set(n,new Set([e])):i.add(e);}}unindexTags(e,t){if(!(t.indexOf("#")<0))for(let n of b$2(t)){let i=this.tagIndex.get(n);i!==void 0&&(i.delete(e),i.size===0&&this.tagIndex.delete(n));}}getLineAt(e){let t=e-1,n=this.orderTree.getAt(t);if(n!==void 0)return this.lines.get(n)}getLinePosition(e){if(this._positionCache)return this._positionCache.get(e)??-1;this._positionCache=new Map;let t=1;for(let n of this.orderTree)this._positionCache.set(n,t++);return this._positionCache.get(e)??-1}getVisibleLines(e,t){let n=this.orderTree.getRange(e-1,t-1),i=[];for(let s of n){let r=this.lines.get(s);r&&i.push(r);}return i}getLineStatesInRange(e,t){let n=this.orderTree.getRange(e-1,t-1),i=new Array(n.length);for(let s=0;s<n.length;s++)i[s]=this.lines.get(n[s]);return i}getAllLines(){return this.getVisibleLines(1,this.lineCount)}getLineById(e){return this.lines.get(e)}getDirtyLines(){let e=[];for(let t of this.lines.values())t.dirty&&e.push(t);return e}hasAnyDirtyLineBefore(e){for(let t of this.dirtyLineIds){let n=this.getLinePosition(t);if(n>=1&&n<e)return true}return false}hasAnyDirtyVariableDefLineBefore(e){for(let t of this.dirtyLineIds){let n=this.lines.get(t);if(!n||!n.isVariableDef)continue;let i=this.getLinePosition(t);if(i>=1&&i<e)return true}return false}get dirtyCount(){return this.dirtyLineIds.size}isBytecodeValid(e,t){let n=this.lines.get(e);return n!==void 0&&n.textHash===t}forgetResult(e){let t=this.lines.get(e);t&&(t.result=null,t.results=[]);}markClean(e){let t=this.lines.get(e);t&&(t.dirty=false,this.dirtyLineIds.delete(e));}markDirtyByLineNumber(e){let t=this.getLineAt(e);t&&(t.dirty=true,this.dirtyLineIds.add(t.lineId));}markDirty(e){let t=this.lines.get(e);t&&(t.dirty=true,this.dirtyLineIds.add(e));}invalidateAll(){for(let e of this.lines.values())e.dirty=true;this.dirtyLineIds=new Set(this.lines.keys());}updateLineResult(e,t,n,i,s,r,l,u=0){let o=this.lines.get(e);o&&(o.results=t,o.result=t[0]?.[0]??null,o.bytecodes=n,o.expressions=i,o.reads=s,o.writes=r,o.isVariableDef=l,o.inlineSolveCount=u,o.dirty=false,this.dirtyLineIds.delete(e));}updateLineCompiled(e,t,n,i,s,r,l=0){let u=this.lines.get(e);u&&(u.expressions=t,u.bytecodes=n,u.reads=i,u.writes=s,u.isVariableDef=r,u.inlineSolveCount=l);}get lineCount(){return this.orderTree.length}get isEmpty(){return this.orderTree.isEmpty}*[Symbol.iterator](){for(let e of this.orderTree){let t=this.lines.get(e);t&&(yield t);}}clear(){this.lines.clear(),this.orderTree.clear(),this._positionCache=null,this.nextLineId=1,this.tagIndex=null;}toJSON(){return {lineCount:this.lineCount,lines:this.getAllLines().map(e=>({lineId:e.lineId,text:e.text.substring(0,80),textHash:e.textHash,dirty:e.dirty,isVariableDef:e.isVariableDef,isEmpty:e.isEmpty,hasBytecode:e.bytecodes.length>0,hasResult:e.results.length>0,inlineSolveCount:e.inlineSolveCount,reads:e.reads,writes:e.writes}))}}};var A=class{constructor(){this.worker=null;this.nextId=1;this.pending=new Map;}ensureWorker(){if(this.worker)return this.worker;let e=h$1();if(e===null)throw new Error("no engine worker factory registered, so compilation stays on the main thread");return this.worker=e(),this.worker.onmessage=t=>{let n=t.data;if(!n||n.type!=="COMPILE_RESULT")return;let i=this.pending.get(n.id);if(!i)return;this.pending.delete(n.id);let s=[];for(let r of n.results)s.push(this.reconstructResult(r));i.resolve(s);},this.worker.onerror=t=>{for(let[n,i]of this.pending)i.reject(new Error(`Compilation worker error: ${t.message}`)),this.pending.delete(n);},this.worker}async compileBatch(e){if(e.length===0)return [];let t=this.ensureWorker(),n=this.nextId++;return new Promise((i,s)=>{this.pending.set(n,{resolve:i,reject:s}),t.postMessage({type:"COMPILE_BATCH",id:n,items:e});})}storeResults(e,t){let n=new Map;for(let r of e){if(r.error)continue;let l=t.getLineById(r.lineId);if(!l||l.textHash!==r.compiledAgainstHash)continue;let u=n.get(r.lineId);u||(u={bytecodes:[],reads:new Set,writes:new Set,isVariableDef:false,expressions:l.expressions.length>0?[...l.expressions]:[],textHash:r.compiledAgainstHash},n.set(r.lineId,u)),u.bytecodes.push(r.program);for(let o of r.reads)u.reads.add(o);for(let o of r.writes)u.writes.add(o);r.isVariableDef&&(u.isVariableDef=true);}let s=0;for(let[r,l]of n){if(l.bytecodes.length===0)continue;let o=t.getLineById(r)?.inlineSolveCount??0;t.updateLineCompiled(r,l.expressions,l.bytecodes,[...l.reads],[...l.writes],l.isVariableDef,o),s+=l.bytecodes.length;}return s}terminate(){this.worker&&(this.worker.terminate(),this.worker=null,this.pending.clear());}get isActive(){return this.worker!==null}reconstructResult(e){if(e.error)return {lineId:e.lineId,compiledAgainstHash:e.compiledAgainstHash,program:{opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false},reads:[],writes:[],isVariableDef:false,error:e.error};let t=e.opcodesLength>0?new Uint8Array(e.opcodesBuffer,0,e.opcodesLength):new Uint8Array(0),n=e.numbersLength>0?new Float64Array(e.numbersBuffer,0,e.numbersLength):new Float64Array(0),i={opcodes:t,numbers:n,strings:e.strings,hasAsync:false};return {lineId:e.lineId,compiledAgainstHash:e.compiledAgainstHash,program:i,reads:e.reads,writes:e.writes,isVariableDef:e.isVariableDef,error:null}}};var G=128,k=3,te=6,ne=2,ie=k,W=class a{constructor(){this.lastViewportStart=null;this.savedDirection=null;this.pageAccess=new Map;this.accessSeq=0;}static pageForLine(e){return Math.floor((e-1)/G)}static pageRange(e,t){return {startLine:e*G+1,endLine:Math.min((e+1)*G,t)}}detectDirection(e){return this.lastViewportStart===null?null:e.startLine>this.lastViewportStart?"down":e.startLine<this.lastViewportStart?"up":null}maintainAfterEval(e,t){this.savedDirection=this.detectDirection(e),this.lastViewportStart=e.startLine;let n=t.lineCount,i=a.pageForLine(e.startLine),s=a.pageForLine(e.endLine),r=a.pageForLine(n),l=Math.max(0,i-k),u=Math.min(r,s+k),o=Math.max(0,i-te),c=Math.min(r,s+te);for(let p=l;p<=u;p++)this.touchPage(p);for(let p=o;p<=c;p++)p>=l&&p<=u||this.evictPageResults(p,t,n);let d=o-1,h=Math.max(0,d-ie+1);for(let p=h;p<=d;p++)this.evictPageBytecode(p,t,n);let g=c+1,f=Math.min(r,g+ie-1);for(let p=g;p<=f;p++)this.evictPageBytecode(p,t,n);}getPreloadTargets(e,t){let n=this.savedDirection;if(!n)return [];let i=[],s=a.pageForLine(e.endLine),r=a.pageForLine(e.startLine),l=a.pageForLine(t.lineCount),u=[];if(n==="down"){let o=s+k+1,c=Math.min(o+ne-1,l);for(let d=o;d<=c&&d<=l;d++)u.push(d);}else {let o=r-k-1;for(let c=o;c>o-ne&&c>=0;c--)u.push(c);}for(let o of u){let c=a.pageRange(o,t.lineCount);for(let d=c.startLine;d<=c.endLine;d++){let h=t.getLineAt(d);if(h&&h.dirty&&!(h.bytecodes.length>0&&!h.isVariableDef)&&!h.isEmpty)if(h.expressions.length>0)for(let g of h.expressions)g.trim()&&i.push({lineId:h.lineId,expression:g,textHash:h.textHash});else {let g=c$1.findInlineSolves(h.text);if(g.length>0)for(let f of g)f.expression.trim()&&i.push({lineId:h.lineId,expression:f.expression,textHash:h.textHash});else {let f=h.text.trim();f&&i.push({lineId:h.lineId,expression:f,textHash:h.textHash});}}}}return i}clear(){this.pageAccess.clear(),this.accessSeq=0,this.lastViewportStart=null,this.savedDirection=null;}touchPage(e){this.pageAccess.set(e,++this.accessSeq);}evictPageResults(e,t,n){let i=a.pageRange(e,n);for(let s=i.startLine;s<=i.endLine;s++){let r=t.getLineAt(s);r&&!r.isVariableDef&&r.results.length>0&&(r.results=[],r.result=null);}}evictPageBytecode(e,t,n){let i=a.pageRange(e,n);for(let s=i.startLine;s<=i.endLine;s++){let r=t.getLineAt(s);!r||r.isVariableDef||(r.bytecodes.length>0||r.results.length>0)&&(r.bytecodes=[],r.results=[],r.result=null,t.markDirty(r.lineId));}}};var re=(i=>(i[i.Tier1=1]="Tier1",i[i.Tier2=2]="Tier2",i[i.Tier3=3]="Tier3",i[i.Skipped=0]="Skipped",i))(re||{}),w=class{constructor(e,t,n){this.compilationWorker=null;this.globalUnsubscribe=null;this.doc=e,this.engine=t,this.dag=t.getDag(),this.checkpointer=n??new a$1(t.getVM()),this.pageManager=new W,this.engine.getBatcher().checkpointer=this.checkpointer,this.engine.setDocumentModel(this.doc),this.globalUnsubscribe=N.subscribe(i=>{for(let s of this.dag.getAffectedLines(O$1(i)))this.doc.markDirtyByLineNumber(s);});}evaluate(e,t){this.engine.setKeystrokeSignal(t??null),h();try{this.reseedAccumulators();let n=this.engine.userUnitNames(),i=[],s=new Map,r={tier1:0,tier2:0,tier3:0,skipped:0},l=this.doc.lineCount,u=Math.min(e.endLine,l),o=this.doc.getLineStatesInRange(1,u);for(let d=1;d<=u;d++){let h=o[d-1];if(!h){r.skipped++;continue}let g=d>=e.startLine&&d<=e.endLine,f=this.evaluateSingleLine(h,d,g);i.push(f),f.tier===1?r.tier1++:f.tier===2?r.tier2++:f.tier===3?r.tier3++:r.skipped++,f.results&&g&&s.set(d,f.results.flat());}this.pageManager.maintainAfterEval(e,this.doc),this.engine.settleOrphanedNames();let c=new Set(this.engine.userUnitNames());return n.some(d=>!c.has(d))&&this.engine.invalidateForRemovedUserUnits(),{lines:i,resultMap:s,tierCounts:r}}finally{this.engine.setKeystrokeSignal(null),i();}}backgroundCompile(e){let t=[],n=this.doc.lineCount,i=e.endLine+1;for(let s=i;s<=n;s++){let r=this.doc.getLineAt(s);if(!r||!r.dirty||r.bytecodes.length>0&&!r.isVariableDef)continue;let l=this.evaluateSingleLine(r,s,false);t.push(l);}return t}dispatchBackgroundCompiles(e){let t=this.collectInvisibleCompileTargets(e);t.length!==0&&(this.compilationWorker||(this.compilationWorker=new A),this.compilationWorker.compileBatch(t).then(n=>{this.compilationWorker.storeResults(n,this.doc);}).catch(n=>{}));}terminateWorker(){this.compilationWorker&&(this.compilationWorker.terminate(),this.compilationWorker=null),this.globalUnsubscribe&&(this.globalUnsubscribe(),this.globalUnsubscribe=null);}getDoc(){return this.doc}evaluateAll(e){let t={startLine:1,endLine:this.doc.lineCount};return this.evaluate(t,e)}setViewport(e,t){if(this.engine.setKeystrokeSignal(t??null),e.startLine>1&&this.hasDirtyLinesBefore(e.startLine))return this.checkpointer?.clear(),this.evaluate(e,t);this.reseedAccumulators(),this.pageManager.maintainAfterEval(e,this.doc),this.preloadNextPages(e),this.restoreTo(e.startLine-1),h();try{return this.collectEvalResults(e.startLine,e.endLine)}finally{this.engine.setKeystrokeSignal(null),i();}}applyTransaction(e){let t=new Set;for(let r of e)for(let l=0;l<r.deleteCount;l++){let u=r.startLine+l,o=this.dag.getWrites(u);for(let c of o)t.add(c);this.undefineOrphans(this.dag.removeLine(u)),this.engine.undefineUserUnitsFrom(this.doc.getLineAt(u)?.lineId??-1)&&this.engine.invalidateForRemovedUserUnits(),this.engine.getLineCache().removeAllForLine(u);}let n=new Set,i=new Set;for(let r of this.dag.linesReadingAPosition()){let l=this.doc.getLineAt(r);l&&(n.add(l.lineId),i.add(l.lineId));}for(let r of t){let l=this.dag.getAffectedLines(r);for(let u of l){let o=this.doc.getLineAt(u);o&&n.add(o.lineId);}}let s=this.doc.applyChanges(e);this.checkpointer?.clear();for(let r of n)this.doc.markDirty(r);for(let r of i)this.doc.forgetResult(r);return this.dag.clear(),{inserted:s.inserted,removed:s.removed}}reseedAccumulators(){let e=this.engine.resetAccumulators();if(e.size===0)return;let t=this.doc.lineCount;for(let n=1;n<=t;n++){let i=this.doc.getLineAt(n);if(!(i===void 0||i.writes.length===0)){for(let s of i.writes)if(e.has(s)){this.doc.markDirtyByLineNumber(n);break}}}}collectEvalResults(e,t){let n=[],i=new Map,s={tier1:0,tier2:0,tier3:0,skipped:0},r=this.doc.lineCount,l=Math.min(t,r);for(let u=e;u<=l;u++){let o=this.doc.getLineAt(u);if(!o)continue;let c=this.evaluateSingleLine(o,u,true);n.push(c),c.tier===1?s.tier1++:c.tier===2?s.tier2++:c.tier===3?s.tier3++:s.skipped++,c.results&&i.set(u,c.results.flat());}return {lines:n,resultMap:i,tierCounts:s}}hasDirtyLinesBefore(e){return this.doc.hasAnyDirtyVariableDefLineBefore(e)}evaluateSingleLine(e,t,n){let i={lineId:e.lineId,lineNumber:t};if(!e.dirty&&!n)return {...i,tier:0,result:null,error:null};if(e.isEmpty||m(e.text))return this.deregisterIfDirty(e,t),e.isEmpty=true,this.doc.markClean(e.lineId),{...i,tier:0,result:null,error:null};let{expressions:s,inlineSolveCount:r}=this.extractExpressions(e);return s.length===0?(this.deregisterIfDirty(e,t),e.isEmpty=true,this.doc.markClean(e.lineId),{...i,tier:0,result:null,error:null}):e.dirty?n?this.evaluateTier1(e,t,s,r,i):e.bytecodes.length>0&&e.bytecodes.length===s.length&&!e.isVariableDef?{...i,tier:0,result:null,error:null}:this.evaluateTier3(e,t,s,r,i):n&&e.bytecodes.length>0?this.evaluateTier2(e,t,i):{...i,tier:0,result:null,error:null}}deregisterIfDirty(e,t){e.dirty&&(e.reads=[],e.writes=[],this.registerWithTags(t,[],[]),this.engine.undefineUserUnitsFrom(e.lineId));}registerWithTags(e,t,n){let i=this.doc.getLineAt(e)?.text??"",s=a$2(i,t,n);this.undefineOrphans(this.dag.registerLine(e,s.reads,s.writes));}undefineOrphans(e){this.engine.forgetOrphanedNames(e);}evaluateTier1(e,t,n,i,s){this.engine.undefineUserUnitsFrom(e.lineId);let r=[],l=[],u=new Set,o=new Set,c=false,d=null,h=null,g=false,f=false;for(let y of n){if(!y.trim())continue;let b=null,L;try{let m=this.engine.evaluateLine(t,y);b=[m],d=m,L=this.engine.getLineCache().get(t,y);}catch(m){let x=m instanceof Error?m.message:String(m);h||(h=x),g=true,b=null;}if(b&&b.some(m=>m.type===12)&&(f=true),b?r.push(b):r.push([P$1("eval_failed",h??"unknown error")]),L){l.push(L.bytecode);for(let m of L.readVariables)u.add(m);L.writeVariable&&(o.add(L.writeVariable),c=true);}else try{let{program:m,reads:x,writes:I}=this.engine.compileExpression(y);l.push(m);for(let E of x)u.add(E);for(let E of I)o.add(E);I.length>0&&(c=!0);}catch(m){if(l.push({opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false}),m instanceof b$3&&m.context){let x=m.context.reads,I=m.context.writes;if(Array.isArray(x))for(let E of x)u.add(E);if(Array.isArray(I))for(let E of I)o.add(E);}}}let p=[...u],v=[...o];return g||f?(this.doc.updateLineCompiled(e.lineId,n,l,p,v,c,i),e.results=r,e.result=r[0]?.[0]??null,e.inlineSolveCount=i,e.expressions=n):this.doc.updateLineResult(e.lineId,r,l,n,p,v,c,i),this.registerWithTags(t,p,v),this.checkpointer&&v.length>0&&!g&&!f&&this.checkpointer.snapshot(t,e.lineId,v),{...s,tier:1,result:d,results:r,error:h}}evaluateTier2(e,t,n){if(e.bytecodes.length===0)return {...n,tier:0,result:null,error:null};let i=[],s=null,r=null,l=false;for(let u of e.bytecodes)if(u.opcodes.length!==0)try{let o=this.engine.executeCached(u,t);s=o,i.push([o]);}catch(o){let c=o instanceof Error?o.message:String(o);r||(r=c),l=true,i.push([P$1("exec_failed",c)]);}return this.registerWithTags(t,e.reads,e.writes),i.length>0?(e.results=i,e.result=i[0][0]??null):e.result!==null&&j$1()&&(e.results=e.results.map(u=>u.map(k$1)),e.result=e.results[0]?.[0]??k$1(e.result)),l&&this.doc.markDirty(e.lineId),this.checkpointer&&e.writes.length>0&&!l&&this.checkpointer.snapshot(t,e.lineId,e.writes),{...n,tier:2,result:i.length>0?s:e.result,results:i.length>0?i:e.results,error:r}}evaluateTier3(e,t,n,i,s){let r=[],l=new Set,u=new Set,o=false,c=null,d=null,h=false,g=false;for(let v of n)if(v.trim())try{let{program:y,reads:b,writes:L}=this.engine.compileExpression(v);r.push(y);for(let m of b)l.add(m);for(let m of L)u.add(m);L.length>0&&(o=!0),L.length>0&&y.opcodes.length>0&&(c=this.engine.executeCached(y,t),c&&c.type===12&&(g=!0));}catch(y){let b=y instanceof Error?y.message:String(y);d||(d=b),h=true,r.push({opcodes:new Uint8Array(0),numbers:new Float64Array(0),strings:[],hasAsync:false});}let f=[...l],p=[...u];return this.doc.updateLineCompiled(e.lineId,n,r,f,p,o,i),this.registerWithTags(t,f,p),o&&c&&!h&&!g&&(e.results=[[c]],e.result=c,this.doc.markClean(e.lineId),this.checkpointer&&this.checkpointer.snapshot(t,e.lineId,p)),{...s,tier:3,result:c,results:o&&c&&!h&&!g?[[c]]:void 0,error:d}}restoreTo(e){this.checkpointer&&this.checkpointer.restoreTo(e);}getCheckpointer(){return this.checkpointer}getPageManager(){return this.pageManager}preloadNextPages(e){let t=this.pageManager.getPreloadTargets(e,this.doc);t.length!==0&&(this.compilationWorker||(this.compilationWorker=new A),this.compilationWorker.compileBatch(t).then(n=>{this.compilationWorker.storeResults(n,this.doc);}).catch(n=>{}));}collectInvisibleCompileTargets(e){let t=[],n=this.doc.lineCount,i=e.endLine+1;for(let s=i;s<=n;s++){let r=this.doc.getLineAt(s);if(!r||!r.dirty||r.bytecodes.length>0&&!r.isVariableDef||r.isEmpty||m(r.text))continue;let{expressions:l}=this.extractExpressions(r);if(l.length!==0)for(let u of l)u.trim()&&t.push({lineId:r.lineId,expression:u,textHash:r.textHash});}return t}extractExpressions(e){if(e.expressions.length>0)return {expressions:e.expressions,inlineSolveCount:e.inlineSolveCount};let t=e.text.trim();if(t.length===0)return {expressions:[],inlineSolveCount:0};let n=c$1.findInlineSolves(e.text);return n.length>0?{expressions:n.map(i=>i.expression),inlineSolveCount:n.length}:{expressions:[t],inlineSolveCount:0}}};function se(a){return typeof a.unit=="string"?a.unit:String(a.value)}function ue(a,e,t={inputType:"markdown"}){let n$1=a.getDocumentModel(),i=new R;i.setDocument(e);let s=new w(i,a,new a$1(a.getVM()));try{let r=i.lineCount;s.evaluate({startLine:1,endLine:r});let l=[],u=[],o=0;for(let c=1;c<=r;c++){let d=i.getLineAt(c),h=d.text,g=o,f=o+h.length;o=f+1;let p=d.inlineSolveCount>0,v=[],y=null,b=null;d.isEmpty||(p?v=n(h,c).map((L,m)=>{let x=d.results[m]?.[0]??null;if(x&&x.type===13){let I=se(x);return u.push(`Line ${c}: ${I}`),{...L,result:null,error:I}}return {...L,result:x,error:null}}):(y=d.expressions[0]??null,b=d.result??null,b&&b.type===13&&u.push(`Line ${c}: ${se(b)}`))),l.push({lineNumber:c,text:h,startPosition:g,endPosition:f,isEmpty:d.isEmpty,hasInlineSolves:p,inlineSolves:v,expression:y,error:null,result:b});}return {lines:l,totalLines:r,errors:u}}finally{s.terminateWorker(),a.setDocumentModel(n$1);}}export{R as a,re as b,w as c,ue as d};//# sourceMappingURL=chunk-MXMMDSX4.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-MXMMDSX4.js.map
|