@netless/appliance-plugin 1.1.43-beta.5 → 1.1.43-beta.6
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/appliance-plugin.js +1 -1
- package/dist/appliance-plugin.mjs +1 -1
- package/dist/{bridge-lN5XJgmt.mjs → bridge-BkznO_2I.mjs} +1 -1
- package/dist/{bridge-BU5rR3K9.js → bridge-eqcSdNuO.js} +1 -1
- package/dist/bridge.js +1 -1
- package/dist/bridge.mjs +1 -1
- package/dist/core/serviceRenderScheduler.d.ts +5 -1
- package/dist/core/types.d.ts +2 -0
- package/dist/core/worker/base.d.ts +11 -0
- package/dist/fullWorker.js +113 -105
- package/dist/{index-DSZYEn11.mjs → index-5NhESa-E.mjs} +1 -1
- package/dist/{index-AuMV5vJ_.js → index-Ao4lCeza.js} +1 -1
- package/dist/{index-1psceXIi.mjs → index-B2mao9Qt.mjs} +1 -1
- package/dist/index-B6a4M9h0.js +570 -0
- package/dist/{index-8Q-KG_bu.mjs → index-BIGq6SHu.mjs} +1 -1
- package/dist/{index-ERLPRSvt.js → index-BvII1U5g.js} +1 -1
- package/dist/{index-qlVmoCd1.js → index-C0vx0A6X.js} +1 -1
- package/dist/index-C6YB3jua.js +570 -0
- package/dist/{index-Do5kJ_zq.js → index-CIKC1p1Z.js} +1 -1
- package/dist/{index-BtLlVwbN.mjs → index-Cf8qdTfA.mjs} +4905 -4874
- package/dist/{index-CjzGgT9M.mjs → index-D8wP-XSi.mjs} +1 -1
- package/dist/{index-CGGk-ErK.mjs → index-WZBBEAwF.mjs} +9048 -9031
- package/dist/subWorker.js +81 -73
- package/package.json +1 -1
- package/dist/index-C8jhD21B.js +0 -570
- package/dist/index-D48waKFn.js +0 -570
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var B=Object.defineProperty;var L=(n,e,t)=>e in n?B(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var d=(n,e,t)=>L(n,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("./index-D48waKFn.js"),v=require("lodash");require("clipper-lib");require("lz-string");require("lineclip");require("xss");require("rbush");require("react-dom");require("react");class C{constructor(){d(this,"threadEngine")}registerBackgroundThread(e){return this.threadEngine=e,this}}class W extends C{constructor(){super(...arguments);d(this,"emitEventType",c.EmitEventType.CopyNode)}async consume(t){const{msgType:s,dataType:r,emitEventType:a}=t;if(s===c.EPostMessageType.FullWork&&r===c.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var r;const{workId:s}=t;s&&await((r=this.threadEngine)==null?void 0:r.consumeFull(t))}}class F{constructor(e){d(this,"builders",new Map);this.builders=new Map(e.map(t=>[t,this.build(t)]))}build(e){switch(e){case c.EmitEventType.CopyNode:return new W}}registerForBackgroundThread(e){return this.builders.forEach(t=>{t&&t.registerBackgroundThread(e)}),this}async consumeForBackgroundThread(e){for(const t of this.builders.values())if(await(t==null?void 0:t.consume(e)))return!0;return!1}}async function R(n){const e=n.querySelectorAll("img"),t=Array.from(e).map(a=>{if(!a.crossOrigin&&a.src&&!a.src.startsWith("data:")&&(a.crossOrigin="anonymous",a.complete)){const i=a.src;a.src="",a.src=i}return a.complete&&a.crossOrigin?Promise.resolve():new Promise(i=>{a.onload=()=>{i(void 0)},a.onerror=()=>{i(void 0)}})});return n.querySelectorAll("svg").forEach(a=>{a.querySelectorAll("image").forEach(o=>{o.href&&!o.href.baseVal.startsWith("data:")&&(o.getAttribute("crossorigin")||o.setAttribute("crossorigin","anonymous"),t.push(new Promise(l=>{const h=new Image;h.crossOrigin="anonymous",h.onload=()=>{l(void 0)},h.onerror=()=>{l(void 0)},h.src=o.href.baseVal})))})}),await Promise.all(t)}async function A(n){const s=Date.now();let r=!1;for(;Date.now()-s<5e3;){const a=n.querySelectorAll("path");if(a.length>0&&(r=Array.from(a).some(i=>{const o=i.getAttribute("d")||"";return o!=="M0,0C0,0,0,0,0,0"&&o.length>10}),r))break;await new Promise(i=>setTimeout(i,50))}}async function x(n){const e=n.querySelectorAll("svg");if(!e.length)return;const t=[];for(let s=0;s<e.length;s++){const r=e[s];t.push(A(r))}await Promise.all(t)}async function O(n){if(n.querySelectorAll("svg[data-type='mermaid']").length>0){const s=Date.now();let r=!1;for(;Date.now()-s<5e3&&!r;){const a=n.querySelectorAll("foreignObject");if(a.length>0){let i=!0;for(const o of Array.from(a)){const l=parseFloat(o.getAttribute("width")||"0"),h=parseFloat(o.getAttribute("height")||"0");if(o.querySelector(".mermaid-container")&&(l<50||h<50)){i=!1;break}}if(i){r=!0;break}}else r=!0;await new Promise(i=>setTimeout(i,50))}}}async function $(n,e={}){const{width:t=n.offsetWidth,height:s=n.offsetHeight}=e,r=n.offsetWidth||t,a=n.offsetHeight||s;try{const{loadSvgToImageLib:i,getSvgToImageLib:o}=await Promise.resolve().then(()=>require("./svgToImageLoader-B3gIDAQo.js"));let l=o();if(!l)try{l=await i()}catch(u){return console.error("[loadSvgToImageLib] error: ",u),null}const h=n.style.width,y=n.style.height,w=n.style.display;n.style.width||(n.style.width=`${r}px`),n.style.height||(n.style.height=`${a}px`),(!n.style.display||n.style.display==="none")&&(n.style.display="block");try{await new Promise(p=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{p()})})});const u=await l.toPng(n,{width:r,height:a,quality:1});return n.style.width=h,n.style.height=y,n.style.display=w,new Promise(p=>{const g=new Image;g.crossOrigin="anonymous",g.onload=()=>{p(g)},g.onerror=()=>{p(null)},g.src=u})}catch(u){return n.style.width=h,n.style.height=y,n.style.display=w,console.error("[divToImageElement] error: ",u),null}}catch(i){return console.error("[divToImageElement] error: ",i),null}}class V{constructor(e){d(this,"toolsType",c.EToolsKey.BackgroundSVG);d(this,"vNodes");d(this,"workOptions");d(this,"workId");d(this,"markmapInstance",null);d(this,"isDestroyed",!1);d(this,"element");d(this,"manager");d(this,"scenePath");d(this,"trackBackgroundImageLoad");d(this,"reloadSourceUrl");const{vNodes:t,workId:s,toolsOpt:r,manager:a,scenePath:i,trackBackgroundImageLoad:o=!0}=e;this.workId=s,this.vNodes=t,this.workOptions=r,this.manager=a,this.scenePath=i,this.trackBackgroundImageLoad=o,this.element=this.createElement(),this.manager.fullLayer.appendChild(this.element),this.vNodes.setInfo(this.workId,{workShape:this})}get fullLayer(){return this.manager.fullLayer}get collector(){return this.manager.master.control.collector}async init(){await this.render()}createElement(){const{type:e}=this.workOptions;let t;return e===c.ESVGType.markmap?(t=document.createElementNS("http://www.w3.org/2000/svg","svg"),t.classList.add("svg")):(t=document.createElement("img"),t.classList.add("img")),t.id=this.workId,t.setAttribute("data-id",this.workId),t}async render(e){this.isDestroyed||!this.element||!this.element.parentNode||(this.updateElementPosition(e),await this.updateSvg(e))}isSameSize(e){const{width:t,height:s}=e,{width:r,height:a}=this.workOptions,i=t*this.manager.camera.scale,o=s*this.manager.camera.scale,l=r*this.manager.camera.scale,h=a*this.manager.camera.scale;return i===l&&o===h}isSamePosition(e){const{centerX:t,centerY:s}=e,{centerX:r,centerY:a}=this.workOptions,i=this.manager.getPagePoint(r,a),o=this.manager.getPagePoint(t,s);return v.isEqual(o,i)}isSameZIndex(e){const{zIndex:t}=e,{zIndex:s}=this.workOptions;return t===s}isSameState(e){const{state:t}=e,{state:s}=this.workOptions;return v.isEqual(t,s)}isSameData(e){const{data:t}=e,{data:s}=this.workOptions;return v.isEqual(t,s)}updateElementPosition(e){if(this.isDestroyed||!this.element||!this.fullLayer)return;const{centerX:t,centerY:s,width:r,height:a,zIndex:i}=this.workOptions,o=this.manager.getPagePoint(t,s),l=r*this.manager.camera.scale,h=a*this.manager.camera.scale;(!e||e&&!this.isSameSize(e))&&(this.element.setAttribute("width",`${l}`),this.element.setAttribute("height",`${h}`),this.element.style.width=`${l}px`,this.element.style.height=`${h}px`),(!e||e&&!this.isSamePosition(e))&&(this.element.style.left=`${o.x}px`,this.element.style.top=`${o.y}px`),(!e||e&&!this.isSameZIndex(e))&&(this.element.style.zIndex=(i||0).toString())}async updateSvg(e){const{type:t,state:s}=this.workOptions;if(t===c.ESVGType.markmap){const r=c.getMarkmapRuntimeOrThrow(),{data:a}=this.workOptions;if(this.markmapInstance||(this.markmapInstance=r.createMarkmap(this.element,this.manager.markmapOptions),this.markmapInstance.handleClick=async(l,h)=>{var u,p,g;(u=this.markmapInstance)==null||u.toggleNode(h);const y=this.serializeData((p=this.markmapInstance)==null?void 0:p.state.data);this.setWorkOptions({...this.workOptions,state:y},!1),r.checkNodeHasMermaid(h)&&await r.renderMermaidAfterDOMUpdate(this.element,this.workId),this.scenePath&&this.collector&&((g=this.collector)==null||g.dispatch({type:c.EPostMessageType.UpdateNode,workId:this.workId,opt:this.workOptions,isSync:!0,viewId:this.manager.viewId,scenePath:this.scenePath}))}),e&&this.isSameState(e)&&this.isSameSize(e)&&this.isSameData(e))return;const i=r.transform(this.workId,a);let{root:o}=i;a&&r.hasMermaidCodeBlock(a)&&(o=r.injectMermaidHtml(o,a,this.workId));try{s&&Array.isArray(s)&&this.transformState(s,o),await this.markmapInstance.setData(o),!this.isDestroyed&&this.element&&this.fullLayer&&this.markmapInstance&&(window.markmapInstance=this.markmapInstance,a&&r.hasMermaidCodeBlock(a)&&await r.renderMermaidAfterDOMUpdate(this.element,this.workId),await this.fit(!e||e&&!this.isSameData(e)))}catch(l){console.error("[updateSvg] error: ",l)}}else{const{src:r,crossOrigin:a}=this.workOptions,i=this.reloadSourceUrl??r;if(this.element.crossOrigin=v.isString(a)?a:"anonymous",!this.trackBackgroundImageLoad){this.element.src=i,await new Promise((o,l)=>{this.element.onload=()=>o(),this.element.onerror=()=>l()});return}await this.manager.master.control.backgroundImageLoadCoordinator.load({viewId:this.manager.viewId,scenePath:this.scenePath,resourceId:this.workId,src:i,image:this.element,isActive:()=>!this.isDestroyed&&this.manager.master.control.viewContainerManager.getCurScenePath(this.manager.viewId)===this.scenePath,onReloadUrl:o=>{this.reloadSourceUrl=o}})}}async fit(e=!0){var t;if(!this.isDestroyed&&this.element&&this.fullLayer&&this.markmapInstance){const s=c.getMarkmapRuntimeOrThrow();e&&this.element&&await s.waitForImagesInForeignObjects(this.element),await((t=this.markmapInstance)==null?void 0:t.fit()),this.element&&s.isSafari()&&s.hasMermaidSvg(this.element)&&(await O(this.element),await s.transformMermaidSvgToMarkmapSvg(this.element))}}serializeData(e){var r;const t=[e],s=[];for(;t.length>0;){const a=t.pop();a&&(a!=null&&a.children&&t.push(...a.children),s.push(((r=a==null?void 0:a.payload)==null?void 0:r.fold)||0))}return s}transformState(e,t){const s=[t];for(;s.length>0;){const r=s.pop();r&&(r!=null&&r.children&&s.push(...r.children),r.payload?r.payload.fold=e.shift():e.shift())}}async updateCamera(){this.updateElementPosition(),await this.fit(!1)}async setWorkOptions(e,t=!0){if(!v.isEqual(this.workOptions,e)){const s=v.clone(this.workOptions),r="src"in this.workOptions?this.workOptions.src:void 0,a="src"in e?e.src:void 0;r!==a&&(this.reloadSourceUrl=void 0),this.workOptions=e,t&&await this.render(s)}}destroy(){this.isDestroyed=!0,this.reloadSourceUrl=void 0,this.trackBackgroundImageLoad&&this.manager.master.control.backgroundImageLoadCoordinator.cancelResource(this.manager.viewId,this.scenePath,this.workId),this.element.remove()}getRectFromLayer(){const e=this.element.getBoundingClientRect();return{x:e.x,y:e.y,w:e.width,h:e.height}}}function P(n){const{toolsType:e,...t}=n;switch(e){case c.EToolsKey.BackgroundSVG:return new V(t);default:return}}class b{constructor(e){d(this,"viewId");d(this,"fullLayer");d(this,"curNodeMap");this.viewId=e,this.curNodeMap=new c.ObserverMap}init(e){this.fullLayer=e}get(e){return this.curNodeMap.get(e)}setInfo(e,t){const s=this.curNodeMap.get(e)||{name:e,workShape:t.workShape};t.workShape&&(s.workShape=t.workShape),this.curNodeMap.set(e,s)}getNodeRectFormShape(e){const t=this.curNodeMap.get(e);if(t&&t.workShape)return t.workShape.getRectFromLayer()}delete(e){const t=this.curNodeMap.get(e);t&&t.workShape.destroy(),this.curNodeMap.delete(e)}clear(){for(const e of this.curNodeMap.values())e.workShape.destroy();this.curNodeMap.clear()}}class U{constructor(e,t){d(this,"opt");d(this,"viewId");d(this,"fullLayer");d(this,"vNodes");d(this,"master");d(this,"cameraOpt");d(this,"methodBuilder");d(this,"destroyed",!1);d(this,"updateCamera",v.throttle(async e=>{if(this.destroyed)return;const{cameraOpt:t}=e;t&&!v.isEqual(this.cameraOpt,t)&&await this.setCameraOpt(t)},100));this.viewId=e,this.opt=t,this.master=t.master,this.fullLayer=t.container,this.methodBuilder=new F([c.EmitEventType.CopyNode]).registerForBackgroundThread(this),this.vNodes=new b(e),this.vNodes.init(this.fullLayer)}get camera(){return this.cameraOpt||{scale:1,centerX:0,centerY:0,width:0,height:0}}get view(){var e;return(e=this.master.control.viewContainerManager.getView(this.viewId))==null?void 0:e.viewData}get markmapOptions(){return this.master.control.pluginOptions.extras.markmap.options}getPagePoint(e,t){const{scale:s,centerX:r,centerY:a,width:i,height:o}=this.camera;return{x:(e-r)*s+i/2,y:(t-a)*s+o/2}}async setCameraOpt(e){if(!this.destroyed){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){if(this.destroyed)return;const{workShape:s}=t;s&&await s.updateCamera()}}}clearAll(){this.vNodes.clear()}canUseFullLayer(e){return e===c.EToolsKey.BackgroundSVG}async consumeFull(e){if(this.destroyed)return;const{toolsType:t,opt:s,workId:r,scenePath:a}=e;if(r!=null&&r.toString()&&t&&this.canUseFullLayer(t))switch(t){case c.EToolsKey.BackgroundSVG:await this.setFullWork({toolsType:t,opt:s,workId:r,scenePath:a});break}}async setFullWork(e){const{workId:t,opt:s,toolsType:r,scenePath:a}=e;if(t&&s&&r&&a){const i=t.toString();let o;const l=this.vNodes.get(i);return!l||!l.workShape?(o=this.createWorkShapeNode({toolsOpt:s,toolsType:c.EToolsKey.BackgroundSVG,workId:i,scenePath:a}),o&&await o.init()):(o=l.workShape,await o.setWorkOptions(s)),o}}createWorkShapeNode(e){return P({...e,vNodes:this.vNodes,manager:this})}removeWork(e){const{workId:t}=e,s=t==null?void 0:t.toString();s&&this.removeNode(s)}removeNode(e){this.vNodes.delete(e)}async on(e){if(!this.destroyed&&!await this.methodBuilder.consumeForBackgroundThread(e)){if(this.destroyed)return;const{msgType:t,toolsType:s}=e;switch(t){case c.EPostMessageType.Destroy:{this.destroy();break}case c.EPostMessageType.Clear:{this.clearAll();break}case c.EPostMessageType.UpdateCamera:{this.updateCamera(e);break}case c.EPostMessageType.UpdateTools:{this.toggleFullLayer(s===c.EToolsKey.Clicker);break}case c.EPostMessageType.BackgroundSVGUpdate:case c.EPostMessageType.UpdateNode:case c.EPostMessageType.FullWork:{s&&this.canUseFullLayer(s)&&await this.consumeFull(e);break}case c.EPostMessageType.BackgroundSVGDelete:{this.removeWork(e);break}}}}toggleFullLayer(e){this.destroyed||this.fullLayer.classList.toggle("appliance-plugin-background-svg-active",e)}destroy(){this.destroyed||(this.destroyed=!0,this.updateCamera.cancel(),this.vNodes.clear())}}class D{constructor(e,t){d(this,"viewId");d(this,"fullLayer");d(this,"master");d(this,"vNodes");d(this,"cameraOpt");d(this,"opt");d(this,"workShapes",new Map);d(this,"destroyed",!1);d(this,"activeRequest");this.viewId=e,this.opt=t,this.master=t.master,this.fullLayer=t.container,this.vNodes=new b(e),this.vNodes.init(this.fullLayer)}get camera(){return this.cameraOpt||{scale:1,centerX:0,centerY:0,width:0,height:0}}get view(){var e;return(e=this.master.control.viewContainerManager.getView(this.viewId))==null?void 0:e.viewData}get markmapOptions(){return this.master.control.pluginOptions.extras.markmap.options}reportRequestFailure(e,t,s,r,a){const i=r instanceof Error?r.message:String(r);try{this.opt.post({sp:[{type:c.EPostMessageType.ReportError,viewId:this.viewId,scenePath:s,requestId:t,reportBusiness:e,reportStage:a,reportError:i,reportString:`[BackgroundSnapshotThread] ${e} failed; stage=${a}; requestId=${t||"unknown"}; error=${i}`}]})}catch(o){console.error(`[BackgroundSnapshotThread] ${e} failure report failed`,o)}}createOffscreenCanvas(e){const{width:t,height:s}=e.canvasOpt,r=new OffscreenCanvas(e.canvasOpt.width,e.canvasOpt.height);r.width=t,r.height=s}async setCameraOpt(e){if(!this.destroyed){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){if(this.destroyed)return;const{workShape:s}=t;s&&await s.updateCamera()}}}getPagePoint(e,t){const{scale:s,centerX:r,centerY:a,width:i,height:o}=this.camera;return{x:(e-r)*s+i/2,y:(t-a)*s+o/2}}async getSnapshot(e){var i;if(this.destroyed)return;const{scenePath:t,scenes:s,cameraOpt:r,requestId:a}=e;this.activeRequest={business:"snapshot",scenePath:t,requestId:a};try{if(!(t&&s&&r))throw new Error("snapshot input is incomplete");await this.setCameraOpt(r);for(const[l,h]of Object.entries(s)){if(this.destroyed)return;if(h!=null&&h.type&&(h==null?void 0:h.toolsType)===c.EToolsKey.BackgroundSVG)switch(h==null?void 0:h.type){case c.EPostMessageType.UpdateNode:case c.EPostMessageType.FullWork:{const{opt:y}=h,w={...h,opt:y,workId:l,msgType:c.EPostMessageType.FullWork,dataType:c.EDataType.Service,viewId:this.viewId,scenePath:t,requestId:a};await this.runFullWork(w);break}default:break}}if(await O(this.fullLayer),this.destroyed||(await R(this.fullLayer),this.destroyed)||(await x(this.fullLayer),this.destroyed))return;const o=await $(this.fullLayer);if(!this.destroyed&&o)this.opt.post({sp:[{type:c.EPostMessageType.Snapshot,scenePath:t,imageElement:o,viewId:this.viewId,index:1,requestId:a}]});else if(!this.destroyed)throw new Error("snapshot image element is empty")}catch(o){this.destroyed||this.reportRequestFailure("snapshot",a,t,o,"render")}finally{((i=this.activeRequest)==null?void 0:i.requestId)===a&&(this.activeRequest=void 0)}}createWorkShapeNode(e){return P({...e,vNodes:this.vNodes,manager:this,trackBackgroundImageLoad:!1})}async setFullWork(e){const{workId:t,opt:s,toolsType:r,scenePath:a}=e;if(t&&s&&r&&a){const i=t.toString();let o;const l=this.vNodes.get(i);return!l||!l.workShape?(o=this.createWorkShapeNode({toolsOpt:s,toolsType:c.EToolsKey.BackgroundSVG,workId:i,scenePath:a}),o&&await o.init()):(o=l.workShape,await o.setWorkOptions(s)),o}}async runFullWork(e){if(this.destroyed)return;const{toolsType:t,opt:s,workId:r,scenePath:a}=e;await this.setFullWork({toolsType:t,opt:s,workId:r,scenePath:a})}destroy(e){this.destroyed||(e&&this.activeRequest&&this.reportRequestFailure("snapshot",this.activeRequest.requestId,this.activeRequest.scenePath,new Error(`snapshot request ${e}`),e),this.activeRequest=void 0,this.destroyed=!0,this.fullLayer.innerHTML="",this.fullLayer.style.width="",this.fullLayer.style.height="")}}class H{constructor(e){d(this,"backgroundThreadMap",new Map);d(this,"snapshotThreadsByRequest",new Map);d(this,"destroyed",!1);d(this,"master");d(this,"post",e=>{if(this.destroyed)return;const{sp:t}=e;t&&this.master.collectorSyncData(t)});this.master=e,this.backgroundThreadMap=new Map}createBackgroundThread(e,t){return new U(e,t)}createSnapshotThread(e,t){return new D(e,t)}getSnapshotRequestKey(e){return e.requestId||`${e.viewId}\0${e.scenePath||""}\0${e.msgType}`}disposeSnapshotThread(e,t,s){const r=this.snapshotThreadsByRequest.get(e);if(!(!r||r.thread!==t)){this.snapshotThreadsByRequest.delete(e);try{t.destroy(s)}finally{r.surface.remove()}}}async consume(e){var t,s,r,a,i;if(!this.destroyed)for(const o of e.values()){if(this.destroyed)return;const{msgType:l,viewId:h,layerOpt:y,offscreenCanvasOpt:w,cameraOpt:u,tasksqueue:p}=o;if(l===c.EPostMessageType.Console){console.log(this);continue}if(l===c.EPostMessageType.Init){const m=(t=this.master.control.viewContainerManager.getView(h))==null?void 0:t.displayer,T=(s=m==null?void 0:m.backgroundContainerRef)==null?void 0:s.current;if(m&&T&&y&&w){const f=this.backgroundThreadMap.get(h);f==null||f.destroy();const k=this.createBackgroundThread(h,{displayer:m,container:T,layerOpt:y,master:this.master,canvasOpt:w,post:this.post});this.backgroundThreadMap.set(h,k),k&&u&&await k.setCameraOpt(u)}continue}if(l===c.EPostMessageType.Snapshot){const m=(r=this.master.control.viewContainerManager.getView(h))==null?void 0:r.displayer,f=(i=((a=this.master.control.viewContainerManager.mainView)==null?void 0:a.displayer).backgroundSnapshotContainerRef)==null?void 0:i.current;if(m&&f&&u){const k=this.getSnapshotRequestKey(o),E=this.snapshotThreadsByRequest.get(k);E&&this.disposeSnapshotThread(k,E.thread,"replaced");const S=document.createElement("div");S.style.width=`${u.width}px`,S.style.height=`${u.height}px`,f.append(S);const q={...c.ViewContainerManager.defaultLayerOpt,offscreen:!1,width:u.width,height:u.height},N={...c.ViewContainerManager.defaultScreenCanvasOpt,width:u.width,height:u.height},I=this.createSnapshotThread(h,{displayer:m,container:S,layerOpt:q,master:this.master,canvasOpt:N,post:this.post});this.snapshotThreadsByRequest.set(k,{thread:I,surface:S}),I.getSnapshot(o).catch(M=>{this.master.Logger.error(`[Appliance]: background snapshot render failed; viewId=${h}; error=${M instanceof Error?M.message:String(M)}`)}).finally(()=>{this.disposeSnapshotThread(k,I)});continue}this.post({sp:[{type:c.EPostMessageType.ReportError,viewId:h,scenePath:o.scenePath,requestId:o.requestId,reportBusiness:"snapshot",reportStage:"surface-unavailable",reportError:"background snapshot surface is unavailable",reportString:`[BackgroundThreadManager] snapshot surface is unavailable; viewId=${h}; requestId=${o.requestId||"unknown"}`}]})}if(l===c.EPostMessageType.TasksQueue&&(p!=null&&p.size)){for(const[m,T]of this.backgroundThreadMap.entries()){const f=p.get(m);f&&await T.on(f)}continue}if(h===c.Storage_ViewId_ALL){for(const m of this.backgroundThreadMap.values())await m.on(o);l===c.EPostMessageType.Destroy&&this.backgroundThreadMap.clear();continue}const g=this.backgroundThreadMap.get(h);g&&(await g.on(o),l===c.EPostMessageType.Destroy&&this.backgroundThreadMap.get(h)===g&&this.backgroundThreadMap.delete(h))}}async consumeTargetOne(e,t){if(this.destroyed)return;const s=this.backgroundThreadMap.get(e);s&&await s.on(t)}discardView(e){for(const[s,r]of[...this.snapshotThreadsByRequest.entries()])r.thread.viewId===e&&this.disposeSnapshotThread(s,r.thread,"view-destroyed");const t=this.backgroundThreadMap.get(e);try{t==null||t.destroy()}catch(s){this.master.Logger.error(`[Appliance]: BackgroundThread View discard failed; viewId=${e}; error=${s instanceof Error?s.message:String(s)}`)}this.backgroundThreadMap.delete(e)}destroy(){if(this.destroyed)return;const e=[];for(const[t,s]of[...this.snapshotThreadsByRequest.entries()])try{this.disposeSnapshotThread(t,s.thread,"manager-destroyed")}catch(r){e.push(`snapshot-thread: ${r instanceof Error?r.message:String(r)}`)}this.snapshotThreadsByRequest.clear(),this.destroyed=!0;for(const t of this.backgroundThreadMap.values())try{t.destroy()}catch(s){e.push(`background-thread: ${s instanceof Error?s.message:String(s)}`)}this.backgroundThreadMap.clear(),e.length&&this.master.Logger.error(`[Appliance]: BackgroundThread destroy completed with cleanup errors: ${e.join("; ")}`)}}exports.BackgroundThreadManagerImpl=H;
|
|
1
|
+
"use strict";var B=Object.defineProperty;var L=(n,e,t)=>e in n?B(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var d=(n,e,t)=>L(n,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("./index-B6a4M9h0.js"),v=require("lodash");require("clipper-lib");require("lz-string");require("lineclip");require("xss");require("rbush");require("react-dom");require("react");class C{constructor(){d(this,"threadEngine")}registerBackgroundThread(e){return this.threadEngine=e,this}}class W extends C{constructor(){super(...arguments);d(this,"emitEventType",c.EmitEventType.CopyNode)}async consume(t){const{msgType:s,dataType:r,emitEventType:a}=t;if(s===c.EPostMessageType.FullWork&&r===c.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var r;const{workId:s}=t;s&&await((r=this.threadEngine)==null?void 0:r.consumeFull(t))}}class F{constructor(e){d(this,"builders",new Map);this.builders=new Map(e.map(t=>[t,this.build(t)]))}build(e){switch(e){case c.EmitEventType.CopyNode:return new W}}registerForBackgroundThread(e){return this.builders.forEach(t=>{t&&t.registerBackgroundThread(e)}),this}async consumeForBackgroundThread(e){for(const t of this.builders.values())if(await(t==null?void 0:t.consume(e)))return!0;return!1}}async function R(n){const e=n.querySelectorAll("img"),t=Array.from(e).map(a=>{if(!a.crossOrigin&&a.src&&!a.src.startsWith("data:")&&(a.crossOrigin="anonymous",a.complete)){const i=a.src;a.src="",a.src=i}return a.complete&&a.crossOrigin?Promise.resolve():new Promise(i=>{a.onload=()=>{i(void 0)},a.onerror=()=>{i(void 0)}})});return n.querySelectorAll("svg").forEach(a=>{a.querySelectorAll("image").forEach(o=>{o.href&&!o.href.baseVal.startsWith("data:")&&(o.getAttribute("crossorigin")||o.setAttribute("crossorigin","anonymous"),t.push(new Promise(l=>{const h=new Image;h.crossOrigin="anonymous",h.onload=()=>{l(void 0)},h.onerror=()=>{l(void 0)},h.src=o.href.baseVal})))})}),await Promise.all(t)}async function A(n){const s=Date.now();let r=!1;for(;Date.now()-s<5e3;){const a=n.querySelectorAll("path");if(a.length>0&&(r=Array.from(a).some(i=>{const o=i.getAttribute("d")||"";return o!=="M0,0C0,0,0,0,0,0"&&o.length>10}),r))break;await new Promise(i=>setTimeout(i,50))}}async function x(n){const e=n.querySelectorAll("svg");if(!e.length)return;const t=[];for(let s=0;s<e.length;s++){const r=e[s];t.push(A(r))}await Promise.all(t)}async function O(n){if(n.querySelectorAll("svg[data-type='mermaid']").length>0){const s=Date.now();let r=!1;for(;Date.now()-s<5e3&&!r;){const a=n.querySelectorAll("foreignObject");if(a.length>0){let i=!0;for(const o of Array.from(a)){const l=parseFloat(o.getAttribute("width")||"0"),h=parseFloat(o.getAttribute("height")||"0");if(o.querySelector(".mermaid-container")&&(l<50||h<50)){i=!1;break}}if(i){r=!0;break}}else r=!0;await new Promise(i=>setTimeout(i,50))}}}async function $(n,e={}){const{width:t=n.offsetWidth,height:s=n.offsetHeight}=e,r=n.offsetWidth||t,a=n.offsetHeight||s;try{const{loadSvgToImageLib:i,getSvgToImageLib:o}=await Promise.resolve().then(()=>require("./svgToImageLoader-B3gIDAQo.js"));let l=o();if(!l)try{l=await i()}catch(u){return console.error("[loadSvgToImageLib] error: ",u),null}const h=n.style.width,y=n.style.height,w=n.style.display;n.style.width||(n.style.width=`${r}px`),n.style.height||(n.style.height=`${a}px`),(!n.style.display||n.style.display==="none")&&(n.style.display="block");try{await new Promise(p=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{p()})})});const u=await l.toPng(n,{width:r,height:a,quality:1});return n.style.width=h,n.style.height=y,n.style.display=w,new Promise(p=>{const g=new Image;g.crossOrigin="anonymous",g.onload=()=>{p(g)},g.onerror=()=>{p(null)},g.src=u})}catch(u){return n.style.width=h,n.style.height=y,n.style.display=w,console.error("[divToImageElement] error: ",u),null}}catch(i){return console.error("[divToImageElement] error: ",i),null}}class V{constructor(e){d(this,"toolsType",c.EToolsKey.BackgroundSVG);d(this,"vNodes");d(this,"workOptions");d(this,"workId");d(this,"markmapInstance",null);d(this,"isDestroyed",!1);d(this,"element");d(this,"manager");d(this,"scenePath");d(this,"trackBackgroundImageLoad");d(this,"reloadSourceUrl");const{vNodes:t,workId:s,toolsOpt:r,manager:a,scenePath:i,trackBackgroundImageLoad:o=!0}=e;this.workId=s,this.vNodes=t,this.workOptions=r,this.manager=a,this.scenePath=i,this.trackBackgroundImageLoad=o,this.element=this.createElement(),this.manager.fullLayer.appendChild(this.element),this.vNodes.setInfo(this.workId,{workShape:this})}get fullLayer(){return this.manager.fullLayer}get collector(){return this.manager.master.control.collector}async init(){await this.render()}createElement(){const{type:e}=this.workOptions;let t;return e===c.ESVGType.markmap?(t=document.createElementNS("http://www.w3.org/2000/svg","svg"),t.classList.add("svg")):(t=document.createElement("img"),t.classList.add("img")),t.id=this.workId,t.setAttribute("data-id",this.workId),t}async render(e){this.isDestroyed||!this.element||!this.element.parentNode||(this.updateElementPosition(e),await this.updateSvg(e))}isSameSize(e){const{width:t,height:s}=e,{width:r,height:a}=this.workOptions,i=t*this.manager.camera.scale,o=s*this.manager.camera.scale,l=r*this.manager.camera.scale,h=a*this.manager.camera.scale;return i===l&&o===h}isSamePosition(e){const{centerX:t,centerY:s}=e,{centerX:r,centerY:a}=this.workOptions,i=this.manager.getPagePoint(r,a),o=this.manager.getPagePoint(t,s);return v.isEqual(o,i)}isSameZIndex(e){const{zIndex:t}=e,{zIndex:s}=this.workOptions;return t===s}isSameState(e){const{state:t}=e,{state:s}=this.workOptions;return v.isEqual(t,s)}isSameData(e){const{data:t}=e,{data:s}=this.workOptions;return v.isEqual(t,s)}updateElementPosition(e){if(this.isDestroyed||!this.element||!this.fullLayer)return;const{centerX:t,centerY:s,width:r,height:a,zIndex:i}=this.workOptions,o=this.manager.getPagePoint(t,s),l=r*this.manager.camera.scale,h=a*this.manager.camera.scale;(!e||e&&!this.isSameSize(e))&&(this.element.setAttribute("width",`${l}`),this.element.setAttribute("height",`${h}`),this.element.style.width=`${l}px`,this.element.style.height=`${h}px`),(!e||e&&!this.isSamePosition(e))&&(this.element.style.left=`${o.x}px`,this.element.style.top=`${o.y}px`),(!e||e&&!this.isSameZIndex(e))&&(this.element.style.zIndex=(i||0).toString())}async updateSvg(e){const{type:t,state:s}=this.workOptions;if(t===c.ESVGType.markmap){const r=c.getMarkmapRuntimeOrThrow(),{data:a}=this.workOptions;if(this.markmapInstance||(this.markmapInstance=r.createMarkmap(this.element,this.manager.markmapOptions),this.markmapInstance.handleClick=async(l,h)=>{var u,p,g;(u=this.markmapInstance)==null||u.toggleNode(h);const y=this.serializeData((p=this.markmapInstance)==null?void 0:p.state.data);this.setWorkOptions({...this.workOptions,state:y},!1),r.checkNodeHasMermaid(h)&&await r.renderMermaidAfterDOMUpdate(this.element,this.workId),this.scenePath&&this.collector&&((g=this.collector)==null||g.dispatch({type:c.EPostMessageType.UpdateNode,workId:this.workId,opt:this.workOptions,isSync:!0,viewId:this.manager.viewId,scenePath:this.scenePath}))}),e&&this.isSameState(e)&&this.isSameSize(e)&&this.isSameData(e))return;const i=r.transform(this.workId,a);let{root:o}=i;a&&r.hasMermaidCodeBlock(a)&&(o=r.injectMermaidHtml(o,a,this.workId));try{s&&Array.isArray(s)&&this.transformState(s,o),await this.markmapInstance.setData(o),!this.isDestroyed&&this.element&&this.fullLayer&&this.markmapInstance&&(window.markmapInstance=this.markmapInstance,a&&r.hasMermaidCodeBlock(a)&&await r.renderMermaidAfterDOMUpdate(this.element,this.workId),await this.fit(!e||e&&!this.isSameData(e)))}catch(l){console.error("[updateSvg] error: ",l)}}else{const{src:r,crossOrigin:a}=this.workOptions,i=this.reloadSourceUrl??r;if(this.element.crossOrigin=v.isString(a)?a:"anonymous",!this.trackBackgroundImageLoad){this.element.src=i,await new Promise((o,l)=>{this.element.onload=()=>o(),this.element.onerror=()=>l()});return}await this.manager.master.control.backgroundImageLoadCoordinator.load({viewId:this.manager.viewId,scenePath:this.scenePath,resourceId:this.workId,src:i,image:this.element,isActive:()=>!this.isDestroyed&&this.manager.master.control.viewContainerManager.getCurScenePath(this.manager.viewId)===this.scenePath,onReloadUrl:o=>{this.reloadSourceUrl=o}})}}async fit(e=!0){var t;if(!this.isDestroyed&&this.element&&this.fullLayer&&this.markmapInstance){const s=c.getMarkmapRuntimeOrThrow();e&&this.element&&await s.waitForImagesInForeignObjects(this.element),await((t=this.markmapInstance)==null?void 0:t.fit()),this.element&&s.isSafari()&&s.hasMermaidSvg(this.element)&&(await O(this.element),await s.transformMermaidSvgToMarkmapSvg(this.element))}}serializeData(e){var r;const t=[e],s=[];for(;t.length>0;){const a=t.pop();a&&(a!=null&&a.children&&t.push(...a.children),s.push(((r=a==null?void 0:a.payload)==null?void 0:r.fold)||0))}return s}transformState(e,t){const s=[t];for(;s.length>0;){const r=s.pop();r&&(r!=null&&r.children&&s.push(...r.children),r.payload?r.payload.fold=e.shift():e.shift())}}async updateCamera(){this.updateElementPosition(),await this.fit(!1)}async setWorkOptions(e,t=!0){if(!v.isEqual(this.workOptions,e)){const s=v.clone(this.workOptions),r="src"in this.workOptions?this.workOptions.src:void 0,a="src"in e?e.src:void 0;r!==a&&(this.reloadSourceUrl=void 0),this.workOptions=e,t&&await this.render(s)}}destroy(){this.isDestroyed=!0,this.reloadSourceUrl=void 0,this.trackBackgroundImageLoad&&this.manager.master.control.backgroundImageLoadCoordinator.cancelResource(this.manager.viewId,this.scenePath,this.workId),this.element.remove()}getRectFromLayer(){const e=this.element.getBoundingClientRect();return{x:e.x,y:e.y,w:e.width,h:e.height}}}function P(n){const{toolsType:e,...t}=n;switch(e){case c.EToolsKey.BackgroundSVG:return new V(t);default:return}}class b{constructor(e){d(this,"viewId");d(this,"fullLayer");d(this,"curNodeMap");this.viewId=e,this.curNodeMap=new c.ObserverMap}init(e){this.fullLayer=e}get(e){return this.curNodeMap.get(e)}setInfo(e,t){const s=this.curNodeMap.get(e)||{name:e,workShape:t.workShape};t.workShape&&(s.workShape=t.workShape),this.curNodeMap.set(e,s)}getNodeRectFormShape(e){const t=this.curNodeMap.get(e);if(t&&t.workShape)return t.workShape.getRectFromLayer()}delete(e){const t=this.curNodeMap.get(e);t&&t.workShape.destroy(),this.curNodeMap.delete(e)}clear(){for(const e of this.curNodeMap.values())e.workShape.destroy();this.curNodeMap.clear()}}class U{constructor(e,t){d(this,"opt");d(this,"viewId");d(this,"fullLayer");d(this,"vNodes");d(this,"master");d(this,"cameraOpt");d(this,"methodBuilder");d(this,"destroyed",!1);d(this,"updateCamera",v.throttle(async e=>{if(this.destroyed)return;const{cameraOpt:t}=e;t&&!v.isEqual(this.cameraOpt,t)&&await this.setCameraOpt(t)},100));this.viewId=e,this.opt=t,this.master=t.master,this.fullLayer=t.container,this.methodBuilder=new F([c.EmitEventType.CopyNode]).registerForBackgroundThread(this),this.vNodes=new b(e),this.vNodes.init(this.fullLayer)}get camera(){return this.cameraOpt||{scale:1,centerX:0,centerY:0,width:0,height:0}}get view(){var e;return(e=this.master.control.viewContainerManager.getView(this.viewId))==null?void 0:e.viewData}get markmapOptions(){return this.master.control.pluginOptions.extras.markmap.options}getPagePoint(e,t){const{scale:s,centerX:r,centerY:a,width:i,height:o}=this.camera;return{x:(e-r)*s+i/2,y:(t-a)*s+o/2}}async setCameraOpt(e){if(!this.destroyed){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){if(this.destroyed)return;const{workShape:s}=t;s&&await s.updateCamera()}}}clearAll(){this.vNodes.clear()}canUseFullLayer(e){return e===c.EToolsKey.BackgroundSVG}async consumeFull(e){if(this.destroyed)return;const{toolsType:t,opt:s,workId:r,scenePath:a}=e;if(r!=null&&r.toString()&&t&&this.canUseFullLayer(t))switch(t){case c.EToolsKey.BackgroundSVG:await this.setFullWork({toolsType:t,opt:s,workId:r,scenePath:a});break}}async setFullWork(e){const{workId:t,opt:s,toolsType:r,scenePath:a}=e;if(t&&s&&r&&a){const i=t.toString();let o;const l=this.vNodes.get(i);return!l||!l.workShape?(o=this.createWorkShapeNode({toolsOpt:s,toolsType:c.EToolsKey.BackgroundSVG,workId:i,scenePath:a}),o&&await o.init()):(o=l.workShape,await o.setWorkOptions(s)),o}}createWorkShapeNode(e){return P({...e,vNodes:this.vNodes,manager:this})}removeWork(e){const{workId:t}=e,s=t==null?void 0:t.toString();s&&this.removeNode(s)}removeNode(e){this.vNodes.delete(e)}async on(e){if(!this.destroyed&&!await this.methodBuilder.consumeForBackgroundThread(e)){if(this.destroyed)return;const{msgType:t,toolsType:s}=e;switch(t){case c.EPostMessageType.Destroy:{this.destroy();break}case c.EPostMessageType.Clear:{this.clearAll();break}case c.EPostMessageType.UpdateCamera:{this.updateCamera(e);break}case c.EPostMessageType.UpdateTools:{this.toggleFullLayer(s===c.EToolsKey.Clicker);break}case c.EPostMessageType.BackgroundSVGUpdate:case c.EPostMessageType.UpdateNode:case c.EPostMessageType.FullWork:{s&&this.canUseFullLayer(s)&&await this.consumeFull(e);break}case c.EPostMessageType.BackgroundSVGDelete:{this.removeWork(e);break}}}}toggleFullLayer(e){this.destroyed||this.fullLayer.classList.toggle("appliance-plugin-background-svg-active",e)}destroy(){this.destroyed||(this.destroyed=!0,this.updateCamera.cancel(),this.vNodes.clear())}}class D{constructor(e,t){d(this,"viewId");d(this,"fullLayer");d(this,"master");d(this,"vNodes");d(this,"cameraOpt");d(this,"opt");d(this,"workShapes",new Map);d(this,"destroyed",!1);d(this,"activeRequest");this.viewId=e,this.opt=t,this.master=t.master,this.fullLayer=t.container,this.vNodes=new b(e),this.vNodes.init(this.fullLayer)}get camera(){return this.cameraOpt||{scale:1,centerX:0,centerY:0,width:0,height:0}}get view(){var e;return(e=this.master.control.viewContainerManager.getView(this.viewId))==null?void 0:e.viewData}get markmapOptions(){return this.master.control.pluginOptions.extras.markmap.options}reportRequestFailure(e,t,s,r,a){const i=r instanceof Error?r.message:String(r);try{this.opt.post({sp:[{type:c.EPostMessageType.ReportError,viewId:this.viewId,scenePath:s,requestId:t,reportBusiness:e,reportStage:a,reportError:i,reportString:`[BackgroundSnapshotThread] ${e} failed; stage=${a}; requestId=${t||"unknown"}; error=${i}`}]})}catch(o){console.error(`[BackgroundSnapshotThread] ${e} failure report failed`,o)}}createOffscreenCanvas(e){const{width:t,height:s}=e.canvasOpt,r=new OffscreenCanvas(e.canvasOpt.width,e.canvasOpt.height);r.width=t,r.height=s}async setCameraOpt(e){if(!this.destroyed){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){if(this.destroyed)return;const{workShape:s}=t;s&&await s.updateCamera()}}}getPagePoint(e,t){const{scale:s,centerX:r,centerY:a,width:i,height:o}=this.camera;return{x:(e-r)*s+i/2,y:(t-a)*s+o/2}}async getSnapshot(e){var i;if(this.destroyed)return;const{scenePath:t,scenes:s,cameraOpt:r,requestId:a}=e;this.activeRequest={business:"snapshot",scenePath:t,requestId:a};try{if(!(t&&s&&r))throw new Error("snapshot input is incomplete");await this.setCameraOpt(r);for(const[l,h]of Object.entries(s)){if(this.destroyed)return;if(h!=null&&h.type&&(h==null?void 0:h.toolsType)===c.EToolsKey.BackgroundSVG)switch(h==null?void 0:h.type){case c.EPostMessageType.UpdateNode:case c.EPostMessageType.FullWork:{const{opt:y}=h,w={...h,opt:y,workId:l,msgType:c.EPostMessageType.FullWork,dataType:c.EDataType.Service,viewId:this.viewId,scenePath:t,requestId:a};await this.runFullWork(w);break}default:break}}if(await O(this.fullLayer),this.destroyed||(await R(this.fullLayer),this.destroyed)||(await x(this.fullLayer),this.destroyed))return;const o=await $(this.fullLayer);if(!this.destroyed&&o)this.opt.post({sp:[{type:c.EPostMessageType.Snapshot,scenePath:t,imageElement:o,viewId:this.viewId,index:1,requestId:a}]});else if(!this.destroyed)throw new Error("snapshot image element is empty")}catch(o){this.destroyed||this.reportRequestFailure("snapshot",a,t,o,"render")}finally{((i=this.activeRequest)==null?void 0:i.requestId)===a&&(this.activeRequest=void 0)}}createWorkShapeNode(e){return P({...e,vNodes:this.vNodes,manager:this,trackBackgroundImageLoad:!1})}async setFullWork(e){const{workId:t,opt:s,toolsType:r,scenePath:a}=e;if(t&&s&&r&&a){const i=t.toString();let o;const l=this.vNodes.get(i);return!l||!l.workShape?(o=this.createWorkShapeNode({toolsOpt:s,toolsType:c.EToolsKey.BackgroundSVG,workId:i,scenePath:a}),o&&await o.init()):(o=l.workShape,await o.setWorkOptions(s)),o}}async runFullWork(e){if(this.destroyed)return;const{toolsType:t,opt:s,workId:r,scenePath:a}=e;await this.setFullWork({toolsType:t,opt:s,workId:r,scenePath:a})}destroy(e){this.destroyed||(e&&this.activeRequest&&this.reportRequestFailure("snapshot",this.activeRequest.requestId,this.activeRequest.scenePath,new Error(`snapshot request ${e}`),e),this.activeRequest=void 0,this.destroyed=!0,this.fullLayer.innerHTML="",this.fullLayer.style.width="",this.fullLayer.style.height="")}}class H{constructor(e){d(this,"backgroundThreadMap",new Map);d(this,"snapshotThreadsByRequest",new Map);d(this,"destroyed",!1);d(this,"master");d(this,"post",e=>{if(this.destroyed)return;const{sp:t}=e;t&&this.master.collectorSyncData(t)});this.master=e,this.backgroundThreadMap=new Map}createBackgroundThread(e,t){return new U(e,t)}createSnapshotThread(e,t){return new D(e,t)}getSnapshotRequestKey(e){return e.requestId||`${e.viewId}\0${e.scenePath||""}\0${e.msgType}`}disposeSnapshotThread(e,t,s){const r=this.snapshotThreadsByRequest.get(e);if(!(!r||r.thread!==t)){this.snapshotThreadsByRequest.delete(e);try{t.destroy(s)}finally{r.surface.remove()}}}async consume(e){var t,s,r,a,i;if(!this.destroyed)for(const o of e.values()){if(this.destroyed)return;const{msgType:l,viewId:h,layerOpt:y,offscreenCanvasOpt:w,cameraOpt:u,tasksqueue:p}=o;if(l===c.EPostMessageType.Console){console.log(this);continue}if(l===c.EPostMessageType.Init){const m=(t=this.master.control.viewContainerManager.getView(h))==null?void 0:t.displayer,T=(s=m==null?void 0:m.backgroundContainerRef)==null?void 0:s.current;if(m&&T&&y&&w){const f=this.backgroundThreadMap.get(h);f==null||f.destroy();const k=this.createBackgroundThread(h,{displayer:m,container:T,layerOpt:y,master:this.master,canvasOpt:w,post:this.post});this.backgroundThreadMap.set(h,k),k&&u&&await k.setCameraOpt(u)}continue}if(l===c.EPostMessageType.Snapshot){const m=(r=this.master.control.viewContainerManager.getView(h))==null?void 0:r.displayer,f=(i=((a=this.master.control.viewContainerManager.mainView)==null?void 0:a.displayer).backgroundSnapshotContainerRef)==null?void 0:i.current;if(m&&f&&u){const k=this.getSnapshotRequestKey(o),E=this.snapshotThreadsByRequest.get(k);E&&this.disposeSnapshotThread(k,E.thread,"replaced");const S=document.createElement("div");S.style.width=`${u.width}px`,S.style.height=`${u.height}px`,f.append(S);const q={...c.ViewContainerManager.defaultLayerOpt,offscreen:!1,width:u.width,height:u.height},N={...c.ViewContainerManager.defaultScreenCanvasOpt,width:u.width,height:u.height},I=this.createSnapshotThread(h,{displayer:m,container:S,layerOpt:q,master:this.master,canvasOpt:N,post:this.post});this.snapshotThreadsByRequest.set(k,{thread:I,surface:S}),I.getSnapshot(o).catch(M=>{this.master.Logger.error(`[Appliance]: background snapshot render failed; viewId=${h}; error=${M instanceof Error?M.message:String(M)}`)}).finally(()=>{this.disposeSnapshotThread(k,I)});continue}this.post({sp:[{type:c.EPostMessageType.ReportError,viewId:h,scenePath:o.scenePath,requestId:o.requestId,reportBusiness:"snapshot",reportStage:"surface-unavailable",reportError:"background snapshot surface is unavailable",reportString:`[BackgroundThreadManager] snapshot surface is unavailable; viewId=${h}; requestId=${o.requestId||"unknown"}`}]})}if(l===c.EPostMessageType.TasksQueue&&(p!=null&&p.size)){for(const[m,T]of this.backgroundThreadMap.entries()){const f=p.get(m);f&&await T.on(f)}continue}if(h===c.Storage_ViewId_ALL){for(const m of this.backgroundThreadMap.values())await m.on(o);l===c.EPostMessageType.Destroy&&this.backgroundThreadMap.clear();continue}const g=this.backgroundThreadMap.get(h);g&&(await g.on(o),l===c.EPostMessageType.Destroy&&this.backgroundThreadMap.get(h)===g&&this.backgroundThreadMap.delete(h))}}async consumeTargetOne(e,t){if(this.destroyed)return;const s=this.backgroundThreadMap.get(e);s&&await s.on(t)}discardView(e){for(const[s,r]of[...this.snapshotThreadsByRequest.entries()])r.thread.viewId===e&&this.disposeSnapshotThread(s,r.thread,"view-destroyed");const t=this.backgroundThreadMap.get(e);try{t==null||t.destroy()}catch(s){this.master.Logger.error(`[Appliance]: BackgroundThread View discard failed; viewId=${e}; error=${s instanceof Error?s.message:String(s)}`)}this.backgroundThreadMap.delete(e)}destroy(){if(this.destroyed)return;const e=[];for(const[t,s]of[...this.snapshotThreadsByRequest.entries()])try{this.disposeSnapshotThread(t,s.thread,"manager-destroyed")}catch(r){e.push(`snapshot-thread: ${r instanceof Error?r.message:String(r)}`)}this.snapshotThreadsByRequest.clear(),this.destroyed=!0;for(const t of this.backgroundThreadMap.values())try{t.destroy()}catch(s){e.push(`background-thread: ${s instanceof Error?s.message:String(s)}`)}this.backgroundThreadMap.clear(),e.length&&this.master.Logger.error(`[Appliance]: BackgroundThread destroy completed with cleanup errors: ${e.join("; ")}`)}}exports.BackgroundThreadManagerImpl=H;
|