@dxos/app-framework 0.8.4-main.937b3ca → 0.8.4-main.9be5663bfe

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