@netless/appliance-plugin 1.1.40 → 1.1.42-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +31 -0
  2. package/dist/appliance-plugin.js +1 -1
  3. package/dist/appliance-plugin.mjs +17 -16
  4. package/dist/{bridge-b23MKtwT.mjs → bridge-B-QptMEy.mjs} +1 -1
  5. package/dist/{bridge-DLEmhE7Y.js → bridge-hRl_DY0c.js} +1 -1
  6. package/dist/bridge.js +1 -1
  7. package/dist/bridge.mjs +1 -1
  8. package/dist/component/backgroundImageLoadCoordinator.d.ts +61 -0
  9. package/dist/component/svg/base.d.ts +2 -0
  10. package/dist/component/svg/svgElemt.d.ts +3 -1
  11. package/dist/component/svg/types.d.ts +2 -0
  12. package/dist/component/textEditor/types.d.ts +2 -0
  13. package/dist/core/currentSceneGuard.d.ts +6 -0
  14. package/dist/core/initReadyBarrier.d.ts +8 -0
  15. package/dist/core/mainEngine.d.ts +4 -2
  16. package/dist/core/mainThread/base.d.ts +3 -3
  17. package/dist/core/mainThread/snapshotThread.d.ts +3 -3
  18. package/dist/core/mainThread/subLocalThread.d.ts +1 -1
  19. package/dist/core/mainThread/subServiceThread.d.ts +1 -1
  20. package/dist/fullWorker.js +85 -85
  21. package/dist/{index-rhSRO8Tb.mjs → index-1g93HWeU.mjs} +9106 -8749
  22. package/dist/{index-CDDMgpaL.js → index-B0MSTcdT.js} +1 -1
  23. package/dist/index-BpRy_vjc.js +570 -0
  24. package/dist/index-BtNb2M5H.js +1 -0
  25. package/dist/{index-WifS74pI.mjs → index-BwbqPE3q.mjs} +234 -210
  26. package/dist/{index-pyv2KvXa.mjs → index-C3e6mT0j.mjs} +221 -201
  27. package/dist/{index-BSR23bx5.mjs → index-CCO-qEim.mjs} +1 -1
  28. package/dist/{index-CDbcv4B7.js → index-CgEdhx54.js} +1 -1
  29. package/dist/index-CgJv1Exy.js +570 -0
  30. package/dist/{index-GpA_9BZu.mjs → index-DJS3KHjE.mjs} +12695 -12377
  31. package/dist/{index-C3XOupI-.mjs → index-DUVQmCiI.mjs} +1 -1
  32. package/dist/index-vIt18mo2.js +1 -0
  33. package/dist/plugin/applianceMultiPlugin.d.ts +1 -1
  34. package/dist/plugin/applianceSinglePlugin.d.ts +1 -1
  35. package/dist/plugin/backgroundImageQuery.d.ts +4 -0
  36. package/dist/plugin/baseApplianceManager.d.ts +7 -3
  37. package/dist/plugin/renderingCompatibility.d.ts +2 -1
  38. package/dist/plugin/types.d.ts +35 -2
  39. package/dist/subWorker.js +61 -61
  40. package/package.json +9 -4
  41. package/dist/index-DKaa5HSe.js +0 -1
  42. package/dist/index-DoIyQYzA.js +0 -570
  43. package/dist/index-DwW4gzgA.js +0 -1
  44. package/dist/index-RKd-OVPO.js +0 -570
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netless/appliance-plugin",
3
- "version": "1.1.40",
3
+ "version": "1.1.42-beta.0",
4
4
  "files": [
5
5
  "dist",
6
6
  "bridge.d.ts",
@@ -42,7 +42,7 @@
42
42
  "example:lint": "pnpm --dir example lint",
43
43
  "example:typecheck": "pnpm exec tsc --noEmit -p example/tsconfig.json",
44
44
  "sync:fastboard-docs": "node scripts/sync-fastboard-docs.mjs",
45
- "ci:check": "pnpm lint && pnpm test:auto-shape && pnpm test:rendering-compatibility && pnpm build && pnpm example:typecheck",
45
+ "ci:check": "pnpm lint && pnpm test:auto-shape && pnpm test:rendering-compatibility && pnpm test:background-image-load:coverage && pnpm test:background-image-query && pnpm test:current-scene-guard && pnpm test:init-ready && pnpm build && pnpm example:typecheck",
46
46
  "test:text-editor-focus": "tsx scripts/textEditorFocus.test.ts",
47
47
  "test:auto-shape": "tsx test/autoShape.test.ts",
48
48
  "test:undo-timing": "tsx test/undoTiming.test.ts",
@@ -50,12 +50,17 @@
50
50
  "test:batch-scheduler": "tsx scripts/batchScheduler.test.ts",
51
51
  "test:transaction-barrier": "cross-env NODE_OPTIONS=--require=./scripts/registerAssetStubs.cjs tsx scripts/transactionBarrier.test.ts",
52
52
  "test:current-scene-guard": "tsx scripts/currentSceneGuard.test.ts",
53
+ "test:init-ready": "tsx scripts/initReadyBarrier.test.ts",
54
+ "test:init-reentry:stress": "playwright test tests/init-reentry.stress.spec.ts",
53
55
  "test:undo-timing:coverage": "c8 --reporter=text --reporter=html --include=src/undo/timing.ts --check-coverage --statements 90 --lines 90 --branches 90 --functions 90 tsx test/undoTiming.test.ts",
54
56
  "test:selector-api": "tsx test/selectorApi.test.ts",
55
57
  "test:rendering-compatibility": "tsx scripts/renderingCompatibility.test.ts",
56
58
  "test:cursor-appearance": "tsx scripts/cursorAppearance.test.ts",
57
59
  "test:bitmap-eraser": "tsx scripts/bitmapEraserCapability.test.ts && tsx scripts/bitmapRasterGeometry.test.ts && tsx scripts/vNodeSpatialIndex.test.ts && tsx scripts/eraserFaces.test.ts",
58
60
  "test:sync-logger": "tsx scripts/syncLogger.test.ts",
61
+ "test:background-image-load": "tsx scripts/backgroundImageLoadCoordinator.test.ts",
62
+ "test:background-image-query": "tsx scripts/backgroundImageQuery.test.ts",
63
+ "test:background-image-load:coverage": "c8 --reporter=text --include=src/component/backgroundImageLoadCoordinator.ts --check-coverage --statements 90 --lines 90 --branches 90 --functions 90 tsx scripts/backgroundImageLoadCoordinator.test.ts",
59
64
  "benchmark:bitmap-eraser": "tsx scripts/bitmapEraser.benchmark.ts",
60
65
  "test:selector-api:coverage": "c8 --reporter=text --reporter=html --include=src/plugin/selectorApi.ts --check-coverage --statements 90 --lines 90 --functions 100 tsx test/selectorApi.test.ts",
61
66
  "test:selector-api:coverage:context": "c8 --reporter=text --reporter=html --include=src/plugin/selectorApi.ts --include=src/core/mainEngine.ts --include=src/plugin/applianceSinglePlugin.ts --include=src/plugin/applianceMultiPlugin.ts tsx test/selectorApi.test.ts",
@@ -76,7 +81,7 @@
76
81
  "@babel/plugin-transform-class-properties": "^7.27.1",
77
82
  "@babel/plugin-transform-object-rest-spread": "^7.28.4",
78
83
  "@babel/preset-env": "^7.24.7",
79
- "@netless/window-manager": "^1.0.18",
84
+ "@netless/window-manager": "^1.0.19",
80
85
  "@playwright/test": "^1.61.0",
81
86
  "@rollup/plugin-babel": "^6.0.4",
82
87
  "@types/dom-to-image": "^2.6.7",
@@ -104,7 +109,7 @@
104
109
  "typescript": "^5.2.2",
105
110
  "vite": "^5.0.0",
106
111
  "vitest": "^4.1.9",
107
- "white-web-sdk": "^2.16.56"
112
+ "white-web-sdk": "^2.16.57"
108
113
  },
109
114
  "peerDependencies": {
110
115
  "@netless/window-manager": ">=1.0",
@@ -1 +0,0 @@
1
- "use strict";var P=Object.defineProperty;var b=(i,e,t)=>e in i?P(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var c=(i,e,t)=>b(i,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("./index-RKd-OVPO.js"),f=require("lodash");require("clipper-lib");require("lz-string");require("lineclip");require("xss");require("rbush");require("react-dom");require("react");class N{constructor(){c(this,"threadEngine")}registerBackgroundThread(e){return this.threadEngine=e,this}}class C extends N{constructor(){super(...arguments);c(this,"emitEventType",h.EmitEventType.CopyNode)}async consume(t){const{msgType:s,dataType:r,emitEventType:a}=t;if(s===h.EPostMessageType.FullWork&&r===h.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 L{constructor(e){c(this,"builders",new Map);this.builders=new Map(e.map(t=>[t,this.build(t)]))}build(e){switch(e){case h.EmitEventType.CopyNode:return new C}}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 W(i){const e=i.querySelectorAll("img"),t=Array.from(e).map(a=>{if(!a.crossOrigin&&a.src&&!a.src.startsWith("data:")&&(a.crossOrigin="anonymous",a.complete)){const o=a.src;a.src="",a.src=o}return a.complete&&a.crossOrigin?Promise.resolve():new Promise(o=>{a.onload=()=>{o(void 0)},a.onerror=()=>{o(void 0)}})});return i.querySelectorAll("svg").forEach(a=>{a.querySelectorAll("image").forEach(n=>{n.href&&!n.href.baseVal.startsWith("data:")&&(n.getAttribute("crossorigin")||n.setAttribute("crossorigin","anonymous"),t.push(new Promise(l=>{const d=new Image;d.crossOrigin="anonymous",d.onload=()=>{l(void 0)},d.onerror=()=>{l(void 0)},d.src=n.href.baseVal})))})}),await Promise.all(t)}async function F(i){const s=Date.now();let r=!1;for(;Date.now()-s<5e3;){const a=i.querySelectorAll("path");if(a.length>0&&(r=Array.from(a).some(o=>{const n=o.getAttribute("d")||"";return n!=="M0,0C0,0,0,0,0,0"&&n.length>10}),r))break;await new Promise(o=>setTimeout(o,50))}}async function B(i){const e=i.querySelectorAll("svg");if(!e.length)return;const t=[];for(let s=0;s<e.length;s++){const r=e[s];t.push(F(r))}await Promise.all(t)}async function M(i){if(i.querySelectorAll("svg[data-type='mermaid']").length>0){const s=Date.now();let r=!1;for(;Date.now()-s<5e3&&!r;){const a=i.querySelectorAll("foreignObject");if(a.length>0){let o=!0;for(const n of Array.from(a)){const l=parseFloat(n.getAttribute("width")||"0"),d=parseFloat(n.getAttribute("height")||"0");if(n.querySelector(".mermaid-container")&&(l<50||d<50)){o=!1;break}}if(o){r=!0;break}}else r=!0;await new Promise(o=>setTimeout(o,50))}}}async function x(i,e={}){const{width:t=i.offsetWidth,height:s=i.offsetHeight}=e,r=i.offsetWidth||t,a=i.offsetHeight||s;try{const{loadSvgToImageLib:o,getSvgToImageLib:n}=await Promise.resolve().then(()=>require("./svgToImageLoader-B3gIDAQo.js"));let l=n();if(!l)try{l=await o()}catch(w){return console.error("[loadSvgToImageLib] error: ",w),null}const d=i.style.width,u=i.style.height,k=i.style.display;i.style.width||(i.style.width=`${r}px`),i.style.height||(i.style.height=`${a}px`),(!i.style.display||i.style.display==="none")&&(i.style.display="block");try{await new Promise(p=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{p()})})});const w=await l.toPng(i,{width:r,height:a,quality:1});return i.style.width=d,i.style.height=u,i.style.display=k,new Promise(p=>{const m=new Image;m.crossOrigin="anonymous",m.onload=()=>{p(m)},m.onerror=()=>{p(null)},m.src=w})}catch(w){return i.style.width=d,i.style.height=u,i.style.display=k,console.error("[divToImageElement] error: ",w),null}}catch(o){return console.error("[divToImageElement] error: ",o),null}}class A{constructor(e){c(this,"toolsType",h.EToolsKey.BackgroundSVG);c(this,"vNodes");c(this,"workOptions");c(this,"workId");c(this,"markmapInstance",null);c(this,"isDestroyed",!1);c(this,"element");c(this,"manager");const{vNodes:t,workId:s,toolsOpt:r,manager:a}=e;this.workId=s,this.vNodes=t,this.workOptions=r,this.manager=a,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}get scenePath(){return this.manager.master.control.viewContainerManager.getCurScenePath(this.manager.viewId)}async init(){await this.render()}createElement(){const{type:e}=this.workOptions;let t;return e===h.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,o=t*this.manager.camera.scale,n=s*this.manager.camera.scale,l=r*this.manager.camera.scale,d=a*this.manager.camera.scale;return o===l&&n===d}isSamePosition(e){const{centerX:t,centerY:s}=e,{centerX:r,centerY:a}=this.workOptions,o=this.manager.getPagePoint(r,a),n=this.manager.getPagePoint(t,s);return f.isEqual(n,o)}isSameZIndex(e){const{zIndex:t}=e,{zIndex:s}=this.workOptions;return t===s}isSameState(e){const{state:t}=e,{state:s}=this.workOptions;return f.isEqual(t,s)}isSameData(e){const{data:t}=e,{data:s}=this.workOptions;return f.isEqual(t,s)}updateElementPosition(e){if(this.isDestroyed||!this.element||!this.fullLayer)return;const{centerX:t,centerY:s,width:r,height:a,zIndex:o}=this.workOptions,n=this.manager.getPagePoint(t,s),l=r*this.manager.camera.scale,d=a*this.manager.camera.scale;(!e||e&&!this.isSameSize(e))&&(this.element.setAttribute("width",`${l}`),this.element.setAttribute("height",`${d}`),this.element.style.width=`${l}px`,this.element.style.height=`${d}px`),(!e||e&&!this.isSamePosition(e))&&(this.element.style.left=`${n.x}px`,this.element.style.top=`${n.y}px`),(!e||e&&!this.isSameZIndex(e))&&(this.element.style.zIndex=(o||0).toString())}async updateSvg(e){const{type:t,state:s}=this.workOptions;if(t===h.ESVGType.markmap){const r=h.getMarkmapRuntimeOrThrow(),{data:a}=this.workOptions;if(this.markmapInstance||(this.markmapInstance=r.createMarkmap(this.element,this.manager.markmapOptions),this.markmapInstance.handleClick=async(l,d)=>{var w,p,m;(w=this.markmapInstance)==null||w.toggleNode(d);const u=this.serializeData((p=this.markmapInstance)==null?void 0:p.state.data);this.setWorkOptions({...this.workOptions,state:u},!1),r.checkNodeHasMermaid(d)&&await r.renderMermaidAfterDOMUpdate(this.element,this.workId),this.scenePath&&this.collector&&((m=this.collector)==null||m.dispatch({type:h.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 o=r.transform(this.workId,a);let{root:n}=o;a&&r.hasMermaidCodeBlock(a)&&(n=r.injectMermaidHtml(n,a,this.workId));try{s&&Array.isArray(s)&&this.transformState(s,n),await this.markmapInstance.setData(n),!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;this.element.src=r,this.element.crossOrigin=f.isString(a)?a:"anonymous";try{await new Promise((o,n)=>{this.element.onload=()=>{o()},this.element.onerror=function(){n()}})}catch(o){console.error("[updateSvg] error: ",o)}}}async fit(e=!0){var t;if(!this.isDestroyed&&this.element&&this.fullLayer&&this.markmapInstance){const s=h.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 M(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(!f.isEqual(this.workOptions,e)){const s=f.clone(this.workOptions);this.workOptions=e,t&&await this.render(s)}}destroy(){this.isDestroyed=!0,this.element.remove()}getRectFromLayer(){const e=this.element.getBoundingClientRect();return{x:e.x,y:e.y,w:e.width,h:e.height}}}function I(i){const{toolsType:e,...t}=i;switch(e){case h.EToolsKey.BackgroundSVG:return new A(t);default:return}}class O{constructor(e){c(this,"viewId");c(this,"fullLayer");c(this,"curNodeMap");this.viewId=e,this.curNodeMap=new h.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 q{constructor(e,t){c(this,"opt");c(this,"viewId");c(this,"fullLayer");c(this,"vNodes");c(this,"master");c(this,"cameraOpt");c(this,"methodBuilder");c(this,"updateCamera",f.throttle(async e=>{const{cameraOpt:t}=e;t&&!f.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 L([h.EmitEventType.CopyNode]).registerForBackgroundThread(this),this.vNodes=new O(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:o,height:n}=this.camera;return{x:(e-r)*s+o/2,y:(t-a)*s+n/2}}async setCameraOpt(e){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){const{workShape:s}=t;s&&await s.updateCamera()}}clearAll(){this.vNodes.clear()}canUseFullLayer(e){return e===h.EToolsKey.BackgroundSVG}async consumeFull(e){const{toolsType:t,opt:s,workId:r}=e;if(r!=null&&r.toString()&&t&&this.canUseFullLayer(t))switch(t){case h.EToolsKey.BackgroundSVG:await this.setFullWork({toolsType:t,opt:s,workId:r});break}}async setFullWork(e){const{workId:t,opt:s,toolsType:r}=e;if(t&&s&&r){const a=t.toString();let o;const n=this.vNodes.get(a);return!n||!n.workShape?(o=this.createWorkShapeNode({toolsOpt:s,toolsType:h.EToolsKey.BackgroundSVG,workId:a}),o&&await o.init()):(o=n.workShape,await o.setWorkOptions(s)),o}}createWorkShapeNode(e){return I({...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(!await this.methodBuilder.consumeForBackgroundThread(e)){const{msgType:t,toolsType:s}=e;switch(t){case h.EPostMessageType.Destroy:{this.destroy();break}case h.EPostMessageType.Clear:{this.clearAll();break}case h.EPostMessageType.UpdateCamera:{this.updateCamera(e);break}case h.EPostMessageType.UpdateTools:{this.toggleFullLayer(s===h.EToolsKey.Clicker);break}case h.EPostMessageType.BackgroundSVGUpdate:case h.EPostMessageType.UpdateNode:case h.EPostMessageType.FullWork:{s&&this.canUseFullLayer(s)&&await this.consumeFull(e);break}case h.EPostMessageType.BackgroundSVGDelete:{this.removeWork(e);break}}}}toggleFullLayer(e){this.fullLayer.classList.toggle("appliance-plugin-background-svg-active",e)}destroy(){this.vNodes.clear()}}class V{constructor(e,t){c(this,"viewId");c(this,"fullLayer");c(this,"master");c(this,"vNodes");c(this,"cameraOpt");c(this,"opt");c(this,"workShapes",new Map);this.viewId=e,this.opt=t,this.master=t.master,this.fullLayer=t.container,this.vNodes=new O(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}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){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){const{workShape:s}=t;s&&await s.updateCamera()}}getPagePoint(e,t){const{scale:s,centerX:r,centerY:a,width:o,height:n}=this.camera;return{x:(e-r)*s+o/2,y:(t-a)*s+n/2}}async getSnapshot(e){const{scenePath:t,scenes:s,cameraOpt:r}=e;if(t&&s&&r){await this.setCameraOpt(r);for(const[a,o]of Object.entries(s))if(o!=null&&o.type&&(o==null?void 0:o.toolsType)===h.EToolsKey.BackgroundSVG)switch(o==null?void 0:o.type){case h.EPostMessageType.UpdateNode:case h.EPostMessageType.FullWork:{const{opt:n}=o,l={...o,opt:n,workId:a,msgType:h.EPostMessageType.FullWork,dataType:h.EDataType.Service,viewId:this.viewId};await this.runFullWork(l);break}}try{if(t){await M(this.fullLayer),await W(this.fullLayer),await B(this.fullLayer);const a=await x(this.fullLayer);a&&this.opt.post({sp:[{type:h.EPostMessageType.Snapshot,scenePath:t,imageElement:a,viewId:this.viewId,index:1}]})}}catch(a){const o=a&&a instanceof Error?a.message:a==null?void 0:a.toString();this.opt.post({sp:[{type:h.EPostMessageType.ReportError,reportString:`[SnapshotThreadImpl] getSnapshotRender error: ${o}`}]})}}}createWorkShapeNode(e){return I({...e,vNodes:this.vNodes,manager:this})}async setFullWork(e){const{workId:t,opt:s,toolsType:r}=e;if(t&&s&&r){const a=t.toString();let o;const n=this.vNodes.get(a);return!n||!n.workShape?(o=this.createWorkShapeNode({toolsOpt:s,toolsType:h.EToolsKey.BackgroundSVG,workId:a}),o&&await o.init()):(o=n.workShape,await o.setWorkOptions(s)),o}}async runFullWork(e){const{toolsType:t,opt:s,workId:r}=e;await this.setFullWork({toolsType:t,opt:s,workId:r})}destroy(){this.fullLayer.innerHTML="",this.fullLayer.style.width="",this.fullLayer.style.height=""}}class D{constructor(e){c(this,"backgroundThreadMap",new Map);c(this,"snapshotThread");c(this,"master");c(this,"post",e=>{const{sp:t}=e;t&&this.master.collectorSyncData(t)});this.master=e,this.backgroundThreadMap=new Map}createBackgroundThread(e,t){return new q(e,t)}createSnapshotThread(e,t){return new V(e,t)}async consume(e){var t,s,r,a,o,n;for(const l of e.values()){const{msgType:d,viewId:u,layerOpt:k,offscreenCanvasOpt:w,cameraOpt:p,tasksqueue:m}=l;if(d===h.EPostMessageType.Console){console.log(this);continue}if(d===h.EPostMessageType.Init){const g=(t=this.master.control.viewContainerManager.getView(u))==null?void 0:t.displayer,T=(s=g==null?void 0:g.backgroundContainerRef)==null?void 0:s.current;if(g&&T&&k&&w){const y=this.backgroundThreadMap.get(u);y==null||y.destroy();const v=this.createBackgroundThread(u,{displayer:g,container:T,layerOpt:k,master:this.master,canvasOpt:w,post:this.post});this.backgroundThreadMap.set(u,v),v&&p&&await v.setCameraOpt(p)}continue}if(d===h.EPostMessageType.Snapshot){const g=(r=this.master.control.viewContainerManager.getView(u))==null?void 0:r.displayer,y=(o=((a=this.master.control.viewContainerManager.mainView)==null?void 0:a.displayer).backgroundSnapshotContainerRef)==null?void 0:o.current;if(g&&y&&p){(n=this.snapshotThread)==null||n.destroy(),y.style.width=`${p.width}px`,y.style.height=`${p.height}px`;const v={...h.ViewContainerManager.defaultLayerOpt,offscreen:!1,width:p.width,height:p.height},E={...h.ViewContainerManager.defaultScreenCanvasOpt,width:p.width,height:p.height};this.snapshotThread=this.createSnapshotThread(u,{displayer:g,container:y,layerOpt:v,master:this.master,canvasOpt:E,post:this.post}),await this.snapshotThread.getSnapshot(l),this.snapshotThread.destroy(),this.snapshotThread=void 0;continue}}if(d===h.EPostMessageType.TasksQueue&&(m!=null&&m.size)){for(const[g,T]of this.backgroundThreadMap.entries()){const y=m.get(g);y&&await T.on(y)}continue}if(u===h.Storage_ViewId_ALL){for(const g of this.backgroundThreadMap.values())await g.on(l);d===h.EPostMessageType.Destroy&&this.backgroundThreadMap.clear();continue}const S=this.backgroundThreadMap.get(u);S&&(await S.on(l),d===h.EPostMessageType.Destroy&&this.backgroundThreadMap.delete(u))}}async consumeTargetOne(e,t){const s=this.backgroundThreadMap.get(e);s&&await s.on(t)}destroy(){var e;(e=this.snapshotThread)==null||e.destroy(),this.snapshotThread=void 0;for(const t of this.backgroundThreadMap.values())t.destroy();this.backgroundThreadMap.clear()}}exports.BackgroundThreadManagerImpl=D;