@forgeax/view 0.2.1-beta-20260924075842
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/CHANGELOG.md +11 -0
- package/README.md +742 -0
- package/dist/modules/backend.mjs +54 -0
- package/dist/modules/backend.mjs.map +7 -0
- package/dist/modules/browser.mjs +180 -0
- package/dist/modules/browser.mjs.map +7 -0
- package/dist/modules/carrier-contract.mjs +38 -0
- package/dist/modules/carrier-contract.mjs.map +7 -0
- package/dist/modules/carrier.mjs +13 -0
- package/dist/modules/carrier.mjs.map +7 -0
- package/dist/modules/chunks/chunk-2ASWB6IX.mjs +225 -0
- package/dist/modules/chunks/chunk-2ASWB6IX.mjs.map +7 -0
- package/dist/modules/chunks/chunk-2IJKOG2F.mjs +801 -0
- package/dist/modules/chunks/chunk-2IJKOG2F.mjs.map +7 -0
- package/dist/modules/chunks/chunk-2K3BBJ5S.mjs +9 -0
- package/dist/modules/chunks/chunk-2K3BBJ5S.mjs.map +7 -0
- package/dist/modules/chunks/chunk-32GD5LL6.mjs +482 -0
- package/dist/modules/chunks/chunk-32GD5LL6.mjs.map +7 -0
- package/dist/modules/chunks/chunk-3B4KFAEC.mjs +10 -0
- package/dist/modules/chunks/chunk-3B4KFAEC.mjs.map +7 -0
- package/dist/modules/chunks/chunk-46O5WX43.mjs +25 -0
- package/dist/modules/chunks/chunk-46O5WX43.mjs.map +7 -0
- package/dist/modules/chunks/chunk-47J5JXAB.mjs +237 -0
- package/dist/modules/chunks/chunk-47J5JXAB.mjs.map +7 -0
- package/dist/modules/chunks/chunk-4BXQOUDQ.mjs +17 -0
- package/dist/modules/chunks/chunk-4BXQOUDQ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-4GQWYU2V.mjs +126 -0
- package/dist/modules/chunks/chunk-4GQWYU2V.mjs.map +7 -0
- package/dist/modules/chunks/chunk-4N5X2PRQ.mjs +48 -0
- package/dist/modules/chunks/chunk-4N5X2PRQ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-4WXD2KYX.mjs +56 -0
- package/dist/modules/chunks/chunk-4WXD2KYX.mjs.map +7 -0
- package/dist/modules/chunks/chunk-6ZWWVAZK.mjs +468 -0
- package/dist/modules/chunks/chunk-6ZWWVAZK.mjs.map +7 -0
- package/dist/modules/chunks/chunk-73UZNRHN.mjs +296 -0
- package/dist/modules/chunks/chunk-73UZNRHN.mjs.map +7 -0
- package/dist/modules/chunks/chunk-7ITLCRND.mjs +10 -0
- package/dist/modules/chunks/chunk-7ITLCRND.mjs.map +7 -0
- package/dist/modules/chunks/chunk-7TGVWKH7.mjs +59 -0
- package/dist/modules/chunks/chunk-7TGVWKH7.mjs.map +7 -0
- package/dist/modules/chunks/chunk-7URFF53W.mjs +42 -0
- package/dist/modules/chunks/chunk-7URFF53W.mjs.map +7 -0
- package/dist/modules/chunks/chunk-7YSDRIFN.mjs +14 -0
- package/dist/modules/chunks/chunk-7YSDRIFN.mjs.map +7 -0
- package/dist/modules/chunks/chunk-AAFVCQPK.mjs +52 -0
- package/dist/modules/chunks/chunk-AAFVCQPK.mjs.map +7 -0
- package/dist/modules/chunks/chunk-AEK7ZESQ.mjs +18 -0
- package/dist/modules/chunks/chunk-AEK7ZESQ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-AL6ZWIEU.mjs +42 -0
- package/dist/modules/chunks/chunk-AL6ZWIEU.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ALT7XVMQ.mjs +73 -0
- package/dist/modules/chunks/chunk-ALT7XVMQ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ASI2HBE6.mjs +116 -0
- package/dist/modules/chunks/chunk-ASI2HBE6.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ATWGCH7I.mjs +174 -0
- package/dist/modules/chunks/chunk-ATWGCH7I.mjs.map +7 -0
- package/dist/modules/chunks/chunk-C45U6IIY.mjs +692 -0
- package/dist/modules/chunks/chunk-C45U6IIY.mjs.map +7 -0
- package/dist/modules/chunks/chunk-C7R3YRA7.mjs +98 -0
- package/dist/modules/chunks/chunk-C7R3YRA7.mjs.map +7 -0
- package/dist/modules/chunks/chunk-CRMICXKN.mjs +87 -0
- package/dist/modules/chunks/chunk-CRMICXKN.mjs.map +7 -0
- package/dist/modules/chunks/chunk-CUH2G6UF.mjs +81 -0
- package/dist/modules/chunks/chunk-CUH2G6UF.mjs.map +7 -0
- package/dist/modules/chunks/chunk-D7GWRZLL.mjs +77 -0
- package/dist/modules/chunks/chunk-D7GWRZLL.mjs.map +7 -0
- package/dist/modules/chunks/chunk-DBWUIBE3.mjs +10 -0
- package/dist/modules/chunks/chunk-DBWUIBE3.mjs.map +7 -0
- package/dist/modules/chunks/chunk-DQWVWWUU.mjs +77 -0
- package/dist/modules/chunks/chunk-DQWVWWUU.mjs.map +7 -0
- package/dist/modules/chunks/chunk-DZZ2WFEU.mjs +122 -0
- package/dist/modules/chunks/chunk-DZZ2WFEU.mjs.map +7 -0
- package/dist/modules/chunks/chunk-E4UIAN26.mjs +58 -0
- package/dist/modules/chunks/chunk-E4UIAN26.mjs.map +7 -0
- package/dist/modules/chunks/chunk-EJGBVKFE.mjs +77 -0
- package/dist/modules/chunks/chunk-EJGBVKFE.mjs.map +7 -0
- package/dist/modules/chunks/chunk-EPSTTHWV.mjs +173 -0
- package/dist/modules/chunks/chunk-EPSTTHWV.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ER7T6QJ3.mjs +64 -0
- package/dist/modules/chunks/chunk-ER7T6QJ3.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FD4BAJ6K.mjs +389 -0
- package/dist/modules/chunks/chunk-FD4BAJ6K.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FJM6WWIY.mjs +80 -0
- package/dist/modules/chunks/chunk-FJM6WWIY.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FKCQYDLX.mjs +162 -0
- package/dist/modules/chunks/chunk-FKCQYDLX.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FLGC65SR.mjs +10 -0
- package/dist/modules/chunks/chunk-FLGC65SR.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FMCACPX5.mjs +289 -0
- package/dist/modules/chunks/chunk-FMCACPX5.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FOBRLUQV.mjs +51 -0
- package/dist/modules/chunks/chunk-FOBRLUQV.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FV3DSKZB.mjs +33 -0
- package/dist/modules/chunks/chunk-FV3DSKZB.mjs.map +7 -0
- package/dist/modules/chunks/chunk-G7BAFAGO.mjs +98 -0
- package/dist/modules/chunks/chunk-G7BAFAGO.mjs.map +7 -0
- package/dist/modules/chunks/chunk-GQBZMCTK.mjs +145 -0
- package/dist/modules/chunks/chunk-GQBZMCTK.mjs.map +7 -0
- package/dist/modules/chunks/chunk-GYWIY7AL.mjs +131 -0
- package/dist/modules/chunks/chunk-GYWIY7AL.mjs.map +7 -0
- package/dist/modules/chunks/chunk-H3KNBALD.mjs +256 -0
- package/dist/modules/chunks/chunk-H3KNBALD.mjs.map +7 -0
- package/dist/modules/chunks/chunk-H3M22JDL.mjs +144 -0
- package/dist/modules/chunks/chunk-H3M22JDL.mjs.map +7 -0
- package/dist/modules/chunks/chunk-HES3DNTM.mjs +40 -0
- package/dist/modules/chunks/chunk-HES3DNTM.mjs.map +7 -0
- package/dist/modules/chunks/chunk-I5BFP7SS.mjs +2392 -0
- package/dist/modules/chunks/chunk-I5BFP7SS.mjs.map +7 -0
- package/dist/modules/chunks/chunk-IGRMZYRD.mjs +15 -0
- package/dist/modules/chunks/chunk-IGRMZYRD.mjs.map +7 -0
- package/dist/modules/chunks/chunk-IKNGC766.mjs +321 -0
- package/dist/modules/chunks/chunk-IKNGC766.mjs.map +7 -0
- package/dist/modules/chunks/chunk-IVHNYKZB.mjs +35 -0
- package/dist/modules/chunks/chunk-IVHNYKZB.mjs.map +7 -0
- package/dist/modules/chunks/chunk-JHOURMYW.mjs +101 -0
- package/dist/modules/chunks/chunk-JHOURMYW.mjs.map +7 -0
- package/dist/modules/chunks/chunk-JURXMRFA.mjs +282 -0
- package/dist/modules/chunks/chunk-JURXMRFA.mjs.map +7 -0
- package/dist/modules/chunks/chunk-JWZIREC3.mjs +18 -0
- package/dist/modules/chunks/chunk-JWZIREC3.mjs.map +7 -0
- package/dist/modules/chunks/chunk-KHRTIZ56.mjs +1400 -0
- package/dist/modules/chunks/chunk-KHRTIZ56.mjs.map +7 -0
- package/dist/modules/chunks/chunk-KLJZZ23J.mjs +102 -0
- package/dist/modules/chunks/chunk-KLJZZ23J.mjs.map +7 -0
- package/dist/modules/chunks/chunk-KNBAYU5I.mjs +49 -0
- package/dist/modules/chunks/chunk-KNBAYU5I.mjs.map +7 -0
- package/dist/modules/chunks/chunk-KSZNCFU4.mjs +125 -0
- package/dist/modules/chunks/chunk-KSZNCFU4.mjs.map +7 -0
- package/dist/modules/chunks/chunk-L45W6KM6.mjs +158 -0
- package/dist/modules/chunks/chunk-L45W6KM6.mjs.map +7 -0
- package/dist/modules/chunks/chunk-LERMYZRC.mjs +239 -0
- package/dist/modules/chunks/chunk-LERMYZRC.mjs.map +7 -0
- package/dist/modules/chunks/chunk-LKJCXYSJ.mjs +91 -0
- package/dist/modules/chunks/chunk-LKJCXYSJ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-MBS3EICT.mjs +25 -0
- package/dist/modules/chunks/chunk-MBS3EICT.mjs.map +7 -0
- package/dist/modules/chunks/chunk-MUOQZPVH.mjs +609 -0
- package/dist/modules/chunks/chunk-MUOQZPVH.mjs.map +7 -0
- package/dist/modules/chunks/chunk-MVEPGFSB.mjs +1 -0
- package/dist/modules/chunks/chunk-MVEPGFSB.mjs.map +7 -0
- package/dist/modules/chunks/chunk-NBJKLWJ5.mjs +42 -0
- package/dist/modules/chunks/chunk-NBJKLWJ5.mjs.map +7 -0
- package/dist/modules/chunks/chunk-NBLGKTEM.mjs +86 -0
- package/dist/modules/chunks/chunk-NBLGKTEM.mjs.map +7 -0
- package/dist/modules/chunks/chunk-NI7CS3I2.mjs +110 -0
- package/dist/modules/chunks/chunk-NI7CS3I2.mjs.map +7 -0
- package/dist/modules/chunks/chunk-NJH2OJFC.mjs +2113 -0
- package/dist/modules/chunks/chunk-NJH2OJFC.mjs.map +7 -0
- package/dist/modules/chunks/chunk-OBK4LIJB.mjs +20 -0
- package/dist/modules/chunks/chunk-OBK4LIJB.mjs.map +7 -0
- package/dist/modules/chunks/chunk-PEUT3FW7.mjs +1 -0
- package/dist/modules/chunks/chunk-PEUT3FW7.mjs.map +7 -0
- package/dist/modules/chunks/chunk-PRZOWPDN.mjs +66 -0
- package/dist/modules/chunks/chunk-PRZOWPDN.mjs.map +7 -0
- package/dist/modules/chunks/chunk-Q4RXBGQS.mjs +55 -0
- package/dist/modules/chunks/chunk-Q4RXBGQS.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QBHBKOIL.mjs +55 -0
- package/dist/modules/chunks/chunk-QBHBKOIL.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QD6CCRMG.mjs +20 -0
- package/dist/modules/chunks/chunk-QD6CCRMG.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QF4V23GW.mjs +39 -0
- package/dist/modules/chunks/chunk-QF4V23GW.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QK6W7MJO.mjs +42 -0
- package/dist/modules/chunks/chunk-QK6W7MJO.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QL7V6DK7.mjs +34 -0
- package/dist/modules/chunks/chunk-QL7V6DK7.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QLBQQKRI.mjs +25 -0
- package/dist/modules/chunks/chunk-QLBQQKRI.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QLZQGZDC.mjs +418 -0
- package/dist/modules/chunks/chunk-QLZQGZDC.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QSKQZGK7.mjs +1625 -0
- package/dist/modules/chunks/chunk-QSKQZGK7.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QURKBAG4.mjs +25 -0
- package/dist/modules/chunks/chunk-QURKBAG4.mjs.map +7 -0
- package/dist/modules/chunks/chunk-R274XBEH.mjs +53 -0
- package/dist/modules/chunks/chunk-R274XBEH.mjs.map +7 -0
- package/dist/modules/chunks/chunk-R4I4JEY5.mjs +77 -0
- package/dist/modules/chunks/chunk-R4I4JEY5.mjs.map +7 -0
- package/dist/modules/chunks/chunk-RR6L6VVR.mjs +9 -0
- package/dist/modules/chunks/chunk-RR6L6VVR.mjs.map +7 -0
- package/dist/modules/chunks/chunk-RXF7SBBZ.mjs +125 -0
- package/dist/modules/chunks/chunk-RXF7SBBZ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-SR66S6EJ.mjs +138 -0
- package/dist/modules/chunks/chunk-SR66S6EJ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-SSQMQJ52.mjs +27 -0
- package/dist/modules/chunks/chunk-SSQMQJ52.mjs.map +7 -0
- package/dist/modules/chunks/chunk-TP26TASL.mjs +20 -0
- package/dist/modules/chunks/chunk-TP26TASL.mjs.map +7 -0
- package/dist/modules/chunks/chunk-TSAEK5P3.mjs +50 -0
- package/dist/modules/chunks/chunk-TSAEK5P3.mjs.map +7 -0
- package/dist/modules/chunks/chunk-UAY27HT3.mjs +68 -0
- package/dist/modules/chunks/chunk-UAY27HT3.mjs.map +7 -0
- package/dist/modules/chunks/chunk-UDLIWGWS.mjs +103 -0
- package/dist/modules/chunks/chunk-UDLIWGWS.mjs.map +7 -0
- package/dist/modules/chunks/chunk-UDVQHPWV.mjs +89 -0
- package/dist/modules/chunks/chunk-UDVQHPWV.mjs.map +7 -0
- package/dist/modules/chunks/chunk-UM23W3G7.mjs +237 -0
- package/dist/modules/chunks/chunk-UM23W3G7.mjs.map +7 -0
- package/dist/modules/chunks/chunk-VDZJWEAA.mjs +214 -0
- package/dist/modules/chunks/chunk-VDZJWEAA.mjs.map +7 -0
- package/dist/modules/chunks/chunk-VIGOJWSO.mjs +42 -0
- package/dist/modules/chunks/chunk-VIGOJWSO.mjs.map +7 -0
- package/dist/modules/chunks/chunk-VY3S5BWI.mjs +284 -0
- package/dist/modules/chunks/chunk-VY3S5BWI.mjs.map +7 -0
- package/dist/modules/chunks/chunk-VZXGRZYU.mjs +47 -0
- package/dist/modules/chunks/chunk-VZXGRZYU.mjs.map +7 -0
- package/dist/modules/chunks/chunk-W5DMQZB5.mjs +42 -0
- package/dist/modules/chunks/chunk-W5DMQZB5.mjs.map +7 -0
- package/dist/modules/chunks/chunk-WOMHSTVZ.mjs +918 -0
- package/dist/modules/chunks/chunk-WOMHSTVZ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-XFQT7XCG.mjs +42 -0
- package/dist/modules/chunks/chunk-XFQT7XCG.mjs.map +7 -0
- package/dist/modules/chunks/chunk-XJZEVRYX.mjs +98 -0
- package/dist/modules/chunks/chunk-XJZEVRYX.mjs.map +7 -0
- package/dist/modules/chunks/chunk-XUYFV23R.mjs +317 -0
- package/dist/modules/chunks/chunk-XUYFV23R.mjs.map +7 -0
- package/dist/modules/chunks/chunk-Y5HXCPPQ.mjs +58 -0
- package/dist/modules/chunks/chunk-Y5HXCPPQ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-YTHGRKGI.mjs +147 -0
- package/dist/modules/chunks/chunk-YTHGRKGI.mjs.map +7 -0
- package/dist/modules/chunks/chunk-YVQSDKAO.mjs +341 -0
- package/dist/modules/chunks/chunk-YVQSDKAO.mjs.map +7 -0
- package/dist/modules/chunks/chunk-YYXQDUVT.mjs +123 -0
- package/dist/modules/chunks/chunk-YYXQDUVT.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ZFXZ2NUI.mjs +142 -0
- package/dist/modules/chunks/chunk-ZFXZ2NUI.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ZLNWF4ET.mjs +9 -0
- package/dist/modules/chunks/chunk-ZLNWF4ET.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ZLU5QW2O.mjs +9 -0
- package/dist/modules/chunks/chunk-ZLU5QW2O.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ZNZPYE2V.mjs +28 -0
- package/dist/modules/chunks/chunk-ZNZPYE2V.mjs.map +7 -0
- package/dist/modules/chunks/core-564N45MO.mjs +7480 -0
- package/dist/modules/chunks/core-564N45MO.mjs.map +7 -0
- package/dist/modules/chunks/css-BKH4SVJG.mjs +8 -0
- package/dist/modules/chunks/css-BKH4SVJG.mjs.map +7 -0
- package/dist/modules/chunks/engine-javascript-PDVIGNGR.mjs +3241 -0
- package/dist/modules/chunks/engine-javascript-PDVIGNGR.mjs.map +7 -0
- package/dist/modules/chunks/github-dark-default-6HVTHEWF.mjs +8 -0
- package/dist/modules/chunks/github-dark-default-6HVTHEWF.mjs.map +7 -0
- package/dist/modules/chunks/github-light-default-LAXRA6XL.mjs +8 -0
- package/dist/modules/chunks/github-light-default-LAXRA6XL.mjs.map +7 -0
- package/dist/modules/chunks/glsl-UC3YWUD2.mjs +18 -0
- package/dist/modules/chunks/glsl-UC3YWUD2.mjs.map +7 -0
- package/dist/modules/chunks/html-FRVIUV63.mjs +19 -0
- package/dist/modules/chunks/html-FRVIUV63.mjs.map +7 -0
- package/dist/modules/chunks/javascript-LN3OC7S2.mjs +8 -0
- package/dist/modules/chunks/javascript-LN3OC7S2.mjs.map +7 -0
- package/dist/modules/chunks/json-5CUGWTOP.mjs +11 -0
- package/dist/modules/chunks/json-5CUGWTOP.mjs.map +7 -0
- package/dist/modules/chunks/json5-YZQI5VNO.mjs +11 -0
- package/dist/modules/chunks/json5-YZQI5VNO.mjs.map +7 -0
- package/dist/modules/chunks/jsonc-SWID6VOZ.mjs +11 -0
- package/dist/modules/chunks/jsonc-SWID6VOZ.mjs.map +7 -0
- package/dist/modules/chunks/jsx-A7RDCLJO.mjs +11 -0
- package/dist/modules/chunks/jsx-A7RDCLJO.mjs.map +7 -0
- package/dist/modules/chunks/markdown-QTCU5KP5.mjs +11 -0
- package/dist/modules/chunks/markdown-QTCU5KP5.mjs.map +7 -0
- package/dist/modules/chunks/python-LAZONBIB.mjs +11 -0
- package/dist/modules/chunks/python-LAZONBIB.mjs.map +7 -0
- package/dist/modules/chunks/rust-XWTPJFJO.mjs +11 -0
- package/dist/modules/chunks/rust-XWTPJFJO.mjs.map +7 -0
- package/dist/modules/chunks/scss-CFXRHUUW.mjs +15 -0
- package/dist/modules/chunks/scss-CFXRHUUW.mjs.map +7 -0
- package/dist/modules/chunks/shellscript-OHO3LCVU.mjs +11 -0
- package/dist/modules/chunks/shellscript-OHO3LCVU.mjs.map +7 -0
- package/dist/modules/chunks/toml-IOHFZJ5B.mjs +11 -0
- package/dist/modules/chunks/toml-IOHFZJ5B.mjs.map +7 -0
- package/dist/modules/chunks/tsx-2E6WNX2E.mjs +11 -0
- package/dist/modules/chunks/tsx-2E6WNX2E.mjs.map +7 -0
- package/dist/modules/chunks/typescript-PBKAS54P.mjs +11 -0
- package/dist/modules/chunks/typescript-PBKAS54P.mjs.map +7 -0
- package/dist/modules/chunks/wgsl-PS6QPRLZ.mjs +11 -0
- package/dist/modules/chunks/wgsl-PS6QPRLZ.mjs.map +7 -0
- package/dist/modules/chunks/xml-JECR2ACB.mjs +18 -0
- package/dist/modules/chunks/xml-JECR2ACB.mjs.map +7 -0
- package/dist/modules/chunks/yaml-P2SV4LOE.mjs +11 -0
- package/dist/modules/chunks/yaml-P2SV4LOE.mjs.map +7 -0
- package/dist/modules/cli-contributions.mjs +32 -0
- package/dist/modules/cli-contributions.mjs.map +7 -0
- package/dist/modules/cli.mjs +14 -0
- package/dist/modules/cli.mjs.map +7 -0
- package/dist/modules/command-executor.mjs +65 -0
- package/dist/modules/command-executor.mjs.map +7 -0
- package/dist/modules/commands.mjs +10 -0
- package/dist/modules/commands.mjs.map +7 -0
- package/dist/modules/embedded.mjs +18608 -0
- package/dist/modules/embedded.mjs.map +7 -0
- package/dist/modules/extension-bridge.mjs +18 -0
- package/dist/modules/extension-bridge.mjs.map +7 -0
- package/dist/modules/frontend-root.mjs +61 -0
- package/dist/modules/frontend-root.mjs.map +7 -0
- package/dist/modules/index.mjs +784 -0
- package/dist/modules/index.mjs.map +7 -0
- package/dist/modules/page.mjs +45 -0
- package/dist/modules/page.mjs.map +7 -0
- package/dist/modules/pages/scene.mjs +18 -0
- package/dist/modules/pages/scene.mjs.map +7 -0
- package/dist/modules/plugin.mjs +56 -0
- package/dist/modules/plugin.mjs.map +7 -0
- package/dist/modules/plugins/asset/frontend.mjs +23 -0
- package/dist/modules/plugins/asset/frontend.mjs.map +7 -0
- package/dist/modules/plugins/asset/i18n.mjs +15 -0
- package/dist/modules/plugins/asset/i18n.mjs.map +7 -0
- package/dist/modules/plugins/asset/identity.mjs +42 -0
- package/dist/modules/plugins/asset/identity.mjs.map +7 -0
- package/dist/modules/plugins/asset/schema.mjs +10 -0
- package/dist/modules/plugins/asset/schema.mjs.map +7 -0
- package/dist/modules/plugins/asset/ui.mjs +16 -0
- package/dist/modules/plugins/asset/ui.mjs.map +7 -0
- package/dist/modules/plugins/content-browser/frontend.mjs +17 -0
- package/dist/modules/plugins/content-browser/frontend.mjs.map +7 -0
- package/dist/modules/plugins/content-browser/i18n.mjs +15 -0
- package/dist/modules/plugins/content-browser/i18n.mjs.map +7 -0
- package/dist/modules/plugins/content-browser/identity.mjs +22 -0
- package/dist/modules/plugins/content-browser/identity.mjs.map +7 -0
- package/dist/modules/plugins/content-browser/schema.mjs +12 -0
- package/dist/modules/plugins/content-browser/schema.mjs.map +7 -0
- package/dist/modules/plugins/content-browser/ui.mjs +15 -0
- package/dist/modules/plugins/content-browser/ui.mjs.map +7 -0
- package/dist/modules/plugins/display/api.mjs +10 -0
- package/dist/modules/plugins/display/api.mjs.map +7 -0
- package/dist/modules/plugins/display/backend.mjs +16 -0
- package/dist/modules/plugins/display/backend.mjs.map +7 -0
- package/dist/modules/plugins/display/carrier-contract.mjs +38 -0
- package/dist/modules/plugins/display/carrier-contract.mjs.map +7 -0
- package/dist/modules/plugins/display/carrier.mjs +13 -0
- package/dist/modules/plugins/display/carrier.mjs.map +7 -0
- package/dist/modules/plugins/display/effects.mjs +8 -0
- package/dist/modules/plugins/display/effects.mjs.map +7 -0
- package/dist/modules/plugins/display/frontend.mjs +14 -0
- package/dist/modules/plugins/display/frontend.mjs.map +7 -0
- package/dist/modules/plugins/display/i18n.mjs +58 -0
- package/dist/modules/plugins/display/i18n.mjs.map +7 -0
- package/dist/modules/plugins/display/identity.mjs +30 -0
- package/dist/modules/plugins/display/identity.mjs.map +7 -0
- package/dist/modules/plugins/display/page-broker.mjs +12 -0
- package/dist/modules/plugins/display/page-broker.mjs.map +7 -0
- package/dist/modules/plugins/display/schema.mjs +40 -0
- package/dist/modules/plugins/display/schema.mjs.map +7 -0
- package/dist/modules/plugins/display/ui.mjs +9 -0
- package/dist/modules/plugins/display/ui.mjs.map +7 -0
- package/dist/modules/plugins/inspector/frontend.mjs +17 -0
- package/dist/modules/plugins/inspector/frontend.mjs.map +7 -0
- package/dist/modules/plugins/inspector/i18n.mjs +15 -0
- package/dist/modules/plugins/inspector/i18n.mjs.map +7 -0
- package/dist/modules/plugins/inspector/identity.mjs +22 -0
- package/dist/modules/plugins/inspector/identity.mjs.map +7 -0
- package/dist/modules/plugins/inspector/schema.mjs +12 -0
- package/dist/modules/plugins/inspector/schema.mjs.map +7 -0
- package/dist/modules/plugins/inspector/ui.mjs +16 -0
- package/dist/modules/plugins/inspector/ui.mjs.map +7 -0
- package/dist/modules/plugins/material/frontend.mjs +25 -0
- package/dist/modules/plugins/material/frontend.mjs.map +7 -0
- package/dist/modules/plugins/material/i18n.mjs +15 -0
- package/dist/modules/plugins/material/i18n.mjs.map +7 -0
- package/dist/modules/plugins/material/identity.mjs +60 -0
- package/dist/modules/plugins/material/identity.mjs.map +7 -0
- package/dist/modules/plugins/material/schema.mjs +47 -0
- package/dist/modules/plugins/material/schema.mjs.map +7 -0
- package/dist/modules/plugins/material/ui.mjs +28 -0
- package/dist/modules/plugins/material/ui.mjs.map +7 -0
- package/dist/modules/plugins/mesh/frontend.mjs +23 -0
- package/dist/modules/plugins/mesh/frontend.mjs.map +7 -0
- package/dist/modules/plugins/mesh/i18n.mjs +15 -0
- package/dist/modules/plugins/mesh/i18n.mjs.map +7 -0
- package/dist/modules/plugins/mesh/identity.mjs +54 -0
- package/dist/modules/plugins/mesh/identity.mjs.map +7 -0
- package/dist/modules/plugins/mesh/schema.mjs +10 -0
- package/dist/modules/plugins/mesh/schema.mjs.map +7 -0
- package/dist/modules/plugins/mesh/ui.mjs +26 -0
- package/dist/modules/plugins/mesh/ui.mjs.map +7 -0
- package/dist/modules/plugins/plugins/api.mjs +11 -0
- package/dist/modules/plugins/plugins/api.mjs.map +7 -0
- package/dist/modules/plugins/plugins/backend.mjs +21 -0
- package/dist/modules/plugins/plugins/backend.mjs.map +7 -0
- package/dist/modules/plugins/plugins/cli.mjs +12 -0
- package/dist/modules/plugins/plugins/cli.mjs.map +7 -0
- package/dist/modules/plugins/plugins/frontend.mjs +17 -0
- package/dist/modules/plugins/plugins/frontend.mjs.map +7 -0
- package/dist/modules/plugins/plugins/i18n.mjs +15 -0
- package/dist/modules/plugins/plugins/i18n.mjs.map +7 -0
- package/dist/modules/plugins/plugins/identity.mjs +26 -0
- package/dist/modules/plugins/plugins/identity.mjs.map +7 -0
- package/dist/modules/plugins/plugins/runtime.mjs +50 -0
- package/dist/modules/plugins/plugins/runtime.mjs.map +7 -0
- package/dist/modules/plugins/plugins/schema.mjs +12 -0
- package/dist/modules/plugins/plugins/schema.mjs.map +7 -0
- package/dist/modules/plugins/plugins/ui/panel.mjs +14 -0
- package/dist/modules/plugins/plugins/ui/panel.mjs.map +7 -0
- package/dist/modules/plugins/plugins/ui.mjs +15 -0
- package/dist/modules/plugins/plugins/ui.mjs.map +7 -0
- package/dist/modules/plugins/scene/frontend.mjs +18 -0
- package/dist/modules/plugins/scene/frontend.mjs.map +7 -0
- package/dist/modules/plugins/scene/identity.mjs +14 -0
- package/dist/modules/plugins/scene/identity.mjs.map +7 -0
- package/dist/modules/plugins/scene-tree/frontend.mjs +17 -0
- package/dist/modules/plugins/scene-tree/frontend.mjs.map +7 -0
- package/dist/modules/plugins/scene-tree/i18n.mjs +15 -0
- package/dist/modules/plugins/scene-tree/i18n.mjs.map +7 -0
- package/dist/modules/plugins/scene-tree/identity.mjs +22 -0
- package/dist/modules/plugins/scene-tree/identity.mjs.map +7 -0
- package/dist/modules/plugins/scene-tree/schema.mjs +12 -0
- package/dist/modules/plugins/scene-tree/schema.mjs.map +7 -0
- package/dist/modules/plugins/scene-tree/ui.mjs +16 -0
- package/dist/modules/plugins/scene-tree/ui.mjs.map +7 -0
- package/dist/modules/plugins/texture/frontend.mjs +23 -0
- package/dist/modules/plugins/texture/frontend.mjs.map +7 -0
- package/dist/modules/plugins/texture/i18n.mjs +15 -0
- package/dist/modules/plugins/texture/i18n.mjs.map +7 -0
- package/dist/modules/plugins/texture/identity.mjs +54 -0
- package/dist/modules/plugins/texture/identity.mjs.map +7 -0
- package/dist/modules/plugins/texture/schema.mjs +10 -0
- package/dist/modules/plugins/texture/schema.mjs.map +7 -0
- package/dist/modules/plugins/texture/ui.mjs +26 -0
- package/dist/modules/plugins/texture/ui.mjs.map +7 -0
- package/dist/modules/plugins/viewport/frontend.mjs +27 -0
- package/dist/modules/plugins/viewport/frontend.mjs.map +7 -0
- package/dist/modules/plugins/viewport/identity.mjs +28 -0
- package/dist/modules/plugins/viewport/identity.mjs.map +7 -0
- package/dist/modules/plugins/viewport/presentation-identity.mjs +10 -0
- package/dist/modules/plugins/viewport/presentation-identity.mjs.map +7 -0
- package/dist/modules/plugins/viewport/presentation.mjs +18 -0
- package/dist/modules/plugins/viewport/presentation.mjs.map +7 -0
- package/dist/modules/plugins/viewport/schema.mjs +18 -0
- package/dist/modules/plugins/viewport/schema.mjs.map +7 -0
- package/dist/modules/plugins/viewport/workspace-shell.mjs +29 -0
- package/dist/modules/plugins/viewport/workspace-shell.mjs.map +7 -0
- package/dist/modules/shell/contract.mjs +10 -0
- package/dist/modules/shell/contract.mjs.map +7 -0
- package/dist/modules/shell/frontend.mjs +14 -0
- package/dist/modules/shell/frontend.mjs.map +7 -0
- package/dist/modules/shell/layout-zones.mjs +20 -0
- package/dist/modules/shell/layout-zones.mjs.map +7 -0
- package/dist/modules/start-cli.mjs +57 -0
- package/dist/modules/start-cli.mjs.map +7 -0
- package/dist/modules/start.mjs +18 -0
- package/dist/modules/start.mjs.map +7 -0
- package/dist/modules/viewer/catalog/backend.mjs +47 -0
- package/dist/modules/viewer/catalog/backend.mjs.map +7 -0
- package/dist/modules/viewer/catalog/frontend.mjs +55 -0
- package/dist/modules/viewer/catalog/frontend.mjs.map +7 -0
- package/dist/modules/viewer/catalog/shared.mjs +43 -0
- package/dist/modules/viewer/catalog/shared.mjs.map +7 -0
- package/dist/modules/viewer/catalog.mjs +85 -0
- package/dist/modules/viewer/catalog.mjs.map +7 -0
- package/dist/modules/viewer/cli.mjs +23 -0
- package/dist/modules/viewer/cli.mjs.map +7 -0
- package/dist/modules/viewer-host/frontend.mjs +65 -0
- package/dist/modules/viewer-host/frontend.mjs.map +7 -0
- package/dist/modules/viewer-host/page-registry.mjs +27 -0
- package/dist/modules/viewer-host/page-registry.mjs.map +7 -0
- package/dist/modules/viewer-host/slot-registry.mjs +8 -0
- package/dist/modules/viewer-host/slot-registry.mjs.map +7 -0
- package/dist/modules/viewer-host.mjs +43 -0
- package/dist/modules/viewer-host.mjs.map +7 -0
- package/dist/modules/viewer.mjs +85 -0
- package/dist/modules/viewer.mjs.map +7 -0
- package/dist/modules/workspace/adopt-surface.mjs +16 -0
- package/dist/modules/workspace/adopt-surface.mjs.map +7 -0
- package/dist/modules/workspace/api.mjs +8 -0
- package/dist/modules/workspace/api.mjs.map +7 -0
- package/dist/modules/workspace/backend.mjs +23 -0
- package/dist/modules/workspace/backend.mjs.map +7 -0
- package/dist/modules/workspace/broker.mjs +16 -0
- package/dist/modules/workspace/broker.mjs.map +7 -0
- package/dist/modules/workspace/cli.mjs +9 -0
- package/dist/modules/workspace/cli.mjs.map +7 -0
- package/dist/modules/workspace/client.mjs +15 -0
- package/dist/modules/workspace/client.mjs.map +7 -0
- package/dist/modules/workspace/command-error.mjs +16 -0
- package/dist/modules/workspace/command-error.mjs.map +7 -0
- package/dist/modules/workspace/contract.mjs +71 -0
- package/dist/modules/workspace/contract.mjs.map +7 -0
- package/dist/modules/workspace/demo-client.mjs +127 -0
- package/dist/modules/workspace/demo-client.mjs.map +7 -0
- package/dist/modules/workspace/engine-adapter.mjs +16 -0
- package/dist/modules/workspace/engine-adapter.mjs.map +7 -0
- package/dist/modules/workspace/engine-presentation.mjs +10 -0
- package/dist/modules/workspace/engine-presentation.mjs.map +7 -0
- package/dist/modules/workspace/extension-bridge.mjs +18 -0
- package/dist/modules/workspace/extension-bridge.mjs.map +7 -0
- package/dist/modules/workspace/frontend-plugin.mjs +18 -0
- package/dist/modules/workspace/frontend-plugin.mjs.map +7 -0
- package/dist/modules/workspace/frontend.mjs +29 -0
- package/dist/modules/workspace/frontend.mjs.map +7 -0
- package/dist/modules/workspace/id.mjs +8 -0
- package/dist/modules/workspace/id.mjs.map +7 -0
- package/dist/modules/workspace/inspection-presentation.mjs +12 -0
- package/dist/modules/workspace/inspection-presentation.mjs.map +7 -0
- package/dist/modules/workspace/locale-bridge.mjs +14 -0
- package/dist/modules/workspace/locale-bridge.mjs.map +7 -0
- package/dist/modules/workspace/page-title.mjs +13 -0
- package/dist/modules/workspace/page-title.mjs.map +7 -0
- package/dist/modules/workspace/presentation.mjs +18 -0
- package/dist/modules/workspace/presentation.mjs.map +7 -0
- package/dist/modules/workspace/preview-surface.mjs +17 -0
- package/dist/modules/workspace/preview-surface.mjs.map +7 -0
- package/dist/modules/workspace/project-session.mjs +18 -0
- package/dist/modules/workspace/project-session.mjs.map +7 -0
- package/dist/modules/workspace/render-resize-sync.mjs +12 -0
- package/dist/modules/workspace/render-resize-sync.mjs.map +7 -0
- package/dist/modules/workspace/resident.mjs +16 -0
- package/dist/modules/workspace/resident.mjs.map +7 -0
- package/dist/modules/workspace/resource-open.mjs +34 -0
- package/dist/modules/workspace/resource-open.mjs.map +7 -0
- package/dist/modules/workspace/resource-page.mjs +27 -0
- package/dist/modules/workspace/resource-page.mjs.map +7 -0
- package/dist/modules/workspace/tool-runtime.mjs +14 -0
- package/dist/modules/workspace/tool-runtime.mjs.map +7 -0
- package/dist/modules/workspace/view-trace.mjs +60 -0
- package/dist/modules/workspace/view-trace.mjs.map +7 -0
- package/dist/modules/workspace/workspace-client-connection.mjs +22 -0
- package/dist/modules/workspace/workspace-client-connection.mjs.map +7 -0
- package/dist/modules/workspace/workspace-recovery.mjs +35 -0
- package/dist/modules/workspace/workspace-recovery.mjs.map +7 -0
- package/dist/modules/workspace/workspace-state.mjs +12 -0
- package/dist/modules/workspace/workspace-state.mjs.map +7 -0
- package/dist/modules/workspace-frontend.mjs +17 -0
- package/dist/modules/workspace-frontend.mjs.map +7 -0
- package/dist/viewer/assets/chunk-CilyBKbf.js +1 -0
- package/dist/viewer/assets/core-DSQma37-.js +13 -0
- package/dist/viewer/assets/core-DSQma37-.js.map +1 -0
- package/dist/viewer/assets/css-Bq1BXecw.js +2 -0
- package/dist/viewer/assets/css-Bq1BXecw.js.map +1 -0
- package/dist/viewer/assets/css-CWQWazmX.js +1 -0
- package/dist/viewer/assets/embedded-D4ZDx--W.js +2 -0
- package/dist/viewer/assets/embedded-D4ZDx--W.js.map +1 -0
- package/dist/viewer/assets/engine-javascript-BvokIV9O.js +142 -0
- package/dist/viewer/assets/engine-javascript-BvokIV9O.js.map +1 -0
- package/dist/viewer/assets/github-dark-default-DaDlj-WZ.js +2 -0
- package/dist/viewer/assets/github-dark-default-DaDlj-WZ.js.map +1 -0
- package/dist/viewer/assets/github-light-default-BqhWxAZd.js +2 -0
- package/dist/viewer/assets/github-light-default-BqhWxAZd.js.map +1 -0
- package/dist/viewer/assets/glsl-BJgVnv11.js +2 -0
- package/dist/viewer/assets/glsl-BJgVnv11.js.map +1 -0
- package/dist/viewer/assets/html-AaaHGGyt.js +2 -0
- package/dist/viewer/assets/html-AaaHGGyt.js.map +1 -0
- package/dist/viewer/assets/javascript-BX9W64FE.js +1 -0
- package/dist/viewer/assets/javascript-DQODvD07.js +2 -0
- package/dist/viewer/assets/javascript-DQODvD07.js.map +1 -0
- package/dist/viewer/assets/json-CpcIDpT7.js +2 -0
- package/dist/viewer/assets/json-CpcIDpT7.js.map +1 -0
- package/dist/viewer/assets/json5-Czq4A7dk.js +2 -0
- package/dist/viewer/assets/json5-Czq4A7dk.js.map +1 -0
- package/dist/viewer/assets/jsonc-BXDfCMmu.js +2 -0
- package/dist/viewer/assets/jsonc-BXDfCMmu.js.map +1 -0
- package/dist/viewer/assets/jsx-DAWscEnf.js +2 -0
- package/dist/viewer/assets/jsx-DAWscEnf.js.map +1 -0
- package/dist/viewer/assets/main-C-2CHTN_.js +15 -0
- package/dist/viewer/assets/main-C-2CHTN_.js.map +1 -0
- package/dist/viewer/assets/markdown-Cx1FMNw-.js +2 -0
- package/dist/viewer/assets/markdown-Cx1FMNw-.js.map +1 -0
- package/dist/viewer/assets/panels-entry-Ddhfjgf0.js +46 -0
- package/dist/viewer/assets/panels-entry-Ddhfjgf0.js.map +1 -0
- package/dist/viewer/assets/python-CYPKjWV9.js +2 -0
- package/dist/viewer/assets/python-CYPKjWV9.js.map +1 -0
- package/dist/viewer/assets/rust-0e5cNx_V.js +2 -0
- package/dist/viewer/assets/rust-0e5cNx_V.js.map +1 -0
- package/dist/viewer/assets/scss-B-aKzLbT.js +2 -0
- package/dist/viewer/assets/scss-B-aKzLbT.js.map +1 -0
- package/dist/viewer/assets/shellscript-CpXD-pSm.js +2 -0
- package/dist/viewer/assets/shellscript-CpXD-pSm.js.map +1 -0
- package/dist/viewer/assets/style-ClttNKZk.css +2 -0
- package/dist/viewer/assets/styles-BXozhwiU.js +11 -0
- package/dist/viewer/assets/styles-BXozhwiU.js.map +1 -0
- package/dist/viewer/assets/toml-GmchYTXa.js +2 -0
- package/dist/viewer/assets/toml-GmchYTXa.js.map +1 -0
- package/dist/viewer/assets/tsx-Crj1Bi53.js +2 -0
- package/dist/viewer/assets/tsx-Crj1Bi53.js.map +1 -0
- package/dist/viewer/assets/typescript-xi0cSHCO.js +2 -0
- package/dist/viewer/assets/typescript-xi0cSHCO.js.map +1 -0
- package/dist/viewer/assets/wgsl-BoEPRo9U.js +2 -0
- package/dist/viewer/assets/wgsl-BoEPRo9U.js.map +1 -0
- package/dist/viewer/assets/xml-B8JqQrMD.js +2 -0
- package/dist/viewer/assets/xml-B8JqQrMD.js.map +1 -0
- package/dist/viewer/assets/yaml-DsIB85X9.js +2 -0
- package/dist/viewer/assets/yaml-DsIB85X9.js.map +1 -0
- package/dist/viewer/index.html +15 -0
- package/dist/viewer/panels.js +1 -0
- package/host.pack.json +13 -0
- package/package.json +174 -0
- package/skills/forgeax-view-cli/SKILL.md +74 -0
- package/skills/forgeax-view-start/SKILL.md +202 -0
- package/skills/forgeax-view-start/scripts/start-view.mjs +202 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createViewWorkspaceClient
|
|
3
|
+
} from "./chunk-VY3S5BWI.mjs";
|
|
4
|
+
import {
|
|
5
|
+
requireWorkspaceString,
|
|
6
|
+
workspaceError
|
|
7
|
+
} from "./chunk-32GD5LL6.mjs";
|
|
8
|
+
|
|
9
|
+
// packages/view-workspace-core/src/resident.mjs
|
|
10
|
+
import { createReadStream, existsSync, statSync } from "node:fs";
|
|
11
|
+
import { join, normalize } from "node:path";
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
13
|
+
import { createServer } from "node:http";
|
|
14
|
+
import { randomUUID } from "node:crypto";
|
|
15
|
+
import { attachHostWebSocketServer, createHostWebSocketClient } from "@forgeax/engine-host/transport";
|
|
16
|
+
import { WebSocket, WebSocketServer } from "ws";
|
|
17
|
+
var DEFAULT_PATH = "/__forgeax/view-workspace";
|
|
18
|
+
var BOOTSTRAP_PATH = "/__forgeax/view/bootstrap";
|
|
19
|
+
var STATIC_MIME = Object.freeze({
|
|
20
|
+
".html": "text/html; charset=utf-8",
|
|
21
|
+
".js": "text/javascript; charset=utf-8",
|
|
22
|
+
".css": "text/css; charset=utf-8",
|
|
23
|
+
".map": "application/json; charset=utf-8",
|
|
24
|
+
".svg": "image/svg+xml",
|
|
25
|
+
".png": "image/png",
|
|
26
|
+
".ico": "image/x-icon",
|
|
27
|
+
".json": "application/json; charset=utf-8"
|
|
28
|
+
});
|
|
29
|
+
function staticContentType(filePath) {
|
|
30
|
+
const index = filePath.lastIndexOf(".");
|
|
31
|
+
if (index === -1) return "application/octet-stream";
|
|
32
|
+
return STATIC_MIME[filePath.slice(index)] ?? "application/octet-stream";
|
|
33
|
+
}
|
|
34
|
+
function isLoopbackHost(host) {
|
|
35
|
+
const normalized = host.toLowerCase().replace(/^\[(.*)\]$/, "$1");
|
|
36
|
+
return normalized === "localhost" || normalized === "::1" || normalized === "0:0:0:0:0:0:0:1" || normalized.startsWith("127.");
|
|
37
|
+
}
|
|
38
|
+
function resolveStaticFile(root, requestPath) {
|
|
39
|
+
const relative = normalize(requestPath).replace(/^(\.\.(\/|\\|$))+/, "");
|
|
40
|
+
const absolute = join(root, relative);
|
|
41
|
+
if (!absolute.startsWith(root)) return void 0;
|
|
42
|
+
return absolute;
|
|
43
|
+
}
|
|
44
|
+
function rejectUpgrade(socket, status, message) {
|
|
45
|
+
try {
|
|
46
|
+
socket.write(`HTTP/1.1 ${status}\r
|
|
47
|
+
Connection: close\r
|
|
48
|
+
Content-Length: ${Buffer.byteLength(message)}\r
|
|
49
|
+
\r
|
|
50
|
+
${message}`);
|
|
51
|
+
} finally {
|
|
52
|
+
socket.destroy();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function endpointWithToken(endpoint, token, role) {
|
|
56
|
+
const url = new URL(endpoint);
|
|
57
|
+
url.searchParams.set("token", requireWorkspaceString(token, "token"));
|
|
58
|
+
if (role === "frontend") {
|
|
59
|
+
url.searchParams.set("role", role);
|
|
60
|
+
} else {
|
|
61
|
+
url.searchParams.delete("role");
|
|
62
|
+
url.searchParams.delete("frontendTicket");
|
|
63
|
+
if (role !== void 0) url.searchParams.set("role", role);
|
|
64
|
+
}
|
|
65
|
+
return url.toString();
|
|
66
|
+
}
|
|
67
|
+
async function startViewHostServer({
|
|
68
|
+
backendHost,
|
|
69
|
+
transport = backendHost?.transport,
|
|
70
|
+
accessToken,
|
|
71
|
+
host = "127.0.0.1",
|
|
72
|
+
port = 0,
|
|
73
|
+
path = DEFAULT_PATH,
|
|
74
|
+
onClientConnect,
|
|
75
|
+
onClientDisconnect,
|
|
76
|
+
staticRoot
|
|
77
|
+
} = {}) {
|
|
78
|
+
if (!transport || typeof transport.connect !== "function") {
|
|
79
|
+
throw new TypeError("resident View Host requires an Engine Host transport");
|
|
80
|
+
}
|
|
81
|
+
const token = requireWorkspaceString(accessToken, "accessToken");
|
|
82
|
+
const frontendTicket = randomUUID();
|
|
83
|
+
if (typeof host !== "string" || host.length === 0) throw new TypeError("resident View Host requires a host");
|
|
84
|
+
if (!Number.isSafeInteger(port) || port < 0 || port > 65535) {
|
|
85
|
+
throw new TypeError("resident View Host port must be an integer from 0 to 65535");
|
|
86
|
+
}
|
|
87
|
+
if (typeof path !== "string" || !path.startsWith("/")) throw new TypeError("resident View Host path must start with /");
|
|
88
|
+
const staticRootPath = staticRoot === void 0 ? void 0 : typeof staticRoot === "string" ? staticRoot : fileURLToPath(staticRoot);
|
|
89
|
+
if (staticRootPath && !isLoopbackHost(host)) {
|
|
90
|
+
throw new Error(
|
|
91
|
+
"The View browser bootstrap contains host credentials and may only bind to a loopback host"
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
const http = createServer((request, response) => {
|
|
95
|
+
const url = new URL(request.url ?? "/", "http://127.0.0.1");
|
|
96
|
+
if (url.pathname === "/__forgeax/view/health") {
|
|
97
|
+
response.writeHead(204, {
|
|
98
|
+
"Access-Control-Allow-Origin": "*",
|
|
99
|
+
"Cross-Origin-Resource-Policy": "cross-origin",
|
|
100
|
+
"Cache-Control": "no-store"
|
|
101
|
+
});
|
|
102
|
+
response.end();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (url.pathname === BOOTSTRAP_PATH) {
|
|
106
|
+
const address2 = http.address();
|
|
107
|
+
const selectedPort2 = typeof address2 === "object" && address2 !== null ? address2.port : port;
|
|
108
|
+
const loopbackHost = host === "0.0.0.0" ? "127.0.0.1" : host;
|
|
109
|
+
const endpoint2 = `ws://${loopbackHost}:${selectedPort2}${path}`;
|
|
110
|
+
const frontendEndpoint2 = `${endpoint2}?frontendTicket=${encodeURIComponent(frontendTicket)}`;
|
|
111
|
+
response.statusCode = 200;
|
|
112
|
+
response.setHeader("Content-Type", "application/json; charset=utf-8");
|
|
113
|
+
response.setHeader("Cache-Control", "no-store");
|
|
114
|
+
response.end(
|
|
115
|
+
JSON.stringify({
|
|
116
|
+
token,
|
|
117
|
+
endpoint: endpoint2,
|
|
118
|
+
frontendEndpoint: frontendEndpoint2,
|
|
119
|
+
frontendTicket,
|
|
120
|
+
workspacePath: path
|
|
121
|
+
})
|
|
122
|
+
);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (!staticRootPath) {
|
|
126
|
+
response.statusCode = 404;
|
|
127
|
+
response.end("View workspace WebSocket endpoint only");
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
let filePath = resolveStaticFile(
|
|
131
|
+
staticRootPath,
|
|
132
|
+
url.pathname === "/" ? "/index.html" : url.pathname
|
|
133
|
+
);
|
|
134
|
+
if (filePath && existsSync(filePath) && statSync(filePath).isFile()) {
|
|
135
|
+
response.statusCode = 200;
|
|
136
|
+
response.setHeader("Content-Type", staticContentType(filePath));
|
|
137
|
+
createReadStream(filePath).pipe(response);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const spa = resolveStaticFile(staticRootPath, "/index.html");
|
|
141
|
+
if (spa && existsSync(spa)) {
|
|
142
|
+
response.statusCode = 200;
|
|
143
|
+
response.setHeader("Content-Type", "text/html; charset=utf-8");
|
|
144
|
+
createReadStream(spa).pipe(response);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
response.statusCode = 404;
|
|
148
|
+
response.end("Not found");
|
|
149
|
+
});
|
|
150
|
+
const sockets = /* @__PURE__ */ new Set();
|
|
151
|
+
const disposers = /* @__PURE__ */ new Set();
|
|
152
|
+
const isTrustedFrontendCaller = (caller) => caller?.kind === "frontend" && caller?.sourceId === "view-frontend";
|
|
153
|
+
const notify = (callback, caller) => {
|
|
154
|
+
try {
|
|
155
|
+
void Promise.resolve(callback?.(caller)).catch(() => {
|
|
156
|
+
});
|
|
157
|
+
} catch {
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
const removeTransportConnect = transport.onClientConnect?.((caller) => {
|
|
161
|
+
if (isTrustedFrontendCaller(caller)) notify(onClientConnect, caller);
|
|
162
|
+
});
|
|
163
|
+
const removeTransportDisconnect = transport.onClientDisconnect?.((caller) => {
|
|
164
|
+
if (caller?.kind === "websocket" || isTrustedFrontendCaller(caller)) notify(onClientDisconnect, caller);
|
|
165
|
+
});
|
|
166
|
+
const socketServer = new WebSocketServer({ noServer: true });
|
|
167
|
+
let closed = false;
|
|
168
|
+
const onUpgrade = (request, socket, head) => {
|
|
169
|
+
if (closed) return rejectUpgrade(socket, "503 Service Unavailable", "View Host is stopping");
|
|
170
|
+
let url;
|
|
171
|
+
try {
|
|
172
|
+
url = new URL(request.url ?? "/", "http://127.0.0.1");
|
|
173
|
+
} catch {
|
|
174
|
+
return rejectUpgrade(socket, "400 Bad Request", "Invalid View Host request");
|
|
175
|
+
}
|
|
176
|
+
if (url.pathname !== path) return;
|
|
177
|
+
if (url.searchParams.get("token") !== token) {
|
|
178
|
+
return rejectUpgrade(socket, "401 Unauthorized", "View Host token rejected");
|
|
179
|
+
}
|
|
180
|
+
const role = url.searchParams.get("role");
|
|
181
|
+
const trustedFrontend = role === "frontend" && url.searchParams.get("frontendTicket") === frontendTicket;
|
|
182
|
+
socketServer.handleUpgrade(request, socket, head, (client) => {
|
|
183
|
+
client.__forgeaxHostRole = trustedFrontend ? "frontend" : "websocket";
|
|
184
|
+
socketServer.emit("connection", client, request);
|
|
185
|
+
});
|
|
186
|
+
};
|
|
187
|
+
const onConnection = (socket) => {
|
|
188
|
+
sockets.add(socket);
|
|
189
|
+
const role = socket.__forgeaxHostRole;
|
|
190
|
+
const dispose = attachHostWebSocketServer(
|
|
191
|
+
socket,
|
|
192
|
+
transport,
|
|
193
|
+
role === "frontend" ? { kind: "frontend", sourceId: "view-frontend" } : { kind: "websocket" }
|
|
194
|
+
);
|
|
195
|
+
disposers.add(dispose);
|
|
196
|
+
const remove = () => {
|
|
197
|
+
sockets.delete(socket);
|
|
198
|
+
disposers.delete(dispose);
|
|
199
|
+
};
|
|
200
|
+
socket.once?.("close", remove);
|
|
201
|
+
socket.once?.("error", remove);
|
|
202
|
+
};
|
|
203
|
+
socketServer.on("connection", onConnection);
|
|
204
|
+
http.on("upgrade", onUpgrade);
|
|
205
|
+
await new Promise((resolve, reject) => {
|
|
206
|
+
const onError = (error) => {
|
|
207
|
+
http.off("listening", onListening);
|
|
208
|
+
reject(error);
|
|
209
|
+
};
|
|
210
|
+
const onListening = () => {
|
|
211
|
+
http.off("error", onError);
|
|
212
|
+
resolve();
|
|
213
|
+
};
|
|
214
|
+
http.once("error", onError);
|
|
215
|
+
http.once("listening", onListening);
|
|
216
|
+
http.listen(port, host);
|
|
217
|
+
});
|
|
218
|
+
const address = http.address();
|
|
219
|
+
const selectedPort = typeof address === "object" && address !== null ? address.port : port;
|
|
220
|
+
const endpoint = `ws://${host === "0.0.0.0" ? "127.0.0.1" : host}:${selectedPort}${path}`;
|
|
221
|
+
const frontendEndpoint = `${endpoint}?frontendTicket=${encodeURIComponent(frontendTicket)}`;
|
|
222
|
+
const close = async (reason = "resident View Host stopped") => {
|
|
223
|
+
if (closed) return;
|
|
224
|
+
closed = true;
|
|
225
|
+
removeTransportConnect?.();
|
|
226
|
+
removeTransportDisconnect?.();
|
|
227
|
+
http.off("upgrade", onUpgrade);
|
|
228
|
+
for (const dispose of [...disposers]) dispose();
|
|
229
|
+
disposers.clear();
|
|
230
|
+
for (const socket of [...sockets]) socket.close?.(1001, String(reason).slice(0, 123));
|
|
231
|
+
sockets.clear();
|
|
232
|
+
await new Promise((resolve) => {
|
|
233
|
+
try {
|
|
234
|
+
socketServer.close(() => resolve());
|
|
235
|
+
} catch {
|
|
236
|
+
resolve();
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
await new Promise((resolve) => {
|
|
240
|
+
if (!http.listening) return resolve();
|
|
241
|
+
http.close(() => resolve());
|
|
242
|
+
});
|
|
243
|
+
};
|
|
244
|
+
const httpUrl = `http://${host === "0.0.0.0" ? "127.0.0.1" : host}:${selectedPort}`;
|
|
245
|
+
return Object.freeze({
|
|
246
|
+
host,
|
|
247
|
+
port: selectedPort,
|
|
248
|
+
path,
|
|
249
|
+
token,
|
|
250
|
+
endpoint,
|
|
251
|
+
url: endpointWithToken(endpoint, token),
|
|
252
|
+
frontendEndpoint,
|
|
253
|
+
frontendUrl: endpointWithToken(frontendEndpoint, token, "frontend"),
|
|
254
|
+
frontendTicket,
|
|
255
|
+
server: http,
|
|
256
|
+
socketServer,
|
|
257
|
+
...staticRootPath ? {
|
|
258
|
+
viewerUrl: httpUrl,
|
|
259
|
+
bootstrapUrl: `${httpUrl}${BOOTSTRAP_PATH}`
|
|
260
|
+
} : {},
|
|
261
|
+
close
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
async function connectViewWorkspace({ endpoint, token, clientId, timeout = 3e4 } = {}) {
|
|
265
|
+
const url = endpointWithToken(requireWorkspaceString(endpoint, "endpoint"), token, "cli");
|
|
266
|
+
let transport;
|
|
267
|
+
const socket = new WebSocket(url, { handshakeTimeout: timeout });
|
|
268
|
+
let unauthorizedResponse = false;
|
|
269
|
+
socket.once?.("unexpected-response", (_request, response) => {
|
|
270
|
+
unauthorizedResponse = response?.statusCode === 401;
|
|
271
|
+
response?.resume?.();
|
|
272
|
+
socket.close?.();
|
|
273
|
+
});
|
|
274
|
+
try {
|
|
275
|
+
transport = await createHostWebSocketClient(socket);
|
|
276
|
+
} catch (error) {
|
|
277
|
+
const message = error?.message ?? String(error);
|
|
278
|
+
if (unauthorizedResponse || /401|unauthor|token rejected/i.test(message)) {
|
|
279
|
+
throw workspaceError(
|
|
280
|
+
"view-workspace-unauthorized",
|
|
281
|
+
"the connected client to have permission for the View workspace",
|
|
282
|
+
"Connect with the token issued by the View Host.",
|
|
283
|
+
{ endpoint }
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
throw error;
|
|
287
|
+
}
|
|
288
|
+
return createViewWorkspaceClient({ transport, clientId, token });
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export {
|
|
292
|
+
DEFAULT_PATH,
|
|
293
|
+
startViewHostServer,
|
|
294
|
+
connectViewWorkspace
|
|
295
|
+
};
|
|
296
|
+
//# sourceMappingURL=chunk-73UZNRHN.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-workspace-core/src/resident.mjs"],
|
|
4
|
+
"sourcesContent": ["import { createReadStream, existsSync, statSync } from 'node:fs';\nimport { join, normalize } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createServer } from 'node:http';\nimport { randomUUID } from 'node:crypto';\n\nimport { attachHostWebSocketServer, createHostWebSocketClient } from '@forgeax/engine-host/transport';\nimport { WebSocket, WebSocketServer } from 'ws';\n\nimport { createViewWorkspaceClient } from './client.mjs';\nimport { requireWorkspaceString, workspaceError } from './contract.mjs';\n\nconst DEFAULT_PATH = '/__forgeax/view-workspace';\nconst BOOTSTRAP_PATH = '/__forgeax/view/bootstrap';\n\nconst STATIC_MIME = Object.freeze({\n '.html': 'text/html; charset=utf-8',\n '.js': 'text/javascript; charset=utf-8',\n '.css': 'text/css; charset=utf-8',\n '.map': 'application/json; charset=utf-8',\n '.svg': 'image/svg+xml',\n '.png': 'image/png',\n '.ico': 'image/x-icon',\n '.json': 'application/json; charset=utf-8',\n});\n\nfunction staticContentType(filePath) {\n const index = filePath.lastIndexOf('.');\n if (index === -1) return 'application/octet-stream';\n return STATIC_MIME[filePath.slice(index)] ?? 'application/octet-stream';\n}\n\nfunction isLoopbackHost(host) {\n const normalized = host.toLowerCase().replace(/^\\[(.*)\\]$/, '$1');\n return (\n normalized === 'localhost' ||\n normalized === '::1' ||\n normalized === '0:0:0:0:0:0:0:1' ||\n normalized.startsWith('127.')\n );\n}\n\nfunction resolveStaticFile(root, requestPath) {\n const relative = normalize(requestPath).replace(/^(\\.\\.(\\/|\\\\|$))+/, '');\n const absolute = join(root, relative);\n if (!absolute.startsWith(root)) return undefined;\n return absolute;\n}\n\nfunction rejectUpgrade(socket, status, message) {\n try {\n socket.write(`HTTP/1.1 ${status}\\r\\nConnection: close\\r\\nContent-Length: ${Buffer.byteLength(message)}\\r\\n\\r\\n${message}`);\n } finally {\n socket.destroy();\n }\n}\n\nfunction endpointWithToken(endpoint, token, role) {\n const url = new URL(endpoint);\n url.searchParams.set('token', requireWorkspaceString(token, 'token'));\n if (role === 'frontend') {\n url.searchParams.set('role', role);\n } else {\n url.searchParams.delete('role');\n url.searchParams.delete('frontendTicket');\n if (role !== undefined) url.searchParams.set('role', role);\n }\n return url.toString();\n}\n\n/**\n * Expose the already-running View Host through one authenticated WebSocket.\n * The Engine Host transport remains the sole RPC/generation implementation;\n * this server only authenticates the connection and adapts a socket.\n */\nexport async function startViewHostServer({\n backendHost,\n transport = backendHost?.transport,\n accessToken,\n host = '127.0.0.1',\n port = 0,\n path = DEFAULT_PATH,\n onClientConnect,\n onClientDisconnect,\n staticRoot,\n} = {}) {\n if (!transport || typeof transport.connect !== 'function') {\n throw new TypeError('resident View Host requires an Engine Host transport');\n }\n const token = requireWorkspaceString(accessToken, 'accessToken');\n const frontendTicket = randomUUID();\n if (typeof host !== 'string' || host.length === 0) throw new TypeError('resident View Host requires a host');\n if (!Number.isSafeInteger(port) || port < 0 || port > 65_535) {\n throw new TypeError('resident View Host port must be an integer from 0 to 65535');\n }\n if (typeof path !== 'string' || !path.startsWith('/')) throw new TypeError('resident View Host path must start with /');\n\n const staticRootPath =\n staticRoot === undefined\n ? undefined\n : typeof staticRoot === 'string'\n ? staticRoot\n : fileURLToPath(staticRoot);\n if (staticRootPath && !isLoopbackHost(host)) {\n throw new Error(\n 'The View browser bootstrap contains host credentials and may only bind to a loopback host',\n );\n }\n const http = createServer((request, response) => {\n const url = new URL(request.url ?? '/', 'http://127.0.0.1');\n if (url.pathname === '/__forgeax/view/health') {\n response.writeHead(204, { 'Access-Control-Allow-Origin': '*', 'Cross-Origin-Resource-Policy': 'cross-origin',\n 'Cache-Control': 'no-store' });\n response.end();\n return;\n }\n if (url.pathname === BOOTSTRAP_PATH) {\n const address = http.address();\n const selectedPort = typeof address === 'object' && address !== null ? address.port : port;\n const loopbackHost = host === '0.0.0.0' ? '127.0.0.1' : host;\n const endpoint = `ws://${loopbackHost}:${selectedPort}${path}`;\n const frontendEndpoint = `${endpoint}?frontendTicket=${encodeURIComponent(frontendTicket)}`;\n response.statusCode = 200;\n response.setHeader('Content-Type', 'application/json; charset=utf-8');\n response.setHeader('Cache-Control', 'no-store');\n response.end(\n JSON.stringify({\n token,\n endpoint,\n frontendEndpoint,\n frontendTicket,\n workspacePath: path,\n }),\n );\n return;\n }\n if (!staticRootPath) {\n response.statusCode = 404;\n response.end('View workspace WebSocket endpoint only');\n return;\n }\n let filePath = resolveStaticFile(\n staticRootPath,\n url.pathname === '/' ? '/index.html' : url.pathname,\n );\n if (filePath && existsSync(filePath) && statSync(filePath).isFile()) {\n response.statusCode = 200;\n response.setHeader('Content-Type', staticContentType(filePath));\n createReadStream(filePath).pipe(response);\n return;\n }\n const spa = resolveStaticFile(staticRootPath, '/index.html');\n if (spa && existsSync(spa)) {\n response.statusCode = 200;\n response.setHeader('Content-Type', 'text/html; charset=utf-8');\n createReadStream(spa).pipe(response);\n return;\n }\n response.statusCode = 404;\n response.end('Not found');\n });\n const sockets = new Set();\n const disposers = new Set();\n // A page refresh replaces the trusted frontend socket. Forward both the\n // admission and the loss of that page so the workspace can reset per-page\n // session state instead of replaying the previous page's history.\n const isTrustedFrontendCaller = (caller) =>\n caller?.kind === 'frontend' && caller?.sourceId === 'view-frontend';\n // Lifecycle notifications run user code against possibly dead targets; a\n // throw here would break transport admission, and an unhandled rejection\n // would crash the backend process.\n const notify = (callback, caller) => {\n try {\n void Promise.resolve(callback?.(caller)).catch(() => {});\n } catch {\n // Admission and cleanup continue without the failed notification.\n }\n };\n const removeTransportConnect = transport.onClientConnect?.((caller) => {\n if (isTrustedFrontendCaller(caller)) notify(onClientConnect, caller);\n });\n const removeTransportDisconnect = transport.onClientDisconnect?.((caller) => {\n if (caller?.kind === 'websocket' || isTrustedFrontendCaller(caller)) notify(onClientDisconnect, caller);\n });\n const socketServer = new WebSocketServer({ noServer: true });\n let closed = false;\n\n const onUpgrade = (request, socket, head) => {\n if (closed) return rejectUpgrade(socket, '503 Service Unavailable', 'View Host is stopping');\n let url;\n try {\n url = new URL(request.url ?? '/', 'http://127.0.0.1');\n } catch {\n return rejectUpgrade(socket, '400 Bad Request', 'Invalid View Host request');\n }\n if (url.pathname !== path) return;\n if (url.searchParams.get('token') !== token) {\n return rejectUpgrade(socket, '401 Unauthorized', 'View Host token rejected');\n }\n const role = url.searchParams.get('role');\n const trustedFrontend =\n role === 'frontend' && url.searchParams.get('frontendTicket') === frontendTicket;\n socketServer.handleUpgrade(request, socket, head, (client) => {\n client.__forgeaxHostRole = trustedFrontend ? 'frontend' : 'websocket';\n socketServer.emit('connection', client, request);\n });\n };\n const onConnection = (socket) => {\n sockets.add(socket);\n const role = socket.__forgeaxHostRole;\n const dispose = attachHostWebSocketServer(\n socket,\n transport,\n role === 'frontend' ? { kind: 'frontend', sourceId: 'view-frontend' } : { kind: 'websocket' },\n );\n disposers.add(dispose);\n const remove = () => {\n sockets.delete(socket);\n disposers.delete(dispose);\n };\n socket.once?.('close', remove);\n socket.once?.('error', remove);\n };\n socketServer.on('connection', onConnection);\n http.on('upgrade', onUpgrade);\n await new Promise((resolve, reject) => {\n const onError = (error) => {\n http.off('listening', onListening);\n reject(error);\n };\n const onListening = () => {\n http.off('error', onError);\n resolve();\n };\n http.once('error', onError);\n http.once('listening', onListening);\n http.listen(port, host);\n });\n const address = http.address();\n const selectedPort = typeof address === 'object' && address !== null ? address.port : port;\n const endpoint = `ws://${host === '0.0.0.0' ? '127.0.0.1' : host}:${selectedPort}${path}`;\n const frontendEndpoint = `${endpoint}?frontendTicket=${encodeURIComponent(frontendTicket)}`;\n const close = async (reason = 'resident View Host stopped') => {\n if (closed) return;\n closed = true;\n removeTransportConnect?.();\n removeTransportDisconnect?.();\n http.off('upgrade', onUpgrade);\n for (const dispose of [...disposers]) dispose();\n disposers.clear();\n for (const socket of [...sockets]) socket.close?.(1001, String(reason).slice(0, 123));\n sockets.clear();\n await new Promise((resolve) => {\n try {\n socketServer.close(() => resolve());\n } catch {\n resolve();\n }\n });\n await new Promise((resolve) => {\n if (!http.listening) return resolve();\n http.close(() => resolve());\n });\n };\n const httpUrl = `http://${host === '0.0.0.0' ? '127.0.0.1' : host}:${selectedPort}`;\n return Object.freeze({\n host,\n port: selectedPort,\n path,\n token,\n endpoint,\n url: endpointWithToken(endpoint, token),\n frontendEndpoint,\n frontendUrl: endpointWithToken(frontendEndpoint, token, 'frontend'),\n frontendTicket,\n server: http,\n socketServer,\n ...(staticRootPath\n ? {\n viewerUrl: httpUrl,\n bootstrapUrl: `${httpUrl}${BOOTSTRAP_PATH}`,\n }\n : {}),\n close,\n });\n}\n\n/** Connect an independent Node CLI process to the resident View Host. */\nexport async function connectViewWorkspace({ endpoint, token, clientId, timeout = 30_000 } = {}) {\n const url = endpointWithToken(requireWorkspaceString(endpoint, 'endpoint'), token, 'cli');\n let transport;\n const socket = new WebSocket(url, { handshakeTimeout: timeout });\n let unauthorizedResponse = false;\n socket.once?.('unexpected-response', (_request, response) => {\n unauthorizedResponse = response?.statusCode === 401;\n response?.resume?.();\n socket.close?.();\n });\n try {\n transport = await createHostWebSocketClient(socket);\n } catch (error) {\n const message = error?.message ?? String(error);\n if (unauthorizedResponse || /401|unauthor|token rejected/i.test(message)) {\n throw workspaceError(\n 'view-workspace-unauthorized',\n 'the connected client to have permission for the View workspace',\n 'Connect with the token issued by the View Host.',\n { endpoint },\n );\n }\n throw error;\n }\n return createViewWorkspaceClient({ transport, clientId, token });\n}\n\nexport { DEFAULT_PATH as VIEW_WORKSPACE_HOST_PATH };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["address", "selectedPort", "endpoint", "frontendEndpoint"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// packages/view-workspace-core/src/api.mjs
|
|
2
|
+
var VIEW_WORKSPACE_CORE_OPERATION_DESCRIPTIONS = Object.freeze([
|
|
3
|
+
{ id: "tabs.get", path: ["tabs", "get"], summary: "Read View bindings and Engine target identities." },
|
|
4
|
+
{ id: "tabs.select", path: ["tabs", "select"], summary: "Select a View page." }
|
|
5
|
+
]);
|
|
6
|
+
|
|
7
|
+
export {
|
|
8
|
+
VIEW_WORKSPACE_CORE_OPERATION_DESCRIPTIONS
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=chunk-7ITLCRND.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-workspace-core/src/api.mjs"],
|
|
4
|
+
"sourcesContent": ["export const VIEW_WORKSPACE_CORE_OPERATION_DESCRIPTIONS = Object.freeze([\n { id: 'tabs.get', path: ['tabs', 'get'], summary: 'Read View bindings and Engine target identities.' },\n { id: 'tabs.select', path: ['tabs', 'select'], summary: 'Select a View page.' },\n]);\n"],
|
|
5
|
+
"mappings": ";AAAO,IAAM,6CAA6C,OAAO,OAAO;AAAA,EACtE,EAAE,IAAI,YAAY,MAAM,CAAC,QAAQ,KAAK,GAAG,SAAS,mDAAmD;AAAA,EACrG,EAAE,IAAI,eAAe,MAAM,CAAC,QAAQ,QAAQ,GAAG,SAAS,sBAAsB;AAChF,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FRONTEND_MODULE,
|
|
3
|
+
FRONTEND_PLUGIN_ID,
|
|
4
|
+
PAGE_TYPE,
|
|
5
|
+
PANEL_LAYOUT,
|
|
6
|
+
SLOT,
|
|
7
|
+
TITLE_I18N_KEY
|
|
8
|
+
} from "./chunk-VZXGRZYU.mjs";
|
|
9
|
+
|
|
10
|
+
// packages/view-plugin-plugins/src/frontend.mjs
|
|
11
|
+
var VIEW_PLUGINS_FRONTEND_PLUGIN_ID = FRONTEND_PLUGIN_ID;
|
|
12
|
+
var VIEW_PLUGINS_FRONTEND_MODULE = FRONTEND_MODULE;
|
|
13
|
+
var viewPluginsListFrontendPlugin = {
|
|
14
|
+
name: VIEW_PLUGINS_FRONTEND_PLUGIN_ID,
|
|
15
|
+
inject: ["viewOperationClient"],
|
|
16
|
+
async apply(ctx, config = {}) {
|
|
17
|
+
const panelHost = config.panelHost ?? ctx.get?.("panelHost", false);
|
|
18
|
+
if (!panelHost) return;
|
|
19
|
+
const pageHost = config.pageHost ?? ctx.get?.("pageHost", false);
|
|
20
|
+
if (!pageHost) throw new TypeError("View plugins Frontend Plugin requires pageHost");
|
|
21
|
+
const unregisterPageType = pageHost.registerType({
|
|
22
|
+
typeId: PAGE_TYPE,
|
|
23
|
+
titleKey: "view.pages.plugins",
|
|
24
|
+
order: 20,
|
|
25
|
+
closable: true,
|
|
26
|
+
singleton: true,
|
|
27
|
+
initial: false,
|
|
28
|
+
openable: true,
|
|
29
|
+
layout: "dock",
|
|
30
|
+
showPanelRail: true,
|
|
31
|
+
hideWhenInactive: true
|
|
32
|
+
});
|
|
33
|
+
const workspaceClient = ctx.get("viewOperationClient");
|
|
34
|
+
const transport = ctx.get?.("hostTransport", false);
|
|
35
|
+
let disposePanel;
|
|
36
|
+
ctx.effect(() => async () => {
|
|
37
|
+
await disposePanel?.();
|
|
38
|
+
unregisterPageType();
|
|
39
|
+
});
|
|
40
|
+
disposePanel = await panelHost.mountPanel({
|
|
41
|
+
id: SLOT,
|
|
42
|
+
pageType: PAGE_TYPE,
|
|
43
|
+
titleKey: TITLE_I18N_KEY,
|
|
44
|
+
activity: { labelKey: TITLE_I18N_KEY, icon: "package" },
|
|
45
|
+
layout: PANEL_LAYOUT,
|
|
46
|
+
panel: "Plugins",
|
|
47
|
+
props: { workspaceClient, hostAssembly: ctx.get?.("hostAssembly", false), connectionId: transport?.caller?.connectionId }
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var frontend_default = viewPluginsListFrontendPlugin;
|
|
52
|
+
|
|
53
|
+
export {
|
|
54
|
+
VIEW_PLUGINS_FRONTEND_PLUGIN_ID,
|
|
55
|
+
VIEW_PLUGINS_FRONTEND_MODULE,
|
|
56
|
+
viewPluginsListFrontendPlugin,
|
|
57
|
+
frontend_default
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=chunk-7TGVWKH7.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-plugin-plugins/src/frontend.mjs"],
|
|
4
|
+
"sourcesContent": ["import { FRONTEND_PLUGIN_ID, FRONTEND_MODULE } from './identity.mjs';\nimport { PAGE_TYPE, PANEL_LAYOUT, SLOT, TITLE_I18N_KEY } from './identity.mjs';\n\nexport const VIEW_PLUGINS_FRONTEND_PLUGIN_ID = FRONTEND_PLUGIN_ID;\nexport const VIEW_PLUGINS_FRONTEND_MODULE = FRONTEND_MODULE;\n\nconst viewPluginsListFrontendPlugin = {\n name: VIEW_PLUGINS_FRONTEND_PLUGIN_ID,\n inject: ['viewOperationClient'],\n async apply(ctx, config = {}) {\n const panelHost = config.panelHost ?? ctx.get?.('panelHost', false);\n if (!panelHost) return;\n const pageHost = config.pageHost ?? ctx.get?.('pageHost', false);\n if (!pageHost) throw new TypeError('View plugins Frontend Plugin requires pageHost');\n const unregisterPageType = pageHost.registerType({\n typeId: PAGE_TYPE,\n titleKey: 'view.pages.plugins',\n order: 20,\n closable: true,\n singleton: true,\n initial: false,\n openable: true,\n layout: 'dock',\n showPanelRail: true,\n hideWhenInactive: true,\n });\n const workspaceClient = ctx.get('viewOperationClient');\n const transport = ctx.get?.('hostTransport', false);\n let disposePanel;\n ctx.effect(() => async () => {\n await disposePanel?.();\n unregisterPageType();\n });\n disposePanel = await panelHost.mountPanel({\n id: SLOT,\n pageType: PAGE_TYPE,\n titleKey: TITLE_I18N_KEY,\n activity: { labelKey: TITLE_I18N_KEY, icon: 'package' },\n layout: PANEL_LAYOUT,\n panel: 'Plugins',\n props: { workspaceClient, hostAssembly: ctx.get?.('hostAssembly', false), connectionId: transport?.caller?.connectionId },\n });\n },\n};\n\nexport { viewPluginsListFrontendPlugin };\nexport default viewPluginsListFrontendPlugin;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;AAGO,IAAM,kCAAkC;AACxC,IAAM,+BAA+B;AAE5C,IAAM,gCAAgC;AAAA,EACpC,MAAM;AAAA,EACN,QAAQ,CAAC,qBAAqB;AAAA,EAC9B,MAAM,MAAM,KAAK,SAAS,CAAC,GAAG;AAC5B,UAAM,YAAY,OAAO,aAAa,IAAI,MAAM,aAAa,KAAK;AAClE,QAAI,CAAC,UAAW;AAChB,UAAM,WAAW,OAAO,YAAY,IAAI,MAAM,YAAY,KAAK;AAC/D,QAAI,CAAC,SAAU,OAAM,IAAI,UAAU,gDAAgD;AACnF,UAAM,qBAAqB,SAAS,aAAa;AAAA,MAC/C,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,OAAO;AAAA,MACP,UAAU;AAAA,MACV,WAAW;AAAA,MACX,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,eAAe;AAAA,MACf,kBAAkB;AAAA,IACpB,CAAC;AACD,UAAM,kBAAkB,IAAI,IAAI,qBAAqB;AACrD,UAAM,YAAY,IAAI,MAAM,iBAAiB,KAAK;AAClD,QAAI;AACJ,QAAI,OAAO,MAAM,YAAY;AAC3B,YAAM,eAAe;AACrB,yBAAmB;AAAA,IACrB,CAAC;AACD,mBAAe,MAAM,UAAU,WAAW;AAAA,MACxC,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU,EAAE,UAAU,gBAAgB,MAAM,UAAU;AAAA,MACtD,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,OAAO,EAAE,iBAAiB,cAAc,IAAI,MAAM,gBAAgB,KAAK,GAAG,cAAc,WAAW,QAAQ,aAAa;AAAA,IAC1H,CAAC;AAAA,EACH;AACF;AAGA,IAAO,mBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {
|
|
2
|
+
VIEW_PAGE_TYPES
|
|
3
|
+
} from "./chunk-32GD5LL6.mjs";
|
|
4
|
+
import {
|
|
5
|
+
__export
|
|
6
|
+
} from "./chunk-FLGC65SR.mjs";
|
|
7
|
+
|
|
8
|
+
// packages/view-plugin-content-browser/src/identity.mjs
|
|
9
|
+
var identity_exports = {};
|
|
10
|
+
__export(identity_exports, {
|
|
11
|
+
FRONTEND_MODULE: () => FRONTEND_MODULE,
|
|
12
|
+
FRONTEND_PLUGIN_ID: () => FRONTEND_PLUGIN_ID,
|
|
13
|
+
PAGE_TYPE: () => PAGE_TYPE,
|
|
14
|
+
PANEL_LAYOUT: () => PANEL_LAYOUT,
|
|
15
|
+
PLUGIN_ID: () => PLUGIN_ID,
|
|
16
|
+
SLOT: () => SLOT,
|
|
17
|
+
TITLE_I18N_KEY: () => TITLE_I18N_KEY
|
|
18
|
+
});
|
|
19
|
+
var PLUGIN_ID = "forgeax.view.content-browser";
|
|
20
|
+
var FRONTEND_PLUGIN_ID = "forgeax.view.panel.asset-browser.frontend";
|
|
21
|
+
var FRONTEND_MODULE = "@forgeax/view/plugins/content-browser/frontend";
|
|
22
|
+
var SLOT = "content-browser";
|
|
23
|
+
var PAGE_TYPE = VIEW_PAGE_TYPES.editor;
|
|
24
|
+
var PANEL_LAYOUT = Object.freeze({
|
|
25
|
+
dock: "bottom",
|
|
26
|
+
size: Object.freeze({ value: 0.34, unit: "fraction" }),
|
|
27
|
+
stack: "tabs",
|
|
28
|
+
order: 0
|
|
29
|
+
});
|
|
30
|
+
var TITLE_I18N_KEY = "view.slots.contentBrowser";
|
|
31
|
+
|
|
32
|
+
export {
|
|
33
|
+
PLUGIN_ID,
|
|
34
|
+
FRONTEND_PLUGIN_ID,
|
|
35
|
+
FRONTEND_MODULE,
|
|
36
|
+
SLOT,
|
|
37
|
+
PAGE_TYPE,
|
|
38
|
+
PANEL_LAYOUT,
|
|
39
|
+
TITLE_I18N_KEY,
|
|
40
|
+
identity_exports
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=chunk-7URFF53W.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-plugin-content-browser/src/identity.mjs"],
|
|
4
|
+
"sourcesContent": ["import { VIEW_PAGE_TYPES } from '@forgeax/view-workspace-core/contract';\n\nexport const PLUGIN_ID = 'forgeax.view.content-browser';\nexport const FRONTEND_PLUGIN_ID = 'forgeax.view.panel.asset-browser.frontend';\nexport const FRONTEND_MODULE = '@forgeax/view/plugins/content-browser/frontend';\nexport const SLOT = 'content-browser';\nexport const PAGE_TYPE = VIEW_PAGE_TYPES.editor;\nexport const PANEL_LAYOUT = Object.freeze({\n dock: 'bottom',\n size: Object.freeze({ value: 0.34, unit: 'fraction' }),\n stack: 'tabs',\n order: 0,\n});\nexport const TITLE_I18N_KEY = 'view.slots.contentBrowser';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,IAAM,YAAY;AAClB,IAAM,qBAAqB;AAC3B,IAAM,kBAAkB;AACxB,IAAM,OAAO;AACb,IAAM,YAAY,gBAAgB;AAClC,IAAM,eAAe,OAAO,OAAO;AAAA,EACxC,MAAM;AAAA,EACN,MAAM,OAAO,OAAO,EAAE,OAAO,MAAM,MAAM,WAAW,CAAC;AAAA,EACrD,OAAO;AAAA,EACP,OAAO;AACT,CAAC;AACM,IAAM,iBAAiB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// src/shell/contract.mjs
|
|
2
|
+
var VIEW_LAYOUT_HOST_ID = "forgeax-view-layout-host";
|
|
3
|
+
function slotElementId(slot) {
|
|
4
|
+
if (typeof slot !== "string" || slot.trim() === "") {
|
|
5
|
+
throw new TypeError("View shell slot must be a non-empty string");
|
|
6
|
+
}
|
|
7
|
+
return `forgeax-view-slot-${slot}`;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
VIEW_LAYOUT_HOST_ID,
|
|
12
|
+
slotElementId
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=chunk-7YSDRIFN.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/shell/contract.mjs"],
|
|
4
|
+
"sourcesContent": ["export const VIEW_LAYOUT_HOST_ID = 'forgeax-view-layout-host';\n\nexport function slotElementId(slot) {\n if (typeof slot !== 'string' || slot.trim() === '') {\n throw new TypeError('View shell slot must be a non-empty string');\n }\n return `forgeax-view-slot-${slot}`;\n}\n"],
|
|
5
|
+
"mappings": ";AAAO,IAAM,sBAAsB;AAE5B,SAAS,cAAc,MAAM;AAClC,MAAI,OAAO,SAAS,YAAY,KAAK,KAAK,MAAM,IAAI;AAClD,UAAM,IAAI,UAAU,4CAA4C;AAAA,EAClE;AACA,SAAO,qBAAqB,IAAI;AAClC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// src/view-start.mjs
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { existsSync, realpathSync } from "node:fs";
|
|
4
|
+
var projectPath = (value) => {
|
|
5
|
+
const absolute = resolve(value);
|
|
6
|
+
return existsSync(absolute) ? realpathSync(absolute) : absolute;
|
|
7
|
+
};
|
|
8
|
+
function resolveProjectRoot(argv = [], env = process.env) {
|
|
9
|
+
const index = argv.indexOf("--root");
|
|
10
|
+
if (index >= 0 && (!argv[index + 1] || argv[index + 1].startsWith("--"))) {
|
|
11
|
+
throw new TypeError("--root requires a backend workspace directory");
|
|
12
|
+
}
|
|
13
|
+
return resolve(index < 0 ? env.FORGEAX_PROJECT_ROOT ?? process.cwd() : argv[index + 1]);
|
|
14
|
+
}
|
|
15
|
+
function resolveProjectIntent(argv = [], backendRoot) {
|
|
16
|
+
const index = argv.indexOf("--project");
|
|
17
|
+
if (index < 0) return backendRoot && existsSync(resolve(backendRoot, "forge.json")) ? projectPath(backendRoot) : void 0;
|
|
18
|
+
const value = argv[index + 1];
|
|
19
|
+
if (!value?.trim() || value.startsWith("--")) throw new TypeError("--project requires a project directory");
|
|
20
|
+
return projectPath(value);
|
|
21
|
+
}
|
|
22
|
+
function withProjectIntent(status, project) {
|
|
23
|
+
if (!project || !status?.url) return status;
|
|
24
|
+
const url = new URL(status.url);
|
|
25
|
+
url.searchParams.set("project", project);
|
|
26
|
+
return { ...status, url: url.href };
|
|
27
|
+
}
|
|
28
|
+
async function call(operation, argv, env) {
|
|
29
|
+
if (argv.some((arg) => ["--headless", "--software", "--serve"].includes(arg))) {
|
|
30
|
+
throw new TypeError("View startup does not launch a browser. Open the returned URL in your browser; configure Engine runs separately.");
|
|
31
|
+
}
|
|
32
|
+
const { callDevKitBackend } = await import("@forgeax/engine/devkit");
|
|
33
|
+
if (!callDevKitBackend) throw new Error("Install the matching Engine SDK with the independent backend capability.");
|
|
34
|
+
return callDevKitBackend(resolveProjectRoot(argv, env), operation);
|
|
35
|
+
}
|
|
36
|
+
async function runViewStartInteractive(argv = [], env = process.env) {
|
|
37
|
+
const backendRoot = resolveProjectRoot(argv, env);
|
|
38
|
+
const project = resolveProjectIntent(argv, backendRoot);
|
|
39
|
+
return withProjectIntent(await call("view.start", argv, env), project);
|
|
40
|
+
}
|
|
41
|
+
var runViewStatus = (argv = [], env = process.env) => call("view.status", argv, env);
|
|
42
|
+
var runViewStop = (argv = [], env = process.env) => call("view.stop", argv, env);
|
|
43
|
+
|
|
44
|
+
export {
|
|
45
|
+
resolveProjectRoot,
|
|
46
|
+
resolveProjectIntent,
|
|
47
|
+
withProjectIntent,
|
|
48
|
+
runViewStartInteractive,
|
|
49
|
+
runViewStatus,
|
|
50
|
+
runViewStop
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=chunk-AAFVCQPK.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/view-start.mjs"],
|
|
4
|
+
"sourcesContent": ["import { resolve } from 'node:path';\nimport { existsSync, realpathSync } from 'node:fs';\n\nconst projectPath = value => {\n const absolute = resolve(value);\n return existsSync(absolute) ? realpathSync(absolute) : absolute;\n};\n\nexport function resolveProjectRoot(argv = [], env = process.env) {\n const index = argv.indexOf('--root');\n if (index >= 0 && (!argv[index + 1] || argv[index + 1].startsWith('--'))) {\n throw new TypeError('--root requires a backend workspace directory');\n }\n return resolve(index < 0 ? env.FORGEAX_PROJECT_ROOT ?? process.cwd() : argv[index + 1]);\n}\n\nexport function resolveProjectIntent(argv = [], backendRoot) {\n const index = argv.indexOf('--project');\n if (index < 0) return backendRoot && existsSync(resolve(backendRoot, 'forge.json')) ? projectPath(backendRoot) : undefined;\n const value = argv[index + 1];\n if (!value?.trim() || value.startsWith('--')) throw new TypeError('--project requires a project directory');\n return projectPath(value);\n}\n\nexport function withProjectIntent(status, project) {\n if (!project || !status?.url) return status;\n const url = new URL(status.url);\n url.searchParams.set('project', project);\n return { ...status, url: url.href };\n}\n\nasync function call(operation, argv, env) {\n if (argv.some(arg => ['--headless', '--software', '--serve'].includes(arg))) {\n throw new TypeError('View startup does not launch a browser. Open the returned URL in your browser; configure Engine runs separately.');\n }\n const { callDevKitBackend } = await import('@forgeax/engine/devkit');\n if (!callDevKitBackend) throw new Error('Install the matching Engine SDK with the independent backend capability.');\n return callDevKitBackend(resolveProjectRoot(argv, env), operation);\n}\n\nexport async function runViewStartInteractive(argv = [], env = process.env) {\n const backendRoot = resolveProjectRoot(argv, env);\n const project = resolveProjectIntent(argv, backendRoot);\n return withProjectIntent(await call('view.start', argv, env), project);\n}\nexport const runViewStatus = (argv = [], env = process.env) => call('view.status', argv, env);\nexport const runViewStop = (argv = [], env = process.env) => call('view.stop', argv, env);\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,eAAe;AACxB,SAAS,YAAY,oBAAoB;AAEzC,IAAM,cAAc,WAAS;AAC3B,QAAM,WAAW,QAAQ,KAAK;AAC9B,SAAO,WAAW,QAAQ,IAAI,aAAa,QAAQ,IAAI;AACzD;AAEO,SAAS,mBAAmB,OAAO,CAAC,GAAG,MAAM,QAAQ,KAAK;AAC/D,QAAM,QAAQ,KAAK,QAAQ,QAAQ;AACnC,MAAI,SAAS,MAAM,CAAC,KAAK,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,EAAE,WAAW,IAAI,IAAI;AACxE,UAAM,IAAI,UAAU,+CAA+C;AAAA,EACrE;AACA,SAAO,QAAQ,QAAQ,IAAI,IAAI,wBAAwB,QAAQ,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC;AACxF;AAEO,SAAS,qBAAqB,OAAO,CAAC,GAAG,aAAa;AAC3D,QAAM,QAAQ,KAAK,QAAQ,WAAW;AACtC,MAAI,QAAQ,EAAG,QAAO,eAAe,WAAW,QAAQ,aAAa,YAAY,CAAC,IAAI,YAAY,WAAW,IAAI;AACjH,QAAM,QAAQ,KAAK,QAAQ,CAAC;AAC5B,MAAI,CAAC,OAAO,KAAK,KAAK,MAAM,WAAW,IAAI,EAAG,OAAM,IAAI,UAAU,wCAAwC;AAC1G,SAAO,YAAY,KAAK;AAC1B;AAEO,SAAS,kBAAkB,QAAQ,SAAS;AACjD,MAAI,CAAC,WAAW,CAAC,QAAQ,IAAK,QAAO;AACrC,QAAM,MAAM,IAAI,IAAI,OAAO,GAAG;AAC9B,MAAI,aAAa,IAAI,WAAW,OAAO;AACvC,SAAO,EAAE,GAAG,QAAQ,KAAK,IAAI,KAAK;AACpC;AAEA,eAAe,KAAK,WAAW,MAAM,KAAK;AACxC,MAAI,KAAK,KAAK,SAAO,CAAC,cAAc,cAAc,SAAS,EAAE,SAAS,GAAG,CAAC,GAAG;AAC3E,UAAM,IAAI,UAAU,kHAAkH;AAAA,EACxI;AACA,QAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,wBAAwB;AACnE,MAAI,CAAC,kBAAmB,OAAM,IAAI,MAAM,0EAA0E;AAClH,SAAO,kBAAkB,mBAAmB,MAAM,GAAG,GAAG,SAAS;AACnE;AAEA,eAAsB,wBAAwB,OAAO,CAAC,GAAG,MAAM,QAAQ,KAAK;AAC1E,QAAM,cAAc,mBAAmB,MAAM,GAAG;AAChD,QAAM,UAAU,qBAAqB,MAAM,WAAW;AACtD,SAAO,kBAAkB,MAAM,KAAK,cAAc,MAAM,GAAG,GAAG,OAAO;AACvE;AACO,IAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,MAAM,QAAQ,QAAQ,KAAK,eAAe,MAAM,GAAG;AACrF,IAAM,cAAc,CAAC,OAAO,CAAC,GAAG,MAAM,QAAQ,QAAQ,KAAK,aAAa,MAAM,GAAG;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PLUGINS_OPERATION_DESCRIPTIONS
|
|
3
|
+
} from "./chunk-IGRMZYRD.mjs";
|
|
4
|
+
|
|
5
|
+
// packages/view-plugin-plugins/src/cli.mjs
|
|
6
|
+
var cliContributions = Object.freeze(
|
|
7
|
+
PLUGINS_OPERATION_DESCRIPTIONS.map((description) => ({
|
|
8
|
+
id: `forgeax.view.plugins.${description.id}`,
|
|
9
|
+
path: ["view", "plugins", ...description.path],
|
|
10
|
+
summary: description.summary,
|
|
11
|
+
operation: description.id
|
|
12
|
+
}))
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
export {
|
|
16
|
+
cliContributions
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=chunk-AEK7ZESQ.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-plugin-plugins/src/cli.mjs"],
|
|
4
|
+
"sourcesContent": ["import { PLUGINS_OPERATION_DESCRIPTIONS } from './api.mjs';\n\nexport const cliContributions = Object.freeze(\n PLUGINS_OPERATION_DESCRIPTIONS.map((description) => ({\n id: `forgeax.view.plugins.${description.id}`,\n path: ['view', 'plugins', ...description.path],\n summary: description.summary,\n operation: description.id,\n })),\n);\n"],
|
|
5
|
+
"mappings": ";;;;;AAEO,IAAM,mBAAmB,OAAO;AAAA,EACrC,+BAA+B,IAAI,CAAC,iBAAiB;AAAA,IACnD,IAAI,wBAAwB,YAAY,EAAE;AAAA,IAC1C,MAAM,CAAC,QAAQ,WAAW,GAAG,YAAY,IAAI;AAAA,IAC7C,SAAS,YAAY;AAAA,IACrB,WAAW,YAAY;AAAA,EACzB,EAAE;AACJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FRONTEND_MODULE,
|
|
3
|
+
FRONTEND_PLUGIN_ID,
|
|
4
|
+
PAGE_TYPE,
|
|
5
|
+
PANEL_LAYOUT,
|
|
6
|
+
SLOT,
|
|
7
|
+
TITLE_I18N_KEY
|
|
8
|
+
} from "./chunk-VIGOJWSO.mjs";
|
|
9
|
+
|
|
10
|
+
// packages/view-plugin-scene-tree/src/frontend.mjs
|
|
11
|
+
var VIEW_SCENE_TREE_FRONTEND_PLUGIN_ID = FRONTEND_PLUGIN_ID;
|
|
12
|
+
var VIEW_SCENE_TREE_FRONTEND_MODULE = FRONTEND_MODULE;
|
|
13
|
+
var viewSceneTreeFrontendPlugin = {
|
|
14
|
+
name: VIEW_SCENE_TREE_FRONTEND_PLUGIN_ID,
|
|
15
|
+
inject: ["viewOperationClient", "viewScenePage"],
|
|
16
|
+
async apply(ctx, config = {}) {
|
|
17
|
+
const panelHost = config.panelHost ?? ctx.get?.("panelHost", false);
|
|
18
|
+
if (!panelHost) return;
|
|
19
|
+
const workspaceClient = ctx.get("viewOperationClient");
|
|
20
|
+
const disposePanel = await panelHost.mountPanel({
|
|
21
|
+
id: SLOT,
|
|
22
|
+
pageType: PAGE_TYPE,
|
|
23
|
+
titleKey: TITLE_I18N_KEY,
|
|
24
|
+
activity: { labelKey: TITLE_I18N_KEY, icon: "tree" },
|
|
25
|
+
layout: PANEL_LAYOUT,
|
|
26
|
+
panel: "SceneTree",
|
|
27
|
+
props: { client: workspaceClient }
|
|
28
|
+
});
|
|
29
|
+
ctx.effect(() => async () => {
|
|
30
|
+
await disposePanel?.();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
var frontend_default = viewSceneTreeFrontendPlugin;
|
|
35
|
+
|
|
36
|
+
export {
|
|
37
|
+
VIEW_SCENE_TREE_FRONTEND_PLUGIN_ID,
|
|
38
|
+
VIEW_SCENE_TREE_FRONTEND_MODULE,
|
|
39
|
+
viewSceneTreeFrontendPlugin,
|
|
40
|
+
frontend_default
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=chunk-AL6ZWIEU.mjs.map
|