@forgeax/view 0.5.0-dev.13604.c415409c3b9d → 0.5.0-dev.13713.d28c4863d779
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/README.md +67 -9
- package/dist/build-revision.json +1 -1
- package/dist/modules/backend.mjs +34 -34
- package/dist/modules/browser.mjs +55 -49
- package/dist/modules/chunks/{chunk-EWSCJF77.mjs → chunk-2CMCY54A.mjs} +2 -2
- package/dist/modules/chunks/{chunk-M6S5YA6X.mjs → chunk-2RUKPDIE.mjs} +4 -4
- package/dist/modules/chunks/{chunk-M6S5YA6X.mjs.map → chunk-2RUKPDIE.mjs.map} +1 -1
- package/dist/modules/chunks/{chunk-DWT3TA6M.mjs → chunk-3FBX3P3H.mjs} +9 -8
- package/dist/modules/chunks/chunk-3FBX3P3H.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-6KM24NH6.mjs → chunk-3Y5WN22T.mjs} +3 -3
- package/dist/modules/chunks/chunk-3Y5WN22T.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-YFQGSDK3.mjs → chunk-45WL24XN.mjs} +2 -2
- package/dist/modules/chunks/{chunk-FMCHH5R4.mjs → chunk-4FYKRL46.mjs} +3 -3
- package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs → chunk-4MJHVZMB.mjs} +6 -6
- package/dist/modules/chunks/{chunk-XQYF2P6M.mjs → chunk-5HVXQEO3.mjs} +7 -7
- package/dist/modules/chunks/{chunk-XMP4THLF.mjs → chunk-66LM6NO6.mjs} +4 -4
- package/dist/modules/chunks/{chunk-P4UPH74B.mjs → chunk-6C4OCCYB.mjs} +12 -12
- package/dist/modules/chunks/{chunk-P4UPH74B.mjs.map → chunk-6C4OCCYB.mjs.map} +1 -1
- package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs → chunk-6J27SWMY.mjs} +1 -1
- package/dist/modules/chunks/{chunk-JK7K7RG3.mjs → chunk-6VK7HB4X.mjs} +4 -4
- package/dist/modules/chunks/{chunk-HRKW766Y.mjs → chunk-6WZZ7TIC.mjs} +2 -2
- package/dist/modules/chunks/{chunk-FICPCJKR.mjs → chunk-7DFCIN3T.mjs} +3 -3
- package/dist/modules/chunks/{chunk-FICPCJKR.mjs.map → chunk-7DFCIN3T.mjs.map} +1 -1
- package/dist/modules/chunks/{chunk-U64FRQKP.mjs → chunk-7MWZK7HS.mjs} +3 -3
- package/dist/modules/chunks/{chunk-F5RLQAPN.mjs → chunk-A7OGXJAV.mjs} +3 -3
- package/dist/modules/chunks/{chunk-QUFVUMSY.mjs → chunk-AUINYWZP.mjs} +2 -2
- package/dist/modules/chunks/{chunk-PZIAKZJC.mjs → chunk-B24VYGHV.mjs} +3 -3
- package/dist/modules/chunks/{chunk-SRYQLFBV.mjs → chunk-BIUWJROZ.mjs} +3 -3
- package/dist/modules/chunks/{chunk-SRYQLFBV.mjs.map → chunk-BIUWJROZ.mjs.map} +2 -2
- package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs → chunk-C2AMOM7H.mjs} +3 -3
- package/dist/modules/chunks/{chunk-IZAHIOFU.mjs → chunk-C3WVSJZF.mjs} +6 -6
- package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs → chunk-CAXCOZ7Y.mjs} +3 -3
- package/dist/modules/chunks/{chunk-HWZCLROY.mjs → chunk-CN6YN4HP.mjs} +251 -45
- package/dist/modules/chunks/chunk-CN6YN4HP.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-B6QUJ33G.mjs → chunk-CXFQME65.mjs} +3 -3
- package/dist/modules/chunks/{chunk-IJPWKKIU.mjs → chunk-CYOLEAAY.mjs} +14 -13
- package/dist/modules/chunks/chunk-CYOLEAAY.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-U6UMATPV.mjs → chunk-CYU3WWN6.mjs} +3 -3
- package/dist/modules/chunks/{chunk-AGVLPYVE.mjs → chunk-D2LZIQE2.mjs} +2 -2
- package/dist/modules/chunks/{chunk-5YTMN435.mjs → chunk-DC5JP46Y.mjs} +13 -3
- package/dist/modules/chunks/chunk-DC5JP46Y.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-YNHEYXDG.mjs → chunk-DOU4MNMQ.mjs} +3 -3
- package/dist/modules/chunks/{chunk-ZIDEETK4.mjs → chunk-E4G4HDOC.mjs} +3 -3
- package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs → chunk-EZAJ66NW.mjs} +3 -3
- package/dist/modules/chunks/{chunk-APD2EWSZ.mjs → chunk-FIWL6TQS.mjs} +2 -2
- package/dist/modules/chunks/{chunk-U5J7OTEB.mjs → chunk-FSSARTVM.mjs} +3 -3
- package/dist/modules/chunks/{chunk-47RJSHLM.mjs → chunk-FXXPWAXM.mjs} +3 -3
- package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs → chunk-G2QCXN56.mjs} +6 -6
- package/dist/modules/chunks/{chunk-4T3D67CS.mjs → chunk-GRDCA6LD.mjs} +8 -8
- package/dist/modules/chunks/{chunk-4T3D67CS.mjs.map → chunk-GRDCA6LD.mjs.map} +1 -1
- package/dist/modules/chunks/{chunk-WVU3CQ62.mjs → chunk-GUVUL6D2.mjs} +3 -3
- package/dist/modules/chunks/{chunk-YLCJNKIW.mjs → chunk-I32EONBF.mjs} +70 -30
- package/dist/modules/chunks/chunk-I32EONBF.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-E3PJGTLI.mjs → chunk-IGIELQZ2.mjs} +5 -5
- package/dist/modules/chunks/{chunk-5PHAXNFO.mjs → chunk-IMDR26Y3.mjs} +3 -3
- package/dist/modules/chunks/{chunk-55F55BQY.mjs → chunk-JVOHFCI4.mjs} +3 -3
- package/dist/modules/chunks/{chunk-6I7RY73G.mjs → chunk-KCM7ZCQ3.mjs} +5 -5
- package/dist/modules/chunks/chunk-KCM7ZCQ3.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-K2QZRFLE.mjs → chunk-KJTMDFFX.mjs} +4 -4
- package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs → chunk-KPLESRQY.mjs} +3 -3
- package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs → chunk-KUOWDTI6.mjs} +2 -2
- package/dist/modules/chunks/chunk-L6IHUN7X.mjs +13 -0
- package/dist/modules/chunks/chunk-L6IHUN7X.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-INTTYJVW.mjs → chunk-LBQ6DFMP.mjs} +2 -2
- package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs → chunk-LVWHM3UN.mjs} +2 -2
- package/dist/modules/chunks/{chunk-D57DDEV2.mjs → chunk-MDQMARAN.mjs} +6 -6
- package/dist/modules/chunks/{chunk-D57DDEV2.mjs.map → chunk-MDQMARAN.mjs.map} +2 -2
- package/dist/modules/chunks/{chunk-STQPRNEO.mjs → chunk-MLXRIWJA.mjs} +2 -2
- package/dist/modules/chunks/{chunk-D25SR5FS.mjs → chunk-N2SH3JGI.mjs} +3 -3
- package/dist/modules/chunks/{chunk-KI4WGTWL.mjs → chunk-N7NXZ6R3.mjs} +4 -4
- package/dist/modules/chunks/{chunk-KI4WGTWL.mjs.map → chunk-N7NXZ6R3.mjs.map} +2 -2
- package/dist/modules/chunks/{chunk-7IGFAI5H.mjs → chunk-O5QX6H3U.mjs} +5 -5
- package/dist/modules/chunks/{chunk-5W7SC5D4.mjs → chunk-P2Y73QJJ.mjs} +11 -1
- package/dist/modules/chunks/{chunk-5W7SC5D4.mjs.map → chunk-P2Y73QJJ.mjs.map} +2 -2
- package/dist/modules/chunks/{chunk-FNRGLCZW.mjs → chunk-PCQNUFDL.mjs} +39 -13
- package/dist/modules/chunks/chunk-PCQNUFDL.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-46UEGAXY.mjs → chunk-Q7M7VUOZ.mjs} +6 -6
- package/dist/modules/chunks/{chunk-XE6ITXHT.mjs → chunk-QB33CMEU.mjs} +2 -2
- package/dist/modules/chunks/{chunk-E3Z7GLFU.mjs → chunk-QJHQN6OD.mjs} +15 -4
- package/dist/modules/chunks/chunk-QJHQN6OD.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-KAGFU64Y.mjs → chunk-QW2VT3XB.mjs} +2 -2
- package/dist/modules/chunks/{chunk-U5R6MVM4.mjs → chunk-RFTLGEB5.mjs} +2 -2
- package/dist/modules/chunks/{chunk-VKNIYV2W.mjs → chunk-RYYKMDNI.mjs} +202 -35
- package/dist/modules/chunks/chunk-RYYKMDNI.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-P5XMFZY4.mjs → chunk-SFB5BDTB.mjs} +2 -2
- package/dist/modules/chunks/{chunk-4D3Q7K44.mjs → chunk-SNICHQJP.mjs} +2 -2
- package/dist/modules/chunks/{chunk-CX5WREJC.mjs → chunk-SPGFO2TA.mjs} +2 -2
- package/dist/modules/chunks/{chunk-H256DQT6.mjs → chunk-TMPTVIAP.mjs} +2 -2
- package/dist/modules/chunks/{chunk-OQXDADAS.mjs → chunk-UWJYROKS.mjs} +6 -6
- package/dist/modules/chunks/chunk-UWJYROKS.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs → chunk-UZH2664E.mjs} +3 -3
- package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs.map → chunk-UZH2664E.mjs.map} +2 -2
- package/dist/modules/chunks/{chunk-CKYXAT7H.mjs → chunk-VC4OEPDH.mjs} +2 -2
- package/dist/modules/chunks/{chunk-RJVOH7G2.mjs → chunk-VKWEA6NG.mjs} +27 -27
- package/dist/modules/chunks/{chunk-LZ57Y73Z.mjs → chunk-VSJOW7J4.mjs} +9 -7
- package/dist/modules/chunks/chunk-VSJOW7J4.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-PVP5YBNR.mjs → chunk-WFM434WJ.mjs} +2 -2
- package/dist/modules/chunks/{chunk-TXLD7JI5.mjs → chunk-WJNASQF2.mjs} +2 -2
- package/dist/modules/chunks/{chunk-357UOBAS.mjs → chunk-XUNDH3E7.mjs} +2 -2
- package/dist/modules/chunks/{chunk-PJFFCRRD.mjs → chunk-YDARD4EP.mjs} +2 -2
- package/dist/modules/chunks/{chunk-27XASYEH.mjs → chunk-YU3HRQX7.mjs} +17 -11
- package/dist/modules/chunks/chunk-YU3HRQX7.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-EZSGDSCC.mjs → chunk-ZRE7BDDB.mjs} +30 -5
- package/dist/modules/chunks/chunk-ZRE7BDDB.mjs.map +7 -0
- package/dist/modules/cli-contributions.mjs +14 -14
- package/dist/modules/cli.mjs +5 -5
- package/dist/modules/command-executor.mjs +3 -3
- package/dist/modules/embedded.mjs +82 -42
- package/dist/modules/embedded.mjs.map +2 -2
- package/dist/modules/extension-bridge.mjs +4 -4
- package/dist/modules/frontend-root.mjs +46 -46
- package/dist/modules/index.mjs +71 -65
- package/dist/modules/index.mjs.map +1 -1
- package/dist/modules/pages/scene.mjs +5 -5
- package/dist/modules/plugin.mjs +35 -35
- package/dist/modules/plugins/asset/frontend.mjs +10 -10
- package/dist/modules/plugins/asset/identity.mjs +9 -9
- package/dist/modules/plugins/asset/ui.mjs +3 -3
- package/dist/modules/plugins/content-browser/frontend.mjs +3 -3
- package/dist/modules/plugins/content-browser/identity.mjs +2 -2
- package/dist/modules/plugins/content-browser/ui.mjs +3 -3
- package/dist/modules/plugins/display/api.mjs +1 -1
- package/dist/modules/plugins/display/backend.mjs +4 -4
- package/dist/modules/plugins/display/frontend.mjs +5 -5
- package/dist/modules/plugins/display/identity.mjs +2 -2
- package/dist/modules/plugins/display/ui.mjs +3 -3
- package/dist/modules/plugins/inspector/frontend.mjs +3 -3
- package/dist/modules/plugins/inspector/identity.mjs +2 -2
- package/dist/modules/plugins/inspector/ui.mjs +3 -3
- package/dist/modules/plugins/material/frontend.mjs +10 -10
- package/dist/modules/plugins/material/identity.mjs +9 -9
- package/dist/modules/plugins/material/ui.mjs +10 -10
- package/dist/modules/plugins/mesh/frontend.mjs +10 -10
- package/dist/modules/plugins/mesh/identity.mjs +9 -9
- package/dist/modules/plugins/mesh/ui.mjs +10 -10
- package/dist/modules/plugins/plugins/api.mjs +4 -4
- package/dist/modules/plugins/plugins/backend.mjs +7 -7
- package/dist/modules/plugins/plugins/cli.mjs +5 -5
- package/dist/modules/plugins/plugins/frontend.mjs +3 -3
- package/dist/modules/plugins/plugins/identity.mjs +2 -2
- package/dist/modules/plugins/plugins/runtime.mjs +6 -6
- package/dist/modules/plugins/plugins/ui/panel.mjs +3 -3
- package/dist/modules/plugins/plugins/ui.mjs +4 -4
- package/dist/modules/plugins/scene/frontend.mjs +5 -5
- package/dist/modules/plugins/scene/identity.mjs +2 -2
- package/dist/modules/plugins/scene-tree/frontend.mjs +3 -3
- package/dist/modules/plugins/scene-tree/identity.mjs +2 -2
- package/dist/modules/plugins/scene-tree/ui.mjs +3 -3
- package/dist/modules/plugins/texture/frontend.mjs +10 -10
- package/dist/modules/plugins/texture/identity.mjs +9 -9
- package/dist/modules/plugins/texture/ui.mjs +10 -10
- package/dist/modules/plugins/viewport/frontend.mjs +12 -12
- package/dist/modules/plugins/viewport/identity.mjs +2 -2
- package/dist/modules/plugins/viewport/presentation.mjs +4 -4
- package/dist/modules/plugins/viewport/schema.mjs +2 -2
- package/dist/modules/plugins/viewport/workspace-shell.mjs +9 -9
- package/dist/modules/product.mjs +35 -35
- package/dist/modules/shell/frontend.mjs +1 -1
- package/dist/modules/viewer/catalog/backend.mjs +31 -31
- package/dist/modules/viewer/catalog/frontend.mjs +42 -42
- package/dist/modules/viewer/catalog/shared.mjs +20 -20
- package/dist/modules/viewer/catalog.mjs +51 -51
- package/dist/modules/viewer/cli.mjs +10 -10
- package/dist/modules/viewer-host/frontend.mjs +48 -48
- package/dist/modules/viewer-host/page-registry.mjs +6 -6
- package/dist/modules/viewer-host.mjs +7 -7
- package/dist/modules/viewer.mjs +51 -51
- package/dist/modules/workspace/api.mjs +1 -1
- package/dist/modules/workspace/backend.mjs +10 -10
- package/dist/modules/workspace/broker.mjs +9 -9
- package/dist/modules/workspace/cli.mjs +2 -2
- package/dist/modules/workspace/client.mjs +3 -3
- package/dist/modules/workspace/command-error.mjs +2 -2
- package/dist/modules/workspace/contract.mjs +7 -1
- package/dist/modules/workspace/engine-adapter.mjs +3 -3
- package/dist/modules/workspace/extension-bridge.mjs +4 -4
- package/dist/modules/workspace/frontend-plugin.mjs +8 -8
- package/dist/modules/workspace/frontend.mjs +9 -9
- package/dist/modules/workspace/page-title.mjs +3 -3
- package/dist/modules/workspace/presentation.mjs +4 -4
- package/dist/modules/workspace/preview-surface.mjs +7 -7
- package/dist/modules/workspace/project-session.mjs +2 -2
- package/dist/modules/workspace/render-resize-sync.mjs +2 -2
- package/dist/modules/workspace/resident.mjs +4 -4
- package/dist/modules/workspace/resource-open.mjs +5 -5
- package/dist/modules/workspace/resource-page.mjs +8 -8
- package/dist/modules/workspace/tool-runtime.mjs +7 -5
- package/dist/modules/workspace/view-trace.mjs +3 -3
- package/dist/modules/workspace/workspace-recovery.mjs +4 -4
- package/dist/modules/workspace/workspace-state.mjs +2 -2
- package/dist/modules/workspace-frontend.mjs +8 -8
- package/dist/viewer/assets/{embedded-DXSSFAyM.js → embedded-BKEAtUD6.js} +2 -2
- package/dist/viewer/assets/{embedded-DXSSFAyM.js.map → embedded-BKEAtUD6.js.map} +1 -1
- package/dist/viewer/assets/main-BQrn6wsa.js +22 -0
- package/dist/viewer/assets/main-BQrn6wsa.js.map +1 -0
- package/dist/viewer/assets/{panels-lazy-DqCwhGd9.js → panels-lazy-C_Cs-76A.js} +2 -2
- package/dist/viewer/assets/{panels-lazy-DqCwhGd9.js.map → panels-lazy-C_Cs-76A.js.map} +1 -1
- package/dist/viewer/assets/panels-ui-DEDHJLuE.js +12 -0
- package/dist/viewer/assets/panels-ui-DEDHJLuE.js.map +1 -0
- package/dist/viewer/assets/style-CcYzhsIZ.css +2 -0
- package/dist/viewer/assets/{wgpu_wasm--oeqTwVY.js → wgpu_wasm-cNR5izZM.js} +126 -0
- package/dist/viewer/assets/{wgpu_wasm_bg-WoZ1YI1I.wasm → wgpu_wasm_bg-Dps0jNcQ.wasm} +0 -0
- package/dist/viewer/index.html +4 -4
- package/dist/viewer/panels.js +1 -1
- package/package.json +2 -2
- package/scripts/verify-runtime-content-engine.mjs +7 -4
- package/skills/forgeax-view-cli/SKILL.md +11 -0
- package/dist/modules/chunks/chunk-27XASYEH.mjs.map +0 -7
- package/dist/modules/chunks/chunk-5YTMN435.mjs.map +0 -7
- package/dist/modules/chunks/chunk-6I7RY73G.mjs.map +0 -7
- package/dist/modules/chunks/chunk-6KM24NH6.mjs.map +0 -7
- package/dist/modules/chunks/chunk-DWT3TA6M.mjs.map +0 -7
- package/dist/modules/chunks/chunk-E3Z7GLFU.mjs.map +0 -7
- package/dist/modules/chunks/chunk-EZSGDSCC.mjs.map +0 -7
- package/dist/modules/chunks/chunk-FNRGLCZW.mjs.map +0 -7
- package/dist/modules/chunks/chunk-HWZCLROY.mjs.map +0 -7
- package/dist/modules/chunks/chunk-IJPWKKIU.mjs.map +0 -7
- package/dist/modules/chunks/chunk-LZ57Y73Z.mjs.map +0 -7
- package/dist/modules/chunks/chunk-OQXDADAS.mjs.map +0 -7
- package/dist/modules/chunks/chunk-QELNKFSI.mjs +0 -10
- package/dist/modules/chunks/chunk-QELNKFSI.mjs.map +0 -7
- package/dist/modules/chunks/chunk-VKNIYV2W.mjs.map +0 -7
- package/dist/modules/chunks/chunk-YLCJNKIW.mjs.map +0 -7
- package/dist/viewer/assets/main-CI6ZQziX.js +0 -22
- package/dist/viewer/assets/main-CI6ZQziX.js.map +0 -1
- package/dist/viewer/assets/panels-ui-CfUtl68h.js +0 -12
- package/dist/viewer/assets/panels-ui-CfUtl68h.js.map +0 -1
- package/dist/viewer/assets/style-gOtSMZif.css +0 -2
- /package/dist/modules/chunks/{chunk-EWSCJF77.mjs.map → chunk-2CMCY54A.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-YFQGSDK3.mjs.map → chunk-45WL24XN.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-FMCHH5R4.mjs.map → chunk-4FYKRL46.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs.map → chunk-4MJHVZMB.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-XQYF2P6M.mjs.map → chunk-5HVXQEO3.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-XMP4THLF.mjs.map → chunk-66LM6NO6.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs.map → chunk-6J27SWMY.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-JK7K7RG3.mjs.map → chunk-6VK7HB4X.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-HRKW766Y.mjs.map → chunk-6WZZ7TIC.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-U64FRQKP.mjs.map → chunk-7MWZK7HS.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-F5RLQAPN.mjs.map → chunk-A7OGXJAV.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-QUFVUMSY.mjs.map → chunk-AUINYWZP.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-PZIAKZJC.mjs.map → chunk-B24VYGHV.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs.map → chunk-C2AMOM7H.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-IZAHIOFU.mjs.map → chunk-C3WVSJZF.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs.map → chunk-CAXCOZ7Y.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-B6QUJ33G.mjs.map → chunk-CXFQME65.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-U6UMATPV.mjs.map → chunk-CYU3WWN6.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-AGVLPYVE.mjs.map → chunk-D2LZIQE2.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-YNHEYXDG.mjs.map → chunk-DOU4MNMQ.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-ZIDEETK4.mjs.map → chunk-E4G4HDOC.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs.map → chunk-EZAJ66NW.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-APD2EWSZ.mjs.map → chunk-FIWL6TQS.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-U5J7OTEB.mjs.map → chunk-FSSARTVM.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-47RJSHLM.mjs.map → chunk-FXXPWAXM.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs.map → chunk-G2QCXN56.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-WVU3CQ62.mjs.map → chunk-GUVUL6D2.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-E3PJGTLI.mjs.map → chunk-IGIELQZ2.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-5PHAXNFO.mjs.map → chunk-IMDR26Y3.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-55F55BQY.mjs.map → chunk-JVOHFCI4.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-K2QZRFLE.mjs.map → chunk-KJTMDFFX.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs.map → chunk-KPLESRQY.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs.map → chunk-KUOWDTI6.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-INTTYJVW.mjs.map → chunk-LBQ6DFMP.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs.map → chunk-LVWHM3UN.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-STQPRNEO.mjs.map → chunk-MLXRIWJA.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-D25SR5FS.mjs.map → chunk-N2SH3JGI.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-7IGFAI5H.mjs.map → chunk-O5QX6H3U.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-46UEGAXY.mjs.map → chunk-Q7M7VUOZ.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-XE6ITXHT.mjs.map → chunk-QB33CMEU.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-KAGFU64Y.mjs.map → chunk-QW2VT3XB.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-U5R6MVM4.mjs.map → chunk-RFTLGEB5.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-P5XMFZY4.mjs.map → chunk-SFB5BDTB.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-4D3Q7K44.mjs.map → chunk-SNICHQJP.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-CX5WREJC.mjs.map → chunk-SPGFO2TA.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-H256DQT6.mjs.map → chunk-TMPTVIAP.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-CKYXAT7H.mjs.map → chunk-VC4OEPDH.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-RJVOH7G2.mjs.map → chunk-VKWEA6NG.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-PVP5YBNR.mjs.map → chunk-WFM434WJ.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-TXLD7JI5.mjs.map → chunk-WJNASQF2.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-357UOBAS.mjs.map → chunk-XUNDH3E7.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-PJFFCRRD.mjs.map → chunk-YDARD4EP.mjs.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-workspace-core/src/broker.ts", "../../../packages/view-workspace-core/src/file-preview.ts"],
|
|
4
|
+
"sourcesContent": ["import type { EngineWorkspaceRuntime, EngineWorkspacePreview, EngineWorkspacePlay, EngineWorkspaceProjectHandle, EngineWorkspaceCameraResult } from '@forgeax/engine/app';\nimport type { ToolApi, ToolCallerIdentity } from '@forgeax/engine-tool-runtime';\nimport type { WorkspaceAsset, WorkspaceInspection, WorkspaceOpenRequest, WorkspaceSceneSelection, WorkspaceState, WorkspaceSummary, WorkspacePages, WorkspacePackReveal, WorkspacePreview, WorkspaceRequest, WorkspaceResourceOpen, WorkspaceTab } from './contract.ts';\nimport type { HostCallerIdentity, HostTransportServer } from '@forgeax/engine-host/transport';\nimport { workspaceDiagnosticRecord } from './command-error.ts';\nimport { randomUUID } from 'node:crypto';\nimport { runWorkspaceToolApi } from './tool-runtime.ts';\nimport {\n VIEW_DISPLAY_TAB_ID, VIEW_WORKSPACE_TAB_ID, VIEW_WORKSPACE_API_VERSION,\n VIEW_FILE_GET_SERVICE, VIEW_PACK_SOURCES_SERVICE, VIEW_PACK_REVEAL_TOPIC, VIEW_PACK_REVEAL_ACK_SERVICE, VIEW_WORKSPACE_SERVICES, VIEW_WORKSPACE_STATE_TOPIC, VIEW_WORKSPACE_OPERATIONS,\n assertWorkspaceRequest, cloneWorkspaceValue, requireWorkspaceString,\n serializeWorkspaceState, serializeWorkspaceAsset, serializeWorkspaceInspection,\n serializeWorkspaceOpenRequest, workspaceCapabilities, workspaceError,\n workspaceUiFingerprint,\n} from './contract.ts';\nimport { createWorkspaceId } from './id.ts';\nimport {\n editorSceneTargetIds,\n isEditorWorkspaceAsset,\n isTypePreviewAsset,\n logResourceOpen,\n selectEditorWorkspacePreview,\n summarizeResourceAsset,\n} from './resource-open.ts';\nimport { readWorkspaceFilePreview } from './file-preview.ts';\nimport {\n isWorkspaceTargetRecoveryCode,\n resolveWorkspaceFailure,\n resolveWorkspaceReopenRoot,\n} from './workspace-recovery.ts';\n\nexport type WorkspaceAuthorization = (input: { clientId: string; operation: string; request: Pick<WorkspaceRequest, 'operation' | 'args' | 'clientId'> & Partial<WorkspaceRequest>; caller?: ToolCallerIdentity; signal?: AbortSignal }) => boolean | Promise<boolean>;\nexport type WorkspaceCallContext = { signal?: AbortSignal; caller?: ToolCallerIdentity; clientId?: string; token?: string; requestId?: string };\nexport type PackSourceListing = { sources: readonly { sourcePath: string; revision?: string; packageId?: string; outputs: readonly { guid: string; kind: string; sourceKey?: string }[]; diagnostic?: { code: string; hint: string } }[]; hasMore: boolean };\nexport type BrokerOptions = { engine?: EngineWorkspaceRuntime; projectIntent?: () => string | undefined; engineForCaller?: (caller?: ToolCallerIdentity, targetId?: string) => EngineWorkspaceRuntime | undefined; toolApi?: ToolApi; display?: (caller?: ToolCallerIdentity) => { state?: string; occupancy?: Pick<WorkspaceTab, 'run' | 'target' | 'targetId'> | null } | undefined; accessToken?: string; authorize?: WorkspaceAuthorization; packSources?: (projectRoot: string) => Promise<PackSourceListing> };\ntype Args = Record<string, unknown>;\ntype WorkspaceDomainResult = Partial<EngineWorkspaceCameraResult> & { assets?: WorkspaceAsset[]; inspection?: WorkspaceInspection; preview?: WorkspacePreview; asset?: WorkspaceAsset; target?: WorkspacePreview['target']; entityId?: string | null };\n\nconst ENGINE_SOURCE = 'engine-workspace';\nconst UI_OPERATIONS = Object.freeze<Record<string, (workspace: ViewWorkspaceBroker, args: Args, context: WorkspaceCallContext) => unknown>>({\n 'summary.get': (workspace) => workspace.summary(),\n 'pages.list': (workspace) => workspace.pages(),\n 'pack.reveal': (workspace, args, context) => workspace.revealPack({\n projectId: requireWorkspaceString(args.projectId, 'projectId'),\n sourcePath: requireWorkspaceString(args.sourcePath, 'sourcePath'),\n revision: requireWorkspaceString(args.revision, 'revision'),\n ...(args.packageId === undefined ? {} : { packageId: requireWorkspaceString(args.packageId, 'packageId') }),\n ...(args.connectionId === undefined ? {} : { connectionId: requireWorkspaceString(args.connectionId, 'connectionId') }),\n }, context.signal),\n 'target.select': (workspace, args) => workspace.selectTarget(args),\n 'tabs.get': (workspace) => workspace.snapshot(),\n 'tabs.select': (workspace, args) => workspace.selectTab(args),\n 'scene.select': (workspace, args, context) => workspace.selectSceneEntity(args, context),\n 'scene.pick': (workspace, args, context) => workspace.pickSceneEntity(args, context),\n 'scene.clear': (workspace, args, context) => workspace.clearSceneSelection(args, context),\n});\nconst PAGE_OPERATIONS = new Set([\n 'tabs.get', 'tabs.select', 'target.select', 'scene.select', 'scene.pick', 'scene.clear',\n 'asset.open', 'preview.close', 'play.start', 'play.ready', 'play.stop',\n]);\n\n/** View bindings and display snapshots. Engine owns all project and target resources. */\nexport class ViewWorkspaceBroker {\n declare readonly engine: EngineWorkspaceRuntime | undefined;\n declare readonly engineForCaller: BrokerOptions['engineForCaller'];\n declare readonly projectIntent: BrokerOptions['projectIntent'];\n declare readonly caller: ToolCallerIdentity | undefined;\n declare readonly toolApi: ToolApi | undefined;\n declare readonly display: NonNullable<BrokerOptions['display']>;\n declare readonly accessToken: string;\n declare readonly authorize: WorkspaceAuthorization | undefined;\n declare readonly packSources: BrokerOptions['packSources'];\n declare selectedTabId: string;\n declare targetBinding: 'editor' | 'play';\n declare editorTargetId: string | undefined;\n declare previewTargetId: string | undefined;\n declare playOwner: EngineWorkspacePlay | undefined;\n declare projectOwner: EngineWorkspaceProjectHandle | undefined;\n declare previewOwner: EngineWorkspacePreview | EngineWorkspacePlay | undefined;\n declare revision: number;\n declare listeners: Set<(state: WorkspaceState) => void>;\n declare assets: WorkspaceAsset[] | null;\n declare inspection: WorkspaceInspection | null;\n declare openRequest: WorkspaceOpenRequest | null;\n declare openRequestSequence: number;\n declare resourceOpens: Map<string, WorkspaceResourceOpen>;\n declare sceneSelection: WorkspaceSceneSelection | null;\n declare selectionAbort: AbortController | undefined;\n declare previewProjection: (WorkspacePreview & Pick<EngineWorkspacePreview, 'presentation'>) | null;\n declare workspaceTargetLost: boolean;\n declare catalogEpoch: number;\n declare disposing: boolean;\n declare publishFingerprint: string;\n declare readonly pageSessions: Map<string, { broker: ViewWorkspaceBroker; unsubscribe: () => void }>;\n declare transport?: HostTransportServer;\n declare readonly pendingReveals: Map<string, { connectionId: string; projectId: string; sourcePath: string; revision: string; settle: (value: unknown) => void }>;\n constructor({ engine, engineForCaller, projectIntent, toolApi, display = () => undefined, accessToken = randomUUID(), authorize, packSources }: BrokerOptions = {}, caller?: ToolCallerIdentity) {\n this.engine = engine;\n this.engineForCaller = engineForCaller;\n this.projectIntent = projectIntent;\n this.caller = caller;\n this.toolApi = toolApi;\n this.display = display;\n this.accessToken = accessToken;\n this.authorize = authorize;\n this.packSources = packSources;\n this.selectedTabId = VIEW_WORKSPACE_TAB_ID;\n this.targetBinding = 'editor';\n this.editorTargetId = undefined;\n this.playOwner = undefined;\n this.revision = 0;\n this.listeners = new Set<(state: WorkspaceState) => void>();\n this.assets = null;\n this.inspection = null;\n this.openRequest = null;\n this.openRequestSequence = 0;\n this.resourceOpens = new Map();\n this.sceneSelection = null;\n this.selectionAbort?.abort();\n this.previewProjection = null;\n this.projectOwner = undefined;\n this.previewOwner = undefined;\n this.workspaceTargetLost = false;\n this.catalogEpoch = -1;\n this.disposing = false;\n this.publishFingerprint = '';\n this.pageSessions = new Map();\n this.pendingReveals = new Map();\n }\n\n get project() { return this.engine?.project?.project ?? null; }\n get projectTarget() { return this.engine?.project?.target ?? null; }\n get preview() { this.syncBindings(); return this.previewProjection; }\n\n previews() { return this.engine?.previews ?? (this.engine?.preview ? [this.engine.preview] : []); }\n classifiedPreviews() {\n return this.previews().map((preview) => ({\n target: preview.target,\n asset: this.hydrateAsset(preview.asset),\n }));\n }\n editorPreview() {\n const live = this.previews();\n const selected = selectEditorWorkspacePreview(this.classifiedPreviews(), this.editorTargetId);\n if (!selected) return undefined;\n return live.find((preview) => String(preview.target.targetId) === String(selected.target.targetId));\n }\n boundTarget() {\n if (this.targetBinding === 'play') {\n const play = this.engine?.play;\n return play?.phase === 'running' ? play : undefined;\n }\n return this.previews().find(preview => preview.target.targetId === this.previewTargetId) ?? this.editorPreview();\n }\n hydrateAsset(asset: WorkspaceAsset | null | undefined) {\n if (!asset?.guid) return asset ?? null;\n if (asset.kind) return asset;\n const catalog = Array.isArray(this.assets)\n ? this.assets.find((entry) => entry.guid === asset.guid)\n : undefined;\n if (!catalog?.kind) return asset;\n return { ...asset, kind: catalog.kind, name: asset.name ?? catalog.name };\n }\n selectTarget({ targetId }: Args = {}) {\n if (targetId === this.engine?.play?.target.targetId) this.targetBinding = 'play';\n else {\n const preview = this.previews().find((entry) => entry.target.targetId === targetId);\n if (!preview) throw workspaceError('view-workspace-target-mismatch', 'An existing preview or Play target', 'Refresh tabs.get.');\n this.targetBinding = 'editor';\n this.previewTargetId = targetId as string;\n if (isEditorWorkspaceAsset(this.hydrateAsset(preview.asset))) this.editorTargetId = String(targetId);\n }\n this.changed();\n return this.snapshot();\n }\n syncBindings() {\n if (this.playOwner !== this.engine?.play) {\n this.playOwner = this.engine?.play;\n this.targetBinding = this.playOwner ? 'play' : 'editor';\n if (!this.playOwner) this.previewTargetId = this.editorPreview()?.target.targetId;\n }\n if (this.projectOwner !== this.engine?.project) {\n this.projectOwner = this.engine?.project;\n this.assets = null;\n this.inspection = null;\n this.openRequest = null;\n this.openRequestSequence = 0;\n this.resourceOpens = new Map();\n this.editorTargetId = undefined;\n this.sceneSelection = null;\n this.selectionAbort?.abort();\n }\n if (this.previewOwner !== this.boundTarget()) {\n this.previewOwner = this.boundTarget();\n this.sceneSelection = null;\n this.selectionAbort?.abort();\n this.previewProjection = this.previewOwner ? {\n target: this.previewOwner.target, asset: this.previewOwner.asset,\n presentation: this.previewOwner.presentation,\n assetBinding: this.previewOwner.assetBinding,\n } : null;\n }\n }\n\n summary(): WorkspaceSummary {\n const project = this.project;\n const previews = this.previews();\n const projectTarget = this.projectTarget && this.engine?.preview?.target.targetId === this.projectTarget.targetId\n ? this.engine.preview.target : this.projectTarget;\n const active = [\n ...(projectTarget ? [{ target: projectTarget, role: 'project' as const }] : []),\n ...(this.engine?.play ? [{ target: this.engine.play.target, role: 'play' as const }] : []),\n ];\n const targets = [...active, ...previews.slice(0, Math.max(0, 16 - active.length))\n .map(preview => ({ target: preview.target, role: 'preview' as const }))];\n return {\n revision: this.revision,\n project: project ? { id: project.id, root: project.root, name: project.name } : null,\n projectPhase: this.engine?.project?.phase ?? null,\n browserGeneration: this.engine?.project?.browserGeneration ?? null,\n targets: targets.map(({ target, role }) => ({\n targetId: target.targetId, ...(target.generation === undefined ? {} : { generation: target.generation }), role,\n })),\n hasMoreTargets: active.length + previews.length > 16,\n };\n }\n\n pages(): WorkspacePages {\n const entries = [...this.pageSessions.entries()];\n return { pages: entries.slice(0, 16).map(([connectionId, page]) => ({ connectionId, ...page.broker.summary() })),\n hasMorePages: entries.length > 16 };\n }\n\n snapshot(): WorkspaceState {\n this.syncBindings();\n const display = this.display?.();\n return serializeWorkspaceState({\n revision: this.revision, selectedTabId: this.selectedTabId,\n tabs: [\n { tabId: VIEW_DISPLAY_TAB_ID, kind: 'display', selected: this.selectedTabId === VIEW_DISPLAY_TAB_ID,\n state: display?.state, run: display?.occupancy?.run, target: display?.occupancy?.target,\n targetId: display?.occupancy?.targetId },\n { tabId: VIEW_WORKSPACE_TAB_ID, kind: 'workspace', selected: this.selectedTabId === VIEW_WORKSPACE_TAB_ID,\n state: this.previewProjection ? 'previewing' : this.project ? 'project-open' : 'empty',\n ...(this.previewProjection?.target ?? this.projectTarget ? { target: this.previewProjection?.target ?? this.projectTarget } : {}) },\n ],\n project: this.project, projectTarget: this.projectTarget,\n ...(!this.project && this.projectIntent?.() ? { projectIntent: { root: this.projectIntent()! } } : {}),\n ...(this.engine?.project?.phase === undefined ? {} : { projectPhase: this.engine.project.phase }),\n ...(this.engine?.project?.browserGeneration === undefined ? {} : { browserGeneration: this.engine.project.browserGeneration }),\n assets: this.assets,\n preview: this.previewProjection && { ...this.previewProjection, target: this.boundTarget()!.target, asset: this.hydrateAsset(this.previewProjection.asset), assetBinding: this.boundTarget()!.assetBinding },\n editorPreview: this.editorPreview() ? { target: this.editorPreview()!.target, asset: this.hydrateAsset(this.editorPreview()!.asset), assetBinding: this.editorPreview()!.assetBinding } : null,\n previews: this.previews().map(preview => ({ target: preview.target, asset: this.hydrateAsset(preview.asset), assetBinding: preview.assetBinding })),\n play: this.engine?.play ? { target: this.engine.play.target, phase: this.engine.play.phase } : null,\n targetBinding: this.targetBinding,\n inspection: this.inspection,\n openRequest: this.openRequest,\n resourceOpens: Object.fromEntries(this.resourceOpens),\n sceneSelection: this.sceneSelection,\n workspaceTargetLost: this.workspaceTargetLost,\n });\n }\n\n changed() {\n const current = this.snapshot();\n const fingerprint = workspaceUiFingerprint(current);\n if (fingerprint === this.publishFingerprint) return;\n this.revision += 1;\n const state = this.snapshot();\n this.publishFingerprint = workspaceUiFingerprint(state);\n for (const listener of this.listeners) { try { listener(state); } catch { /* UI observers do not own operations. */ } }\n }\n subscribe(listener: (state: WorkspaceState) => void) {\n this.listeners.add(listener);\n const state = this.snapshot();\n this.publishFingerprint ||= workspaceUiFingerprint(state);\n listener(state);\n return () => this.listeners.delete(listener);\n }\n capabilities() {\n const descriptions = this.toolApi?.list().filter(record => record.callable && (record.owner.sourceId === ENGINE_SOURCE || record.descriptor.id.startsWith('view.display.')))\n .map(record => ({ id: record.descriptor.id.replace(/^(engine|view)\\./, ''), path: record.descriptor.path, title: record.descriptor.title, summary: record.descriptor.summary, inputSchema: record.descriptor.inputSchema, outputSchema: record.descriptor.outputSchema })) ?? [];\n const operations = [...Object.keys(UI_OPERATIONS), ...descriptions.map(item => item.id),\n ...VIEW_WORKSPACE_OPERATIONS.filter(id => id.startsWith('plugins.') && this.toolApi?.describe(id, 'view-backend').some(record => record.callable))]\n .filter(id => VIEW_WORKSPACE_OPERATIONS.includes(id));\n return { ...workspaceCapabilities({ ready: !!this.engine && !this.disposing, headed: this.projectTarget?.headed === true, operations }), descriptions };\n }\n async authorizeRequest(request: WorkspaceRequest, caller?: ToolCallerIdentity) {\n if (this.disposing) throw workspaceError('view-workspace-stopping', 'View bindings to remain available', 'Reconnect to the backend.');\n if (request.token !== this.accessToken || (this.authorize && !await this.authorize({ clientId: request.clientId, operation: request.operation, request, caller }))) {\n throw workspaceError('view-workspace-unauthorized', 'an authorized workspace connection', 'Connect with the issued token.', { clientId: request.clientId });\n }\n }\n async call(rawRequest: unknown, { signal, caller }: WorkspaceCallContext = {}): Promise<unknown> {\n const request = assertWorkspaceRequest(rawRequest);\n if (request.operation === 'pages.list' || request.operation === 'pack.reveal') {\n await this.authorizeRequest(request, caller);\n return UI_OPERATIONS[request.operation](this, request.args, { signal, caller, clientId: request.clientId });\n }\n const page = caller?.connectionId && this.pageSessions.get(caller.connectionId);\n if (page) return page.broker.call(rawRequest, { signal, caller });\n await this.authorizeRequest(request, caller);\n if (PAGE_OPERATIONS.has(request.operation) && this.pageSessions.size > 0) {\n if (this.pageSessions.size !== 1) throw workspaceError('view-page-ambiguous',\n 'one View page for this page operation', 'Select the exact View page before retrying.');\n return this.pageSessions.values().next().value!.broker.call(request, { signal, caller });\n }\n const ui = UI_OPERATIONS[request.operation];\n if (ui) return ui(this, request.args, { signal, caller, clientId: request.clientId });\n if (request.operation === 'project.reopen') {\n return this.reopenProject(request.args, {\n signal,\n caller,\n clientId: request.clientId,\n token: request.token,\n requestId: request.requestId,\n });\n }\n return this.invoke(request.operation, request.args, { signal, caller, clientId: request.clientId, token: request.token, requestId: request.requestId });\n }\n async invoke(operation: string, args: Args = {}, { signal, caller, clientId = 'view-owner', token, requestId }: WorkspaceCallContext = {}) {\n caller ??= this.caller;\n const { tabId, ...input } = args;\n if (tabId !== undefined) this.assertWorkspaceTab(tabId);\n const inspector = operation.startsWith('plugins.');\n const presentation = operation.startsWith('display.');\n const id = inspector ? operation : `${presentation ? 'view' : 'engine'}.${operation}`;\n const sourceId = inspector || presentation ? 'view-backend' : ENGINE_SOURCE;\n if (this.caller && !inspector && !presentation && !operation.startsWith('run.') && input.targetId === undefined && this.projectTarget)\n input.targetId = this.projectTarget.targetId;\n const owner = this.toolApi?.describe(id, sourceId).find(record => record.callable)?.owner;\n if (!owner) throw workspaceError('view-workspace-operation-unavailable', `Engine operation ${operation} to be installed`, 'Enable the Engine capability; UI plugins do not provide domain APIs.', { operation });\n this.syncBindings();\n const play = this.engine?.play;\n if (operation === 'play.stop' && this.targetBinding === 'play' && play &&\n input.targetId === play.target.targetId && input.targetGeneration === play.target.generation) {\n // Revoke Game panel observations before Engine closes their command channel.\n // Keep the presented Play owner and its iframe until the cleanup ACK arrives.\n this.targetBinding = 'editor';\n this.previewTargetId = this.editorPreview()?.target.targetId;\n this.changed();\n }\n const requestedPreview = [...this.previews(), this.engine?.play].find(preview => preview?.target.targetId === input.targetId);\n const terminal = await this.toolApi!.run<WorkspaceDomainResult>(id, inspector ? {\n apiVersion: 'forgeax.view.inspector/1', operation, args: input, ...input, clientId, token, requestId,\n } : presentation ? input : { ...input, clientId }, { sourceId, providerId: owner.providerId, generation: owner.generation, caller, signal }).terminal;\n if (terminal.outcome === 'failed') {\n const resolved = resolveWorkspaceFailure(terminal.failure);\n const addressesWorkspace = input.targetId === undefined ||\n [this.projectTarget, this.editorPreview()?.target].some(target => target &&\n target.targetId === input.targetId &&\n (input.targetGeneration === undefined || target.generation === input.targetGeneration));\n if (isWorkspaceTargetRecoveryCode(resolved.code) && addressesWorkspace) {\n this.workspaceTargetLost = true;\n }\n // Engine can revoke a target before its asynchronous close completes and\n // publishes state. Reconcile the actual binding before returning a late\n // query failure, so observers can revoke their obsolete requests.\n this.changed();\n throw workspaceError(resolved.code, resolved.expected, resolved.hint, resolved.detail);\n }\n const result = terminal.result;\n if (Array.isArray(result?.assets)) this.assets = result.assets.map(asset => serializeWorkspaceAsset({ ...asset, ...(asset.ddc || !asset.cookReceiptUrl ? {} : { ddc: { receiptUrl: asset.cookReceiptUrl } }) }));\n if (result?.inspection) this.inspection = serializeWorkspaceInspection(result.inspection);\n if (operation === 'asset.open') this.bindOpenedAsset(result, input.guid);\n if (operation === 'preview.close' && input.targetId != null && String(input.targetId) === this.editorTargetId) {\n this.editorTargetId = undefined;\n }\n this.syncBindings();\n if (operation === 'asset.open') this.recordOpenRequest({ requestId, result, guid: input.guid });\n if ((operation.startsWith('camera.') || operation === 'target.control') && this.previewProjection && this.boundTarget() === requestedPreview) {\n this.previewProjection.camera = result?.camera;\n this.previewProjection.cameraVersion = result?.version;\n this.previewProjection.interaction = result?.interaction ?? null;\n }\n if (!['scene.tree.get', 'entity.inspect', 'workspace.get', 'preview.capture'].includes(operation)) this.changed();\n if (['project.open', 'project.close', 'project.reopen', 'asset.open', 'preview.close', 'camera.abort', 'play.start', 'play.ready', 'play.stop'].includes(operation)) {\n if (operation === 'project.open' || operation === 'project.reopen') this.workspaceTargetLost = false;\n return this.snapshot();\n }\n if (operation.startsWith('camera.')) return { ...cloneWorkspaceValue(result), apiVersion: VIEW_WORKSPACE_API_VERSION, target: requestedPreview?.target };\n if (operation === 'assets.list') return { ...cloneWorkspaceValue(result), assets: this.assets };\n return cloneWorkspaceValue(result);\n }\n assertWorkspaceTab(tabId: unknown) {\n requireWorkspaceString(tabId, 'tabId');\n if (tabId !== VIEW_WORKSPACE_TAB_ID) throw workspaceError('view-workspace-tab-read-only', 'the Editor binding', 'Address AI execution through the Engine run API.', { tabId });\n }\n selectTab({ tabId }: Args = {}) {\n if (![VIEW_DISPLAY_TAB_ID, VIEW_WORKSPACE_TAB_ID].includes(tabId as string)) throw workspaceError('view-workspace-tab-not-found', 'an existing tab', 'Refresh tabs.get.', { tabId });\n this.selectedTabId = tabId as string; this.changed(); return this.snapshot();\n }\n async selectSceneEntity(args: Args = {}, context?: WorkspaceCallContext) {\n const entityId = requireWorkspaceString(args.entityId, 'entityId');\n return this.changeSceneSelection(args, context, () => ({ entityId, label: args.label }));\n }\n pickSceneEntity(args: Args = {}, context?: WorkspaceCallContext) {\n return this.changeSceneSelection(args, context, async requestContext => {\n const result = await this.invoke('target.pick', args, requestContext) as { entityId?: string | null };\n if (result?.entityId === null) return null;\n const entityId = requireWorkspaceString(result?.entityId, 'pick.entityId');\n return { entityId };\n });\n }\n clearSceneSelection(args: Args = {}, context?: WorkspaceCallContext) {\n return this.changeSceneSelection(args, context, () => null);\n }\n async changeSceneSelection({ tabId, targetId, targetGeneration }: Args = {}, context: WorkspaceCallContext | undefined, resolveSelection: (context: WorkspaceCallContext) => { entityId: string; label?: unknown } | null | Promise<{ entityId: string; label?: unknown } | null>) {\n if (tabId !== undefined) this.assertWorkspaceTab(tabId);\n this.syncBindings();\n const requested = this.boundTarget();\n if (!requested || requested.target.targetId !== targetId || requested.target.generation !== targetGeneration) throw workspaceError('view-workspace-selection-stale', 'The bound target and generation', 'Select the target before changing its selection.');\n this.selectionAbort?.abort();\n const controller = new AbortController();\n this.selectionAbort = controller;\n const signal = context?.signal ? AbortSignal.any([context.signal, controller.signal]) : controller.signal;\n const requestContext = { ...context, signal };\n const assertCurrent = () => {\n signal.throwIfAborted();\n if (this.boundTarget() !== requested) throw workspaceError('view-workspace-selection-stale', 'The same selected target', 'Refresh the hierarchy.');\n };\n const selection = await resolveSelection(requestContext);\n assertCurrent();\n const { entityId, label } = selection ?? {};\n if (selection) {\n const result = await this.invoke('entity.inspect', { entityId, targetId, targetGeneration }, requestContext) as { entityId?: string };\n assertCurrent();\n if (result?.entityId !== entityId) throw workspaceError(\n 'view-workspace-selection-stale', 'The inspected entity on the same target', 'Refresh the hierarchy before selecting.');\n }\n await this.invoke('entity.highlight', { ...(selection ? { entityId } : {}), targetId, targetGeneration }, requestContext);\n assertCurrent();\n this.sceneSelection = selection ? { primary: { entityId: entityId!, ...(label === undefined ? {} : { label: String(label) }) }, targetId: requested.target.targetId, targetGeneration: requested.target.generation } : null;\n this.changed();\n return this.snapshot();\n }\n openProject(args: Args, context?: WorkspaceCallContext) { return this.invoke('project.open', args, context); }\n async reopenProject(args: Args = {}, context?: WorkspaceCallContext) {\n const root = resolveWorkspaceReopenRoot(this.snapshot(), args.root);\n const { tabId, ...rest } = args;\n return this.openProject({ ...rest, root, ...(tabId === undefined ? {} : { tabId }) }, context);\n }\n closeProject(args: Args, context?: WorkspaceCallContext) { return this.invoke('project.close', args, context); }\n listAssets(args: Args, context?: WorkspaceCallContext) { return this.invoke('assets.list', args, context); }\n inspectAsset(args: Args, context?: WorkspaceCallContext) { return this.invoke('asset.inspect', args, context); }\n rebuildAssetSource(args: Args, { mode = 'rebuild', ...context }: WorkspaceCallContext & { mode?: 'rebuild' | 'cold-cook' } = {}) { return this.invoke(`asset.source.${mode}`, args, context); }\n bindOpenedAsset(result: WorkspaceDomainResult, guid: unknown) {\n this.targetBinding = 'editor';\n const kind = this.hydrateAsset(result?.preview?.asset)?.kind\n ?? this.hydrateAsset(result?.asset)?.kind\n ?? this.assets?.find((entry) => entry?.guid === guid)?.kind;\n if (kind && !isTypePreviewAsset({ kind, guid: typeof guid === 'string' ? guid : '' })) {\n const targetId = result?.preview?.target?.targetId\n ?? result?.target?.targetId\n ?? this.previews().find((entry) => this.hydrateAsset(entry.asset)?.guid === guid)?.target?.targetId;\n if (targetId != null) {\n this.editorTargetId = String(targetId);\n this.previewTargetId = this.editorTargetId;\n }\n return;\n }\n const editorId = this.editorPreview()?.target?.targetId;\n if (editorId !== undefined) this.previewTargetId = editorId;\n }\n recordOpenRequest({ requestId, result, guid }: { requestId?: string; result: WorkspaceDomainResult; guid?: unknown }) {\n const requested = typeof guid === 'string' && guid.trim() !== '' ? guid : undefined;\n const editor = this.editorPreview();\n const editorIds = editorSceneTargetIds(\n this.classifiedPreviews(),\n editor ? { target: editor.target, asset: this.hydrateAsset(editor.asset) } : undefined,\n );\n const extras = this.previews().filter((entry) =>\n entry?.target?.targetId && !editorIds.has(String(entry.target.targetId)),\n );\n const preview = [result?.preview, ...extras].find((entry) =>\n entry?.target &&\n !editorIds.has(String(entry.target.targetId)) &&\n (!entry.asset || requested === undefined || entry.asset.guid === requested),\n );\n const catalogAsset = requested && Array.isArray(this.assets)\n ? this.assets.find((entry) => entry?.guid === requested && entry?.kind)\n : undefined;\n const asset = [\n this.hydrateAsset(result?.preview?.asset),\n this.hydrateAsset(result?.asset),\n this.hydrateAsset(preview?.asset),\n catalogAsset,\n ].find((candidate) =>\n candidate?.guid &&\n candidate?.kind &&\n (requested === undefined || candidate.guid === requested),\n );\n if (!asset?.guid || !asset?.kind) {\n logResourceOpen('open-request-skipped', {\n reason: 'asset-kind-unavailable',\n requested: requested ?? null,\n resultPreview: summarizeResourceAsset(result?.preview?.asset),\n resultAsset: summarizeResourceAsset(result?.asset),\n extraPreview: summarizeResourceAsset(preview?.asset),\n extraPreviewCount: extras.length,\n catalog: summarizeResourceAsset(catalogAsset),\n editorTargetId: this.editorTargetId ?? null,\n }, { level: 'warn' });\n return;\n }\n this.openRequestSequence += 1;\n const inspection =\n result?.inspection?.guid === asset.guid\n ? result.inspection\n : (this.inspection?.guid === asset.guid ? this.inspection : undefined);\n const previewMatches = preview?.target && (!preview.asset || preview.asset.guid === asset.guid);\n const recordedPreview = previewMatches ? { asset, target: preview.target } : undefined;\n this.openRequest = serializeWorkspaceOpenRequest({\n requestId: typeof requestId === 'string' && requestId.trim() !== ''\n ? requestId\n : createWorkspaceId('open'),\n sequence: this.openRequestSequence,\n asset,\n preview: recordedPreview,\n ...(inspection === undefined ? {} : { inspection }),\n });\n this.resourceOpens.set(asset.kind, {\n asset,\n preview: recordedPreview,\n });\n logResourceOpen('open-request-recorded', {\n requestId: this.openRequest.requestId,\n sequence: this.openRequest.sequence,\n asset: summarizeResourceAsset(this.openRequest.asset),\n hasPreview: Boolean(this.openRequest.preview?.target),\n previewTargetId: this.openRequest.preview?.target?.targetId ?? null,\n });\n }\n openAsset(args: Args, context?: WorkspaceCallContext) { return this.invoke('asset.open', args, context); }\n closePreview(args: Args, context?: WorkspaceCallContext) { return this.invoke('preview.close', args, context); }\n capture(args: Args, context?: WorkspaceCallContext) { return this.invoke('preview.capture', args, context); }\n resizePreview(args: Args, context?: WorkspaceCallContext) { return this.invoke('preview.resize', args, context); }\n getCamera(args: Args, context?: WorkspaceCallContext) { return this.invoke('camera.get', args, context); }\n beginCamera(args: Args, context?: WorkspaceCallContext) { return this.invoke('camera.begin', { ...args, interactionId: args.interactionId ?? randomUUID() }, context); }\n updateCamera(args: Args, context?: WorkspaceCallContext) { return this.invoke('camera.update', args, context); }\n commitCamera(args: Args, context?: WorkspaceCallContext) { return this.invoke('camera.commit', args, context); }\n abortCamera(args: Args, context?: WorkspaceCallContext) { return this.invoke('camera.abort', args, context); }\n getSceneTree(args: Args, context?: WorkspaceCallContext) { return this.invoke('scene.tree.get', args, context); }\n async revokeConnection(connectionId: unknown) {\n if (typeof connectionId !== 'string') return;\n if (!this.pageSessions.has(connectionId) && ![...this.pendingReveals.values()].some(pending => pending.connectionId === connectionId)) return;\n for (const [requestId, pending] of this.pendingReveals) {\n if (pending.connectionId !== connectionId) continue;\n this.pendingReveals.delete(requestId);\n pending.settle({ ok: false, code: 'view-page-gone', requestId });\n }\n const page = this.pageSessions.get(connectionId);\n if (page) {\n this.pageSessions.delete(connectionId);\n page.unsubscribe();\n await page.broker.dispose();\n }\n for (const preview of [this.engine?.preview, this.engine?.play]) {\n if (!preview) continue;\n // The target may already be gone together with its browser page; revoking\n // its input connection is best-effort cleanup, not a failure.\n try {\n const result = await preview.revokeConnection?.({ targetId: preview.target.targetId, connectionId }) as EngineWorkspaceCameraResult | undefined;\n this.syncBindings();\n if (this.previewOwner === preview && this.previewProjection && result) {\n this.previewProjection.interaction = result.interaction ?? null;\n this.previewProjection.cameraVersion = result.version;\n }\n } catch {\n // A lost target owns its own teardown.\n }\n }\n this.changed();\n }\n /** One accepted View frontend owns one presentation projection and event stream. */\n attachPageSession(caller: HostCallerIdentity, transport: HostTransportServer) {\n const engine = this.engineForCaller ? this.engineForCaller(caller) : this.engine;\n const projectTarget = engine?.project?.target;\n const projectCaller = projectTarget && caller.sourceId === `forgeax-workspace:${projectTarget.sessionId}:${projectTarget.targetId}`;\n if (caller.kind !== 'frontend' || (caller.sourceId !== 'view-frontend' && !projectCaller) || this.pageSessions.has(caller.connectionId)) return;\n const broker = new ViewWorkspaceBroker({\n engine, toolApi: this.toolApi, display: () => this.display(caller),\n ...(this.engineForCaller && caller.sourceId === 'view-frontend'\n ? { projectIntent: () => this.project?.root } : {}),\n accessToken: this.accessToken, authorize: this.authorize, packSources: this.packSources,\n }, caller);\n broker.snapshot();\n if (engine === this.engine) broker.assets = this.assets;\n const unsubscribe = broker.subscribe(state => transport.publish(VIEW_WORKSPACE_STATE_TOPIC, state, { connectionId: caller.connectionId }));\n this.pageSessions.set(caller.connectionId, { broker, unsubscribe });\n }\n publishPageSessions() {\n for (const { broker } of this.pageSessions.values()) {\n broker.snapshot();\n if (broker.engine === this.engine && this.assets !== null) broker.assets = this.assets;\n broker.changed();\n }\n }\n async revealPack(input: WorkspacePackReveal, signal?: AbortSignal) {\n const transport = this.transport;\n if (!transport) return { ok: false, code: 'view-page-unavailable' };\n if (signal?.aborted) return { ok: false, code: 'view-reveal-cancelled' };\n const candidates = [...this.pageSessions.keys()];\n if (!input.connectionId && candidates.length !== 1)\n return { ok: false, code: candidates.length ? 'view-page-ambiguous' : 'view-page-unavailable', candidates };\n const connectionId = input.connectionId ?? candidates[0];\n const page = this.pageSessions.get(connectionId);\n if (!page) return { ok: false, code: 'view-page-gone' };\n const project = page.broker.project;\n if (!project || project.id !== input.projectId) return { ok: false, code: 'view-project-stale' };\n if (!this.packSources) return { ok: false, code: 'view-pack-sources-unavailable' };\n const source = (await this.packSources(project.root)).sources.find(row => row.sourcePath === input.sourcePath);\n if (signal?.aborted) return { ok: false, code: 'view-reveal-cancelled' };\n if (!source || source.revision !== input.revision || (input.packageId && source.packageId !== input.packageId))\n return { ok: false, code: 'view-pack-stale' };\n const requestId = randomUUID();\n const intent = { requestId, connectionId, projectId: input.projectId,\n sourcePath: input.sourcePath, revision: input.revision,\n ...(source.packageId ? { packageId: source.packageId } : {}) };\n return new Promise<unknown>(resolve => {\n const retire = (code: string) => {\n this.pendingReveals.delete(requestId);\n transport.publish(VIEW_PACK_REVEAL_TOPIC, { ...intent, cancelled: true }, { connectionId });\n settle({ ok: false, code, requestId });\n };\n const cancel = () => {\n retire('view-reveal-cancelled');\n };\n const settle = (value: unknown) => {\n clearTimeout(timeout);\n signal?.removeEventListener('abort', cancel);\n resolve(value);\n };\n const timeout = setTimeout(() => {\n retire('view-reveal-timeout');\n }, 12000);\n timeout.unref?.();\n this.pendingReveals.set(requestId, { connectionId, projectId: input.projectId, sourcePath: input.sourcePath,\n revision: input.revision, settle });\n signal?.addEventListener('abort', cancel, { once: true });\n transport.publish(VIEW_PACK_REVEAL_TOPIC, intent, { connectionId });\n });\n }\n registerTransport(transport: HostTransportServer, { routeThroughTools = false } = {}) {\n this.transport = transport;\n const capabilities = transport.register(VIEW_WORKSPACE_SERVICES.capabilities, () => this.capabilities());\n const call = transport.register<WorkspaceRequest, unknown>(VIEW_WORKSPACE_SERVICES.call, async ({ payload, signal, caller }) => {\n try {\n // The top-level View URL connects as view-frontend. Once a project\n // opens, its full View shell lives on the exact Engine target page.\n // That caller may connect before the project handle is published,\n // so admit it on its first workspace request as well as connect.\n this.attachPageSession(caller, transport);\n return routeThroughTools\n ? await runWorkspaceToolApi(this.toolApi!, {\n operation: `view.workspace.${payload.operation}`, args: payload.args,\n clientId: payload.clientId, token: payload.token, requestId: payload.requestId,\n caller, signal, sourceId: 'view-workspace',\n })\n : await this.call(payload, { signal, caller });\n }\n catch (error) {\n const failure = workspaceDiagnosticRecord(error);\n if (typeof failure.code !== 'string' || !failure.code.startsWith('view-')) throw error;\n throw Object.assign(new Error(String(failure.message)), { name: 'HostAssemblyError', code: 'host-transport-failure',\n expected: failure.expected, hint: failure.hint, detail: { ...workspaceDiagnosticRecord(failure.detail), remoteCode: failure.code } });\n }\n });\n const fileGet = transport.register<{ path?: unknown }, unknown>(VIEW_FILE_GET_SERVICE, async ({ payload, caller }) => {\n try { return await readWorkspaceFilePreview(this.pageSessions.get(caller.connectionId)?.broker ?? this, payload); }\n catch (error) {\n const failure = workspaceDiagnosticRecord(error);\n if (typeof failure.code !== 'string' || !failure.code.startsWith('view-')) throw error;\n throw Object.assign(new Error(String(failure.message)), { name: 'HostAssemblyError', code: 'host-transport-failure',\n expected: failure.expected, hint: failure.hint, detail: { ...workspaceDiagnosticRecord(failure.detail), remoteCode: failure.code } });\n }\n });\n const packSources = transport.register<{ projectId?: unknown }, unknown>(VIEW_PACK_SOURCES_SERVICE, async ({ payload, caller }) => {\n const project = (this.pageSessions.get(caller.connectionId)?.broker ?? this).project;\n if (!project || payload?.projectId !== project.id) throw workspaceError('view-project-stale', 'the currently open project', 'Refresh the workspace before listing Pack sources.');\n if (!this.packSources) throw workspaceError('view-pack-sources-unavailable', 'an installed Pack source provider', 'Update the View Host Pack.');\n return this.packSources(project.root);\n });\n const revealAck = transport.register<{ requestId?: unknown; shown?: unknown; projectId?: unknown; sourcePath?: unknown; revision?: unknown; reason?: unknown }, unknown>(VIEW_PACK_REVEAL_ACK_SERVICE, async ({ payload, caller }) => {\n const requestId = typeof payload?.requestId === 'string' ? payload.requestId : '';\n const pending = this.pendingReveals.get(requestId);\n if (!pending || pending.connectionId !== caller.connectionId) return { ok: false, code: 'view-reveal-stale' };\n if (pending.projectId !== payload.projectId || pending.sourcePath !== payload.sourcePath || pending.revision !== payload.revision)\n return { ok: false, code: 'view-reveal-identity-mismatch' };\n const page = this.pageSessions.get(caller.connectionId);\n const project = page?.broker.project;\n const source = project && this.packSources\n ? (await this.packSources(project.root)).sources.find(row => row.sourcePath === pending.sourcePath) : undefined;\n // A visible old card cannot confirm a changed source, project or retired page.\n if (this.pendingReveals.get(requestId) !== pending) return { ok: false, code: 'view-reveal-stale' };\n if (!project || project.id !== pending.projectId || source?.revision !== pending.revision) {\n this.pendingReveals.delete(requestId);\n pending.settle({ ok: false, code: 'view-reveal-stale', requestId });\n return { ok: false, code: 'view-reveal-stale' };\n }\n this.pendingReveals.delete(requestId);\n pending.settle({ ok: payload.shown === true, code: payload.shown === true ? 'shown' : 'view-reveal-not-shown',\n requestId, connectionId: caller.connectionId, projectId: payload.projectId,\n sourcePath: payload.sourcePath, revision: payload.revision,\n ...(typeof payload.reason === 'string' ? { reason: payload.reason.slice(0, 160) } : {}) });\n return { ok: true };\n });\n const subscription = this.subscribe(state => transport.publish(VIEW_WORKSPACE_STATE_TOPIC, state, {\n excludeConnectionIds: [...this.pageSessions.keys()],\n }));\n const removeConnect = transport.onClientConnect(caller => this.attachPageSession(caller, transport));\n const removeDisconnect = transport.onClientDisconnect(caller => { void this.revokeConnection(caller.connectionId); });\n const observer = transport.connect();\n const engineSubscription = observer.subscribe<{ catalogEpoch?: number }>('engine.workspace.state', (snapshot) => {\n const epoch = snapshot && typeof snapshot.catalogEpoch === 'number' ? snapshot.catalogEpoch : undefined;\n if (epoch === undefined || epoch <= this.catalogEpoch) {\n this.changed();\n this.publishPageSessions();\n return;\n }\n this.catalogEpoch = epoch;\n for (const broker of [this, ...[...this.pageSessions.values()].map(page => page.broker)]) {\n broker.catalogEpoch = epoch;\n const project = broker.project;\n if (!project || (broker.engine?.project?.phase !== undefined && broker.engine.project.phase !== 'running')) continue;\n const lost = broker.workspaceTargetLost;\n void broker.invoke('assets.list', { projectId: project.id }).catch(() => {\n broker.workspaceTargetLost = lost;\n }).finally(() => broker.changed());\n }\n this.publishPageSessions();\n });\n return () => { if (this.transport === transport) this.transport = undefined; capabilities(); call(); fileGet(); packSources(); revealAck(); subscription(); removeConnect(); removeDisconnect(); engineSubscription(); observer.close(); };\n }\n async dispose() {\n this.selectionAbort?.abort(); this.disposing = true; this.listeners.clear();\n for (const [requestId, pending] of this.pendingReveals) {\n this.pendingReveals.delete(requestId);\n pending.settle({ ok: false, code: 'view-page-gone', requestId });\n }\n for (const [connectionId, page] of this.pageSessions) {\n this.pageSessions.delete(connectionId);\n page.unsubscribe();\n await page.broker.dispose();\n }\n }\n}\n", "import { readFile, stat } from 'node:fs/promises';\nimport { extname, isAbsolute, relative, resolve } from 'node:path';\n\nimport type { WorkspaceProject } from './contract.ts';\nimport { workspaceError } from './contract.ts';\n\n/**\n * Editor `/api/files` classify() equivalent. Unknown extensions are text so\n * `.pack.json` / `.pack.ts` / `.ts` / `.js` decode as UTF-8. Binary kinds skip\n * decode and leave `content` unset \u2014 the preview then shows the no-text note.\n */\nconst EXT_KIND: Readonly<Record<string, { kind: string; mime: string }>> = Object.freeze({\n '.png': { kind: 'image', mime: 'image/png' },\n '.jpg': { kind: 'image', mime: 'image/jpeg' },\n '.jpeg': { kind: 'image', mime: 'image/jpeg' },\n '.gif': { kind: 'image', mime: 'image/gif' },\n '.webp': { kind: 'image', mime: 'image/webp' },\n '.avif': { kind: 'image', mime: 'image/avif' },\n '.bmp': { kind: 'image', mime: 'image/bmp' },\n '.ico': { kind: 'image', mime: 'image/x-icon' },\n '.svg': { kind: 'image', mime: 'image/svg+xml' },\n '.mp3': { kind: 'audio', mime: 'audio/mpeg' },\n '.wav': { kind: 'audio', mime: 'audio/wav' },\n '.ogg': { kind: 'audio', mime: 'audio/ogg' },\n '.m4a': { kind: 'audio', mime: 'audio/mp4' },\n '.flac': { kind: 'audio', mime: 'audio/flac' },\n '.aac': { kind: 'audio', mime: 'audio/aac' },\n '.mp4': { kind: 'video', mime: 'video/mp4' },\n '.webm': { kind: 'video', mime: 'video/webm' },\n '.mov': { kind: 'video', mime: 'video/quicktime' },\n '.glb': { kind: 'model', mime: 'model/gltf-binary' },\n '.gltf': { kind: 'model', mime: 'model/gltf+json' },\n '.fbx': { kind: 'model', mime: 'application/octet-stream' },\n '.ttf': { kind: 'binary', mime: 'font/ttf' },\n '.otf': { kind: 'binary', mime: 'font/otf' },\n '.woff': { kind: 'binary', mime: 'font/woff' },\n '.woff2': { kind: 'binary', mime: 'font/woff2' },\n});\n\n/** Inline data URLs for browser media preview in the content browser. */\nexport const MAX_BINARY_PREVIEW_BYTES = 10 * 1024 * 1024;\n\nconst BINARY_PREVIEW_KINDS = new Set(['image', 'audio', 'video', 'binary']);\n\nexport function classifyFile(path: string) {\n const ext = extname(path).toLowerCase();\n return EXT_KIND[ext] ?? { kind: 'text', mime: 'text/plain; charset=utf-8' };\n}\n\nexport function resolveProjectFilePath(root: unknown, input: unknown) {\n if (typeof root !== 'string' || root.trim() === '') return null;\n if (typeof input !== 'string' || input.length === 0 || input.includes('\\0')) return null;\n const rootAbs = resolve(root);\n const abs = isAbsolute(input) ? resolve(input) : resolve(rootAbs, input);\n const rel = relative(rootAbs, abs);\n if (rel === '' || rel.startsWith('..') || isAbsolute(rel)) return null;\n const normalized = rel.split(/[/\\\\]/).join('/');\n if (normalized === '.forgeax/ddc' || normalized.startsWith('.forgeax/ddc/')) return null;\n return { abs, rel: normalized };\n}\n\nexport async function readFilePreview(absPath: string, rel: string) {\n let info;\n try {\n info = await stat(absPath);\n } catch {\n throw new Error('not found');\n }\n if (info.isDirectory()) throw new Error('is a directory');\n const ext = extname(rel).toLowerCase();\n const { kind, mime } = classifyFile(rel);\n const base = { path: rel, kind, mime, size: info.size, mtime: info.mtimeMs };\n if (kind === 'text') {\n const content = await readFile(absPath, 'utf8');\n return { ...base, content };\n }\n if (kind === 'image' && ext === '.svg') {\n const content = await readFile(absPath, 'utf8');\n return { ...base, content };\n }\n if (BINARY_PREVIEW_KINDS.has(kind)) {\n if (info.size > MAX_BINARY_PREVIEW_BYTES) return base;\n const buffer = await readFile(absPath);\n return { ...base, dataUrl: `data:${mime};base64,${buffer.toString('base64')}` };\n }\n return base;\n}\n\nexport async function readWorkspaceFilePreview(workspace: { project?: WorkspaceProject | null } | undefined, payload: { path?: unknown } = {}) {\n const root = workspace?.project?.root;\n if (typeof root !== 'string' || root.trim() === '') {\n throw workspaceError(\n 'view-workspace-project-closed',\n 'an open project',\n 'Open a project before previewing source files.',\n );\n }\n const resolved = resolveProjectFilePath(root, payload?.path);\n if (!resolved) {\n throw workspaceError(\n 'view-workspace-invalid-args',\n 'path to be a file inside the open project',\n 'Provide a project-relative or in-project absolute path.',\n { field: 'path' },\n );\n }\n try {\n return await readFilePreview(resolved.abs, resolved.rel);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.startsWith('is a directory')) {\n throw workspaceError(\n 'view-workspace-invalid-args',\n 'a file path',\n message,\n { path: resolved.rel },\n );\n }\n throw workspaceError(\n 'view-workspace-file-not-found',\n 'the file to exist in the open project',\n 'Refresh the content browser and retry.',\n { path: resolved.rel },\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["resolve"]
|
|
7
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
attachPreviewRenderResizeSync
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YDARD4EP.mjs";
|
|
4
4
|
import {
|
|
5
5
|
keepSurfaceInContainer,
|
|
6
6
|
watchUntilReady
|
|
7
7
|
} from "./chunk-QW3ZY2AD.mjs";
|
|
8
8
|
import {
|
|
9
9
|
logResourceOpen
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-E4G4HDOC.mjs";
|
|
11
11
|
|
|
12
12
|
// packages/view-workspace-core/src/preview-surface.ts
|
|
13
13
|
var OWNER_PLACEMENT = "owner";
|
|
@@ -240,4 +240,4 @@ export {
|
|
|
240
240
|
dedicatedPreviewPresentation,
|
|
241
241
|
bindWorkspacePreviewSurface
|
|
242
242
|
};
|
|
243
|
-
//# sourceMappingURL=chunk-
|
|
243
|
+
//# sourceMappingURL=chunk-CXFQME65.mjs.map
|
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
import {
|
|
2
2
|
identity_exports as identity_exports9
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-N2SH3JGI.mjs";
|
|
4
4
|
import {
|
|
5
5
|
BACKEND_MODULE,
|
|
6
6
|
BACKEND_PLUGIN_ID,
|
|
7
7
|
identity_exports
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-D2LZIQE2.mjs";
|
|
9
9
|
import {
|
|
10
10
|
BACKEND_MODULE as BACKEND_MODULE2,
|
|
11
11
|
BACKEND_PLUGIN_ID as BACKEND_PLUGIN_ID2,
|
|
12
12
|
identity_exports as identity_exports2
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-2CMCY54A.mjs";
|
|
14
14
|
import {
|
|
15
15
|
identity_exports as identity_exports7
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-C2AMOM7H.mjs";
|
|
17
17
|
import {
|
|
18
18
|
identity_exports as identity_exports8
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-4FYKRL46.mjs";
|
|
20
20
|
import {
|
|
21
21
|
identity_exports as identity_exports5
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-MLXRIWJA.mjs";
|
|
23
23
|
import {
|
|
24
24
|
identity_exports as identity_exports6
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-B24VYGHV.mjs";
|
|
26
26
|
import {
|
|
27
27
|
identity_exports as identity_exports3
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-AUINYWZP.mjs";
|
|
29
29
|
import {
|
|
30
30
|
identity_exports as identity_exports4
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-6WZZ7TIC.mjs";
|
|
32
32
|
import {
|
|
33
33
|
identity_exports as identity_exports10
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-TMPTVIAP.mjs";
|
|
35
35
|
import {
|
|
36
36
|
PRESENTATION_MODULE,
|
|
37
37
|
PRESENTATION_PLUGIN_ID
|
|
@@ -41,14 +41,14 @@ import {
|
|
|
41
41
|
FRONTEND_PLUGIN_ID,
|
|
42
42
|
PAGE_TYPE,
|
|
43
43
|
identity_exports as identity_exports11
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-SFB5BDTB.mjs";
|
|
45
45
|
import {
|
|
46
46
|
SHELL_MODULE,
|
|
47
47
|
SHELL_PLUGIN_ID
|
|
48
48
|
} from "./chunk-QAXALJEY.mjs";
|
|
49
49
|
|
|
50
50
|
// view-revision:revision
|
|
51
|
-
var revision_default = "
|
|
51
|
+
var revision_default = "d9f8f160baa8c79a98e292a9cfeb82afd6b984ce9994c42ebf2e4e7ce2c72a91";
|
|
52
52
|
|
|
53
53
|
// packages/viewer/src/catalog-shared.ts
|
|
54
54
|
var VIEW_PLUGIN_VERSION = "0.2.0";
|
|
@@ -94,6 +94,7 @@ function createViewProductPlan({ backendConfig, frontendConfig, disabledPages =
|
|
|
94
94
|
workspaceEngine: backendConfig?.workspaceEngine,
|
|
95
95
|
workspaceAccessToken: backendConfig?.workspaceAccessToken,
|
|
96
96
|
workspaceAuthorize: backendConfig?.workspaceAuthorize,
|
|
97
|
+
packSources: backendConfig?.packSources,
|
|
97
98
|
capabilities: backendConfig?.capabilities
|
|
98
99
|
};
|
|
99
100
|
const backend = [
|
|
@@ -125,4 +126,4 @@ export {
|
|
|
125
126
|
VIEW_PRODUCT_PLUGINS,
|
|
126
127
|
createViewProductPlan
|
|
127
128
|
};
|
|
128
|
-
//# sourceMappingURL=chunk-
|
|
129
|
+
//# sourceMappingURL=chunk-CYOLEAAY.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["view-revision:revision", "../../../packages/viewer/src/catalog-shared.ts"],
|
|
4
|
+
"sourcesContent": ["export default \"d9f8f160baa8c79a98e292a9cfeb82afd6b984ce9994c42ebf2e4e7ce2c72a91\"", "import type { ViewFrontendConfig } from './config.ts';\nimport type { EngineWorkspaceProvider } from '@forgeax/engine/app';\nimport type { ViewPlatform, CarrierCapabilities } from '@forgeax/view-plugin-display/carrier-contract';\nimport type { ViewWorkspaceBroker } from '@forgeax/view-workspace-core/broker';\nexport type ViewBackendProductConfig = {\n platform?: ViewPlatform; capabilities?: Partial<CarrierCapabilities>; workspaceEngine?: EngineWorkspaceProvider;\n workspaceAccessToken?: string; workspaceAuthorize?: NonNullable<ConstructorParameters<typeof ViewWorkspaceBroker>[0]>['authorize'];\n packSources?: NonNullable<ConstructorParameters<typeof ViewWorkspaceBroker>[0]>['packSources'];\n};\nimport buildRevision from './build-identity.ts';\nimport * as display from '@forgeax/view-plugin-display/identity';\nimport * as plugins from '@forgeax/view-plugin-plugins/identity';\nimport * as inspector from '@forgeax/view-plugin-inspector/identity';\nimport * as contentBrowser from '@forgeax/view-plugin-content-browser/identity';\nimport * as sceneTree from '@forgeax/view-plugin-scene-tree/identity';\nimport * as material from '@forgeax/view-plugin-material/identity';\nimport * as mesh from '@forgeax/view-plugin-mesh/identity';\nimport * as texture from '@forgeax/view-plugin-texture/identity';\nimport * as asset from '@forgeax/view-plugin-asset/identity';\nimport * as viewport from '@forgeax/view-plugin-viewport/identity';\nimport * as scene from '@forgeax/view-plugin-scene/identity';\n\nimport { SHELL_MODULE, SHELL_PLUGIN_ID } from './plugins/shell-identity.ts';\nimport { PRESENTATION_MODULE, PRESENTATION_PLUGIN_ID } from '@forgeax/view-plugin-viewport/presentation-identity';\n\nexport const VIEW_PLUGIN_VERSION = '0.2.0';\nexport const VIEW_FRONTEND_ROOT_PROGRAM = '@forgeax/view/frontend-root';\nexport const VIEW_FRONTEND_MODULE = Object.freeze({ specifier: VIEW_FRONTEND_ROOT_PROGRAM });\n\nexport function viewFrontendRoot(frontendConfig: ViewFrontendConfig | undefined, disabledPages: readonly string[] = []) {\n return Object.freeze({\n program: VIEW_FRONTEND_ROOT_PROGRAM,\n codeRevision: buildRevision,\n config: { frontendConfig, disabledPages },\n });\n}\n\nexport const VIEW_WORKSPACE_CORE = Object.freeze({\n BACKEND_PLUGIN_ID: 'forgeax.view.service.workspace.backend',\n FRONTEND_PLUGIN_ID: 'forgeax.view.service.workspace-client.frontend',\n BACKEND_MODULE: '@forgeax/view-workspace-core/backend',\n FRONTEND_MODULE: '@forgeax/view/workspace-frontend',\n});\n\nexport const VIEW_PRODUCT_PLUGINS = Object.freeze([\n scene,\n display,\n viewport,\n contentBrowser,\n plugins,\n inspector,\n sceneTree,\n material,\n mesh,\n texture,\n asset,\n]);\n\n/** Static native composition. Pack assets own game plugin identity; View owns only its UI policy. */\nexport function createViewProductPlan({ backendConfig, frontendConfig, disabledPages = [] }: { backendConfig?: ViewBackendProductConfig; frontendConfig?: ViewFrontendConfig; disabledPages?: readonly string[] } = {}) {\n const pages = new Set<string>(VIEW_PRODUCT_PLUGINS.map(plugin => plugin.PAGE_TYPE));\n for (const page of disabledPages) {\n if (!pages.has(page)) throw new TypeError(`Unknown View page: ${page}`);\n }\n const disabled = new Set(disabledPages);\n const displayBackendConfig = {\n platform: backendConfig?.platform,\n capabilities: backendConfig?.capabilities,\n };\n const workspaceBackendConfig = {\n workspaceEngine: backendConfig?.workspaceEngine,\n workspaceAccessToken: backendConfig?.workspaceAccessToken,\n workspaceAuthorize: backendConfig?.workspaceAuthorize,\n packSources: backendConfig?.packSources,\n capabilities: backendConfig?.capabilities,\n };\n const backend = [\n { id: VIEW_WORKSPACE_CORE.BACKEND_PLUGIN_ID, module: VIEW_WORKSPACE_CORE.BACKEND_MODULE, config: workspaceBackendConfig },\n { id: display.BACKEND_PLUGIN_ID, module: display.BACKEND_MODULE, config: displayBackendConfig },\n { id: plugins.BACKEND_PLUGIN_ID, module: plugins.BACKEND_MODULE, config: {} },\n ];\n const frontend = [\n { id: SHELL_PLUGIN_ID, module: SHELL_MODULE },\n { id: VIEW_WORKSPACE_CORE.FRONTEND_PLUGIN_ID, module: VIEW_WORKSPACE_CORE.FRONTEND_MODULE },\n ...(!disabled.has(scene.PAGE_TYPE) ? [{ id: scene.FRONTEND_PLUGIN_ID, module: scene.FRONTEND_MODULE }] : []),\n { id: PRESENTATION_PLUGIN_ID, module: PRESENTATION_MODULE },\n ...VIEW_PRODUCT_PLUGINS.filter(plugin => plugin !== scene && !disabled.has(plugin.PAGE_TYPE))\n .map(plugin => ({ id: plugin.FRONTEND_PLUGIN_ID, module: plugin.FRONTEND_MODULE })),\n ];\n return Object.freeze({\n backend: Object.freeze(backend),\n frontend: Object.freeze(frontend),\n frontendConfig,\n disabledPages: Object.freeze([...disabled]),\n });\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAO,mBAAQ;;;ACyBR,IAAM,sBAAsB;AAC5B,IAAM,6BAA6B;AACnC,IAAM,uBAAuB,OAAO,OAAO,EAAE,WAAW,2BAA2B,CAAC;AAEpF,SAAS,iBAAiB,gBAAgD,gBAAmC,CAAC,GAAG;AACtH,SAAO,OAAO,OAAO;AAAA,IACnB,SAAS;AAAA,IACT,cAAc;AAAA,IACd,QAAQ,EAAE,gBAAgB,cAAc;AAAA,EAC1C,CAAC;AACH;AAEO,IAAM,sBAAsB,OAAO,OAAO;AAAA,EAC/C,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,iBAAiB;AACnB,CAAC;AAEM,IAAM,uBAAuB,OAAO,OAAO;AAAA,EAChDA;AAAA,EACA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AAAA,EACAA;AACF,CAAC;AAGM,SAAS,sBAAsB,EAAE,eAAe,gBAAgB,gBAAgB,CAAC,EAAE,IAA0H,CAAC,GAAG;AACtN,QAAM,QAAQ,IAAI,IAAY,qBAAqB,IAAI,YAAU,OAAO,SAAS,CAAC;AAClF,aAAW,QAAQ,eAAe;AAChC,QAAI,CAAC,MAAM,IAAI,IAAI,EAAG,OAAM,IAAI,UAAU,sBAAsB,IAAI,EAAE;AAAA,EACxE;AACA,QAAM,WAAW,IAAI,IAAI,aAAa;AACtC,QAAM,uBAAuB;AAAA,IAC3B,UAAU,eAAe;AAAA,IACzB,cAAc,eAAe;AAAA,EAC/B;AACA,QAAM,yBAAyB;AAAA,IAC7B,iBAAiB,eAAe;AAAA,IAChC,sBAAsB,eAAe;AAAA,IACrC,oBAAoB,eAAe;AAAA,IACnC,aAAa,eAAe;AAAA,IAC5B,cAAc,eAAe;AAAA,EAC/B;AACA,QAAM,UAAU;AAAA,IACd,EAAE,IAAI,oBAAoB,mBAAmB,QAAQ,oBAAoB,gBAAgB,QAAQ,uBAAuB;AAAA,IACxH,EAAE,IAAY,mBAAmB,QAAgB,gBAAgB,QAAQ,qBAAqB;AAAA,IAC9F,EAAE,IAAYC,oBAAmB,QAAgBC,iBAAgB,QAAQ,CAAC,EAAE;AAAA,EAC9E;AACA,QAAM,WAAW;AAAA,IACf,EAAE,IAAI,iBAAiB,QAAQ,aAAa;AAAA,IAC5C,EAAE,IAAI,oBAAoB,oBAAoB,QAAQ,oBAAoB,gBAAgB;AAAA,IAC1F,GAAI,CAAC,SAAS,IAAU,SAAS,IAAI,CAAC,EAAE,IAAU,oBAAoB,QAAc,gBAAgB,CAAC,IAAI,CAAC;AAAA,IAC1G,EAAE,IAAI,wBAAwB,QAAQ,oBAAoB;AAAA,IAC1D,GAAG,qBAAqB,OAAO,YAAU,WAAWF,sBAAS,CAAC,SAAS,IAAI,OAAO,SAAS,CAAC,EACzF,IAAI,aAAW,EAAE,IAAI,OAAO,oBAAoB,QAAQ,OAAO,gBAAgB,EAAE;AAAA,EACtF;AACA,SAAO,OAAO,OAAO;AAAA,IACnB,SAAS,OAAO,OAAO,OAAO;AAAA,IAC9B,UAAU,OAAO,OAAO,QAAQ;AAAA,IAChC;AAAA,IACA,eAAe,OAAO,OAAO,CAAC,GAAG,QAAQ,CAAC;AAAA,EAC5C,CAAC;AACH;",
|
|
6
|
+
"names": ["identity_exports", "BACKEND_PLUGIN_ID", "BACKEND_MODULE"]
|
|
7
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FRONTEND_PLUGIN_ID,
|
|
3
3
|
identity_exports
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4FYKRL46.mjs";
|
|
5
5
|
import {
|
|
6
6
|
applyResourcePagePlugin
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-KPLESRQY.mjs";
|
|
8
8
|
|
|
9
9
|
// packages/view-plugin-texture/src/frontend.ts
|
|
10
10
|
var VIEW_TEXTURE_FRONTEND_PLUGIN_ID = FRONTEND_PLUGIN_ID;
|
|
@@ -22,4 +22,4 @@ export {
|
|
|
22
22
|
viewTextureFrontendPlugin,
|
|
23
23
|
frontend_default
|
|
24
24
|
};
|
|
25
|
-
//# sourceMappingURL=chunk-
|
|
25
|
+
//# sourceMappingURL=chunk-CYU3WWN6.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
VIEW_PAGE_TYPES
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QJHQN6OD.mjs";
|
|
4
4
|
import {
|
|
5
5
|
__export
|
|
6
6
|
} from "./chunk-FLGC65SR.mjs";
|
|
@@ -46,4 +46,4 @@ export {
|
|
|
46
46
|
VIEW_STATUS_SERVICE,
|
|
47
47
|
identity_exports
|
|
48
48
|
};
|
|
49
|
-
//# sourceMappingURL=chunk-
|
|
49
|
+
//# sourceMappingURL=chunk-D2LZIQE2.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
VIEW_WORKSPACE_TAB_ID
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QJHQN6OD.mjs";
|
|
4
4
|
|
|
5
5
|
// packages/view-workspace-core/src/project-session.ts
|
|
6
6
|
var KEY = "forgeax.view.project-session/1";
|
|
@@ -94,6 +94,7 @@ function createProjectSession(client, { window = globalThis } = {}) {
|
|
|
94
94
|
restoring: Boolean(pageTarget ? navigation?.type === "reload" : explicitRoot || record?.root && record?.targetId)
|
|
95
95
|
};
|
|
96
96
|
let initializing = true;
|
|
97
|
+
let openedIntent = Boolean(pageTarget || explicitRoot || record?.targetId);
|
|
97
98
|
let retryTimer;
|
|
98
99
|
let cancelDelay;
|
|
99
100
|
let reconnecting;
|
|
@@ -145,6 +146,10 @@ function createProjectSession(client, { window = globalThis } = {}) {
|
|
|
145
146
|
if (disposed || (snapshot.revision ?? 0) < (state.snapshot.revision ?? -1)) return;
|
|
146
147
|
changed({ snapshot });
|
|
147
148
|
releaseReload(snapshot);
|
|
149
|
+
if (!pageTarget && !explicitRoot && !record?.targetId && !initializing && !state.busy && !openedIntent && snapshot.projectIntent?.root) {
|
|
150
|
+
void open(snapshot.projectIntent.root);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
148
153
|
const remoteTargetUrl = snapshot?.projectTarget?.url;
|
|
149
154
|
if (!pageTarget && !explicitRoot && !record?.targetId && !initializing && !state.busy && snapshot?.workspaceTargetLost !== true && snapshot?.projectPhase !== "failed" && typeof snapshot?.project?.root === "string" && snapshot.project.root.trim() !== "" && typeof remoteTargetUrl === "string" && remoteTargetUrl.trim() !== "") {
|
|
150
155
|
void Promise.resolve(navigate(snapshot)).catch(fail);
|
|
@@ -159,7 +164,10 @@ function createProjectSession(client, { window = globalThis } = {}) {
|
|
|
159
164
|
};
|
|
160
165
|
save(window, record);
|
|
161
166
|
};
|
|
162
|
-
const fail = (error) =>
|
|
167
|
+
const fail = (error) => {
|
|
168
|
+
reloadWatch = false;
|
|
169
|
+
changed({ busy: false, restoring: false, error: error instanceof Error ? error.message : String(error) });
|
|
170
|
+
};
|
|
163
171
|
const run = async (action) => {
|
|
164
172
|
if (disposed || state.busy) return;
|
|
165
173
|
changed({ busy: true, error: null, restoring: true });
|
|
@@ -205,6 +213,7 @@ function createProjectSession(client, { window = globalThis } = {}) {
|
|
|
205
213
|
return navigate(await client.reopenProject({ ...options, expectedTargetId, expectedTargetState: "lost" }));
|
|
206
214
|
};
|
|
207
215
|
const open = (root) => run(async () => {
|
|
216
|
+
openedIntent = true;
|
|
208
217
|
const snapshot = await client.getState({ signal: controller.signal });
|
|
209
218
|
accept(snapshot);
|
|
210
219
|
if (snapshot.project) {
|
|
@@ -285,6 +294,7 @@ function createProjectSession(client, { window = globalThis } = {}) {
|
|
|
285
294
|
if (!pageTarget) {
|
|
286
295
|
if (explicitRoot) await open(explicitRoot);
|
|
287
296
|
else if (record?.root && record?.targetId) await reconnect();
|
|
297
|
+
else if (snapshot.projectIntent?.root) await open(snapshot.projectIntent.root);
|
|
288
298
|
return;
|
|
289
299
|
}
|
|
290
300
|
})().catch(fail).finally(() => {
|
|
@@ -322,4 +332,4 @@ export {
|
|
|
322
332
|
navigateProjectSession,
|
|
323
333
|
createProjectSession
|
|
324
334
|
};
|
|
325
|
-
//# sourceMappingURL=chunk-
|
|
335
|
+
//# sourceMappingURL=chunk-DC5JP46Y.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-workspace-core/src/project-session.ts"],
|
|
4
|
+
"sourcesContent": ["import type { WorkspaceState } from './contract.ts';\nimport type { ViewWorkspaceClient } from './client.ts';\nexport type ProjectSessionWindow = Pick<Window, 'location' | 'localStorage' | 'sessionStorage' | 'performance' | 'history' | 'addEventListener' | 'removeEventListener'> & { fetch: typeof fetch };\ntype ProjectSessionRecord = { version: number; root?: string; entry?: string; targetId?: string; preferences?: Record<string, string> };\nexport type ProjectSessionState = { snapshot: WorkspaceState; busy: boolean; error: string | null; restoring: boolean };\nexport type ProjectSession = ReturnType<typeof createProjectSession>;\n\nimport { VIEW_WORKSPACE_TAB_ID } from './contract.ts';\n\nconst KEY = 'forgeax.view.project-session/1';\nconst HASH = 'forgeaxViewRestore';\nconst PREFERENCES = ['forgeax-view-theme', 'forgeax.view.locale'];\nconst isLoopback = (hostname: string) => ['localhost', '127.0.0.1', '[::1]'].includes(hostname);\n\nexport function restoreProjectPreferences(window: ProjectSessionWindow = globalThis) {\n const record = readProjectSession(window);\n for (const key of PREFERENCES) {\n const value = record?.preferences?.[key];\n if (typeof value === 'string') {\n try { window.localStorage?.setItem(key, value); } catch { /* Optional preference. */ }\n }\n }\n}\n\nexport function readProjectSession(window: ProjectSessionWindow = globalThis): ProjectSessionRecord | null {\n try {\n const hash = new URLSearchParams(new URL(window.location.href).hash.slice(1));\n const raw = hash.get(HASH) ?? window.sessionStorage?.getItem(KEY) ?? 'null';\n if (raw.length > 64000) return null;\n const value = JSON.parse(raw);\n if (value?.version !== 1 || typeof value.root !== 'string' || !value.root.trim()) return null;\n if (value.targetId !== undefined && typeof value.targetId !== 'string') return null;\n if (value.resources !== undefined && (!Array.isArray(value.resources) ||\n value.resources.length > 32 || !value.resources.every((guid: unknown) => typeof guid === 'string'))) return null;\n const presentation = value.presentation;\n if (presentation !== undefined && (!presentation || typeof presentation !== 'object' || Array.isArray(presentation) ||\n (presentation.pageOrder !== undefined && (!Array.isArray(presentation.pageOrder) ||\n !presentation.pageOrder.every((type: unknown) => typeof type === 'string'))) ||\n (presentation.activeType !== undefined && typeof presentation.activeType !== 'string') ||\n (presentation.layouts !== undefined && (!presentation.layouts || typeof presentation.layouts !== 'object' ||\n Array.isArray(presentation.layouts))))) return null;\n if (value.entry) {\n const entry = new URL(value.entry);\n const current = new URL(window.location.href);\n const sameHost = entry.hostname === current.hostname || (isLoopback(entry.hostname) && isLoopback(current.hostname));\n if (!sameHost || entry.protocol !== current.protocol ||\n !['http:', 'https:'].includes(entry.protocol) || entry.username || entry.password) return null;\n }\n // Read old records without reviving their resource, camera or layout history.\n return { version: 1, root: value.root, entry: value.entry, targetId: value.targetId, preferences: value.preferences };\n } catch { return null; }\n}\n\nfunction save(window: ProjectSessionWindow, value: ProjectSessionRecord | null) {\n if (!value) return;\n value.preferences = {};\n for (const key of PREFERENCES) {\n try {\n const preference = window.localStorage?.getItem(key);\n if (preference) value.preferences[key] = preference;\n } catch { /* Storage is optional. */ }\n }\n try { window.sessionStorage?.setItem(KEY, JSON.stringify(value)); } catch { /* Storage is optional. */ }\n}\n\nexport function projectSessionUrl(url: string, record: ProjectSessionRecord | null) {\n const next = new URL(url);\n next.hash = new URLSearchParams({ [HASH]: JSON.stringify(record) }).toString();\n return next.href;\n}\n\n/** Transfer the confirmed project identity across origins, never runtime history. */\nexport function navigateProjectSession(snapshot: WorkspaceState, window: ProjectSessionWindow = globalThis, record: ProjectSessionRecord | null = readProjectSession(window)) {\n const url = snapshot?.projectTarget?.url;\n if (!url || !window.location?.assign) return;\n if (!snapshot.project?.root) { window.location.assign(url); return; }\n const current = new URL(window.location.href);\n const next = {\n ...record, version: 1, root: snapshot.project.root,\n targetId: snapshot.projectTarget?.targetId,\n entry: record?.entry ?? current.origin + current.pathname,\n };\n save(window, next);\n window.location.assign(projectSessionUrl(url, next));\n}\n\n/** One Cordis-owned project intent/recovery projection shared by all React consumers. */\nexport function createProjectSession(client: ViewWorkspaceClient, { window = globalThis }: { window?: ProjectSessionWindow } = {}) {\n let disposed = false;\n let record = readProjectSession(window);\n const location = window.location;\n const url = location?.href ? new URL(location.href) : null;\n const explicitRoot = url?.searchParams.get('project')?.trim();\n const pageTarget = url?.searchParams.get('forgeaxWorkspaceTarget');\n const navigation = window.performance?.getEntriesByType?.('navigation')?.[0] as PerformanceNavigationTiming | undefined;\n let state: ProjectSessionState = {\n snapshot: {}, busy: false, error: null,\n restoring: Boolean(pageTarget ? navigation?.type === 'reload' : explicitRoot || (record?.root && record?.targetId)),\n };\n let initializing = true;\n let openedIntent = Boolean(pageTarget || explicitRoot || record?.targetId);\n let retryTimer: ReturnType<typeof setTimeout> | undefined;\n let cancelDelay: (() => void) | undefined;\n let reconnecting: Promise<void> | undefined;\n let cancelNavigation: (() => void) | undefined;\n const listeners = new Set<(state: ProjectSessionState) => void>();\n const controller = new AbortController();\n const options = { tabId: VIEW_WORKSPACE_TAB_ID, signal: controller.signal };\n const changed = (patch: Partial<ProjectSessionState>) => {\n if (disposed) return;\n state = { ...state, ...patch };\n for (const listener of listeners) listener(state);\n };\n let reloadWatch = Boolean(pageTarget && navigation?.type === 'reload');\n let reloadSawStarting = false;\n let reloadFloor = -1;\n const releaseReload = (snapshot: WorkspaceState) => {\n if (!reloadWatch) return;\n if (snapshot?.workspaceTargetLost === true) {\n reloadWatch = false;\n changed({ restoring: false, busy: false });\n return;\n }\n if (snapshot?.projectTarget?.targetId !== pageTarget) return;\n const phase = snapshot.projectPhase;\n const generation = typeof snapshot.browserGeneration === 'number' ? snapshot.browserGeneration : undefined;\n if (phase === 'starting') {\n reloadSawStarting = true;\n reloadFloor = generation ?? reloadFloor;\n changed({ restoring: true });\n return;\n }\n if (phase === 'failed') {\n reloadWatch = false;\n changed({ restoring: false, busy: false });\n return;\n }\n if (phase === 'running') {\n if (reloadSawStarting && (generation ?? 0) <= reloadFloor) return;\n // The detach may not have been observed yet. Leave the watch open so a\n // later `starting` hides the shell again until the replacement generation.\n if (reloadSawStarting) reloadWatch = false;\n changed({ restoring: false, busy: false });\n return;\n }\n // An engine that does not report browser phase must not trap the shell on refresh.\n if (phase === undefined) {\n reloadWatch = false;\n changed({ restoring: false, busy: false });\n }\n };\n const accept = (snapshot: WorkspaceState) => {\n if (disposed || (snapshot.revision ?? 0) < (state.snapshot.revision ?? -1)) return;\n changed({ snapshot });\n releaseReload(snapshot);\n // A project opened outside this page (for example `view project open`)\n // is adopted by an empty shell that holds no earlier target identity.\n // Headed documents carry pageTarget and never adopt; a page remembering\n // another target keeps its explicit conflict instead of chasing someone\n // else's session.\n if (!pageTarget && !explicitRoot && !record?.targetId && !initializing && !state.busy && !openedIntent\n && snapshot.projectIntent?.root) {\n void open(snapshot.projectIntent.root);\n return;\n }\n const remoteTargetUrl = snapshot?.projectTarget?.url;\n if (!pageTarget && !explicitRoot && !record?.targetId && !initializing && !state.busy\n && snapshot?.workspaceTargetLost !== true && snapshot?.projectPhase !== 'failed'\n && typeof snapshot?.project?.root === 'string' && snapshot.project.root.trim() !== ''\n && typeof remoteTargetUrl === 'string' && remoteTargetUrl.trim() !== '') {\n void Promise.resolve(navigate(snapshot)).catch(fail);\n return;\n }\n if (initializing || !pageTarget || snapshot.projectTarget?.targetId !== pageTarget || !snapshot.project?.root) return;\n record = {\n ...record, version: 1, root: snapshot.project.root, targetId: pageTarget,\n };\n save(window, record);\n };\n const fail = (error: unknown) => {\n // A terminal failure ends restoration. Keep the error visible and allow an\n // explicit retry instead of leaving project pages behind a loading screen.\n reloadWatch = false;\n changed({ busy: false, restoring: false, error: error instanceof Error ? error.message : String(error) });\n };\n const run = async (action: () => Promise<unknown>) => {\n if (disposed || state.busy) return;\n changed({ busy: true, error: null, restoring: true });\n try { await action(); }\n catch (error) { if (!controller.signal.aborted) fail(error); }\n finally { changed({ busy: false }); }\n };\n const navigate = (snapshot: WorkspaceState) => {\n if (disposed) return;\n record = { ...record, version: 1, root: snapshot?.project?.root,\n targetId: snapshot?.projectTarget?.targetId };\n if (!snapshot?.projectTarget?.url || !window.addEventListener) return navigateProjectSession(snapshot, window, record);\n // Keep this document's activation pending until the browser leaves. Starting\n // another App here races the old project server's guarded replacement.\n return new Promise<void>(resolve => {\n const leave = () => {\n window.removeEventListener('pagehide', leave);\n cancelNavigation = undefined;\n resolve();\n };\n cancelNavigation = leave;\n window.addEventListener('pagehide', leave, { once: true });\n try { navigateProjectSession(snapshot, window, record); }\n catch (error) { leave(); throw error; }\n });\n };\n const recover = async () => {\n const snapshot = await client.getState({ signal: controller.signal });\n accept(snapshot);\n const expectedTargetId = pageTarget ?? record?.targetId;\n if (!expectedTargetId || snapshot.projectTarget?.targetId !== expectedTargetId)\n throw new Error('The project changed in another page. Open the current View entry and choose a project explicitly.');\n return navigate(await client.reopenProject({ ...options, expectedTargetId, expectedTargetState: 'lost' }));\n };\n const open = (root: string) => run(async () => {\n openedIntent = true;\n const snapshot = await client.getState({ signal: controller.signal });\n accept(snapshot);\n if (snapshot.project) {\n if (snapshot.project.root !== root) throw new Error('Another project is already open. Close it explicitly before opening a different project.');\n record = { ...record, version: 1, root, targetId: snapshot.projectTarget?.targetId };\n await recover();\n return;\n }\n record = { version: 1, root, entry: url ? url.origin + url.pathname : undefined };\n return navigate(await client.openProject(root, { ...options, expectedTargetId: null }));\n });\n const reconnect = () => run(recover);\n const stop = client.subscribe(accept);\n const probeEntry = async () => {\n if (!record?.entry || disposed) return;\n changed({ busy: true, error: null, restoring: true });\n for (const delay of [0, 250, 500, 1000, 2000, 4000]) {\n await new Promise<void>(resolve => {\n cancelDelay = resolve;\n retryTimer = setTimeout(resolve, delay);\n });\n cancelDelay = undefined;\n if (disposed) return;\n try {\n const response = await window.fetch(new URL('/__forgeax/view/health', record.entry), {\n cache: 'no-store', signal: AbortSignal.any([controller.signal, AbortSignal.timeout(2000)]),\n });\n if (!response.ok) throw new Error('View entry is unavailable');\n if (!disposed) {\n const destination = projectSessionUrl(record.entry, record);\n if (!window.addEventListener) location.replace(destination);\n else await new Promise<void>(resolve => {\n const leave = () => {\n window.removeEventListener('pagehide', leave);\n cancelNavigation = undefined;\n resolve();\n };\n cancelNavigation = leave;\n window.addEventListener('pagehide', leave, { once: true });\n try { location.replace(destination); }\n catch (error) { leave(); throw error; }\n });\n }\n return;\n } catch (error) { if (disposed) return; }\n }\n fail(new Error('View is unavailable. Start or reconnect the backend and View, then retry.'));\n };\n const returnToEntry = () => reconnecting ??= probeEntry().finally(() => { reconnecting = undefined; });\n const disconnect = pageTarget ? client.onDisconnect?.(error => {\n if (/stopped|stopping|unauthorized|forbidden|incompatible/i.test(error?.message ?? '')) {\n fail(error);\n } else void returnToEntry();\n }) : undefined;\n const ready = (async () => {\n if (!url) return;\n if (url.hash.includes(HASH)) {\n save(window, record);\n url.hash = '';\n window.history?.replaceState(null, '', url.href);\n }\n // Refresh keeps this document. The project server and its catalog stay up;\n // the replacement browser reports ready and the shell leaves `restoring`.\n // Do not reopen the project or replay the previous page's resource history.\n if (pageTarget && navigation?.type === 'reload') {\n const snapshot = await client.getState({ signal: controller.signal });\n accept(snapshot);\n return;\n }\n const snapshot = await client.getState({ signal: controller.signal });\n accept(snapshot);\n if (!pageTarget) {\n if (explicitRoot) await open(explicitRoot);\n else if (record?.root && record?.targetId) await reconnect();\n else if (snapshot.projectIntent?.root) await open(snapshot.projectIntent.root);\n // A project remote-opened before this page loaded leaves no explicit\n // intent and no remembered target here; the post-initialization accept\n // below adopts its headed document.\n return;\n }\n })().catch(fail).finally(() => { initializing = false; accept(state.snapshot); });\n return {\n ready, open, reconnect,\n reconnectHost: returnToEntry,\n getSnapshot: () => state,\n subscribe(listener: (state: ProjectSessionState) => void) { listeners.add(listener); listener(state); return () => listeners.delete(listener); },\n dispose() {\n disposed = true;\n controller.abort();\n clearTimeout(retryTimer);\n cancelDelay?.();\n cancelNavigation?.();\n disconnect?.();\n stop();\n listeners.clear();\n },\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["snapshot"]
|
|
7
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FRONTEND_PLUGIN_ID,
|
|
3
3
|
identity_exports
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-N2SH3JGI.mjs";
|
|
5
5
|
import {
|
|
6
6
|
applyResourcePagePlugin
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-KPLESRQY.mjs";
|
|
8
8
|
|
|
9
9
|
// packages/view-plugin-asset/src/frontend.ts
|
|
10
10
|
var VIEW_ASSET_FRONTEND_PLUGIN_ID = FRONTEND_PLUGIN_ID;
|
|
@@ -22,4 +22,4 @@ export {
|
|
|
22
22
|
viewAssetFrontendPlugin,
|
|
23
23
|
frontend_default
|
|
24
24
|
};
|
|
25
|
-
//# sourceMappingURL=chunk-
|
|
25
|
+
//# sourceMappingURL=chunk-DOU4MNMQ.mjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
traceView
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QW2VT3XB.mjs";
|
|
4
4
|
import {
|
|
5
5
|
createWorkspaceStateReader
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WJNASQF2.mjs";
|
|
7
7
|
|
|
8
8
|
// packages/view-workspace-core/src/resource-open.ts
|
|
9
9
|
var LOG_PREFIX = "[forgeax.view.resource-open]";
|
|
@@ -162,4 +162,4 @@ export {
|
|
|
162
162
|
selectWorkspaceResourcePreview,
|
|
163
163
|
observeWorkspaceOpenRequests
|
|
164
164
|
};
|
|
165
|
-
//# sourceMappingURL=chunk-
|
|
165
|
+
//# sourceMappingURL=chunk-E4G4HDOC.mjs.map
|
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
FRONTEND_MODULE,
|
|
3
3
|
FRONTEND_PLUGIN_ID,
|
|
4
4
|
identity_exports
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-B24VYGHV.mjs";
|
|
6
6
|
import {
|
|
7
7
|
applyResourcePagePlugin
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-KPLESRQY.mjs";
|
|
9
9
|
|
|
10
10
|
// packages/view-plugin-material/src/frontend.ts
|
|
11
11
|
var VIEW_MATERIAL_FRONTEND_PLUGIN_ID = FRONTEND_PLUGIN_ID;
|
|
@@ -29,4 +29,4 @@ export {
|
|
|
29
29
|
viewMaterialFrontendPlugin,
|
|
30
30
|
frontend_default
|
|
31
31
|
};
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
32
|
+
//# sourceMappingURL=chunk-EZAJ66NW.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
viewPlayPresentationPlugin
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XUNDH3E7.mjs";
|
|
4
4
|
import {
|
|
5
5
|
PRESENTATION_PLUGIN_ID
|
|
6
6
|
} from "./chunk-J5B4LX5H.mjs";
|
|
@@ -14,4 +14,4 @@ var presentation_default = {
|
|
|
14
14
|
export {
|
|
15
15
|
presentation_default
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-FIWL6TQS.mjs.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createViewWorkspaceClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PCQNUFDL.mjs";
|
|
4
4
|
import {
|
|
5
5
|
requireWorkspaceString,
|
|
6
6
|
workspaceError
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-QJHQN6OD.mjs";
|
|
8
8
|
|
|
9
9
|
// packages/view-workspace-core/src/resident.ts
|
|
10
10
|
import { createReadStream, existsSync, statSync } from "node:fs";
|
|
@@ -295,4 +295,4 @@ export {
|
|
|
295
295
|
startViewHostServer,
|
|
296
296
|
connectViewWorkspace
|
|
297
297
|
};
|
|
298
|
-
//# sourceMappingURL=chunk-
|
|
298
|
+
//# sourceMappingURL=chunk-FSSARTVM.mjs.map
|
|
@@ -29,10 +29,10 @@ import {
|
|
|
29
29
|
import {
|
|
30
30
|
createWorkspaceObservation,
|
|
31
31
|
createWorkspaceStateReader
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-WJNASQF2.mjs";
|
|
33
33
|
import {
|
|
34
34
|
jsonUnchanged
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-QJHQN6OD.mjs";
|
|
36
36
|
|
|
37
37
|
// packages/view-plugin-inspector/src/ui/mount.tsx
|
|
38
38
|
import { createRoot } from "react-dom/client";
|
|
@@ -431,4 +431,4 @@ async function mountInspectorPanel(props) {
|
|
|
431
431
|
export {
|
|
432
432
|
mountInspectorPanel
|
|
433
433
|
};
|
|
434
|
-
//# sourceMappingURL=chunk-
|
|
434
|
+
//# sourceMappingURL=chunk-FXXPWAXM.mjs.map
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createViewFrontendRoot
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-66LM6NO6.mjs";
|
|
4
4
|
import {
|
|
5
5
|
createViewPageHost,
|
|
6
6
|
createViewPageTypeRegistry
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WFM434WJ.mjs";
|
|
8
8
|
import {
|
|
9
9
|
createViewSlotRegistry
|
|
10
10
|
} from "./chunk-GQOXQ4AV.mjs";
|
|
11
11
|
import {
|
|
12
12
|
VIEW_FRONTEND_ROOT_PROGRAM
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-CYOLEAAY.mjs";
|
|
14
14
|
import {
|
|
15
15
|
workspaceBrowserEndpoint
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-PCQNUFDL.mjs";
|
|
17
17
|
import {
|
|
18
18
|
requireWorkspaceString
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-QJHQN6OD.mjs";
|
|
20
20
|
|
|
21
21
|
// packages/viewer/src/host/frontend.ts
|
|
22
22
|
import { createFrontendHost } from "@forgeax/engine/host/frontend";
|
|
@@ -135,4 +135,4 @@ export {
|
|
|
135
135
|
mountViewWorkspace,
|
|
136
136
|
mountViewViewer
|
|
137
137
|
};
|
|
138
|
-
//# sourceMappingURL=chunk-
|
|
138
|
+
//# sourceMappingURL=chunk-G2QCXN56.mjs.map
|