@dxos/app-framework 0.8.4-main.c85a9c8dae → 0.8.4-main.d05539e30a
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/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/browser/{capability-7RLVE42K.mjs → capability-K5XIVCQU.mjs} +12 -11
- package/dist/lib/browser/capability-K5XIVCQU.mjs.map +7 -0
- package/dist/lib/browser/chunk-5AHASNDW.mjs +95 -0
- package/dist/lib/browser/chunk-5AHASNDW.mjs.map +7 -0
- package/dist/lib/browser/chunk-5GY3YOEL.mjs +28 -0
- package/dist/lib/browser/chunk-5GY3YOEL.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PKQT6C53.mjs → chunk-66IXTIVK.mjs} +3 -2
- package/dist/lib/browser/chunk-66IXTIVK.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZRWBPIZG.mjs → chunk-BRK6GYNB.mjs} +14 -42
- package/dist/lib/browser/chunk-BRK6GYNB.mjs.map +7 -0
- package/dist/lib/browser/chunk-FJ4765WW.mjs +8 -0
- package/dist/lib/browser/{chunk-FHQTHCX7.mjs.map → chunk-FJ4765WW.mjs.map} +3 -3
- package/dist/lib/browser/chunk-FO3IYSLV.mjs +68 -0
- package/dist/lib/browser/chunk-FO3IYSLV.mjs.map +7 -0
- package/dist/lib/browser/{chunk-YNFPIQGB.mjs → chunk-IW44C7UL.mjs} +9 -2
- package/dist/lib/browser/chunk-IW44C7UL.mjs.map +7 -0
- package/dist/lib/browser/{chunk-5RJNZV7K.mjs → chunk-KFDF7KR3.mjs} +11 -13
- package/dist/lib/browser/{chunk-5RJNZV7K.mjs.map → chunk-KFDF7KR3.mjs.map} +3 -3
- package/dist/lib/browser/chunk-KLHQNYJ2.mjs +422 -0
- package/dist/lib/browser/chunk-KLHQNYJ2.mjs.map +7 -0
- package/dist/lib/browser/chunk-QLML5QFJ.mjs +581 -0
- package/dist/lib/browser/chunk-QLML5QFJ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FNKT2QQ2.mjs → chunk-SLX73WRZ.mjs} +90 -17
- package/dist/lib/browser/chunk-SLX73WRZ.mjs.map +7 -0
- package/dist/lib/browser/chunk-UVTGHZQF.mjs +513 -0
- package/dist/lib/browser/chunk-UVTGHZQF.mjs.map +7 -0
- package/dist/lib/browser/chunk-VJ5PFAWC.mjs +1446 -0
- package/dist/lib/browser/chunk-VJ5PFAWC.mjs.map +7 -0
- package/dist/lib/browser/cli/index.mjs +17 -32
- package/dist/lib/browser/cli/index.mjs.map +3 -3
- package/dist/lib/browser/common/activation-events.mjs +11 -14
- package/dist/lib/browser/common/capabilities.mjs +19 -8
- package/dist/lib/browser/core/activation-event.mjs +1 -1
- package/dist/lib/browser/core/capability.mjs +5 -1
- package/dist/lib/browser/core/plugin-manager.mjs +8 -4
- package/dist/lib/browser/core/plugin.mjs +16 -4
- package/dist/lib/browser/core/url-loader.mjs +24 -0
- package/dist/lib/browser/index.mjs +47 -49
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/process-manager-capability-JIWLN7SU.mjs +89 -0
- package/dist/lib/browser/process-manager-capability-JIWLN7SU.mjs.map +7 -0
- package/dist/lib/browser/testing/index.mjs +199 -56
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/browser/testing/react.mjs +78 -0
- package/dist/lib/browser/testing/react.mjs.map +7 -0
- package/dist/lib/browser/ui/index.mjs +24 -15
- package/dist/lib/node-esm/{capability-EVZK4REM.mjs → capability-RLKFFLTB.mjs} +12 -11
- package/dist/lib/node-esm/capability-RLKFFLTB.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs → chunk-37Z53PXZ.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs.map → chunk-37Z53PXZ.mjs.map} +3 -3
- package/dist/lib/node-esm/chunk-42UNAKYO.mjs +423 -0
- package/dist/lib/node-esm/chunk-42UNAKYO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CJCQS2YL.mjs → chunk-6S45OMUP.mjs} +90 -17
- package/dist/lib/node-esm/chunk-6S45OMUP.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-2A4PRBIX.mjs → chunk-BYHYYJZH.mjs} +14 -42
- package/dist/lib/node-esm/chunk-BYHYYJZH.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-SB5ODNPX.mjs → chunk-CTKEZHKF.mjs} +9 -2
- package/dist/lib/node-esm/chunk-CTKEZHKF.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-JNT72ZCN.mjs +514 -0
- package/dist/lib/node-esm/chunk-JNT72ZCN.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-KFZEB6BV.mjs +29 -0
- package/dist/lib/node-esm/chunk-KFZEB6BV.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-LJNUFNDO.mjs +582 -0
- package/dist/lib/node-esm/chunk-LJNUFNDO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-VUIUFIGT.mjs → chunk-OUEMWPIW.mjs} +11 -13
- package/dist/lib/node-esm/{chunk-VUIUFIGT.mjs.map → chunk-OUEMWPIW.mjs.map} +3 -3
- package/dist/lib/node-esm/chunk-PW2VYGOS.mjs +96 -0
- package/dist/lib/node-esm/chunk-PW2VYGOS.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-SFYCO3PT.mjs +1447 -0
- package/dist/lib/node-esm/chunk-SFYCO3PT.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WK7OIQKI.mjs +70 -0
- package/dist/lib/node-esm/chunk-WK7OIQKI.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-7OWSHPYK.mjs → chunk-XOCUANHO.mjs} +3 -2
- package/dist/lib/node-esm/chunk-XOCUANHO.mjs.map +7 -0
- package/dist/lib/node-esm/cli/index.mjs +17 -32
- package/dist/lib/node-esm/cli/index.mjs.map +3 -3
- package/dist/lib/node-esm/common/activation-events.mjs +11 -14
- package/dist/lib/node-esm/common/capabilities.mjs +19 -8
- package/dist/lib/node-esm/core/activation-event.mjs +1 -1
- package/dist/lib/node-esm/core/capability.mjs +5 -1
- package/dist/lib/node-esm/core/plugin-manager.mjs +8 -4
- package/dist/lib/node-esm/core/plugin.mjs +16 -4
- package/dist/lib/node-esm/core/url-loader.mjs +25 -0
- package/dist/lib/node-esm/index.mjs +47 -49
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/process-manager-capability-PHKLO2BL.mjs +90 -0
- package/dist/lib/node-esm/process-manager-capability-PHKLO2BL.mjs.map +7 -0
- package/dist/lib/node-esm/testing/index.mjs +199 -56
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/testing/react.mjs +79 -0
- package/dist/lib/node-esm/testing/react.mjs.map +7 -0
- package/dist/lib/node-esm/ui/index.mjs +24 -15
- package/dist/plugin/node-esm/index.mjs +893 -0
- package/dist/plugin/node-esm/index.mjs.map +7 -0
- package/dist/plugin/node-esm/meta.json +1 -0
- package/dist/types/src/cli/cli.d.ts +1 -3
- package/dist/types/src/cli/cli.d.ts.map +1 -1
- package/dist/types/src/common/activation-events.d.ts +10 -13
- package/dist/types/src/common/activation-events.d.ts.map +1 -1
- package/dist/types/src/common/annotations.d.ts +1 -0
- package/dist/types/src/common/annotations.d.ts.map +1 -0
- package/dist/types/src/common/capabilities.d.ts +113 -12
- package/dist/types/src/common/capabilities.d.ts.map +1 -1
- package/dist/types/src/common/operations.d.ts +8 -22
- package/dist/types/src/common/operations.d.ts.map +1 -1
- package/dist/types/src/core/activation-event.d.ts +5 -5
- package/dist/types/src/core/activation-event.d.ts.map +1 -1
- package/dist/types/src/core/capability-manager.d.ts +5 -0
- package/dist/types/src/core/capability-manager.d.ts.map +1 -1
- package/dist/types/src/core/capability.d.ts +13 -2
- package/dist/types/src/core/capability.d.ts.map +1 -1
- package/dist/types/src/core/edge-registry-plugin-provider.d.ts +30 -0
- package/dist/types/src/core/edge-registry-plugin-provider.d.ts.map +1 -0
- package/dist/types/src/core/index.d.ts +6 -0
- package/dist/types/src/core/index.d.ts.map +1 -1
- package/dist/types/src/core/plugin-asset-cache.d.ts +71 -0
- package/dist/types/src/core/plugin-asset-cache.d.ts.map +1 -0
- package/dist/types/src/core/plugin-manager.d.ts +238 -7
- package/dist/types/src/core/plugin-manager.d.ts.map +1 -1
- package/dist/types/src/core/plugin-manifest.d.ts +101 -0
- package/dist/types/src/core/plugin-manifest.d.ts.map +1 -0
- package/dist/types/src/core/plugin-manifest.test.d.ts +2 -0
- package/dist/types/src/core/plugin-manifest.test.d.ts.map +1 -0
- package/dist/types/src/core/plugin.d.ts +182 -7
- package/dist/types/src/core/plugin.d.ts.map +1 -1
- package/dist/types/src/core/registry.d.ts +107 -0
- package/dist/types/src/core/registry.d.ts.map +1 -0
- package/dist/types/src/core/url-loader.d.ts +127 -0
- package/dist/types/src/core/url-loader.d.ts.map +1 -0
- package/dist/types/src/core/url-loader.test.d.ts +2 -0
- package/dist/types/src/core/url-loader.test.d.ts.map +1 -0
- package/dist/types/src/helpers.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/plugin-process-manager/ProcessManagerPlugin.d.ts +3 -0
- package/dist/types/src/plugin-process-manager/ProcessManagerPlugin.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/capability.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/errors.d.ts +32 -0
- package/dist/types/src/plugin-process-manager/history/errors.d.ts.map +1 -0
- package/dist/types/src/{plugin-operation → plugin-process-manager}/history/history-tracker.d.ts +1 -1
- package/dist/types/src/plugin-process-manager/history/history-tracker.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/history-tracker.test.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/index.d.ts.map +1 -0
- package/dist/types/src/{plugin-operation → plugin-process-manager}/history/types.d.ts +1 -1
- package/dist/types/src/plugin-process-manager/history/types.d.ts.map +1 -0
- package/dist/types/src/{plugin-operation → plugin-process-manager}/history/undo-mapping.d.ts +1 -1
- package/dist/types/src/plugin-process-manager/history/undo-mapping.d.ts.map +1 -0
- package/dist/types/src/{plugin-operation → plugin-process-manager}/history/undo-registry.d.ts +1 -1
- package/dist/types/src/plugin-process-manager/history/undo-registry.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/undo-registry.test.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/index.d.ts +3 -0
- package/dist/types/src/plugin-process-manager/index.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/meta.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/process-manager-capability.d.ts +8 -0
- package/dist/types/src/plugin-process-manager/process-manager-capability.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/testing.d.ts +59 -0
- package/dist/types/src/plugin-process-manager/testing.d.ts.map +1 -0
- package/dist/types/src/testing/harness.d.ts +79 -0
- package/dist/types/src/testing/harness.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/react.d.ts +27 -0
- package/dist/types/src/testing/react.d.ts.map +1 -0
- package/dist/types/src/testing/react.test.d.ts +2 -0
- package/dist/types/src/testing/react.test.d.ts.map +1 -0
- package/dist/types/src/testing/service.d.ts.map +1 -1
- package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
- package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
- package/dist/types/src/ui/components/App/App.d.ts +3 -2
- package/dist/types/src/ui/components/App/App.d.ts.map +1 -1
- package/dist/types/src/ui/components/App/App.stories.d.ts +2 -2
- package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -1
- package/dist/types/src/ui/components/Placeholder/Placeholder.d.ts +64 -0
- package/dist/types/src/ui/components/Placeholder/Placeholder.d.ts.map +1 -0
- package/dist/types/src/ui/components/Placeholder/Placeholder.stories.d.ts +19 -0
- package/dist/types/src/ui/components/Placeholder/Placeholder.stories.d.ts.map +1 -0
- package/dist/types/src/ui/components/Placeholder/index.d.ts +2 -0
- package/dist/types/src/ui/components/Placeholder/index.d.ts.map +1 -0
- package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -1
- package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +16 -4
- package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -1
- package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -1
- package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -1
- package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts +48 -0
- package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts.map +1 -0
- package/dist/types/src/ui/components/Surface/index.d.ts +22 -6
- package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -1
- package/dist/types/src/ui/components/Surface/types.d.ts +110 -9
- package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -1
- package/dist/types/src/ui/components/Surface/types.test.d.ts +2 -0
- package/dist/types/src/ui/components/Surface/types.test.d.ts.map +1 -0
- package/dist/types/src/ui/components/index.d.ts +1 -0
- package/dist/types/src/ui/components/index.d.ts.map +1 -1
- package/dist/types/src/ui/hooks/index.d.ts +1 -1
- package/dist/types/src/ui/hooks/index.d.ts.map +1 -1
- package/dist/types/src/ui/hooks/useApp.d.ts +47 -11
- package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -1
- package/dist/types/src/ui/hooks/useApp.test.d.ts +2 -0
- package/dist/types/src/ui/hooks/useApp.test.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -1
- package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -1
- package/dist/types/src/ui/hooks/useProcessManagerRuntime.d.ts +24 -0
- package/dist/types/src/ui/hooks/useProcessManagerRuntime.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -1
- package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts +34 -0
- package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/boot-loader/index.d.ts +2 -0
- package/dist/types/src/vite-plugin/boot-loader/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/boot-loader/loader.d.ts +51 -0
- package/dist/types/src/vite-plugin/boot-loader/loader.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/composer/index.d.ts +34 -0
- package/dist/types/src/vite-plugin/composer/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/import-map/index.d.ts +28 -0
- package/dist/types/src/vite-plugin/import-map/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/index.d.ts +5 -0
- package/dist/types/src/vite-plugin/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/manifest.d.ts +41 -0
- package/dist/types/src/vite-plugin/manifest.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/manifest.test.d.ts +2 -0
- package/dist/types/src/vite-plugin/manifest.test.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/packages.d.ts +13 -0
- package/dist/types/src/vite-plugin/packages.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/moon.yml +15 -0
- package/package.json +53 -54
- package/src/cli/cli.ts +4 -9
- package/src/common/activation-events.ts +12 -17
- package/src/common/annotations.ts +3 -0
- package/src/common/capabilities.ts +160 -29
- package/src/common/operations.ts +7 -10
- package/src/context.ts +1 -1
- package/src/core/activation-event.ts +5 -2
- package/src/core/capability-manager.test.ts +1 -1
- package/src/core/capability-manager.ts +22 -1
- package/src/core/capability.ts +20 -2
- package/src/core/edge-registry-plugin-provider.ts +92 -0
- package/src/core/index.ts +6 -0
- package/src/core/plugin-asset-cache.ts +60 -0
- package/src/core/plugin-manager.test.ts +1085 -31
- package/src/core/plugin-manager.ts +1170 -198
- package/src/core/plugin-manifest.test.ts +75 -0
- package/src/core/plugin-manifest.ts +134 -0
- package/src/core/plugin.ts +194 -12
- package/src/core/registry.ts +163 -0
- package/src/core/url-loader.test.ts +221 -0
- package/src/core/url-loader.ts +388 -0
- package/src/index.ts +1 -2
- package/src/plugin-process-manager/ProcessManagerPlugin.ts +24 -0
- package/src/{plugin-operation → plugin-process-manager}/history/capability.ts +1 -2
- package/src/plugin-process-manager/history/errors.ts +7 -0
- package/src/{plugin-operation → plugin-process-manager}/history/history-tracker.test.ts +37 -43
- package/src/{plugin-operation → plugin-process-manager}/history/history-tracker.ts +1 -2
- package/src/{plugin-operation → plugin-process-manager}/history/types.ts +1 -1
- package/src/{plugin-operation → plugin-process-manager}/history/undo-mapping.ts +1 -1
- package/src/{plugin-operation → plugin-process-manager}/history/undo-registry.test.ts +3 -4
- package/src/{plugin-operation → plugin-process-manager}/history/undo-registry.ts +1 -1
- package/src/{plugin-operation → plugin-process-manager}/index.ts +1 -1
- package/src/plugin-process-manager/meta.ts +14 -0
- package/src/plugin-process-manager/process-manager-capability.ts +178 -0
- package/src/{plugin-operation → plugin-process-manager}/testing.ts +26 -45
- package/src/testing/harness.ts +247 -0
- package/src/testing/index.ts +1 -0
- package/src/testing/react.test.tsx +48 -0
- package/src/testing/react.tsx +113 -0
- package/src/testing/service.ts +4 -4
- package/src/testing/withPluginManager.stories.tsx +1 -2
- package/src/testing/withPluginManager.tsx +45 -20
- package/src/ui/components/App/App.stories.tsx +7 -13
- package/src/ui/components/App/App.tsx +29 -5
- package/src/ui/components/Placeholder/Placeholder.stories.tsx +77 -0
- package/src/ui/components/Placeholder/Placeholder.tsx +155 -0
- package/src/{plugin-runtime → ui/components/Placeholder}/index.ts +1 -1
- package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +8 -7
- package/src/ui/components/Surface/SurfaceComponent.stories.tsx +16 -15
- package/src/ui/components/Surface/SurfaceComponent.tsx +111 -55
- package/src/ui/components/Surface/SurfaceInfo.tsx +0 -1
- package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
- package/src/ui/components/Surface/index.ts +35 -1
- package/src/ui/components/Surface/types.test.ts +126 -0
- package/src/ui/components/Surface/types.ts +164 -12
- package/src/ui/components/index.ts +1 -0
- package/src/ui/hooks/index.ts +1 -1
- package/src/ui/hooks/useApp.test.tsx +159 -0
- package/src/ui/hooks/useApp.tsx +229 -24
- package/src/ui/hooks/useLoading.tsx +14 -6
- package/src/ui/hooks/useProcessManagerRuntime.ts +68 -0
- package/src/vite-plugin/boot-loader/BootLoader.stories.tsx +270 -0
- package/src/vite-plugin/boot-loader/boot-loader.css +320 -0
- package/src/vite-plugin/boot-loader/boot-loader.js +325 -0
- package/src/vite-plugin/boot-loader/index.ts +5 -0
- package/src/vite-plugin/boot-loader/loader.ts +123 -0
- package/src/vite-plugin/composer/index.ts +306 -0
- package/src/vite-plugin/import-map/index.ts +527 -0
- package/src/vite-plugin/index.ts +10 -0
- package/src/vite-plugin/manifest.test.ts +46 -0
- package/src/vite-plugin/manifest.ts +57 -0
- package/src/vite-plugin/packages.ts +187 -0
- package/tsconfig.json +25 -1
- package/tsconfig.node.json +1 -1
- package/vitest.config.ts +1 -1
- package/.swc/plugins/linux_x86_64_19.0.0/727453fb3a62f7f1d952a41e051ca8a6f88cadc45cee43c6a4d1aa45f9b75665.wasmer-v7 +0 -0
- package/dist/lib/browser/capability-2GL5JAGJ.mjs +0 -37
- package/dist/lib/browser/capability-2GL5JAGJ.mjs.map +0 -7
- package/dist/lib/browser/capability-7RLVE42K.mjs.map +0 -7
- package/dist/lib/browser/chunk-4CTRO67U.mjs +0 -703
- package/dist/lib/browser/chunk-4CTRO67U.mjs.map +0 -7
- package/dist/lib/browser/chunk-FHQTHCX7.mjs +0 -8
- package/dist/lib/browser/chunk-FNKT2QQ2.mjs.map +0 -7
- package/dist/lib/browser/chunk-HE27PNNQ.mjs +0 -824
- package/dist/lib/browser/chunk-HE27PNNQ.mjs.map +0 -7
- package/dist/lib/browser/chunk-NPUEVX42.mjs +0 -34
- package/dist/lib/browser/chunk-NPUEVX42.mjs.map +0 -7
- package/dist/lib/browser/chunk-PKQT6C53.mjs.map +0 -7
- package/dist/lib/browser/chunk-REORGDJT.mjs +0 -80
- package/dist/lib/browser/chunk-REORGDJT.mjs.map +0 -7
- package/dist/lib/browser/chunk-YAFEA4GV.mjs +0 -1
- package/dist/lib/browser/chunk-YNFPIQGB.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZRWBPIZG.mjs.map +0 -7
- package/dist/lib/browser/invoker-capability-BNLVNYHU.mjs +0 -36
- package/dist/lib/browser/invoker-capability-BNLVNYHU.mjs.map +0 -7
- package/dist/lib/node-esm/capability-CHIMU6LX.mjs +0 -38
- package/dist/lib/node-esm/capability-CHIMU6LX.mjs.map +0 -7
- package/dist/lib/node-esm/capability-EVZK4REM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2A4PRBIX.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7CPNAEGV.mjs +0 -704
- package/dist/lib/node-esm/chunk-7CPNAEGV.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7OWSHPYK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CJCQS2YL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DTCHT2X2.mjs +0 -825
- package/dist/lib/node-esm/chunk-DTCHT2X2.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JAZVHID3.mjs +0 -35
- package/dist/lib/node-esm/chunk-JAZVHID3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SB5ODNPX.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UFW652GS.mjs +0 -81
- package/dist/lib/node-esm/chunk-UFW652GS.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-Z4TJPSMP.mjs +0 -2
- package/dist/lib/node-esm/invoker-capability-VF6SP44V.mjs +0 -37
- package/dist/lib/node-esm/invoker-capability-VF6SP44V.mjs.map +0 -7
- package/dist/types/src/plugin-operation/OperationPlugin.d.ts +0 -3
- package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/history/capability.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/history/errors.d.ts +0 -5
- package/dist/types/src/plugin-operation/history/errors.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/history/index.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/history/types.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/history/undo-registry.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/index.d.ts +0 -3
- package/dist/types/src/plugin-operation/index.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/invoker-capability.d.ts +0 -6
- package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/meta.d.ts.map +0 -1
- package/dist/types/src/plugin-operation/testing.d.ts +0 -109
- package/dist/types/src/plugin-operation/testing.d.ts.map +0 -1
- package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts +0 -3
- package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +0 -1
- package/dist/types/src/plugin-runtime/capability.d.ts +0 -6
- package/dist/types/src/plugin-runtime/capability.d.ts.map +0 -1
- package/dist/types/src/plugin-runtime/index.d.ts +0 -2
- package/dist/types/src/plugin-runtime/index.d.ts.map +0 -1
- package/dist/types/src/plugin-runtime/meta.d.ts +0 -3
- package/dist/types/src/plugin-runtime/meta.d.ts.map +0 -1
- package/dist/types/src/ui/hooks/useOperationResolver.d.ts +0 -19
- package/dist/types/src/ui/hooks/useOperationResolver.d.ts.map +0 -1
- package/src/plugin-operation/OperationPlugin.ts +0 -25
- package/src/plugin-operation/history/errors.ts +0 -11
- package/src/plugin-operation/invoker-capability.ts +0 -40
- package/src/plugin-operation/meta.ts +0 -11
- package/src/plugin-runtime/RuntimePlugin.ts +0 -20
- package/src/plugin-runtime/capability.ts +0 -53
- package/src/plugin-runtime/meta.ts +0 -11
- package/src/ui/hooks/useOperationResolver.ts +0 -40
- /package/dist/lib/browser/{chunk-YAFEA4GV.mjs.map → core/url-loader.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-Z4TJPSMP.mjs.map → core/url-loader.mjs.map} +0 -0
- /package/dist/types/src/{plugin-operation → plugin-process-manager}/history/capability.d.ts +0 -0
- /package/dist/types/src/{plugin-operation → plugin-process-manager}/history/history-tracker.test.d.ts +0 -0
- /package/dist/types/src/{plugin-operation → plugin-process-manager}/history/index.d.ts +0 -0
- /package/dist/types/src/{plugin-operation → plugin-process-manager}/history/undo-registry.test.d.ts +0 -0
- /package/dist/types/src/{plugin-operation → plugin-process-manager}/meta.d.ts +0 -0
- /package/src/{plugin-operation → plugin-process-manager}/history/index.ts +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import "./chunk-KFDF7KR3.mjs";
|
|
2
|
+
import {
|
|
3
|
+
capabilities_exports
|
|
4
|
+
} from "./chunk-5AHASNDW.mjs";
|
|
5
|
+
import {
|
|
6
|
+
activation_events_exports
|
|
7
|
+
} from "./chunk-5GY3YOEL.mjs";
|
|
8
|
+
import "./chunk-FO3IYSLV.mjs";
|
|
9
|
+
import "./chunk-KLHQNYJ2.mjs";
|
|
10
|
+
import "./chunk-VJ5PFAWC.mjs";
|
|
11
|
+
import "./chunk-66IXTIVK.mjs";
|
|
12
|
+
import {
|
|
13
|
+
plugin_exports
|
|
14
|
+
} from "./chunk-SLX73WRZ.mjs";
|
|
15
|
+
import {
|
|
16
|
+
capability_exports
|
|
17
|
+
} from "./chunk-IW44C7UL.mjs";
|
|
18
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
19
|
+
|
|
20
|
+
// src/plugin-process-manager/process-manager-capability.ts
|
|
21
|
+
import { Registry } from "@effect-atom/atom";
|
|
22
|
+
import * as KeyValueStore from "@effect/platform/KeyValueStore";
|
|
23
|
+
import * as Effect from "effect/Effect";
|
|
24
|
+
import * as Layer from "effect/Layer";
|
|
25
|
+
import * as ManagedRuntime from "effect/ManagedRuntime";
|
|
26
|
+
import { LayerSpec, OperationHandlerSet, Process, ServiceResolver, Trace } from "@dxos/compute";
|
|
27
|
+
import { LayerStack, ProcessManager } from "@dxos/compute-runtime";
|
|
28
|
+
import { invariant } from "@dxos/invariant";
|
|
29
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/sdk/app-framework/src/plugin-process-manager/process-manager-capability.ts";
|
|
30
|
+
var process_manager_capability_default = capability_exports.makeModule(Effect.fnUntraced(function* () {
|
|
31
|
+
const capabilityManager = yield* capability_exports.Service;
|
|
32
|
+
const pluginManager = yield* plugin_exports.Service;
|
|
33
|
+
const atomRegistry = yield* capability_exports.get(capabilities_exports.AtomRegistry);
|
|
34
|
+
yield* plugin_exports.activate(activation_events_exports.SetupProcessManager);
|
|
35
|
+
const layerSpecs = yield* capability_exports.getAll(capabilities_exports.LayerSpec);
|
|
36
|
+
const traceSinkFactories = yield* capability_exports.getAll(capabilities_exports.TraceSink);
|
|
37
|
+
let processManagerHolder;
|
|
38
|
+
const ambientLayerSpec = LayerSpec.make({
|
|
39
|
+
affinity: "application",
|
|
40
|
+
requires: [],
|
|
41
|
+
provides: [
|
|
42
|
+
capability_exports.Service,
|
|
43
|
+
plugin_exports.Service,
|
|
44
|
+
Registry.AtomRegistry,
|
|
45
|
+
ProcessManager.ProcessManagerService
|
|
46
|
+
]
|
|
47
|
+
}, () => Layer.mergeAll(Layer.succeed(capability_exports.Service, capabilityManager), Layer.succeed(plugin_exports.Service, pluginManager), Layer.succeed(Registry.AtomRegistry, atomRegistry), Layer.effect(ProcessManager.ProcessManagerService, Effect.sync(() => {
|
|
48
|
+
invariant(processManagerHolder, "ProcessManagerService accessed before the process-manager runtime was initialised", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 65, S: this, A: ["processManagerHolder", "'ProcessManagerService accessed before the process-manager runtime was initialised'"] });
|
|
49
|
+
return processManagerHolder;
|
|
50
|
+
}))));
|
|
51
|
+
const layerStack = new LayerStack.LayerStack({
|
|
52
|
+
layers: [
|
|
53
|
+
ambientLayerSpec,
|
|
54
|
+
...layerSpecs
|
|
55
|
+
]
|
|
56
|
+
});
|
|
57
|
+
const serviceResolver = layerStack.getServiceResolver();
|
|
58
|
+
const handlerSet = OperationHandlerSet.reactive(atomRegistry, capabilityManager.atom(capabilities_exports.OperationHandler));
|
|
59
|
+
const traceSinks = traceSinkFactories.map((factory) => factory({
|
|
60
|
+
resolver: serviceResolver
|
|
61
|
+
}));
|
|
62
|
+
const mergedTraceSink = Trace.mergeSinks(traceSinks);
|
|
63
|
+
const baseLayer = Layer.mergeAll(Layer.succeed(capability_exports.Service, capabilityManager), Layer.succeed(plugin_exports.Service, pluginManager), Layer.succeed(Registry.AtomRegistry, atomRegistry), Layer.succeed(ServiceResolver.ServiceResolver, serviceResolver), OperationHandlerSet.provide(handlerSet), KeyValueStore.layerMemory, Layer.succeed(Trace.TraceSink, mergedTraceSink));
|
|
64
|
+
const processManagerLayer = ProcessManager.layer({
|
|
65
|
+
runtimeName: Trace.CommonRuntimeName.local
|
|
66
|
+
}).pipe(Layer.provide(baseLayer));
|
|
67
|
+
const operationInvokerLayer = ProcessManager.ProcessOperationInvoker.layer.pipe(Layer.provide(Layer.mergeAll(processManagerLayer, baseLayer)));
|
|
68
|
+
const runtimeLayer = Layer.mergeAll(baseLayer, processManagerLayer, operationInvokerLayer);
|
|
69
|
+
const managedRuntime = ManagedRuntime.make(runtimeLayer);
|
|
70
|
+
const processManagerRuntime = {
|
|
71
|
+
runPromise: (effect2, options) => managedRuntime.runPromise(effect2, options),
|
|
72
|
+
runPromiseExit: (effect2, options) => managedRuntime.runPromiseExit(effect2, options),
|
|
73
|
+
runFork: (effect2, options) => managedRuntime.runFork(effect2, options),
|
|
74
|
+
runSync: (effect2) => managedRuntime.runSync(effect2)
|
|
75
|
+
};
|
|
76
|
+
const processMonitor = managedRuntime.runSync(Effect.flatMap(Process.ProcessMonitorService, Effect.succeed));
|
|
77
|
+
processManagerHolder = managedRuntime.runSync(Effect.flatMap(ProcessManager.ProcessManagerService, Effect.succeed));
|
|
78
|
+
const operationInvoker = managedRuntime.runSync(Effect.flatMap(ProcessManager.ProcessOperationInvoker.Service, Effect.succeed));
|
|
79
|
+
return [
|
|
80
|
+
capability_exports.contributes(capabilities_exports.ProcessManagerRuntime, processManagerRuntime),
|
|
81
|
+
capability_exports.contributes(capabilities_exports.ServiceResolver, serviceResolver),
|
|
82
|
+
capability_exports.contributes(capabilities_exports.ProcessMonitor, processMonitor),
|
|
83
|
+
capability_exports.contributes(capabilities_exports.OperationInvoker, operationInvoker)
|
|
84
|
+
];
|
|
85
|
+
}));
|
|
86
|
+
export {
|
|
87
|
+
process_manager_capability_default as default
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=process-manager-capability-JIWLN7SU.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/plugin-process-manager/process-manager-capability.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { Registry } from '@effect-atom/atom';\nimport * as KeyValueStore from '@effect/platform/KeyValueStore';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport * as ManagedRuntime from 'effect/ManagedRuntime';\n\nimport { LayerSpec, OperationHandlerSet, Process, ServiceResolver, Trace } from '@dxos/compute';\nimport { LayerStack, ProcessManager } from '@dxos/compute-runtime';\nimport { invariant } from '@dxos/invariant';\n// Explicit import so the emitted `.d.ts` references the package via its public\n// alias instead of a relative `node_modules` path (TS2883).\nimport { OperationInvoker } from '@dxos/operation';\n\nimport { ActivationEvents, Capabilities } from '../common';\nimport { Capability, Plugin } from '../core';\n\n//\n// Capability Module\n//\n// Hosts the {@link ProcessManager} runtime for the plugin system.\n//\n// Workflow:\n// 1. Activates {@link ActivationEvents.SetupProcessManager} so plugins can\n// contribute {@link Capabilities.LayerSpec} entries and\n// {@link Capabilities.OperationHandler} sets.\n// 2. Collects all contributed {@link LayerSpec.LayerSpec}s and builds a\n// {@link LayerStack} whose {@link ServiceResolver} drives process-scoped\n// service resolution.\n// 3. Wires a reactive {@link OperationHandlerSet} that tracks\n// {@link Capabilities.OperationHandler} contributions and invalidates its\n// cached merge when new handlers register.\n// 4. Composes the fixed runtime requirements (capability/plugin managers,\n// service resolver, operation invoker, process manager) into a single\n// {@link Layer} and builds a {@link ManagedRuntime} from it.\n// 5. Exposes a disposable-less wrapper as {@link Capabilities.ProcessManagerRuntime}\n// (the plugin system manages its lifecycle).\n//\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilityManager = yield* Capability.Service;\n const pluginManager = yield* Plugin.Service;\n const atomRegistry = yield* Capability.get(Capabilities.AtomRegistry);\n\n yield* Plugin.activate(ActivationEvents.SetupProcessManager);\n\n const layerSpecs = yield* Capability.getAll(Capabilities.LayerSpec);\n const traceSinkFactories = yield* Capability.getAll(Capabilities.TraceSink);\n\n // Forward reference to `ProcessManager.ProcessManagerService`. The runtime\n // that owns the manager depends transitively on `ServiceResolver` (which is\n // built from the `LayerStack` below), so we cannot materialise it before\n // the stack exists. Instead we publish the manager into this holder as\n // soon as the runtime is built, and the ambient layer reads it lazily via\n // `Layer.effect` — slice init only runs once a process actually triggers\n // service resolution, by which point the holder is populated.\n let processManagerHolder: ProcessManager.Manager | undefined;\n\n // Expose the foundational app-framework services through the LayerStack so\n // that operations declaring `services: [Capability.Service]` (and friends)\n // can resolve them via the ServiceResolver. Without this, only consumers\n // sitting on the same ManagedRuntime layer graph can see them — process\n // executions go through ServiceResolver.resolveAll and would fail.\n const ambientLayerSpec = LayerSpec.make(\n {\n affinity: 'application',\n requires: [],\n provides: [Capability.Service, Plugin.Service, Registry.AtomRegistry, ProcessManager.ProcessManagerService],\n },\n () =>\n Layer.mergeAll(\n Layer.succeed(Capability.Service, capabilityManager),\n Layer.succeed(Plugin.Service, pluginManager),\n Layer.succeed(Registry.AtomRegistry, atomRegistry),\n Layer.effect(\n ProcessManager.ProcessManagerService,\n Effect.sync(() => {\n invariant(\n processManagerHolder,\n 'ProcessManagerService accessed before the process-manager runtime was initialised',\n );\n return processManagerHolder;\n }),\n ),\n ),\n );\n\n const layerStack = new LayerStack.LayerStack({ layers: [ambientLayerSpec, ...layerSpecs] });\n const serviceResolver = layerStack.getServiceResolver();\n\n const handlerSet = OperationHandlerSet.reactive(\n atomRegistry,\n capabilityManager.atom(Capabilities.OperationHandler),\n );\n\n const traceSinks = traceSinkFactories.map((factory) => factory({ resolver: serviceResolver }));\n const mergedTraceSink = Trace.mergeSinks(traceSinks);\n\n // Base services required by ProcessManager and the operation invoker.\n // Sensible defaults are provided here; plugins that want alternative\n // implementations (e.g. persistent KV store, real tracing) can contribute\n // their own LayerSpec entries against the ServiceResolver.\n const baseLayer = Layer.mergeAll(\n Layer.succeed(Capability.Service, capabilityManager),\n Layer.succeed(Plugin.Service, pluginManager),\n Layer.succeed(Registry.AtomRegistry, atomRegistry),\n Layer.succeed(ServiceResolver.ServiceResolver, serviceResolver),\n OperationHandlerSet.provide(handlerSet),\n KeyValueStore.layerMemory,\n Layer.succeed(Trace.TraceSink, mergedTraceSink),\n );\n\n const processManagerLayer = ProcessManager.layer({ runtimeName: Trace.CommonRuntimeName.local }).pipe(\n Layer.provide(baseLayer),\n );\n const operationInvokerLayer = ProcessManager.ProcessOperationInvoker.layer.pipe(\n Layer.provide(Layer.mergeAll(processManagerLayer, baseLayer)),\n );\n\n const runtimeLayer = Layer.mergeAll(baseLayer, processManagerLayer, operationInvokerLayer);\n\n const managedRuntime = ManagedRuntime.make(runtimeLayer as Layer.Layer<any, any, never>);\n\n // TODO(dmaretskyi): Capability modules don't currently expose a teardown\n // hook (`makeModule` only allows `Service | Plugin.Service` in the effect's\n // requirements, ruling out `Effect.addFinalizer`). Once the plugin\n // framework grows a shutdown lifecycle, dispose `managedRuntime` and then\n // call `layerStack.destroy()` to tear down keep-alive slices.\n\n const processManagerRuntime: Capabilities.ProcessManagerRuntime = {\n runPromise: (effect, options) => managedRuntime.runPromise(effect as Effect.Effect<any, any, any>, options),\n runPromiseExit: (effect, options) =>\n managedRuntime.runPromiseExit(effect as Effect.Effect<any, any, any>, options),\n runFork: (effect, options) => managedRuntime.runFork(effect as Effect.Effect<any, any, any>, options),\n runSync: (effect) => managedRuntime.runSync(effect as Effect.Effect<any, any, any>),\n };\n\n // Eagerly extract the process monitor. Safe because it does not require a\n // fresh scope and is a stable reference for the lifetime of the runtime.\n const processMonitor = managedRuntime.runSync(\n Effect.flatMap(Process.ProcessMonitorService, Effect.succeed) as Effect.Effect<Process.Monitor, never, never>,\n );\n\n // Publish the manager into the ambient-layer holder so that\n // `ProcessManager.ProcessManagerService` becomes resolvable through the\n // LayerStack alongside the other framework-supplied services.\n processManagerHolder = managedRuntime.runSync(\n Effect.flatMap(ProcessManager.ProcessManagerService, Effect.succeed) as Effect.Effect<\n ProcessManager.Manager,\n never,\n never\n >,\n );\n\n // Eagerly extract the operation invoker built by ProcessOperationInvoker.layer.\n // Pulled via the ProcessOperationInvoker tag so the contributed value carries\n // the full OperationInvoker interface (`invocations`, `pendingFollowups`,\n // `awaitFollowups`, `_invokeCore`) that HistoryTracker requires.\n const operationInvoker: OperationInvoker.OperationInvoker = managedRuntime.runSync(\n Effect.flatMap(ProcessManager.ProcessOperationInvoker.Service, Effect.succeed) as unknown as Effect.Effect<\n OperationInvoker.OperationInvoker,\n never,\n never\n >,\n );\n\n return [\n Capability.contributes(Capabilities.ProcessManagerRuntime, processManagerRuntime),\n Capability.contributes(Capabilities.ServiceResolver, serviceResolver),\n Capability.contributes(Capabilities.ProcessMonitor, processMonitor),\n Capability.contributes(Capabilities.OperationInvoker, operationInvoker),\n ];\n }),\n);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Registry", "KeyValueStore", "Effect", "Layer", "ManagedRuntime", "LayerSpec", "OperationHandlerSet", "Process", "ServiceResolver", "Trace", "LayerStack", "ProcessManager", "invariant", "pluginManager", "Service", "atomRegistry", "Capability", "Capabilities", "ActivationEvents", "layerSpecs", "getAll", "traceSinkFactories", "requires", "provides", "Plugin", "Registry", "AtomRegistry", "ProcessManager", "Layer", "processManagerHolder", "layerStack", "layers", "ambientLayerSpec", "traceSinks", "factory", "serviceResolver", "mergedTraceSink", "runtimeName", "CommonRuntimeName", "pipe", "baseLayer", "operationInvokerLayer", "runtimeLayer", "mergeAll", "managedRuntime", "ManagedRuntime", "runPromiseExit", "options", "runFork", "effect", "runSync", "contributes", "ProcessManagerRuntime", "processManagerRuntime", "ProcessMonitor", "processMonitor", "OperationInvoker", "operationInvoker"]
|
|
7
|
+
}
|
|
@@ -1,82 +1,209 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useApp
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-UVTGHZQF.mjs";
|
|
4
|
+
import "../chunk-QLML5QFJ.mjs";
|
|
5
|
+
import "../chunk-FJ4765WW.mjs";
|
|
6
|
+
import "../chunk-KFDF7KR3.mjs";
|
|
6
7
|
import {
|
|
7
8
|
capabilities_exports
|
|
8
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-5AHASNDW.mjs";
|
|
9
10
|
import {
|
|
10
11
|
activation_events_exports
|
|
11
|
-
} from "../chunk-
|
|
12
|
-
import "../chunk-
|
|
12
|
+
} from "../chunk-5GY3YOEL.mjs";
|
|
13
|
+
import "../chunk-FO3IYSLV.mjs";
|
|
14
|
+
import "../chunk-KLHQNYJ2.mjs";
|
|
13
15
|
import {
|
|
14
16
|
plugin_manager_exports
|
|
15
|
-
} from "../chunk-
|
|
16
|
-
import
|
|
17
|
+
} from "../chunk-VJ5PFAWC.mjs";
|
|
18
|
+
import {
|
|
19
|
+
activation_event_exports
|
|
20
|
+
} from "../chunk-66IXTIVK.mjs";
|
|
17
21
|
import {
|
|
18
22
|
plugin_exports
|
|
19
|
-
} from "../chunk-
|
|
23
|
+
} from "../chunk-SLX73WRZ.mjs";
|
|
20
24
|
import {
|
|
21
25
|
capability_exports
|
|
22
|
-
} from "../chunk-
|
|
26
|
+
} from "../chunk-IW44C7UL.mjs";
|
|
23
27
|
import "../chunk-J5LGTIGS.mjs";
|
|
24
28
|
|
|
25
|
-
// src/testing/
|
|
29
|
+
// src/testing/harness.ts
|
|
30
|
+
import * as Duration from "effect/Duration";
|
|
26
31
|
import * as Effect from "effect/Effect";
|
|
27
|
-
import * as
|
|
32
|
+
import * as PubSub from "effect/PubSub";
|
|
33
|
+
import * as Queue from "effect/Queue";
|
|
34
|
+
import { runAndForwardErrors } from "@dxos/effect";
|
|
28
35
|
import { invariant } from "@dxos/invariant";
|
|
29
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/sdk/app-framework/src/testing/
|
|
30
|
-
var
|
|
36
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/sdk/app-framework/src/testing/harness.ts";
|
|
37
|
+
var DEFAULT_TIMEOUT_MS = 5e3;
|
|
38
|
+
var createTestApp = async (opts) => {
|
|
39
|
+
const { plugins, enabled = plugins.filter(({ meta }) => !meta.tags?.includes("system")).map((plugin) => plugin.meta.id), setupEvents = [], autoStart = true, registerFrameworkCapabilities = true } = opts;
|
|
31
40
|
const pluginLoader = (id) => Effect.sync(() => {
|
|
32
41
|
const plugin = plugins.find((plugin2) => plugin2.meta.id === id);
|
|
33
|
-
invariant(plugin, `Plugin not found: ${id}`, {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
invariant(plugin, `Plugin not found: ${id}`, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 26, S: void 0, A: ["plugin", "`Plugin not found: ${id}`"] });
|
|
43
|
+
return {
|
|
44
|
+
plugin
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
const manager = plugin_manager_exports.make({
|
|
48
|
+
pluginLoader,
|
|
49
|
+
plugins,
|
|
50
|
+
enabled
|
|
51
|
+
});
|
|
52
|
+
if (registerFrameworkCapabilities) {
|
|
53
|
+
manager.capabilities.contribute({
|
|
54
|
+
interface: capabilities_exports.PluginManager,
|
|
55
|
+
implementation: manager,
|
|
56
|
+
module: "org.dxos.app-framework.plugin-manager"
|
|
57
|
+
});
|
|
58
|
+
manager.capabilities.contribute({
|
|
59
|
+
interface: capabilities_exports.AtomRegistry,
|
|
60
|
+
implementation: manager.registry,
|
|
61
|
+
module: "org.dxos.app-framework.atom-registry"
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (autoStart) {
|
|
65
|
+
try {
|
|
66
|
+
await runAndForwardErrors(Effect.all([
|
|
67
|
+
...setupEvents.map((event) => manager.activate(event)),
|
|
68
|
+
manager.activate(activation_events_exports.SetupReactSurface),
|
|
69
|
+
manager.activate(activation_events_exports.Startup)
|
|
70
|
+
]));
|
|
71
|
+
} catch (err) {
|
|
72
|
+
await runAndForwardErrors(manager.shutdown()).catch(() => void 0);
|
|
73
|
+
throw err;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return new TestHarnessImpl(manager);
|
|
77
|
+
};
|
|
78
|
+
var TestHarnessImpl = class {
|
|
79
|
+
manager;
|
|
80
|
+
constructor(manager) {
|
|
81
|
+
this.manager = manager;
|
|
82
|
+
}
|
|
83
|
+
get capabilities() {
|
|
84
|
+
return this.manager.capabilities;
|
|
85
|
+
}
|
|
86
|
+
get registry() {
|
|
87
|
+
return this.manager.registry;
|
|
88
|
+
}
|
|
89
|
+
fire(event) {
|
|
90
|
+
return runAndForwardErrors(this.manager.activate(event));
|
|
91
|
+
}
|
|
92
|
+
reset(event) {
|
|
93
|
+
return runAndForwardErrors(this.manager.reset(event));
|
|
94
|
+
}
|
|
95
|
+
get(iface) {
|
|
96
|
+
return this.manager.capabilities.get(iface);
|
|
97
|
+
}
|
|
98
|
+
getAll(iface) {
|
|
99
|
+
return this.manager.capabilities.getAll(iface);
|
|
100
|
+
}
|
|
101
|
+
waitForCapability(iface, opts) {
|
|
102
|
+
const timeout = opts?.timeout ?? DEFAULT_TIMEOUT_MS;
|
|
103
|
+
return runAndForwardErrors(this.manager.capabilities.waitFor(iface).pipe(Effect.timeoutFail({
|
|
104
|
+
duration: Duration.millis(timeout),
|
|
105
|
+
onTimeout: () => timeoutError(iface.identifier)
|
|
106
|
+
})));
|
|
107
|
+
}
|
|
108
|
+
waitForEvent(event, opts) {
|
|
109
|
+
const key = typeof event === "string" ? event : activation_event_exports.eventKey(event);
|
|
110
|
+
const timeout = opts?.timeout ?? DEFAULT_TIMEOUT_MS;
|
|
111
|
+
const program = Effect.gen(this, function* () {
|
|
112
|
+
const queue = yield* PubSub.subscribe(this.manager.activation);
|
|
113
|
+
if (this.manager.getEventsFired().includes(key)) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
while (true) {
|
|
117
|
+
const message = yield* Queue.take(queue);
|
|
118
|
+
if (message.event === key && message.state === "activated") {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}).pipe(Effect.scoped, Effect.timeoutFail({
|
|
123
|
+
duration: Duration.millis(timeout),
|
|
124
|
+
onTimeout: () => timeoutError(key)
|
|
125
|
+
}));
|
|
126
|
+
return runAndForwardErrors(program);
|
|
127
|
+
}
|
|
128
|
+
async invoke(op, ...args) {
|
|
129
|
+
const invoker = await this.waitForCapability(capabilities_exports.OperationInvoker);
|
|
130
|
+
const result = await invoker.invokePromise(op, ...args);
|
|
131
|
+
if (result.error) {
|
|
132
|
+
throw result.error;
|
|
133
|
+
}
|
|
134
|
+
return result.data;
|
|
135
|
+
}
|
|
136
|
+
async runPromise(effect2, options) {
|
|
137
|
+
const runtime = await this.waitForCapability(capabilities_exports.ProcessManagerRuntime, {
|
|
138
|
+
timeout: options?.timeout
|
|
41
139
|
});
|
|
42
|
-
return
|
|
140
|
+
return runtime.runPromise(effect2, options?.signal ? {
|
|
141
|
+
signal: options.signal
|
|
142
|
+
} : void 0);
|
|
143
|
+
}
|
|
144
|
+
enable(id) {
|
|
145
|
+
return runAndForwardErrors(this.manager.enable(id));
|
|
146
|
+
}
|
|
147
|
+
disable(id) {
|
|
148
|
+
return runAndForwardErrors(this.manager.disable(id));
|
|
149
|
+
}
|
|
150
|
+
async dispose() {
|
|
151
|
+
await runAndForwardErrors(this.manager.shutdown());
|
|
152
|
+
}
|
|
153
|
+
[Symbol.asyncDispose]() {
|
|
154
|
+
return this.dispose();
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
var timeoutError = (id) => new Error(`Timed out waiting for ${id}`);
|
|
158
|
+
|
|
159
|
+
// src/testing/service.ts
|
|
160
|
+
import * as Effect2 from "effect/Effect";
|
|
161
|
+
import * as Layer from "effect/Layer";
|
|
162
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
163
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/sdk/app-framework/src/testing/service.ts";
|
|
164
|
+
var fromPlugins = (plugins) => Layer.effect(plugin_exports.Service, Effect2.gen(function* () {
|
|
165
|
+
const pluginLoader = (id) => Effect2.sync(() => {
|
|
166
|
+
const plugin = plugins.find((plugin2) => plugin2.meta.id === id);
|
|
167
|
+
invariant2(plugin, `Plugin not found: ${id}`, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 16, S: this, A: ["plugin", "`Plugin not found: ${id}`"] });
|
|
168
|
+
return {
|
|
169
|
+
plugin
|
|
170
|
+
};
|
|
43
171
|
});
|
|
44
172
|
const manager = plugin_manager_exports.make({
|
|
45
173
|
pluginLoader,
|
|
46
174
|
plugins,
|
|
47
|
-
|
|
175
|
+
enabled: plugins.map((plugin) => plugin.meta.id)
|
|
48
176
|
});
|
|
49
177
|
manager.capabilities.contribute({
|
|
50
178
|
interface: capabilities_exports.PluginManager,
|
|
51
179
|
implementation: manager,
|
|
52
|
-
module: "dxos.
|
|
180
|
+
module: "org.dxos.app-framework.plugin-manager"
|
|
53
181
|
});
|
|
54
182
|
manager.capabilities.contribute({
|
|
55
183
|
interface: capabilities_exports.AtomRegistry,
|
|
56
184
|
implementation: manager.registry,
|
|
57
|
-
module: "dxos.
|
|
185
|
+
module: "org.dxos.app-framework.atom-registry"
|
|
58
186
|
});
|
|
59
187
|
yield* manager.activate(activation_events_exports.Startup);
|
|
60
188
|
return manager;
|
|
61
189
|
}));
|
|
62
190
|
|
|
63
191
|
// src/testing/withPluginManager.tsx
|
|
64
|
-
import * as
|
|
65
|
-
import React, { useEffect,
|
|
192
|
+
import * as Effect3 from "effect/Effect";
|
|
193
|
+
import React, { useEffect, useState } from "react";
|
|
66
194
|
import { raise } from "@dxos/debug";
|
|
195
|
+
import { runAndForwardErrors as runAndForwardErrors2 } from "@dxos/effect";
|
|
67
196
|
import { useAsyncEffect } from "@dxos/react-hooks";
|
|
68
197
|
import { getProviderValue } from "@dxos/util";
|
|
69
|
-
var setupPluginManager = ({ capabilities, plugins = [],
|
|
198
|
+
var setupPluginManager = ({ capabilities, plugins = [], ...options } = {}) => {
|
|
199
|
+
const enabled = plugins.filter(({ meta }) => !meta.tags?.includes("system")).map(({ meta }) => meta.id);
|
|
70
200
|
const pluginManager = plugin_manager_exports.make({
|
|
71
201
|
pluginLoader: () => raise(new Error("Not implemented")),
|
|
72
202
|
plugins: [
|
|
73
203
|
StoryPlugin,
|
|
74
204
|
...plugins
|
|
75
205
|
],
|
|
76
|
-
|
|
77
|
-
StoryPlugin.meta.id,
|
|
78
|
-
...core
|
|
79
|
-
],
|
|
206
|
+
enabled,
|
|
80
207
|
...options
|
|
81
208
|
});
|
|
82
209
|
if (capabilities) {
|
|
@@ -92,51 +219,67 @@ var setupPluginManager = ({ capabilities, plugins = [], core = plugins.map(({ me
|
|
|
92
219
|
};
|
|
93
220
|
var withPluginManager = (init = {}) => {
|
|
94
221
|
return (Story, context) => {
|
|
222
|
+
const storyId = context.id;
|
|
95
223
|
const options = typeof init === "function" ? init(context) : init;
|
|
96
|
-
const
|
|
97
|
-
pluginManager: setupPluginManager(options),
|
|
98
|
-
setupEvents: options.setupEvents
|
|
99
|
-
}), [
|
|
100
|
-
init
|
|
101
|
-
]);
|
|
224
|
+
const [managerState, setManagerState] = useState();
|
|
102
225
|
useEffect(() => {
|
|
226
|
+
const pluginManager = setupPluginManager(options);
|
|
103
227
|
const capability = capability_exports.contributes(capabilities_exports.ReactRoot, {
|
|
104
|
-
id:
|
|
228
|
+
id: storyId,
|
|
105
229
|
root: () => /* @__PURE__ */ React.createElement(Story, null)
|
|
106
230
|
});
|
|
107
231
|
pluginManager.capabilities.contribute({
|
|
108
232
|
...capability,
|
|
109
|
-
module: "dxos.
|
|
233
|
+
module: "org.dxos.app-framework.with-plugin-manager"
|
|
234
|
+
});
|
|
235
|
+
setManagerState({
|
|
236
|
+
pluginManager,
|
|
237
|
+
setupEvents: options.setupEvents,
|
|
238
|
+
fireEvents: options.fireEvents,
|
|
239
|
+
storyId
|
|
110
240
|
});
|
|
111
241
|
return () => {
|
|
112
242
|
pluginManager.capabilities.remove(capability.interface, capability.implementation);
|
|
243
|
+
void runAndForwardErrors2(pluginManager.shutdown());
|
|
113
244
|
};
|
|
114
245
|
}, [
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
]);
|
|
118
|
-
useAsyncEffect(async () => {
|
|
119
|
-
await Promise.all(options.fireEvents?.map((event) => pluginManager.activate(event)) ?? []);
|
|
120
|
-
}, [
|
|
121
|
-
pluginManager
|
|
246
|
+
storyId,
|
|
247
|
+
init
|
|
122
248
|
]);
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return /* @__PURE__ */ React.createElement(App, null);
|
|
249
|
+
if (!managerState || managerState.storyId !== storyId) {
|
|
250
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null);
|
|
251
|
+
}
|
|
252
|
+
return /* @__PURE__ */ React.createElement(WithPluginManagerApp, managerState);
|
|
128
253
|
};
|
|
129
254
|
};
|
|
255
|
+
var WithPluginManagerApp = ({ fireEvents, pluginManager, setupEvents, storyId }) => {
|
|
256
|
+
useAsyncEffect(async () => {
|
|
257
|
+
await Promise.all(fireEvents?.map((event) => pluginManager.activate(event)) ?? []);
|
|
258
|
+
}, [
|
|
259
|
+
fireEvents,
|
|
260
|
+
pluginManager,
|
|
261
|
+
storyId
|
|
262
|
+
]);
|
|
263
|
+
const App = useApp({
|
|
264
|
+
pluginManager,
|
|
265
|
+
setupEvents
|
|
266
|
+
});
|
|
267
|
+
return /* @__PURE__ */ React.createElement(App, null);
|
|
268
|
+
};
|
|
130
269
|
var storyMeta = {
|
|
131
|
-
id: "dxos.
|
|
132
|
-
name: "Story"
|
|
270
|
+
id: "org.dxos.app-framework.story",
|
|
271
|
+
name: "Story",
|
|
272
|
+
tags: [
|
|
273
|
+
"system"
|
|
274
|
+
]
|
|
133
275
|
};
|
|
134
276
|
var StoryPlugin = plugin_exports.define(storyMeta).pipe(plugin_exports.addModule({
|
|
135
277
|
id: "Story",
|
|
136
278
|
activatesOn: activation_events_exports.Startup,
|
|
137
|
-
activate: () =>
|
|
279
|
+
activate: () => Effect3.succeed([])
|
|
138
280
|
}), plugin_exports.make)();
|
|
139
281
|
export {
|
|
282
|
+
createTestApp,
|
|
140
283
|
fromPlugins,
|
|
141
284
|
setupPluginManager,
|
|
142
285
|
withPluginManager
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/testing/service.ts", "../../../../src/testing/withPluginManager.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\n\nimport { invariant } from '@dxos/invariant';\n\nimport { ActivationEvents, Capabilities } from '../common';\nimport { Plugin, PluginManager } from '../core';\n\n/**\n * Creates a Plugin.Service layer from a list of plugins.\n * This is primarily used for testing.\n */\nexport const fromPlugins = (plugins: Plugin.Plugin[]) =>\n Layer.effect(\n Plugin.Service,\n Effect.gen(function* () {\n // TODO(wittjosiah): Try to dedupe logic between here, createCliApp and useApp.\n\n const pluginLoader = (id: string) =>\n Effect.sync(() => {\n const plugin = plugins.find((plugin) => plugin.meta.id === id);\n invariant(plugin, `Plugin not found: ${id}`);\n return plugin;\n });\n\n const manager = PluginManager.make({\n pluginLoader,\n plugins,\n core: plugins.map((plugin) => plugin.meta.id),\n });\n\n manager.capabilities.contribute({\n interface: Capabilities.PluginManager,\n implementation: manager,\n module: 'dxos.org/app-framework/plugin-manager',\n });\n\n manager.capabilities.contribute({\n interface: Capabilities.AtomRegistry,\n implementation: manager.registry,\n module: 'dxos.org/app-framework/atom-registry',\n });\n\n yield* manager.activate(ActivationEvents.Startup);\n\n return manager;\n }),\n );\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Decorator, type StoryContext } from '@storybook/react';\nimport * as Effect from 'effect/Effect';\nimport React, { useEffect, useMemo } from 'react';\n\nimport { raise } from '@dxos/debug';\nimport { useAsyncEffect } from '@dxos/react-hooks';\nimport { type MaybeProvider, getProviderValue } from '@dxos/util';\n\nimport { ActivationEvents, Capabilities } from '../common';\nimport { type ActivationEvent, Capability, type CapabilityManager, Plugin, PluginManager } from '../core';\nimport { type UseAppOptions, useApp } from '../ui';\n\n/**\n * @internal\n */\nexport const setupPluginManager = ({\n capabilities,\n plugins = [],\n core = plugins.map(({ meta }) => meta.id),\n ...options\n}: UseAppOptions & Pick<WithPluginManagerOptions, 'capabilities'> = {}) => {\n const pluginManager = PluginManager.make({\n pluginLoader: () => raise(new Error('Not implemented')),\n plugins: [StoryPlugin, ...plugins],\n core: [StoryPlugin.meta.id, ...core],\n ...options,\n });\n\n if (capabilities) {\n getProviderValue(capabilities, pluginManager.capabilities).forEach((capability) => {\n pluginManager.capabilities.contribute({\n interface: capability.interface,\n implementation: capability.implementation,\n module: 'story',\n });\n });\n }\n\n return pluginManager;\n};\n\nexport type WithPluginManagerOptions = UseAppOptions & {\n /** @deprecated */\n capabilities?: MaybeProvider<Capability.Any[], CapabilityManager.CapabilityManager>;\n /** @deprecated */\n fireEvents?: (ActivationEvent.ActivationEvent | string)[];\n};\n\nexport type WithPluginManagerInitializer<Args = void> =\n | WithPluginManagerOptions\n | ((context: StoryContext<Args>) => WithPluginManagerOptions);\n\n/**\n * Wraps a story with a plugin manager.\n * NOTE: This builds up and tears down the plugin manager on every render.\n */\nexport const withPluginManager = <Args,>(init: WithPluginManagerInitializer<Args> = {}): Decorator => {\n return (Story, context) => {\n const options = typeof init === 'function' ? init(context as any) : init;\n const { pluginManager, setupEvents } = useMemo(\n () => ({ pluginManager: setupPluginManager(options), setupEvents: options.setupEvents }),\n [init],\n );\n\n // Set-up root capability.\n useEffect(() => {\n const capability = Capability.contributes(Capabilities.ReactRoot, {\n id: context.id,\n root: () => <Story />,\n });\n\n pluginManager.capabilities.contribute({\n ...capability,\n module: 'dxos.org/app-framework/withPluginManager',\n });\n\n return () => {\n pluginManager.capabilities.remove(capability.interface, capability.implementation);\n };\n }, [pluginManager, context]);\n\n // Fire events.\n useAsyncEffect(async () => {\n await Promise.all(options.fireEvents?.map((event) => pluginManager.activate(event)) ?? []);\n }, [pluginManager]);\n\n // Create app.\n const App = useApp({ pluginManager, setupEvents });\n\n return <App />;\n };\n};\n\nconst storyMeta = {\n id: 'dxos.org/app-framework/story',\n name: 'Story',\n};\n\n// No-op plugin to ensure there exists at least one plugin for the startup event.\n// This is necessary because `createApp` expects the startup event to complete before the app is ready.\nconst StoryPlugin = Plugin.define(storyMeta).pipe(\n Plugin.addModule({\n id: 'Story',\n activatesOn: ActivationEvents.Startup,\n activate: () => Effect.succeed([]),\n }),\n Plugin.make,\n)();\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["Effect", "
|
|
3
|
+
"sources": ["../../../../src/testing/harness.ts", "../../../../src/testing/service.ts", "../../../../src/testing/withPluginManager.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { type Registry } from '@effect-atom/atom-react';\nimport * as Duration from 'effect/Duration';\nimport * as Effect from 'effect/Effect';\nimport * as PubSub from 'effect/PubSub';\nimport * as Queue from 'effect/Queue';\n\nimport { type Operation } from '@dxos/compute';\nimport { runAndForwardErrors } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\n\nimport { ActivationEvents, Capabilities } from '../common';\nimport { ActivationEvent, type Capability, type CapabilityManager, type Plugin, PluginManager } from '../core';\n\nexport type TestAppOptions = {\n /**\n * Plugins to register. Plugins whose `meta.tags` includes `'system'` are treated as core\n * (force-enabled). For test convenience, plugins without a `'system'` tag are enabled by\n * default unless `enabled` is provided.\n */\n plugins: Plugin.Plugin[];\n /** Plugin ids that are enabled by default in addition to core. Defaults to all non-system plugin ids. */\n enabled?: string[];\n /** Additional activation events fired alongside SetupReactSurface. */\n setupEvents?: ActivationEvent.ActivationEvent[];\n /**\n * Whether to automatically fire SetupReactSurface + Startup during setup.\n * Defaults to true.\n */\n autoStart?: boolean;\n /**\n * Whether to register the PluginManager + AtomRegistry framework capabilities.\n * Defaults to true.\n */\n registerFrameworkCapabilities?: boolean;\n};\n\n/**\n * A running plugin manager plus helpers for driving it in tests.\n */\nexport interface TestHarness {\n readonly manager: PluginManager.PluginManager;\n readonly capabilities: CapabilityManager.CapabilityManager;\n readonly registry: Registry.Registry;\n\n /** Activate the given event. Equivalent to `manager.activate(event)`. */\n fire(event: ActivationEvent.ActivationEvent | string): Promise<boolean>;\n /** Re-activate all modules that were activated by the given event. */\n reset(event: ActivationEvent.ActivationEvent | string): Promise<boolean>;\n\n /** Returns the first contributed capability for the given interface. Throws if none are present. */\n get<T>(iface: Capability.InterfaceDef<T>): T;\n /** Returns all contributed capabilities for the given interface. */\n getAll<T>(iface: Capability.InterfaceDef<T>): T[];\n /** Waits until at least one capability is contributed for the given interface. */\n waitForCapability<T>(iface: Capability.InterfaceDef<T>, opts?: { timeout?: number }): Promise<T>;\n /** Waits until the given activation event has completed. */\n waitForEvent(event: ActivationEvent.ActivationEvent | string, opts?: { timeout?: number }): Promise<void>;\n\n /** Invokes an operation through the `Capabilities.OperationInvoker` capability. */\n invoke<I, O>(op: Operation.Definition<I, O>, ...args: void extends I ? [input?: I] : [input: I]): Promise<O>;\n\n /**\n * Waits for `Capabilities.ProcessManagerRuntime` and runs the given effect on it.\n * Convenience around `waitForCapability(ProcessManagerRuntime).runPromise(effect)`.\n */\n runPromise<A, E>(\n effect: Effect.Effect<A, E, Capabilities.ProcessManagerRuntimeServices>,\n options?: { readonly timeout?: number; readonly signal?: AbortSignal },\n ): Promise<A>;\n\n enable(id: string): Promise<boolean>;\n disable(id: string): Promise<boolean>;\n\n /** Shuts down the underlying plugin manager. */\n dispose(): Promise<void>;\n\n /** Async-disposable support so tests can use `await using harness = ...`. */\n [Symbol.asyncDispose](): Promise<void>;\n}\n\nconst DEFAULT_TIMEOUT_MS = 5_000;\n\n/**\n * Creates a TestHarness with the same bootstrap sequence that `useApp` performs,\n * minus the React provider tree.\n *\n * For Node-only tests, this is enough to fire activation events, read\n * capabilities, and invoke operations.\n *\n * For React tests, pass the returned harness to `render` or `renderSurface`\n * from `@dxos/app-framework/testing-react`.\n */\nexport const createTestApp = async (opts: TestAppOptions): Promise<TestHarness> => {\n const {\n plugins,\n enabled = plugins.filter(({ meta }) => !meta.tags?.includes('system')).map((plugin) => plugin.meta.id),\n setupEvents = [],\n autoStart = true,\n registerFrameworkCapabilities = true,\n } = opts;\n\n const pluginLoader = (id: string) =>\n Effect.sync(() => {\n const plugin = plugins.find((plugin) => plugin.meta.id === id);\n invariant(plugin, `Plugin not found: ${id}`);\n return { plugin };\n });\n\n const manager = PluginManager.make({ pluginLoader, plugins, enabled });\n\n if (registerFrameworkCapabilities) {\n manager.capabilities.contribute({\n interface: Capabilities.PluginManager,\n implementation: manager,\n module: 'org.dxos.app-framework.plugin-manager',\n });\n manager.capabilities.contribute({\n interface: Capabilities.AtomRegistry,\n implementation: manager.registry,\n module: 'org.dxos.app-framework.atom-registry',\n });\n }\n\n if (autoStart) {\n try {\n await runAndForwardErrors(\n Effect.all([\n ...setupEvents.map((event) => manager.activate(event)),\n manager.activate(ActivationEvents.SetupReactSurface),\n manager.activate(ActivationEvents.Startup),\n ]),\n );\n } catch (err) {\n await runAndForwardErrors(manager.shutdown()).catch(() => undefined);\n throw err;\n }\n }\n\n return new TestHarnessImpl(manager);\n};\n\nclass TestHarnessImpl implements TestHarness {\n constructor(readonly manager: PluginManager.PluginManager) {}\n\n get capabilities(): CapabilityManager.CapabilityManager {\n return this.manager.capabilities;\n }\n\n get registry(): Registry.Registry {\n return this.manager.registry;\n }\n\n fire(event: ActivationEvent.ActivationEvent | string): Promise<boolean> {\n return runAndForwardErrors(this.manager.activate(event));\n }\n\n reset(event: ActivationEvent.ActivationEvent | string): Promise<boolean> {\n return runAndForwardErrors(this.manager.reset(event));\n }\n\n get<T>(iface: Capability.InterfaceDef<T>): T {\n return this.manager.capabilities.get(iface);\n }\n\n getAll<T>(iface: Capability.InterfaceDef<T>): T[] {\n return this.manager.capabilities.getAll(iface);\n }\n\n waitForCapability<T>(iface: Capability.InterfaceDef<T>, opts?: { timeout?: number }): Promise<T> {\n const timeout = opts?.timeout ?? DEFAULT_TIMEOUT_MS;\n return runAndForwardErrors(\n this.manager.capabilities.waitFor(iface).pipe(\n Effect.timeoutFail({\n duration: Duration.millis(timeout),\n onTimeout: () => timeoutError(iface.identifier),\n }),\n ),\n );\n }\n\n waitForEvent(event: ActivationEvent.ActivationEvent | string, opts?: { timeout?: number }): Promise<void> {\n const key = typeof event === 'string' ? event : ActivationEvent.eventKey(event);\n const timeout = opts?.timeout ?? DEFAULT_TIMEOUT_MS;\n\n const program = Effect.gen(this, function* () {\n const queue = yield* PubSub.subscribe(this.manager.activation);\n // Re-check after subscribing to avoid a race where the event fires\n // between the caller invoking this and the subscription being installed.\n if (this.manager.getEventsFired().includes(key)) {\n return;\n }\n while (true) {\n const message = yield* Queue.take(queue);\n if (message.event === key && message.state === 'activated') {\n return;\n }\n }\n }).pipe(\n Effect.scoped,\n Effect.timeoutFail({\n duration: Duration.millis(timeout),\n onTimeout: () => timeoutError(key),\n }),\n );\n\n return runAndForwardErrors(program);\n }\n\n async invoke<I, O>(op: Operation.Definition<I, O>, ...args: [input?: I]): Promise<O> {\n const invoker = await this.waitForCapability(Capabilities.OperationInvoker);\n const result = await invoker.invokePromise(op as any, ...(args as [any]));\n if (result.error) {\n throw result.error;\n }\n return result.data as O;\n }\n\n async runPromise<A, E>(\n effect: Effect.Effect<A, E, Capabilities.ProcessManagerRuntimeServices>,\n options?: { readonly timeout?: number; readonly signal?: AbortSignal },\n ): Promise<A> {\n const runtime = await this.waitForCapability(Capabilities.ProcessManagerRuntime, { timeout: options?.timeout });\n return runtime.runPromise(effect, options?.signal ? { signal: options.signal } : undefined);\n }\n\n enable(id: string): Promise<boolean> {\n return runAndForwardErrors(this.manager.enable(id));\n }\n\n disable(id: string): Promise<boolean> {\n return runAndForwardErrors(this.manager.disable(id));\n }\n\n async dispose(): Promise<void> {\n await runAndForwardErrors(this.manager.shutdown());\n }\n\n [Symbol.asyncDispose](): Promise<void> {\n return this.dispose();\n }\n}\n\nconst timeoutError = (id: string) => new Error(`Timed out waiting for ${id}`);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\n\nimport { invariant } from '@dxos/invariant';\n\nimport { ActivationEvents, Capabilities } from '../common';\nimport { Plugin, PluginManager } from '../core';\n\n/**\n * Creates a Plugin.Service layer from a list of plugins.\n * This is primarily used for testing.\n */\nexport const fromPlugins = (plugins: Plugin.Plugin[]) =>\n Layer.effect(\n Plugin.Service,\n Effect.gen(function* () {\n // TODO(wittjosiah): Try to dedupe logic between here, createCliApp and useApp.\n\n const pluginLoader = (id: string) =>\n Effect.sync(() => {\n const plugin = plugins.find((plugin) => plugin.meta.id === id);\n invariant(plugin, `Plugin not found: ${id}`);\n return { plugin };\n });\n\n const manager = PluginManager.make({\n pluginLoader,\n plugins,\n enabled: plugins.map((plugin) => plugin.meta.id),\n });\n\n manager.capabilities.contribute({\n interface: Capabilities.PluginManager,\n implementation: manager,\n module: 'org.dxos.app-framework.plugin-manager',\n });\n\n manager.capabilities.contribute({\n interface: Capabilities.AtomRegistry,\n implementation: manager.registry,\n module: 'org.dxos.app-framework.atom-registry',\n });\n\n yield* manager.activate(ActivationEvents.Startup);\n\n return manager;\n }),\n );\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Decorator, type StoryContext } from '@storybook/react';\nimport * as Effect from 'effect/Effect';\nimport React, { useEffect, useState } from 'react';\n\nimport { raise } from '@dxos/debug';\nimport { runAndForwardErrors } from '@dxos/effect';\nimport { useAsyncEffect } from '@dxos/react-hooks';\nimport { type MaybeProvider, getProviderValue } from '@dxos/util';\n\nimport { ActivationEvents, Capabilities } from '../common';\nimport { type ActivationEvent, Capability, type CapabilityManager, Plugin, PluginManager } from '../core';\nimport { type UseAppOptions, useApp } from '../ui';\n\n/**\n * @internal\n */\nexport const setupPluginManager = ({\n capabilities,\n plugins = [],\n ...options\n}: UseAppOptions & Pick<WithPluginManagerOptions, 'capabilities'> = {}) => {\n // Auto-enable every non-system plugin so stories don't have to spell out\n // enablement. System-tagged plugins are force-enabled by the manager.\n const enabled = plugins.filter(({ meta }) => !meta.tags?.includes('system')).map(({ meta }) => meta.id);\n const pluginManager = PluginManager.make({\n pluginLoader: () => raise(new Error('Not implemented')),\n plugins: [StoryPlugin, ...plugins],\n enabled,\n ...options,\n });\n\n if (capabilities) {\n getProviderValue(capabilities, pluginManager.capabilities).forEach((capability) => {\n pluginManager.capabilities.contribute({\n interface: capability.interface,\n implementation: capability.implementation,\n module: 'story',\n });\n });\n }\n\n return pluginManager;\n};\n\ntype ManagedPluginManagerState = {\n fireEvents?: (ActivationEvent.ActivationEvent | string)[];\n pluginManager: PluginManager.PluginManager;\n setupEvents?: ActivationEvent.ActivationEvent[];\n storyId: string;\n};\n\nexport type WithPluginManagerOptions = UseAppOptions & {\n /** @deprecated */\n capabilities?: MaybeProvider<Capability.Any[], CapabilityManager.CapabilityManager>;\n /** @deprecated */\n fireEvents?: (ActivationEvent.ActivationEvent | string)[];\n};\n\nexport type WithPluginManagerInitializer<Args = void> =\n | WithPluginManagerOptions\n | ((context: StoryContext<Args>) => WithPluginManagerOptions);\n\n/**\n * Wraps a story with a plugin manager.\n * NOTE: This builds up and tears down the plugin manager on every render.\n */\nexport const withPluginManager = <Args,>(init: WithPluginManagerInitializer<Args> = {}): Decorator => {\n return (Story, context) => {\n const storyId = context.id;\n const options = typeof init === 'function' ? init(context as any) : init;\n const [managerState, setManagerState] = useState<ManagedPluginManagerState>();\n\n // Storybook replaces the full context object often, so key manager ownership by story id.\n useEffect(() => {\n const pluginManager = setupPluginManager(options);\n const capability = Capability.contributes(Capabilities.ReactRoot, {\n id: storyId,\n root: () => <Story />,\n });\n\n pluginManager.capabilities.contribute({\n ...capability,\n module: 'org.dxos.app-framework.with-plugin-manager',\n });\n\n setManagerState({\n pluginManager,\n setupEvents: options.setupEvents,\n fireEvents: options.fireEvents,\n storyId,\n });\n\n return () => {\n pluginManager.capabilities.remove(capability.interface, capability.implementation);\n void runAndForwardErrors(pluginManager.shutdown());\n };\n }, [storyId, init]);\n\n // Avoid mounting useApp with a stale manager from the previous story.\n if (!managerState || managerState.storyId !== storyId) {\n return <></>;\n }\n\n return <WithPluginManagerApp {...managerState} />;\n };\n};\n\nconst WithPluginManagerApp = ({ fireEvents, pluginManager, setupEvents, storyId }: ManagedPluginManagerState) => {\n // Fire deprecated events only after the effect-owned manager for this story exists.\n useAsyncEffect(async () => {\n await Promise.all(fireEvents?.map((event) => pluginManager.activate(event)) ?? []);\n }, [fireEvents, pluginManager, storyId]);\n\n const App = useApp({ pluginManager, setupEvents });\n return <App />;\n};\n\nconst storyMeta = {\n id: 'org.dxos.app-framework.story',\n name: 'Story',\n tags: ['system'],\n};\n\n// No-op plugin to ensure there exists at least one plugin for the startup event.\n// This is necessary because `createApp` expects the startup event to complete before the app is ready.\nconst StoryPlugin = Plugin.define(storyMeta).pipe(\n Plugin.addModule({\n id: 'Story',\n activatesOn: ActivationEvents.Startup,\n activate: () => Effect.succeed([]),\n }),\n Plugin.make,\n)();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Duration", "Effect", "PubSub", "Queue", "runAndForwardErrors", "invariant", "DEFAULT_TIMEOUT_MS", "pluginLoader", "Effect", "sync", "plugin", "plugins", "meta", "id", "manager", "enabled", "registerFrameworkCapabilities", "PluginManager", "implementation", "module", "capabilities", "registry", "autoStart", "runAndForwardErrors", "ActivationEvents", "activate", "Startup", "err", "TestHarnessImpl", "fire", "reset", "iface", "getAll", "waitForCapability", "duration", "Duration", "timeout", "onTimeout", "timeoutError", "identifier", "waitForEvent", "opts", "program", "queue", "subscribe", "message", "key", "invoke", "result", "invoker", "error", "data", "runPromise", "effect", "options", "runtime", "undefined", "enable", "disable", "dispose", "Symbol", "asyncDispose", "Effect", "Layer", "invariant", "__dxlog_file", "pluginLoader", "id", "plugin", "manager", "plugins", "enabled", "capabilities", "contribute", "implementation", "module", "registry", "Effect", "React", "useEffect", "useState", "raise", "runAndForwardErrors", "useAsyncEffect", "getProviderValue", "setupPluginManager", "capabilities", "plugins", "options", "enabled", "filter", "meta", "tags", "includes", "map", "id", "pluginManager", "PluginManager", "make", "pluginLoader", "raise", "Error", "StoryPlugin", "getProviderValue", "forEach", "capability", "contribute", "interface", "implementation", "module", "withPluginManager", "init", "Story", "context", "storyId", "managerState", "setManagerState", "useState", "useEffect", "Capability", "contributes", "Capabilities", "ReactRoot", "root", "setupEvents", "fireEvents", "remove", "runAndForwardErrors", "shutdown", "WithPluginManagerApp", "useAsyncEffect", "Promise", "all", "event", "activate", "App", "useApp", "storyMeta", "name", "Plugin", "define", "pipe", "addModule", "activatesOn", "ActivationEvents", "Startup", "succeed"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PluginManagerProvider,
|
|
3
|
+
SurfaceComponent,
|
|
4
|
+
topologicalSort
|
|
5
|
+
} from "../chunk-QLML5QFJ.mjs";
|
|
6
|
+
import {
|
|
7
|
+
PluginManagerContext
|
|
8
|
+
} from "../chunk-FJ4765WW.mjs";
|
|
9
|
+
import "../chunk-KFDF7KR3.mjs";
|
|
10
|
+
import {
|
|
11
|
+
capabilities_exports
|
|
12
|
+
} from "../chunk-5AHASNDW.mjs";
|
|
13
|
+
import "../chunk-5GY3YOEL.mjs";
|
|
14
|
+
import "../chunk-FO3IYSLV.mjs";
|
|
15
|
+
import "../chunk-KLHQNYJ2.mjs";
|
|
16
|
+
import "../chunk-VJ5PFAWC.mjs";
|
|
17
|
+
import "../chunk-66IXTIVK.mjs";
|
|
18
|
+
import "../chunk-SLX73WRZ.mjs";
|
|
19
|
+
import "../chunk-IW44C7UL.mjs";
|
|
20
|
+
import "../chunk-J5LGTIGS.mjs";
|
|
21
|
+
|
|
22
|
+
// src/testing/react.tsx
|
|
23
|
+
import { RegistryContext } from "@effect-atom/atom-react";
|
|
24
|
+
import { render as rtlRender } from "@testing-library/react";
|
|
25
|
+
import React, { Fragment } from "react";
|
|
26
|
+
import { ContextProtocolProvider } from "@dxos/web-context-react";
|
|
27
|
+
var render = (harness, ui, options) => {
|
|
28
|
+
const { reactContexts = [], ...rest } = options ?? {};
|
|
29
|
+
const Wrapper = ({ children }) => /* @__PURE__ */ React.createElement(HarnessProviders, {
|
|
30
|
+
harness,
|
|
31
|
+
extra: reactContexts
|
|
32
|
+
}, children);
|
|
33
|
+
return rtlRender(/* @__PURE__ */ React.createElement(React.Fragment, null, ui), {
|
|
34
|
+
...rest,
|
|
35
|
+
wrapper: Wrapper
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
var renderSurface = (harness, props, options) => {
|
|
39
|
+
const { role, data, limit, fallback, placeholder } = props;
|
|
40
|
+
return render(harness, /* @__PURE__ */ React.createElement(SurfaceComponent, {
|
|
41
|
+
role,
|
|
42
|
+
data,
|
|
43
|
+
limit,
|
|
44
|
+
fallback,
|
|
45
|
+
placeholder
|
|
46
|
+
}), options);
|
|
47
|
+
};
|
|
48
|
+
var HarnessProviders = ({ harness, extra, children }) => {
|
|
49
|
+
const contributed = harness.getAll(capabilities_exports.ReactContext);
|
|
50
|
+
const ContributedContext = composeContexts(contributed);
|
|
51
|
+
const ExtraContext = composeExtra(extra);
|
|
52
|
+
return /* @__PURE__ */ React.createElement(PluginManagerProvider, {
|
|
53
|
+
value: harness.manager
|
|
54
|
+
}, /* @__PURE__ */ React.createElement(ContextProtocolProvider, {
|
|
55
|
+
value: harness.manager,
|
|
56
|
+
context: PluginManagerContext
|
|
57
|
+
}, /* @__PURE__ */ React.createElement(RegistryContext.Provider, {
|
|
58
|
+
value: harness.registry
|
|
59
|
+
}, /* @__PURE__ */ React.createElement(ContributedContext, null, /* @__PURE__ */ React.createElement(ExtraContext, null, children)))));
|
|
60
|
+
};
|
|
61
|
+
var composeContexts = (contexts) => {
|
|
62
|
+
if (contexts.length === 0) {
|
|
63
|
+
return Passthrough;
|
|
64
|
+
}
|
|
65
|
+
return topologicalSort(contexts).map(({ context }) => context).reduce((Acc, Next) => ({ children }) => /* @__PURE__ */ React.createElement(Acc, null, /* @__PURE__ */ React.createElement(Next, null, children)));
|
|
66
|
+
};
|
|
67
|
+
var composeExtra = (contexts) => {
|
|
68
|
+
if (contexts.length === 0) {
|
|
69
|
+
return Passthrough;
|
|
70
|
+
}
|
|
71
|
+
return contexts.reduce((Acc, Next) => ({ children }) => /* @__PURE__ */ React.createElement(Next, null, /* @__PURE__ */ React.createElement(Acc, null, children)), Passthrough);
|
|
72
|
+
};
|
|
73
|
+
var Passthrough = ({ children }) => /* @__PURE__ */ React.createElement(Fragment, null, children);
|
|
74
|
+
export {
|
|
75
|
+
render,
|
|
76
|
+
renderSurface
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=react.mjs.map
|