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