@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.
Files changed (421) hide show
  1. package/.storybook/main.mts +1 -3
  2. package/dist/lib/browser/{capability-7PCNSWBT.mjs → capability-4NSF2SOO.mjs} +16 -11
  3. package/dist/lib/browser/capability-4NSF2SOO.mjs.map +7 -0
  4. package/dist/lib/browser/capability-EB3UKSKA.mjs +35 -0
  5. package/dist/lib/browser/capability-EB3UKSKA.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-FMZN33N4.mjs → chunk-27FZETIA.mjs} +324 -181
  7. package/dist/lib/browser/chunk-27FZETIA.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-CV7I2AAB.mjs +80 -0
  9. package/dist/lib/browser/chunk-CV7I2AAB.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-6Y7PZV72.mjs → chunk-FL2XTEJH.mjs} +3 -4
  11. package/dist/lib/browser/chunk-FL2XTEJH.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-H7OMDDGW.mjs +42 -0
  13. package/dist/lib/browser/chunk-H7OMDDGW.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-HDQXX5DC.mjs +157 -0
  15. package/dist/lib/browser/chunk-HDQXX5DC.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-I34GF4NG.mjs +34 -0
  17. package/dist/lib/browser/chunk-I34GF4NG.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-KNBRTZVK.mjs +892 -0
  19. package/dist/lib/browser/chunk-KNBRTZVK.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-7IQHKD4U.mjs → chunk-NO7R7QHA.mjs} +4 -7
  21. package/dist/lib/browser/chunk-NO7R7QHA.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-TCLLRCS3.mjs → chunk-P2E7VMRF.mjs} +10 -7
  23. package/dist/lib/browser/chunk-P2E7VMRF.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-PKQT6C53.mjs → chunk-QSXYHXCE.mjs} +3 -2
  25. package/dist/lib/browser/chunk-QSXYHXCE.mjs.map +7 -0
  26. package/dist/lib/browser/chunk-RFSO3JRG.mjs +1 -0
  27. package/dist/lib/browser/chunk-TGX63LTL.mjs +8 -0
  28. package/dist/lib/browser/{chunk-FHQTHCX7.mjs.map → chunk-TGX63LTL.mjs.map} +1 -1
  29. package/dist/lib/browser/cli/index.mjs +90 -0
  30. package/dist/lib/browser/cli/index.mjs.map +7 -0
  31. package/dist/lib/browser/common/activation-events.mjs +24 -0
  32. package/dist/lib/browser/common/capabilities.mjs +46 -0
  33. package/dist/lib/browser/core/activation-event.mjs +1 -1
  34. package/dist/lib/browser/core/capability.mjs +1 -1
  35. package/dist/lib/browser/core/plugin-manager.mjs +4 -4
  36. package/dist/lib/browser/core/plugin.mjs +6 -4
  37. package/dist/lib/browser/core/url-loader.mjs +12 -0
  38. package/dist/lib/browser/index.mjs +40 -131
  39. package/dist/lib/browser/index.mjs.map +4 -4
  40. package/dist/lib/browser/invoker-capability-P7KPBTP3.mjs +43 -0
  41. package/dist/lib/browser/invoker-capability-P7KPBTP3.mjs.map +7 -0
  42. package/dist/lib/browser/meta.json +1 -1
  43. package/dist/lib/browser/testing/index.mjs +56 -34
  44. package/dist/lib/browser/testing/index.mjs.map +3 -3
  45. package/dist/lib/browser/{react → ui}/index.mjs +19 -21
  46. package/dist/lib/browser/ui/index.mjs.map +7 -0
  47. package/dist/lib/node-esm/{capability-CFLQ2QQU.mjs → capability-CB3MNEI3.mjs} +16 -11
  48. package/dist/lib/node-esm/capability-CB3MNEI3.mjs.map +7 -0
  49. package/dist/lib/node-esm/capability-CMROGK7R.mjs +36 -0
  50. package/dist/lib/node-esm/capability-CMROGK7R.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-STMXUEPO.mjs → chunk-37NG7SIN.mjs} +3 -4
  52. package/dist/lib/node-esm/chunk-37NG7SIN.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-7JPKC7OM.mjs +893 -0
  54. package/dist/lib/node-esm/chunk-7JPKC7OM.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-7PPVTBYR.mjs +81 -0
  56. package/dist/lib/node-esm/chunk-7PPVTBYR.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-BQ56U4QX.mjs +43 -0
  58. package/dist/lib/node-esm/chunk-BQ56U4QX.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-GT6OKM5I.mjs → chunk-CG6UBBZZ.mjs} +10 -7
  60. package/dist/lib/node-esm/chunk-CG6UBBZZ.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs +2 -0
  62. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-663A54LQ.mjs → chunk-EXYTXQ47.mjs} +4 -7
  64. package/dist/lib/node-esm/chunk-EXYTXQ47.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs → chunk-FKE4Z3D6.mjs} +2 -2
  66. package/dist/lib/node-esm/{chunk-UEWJDI2L.mjs.map → chunk-FKE4Z3D6.mjs.map} +1 -1
  67. package/dist/lib/node-esm/chunk-OXXXRCQX.mjs +158 -0
  68. package/dist/lib/node-esm/chunk-OXXXRCQX.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs +35 -0
  70. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-XYQTBFPA.mjs → chunk-YH44RHP6.mjs} +324 -181
  72. package/dist/lib/node-esm/chunk-YH44RHP6.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-7OWSHPYK.mjs → chunk-ZZ7CKK6W.mjs} +3 -2
  74. package/dist/lib/node-esm/chunk-ZZ7CKK6W.mjs.map +7 -0
  75. package/dist/lib/node-esm/cli/index.mjs +91 -0
  76. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  77. package/dist/lib/node-esm/common/activation-events.mjs +25 -0
  78. package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
  79. package/dist/lib/node-esm/common/capabilities.mjs +47 -0
  80. package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
  81. package/dist/lib/node-esm/core/activation-event.mjs +1 -1
  82. package/dist/lib/node-esm/core/capability.mjs +1 -1
  83. package/dist/lib/node-esm/core/plugin-manager.mjs +4 -4
  84. package/dist/lib/node-esm/core/plugin.mjs +6 -4
  85. package/dist/lib/node-esm/core/url-loader.mjs +13 -0
  86. package/dist/lib/node-esm/core/url-loader.mjs.map +7 -0
  87. package/dist/lib/node-esm/index.mjs +40 -131
  88. package/dist/lib/node-esm/index.mjs.map +4 -4
  89. package/dist/lib/node-esm/invoker-capability-3C5H46ZY.mjs +44 -0
  90. package/dist/lib/node-esm/invoker-capability-3C5H46ZY.mjs.map +7 -0
  91. package/dist/lib/node-esm/meta.json +1 -1
  92. package/dist/lib/node-esm/testing/index.mjs +56 -34
  93. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  94. package/dist/lib/node-esm/{react → ui}/index.mjs +19 -21
  95. package/dist/lib/node-esm/ui/index.mjs.map +7 -0
  96. package/dist/plugin/node-esm/index.mjs +384 -0
  97. package/dist/plugin/node-esm/index.mjs.map +7 -0
  98. package/dist/plugin/node-esm/meta.json +1 -0
  99. package/dist/types/src/{cli.d.ts → cli/cli.d.ts} +2 -2
  100. package/dist/types/src/cli/cli.d.ts.map +1 -0
  101. package/dist/types/src/cli/index.d.ts +2 -0
  102. package/dist/types/src/cli/index.d.ts.map +1 -0
  103. package/dist/types/src/common/activation-events.d.ts +27 -0
  104. package/dist/types/src/common/activation-events.d.ts.map +1 -0
  105. package/dist/types/src/common/capabilities.d.ts +110 -0
  106. package/dist/types/src/common/capabilities.d.ts.map +1 -0
  107. package/dist/types/src/common/index.d.ts +4 -9
  108. package/dist/types/src/common/index.d.ts.map +1 -1
  109. package/dist/types/src/common/operations.d.ts +8 -369
  110. package/dist/types/src/common/operations.d.ts.map +1 -1
  111. package/dist/types/src/common/translations.d.ts +0 -9
  112. package/dist/types/src/common/translations.d.ts.map +1 -1
  113. package/dist/types/src/core/activation-event.d.ts +1 -1
  114. package/dist/types/src/core/activation-event.d.ts.map +1 -1
  115. package/dist/types/src/core/capability.d.ts +7 -7
  116. package/dist/types/src/core/capability.d.ts.map +1 -1
  117. package/dist/types/src/core/index.d.ts +1 -0
  118. package/dist/types/src/core/index.d.ts.map +1 -1
  119. package/dist/types/src/core/plugin-manager.d.ts +9 -2
  120. package/dist/types/src/core/plugin-manager.d.ts.map +1 -1
  121. package/dist/types/src/core/plugin.d.ts +6 -1
  122. package/dist/types/src/core/plugin.d.ts.map +1 -1
  123. package/dist/types/src/core/url-loader.d.ts +25 -0
  124. package/dist/types/src/core/url-loader.d.ts.map +1 -0
  125. package/dist/types/src/core/url-loader.test.d.ts +2 -0
  126. package/dist/types/src/core/url-loader.test.d.ts.map +1 -0
  127. package/dist/types/src/index.d.ts +1 -3
  128. package/dist/types/src/index.d.ts.map +1 -1
  129. package/dist/types/src/plugin-operation/history/capability.d.ts +1 -1
  130. package/dist/types/src/plugin-operation/history/errors.d.ts +30 -3
  131. package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -1
  132. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +11 -3
  133. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -1
  134. package/dist/types/src/plugin-operation/invoker-capability.d.ts +1 -1
  135. package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -1
  136. package/dist/types/src/plugin-operation/testing.d.ts +26 -77
  137. package/dist/types/src/plugin-operation/testing.d.ts.map +1 -1
  138. package/dist/types/src/plugin-runtime/capability.d.ts +2 -2
  139. package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -1
  140. package/dist/types/src/testing/withPluginManager.d.ts +1 -1
  141. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  142. package/dist/types/src/{react → ui/components/App}/App.d.ts +3 -2
  143. package/dist/types/src/ui/components/App/App.d.ts.map +1 -0
  144. package/dist/types/src/{react/Surface.stories.d.ts → ui/components/App/App.stories.d.ts} +7 -2
  145. package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -0
  146. package/dist/types/src/ui/components/App/index.d.ts +2 -0
  147. package/dist/types/src/ui/components/App/index.d.ts.map +1 -0
  148. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -0
  149. package/dist/types/src/{react → ui/components/PluginManager}/PluginManagerProvider.d.ts +1 -1
  150. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts.map +1 -0
  151. package/dist/types/src/ui/components/PluginManager/index.d.ts +2 -0
  152. package/dist/types/src/ui/components/PluginManager/index.d.ts.map +1 -0
  153. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +12 -0
  154. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -0
  155. package/dist/types/src/{react/App.stories.d.ts → ui/components/Surface/SurfaceComponent.stories.d.ts} +1 -1
  156. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -0
  157. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -0
  158. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts +48 -0
  159. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts.map +1 -0
  160. package/dist/types/src/ui/components/Surface/context.d.ts +5 -0
  161. package/dist/types/src/ui/components/Surface/context.d.ts.map +1 -0
  162. package/dist/types/src/ui/components/Surface/index.d.ts +26 -0
  163. package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -0
  164. package/dist/types/src/{common/surface.d.ts → ui/components/Surface/types.d.ts} +20 -18
  165. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -0
  166. package/dist/types/src/ui/components/index.d.ts +4 -0
  167. package/dist/types/src/ui/components/index.d.ts.map +1 -0
  168. package/dist/types/src/ui/hooks/index.d.ts +6 -0
  169. package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
  170. package/dist/types/src/{react → ui/hooks}/useApp.d.ts +26 -9
  171. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
  172. package/dist/types/src/ui/hooks/useApp.test.d.ts +2 -0
  173. package/dist/types/src/ui/hooks/useApp.test.d.ts.map +1 -0
  174. package/dist/types/src/{react → ui/hooks}/useCapabilities.d.ts +6 -1
  175. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
  176. package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
  177. package/dist/types/src/{react/common.d.ts → ui/hooks/useSettingsState.d.ts} +1 -5
  178. package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
  179. package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
  180. package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
  181. package/dist/types/src/ui/index.d.ts +3 -0
  182. package/dist/types/src/ui/index.d.ts.map +1 -0
  183. package/dist/types/src/vite-plugin/composer-plugin.d.ts +18 -0
  184. package/dist/types/src/vite-plugin/composer-plugin.d.ts.map +1 -0
  185. package/dist/types/src/vite-plugin/import-map-plugin.d.ts +16 -0
  186. package/dist/types/src/vite-plugin/import-map-plugin.d.ts.map +1 -0
  187. package/dist/types/src/vite-plugin/index.d.ts +3 -0
  188. package/dist/types/src/vite-plugin/index.d.ts.map +1 -0
  189. package/dist/types/src/vite-plugin/packages.d.ts +7 -0
  190. package/dist/types/src/vite-plugin/packages.d.ts.map +1 -0
  191. package/dist/types/tsconfig.tsbuildinfo +1 -1
  192. package/moon.yml +20 -6
  193. package/package.json +91 -64
  194. package/src/{cli.ts → cli/cli.ts} +10 -10
  195. package/src/{playground/debug → cli}/index.ts +1 -1
  196. package/src/common/activation-events.ts +44 -0
  197. package/src/common/capabilities.ts +172 -0
  198. package/src/common/index.ts +4 -9
  199. package/src/common/operations.ts +6 -382
  200. package/src/common/translations.ts +0 -12
  201. package/src/context.ts +1 -1
  202. package/src/core/activation-event.ts +5 -2
  203. package/src/core/capability-manager.ts +1 -1
  204. package/src/core/capability.ts +11 -10
  205. package/src/core/index.ts +1 -0
  206. package/src/core/plugin-manager.test.ts +313 -44
  207. package/src/core/plugin-manager.ts +344 -157
  208. package/src/core/plugin.ts +10 -2
  209. package/src/core/url-loader.test.ts +79 -0
  210. package/src/core/url-loader.ts +148 -0
  211. package/src/index.ts +1 -3
  212. package/src/plugin-operation/OperationPlugin.ts +5 -5
  213. package/src/plugin-operation/history/capability.ts +5 -5
  214. package/src/plugin-operation/history/errors.ts +2 -6
  215. package/src/plugin-operation/history/history-tracker.test.ts +36 -42
  216. package/src/plugin-operation/history/undo-mapping.ts +6 -3
  217. package/src/plugin-operation/history/undo-registry.test.ts +3 -3
  218. package/src/plugin-operation/invoker-capability.ts +21 -7
  219. package/src/plugin-operation/meta.ts +1 -1
  220. package/src/plugin-operation/testing.ts +25 -45
  221. package/src/plugin-runtime/RuntimePlugin.ts +4 -4
  222. package/src/plugin-runtime/capability.ts +5 -5
  223. package/src/plugin-runtime/meta.ts +1 -1
  224. package/src/testing/service.ts +6 -6
  225. package/src/testing/withPluginManager.stories.tsx +6 -6
  226. package/src/testing/withPluginManager.tsx +46 -19
  227. package/src/ui/components/App/App.stories.tsx +92 -0
  228. package/src/{react → ui/components/App}/App.tsx +9 -11
  229. package/src/{playground/layout → ui/components/App}/index.ts +1 -1
  230. package/src/{react → ui/components/PluginManager}/PluginManagerContext.stories.tsx +13 -14
  231. package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +1 -1
  232. package/src/ui/components/PluginManager/index.ts +5 -0
  233. package/src/{react/Surface.stories.tsx → ui/components/Surface/SurfaceComponent.stories.tsx} +28 -24
  234. package/src/{react/Surface.tsx → ui/components/Surface/SurfaceComponent.tsx} +48 -58
  235. package/src/{react → ui/components/Surface}/SurfaceInfo.tsx +2 -2
  236. package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
  237. package/src/ui/components/Surface/context.ts +12 -0
  238. package/src/ui/components/Surface/index.ts +35 -0
  239. package/src/{common/surface.ts → ui/components/Surface/types.ts} +22 -25
  240. package/src/ui/components/index.ts +7 -0
  241. package/src/ui/hooks/index.ts +9 -0
  242. package/src/ui/hooks/useApp.test.tsx +159 -0
  243. package/src/{react → ui/hooks}/useApp.tsx +110 -30
  244. package/src/{react → ui/hooks}/useCapabilities.ts +9 -5
  245. package/src/{react/common.ts → ui/hooks/useSettingsState.ts} +0 -11
  246. package/src/ui/hooks/useSurface.ts +13 -0
  247. package/src/ui/index.ts +6 -0
  248. package/src/vite-plugin/composer-plugin.ts +128 -0
  249. package/src/vite-plugin/import-map-plugin.ts +315 -0
  250. package/src/vite-plugin/index.ts +6 -0
  251. package/src/vite-plugin/packages.ts +29 -0
  252. package/tsconfig.json +4 -28
  253. package/tsconfig.node.json +2 -4
  254. package/typedoc.json +2 -4
  255. package/vitest.config.ts +1 -1
  256. package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs +0 -149
  257. package/dist/lib/browser/app-graph-builder-M2VPYQC6.mjs.map +0 -7
  258. package/dist/lib/browser/capability-7PCNSWBT.mjs.map +0 -7
  259. package/dist/lib/browser/capability-KP3PFEXD.mjs +0 -31
  260. package/dist/lib/browser/capability-KP3PFEXD.mjs.map +0 -7
  261. package/dist/lib/browser/chunk-6Y7PZV72.mjs.map +0 -7
  262. package/dist/lib/browser/chunk-7IQHKD4U.mjs.map +0 -7
  263. package/dist/lib/browser/chunk-BLQJSGL3.mjs +0 -732
  264. package/dist/lib/browser/chunk-BLQJSGL3.mjs.map +0 -7
  265. package/dist/lib/browser/chunk-FHQTHCX7.mjs +0 -8
  266. package/dist/lib/browser/chunk-FMZN33N4.mjs.map +0 -7
  267. package/dist/lib/browser/chunk-H4WPA7U7.mjs +0 -77
  268. package/dist/lib/browser/chunk-H4WPA7U7.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-PKQT6C53.mjs.map +0 -7
  270. package/dist/lib/browser/chunk-TCLLRCS3.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-XYNO72GQ.mjs +0 -746
  272. package/dist/lib/browser/chunk-XYNO72GQ.mjs.map +0 -7
  273. package/dist/lib/browser/common/index.mjs +0 -38
  274. package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs +0 -32
  275. package/dist/lib/browser/invoker-capability-SZRSTHEH.mjs.map +0 -7
  276. package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs +0 -64
  277. package/dist/lib/browser/operation-resolver-6MP2MYOY.mjs.map +0 -7
  278. package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs +0 -150
  279. package/dist/lib/node-esm/app-graph-builder-LROHGJEM.mjs.map +0 -7
  280. package/dist/lib/node-esm/capability-CFLQ2QQU.mjs.map +0 -7
  281. package/dist/lib/node-esm/capability-RCUNM2M7.mjs +0 -32
  282. package/dist/lib/node-esm/capability-RCUNM2M7.mjs.map +0 -7
  283. package/dist/lib/node-esm/chunk-663A54LQ.mjs.map +0 -7
  284. package/dist/lib/node-esm/chunk-6WXBT3EC.mjs +0 -747
  285. package/dist/lib/node-esm/chunk-6WXBT3EC.mjs.map +0 -7
  286. package/dist/lib/node-esm/chunk-7OWSHPYK.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-GQEBIGKD.mjs +0 -733
  288. package/dist/lib/node-esm/chunk-GQEBIGKD.mjs.map +0 -7
  289. package/dist/lib/node-esm/chunk-GT6OKM5I.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-STMXUEPO.mjs.map +0 -7
  291. package/dist/lib/node-esm/chunk-XR6NMKEP.mjs +0 -78
  292. package/dist/lib/node-esm/chunk-XR6NMKEP.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-XYQTBFPA.mjs.map +0 -7
  294. package/dist/lib/node-esm/common/index.mjs +0 -39
  295. package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs +0 -33
  296. package/dist/lib/node-esm/invoker-capability-PNMA5JOS.mjs.map +0 -7
  297. package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs +0 -65
  298. package/dist/lib/node-esm/operation-resolver-7YWDMTNU.mjs.map +0 -7
  299. package/dist/types/src/cli.d.ts.map +0 -1
  300. package/dist/types/src/common/activation-event.d.ts +0 -66
  301. package/dist/types/src/common/activation-event.d.ts.map +0 -1
  302. package/dist/types/src/common/capability.d.ts +0 -265
  303. package/dist/types/src/common/capability.d.ts.map +0 -1
  304. package/dist/types/src/common/collaboration.d.ts +0 -26
  305. package/dist/types/src/common/collaboration.d.ts.map +0 -1
  306. package/dist/types/src/common/file.d.ts +0 -14
  307. package/dist/types/src/common/file.d.ts.map +0 -1
  308. package/dist/types/src/common/graph.d.ts +0 -21
  309. package/dist/types/src/common/graph.d.ts.map +0 -1
  310. package/dist/types/src/common/plugin.d.ts +0 -201
  311. package/dist/types/src/common/plugin.d.ts.map +0 -1
  312. package/dist/types/src/common/surface.d.ts.map +0 -1
  313. package/dist/types/src/playground/debug/Debug.d.ts +0 -8
  314. package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
  315. package/dist/types/src/playground/debug/index.d.ts +0 -2
  316. package/dist/types/src/playground/debug/index.d.ts.map +0 -1
  317. package/dist/types/src/playground/debug/plugin.d.ts +0 -3
  318. package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
  319. package/dist/types/src/playground/generator/Main.d.ts +0 -8
  320. package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
  321. package/dist/types/src/playground/generator/Toolbar.d.ts +0 -8
  322. package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
  323. package/dist/types/src/playground/generator/generator.d.ts +0 -19
  324. package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
  325. package/dist/types/src/playground/generator/index.d.ts +0 -3
  326. package/dist/types/src/playground/generator/index.d.ts.map +0 -1
  327. package/dist/types/src/playground/generator/plugin.d.ts +0 -3
  328. package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
  329. package/dist/types/src/playground/layout/Layout.d.ts +0 -10
  330. package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
  331. package/dist/types/src/playground/layout/index.d.ts +0 -2
  332. package/dist/types/src/playground/layout/index.d.ts.map +0 -1
  333. package/dist/types/src/playground/layout/plugin.d.ts +0 -3
  334. package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
  335. package/dist/types/src/playground/logger/Toolbar.d.ts +0 -8
  336. package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
  337. package/dist/types/src/playground/logger/index.d.ts +0 -2
  338. package/dist/types/src/playground/logger/index.d.ts.map +0 -1
  339. package/dist/types/src/playground/logger/plugin.d.ts +0 -3
  340. package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
  341. package/dist/types/src/playground/logger/schema.d.ts +0 -27
  342. package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
  343. package/dist/types/src/playground/playground.stories.d.ts +0 -11
  344. package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
  345. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -3
  346. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  347. package/dist/types/src/plugin-settings/actions.d.ts +0 -61
  348. package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
  349. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -6
  350. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
  351. package/dist/types/src/plugin-settings/index.d.ts +0 -3
  352. package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
  353. package/dist/types/src/plugin-settings/meta.d.ts +0 -3
  354. package/dist/types/src/plugin-settings/meta.d.ts.map +0 -1
  355. package/dist/types/src/plugin-settings/operation-resolver.d.ts +0 -6
  356. package/dist/types/src/plugin-settings/operation-resolver.d.ts.map +0 -1
  357. package/dist/types/src/plugin-settings/translations.d.ts +0 -11
  358. package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
  359. package/dist/types/src/react/App.d.ts.map +0 -1
  360. package/dist/types/src/react/App.stories.d.ts.map +0 -1
  361. package/dist/types/src/react/DefaultFallback.d.ts +0 -8
  362. package/dist/types/src/react/DefaultFallback.d.ts.map +0 -1
  363. package/dist/types/src/react/ErrorBoundary.d.ts +0 -30
  364. package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
  365. package/dist/types/src/react/PluginManagerContext.stories.d.ts.map +0 -1
  366. package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
  367. package/dist/types/src/react/Surface.d.ts +0 -14
  368. package/dist/types/src/react/Surface.d.ts.map +0 -1
  369. package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
  370. package/dist/types/src/react/SurfaceInfo.d.ts.map +0 -1
  371. package/dist/types/src/react/common.d.ts.map +0 -1
  372. package/dist/types/src/react/index.d.ts +0 -9
  373. package/dist/types/src/react/index.d.ts.map +0 -1
  374. package/dist/types/src/react/types.d.ts +0 -12
  375. package/dist/types/src/react/types.d.ts.map +0 -1
  376. package/dist/types/src/react/useApp.d.ts.map +0 -1
  377. package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
  378. package/dist/types/src/react/useLoading.d.ts.map +0 -1
  379. package/dist/types/src/react/useOperationResolver.d.ts +0 -19
  380. package/dist/types/src/react/useOperationResolver.d.ts.map +0 -1
  381. package/src/common/activation-event.ts +0 -99
  382. package/src/common/capability.ts +0 -343
  383. package/src/common/collaboration.ts +0 -31
  384. package/src/common/file.ts +0 -22
  385. package/src/common/graph.ts +0 -30
  386. package/src/common/plugin.ts +0 -364
  387. package/src/playground/debug/Debug.tsx +0 -49
  388. package/src/playground/debug/plugin.ts +0 -16
  389. package/src/playground/generator/Main.tsx +0 -80
  390. package/src/playground/generator/Toolbar.tsx +0 -57
  391. package/src/playground/generator/generator.ts +0 -48
  392. package/src/playground/generator/index.ts +0 -6
  393. package/src/playground/generator/plugin.ts +0 -21
  394. package/src/playground/layout/Layout.tsx +0 -37
  395. package/src/playground/layout/plugin.ts +0 -18
  396. package/src/playground/logger/Toolbar.tsx +0 -33
  397. package/src/playground/logger/index.ts +0 -5
  398. package/src/playground/logger/plugin.ts +0 -42
  399. package/src/playground/logger/schema.ts +0 -22
  400. package/src/playground/playground.stories.tsx +0 -54
  401. package/src/plugin-settings/SettingsPlugin.ts +0 -19
  402. package/src/plugin-settings/actions.ts +0 -64
  403. package/src/plugin-settings/app-graph-builder.ts +0 -140
  404. package/src/plugin-settings/index.ts +0 -6
  405. package/src/plugin-settings/meta.ts +0 -10
  406. package/src/plugin-settings/operation-resolver.ts +0 -55
  407. package/src/plugin-settings/translations.ts +0 -19
  408. package/src/react/App.stories.tsx +0 -63
  409. package/src/react/DefaultFallback.tsx +0 -26
  410. package/src/react/ErrorBoundary.tsx +0 -56
  411. package/src/react/index.ts +0 -14
  412. package/src/react/types.ts +0 -27
  413. package/src/react/useOperationResolver.ts +0 -40
  414. /package/dist/lib/{node-esm/react/index.mjs.map → browser/chunk-RFSO3JRG.mjs.map} +0 -0
  415. /package/dist/lib/{node-esm/common/index.mjs.map → browser/common/activation-events.mjs.map} +0 -0
  416. /package/dist/lib/browser/{react/index.mjs.map → common/capabilities.mjs.map} +0 -0
  417. /package/dist/lib/browser/{common/index.mjs.map → core/url-loader.mjs.map} +0 -0
  418. /package/dist/types/src/{react → ui/components/PluginManager}/PluginManagerContext.stories.d.ts +0 -0
  419. /package/dist/types/src/{react → ui/components/Surface}/SurfaceInfo.d.ts +0 -0
  420. /package/dist/types/src/{react → ui/hooks}/useLoading.d.ts +0 -0
  421. /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 * as Common from '../common';
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.org/test/string');
27
- const Number = Capability.make<{ number: number }>('dxos.org/test/number');
28
- const Total = Capability.make<{ total: number }>('dxos.org/test/total');
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.org/test/count');
31
- const FailEvent = ActivationEvent.make('dxos.org/test/fail');
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.org/plugin/test', name: 'Test' };
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: Common.ActivationEvent.Startup,
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: Common.ActivationEvent.Startup,
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(Common.ActivationEvent.Startup);
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: Common.ActivationEvent.Startup,
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: Common.ActivationEvent.Startup,
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(Common.ActivationEvent.Startup);
180
+ yield* manager.activate(ActivationEvents.Startup);
158
181
  assert.deepStrictEqual(manager.getActive(), [testPlugin.modules[0].id]);
159
- assert.deepStrictEqual(manager.getEventsFired(), [Common.ActivationEvent.Startup.id]);
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: Common.ActivationEvent.Startup,
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(Common.ActivationEvent.Startup);
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.org/test/defect');
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.org/plugin/test/module/DefectInEffectSync',
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.org/test/defect-immediate');
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.org/plugin/test/module/DefectImmediate',
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: Common.ActivationEvent.Startup,
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(Common.ActivationEvent.Startup);
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: Common.ActivationEvent.Startup,
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(Common.ActivationEvent.Startup);
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(Common.ActivationEvent.Startup);
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(Common.ActivationEvent.Startup);
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.org/test/plugin-1', name: 'Plugin 1' }).pipe(
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.org/test/plugin-2', name: 'Plugin 2' }).pipe(
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.org/test/plugin-3', name: 'Plugin 3' }).pipe(
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(Common.ActivationEvent.Startup, CountEvent),
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(Common.ActivationEvent.Startup);
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(Common.ActivationEvent.Startup, CountEvent),
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(Common.ActivationEvent.Startup);
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.org/test/count', name: 'Count' }).pipe(
572
+ const Count = Plugin.define({ id: 'org.dxos.test.count', name: 'Count' }).pipe(
550
573
  Plugin.addModule({
551
574
  id: 'Count',
552
- activatesOn: Common.ActivationEvent.Startup,
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(Common.ActivationEvent.Startup);
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.org/test/plugin-1', name: 'Plugin 1' }).pipe(
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.org/test/plugin-2', name: 'Plugin 2' }).pipe(
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.org/test/plugin-3', name: 'Plugin 3' }).pipe(
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.org/test/slow');
756
- const SlowPlugin = Plugin.define({ id: 'dxos.org/test/slow-plugin', name: 'Slow Plugin' }).pipe(
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.org/test/event-a');
799
- const EventB = ActivationEvent.make('dxos.org/test/event-b');
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.org/test/concurrent-plugin', name: 'Concurrent Plugin' }).pipe(
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
  });