@dxos/app-framework 0.8.4-main.937b3ca → 0.8.4-main.9be5663bfe
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/.storybook/main.mts +1 -3
- package/dist/lib/browser/{capability-7PCNSWBT.mjs → capability-BBBBAPDI.mjs} +16 -11
- package/dist/lib/browser/capability-BBBBAPDI.mjs.map +7 -0
- package/dist/lib/browser/capability-OP63CD5N.mjs +35 -0
- package/dist/lib/browser/capability-OP63CD5N.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6Y7PZV72.mjs → chunk-2CKCJ6PN.mjs} +6 -4
- package/dist/lib/browser/chunk-2CKCJ6PN.mjs.map +7 -0
- package/dist/lib/browser/{chunk-7IQHKD4U.mjs → chunk-F7FW2RK2.mjs} +9 -12
- package/dist/lib/browser/chunk-F7FW2RK2.mjs.map +7 -0
- package/dist/lib/browser/{chunk-TCLLRCS3.mjs → chunk-FU4GAFUQ.mjs} +10 -7
- package/dist/lib/browser/chunk-FU4GAFUQ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FMZN33N4.mjs → chunk-GX4TUNM6.mjs} +343 -187
- package/dist/lib/browser/chunk-GX4TUNM6.mjs.map +7 -0
- package/dist/lib/browser/chunk-I34GF4NG.mjs +34 -0
- package/dist/lib/browser/chunk-I34GF4NG.mjs.map +7 -0
- package/dist/lib/browser/chunk-JKWMHZP6.mjs +80 -0
- package/dist/lib/browser/chunk-JKWMHZP6.mjs.map +7 -0
- package/dist/lib/browser/chunk-LVJW5EFU.mjs +157 -0
- package/dist/lib/browser/chunk-LVJW5EFU.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PKQT6C53.mjs → chunk-QSXYHXCE.mjs} +3 -2
- package/dist/lib/browser/chunk-QSXYHXCE.mjs.map +7 -0
- package/dist/lib/browser/chunk-RFSO3JRG.mjs +1 -0
- package/dist/lib/browser/chunk-T3Y4AEKX.mjs +42 -0
- package/dist/lib/browser/chunk-T3Y4AEKX.mjs.map +7 -0
- package/dist/lib/browser/chunk-TGX63LTL.mjs +8 -0
- package/dist/lib/browser/{chunk-FHQTHCX7.mjs.map → chunk-TGX63LTL.mjs.map} +1 -1
- package/dist/lib/browser/chunk-WPE6AL7I.mjs +905 -0
- package/dist/lib/browser/chunk-WPE6AL7I.mjs.map +7 -0
- package/dist/lib/browser/cli/index.mjs +90 -0
- package/dist/lib/browser/cli/index.mjs.map +7 -0
- package/dist/lib/browser/common/activation-events.mjs +24 -0
- package/dist/lib/browser/common/capabilities.mjs +46 -0
- package/dist/lib/browser/core/activation-event.mjs +1 -1
- package/dist/lib/browser/core/capability.mjs +3 -1
- package/dist/lib/browser/core/plugin-manager.mjs +4 -4
- package/dist/lib/browser/core/plugin.mjs +6 -4
- package/dist/lib/browser/core/url-loader.mjs +12 -0
- package/dist/lib/browser/index.mjs +40 -131
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/invoker-capability-H5PPENOC.mjs +43 -0
- package/dist/lib/browser/invoker-capability-H5PPENOC.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +56 -34
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/browser/{react → ui}/index.mjs +19 -21
- package/dist/lib/browser/ui/index.mjs.map +7 -0
- package/dist/lib/node-esm/{capability-CFLQ2QQU.mjs → capability-AWBEMRYR.mjs} +16 -11
- package/dist/lib/node-esm/capability-AWBEMRYR.mjs.map +7 -0
- package/dist/lib/node-esm/capability-WFEG6CIZ.mjs +36 -0
- package/dist/lib/node-esm/capability-WFEG6CIZ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-STMXUEPO.mjs → chunk-42KBWDE4.mjs} +6 -4
- package/dist/lib/node-esm/chunk-42KBWDE4.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-4A3ZCMI3.mjs +158 -0
- package/dist/lib/node-esm/chunk-4A3ZCMI3.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-XYQTBFPA.mjs → chunk-BCEOLX47.mjs} +343 -187
- package/dist/lib/node-esm/chunk-BCEOLX47.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-EL3R25OQ.mjs +2 -0
- package/dist/lib/node-esm/chunk-EL3R25OQ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs → chunk-FKE4Z3D6.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs.map → chunk-FKE4Z3D6.mjs.map} +1 -1
- package/dist/lib/node-esm/chunk-G3RTFSNG.mjs +81 -0
- package/dist/lib/node-esm/chunk-G3RTFSNG.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-LQKOTNJW.mjs +906 -0
- package/dist/lib/node-esm/chunk-LQKOTNJW.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-GT6OKM5I.mjs → chunk-ULUEXB7Q.mjs} +10 -7
- package/dist/lib/node-esm/chunk-ULUEXB7Q.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-663A54LQ.mjs → chunk-URWHJQT2.mjs} +9 -12
- package/dist/lib/node-esm/chunk-URWHJQT2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-VKHGNEDB.mjs +43 -0
- package/dist/lib/node-esm/chunk-VKHGNEDB.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs +35 -0
- package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-7OWSHPYK.mjs → chunk-ZZ7CKK6W.mjs} +3 -2
- package/dist/lib/node-esm/chunk-ZZ7CKK6W.mjs.map +7 -0
- package/dist/lib/node-esm/cli/index.mjs +91 -0
- package/dist/lib/node-esm/cli/index.mjs.map +7 -0
- package/dist/lib/node-esm/common/activation-events.mjs +25 -0
- package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
- package/dist/lib/node-esm/common/capabilities.mjs +47 -0
- package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
- package/dist/lib/node-esm/core/activation-event.mjs +1 -1
- package/dist/lib/node-esm/core/capability.mjs +3 -1
- package/dist/lib/node-esm/core/plugin-manager.mjs +4 -4
- package/dist/lib/node-esm/core/plugin.mjs +6 -4
- package/dist/lib/node-esm/core/url-loader.mjs +13 -0
- package/dist/lib/node-esm/core/url-loader.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +40 -131
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/invoker-capability-S3ZA527J.mjs +44 -0
- package/dist/lib/node-esm/invoker-capability-S3ZA527J.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +56 -34
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/{react → ui}/index.mjs +19 -21
- package/dist/lib/node-esm/ui/index.mjs.map +7 -0
- package/dist/plugin/node-esm/index.mjs +384 -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.d.ts → cli/cli.d.ts} +2 -2
- package/dist/types/src/cli/cli.d.ts.map +1 -0
- package/dist/types/src/cli/index.d.ts +2 -0
- package/dist/types/src/cli/index.d.ts.map +1 -0
- package/dist/types/src/common/activation-events.d.ts +27 -0
- package/dist/types/src/common/activation-events.d.ts.map +1 -0
- package/dist/types/src/common/capabilities.d.ts +110 -0
- package/dist/types/src/common/capabilities.d.ts.map +1 -0
- package/dist/types/src/common/index.d.ts +4 -9
- package/dist/types/src/common/index.d.ts.map +1 -1
- package/dist/types/src/common/operations.d.ts +8 -369
- package/dist/types/src/common/operations.d.ts.map +1 -1
- package/dist/types/src/common/translations.d.ts +0 -9
- package/dist/types/src/common/translations.d.ts.map +1 -1
- package/dist/types/src/core/activation-event.d.ts +1 -1
- 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 -7
- package/dist/types/src/core/capability.d.ts.map +1 -1
- package/dist/types/src/core/index.d.ts +1 -0
- package/dist/types/src/core/index.d.ts.map +1 -1
- package/dist/types/src/core/plugin-manager.d.ts +9 -2
- package/dist/types/src/core/plugin-manager.d.ts.map +1 -1
- package/dist/types/src/core/plugin.d.ts +6 -1
- package/dist/types/src/core/plugin.d.ts.map +1 -1
- package/dist/types/src/core/url-loader.d.ts +25 -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/index.d.ts +1 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +1 -1
- package/dist/types/src/plugin-operation/history/capability.d.ts +1 -1
- package/dist/types/src/plugin-operation/history/capability.d.ts.map +1 -1
- package/dist/types/src/plugin-operation/history/errors.d.ts +30 -3
- package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -1
- package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +1 -1
- package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +11 -3
- package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -1
- package/dist/types/src/plugin-operation/invoker-capability.d.ts +1 -1
- package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -1
- package/dist/types/src/plugin-operation/testing.d.ts +26 -77
- package/dist/types/src/plugin-operation/testing.d.ts.map +1 -1
- package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +1 -1
- package/dist/types/src/plugin-runtime/capability.d.ts +2 -2
- package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -1
- package/dist/types/src/testing/withPluginManager.d.ts +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/{react → ui/components/App}/App.d.ts +3 -2
- package/dist/types/src/ui/components/App/App.d.ts.map +1 -0
- package/dist/types/src/{react/Surface.stories.d.ts → ui/components/App/App.stories.d.ts} +7 -2
- package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -0
- package/dist/types/src/ui/components/App/index.d.ts +2 -0
- package/dist/types/src/ui/components/App/index.d.ts.map +1 -0
- package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -0
- package/dist/types/src/{react → ui/components/PluginManager}/PluginManagerProvider.d.ts +1 -1
- package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts.map +1 -0
- package/dist/types/src/ui/components/PluginManager/index.d.ts +2 -0
- package/dist/types/src/ui/components/PluginManager/index.d.ts.map +1 -0
- package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +12 -0
- package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -0
- package/dist/types/src/{react/App.stories.d.ts → ui/components/Surface/SurfaceComponent.stories.d.ts} +1 -1
- package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -0
- package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -0
- 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/context.d.ts +5 -0
- package/dist/types/src/ui/components/Surface/context.d.ts.map +1 -0
- package/dist/types/src/ui/components/Surface/index.d.ts +26 -0
- package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -0
- package/dist/types/src/{common/surface.d.ts → ui/components/Surface/types.d.ts} +20 -18
- package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -0
- package/dist/types/src/ui/components/index.d.ts +4 -0
- package/dist/types/src/ui/components/index.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/index.d.ts +6 -0
- package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
- package/dist/types/src/{react → ui/hooks}/useApp.d.ts +26 -9
- package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
- 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/{react → ui/hooks}/useCapabilities.d.ts +6 -1
- package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
- package/dist/types/src/{react/common.d.ts → ui/hooks/useSettingsState.d.ts} +1 -5
- package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
- package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
- package/dist/types/src/ui/index.d.ts +3 -0
- package/dist/types/src/ui/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/composer-plugin.d.ts +18 -0
- package/dist/types/src/vite-plugin/composer-plugin.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/import-map-plugin.d.ts +16 -0
- package/dist/types/src/vite-plugin/import-map-plugin.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/index.d.ts +3 -0
- package/dist/types/src/vite-plugin/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/packages.d.ts +7 -0
- package/dist/types/src/vite-plugin/packages.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/moon.yml +20 -6
- package/package.json +91 -64
- package/src/{cli.ts → cli/cli.ts} +10 -10
- package/src/{playground/debug → cli}/index.ts +1 -1
- package/src/common/activation-events.ts +44 -0
- package/src/common/capabilities.ts +172 -0
- package/src/common/index.ts +4 -9
- package/src/common/operations.ts +6 -383
- package/src/common/translations.ts +0 -12
- 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 +21 -10
- package/src/core/index.ts +1 -0
- package/src/core/plugin-manager.test.ts +314 -46
- package/src/core/plugin-manager.ts +344 -157
- package/src/core/plugin.ts +10 -2
- package/src/core/url-loader.test.ts +79 -0
- package/src/core/url-loader.ts +148 -0
- package/src/index.ts +1 -3
- package/src/plugin-operation/OperationPlugin.ts +5 -6
- package/src/plugin-operation/history/capability.ts +5 -6
- package/src/plugin-operation/history/errors.ts +2 -6
- package/src/plugin-operation/history/history-tracker.test.ts +36 -43
- package/src/plugin-operation/history/history-tracker.ts +0 -1
- package/src/plugin-operation/history/undo-mapping.ts +6 -3
- package/src/plugin-operation/history/undo-registry.test.ts +3 -4
- package/src/plugin-operation/invoker-capability.ts +21 -7
- package/src/plugin-operation/meta.ts +1 -1
- package/src/plugin-operation/testing.ts +25 -45
- package/src/plugin-runtime/RuntimePlugin.ts +4 -5
- package/src/plugin-runtime/capability.ts +5 -5
- package/src/plugin-runtime/meta.ts +1 -1
- package/src/testing/service.ts +6 -6
- package/src/testing/withPluginManager.stories.tsx +6 -7
- package/src/testing/withPluginManager.tsx +44 -19
- package/src/ui/components/App/App.stories.tsx +92 -0
- package/src/{react → ui/components/App}/App.tsx +9 -11
- package/src/{playground/layout → ui/components/App}/index.ts +1 -1
- package/src/{react → ui/components/PluginManager}/PluginManagerContext.stories.tsx +13 -14
- package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +1 -1
- package/src/ui/components/PluginManager/index.ts +5 -0
- package/src/{react/Surface.stories.tsx → ui/components/Surface/SurfaceComponent.stories.tsx} +31 -28
- package/src/{react/Surface.tsx → ui/components/Surface/SurfaceComponent.tsx} +59 -60
- package/src/{react → ui/components/Surface}/SurfaceInfo.tsx +2 -2
- package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
- package/src/ui/components/Surface/context.ts +12 -0
- package/src/ui/components/Surface/index.ts +35 -0
- package/src/{common/surface.ts → ui/components/Surface/types.ts} +22 -25
- package/src/ui/components/index.ts +7 -0
- package/src/ui/hooks/index.ts +9 -0
- package/src/ui/hooks/useApp.test.tsx +159 -0
- package/src/{react → ui/hooks}/useApp.tsx +110 -30
- package/src/{react → ui/hooks}/useCapabilities.ts +9 -5
- package/src/{react/common.ts → ui/hooks/useSettingsState.ts} +0 -11
- package/src/ui/hooks/useSurface.ts +13 -0
- package/src/ui/index.ts +6 -0
- package/src/vite-plugin/composer-plugin.ts +128 -0
- package/src/vite-plugin/import-map-plugin.ts +314 -0
- package/src/vite-plugin/index.ts +6 -0
- package/src/vite-plugin/packages.ts +29 -0
- package/tsconfig.json +4 -28
- package/tsconfig.node.json +2 -4
- package/typedoc.json +2 -4
- package/vitest.config.ts +1 -1
- package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs +0 -149
- package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs.map +0 -7
- package/dist/lib/browser/capability-7PCNSWBT.mjs.map +0 -7
- package/dist/lib/browser/capability-KP3PFEXD.mjs +0 -31
- package/dist/lib/browser/capability-KP3PFEXD.mjs.map +0 -7
- package/dist/lib/browser/chunk-6Y7PZV72.mjs.map +0 -7
- package/dist/lib/browser/chunk-7IQHKD4U.mjs.map +0 -7
- package/dist/lib/browser/chunk-BLQJSGL3.mjs +0 -732
- package/dist/lib/browser/chunk-BLQJSGL3.mjs.map +0 -7
- package/dist/lib/browser/chunk-FHQTHCX7.mjs +0 -8
- package/dist/lib/browser/chunk-FMZN33N4.mjs.map +0 -7
- package/dist/lib/browser/chunk-H4WPA7U7.mjs +0 -77
- package/dist/lib/browser/chunk-H4WPA7U7.mjs.map +0 -7
- package/dist/lib/browser/chunk-PKQT6C53.mjs.map +0 -7
- package/dist/lib/browser/chunk-TCLLRCS3.mjs.map +0 -7
- package/dist/lib/browser/chunk-XYNO72GQ.mjs +0 -746
- package/dist/lib/browser/chunk-XYNO72GQ.mjs.map +0 -7
- package/dist/lib/browser/common/index.mjs +0 -38
- package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs +0 -32
- package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs.map +0 -7
- package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs +0 -64
- package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs +0 -150
- package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs.map +0 -7
- package/dist/lib/node-esm/capability-CFLQ2QQU.mjs.map +0 -7
- package/dist/lib/node-esm/capability-RCUNM2M7.mjs +0 -32
- package/dist/lib/node-esm/capability-RCUNM2M7.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-663A54LQ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6WXBT3EC.mjs +0 -747
- package/dist/lib/node-esm/chunk-6WXBT3EC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7OWSHPYK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GQEBIGKD.mjs +0 -733
- package/dist/lib/node-esm/chunk-GQEBIGKD.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GT6OKM5I.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-STMXUEPO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XR6NMKEP.mjs +0 -78
- package/dist/lib/node-esm/chunk-XR6NMKEP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XYQTBFPA.mjs.map +0 -7
- package/dist/lib/node-esm/common/index.mjs +0 -39
- package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs +0 -33
- package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs.map +0 -7
- package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs +0 -65
- package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs.map +0 -7
- package/dist/types/src/cli.d.ts.map +0 -1
- package/dist/types/src/common/activation-event.d.ts +0 -66
- package/dist/types/src/common/activation-event.d.ts.map +0 -1
- package/dist/types/src/common/capability.d.ts +0 -265
- package/dist/types/src/common/capability.d.ts.map +0 -1
- package/dist/types/src/common/collaboration.d.ts +0 -26
- package/dist/types/src/common/collaboration.d.ts.map +0 -1
- package/dist/types/src/common/file.d.ts +0 -14
- package/dist/types/src/common/file.d.ts.map +0 -1
- package/dist/types/src/common/graph.d.ts +0 -21
- package/dist/types/src/common/graph.d.ts.map +0 -1
- package/dist/types/src/common/plugin.d.ts +0 -201
- package/dist/types/src/common/plugin.d.ts.map +0 -1
- package/dist/types/src/common/surface.d.ts.map +0 -1
- package/dist/types/src/playground/debug/Debug.d.ts +0 -8
- package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
- package/dist/types/src/playground/debug/index.d.ts +0 -2
- package/dist/types/src/playground/debug/index.d.ts.map +0 -1
- package/dist/types/src/playground/debug/plugin.d.ts +0 -3
- package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
- package/dist/types/src/playground/generator/Main.d.ts +0 -8
- package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
- package/dist/types/src/playground/generator/Toolbar.d.ts +0 -8
- package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
- package/dist/types/src/playground/generator/generator.d.ts +0 -19
- package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
- package/dist/types/src/playground/generator/index.d.ts +0 -3
- package/dist/types/src/playground/generator/index.d.ts.map +0 -1
- package/dist/types/src/playground/generator/plugin.d.ts +0 -3
- package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
- package/dist/types/src/playground/layout/Layout.d.ts +0 -10
- package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
- package/dist/types/src/playground/layout/index.d.ts +0 -2
- package/dist/types/src/playground/layout/index.d.ts.map +0 -1
- package/dist/types/src/playground/layout/plugin.d.ts +0 -3
- package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
- package/dist/types/src/playground/logger/Toolbar.d.ts +0 -8
- package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
- package/dist/types/src/playground/logger/index.d.ts +0 -2
- package/dist/types/src/playground/logger/index.d.ts.map +0 -1
- package/dist/types/src/playground/logger/plugin.d.ts +0 -3
- package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
- package/dist/types/src/playground/logger/schema.d.ts +0 -27
- package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
- package/dist/types/src/playground/playground.stories.d.ts +0 -11
- package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -3
- package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/actions.d.ts +0 -61
- package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -6
- package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/index.d.ts +0 -3
- package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/meta.d.ts +0 -3
- package/dist/types/src/plugin-settings/meta.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/operation-resolver.d.ts +0 -6
- package/dist/types/src/plugin-settings/operation-resolver.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/translations.d.ts +0 -11
- package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
- package/dist/types/src/react/App.d.ts.map +0 -1
- package/dist/types/src/react/App.stories.d.ts.map +0 -1
- package/dist/types/src/react/DefaultFallback.d.ts +0 -8
- package/dist/types/src/react/DefaultFallback.d.ts.map +0 -1
- package/dist/types/src/react/ErrorBoundary.d.ts +0 -30
- package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
- package/dist/types/src/react/PluginManagerContext.stories.d.ts.map +0 -1
- package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
- package/dist/types/src/react/Surface.d.ts +0 -14
- package/dist/types/src/react/Surface.d.ts.map +0 -1
- package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
- package/dist/types/src/react/SurfaceInfo.d.ts.map +0 -1
- package/dist/types/src/react/common.d.ts.map +0 -1
- package/dist/types/src/react/index.d.ts +0 -9
- package/dist/types/src/react/index.d.ts.map +0 -1
- package/dist/types/src/react/types.d.ts +0 -12
- package/dist/types/src/react/types.d.ts.map +0 -1
- package/dist/types/src/react/useApp.d.ts.map +0 -1
- package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
- package/dist/types/src/react/useLoading.d.ts.map +0 -1
- package/dist/types/src/react/useOperationResolver.d.ts +0 -19
- package/dist/types/src/react/useOperationResolver.d.ts.map +0 -1
- package/src/common/activation-event.ts +0 -99
- package/src/common/capability.ts +0 -343
- package/src/common/collaboration.ts +0 -31
- package/src/common/file.ts +0 -22
- package/src/common/graph.ts +0 -30
- package/src/common/plugin.ts +0 -364
- package/src/playground/debug/Debug.tsx +0 -49
- package/src/playground/debug/plugin.ts +0 -16
- package/src/playground/generator/Main.tsx +0 -80
- package/src/playground/generator/Toolbar.tsx +0 -57
- package/src/playground/generator/generator.ts +0 -48
- package/src/playground/generator/index.ts +0 -6
- package/src/playground/generator/plugin.ts +0 -21
- package/src/playground/layout/Layout.tsx +0 -37
- package/src/playground/layout/plugin.ts +0 -18
- package/src/playground/logger/Toolbar.tsx +0 -33
- package/src/playground/logger/index.ts +0 -5
- package/src/playground/logger/plugin.ts +0 -42
- package/src/playground/logger/schema.ts +0 -22
- package/src/playground/playground.stories.tsx +0 -54
- package/src/plugin-settings/SettingsPlugin.ts +0 -19
- package/src/plugin-settings/actions.ts +0 -64
- package/src/plugin-settings/app-graph-builder.ts +0 -140
- package/src/plugin-settings/index.ts +0 -6
- package/src/plugin-settings/meta.ts +0 -10
- package/src/plugin-settings/operation-resolver.ts +0 -55
- package/src/plugin-settings/translations.ts +0 -19
- package/src/react/App.stories.tsx +0 -63
- package/src/react/DefaultFallback.tsx +0 -26
- package/src/react/ErrorBoundary.tsx +0 -56
- package/src/react/index.ts +0 -14
- package/src/react/types.ts +0 -27
- package/src/react/useOperationResolver.ts +0 -40
- /package/dist/lib/{node-esm/react/index.mjs.map → browser/chunk-RFSO3JRG.mjs.map} +0 -0
- /package/dist/lib/{node-esm/common/index.mjs.map → browser/common/activation-events.mjs.map} +0 -0
- /package/dist/lib/browser/{react/index.mjs.map → common/capabilities.mjs.map} +0 -0
- /package/dist/lib/browser/{common/index.mjs.map → core/url-loader.mjs.map} +0 -0
- /package/dist/types/src/{react → ui/components/PluginManager}/PluginManagerContext.stories.d.ts +0 -0
- /package/dist/types/src/{react → ui/components/Surface}/SurfaceInfo.d.ts +0 -0
- /package/dist/types/src/{react → ui/hooks}/useLoading.d.ts +0 -0
- /package/src/{react → ui/hooks}/useLoading.tsx +0 -0
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { afterEach, assert, describe, it } from '@effect/vitest';
|
|
6
5
|
import { type Atom, Registry } from '@effect-atom/atom-react';
|
|
6
|
+
import { afterEach, assert, describe, it } from '@effect/vitest';
|
|
7
|
+
import * as Cause from 'effect/Cause';
|
|
7
8
|
import * as Duration from 'effect/Duration';
|
|
8
9
|
import * as Effect from 'effect/Effect';
|
|
10
|
+
import * as Exit from 'effect/Exit';
|
|
9
11
|
import * as Fiber from 'effect/Fiber';
|
|
10
12
|
import * as Match from 'effect/Match';
|
|
11
13
|
import * as PubSub from 'effect/PubSub';
|
|
@@ -15,22 +17,21 @@ import * as TestClock from 'effect/TestClock';
|
|
|
15
17
|
import { invariant } from '@dxos/invariant';
|
|
16
18
|
import { type LogConfig, type LogEntry, LogLevel, log } from '@dxos/log';
|
|
17
19
|
|
|
18
|
-
import
|
|
19
|
-
|
|
20
|
+
import { ActivationEvents } from '../common';
|
|
20
21
|
import * as ActivationEvent from './activation-event';
|
|
21
22
|
import * as Capability from './capability';
|
|
22
23
|
import type * as CapabilityManager from './capability-manager';
|
|
23
24
|
import * as Plugin from './plugin';
|
|
24
25
|
import * as PluginManager from './plugin-manager';
|
|
25
26
|
|
|
26
|
-
const String = Capability.make<{ string: string }>('dxos.
|
|
27
|
-
const Number = Capability.make<{ number: number }>('dxos.
|
|
28
|
-
const Total = Capability.make<{ total: number }>('dxos.
|
|
27
|
+
const String = Capability.make<{ string: string }>('org.dxos.test.string');
|
|
28
|
+
const Number = Capability.make<{ number: number }>('org.dxos.test.number');
|
|
29
|
+
const Total = Capability.make<{ total: number }>('org.dxos.test.total');
|
|
29
30
|
|
|
30
|
-
const CountEvent = ActivationEvent.make('dxos.
|
|
31
|
-
const FailEvent = ActivationEvent.make('dxos.
|
|
31
|
+
const CountEvent = ActivationEvent.make('org.dxos.test.count');
|
|
32
|
+
const FailEvent = ActivationEvent.make('org.dxos.test.fail');
|
|
32
33
|
|
|
33
|
-
const testMeta = { id: 'dxos.
|
|
34
|
+
const testMeta = { id: 'org.dxos.plugin.test', name: 'Test' };
|
|
34
35
|
|
|
35
36
|
// TODO(wittjosiah): Factor out?
|
|
36
37
|
const atomCounter = (registry: Registry.Registry, atom: Atom.Atom<any>) => {
|
|
@@ -83,18 +84,39 @@ describe('PluginManager', () => {
|
|
|
83
84
|
}),
|
|
84
85
|
);
|
|
85
86
|
|
|
87
|
+
it.effect('should add plugin when locator differs from meta.id', () =>
|
|
88
|
+
Effect.gen(function* () {
|
|
89
|
+
const Test = Plugin.make(Plugin.define(testMeta));
|
|
90
|
+
const testPlugin = Test();
|
|
91
|
+
|
|
92
|
+
const urlLocator = 'https://example.com/plugin.mjs';
|
|
93
|
+
const urlLoader = Effect.fn(function* (locator: string) {
|
|
94
|
+
if (locator === urlLocator) {
|
|
95
|
+
return testPlugin;
|
|
96
|
+
}
|
|
97
|
+
return yield* Effect.fail(new Error(`Unknown locator: ${locator}`));
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const manager = PluginManager.make({ pluginLoader: urlLoader });
|
|
101
|
+
const added = yield* manager.add(urlLocator);
|
|
102
|
+
assert.isTrue(added);
|
|
103
|
+
assert.deepStrictEqual(manager.getPlugins(), [testPlugin]);
|
|
104
|
+
assert.deepStrictEqual(manager.getEnabled(), [testMeta.id]);
|
|
105
|
+
}),
|
|
106
|
+
);
|
|
107
|
+
|
|
86
108
|
it.effect('should support factory pattern with options', () =>
|
|
87
109
|
Effect.gen(function* () {
|
|
88
110
|
type TestPluginOptions = { count: number };
|
|
89
111
|
const TestPluginFactory = Plugin.define<TestPluginOptions>(testMeta).pipe(
|
|
90
112
|
Plugin.addModule((options: TestPluginOptions) => ({
|
|
91
113
|
id: 'Hello',
|
|
92
|
-
activatesOn:
|
|
114
|
+
activatesOn: ActivationEvents.Startup,
|
|
93
115
|
activate: () => Effect.succeed(Capability.contributes(String, { string: `hello-${options.count}` })),
|
|
94
116
|
})),
|
|
95
117
|
Plugin.addModule({
|
|
96
118
|
id: 'World',
|
|
97
|
-
activatesOn:
|
|
119
|
+
activatesOn: ActivationEvents.Startup,
|
|
98
120
|
activate: () => Effect.succeed(Capability.contributes(String, { string: 'world' })),
|
|
99
121
|
}),
|
|
100
122
|
Plugin.make,
|
|
@@ -105,7 +127,7 @@ describe('PluginManager', () => {
|
|
|
105
127
|
|
|
106
128
|
const manager = PluginManager.make({ plugins: [plugin], core: [], pluginLoader });
|
|
107
129
|
yield* manager.enable(testMeta.id);
|
|
108
|
-
yield* manager.activate(
|
|
130
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
109
131
|
const strings = manager.capabilities.getAll(String);
|
|
110
132
|
assert.strictEqual(strings.length, 2);
|
|
111
133
|
assert.strictEqual(strings[0].string, 'hello-5');
|
|
@@ -118,7 +140,7 @@ describe('PluginManager', () => {
|
|
|
118
140
|
const Test = Plugin.define(testMeta).pipe(
|
|
119
141
|
Plugin.addModule({
|
|
120
142
|
id: 'Hello',
|
|
121
|
-
activatesOn:
|
|
143
|
+
activatesOn: ActivationEvents.Startup,
|
|
122
144
|
activate: () => Effect.succeed(Capability.contributes(String, { string: 'hello' })),
|
|
123
145
|
}),
|
|
124
146
|
Plugin.make,
|
|
@@ -140,7 +162,7 @@ describe('PluginManager', () => {
|
|
|
140
162
|
const Test = Plugin.define(testMeta).pipe(
|
|
141
163
|
Plugin.addModule({
|
|
142
164
|
id: 'Hello',
|
|
143
|
-
activatesOn:
|
|
165
|
+
activatesOn: ActivationEvents.Startup,
|
|
144
166
|
activate: () => Effect.succeed(Capability.contributes(String, { string: 'hello' })),
|
|
145
167
|
}),
|
|
146
168
|
Plugin.make,
|
|
@@ -154,9 +176,9 @@ describe('PluginManager', () => {
|
|
|
154
176
|
assert.deepStrictEqual(manager.getModules(), [testPlugin.modules[0]]);
|
|
155
177
|
assert.deepStrictEqual(manager.getActive(), []);
|
|
156
178
|
assert.deepStrictEqual(manager.getEventsFired(), []);
|
|
157
|
-
yield* manager.activate(
|
|
179
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
158
180
|
assert.deepStrictEqual(manager.getActive(), [testPlugin.modules[0].id]);
|
|
159
|
-
assert.deepStrictEqual(manager.getEventsFired(), [
|
|
181
|
+
assert.deepStrictEqual(manager.getEventsFired(), [ActivationEvents.Startup.id]);
|
|
160
182
|
}),
|
|
161
183
|
);
|
|
162
184
|
|
|
@@ -165,7 +187,7 @@ describe('PluginManager', () => {
|
|
|
165
187
|
const Test = Plugin.define(testMeta).pipe(
|
|
166
188
|
Plugin.addModule({
|
|
167
189
|
id: 'NoCapabilities',
|
|
168
|
-
activatesOn:
|
|
190
|
+
activatesOn: ActivationEvents.Startup,
|
|
169
191
|
activate: Effect.fnUntraced(function* () {}),
|
|
170
192
|
}),
|
|
171
193
|
Plugin.make,
|
|
@@ -175,7 +197,7 @@ describe('PluginManager', () => {
|
|
|
175
197
|
const manager = PluginManager.make({ plugins: [testPlugin], pluginLoader });
|
|
176
198
|
yield* manager.enable(Test.meta.id);
|
|
177
199
|
|
|
178
|
-
const result = yield* manager.activate(
|
|
200
|
+
const result = yield* manager.activate(ActivationEvents.Startup);
|
|
179
201
|
assert.isTrue(result);
|
|
180
202
|
assert.deepStrictEqual(manager.getActive(), [testPlugin.modules[0].id]);
|
|
181
203
|
assert.strictEqual(manager.capabilities.getAll(String).length, 0);
|
|
@@ -204,7 +226,7 @@ describe('PluginManager', () => {
|
|
|
204
226
|
|
|
205
227
|
it.effect('should catch and log defects (synchronous throws) in module activation', () =>
|
|
206
228
|
Effect.gen(function* () {
|
|
207
|
-
const DefectEvent = ActivationEvent.make('dxos.
|
|
229
|
+
const DefectEvent = ActivationEvent.make('org.dxos.test.defect');
|
|
208
230
|
const capturedErrors: LogEntry[] = [];
|
|
209
231
|
const removeProcessor = log.addProcessor((_config: LogConfig, entry: LogEntry) => {
|
|
210
232
|
if (entry.level === LogLevel.ERROR) {
|
|
@@ -238,7 +260,7 @@ describe('PluginManager', () => {
|
|
|
238
260
|
const defectLog = capturedErrors.find(
|
|
239
261
|
(entry) =>
|
|
240
262
|
entry.message?.includes('module failed to activate') &&
|
|
241
|
-
entry.context?.module === 'dxos.
|
|
263
|
+
entry.context?.module === 'org.dxos.plugin.test.module.DefectInEffectSync',
|
|
242
264
|
);
|
|
243
265
|
assert.isNotNull(defectLog, 'Expected error log for defect');
|
|
244
266
|
assert.strictEqual(defectLog?.context?.isDefect, true, 'Expected isDefect to be true for synchronous throw');
|
|
@@ -249,7 +271,7 @@ describe('PluginManager', () => {
|
|
|
249
271
|
|
|
250
272
|
it.effect('should catch and log defects when activate throws before returning Effect', () =>
|
|
251
273
|
Effect.gen(function* () {
|
|
252
|
-
const DefectEvent = ActivationEvent.make('dxos.
|
|
274
|
+
const DefectEvent = ActivationEvent.make('org.dxos.test.defect-immediate');
|
|
253
275
|
const capturedErrors: LogEntry[] = [];
|
|
254
276
|
const removeProcessor = log.addProcessor((_config: LogConfig, entry: LogEntry) => {
|
|
255
277
|
if (entry.level === LogLevel.ERROR) {
|
|
@@ -284,7 +306,7 @@ describe('PluginManager', () => {
|
|
|
284
306
|
const defectLog = capturedErrors.find(
|
|
285
307
|
(entry) =>
|
|
286
308
|
entry.message?.includes('module failed to activate') &&
|
|
287
|
-
entry.context?.module === 'dxos.
|
|
309
|
+
entry.context?.module === 'org.dxos.plugin.test.module.DefectImmediate',
|
|
288
310
|
);
|
|
289
311
|
assert.isNotNull(defectLog, 'Expected error log for immediate defect');
|
|
290
312
|
assert.strictEqual(
|
|
@@ -303,7 +325,7 @@ describe('PluginManager', () => {
|
|
|
303
325
|
Plugin.define(testMeta).pipe(
|
|
304
326
|
Plugin.addModule({
|
|
305
327
|
id: 'Hello',
|
|
306
|
-
activatesOn:
|
|
328
|
+
activatesOn: ActivationEvents.Startup,
|
|
307
329
|
activate: () => Effect.succeed(Capability.contributes(String, { string: 'hello' })),
|
|
308
330
|
}),
|
|
309
331
|
Plugin.addModule({
|
|
@@ -339,7 +361,7 @@ describe('PluginManager', () => {
|
|
|
339
361
|
);
|
|
340
362
|
|
|
341
363
|
yield* manager.add(testMeta.id);
|
|
342
|
-
yield* manager.activate(
|
|
364
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
343
365
|
yield* activating.await;
|
|
344
366
|
yield* activated.await;
|
|
345
367
|
|
|
@@ -374,7 +396,7 @@ describe('PluginManager', () => {
|
|
|
374
396
|
const Test = Plugin.define(testMeta).pipe(
|
|
375
397
|
Plugin.addModule({
|
|
376
398
|
id: 'Hello',
|
|
377
|
-
activatesOn:
|
|
399
|
+
activatesOn: ActivationEvents.Startup,
|
|
378
400
|
activate: () => {
|
|
379
401
|
count++;
|
|
380
402
|
return Effect.succeed(Capability.contributes(String, { string: 'hello' }));
|
|
@@ -389,19 +411,19 @@ describe('PluginManager', () => {
|
|
|
389
411
|
|
|
390
412
|
{
|
|
391
413
|
yield* manager.add(testMeta.id);
|
|
392
|
-
const result = yield* manager.activate(
|
|
414
|
+
const result = yield* manager.activate(ActivationEvents.Startup);
|
|
393
415
|
assert.isTrue(result);
|
|
394
416
|
assert.deepStrictEqual(manager.getActive(), [testPlugin.modules[0].id]);
|
|
395
417
|
assert.strictEqual(count, 1);
|
|
396
418
|
}
|
|
397
419
|
|
|
398
420
|
{
|
|
399
|
-
const result = yield* manager.activate(
|
|
421
|
+
const result = yield* manager.activate(ActivationEvents.Startup);
|
|
400
422
|
assert.isFalse(result);
|
|
401
423
|
}
|
|
402
424
|
|
|
403
425
|
{
|
|
404
|
-
const result = yield* manager.reset(
|
|
426
|
+
const result = yield* manager.reset(ActivationEvents.Startup);
|
|
405
427
|
assert.isTrue(result);
|
|
406
428
|
assert.strictEqual(count, 2);
|
|
407
429
|
}
|
|
@@ -419,7 +441,7 @@ describe('PluginManager', () => {
|
|
|
419
441
|
|
|
420
442
|
it.effect('should be able to fire custom activation events', () =>
|
|
421
443
|
Effect.gen(function* () {
|
|
422
|
-
const Plugin1 = Plugin.define({ id: 'dxos.
|
|
444
|
+
const Plugin1 = Plugin.define({ id: 'org.dxos.test.plugin-1', name: 'Plugin 1' }).pipe(
|
|
423
445
|
Plugin.addModule({
|
|
424
446
|
activatesOn: CountEvent,
|
|
425
447
|
id: 'Plugin1',
|
|
@@ -427,7 +449,7 @@ describe('PluginManager', () => {
|
|
|
427
449
|
}),
|
|
428
450
|
Plugin.make,
|
|
429
451
|
);
|
|
430
|
-
const Plugin2 = Plugin.define({ id: 'dxos.
|
|
452
|
+
const Plugin2 = Plugin.define({ id: 'org.dxos.test.plugin-2', name: 'Plugin 2' }).pipe(
|
|
431
453
|
Plugin.addModule({
|
|
432
454
|
activatesOn: CountEvent,
|
|
433
455
|
id: 'Plugin2',
|
|
@@ -435,7 +457,7 @@ describe('PluginManager', () => {
|
|
|
435
457
|
}),
|
|
436
458
|
Plugin.make,
|
|
437
459
|
);
|
|
438
|
-
const Plugin3 = Plugin.define({ id: 'dxos.
|
|
460
|
+
const Plugin3 = Plugin.define({ id: 'org.dxos.test.plugin-3', name: 'Plugin 3' }).pipe(
|
|
439
461
|
Plugin.addModule({
|
|
440
462
|
activatesOn: CountEvent,
|
|
441
463
|
id: 'Plugin3',
|
|
@@ -477,7 +499,7 @@ describe('PluginManager', () => {
|
|
|
477
499
|
Effect.gen(function* () {
|
|
478
500
|
const Test = Plugin.define(testMeta).pipe(
|
|
479
501
|
Plugin.addModule({
|
|
480
|
-
activatesOn: ActivationEvent.allOf(
|
|
502
|
+
activatesOn: ActivationEvent.allOf(ActivationEvents.Startup, CountEvent),
|
|
481
503
|
id: 'Hello',
|
|
482
504
|
activate: () => {
|
|
483
505
|
return Effect.succeed(Capability.contributes(String, { string: 'hello' }));
|
|
@@ -493,7 +515,7 @@ describe('PluginManager', () => {
|
|
|
493
515
|
assert.strictEqual(manager.capabilities.getAll(String).length, 0);
|
|
494
516
|
|
|
495
517
|
yield* manager.add(testMeta.id);
|
|
496
|
-
yield* manager.activate(
|
|
518
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
497
519
|
assert.deepStrictEqual(manager.getActive(), []);
|
|
498
520
|
assert.strictEqual(manager.capabilities.getAll(String).length, 0);
|
|
499
521
|
|
|
@@ -509,7 +531,7 @@ describe('PluginManager', () => {
|
|
|
509
531
|
const Test = Plugin.define(testMeta).pipe(
|
|
510
532
|
Plugin.addModule({
|
|
511
533
|
id: 'Hello',
|
|
512
|
-
activatesOn: ActivationEvent.oneOf(
|
|
534
|
+
activatesOn: ActivationEvent.oneOf(ActivationEvents.Startup, CountEvent),
|
|
513
535
|
activate: () => {
|
|
514
536
|
count++;
|
|
515
537
|
return Effect.succeed(Capability.contributes(String, { string: 'hello' }));
|
|
@@ -531,7 +553,7 @@ describe('PluginManager', () => {
|
|
|
531
553
|
assert.strictEqual(manager.capabilities.getAll(String).length, 1);
|
|
532
554
|
assert.strictEqual(count, 1);
|
|
533
555
|
|
|
534
|
-
yield* manager.activate(
|
|
556
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
535
557
|
assert.deepStrictEqual(manager.getActive(), [testPlugin.modules[0].id]);
|
|
536
558
|
assert.strictEqual(manager.capabilities.getAll(String).length, 1);
|
|
537
559
|
assert.strictEqual(count, 1);
|
|
@@ -546,10 +568,10 @@ describe('PluginManager', () => {
|
|
|
546
568
|
state.total = numbers.reduce((acc: number, n: { number: number }) => acc + n.number, 0);
|
|
547
569
|
};
|
|
548
570
|
|
|
549
|
-
const Count = Plugin.define({ id: 'dxos.
|
|
571
|
+
const Count = Plugin.define({ id: 'org.dxos.test.count', name: 'Count' }).pipe(
|
|
550
572
|
Plugin.addModule({
|
|
551
573
|
id: 'Count',
|
|
552
|
-
activatesOn:
|
|
574
|
+
activatesOn: ActivationEvents.Startup,
|
|
553
575
|
activatesBefore: [CountEvent],
|
|
554
576
|
activate: Effect.fnUntraced(function* () {
|
|
555
577
|
const capabilityManager = yield* Capability.Service;
|
|
@@ -586,7 +608,7 @@ describe('PluginManager', () => {
|
|
|
586
608
|
{
|
|
587
609
|
yield* manager.add(Test.meta.id);
|
|
588
610
|
yield* manager.add(Count.meta.id);
|
|
589
|
-
yield* manager.activate(
|
|
611
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
590
612
|
assert.deepStrictEqual(manager.getActive(), [
|
|
591
613
|
...testPlugin.modules.map((m) => m.id),
|
|
592
614
|
countPlugin.modules[0].id,
|
|
@@ -626,7 +648,7 @@ describe('PluginManager', () => {
|
|
|
626
648
|
|
|
627
649
|
it.effect('should be reactive', () =>
|
|
628
650
|
Effect.gen(function* () {
|
|
629
|
-
const Plugin1 = Plugin.define({ id: 'dxos.
|
|
651
|
+
const Plugin1 = Plugin.define({ id: 'org.dxos.test.plugin-1', name: 'Plugin 1' }).pipe(
|
|
630
652
|
Plugin.addModule({
|
|
631
653
|
activatesOn: CountEvent,
|
|
632
654
|
id: 'Plugin1',
|
|
@@ -634,7 +656,7 @@ describe('PluginManager', () => {
|
|
|
634
656
|
}),
|
|
635
657
|
Plugin.make,
|
|
636
658
|
);
|
|
637
|
-
const Plugin2 = Plugin.define({ id: 'dxos.
|
|
659
|
+
const Plugin2 = Plugin.define({ id: 'org.dxos.test.plugin-2', name: 'Plugin 2' }).pipe(
|
|
638
660
|
Plugin.addModule({
|
|
639
661
|
activatesOn: CountEvent,
|
|
640
662
|
id: 'Plugin2',
|
|
@@ -642,7 +664,7 @@ describe('PluginManager', () => {
|
|
|
642
664
|
}),
|
|
643
665
|
Plugin.make,
|
|
644
666
|
);
|
|
645
|
-
const Plugin3 = Plugin.define({ id: 'dxos.
|
|
667
|
+
const Plugin3 = Plugin.define({ id: 'org.dxos.test.plugin-3', name: 'Plugin 3' }).pipe(
|
|
646
668
|
Plugin.addModule({
|
|
647
669
|
activatesOn: CountEvent,
|
|
648
670
|
id: 'Plugin3',
|
|
@@ -752,8 +774,8 @@ describe('PluginManager', () => {
|
|
|
752
774
|
}
|
|
753
775
|
});
|
|
754
776
|
|
|
755
|
-
const SlowEvent = ActivationEvent.make('dxos.
|
|
756
|
-
const SlowPlugin = Plugin.define({ id: 'dxos.
|
|
777
|
+
const SlowEvent = ActivationEvent.make('org.dxos.test.slow');
|
|
778
|
+
const SlowPlugin = Plugin.define({ id: 'org.dxos.test.slow-plugin', name: 'Slow Plugin' }).pipe(
|
|
757
779
|
Plugin.addModule({
|
|
758
780
|
id: 'SlowModule',
|
|
759
781
|
activatesOn: SlowEvent,
|
|
@@ -795,11 +817,11 @@ describe('PluginManager', () => {
|
|
|
795
817
|
it.effect('should prevent concurrent loads of the same module via semaphore', () =>
|
|
796
818
|
Effect.gen(function* () {
|
|
797
819
|
// Two different events that both can trigger the same module.
|
|
798
|
-
const EventA = ActivationEvent.make('dxos.
|
|
799
|
-
const EventB = ActivationEvent.make('dxos.
|
|
820
|
+
const EventA = ActivationEvent.make('org.dxos.test.event-a');
|
|
821
|
+
const EventB = ActivationEvent.make('org.dxos.test.event-b');
|
|
800
822
|
|
|
801
823
|
let activateCallCount = 0;
|
|
802
|
-
const ConcurrentPlugin = Plugin.define({ id: 'dxos.
|
|
824
|
+
const ConcurrentPlugin = Plugin.define({ id: 'org.dxos.test.concurrent-plugin', name: 'Concurrent Plugin' }).pipe(
|
|
803
825
|
Plugin.addModule({
|
|
804
826
|
id: 'ConcurrentModule',
|
|
805
827
|
// Module activates on either event - this allows two different events to race.
|
|
@@ -842,4 +864,250 @@ describe('PluginManager', () => {
|
|
|
842
864
|
assert.strictEqual(strings[0].string, 'concurrent');
|
|
843
865
|
}),
|
|
844
866
|
);
|
|
867
|
+
|
|
868
|
+
it.effect('should deactivate all active modules on shutdown', () =>
|
|
869
|
+
Effect.gen(function* () {
|
|
870
|
+
const Plugin1 = Plugin.define({ id: 'org.dxos.test.plugin-1', name: 'Plugin 1' }).pipe(
|
|
871
|
+
Plugin.addModule({
|
|
872
|
+
activatesOn: ActivationEvents.Startup,
|
|
873
|
+
id: 'Plugin1',
|
|
874
|
+
activate: () => Effect.succeed(Capability.contributes(String, { string: 'hello' })),
|
|
875
|
+
}),
|
|
876
|
+
Plugin.make,
|
|
877
|
+
);
|
|
878
|
+
const Plugin2 = Plugin.define({ id: 'org.dxos.test.plugin-2', name: 'Plugin 2' }).pipe(
|
|
879
|
+
Plugin.addModule({
|
|
880
|
+
activatesOn: ActivationEvents.Startup,
|
|
881
|
+
id: 'Plugin2',
|
|
882
|
+
activate: () => Effect.succeed(Capability.contributes(Number, { number: 42 })),
|
|
883
|
+
}),
|
|
884
|
+
Plugin.make,
|
|
885
|
+
);
|
|
886
|
+
const plugin1 = Plugin1();
|
|
887
|
+
const plugin2 = Plugin2();
|
|
888
|
+
plugins = [plugin1, plugin2];
|
|
889
|
+
|
|
890
|
+
const manager = PluginManager.make({ pluginLoader });
|
|
891
|
+
yield* manager.add(Plugin1.meta.id);
|
|
892
|
+
yield* manager.add(Plugin2.meta.id);
|
|
893
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
894
|
+
assert.strictEqual(manager.getActive().length, 2);
|
|
895
|
+
assert.strictEqual(manager.capabilities.getAll(String).length, 1);
|
|
896
|
+
assert.strictEqual(manager.capabilities.getAll(Number).length, 1);
|
|
897
|
+
|
|
898
|
+
const result = yield* manager.shutdown();
|
|
899
|
+
assert.isTrue(result);
|
|
900
|
+
assert.deepStrictEqual(manager.getActive(), []);
|
|
901
|
+
assert.strictEqual(manager.capabilities.getAll(String).length, 0);
|
|
902
|
+
assert.strictEqual(manager.capabilities.getAll(Number).length, 0);
|
|
903
|
+
}),
|
|
904
|
+
);
|
|
905
|
+
|
|
906
|
+
it.effect('should run capability deactivate hooks during shutdown', () =>
|
|
907
|
+
Effect.gen(function* () {
|
|
908
|
+
let deactivated = false;
|
|
909
|
+
const Test = Plugin.define(testMeta).pipe(
|
|
910
|
+
Plugin.addModule({
|
|
911
|
+
id: 'WithDeactivate',
|
|
912
|
+
activatesOn: ActivationEvents.Startup,
|
|
913
|
+
activate: () =>
|
|
914
|
+
Effect.succeed(
|
|
915
|
+
Capability.contributes(String, { string: 'hello' }, () =>
|
|
916
|
+
Effect.sync(() => {
|
|
917
|
+
deactivated = true;
|
|
918
|
+
}),
|
|
919
|
+
),
|
|
920
|
+
),
|
|
921
|
+
}),
|
|
922
|
+
Plugin.make,
|
|
923
|
+
);
|
|
924
|
+
const testPlugin = Test();
|
|
925
|
+
plugins = [testPlugin];
|
|
926
|
+
|
|
927
|
+
const manager = PluginManager.make({ pluginLoader });
|
|
928
|
+
yield* manager.add(testMeta.id);
|
|
929
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
930
|
+
assert.isFalse(deactivated);
|
|
931
|
+
|
|
932
|
+
yield* manager.shutdown();
|
|
933
|
+
assert.isTrue(deactivated);
|
|
934
|
+
}),
|
|
935
|
+
);
|
|
936
|
+
|
|
937
|
+
it.effect('should deactivate modules in reverse activation order during shutdown', () =>
|
|
938
|
+
Effect.gen(function* () {
|
|
939
|
+
const deactivationOrder: string[] = [];
|
|
940
|
+
const Plugin1 = Plugin.define({ id: 'org.dxos.test.plugin-1', name: 'Plugin 1' }).pipe(
|
|
941
|
+
Plugin.addModule({
|
|
942
|
+
activatesOn: ActivationEvents.Startup,
|
|
943
|
+
id: 'First',
|
|
944
|
+
activate: () =>
|
|
945
|
+
Effect.succeed(
|
|
946
|
+
Capability.contributes(String, { string: 'first' }, () =>
|
|
947
|
+
Effect.sync(() => {
|
|
948
|
+
deactivationOrder.push('First');
|
|
949
|
+
}),
|
|
950
|
+
),
|
|
951
|
+
),
|
|
952
|
+
}),
|
|
953
|
+
Plugin.make,
|
|
954
|
+
);
|
|
955
|
+
const Plugin2 = Plugin.define({ id: 'org.dxos.test.plugin-2', name: 'Plugin 2' }).pipe(
|
|
956
|
+
Plugin.addModule({
|
|
957
|
+
activatesOn: ActivationEvents.Startup,
|
|
958
|
+
id: 'Second',
|
|
959
|
+
activate: () =>
|
|
960
|
+
Effect.succeed(
|
|
961
|
+
Capability.contributes(Number, { number: 2 }, () =>
|
|
962
|
+
Effect.sync(() => {
|
|
963
|
+
deactivationOrder.push('Second');
|
|
964
|
+
}),
|
|
965
|
+
),
|
|
966
|
+
),
|
|
967
|
+
}),
|
|
968
|
+
Plugin.make,
|
|
969
|
+
);
|
|
970
|
+
plugins = [Plugin1(), Plugin2()];
|
|
971
|
+
|
|
972
|
+
const manager = PluginManager.make({ pluginLoader });
|
|
973
|
+
yield* manager.add(Plugin1.meta.id);
|
|
974
|
+
yield* manager.add(Plugin2.meta.id);
|
|
975
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
976
|
+
|
|
977
|
+
yield* manager.shutdown();
|
|
978
|
+
assert.deepStrictEqual(deactivationOrder, ['Second', 'First']);
|
|
979
|
+
}),
|
|
980
|
+
);
|
|
981
|
+
|
|
982
|
+
it.effect('should clear lifecycle bookkeeping during shutdown', () =>
|
|
983
|
+
Effect.gen(function* () {
|
|
984
|
+
const Test = Plugin.define(testMeta).pipe(
|
|
985
|
+
Plugin.addModule({
|
|
986
|
+
id: 'Hello',
|
|
987
|
+
activatesOn: ActivationEvents.Startup,
|
|
988
|
+
activate: () => Effect.succeed(Capability.contributes(String, { string: 'hello' })),
|
|
989
|
+
}),
|
|
990
|
+
Plugin.make,
|
|
991
|
+
);
|
|
992
|
+
const testPlugin = Test();
|
|
993
|
+
plugins = [testPlugin];
|
|
994
|
+
|
|
995
|
+
const manager = PluginManager.make({ pluginLoader });
|
|
996
|
+
yield* manager.add(testMeta.id);
|
|
997
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
998
|
+
assert.isTrue(manager.getEventsFired().length > 0);
|
|
999
|
+
|
|
1000
|
+
yield* manager.shutdown();
|
|
1001
|
+
assert.deepStrictEqual(manager.getEventsFired(), []);
|
|
1002
|
+
assert.deepStrictEqual(manager.getPendingReset(), []);
|
|
1003
|
+
assert.deepStrictEqual(manager.getActive(), []);
|
|
1004
|
+
}),
|
|
1005
|
+
);
|
|
1006
|
+
|
|
1007
|
+
it.effect('should interrupt in-flight activation during shutdown', () =>
|
|
1008
|
+
Effect.gen(function* () {
|
|
1009
|
+
const activationStarted = yield* Effect.makeLatch(false);
|
|
1010
|
+
const allowActivationToComplete = yield* Effect.makeLatch(false);
|
|
1011
|
+
const Test = Plugin.define(testMeta).pipe(
|
|
1012
|
+
Plugin.addModule({
|
|
1013
|
+
id: 'Hello',
|
|
1014
|
+
activatesOn: ActivationEvents.Startup,
|
|
1015
|
+
activate: () =>
|
|
1016
|
+
Effect.gen(function* () {
|
|
1017
|
+
yield* activationStarted.open;
|
|
1018
|
+
yield* allowActivationToComplete.await;
|
|
1019
|
+
return Capability.contributes(String, { string: 'hello' });
|
|
1020
|
+
}),
|
|
1021
|
+
}),
|
|
1022
|
+
Plugin.make,
|
|
1023
|
+
);
|
|
1024
|
+
const testPlugin = Test();
|
|
1025
|
+
plugins = [testPlugin];
|
|
1026
|
+
|
|
1027
|
+
const manager = PluginManager.make({ pluginLoader });
|
|
1028
|
+
yield* manager.add(testMeta.id);
|
|
1029
|
+
|
|
1030
|
+
const activationFiber = yield* Effect.fork(manager.activate(ActivationEvents.Startup));
|
|
1031
|
+
yield* activationStarted.await;
|
|
1032
|
+
|
|
1033
|
+
const shutdownFiber = yield* Effect.fork(manager.shutdown());
|
|
1034
|
+
yield* allowActivationToComplete.open;
|
|
1035
|
+
|
|
1036
|
+
const shutdownResult = yield* Fiber.join(shutdownFiber);
|
|
1037
|
+
const activationExit = yield* Fiber.await(activationFiber);
|
|
1038
|
+
|
|
1039
|
+
assert.isTrue(shutdownResult);
|
|
1040
|
+
assert.isTrue(Exit.isFailure(activationExit));
|
|
1041
|
+
if (Exit.isFailure(activationExit)) {
|
|
1042
|
+
assert.isTrue(Cause.isInterruptedOnly(activationExit.cause));
|
|
1043
|
+
}
|
|
1044
|
+
assert.strictEqual(manager.capabilities.getAll(String).length, 0);
|
|
1045
|
+
assert.deepStrictEqual(manager.getActive(), []);
|
|
1046
|
+
assert.deepStrictEqual(manager.getEventsFired(), []);
|
|
1047
|
+
}),
|
|
1048
|
+
);
|
|
1049
|
+
|
|
1050
|
+
it.effect('should preserve plugins, core, enabled, and modules after shutdown', () =>
|
|
1051
|
+
Effect.gen(function* () {
|
|
1052
|
+
const Test = Plugin.define(testMeta).pipe(
|
|
1053
|
+
Plugin.addModule({
|
|
1054
|
+
id: 'Hello',
|
|
1055
|
+
activatesOn: ActivationEvents.Startup,
|
|
1056
|
+
activate: () => Effect.succeed(Capability.contributes(String, { string: 'hello' })),
|
|
1057
|
+
}),
|
|
1058
|
+
Plugin.make,
|
|
1059
|
+
);
|
|
1060
|
+
const testPlugin = Test();
|
|
1061
|
+
plugins = [testPlugin];
|
|
1062
|
+
|
|
1063
|
+
const manager = PluginManager.make({ pluginLoader });
|
|
1064
|
+
yield* manager.add(testMeta.id);
|
|
1065
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
1066
|
+
|
|
1067
|
+
const pluginsBefore = manager.getPlugins();
|
|
1068
|
+
const coreBefore = manager.getCore();
|
|
1069
|
+
const enabledBefore = manager.getEnabled();
|
|
1070
|
+
const modulesBefore = manager.getModules();
|
|
1071
|
+
|
|
1072
|
+
yield* manager.shutdown();
|
|
1073
|
+
|
|
1074
|
+
assert.deepStrictEqual(manager.getPlugins(), pluginsBefore);
|
|
1075
|
+
assert.deepStrictEqual(manager.getCore(), coreBefore);
|
|
1076
|
+
assert.deepStrictEqual(manager.getEnabled(), enabledBefore);
|
|
1077
|
+
assert.deepStrictEqual(manager.getModules(), modulesBefore);
|
|
1078
|
+
}),
|
|
1079
|
+
);
|
|
1080
|
+
|
|
1081
|
+
it.effect('should allow re-activation after shutdown', () =>
|
|
1082
|
+
Effect.gen(function* () {
|
|
1083
|
+
let activateCount = 0;
|
|
1084
|
+
const Test = Plugin.define(testMeta).pipe(
|
|
1085
|
+
Plugin.addModule({
|
|
1086
|
+
id: 'Hello',
|
|
1087
|
+
activatesOn: ActivationEvents.Startup,
|
|
1088
|
+
activate: () => {
|
|
1089
|
+
activateCount++;
|
|
1090
|
+
return Effect.succeed(Capability.contributes(String, { string: 'hello' }));
|
|
1091
|
+
},
|
|
1092
|
+
}),
|
|
1093
|
+
Plugin.make,
|
|
1094
|
+
);
|
|
1095
|
+
const testPlugin = Test();
|
|
1096
|
+
plugins = [testPlugin];
|
|
1097
|
+
|
|
1098
|
+
const manager = PluginManager.make({ pluginLoader });
|
|
1099
|
+
yield* manager.add(testMeta.id);
|
|
1100
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
1101
|
+
assert.strictEqual(activateCount, 1);
|
|
1102
|
+
assert.deepStrictEqual(manager.getActive(), [testPlugin.modules[0].id]);
|
|
1103
|
+
|
|
1104
|
+
yield* manager.shutdown();
|
|
1105
|
+
assert.deepStrictEqual(manager.getActive(), []);
|
|
1106
|
+
|
|
1107
|
+
yield* manager.activate(ActivationEvents.Startup);
|
|
1108
|
+
assert.strictEqual(activateCount, 2);
|
|
1109
|
+
assert.deepStrictEqual(manager.getActive(), [testPlugin.modules[0].id]);
|
|
1110
|
+
assert.strictEqual(manager.capabilities.getAll(String).length, 1);
|
|
1111
|
+
}),
|
|
1112
|
+
);
|
|
845
1113
|
});
|