@dxos/app-framework 0.8.4-main.72ec0f3 → 0.8.4-main.74a063c4e0

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 (512) hide show
  1. package/.storybook/main.mts +2 -4
  2. package/.storybook/preview.mts +2 -2
  3. package/dist/lib/browser/capability-BBBBAPDI.mjs +38 -0
  4. package/dist/lib/browser/capability-BBBBAPDI.mjs.map +7 -0
  5. package/dist/lib/browser/capability-OP63CD5N.mjs +35 -0
  6. package/dist/lib/browser/capability-OP63CD5N.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-2CKCJ6PN.mjs +79 -0
  8. package/dist/lib/browser/chunk-2CKCJ6PN.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-F7FW2RK2.mjs +167 -0
  10. package/dist/lib/browser/chunk-F7FW2RK2.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-FU4GAFUQ.mjs +148 -0
  12. package/dist/lib/browser/chunk-FU4GAFUQ.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-GX4TUNM6.mjs +963 -0
  14. package/dist/lib/browser/chunk-GX4TUNM6.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-I34GF4NG.mjs +34 -0
  16. package/dist/lib/browser/chunk-I34GF4NG.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  18. package/dist/lib/browser/chunk-JKWMHZP6.mjs +80 -0
  19. package/dist/lib/browser/chunk-JKWMHZP6.mjs.map +7 -0
  20. package/dist/lib/browser/chunk-LVJW5EFU.mjs +157 -0
  21. package/dist/lib/browser/chunk-LVJW5EFU.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-QSXYHXCE.mjs +48 -0
  23. package/dist/lib/browser/chunk-QSXYHXCE.mjs.map +7 -0
  24. package/dist/lib/browser/chunk-RFSO3JRG.mjs +1 -0
  25. package/dist/lib/browser/chunk-T3Y4AEKX.mjs +42 -0
  26. package/dist/lib/browser/chunk-T3Y4AEKX.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-TGX63LTL.mjs +8 -0
  28. package/dist/lib/browser/chunk-TGX63LTL.mjs.map +7 -0
  29. package/dist/lib/browser/chunk-WPE6AL7I.mjs +905 -0
  30. package/dist/lib/browser/chunk-WPE6AL7I.mjs.map +7 -0
  31. package/dist/lib/browser/cli/index.mjs +90 -0
  32. package/dist/lib/browser/cli/index.mjs.map +7 -0
  33. package/dist/lib/browser/common/activation-events.mjs +24 -0
  34. package/dist/lib/browser/common/capabilities.mjs +46 -0
  35. package/dist/lib/browser/core/activation-event.mjs +20 -0
  36. package/dist/lib/browser/core/activation-event.mjs.map +7 -0
  37. package/dist/lib/browser/core/capability.mjs +30 -0
  38. package/dist/lib/browser/core/capability.mjs.map +7 -0
  39. package/dist/lib/browser/core/plugin-manager.mjs +15 -0
  40. package/dist/lib/browser/core/plugin-manager.mjs.map +7 -0
  41. package/dist/lib/browser/core/plugin.mjs +29 -0
  42. package/dist/lib/browser/core/plugin.mjs.map +7 -0
  43. package/dist/lib/browser/core/url-loader.mjs +12 -0
  44. package/dist/lib/browser/core/url-loader.mjs.map +7 -0
  45. package/dist/lib/browser/index.mjs +92 -121
  46. package/dist/lib/browser/index.mjs.map +4 -4
  47. package/dist/lib/browser/invoker-capability-H5PPENOC.mjs +43 -0
  48. package/dist/lib/browser/invoker-capability-H5PPENOC.mjs.map +7 -0
  49. package/dist/lib/browser/meta.json +1 -1
  50. package/dist/lib/browser/testing/index.mjs +108 -40
  51. package/dist/lib/browser/testing/index.mjs.map +4 -4
  52. package/dist/lib/browser/ui/index.mjs +44 -0
  53. package/dist/lib/browser/ui/index.mjs.map +7 -0
  54. package/dist/lib/node-esm/capability-AWBEMRYR.mjs +39 -0
  55. package/dist/lib/node-esm/capability-AWBEMRYR.mjs.map +7 -0
  56. package/dist/lib/node-esm/capability-WFEG6CIZ.mjs +36 -0
  57. package/dist/lib/node-esm/capability-WFEG6CIZ.mjs.map +7 -0
  58. package/dist/lib/node-esm/chunk-42KBWDE4.mjs +80 -0
  59. package/dist/lib/node-esm/chunk-42KBWDE4.mjs.map +7 -0
  60. package/dist/lib/node-esm/chunk-4A3ZCMI3.mjs +158 -0
  61. package/dist/lib/node-esm/chunk-4A3ZCMI3.mjs.map +7 -0
  62. package/dist/lib/node-esm/chunk-BCEOLX47.mjs +964 -0
  63. package/dist/lib/node-esm/chunk-BCEOLX47.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs +2 -0
  65. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-FKE4Z3D6.mjs +10 -0
  67. package/dist/lib/node-esm/chunk-FKE4Z3D6.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-G3RTFSNG.mjs +81 -0
  69. package/dist/lib/node-esm/chunk-G3RTFSNG.mjs.map +7 -0
  70. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  71. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  72. package/dist/lib/node-esm/chunk-LQKOTNJW.mjs +906 -0
  73. package/dist/lib/node-esm/chunk-LQKOTNJW.mjs.map +7 -0
  74. package/dist/lib/node-esm/chunk-ULUEXB7Q.mjs +149 -0
  75. package/dist/lib/node-esm/chunk-ULUEXB7Q.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-URWHJQT2.mjs +168 -0
  77. package/dist/lib/node-esm/chunk-URWHJQT2.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-VKHGNEDB.mjs +43 -0
  79. package/dist/lib/node-esm/chunk-VKHGNEDB.mjs.map +7 -0
  80. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs +35 -0
  81. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs.map +7 -0
  82. package/dist/lib/node-esm/chunk-ZZ7CKK6W.mjs +49 -0
  83. package/dist/lib/node-esm/chunk-ZZ7CKK6W.mjs.map +7 -0
  84. package/dist/lib/node-esm/cli/index.mjs +91 -0
  85. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  86. package/dist/lib/node-esm/common/activation-events.mjs +25 -0
  87. package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
  88. package/dist/lib/node-esm/common/capabilities.mjs +47 -0
  89. package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
  90. package/dist/lib/node-esm/core/activation-event.mjs +21 -0
  91. package/dist/lib/node-esm/core/activation-event.mjs.map +7 -0
  92. package/dist/lib/node-esm/core/capability.mjs +31 -0
  93. package/dist/lib/node-esm/core/capability.mjs.map +7 -0
  94. package/dist/lib/node-esm/core/plugin-manager.mjs +16 -0
  95. package/dist/lib/node-esm/core/plugin-manager.mjs.map +7 -0
  96. package/dist/lib/node-esm/core/plugin.mjs +30 -0
  97. package/dist/lib/node-esm/core/plugin.mjs.map +7 -0
  98. package/dist/lib/node-esm/core/url-loader.mjs +13 -0
  99. package/dist/lib/node-esm/core/url-loader.mjs.map +7 -0
  100. package/dist/lib/node-esm/index.mjs +92 -121
  101. package/dist/lib/node-esm/index.mjs.map +4 -4
  102. package/dist/lib/node-esm/invoker-capability-S3ZA527J.mjs +44 -0
  103. package/dist/lib/node-esm/invoker-capability-S3ZA527J.mjs.map +7 -0
  104. package/dist/lib/node-esm/meta.json +1 -1
  105. package/dist/lib/node-esm/testing/index.mjs +108 -40
  106. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  107. package/dist/lib/node-esm/ui/index.mjs +45 -0
  108. package/dist/lib/node-esm/ui/index.mjs.map +7 -0
  109. package/dist/plugin/node-esm/index.mjs +384 -0
  110. package/dist/plugin/node-esm/index.mjs.map +7 -0
  111. package/dist/plugin/node-esm/meta.json +1 -0
  112. package/dist/types/src/cli/cli.d.ts +39 -0
  113. package/dist/types/src/cli/cli.d.ts.map +1 -0
  114. package/dist/types/src/cli/index.d.ts +2 -0
  115. package/dist/types/src/cli/index.d.ts.map +1 -0
  116. package/dist/types/src/common/activation-events.d.ts +27 -0
  117. package/dist/types/src/common/activation-events.d.ts.map +1 -0
  118. package/dist/types/src/common/capabilities.d.ts +109 -194
  119. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  120. package/dist/types/src/common/index.d.ts +4 -8
  121. package/dist/types/src/common/index.d.ts.map +1 -1
  122. package/dist/types/src/common/operations.d.ts +19 -0
  123. package/dist/types/src/common/operations.d.ts.map +1 -0
  124. package/dist/types/src/common/translations.d.ts +7 -7
  125. package/dist/types/src/common/translations.d.ts.map +1 -1
  126. package/dist/types/src/context.d.ts +5 -0
  127. package/dist/types/src/context.d.ts.map +1 -0
  128. package/dist/types/src/core/{events.d.ts → activation-event.d.ts} +7 -7
  129. package/dist/types/src/core/activation-event.d.ts.map +1 -0
  130. package/dist/types/src/core/capability-manager.d.ts +48 -0
  131. package/dist/types/src/core/capability-manager.d.ts.map +1 -0
  132. package/dist/types/src/core/capability-manager.test.d.ts +2 -0
  133. package/dist/types/src/core/capability-manager.test.d.ts.map +1 -0
  134. package/dist/types/src/core/capability.d.ts +156 -0
  135. package/dist/types/src/core/capability.d.ts.map +1 -0
  136. package/dist/types/src/core/index.d.ts +6 -4
  137. package/dist/types/src/core/index.d.ts.map +1 -1
  138. package/dist/types/src/core/plugin-manager.d.ts +73 -0
  139. package/dist/types/src/core/plugin-manager.d.ts.map +1 -0
  140. package/dist/types/src/core/plugin-manager.test.d.ts +2 -0
  141. package/dist/types/src/core/plugin-manager.test.d.ts.map +1 -0
  142. package/dist/types/src/core/plugin.d.ts +98 -35
  143. package/dist/types/src/core/plugin.d.ts.map +1 -1
  144. package/dist/types/src/core/url-loader.d.ts +25 -0
  145. package/dist/types/src/core/url-loader.d.ts.map +1 -0
  146. package/dist/types/src/core/url-loader.test.d.ts +2 -0
  147. package/dist/types/src/core/url-loader.test.d.ts.map +1 -0
  148. package/dist/types/src/index.d.ts +3 -2
  149. package/dist/types/src/index.d.ts.map +1 -1
  150. package/dist/types/src/plugin-operation/OperationPlugin.d.ts +3 -0
  151. package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +1 -0
  152. package/dist/types/src/plugin-operation/history/capability.d.ts +7 -0
  153. package/dist/types/src/plugin-operation/history/capability.d.ts.map +1 -0
  154. package/dist/types/src/plugin-operation/history/errors.d.ts +32 -0
  155. package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -0
  156. package/dist/types/src/plugin-operation/history/history-tracker.d.ts +18 -0
  157. package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +1 -0
  158. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts +2 -0
  159. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts.map +1 -0
  160. package/dist/types/src/plugin-operation/history/index.d.ts +6 -0
  161. package/dist/types/src/plugin-operation/history/index.d.ts.map +1 -0
  162. package/dist/types/src/plugin-operation/history/types.d.ts +13 -0
  163. package/dist/types/src/plugin-operation/history/types.d.ts.map +1 -0
  164. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +101 -0
  165. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -0
  166. package/dist/types/src/plugin-operation/history/undo-registry.d.ts +23 -0
  167. package/dist/types/src/plugin-operation/history/undo-registry.d.ts.map +1 -0
  168. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts +2 -0
  169. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts.map +1 -0
  170. package/dist/types/src/plugin-operation/index.d.ts +3 -0
  171. package/dist/types/src/plugin-operation/index.d.ts.map +1 -0
  172. package/dist/types/src/plugin-operation/invoker-capability.d.ts +6 -0
  173. package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -0
  174. package/dist/types/src/plugin-operation/meta.d.ts +3 -0
  175. package/dist/types/src/plugin-operation/meta.d.ts.map +1 -0
  176. package/dist/types/src/plugin-operation/testing.d.ts +58 -0
  177. package/dist/types/src/plugin-operation/testing.d.ts.map +1 -0
  178. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts +3 -0
  179. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +1 -0
  180. package/dist/types/src/plugin-runtime/capability.d.ts +6 -0
  181. package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -0
  182. package/dist/types/src/plugin-runtime/index.d.ts +2 -0
  183. package/dist/types/src/plugin-runtime/index.d.ts.map +1 -0
  184. package/dist/types/src/plugin-runtime/meta.d.ts +3 -0
  185. package/dist/types/src/plugin-runtime/meta.d.ts.map +1 -0
  186. package/dist/types/src/testing/index.d.ts +1 -0
  187. package/dist/types/src/testing/index.d.ts.map +1 -1
  188. package/dist/types/src/testing/service.d.ts +8 -0
  189. package/dist/types/src/testing/service.d.ts.map +1 -0
  190. package/dist/types/src/testing/withPluginManager.d.ts +4 -4
  191. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  192. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  193. package/dist/types/src/ui/components/App/App.d.ts +9 -0
  194. package/dist/types/src/ui/components/App/App.d.ts.map +1 -0
  195. package/dist/types/src/ui/components/App/App.stories.d.ts +19 -0
  196. package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -0
  197. package/dist/types/src/ui/components/App/index.d.ts +2 -0
  198. package/dist/types/src/ui/components/App/index.d.ts.map +1 -0
  199. package/dist/types/src/{react/Surface.stories.d.ts → ui/components/PluginManager/PluginManagerContext.stories.d.ts} +2 -3
  200. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -0
  201. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts +10 -0
  202. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts.map +1 -0
  203. package/dist/types/src/ui/components/PluginManager/index.d.ts +2 -0
  204. package/dist/types/src/ui/components/PluginManager/index.d.ts.map +1 -0
  205. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +12 -0
  206. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -0
  207. package/dist/types/src/{react/App.stories.d.ts → ui/components/Surface/SurfaceComponent.stories.d.ts} +1 -1
  208. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -0
  209. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts +11 -0
  210. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -0
  211. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts +48 -0
  212. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts.map +1 -0
  213. package/dist/types/src/ui/components/Surface/context.d.ts +5 -0
  214. package/dist/types/src/ui/components/Surface/context.d.ts.map +1 -0
  215. package/dist/types/src/ui/components/Surface/index.d.ts +26 -0
  216. package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -0
  217. package/dist/types/src/ui/components/Surface/types.d.ts +96 -0
  218. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -0
  219. package/dist/types/src/ui/components/index.d.ts +4 -0
  220. package/dist/types/src/ui/components/index.d.ts.map +1 -0
  221. package/dist/types/src/ui/hooks/index.d.ts +6 -0
  222. package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
  223. package/dist/types/src/{react → ui/hooks}/useApp.d.ts +30 -12
  224. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
  225. package/dist/types/src/ui/hooks/useApp.test.d.ts +2 -0
  226. package/dist/types/src/ui/hooks/useApp.test.d.ts.map +1 -0
  227. package/dist/types/src/ui/hooks/useCapabilities.d.ts +31 -0
  228. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
  229. package/dist/types/src/{react → ui/hooks}/useLoading.d.ts +1 -2
  230. package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
  231. package/dist/types/src/ui/hooks/useSettingsState.d.ts +10 -0
  232. package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
  233. package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
  234. package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
  235. package/dist/types/src/ui/index.d.ts +3 -0
  236. package/dist/types/src/ui/index.d.ts.map +1 -0
  237. package/dist/types/src/vite-plugin/composer-plugin.d.ts +18 -0
  238. package/dist/types/src/vite-plugin/composer-plugin.d.ts.map +1 -0
  239. package/dist/types/src/vite-plugin/import-map-plugin.d.ts +16 -0
  240. package/dist/types/src/vite-plugin/import-map-plugin.d.ts.map +1 -0
  241. package/dist/types/src/vite-plugin/index.d.ts +3 -0
  242. package/dist/types/src/vite-plugin/index.d.ts.map +1 -0
  243. package/dist/types/src/vite-plugin/packages.d.ts +7 -0
  244. package/dist/types/src/vite-plugin/packages.d.ts.map +1 -0
  245. package/dist/types/tsconfig.tsbuildinfo +1 -1
  246. package/moon.yml +24 -6
  247. package/package.json +130 -50
  248. package/src/cli/cli.ts +107 -0
  249. package/src/{playground/debug → cli}/index.ts +1 -1
  250. package/src/common/activation-events.ts +44 -0
  251. package/src/common/capabilities.ts +168 -210
  252. package/src/common/index.ts +4 -8
  253. package/src/common/operations.ts +35 -0
  254. package/src/common/translations.ts +17 -9
  255. package/src/context.ts +9 -0
  256. package/src/core/{events.ts → activation-event.ts} +10 -7
  257. package/src/core/capability-manager.test.ts +151 -0
  258. package/src/core/capability-manager.ts +192 -0
  259. package/src/core/capability.ts +247 -0
  260. package/src/core/index.ts +6 -4
  261. package/src/core/plugin-manager.test.ts +1113 -0
  262. package/src/core/plugin-manager.ts +883 -0
  263. package/src/core/plugin.ts +230 -40
  264. package/src/core/url-loader.test.ts +79 -0
  265. package/src/core/url-loader.ts +148 -0
  266. package/src/index.ts +3 -2
  267. package/src/plugin-operation/OperationPlugin.ts +24 -0
  268. package/src/plugin-operation/history/capability.ts +36 -0
  269. package/src/plugin-operation/history/errors.ts +7 -0
  270. package/src/plugin-operation/history/history-tracker.test.ts +373 -0
  271. package/src/plugin-operation/history/history-tracker.ts +128 -0
  272. package/src/plugin-operation/history/index.ts +9 -0
  273. package/src/plugin-operation/history/types.ts +17 -0
  274. package/src/plugin-operation/history/undo-mapping.ts +135 -0
  275. package/src/plugin-operation/history/undo-registry.test.ts +72 -0
  276. package/src/plugin-operation/history/undo-registry.ts +54 -0
  277. package/src/plugin-operation/index.ts +6 -0
  278. package/src/plugin-operation/invoker-capability.ts +54 -0
  279. package/src/plugin-operation/meta.ts +11 -0
  280. package/src/plugin-operation/testing.ts +154 -0
  281. package/src/plugin-runtime/RuntimePlugin.ts +19 -0
  282. package/src/plugin-runtime/capability.ts +53 -0
  283. package/src/{playground/logger → plugin-runtime}/index.ts +1 -1
  284. package/src/plugin-runtime/meta.ts +11 -0
  285. package/src/testing/index.ts +1 -0
  286. package/src/testing/service.ts +52 -0
  287. package/src/testing/withPluginManager.stories.tsx +7 -8
  288. package/src/testing/withPluginManager.tsx +63 -38
  289. package/src/ui/components/App/App.stories.tsx +92 -0
  290. package/src/{react → ui/components/App}/App.tsx +11 -12
  291. package/src/{playground/layout → ui/components/App}/index.ts +1 -1
  292. package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +183 -0
  293. package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +3 -3
  294. package/src/ui/components/PluginManager/index.ts +5 -0
  295. package/src/{react/Surface.stories.tsx → ui/components/Surface/SurfaceComponent.stories.tsx} +55 -36
  296. package/src/ui/components/Surface/SurfaceComponent.tsx +266 -0
  297. package/src/ui/components/Surface/SurfaceInfo.tsx +107 -0
  298. package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
  299. package/src/ui/components/Surface/context.ts +12 -0
  300. package/src/ui/components/Surface/index.ts +35 -0
  301. package/src/ui/components/Surface/types.ts +117 -0
  302. package/src/ui/components/index.ts +7 -0
  303. package/src/ui/hooks/index.ts +9 -0
  304. package/src/ui/hooks/useApp.test.tsx +159 -0
  305. package/src/ui/hooks/useApp.tsx +289 -0
  306. package/src/ui/hooks/useCapabilities.ts +67 -0
  307. package/src/{react → ui/hooks}/useLoading.tsx +4 -6
  308. package/src/ui/hooks/useSettingsState.ts +26 -0
  309. package/src/ui/hooks/useSurface.ts +13 -0
  310. package/src/ui/index.ts +6 -0
  311. package/src/vite-plugin/composer-plugin.ts +128 -0
  312. package/src/vite-plugin/import-map-plugin.ts +314 -0
  313. package/src/vite-plugin/index.ts +6 -0
  314. package/src/vite-plugin/packages.ts +29 -0
  315. package/tsconfig.json +12 -27
  316. package/tsconfig.node.json +2 -4
  317. package/typedoc.json +2 -4
  318. package/vitest.config.ts +1 -1
  319. package/.swc/plugins/linux_x86_64_19.0.0/fce1bdb8e20a094e4af08bad09cc81497ed0e2e7c51223b07d371063cca18429.wasmer-v7 +0 -0
  320. package/dist/lib/browser/app-graph-builder-OIEZZC45.mjs +0 -138
  321. package/dist/lib/browser/app-graph-builder-OIEZZC45.mjs.map +0 -7
  322. package/dist/lib/browser/chunk-SCPE4ZO2.mjs +0 -35
  323. package/dist/lib/browser/chunk-SCPE4ZO2.mjs.map +0 -7
  324. package/dist/lib/browser/chunk-VFUKEZIN.mjs +0 -483
  325. package/dist/lib/browser/chunk-VFUKEZIN.mjs.map +0 -7
  326. package/dist/lib/browser/chunk-WPW5VVAX.mjs +0 -1651
  327. package/dist/lib/browser/chunk-WPW5VVAX.mjs.map +0 -7
  328. package/dist/lib/browser/intent-dispatcher-LZ4AE66E.mjs +0 -11
  329. package/dist/lib/browser/intent-resolver-QVCKRX6G.mjs +0 -39
  330. package/dist/lib/browser/intent-resolver-QVCKRX6G.mjs.map +0 -7
  331. package/dist/lib/browser/react/index.mjs +0 -34
  332. package/dist/lib/browser/store-CNPHOYTJ.mjs +0 -30
  333. package/dist/lib/browser/store-CNPHOYTJ.mjs.map +0 -7
  334. package/dist/lib/node-esm/app-graph-builder-EBU4NVWD.mjs +0 -139
  335. package/dist/lib/node-esm/app-graph-builder-EBU4NVWD.mjs.map +0 -7
  336. package/dist/lib/node-esm/chunk-IJOHO66N.mjs +0 -484
  337. package/dist/lib/node-esm/chunk-IJOHO66N.mjs.map +0 -7
  338. package/dist/lib/node-esm/chunk-XJZGUJ3H.mjs +0 -1653
  339. package/dist/lib/node-esm/chunk-XJZGUJ3H.mjs.map +0 -7
  340. package/dist/lib/node-esm/chunk-ZX63QUGE.mjs +0 -37
  341. package/dist/lib/node-esm/chunk-ZX63QUGE.mjs.map +0 -7
  342. package/dist/lib/node-esm/intent-dispatcher-MGOJ3CHD.mjs +0 -12
  343. package/dist/lib/node-esm/intent-resolver-URF3HN3G.mjs +0 -40
  344. package/dist/lib/node-esm/intent-resolver-URF3HN3G.mjs.map +0 -7
  345. package/dist/lib/node-esm/react/index.mjs +0 -35
  346. package/dist/lib/node-esm/store-RK5B4XEL.mjs +0 -31
  347. package/dist/lib/node-esm/store-RK5B4XEL.mjs.map +0 -7
  348. package/dist/types/src/common/collaboration.d.ts +0 -20
  349. package/dist/types/src/common/collaboration.d.ts.map +0 -1
  350. package/dist/types/src/common/events.d.ts +0 -52
  351. package/dist/types/src/common/events.d.ts.map +0 -1
  352. package/dist/types/src/common/file.d.ts +0 -14
  353. package/dist/types/src/common/file.d.ts.map +0 -1
  354. package/dist/types/src/common/graph.d.ts +0 -21
  355. package/dist/types/src/common/graph.d.ts.map +0 -1
  356. package/dist/types/src/common/layout.d.ts +0 -279
  357. package/dist/types/src/common/layout.d.ts.map +0 -1
  358. package/dist/types/src/common/surface.d.ts +0 -68
  359. package/dist/types/src/common/surface.d.ts.map +0 -1
  360. package/dist/types/src/core/capabilities.d.ts +0 -117
  361. package/dist/types/src/core/capabilities.d.ts.map +0 -1
  362. package/dist/types/src/core/capabilities.test.d.ts +0 -2
  363. package/dist/types/src/core/capabilities.test.d.ts.map +0 -1
  364. package/dist/types/src/core/events.d.ts.map +0 -1
  365. package/dist/types/src/core/manager.d.ts +0 -126
  366. package/dist/types/src/core/manager.d.ts.map +0 -1
  367. package/dist/types/src/core/manager.test.d.ts +0 -2
  368. package/dist/types/src/core/manager.test.d.ts.map +0 -1
  369. package/dist/types/src/playground/debug/Debug.d.ts +0 -6
  370. package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
  371. package/dist/types/src/playground/debug/index.d.ts +0 -2
  372. package/dist/types/src/playground/debug/index.d.ts.map +0 -1
  373. package/dist/types/src/playground/debug/plugin.d.ts +0 -2
  374. package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
  375. package/dist/types/src/playground/generator/Main.d.ts +0 -6
  376. package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
  377. package/dist/types/src/playground/generator/Toolbar.d.ts +0 -6
  378. package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
  379. package/dist/types/src/playground/generator/generator.d.ts +0 -7
  380. package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
  381. package/dist/types/src/playground/generator/index.d.ts +0 -3
  382. package/dist/types/src/playground/generator/index.d.ts.map +0 -1
  383. package/dist/types/src/playground/generator/plugin.d.ts +0 -2
  384. package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
  385. package/dist/types/src/playground/layout/Layout.d.ts +0 -8
  386. package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
  387. package/dist/types/src/playground/layout/index.d.ts +0 -2
  388. package/dist/types/src/playground/layout/index.d.ts.map +0 -1
  389. package/dist/types/src/playground/layout/plugin.d.ts +0 -2
  390. package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
  391. package/dist/types/src/playground/logger/Toolbar.d.ts +0 -6
  392. package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
  393. package/dist/types/src/playground/logger/index.d.ts +0 -2
  394. package/dist/types/src/playground/logger/index.d.ts.map +0 -1
  395. package/dist/types/src/playground/logger/plugin.d.ts +0 -2
  396. package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
  397. package/dist/types/src/playground/logger/schema.d.ts +0 -13
  398. package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
  399. package/dist/types/src/playground/playground.stories.d.ts +0 -11
  400. package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
  401. package/dist/types/src/plugin-intent/IntentPlugin.d.ts +0 -2
  402. package/dist/types/src/plugin-intent/IntentPlugin.d.ts.map +0 -1
  403. package/dist/types/src/plugin-intent/actions.d.ts +0 -36
  404. package/dist/types/src/plugin-intent/actions.d.ts.map +0 -1
  405. package/dist/types/src/plugin-intent/errors.d.ts +0 -16
  406. package/dist/types/src/plugin-intent/errors.d.ts.map +0 -1
  407. package/dist/types/src/plugin-intent/index.d.ts +0 -6
  408. package/dist/types/src/plugin-intent/index.d.ts.map +0 -1
  409. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +0 -139
  410. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +0 -1
  411. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts +0 -2
  412. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts.map +0 -1
  413. package/dist/types/src/plugin-intent/intent.d.ts +0 -63
  414. package/dist/types/src/plugin-intent/intent.d.ts.map +0 -1
  415. package/dist/types/src/plugin-intent/meta.d.ts +0 -3
  416. package/dist/types/src/plugin-intent/meta.d.ts.map +0 -1
  417. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -2
  418. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  419. package/dist/types/src/plugin-settings/actions.d.ts +0 -25
  420. package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
  421. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -4
  422. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
  423. package/dist/types/src/plugin-settings/index.d.ts +0 -3
  424. package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
  425. package/dist/types/src/plugin-settings/intent-resolver.d.ts +0 -4
  426. package/dist/types/src/plugin-settings/intent-resolver.d.ts.map +0 -1
  427. package/dist/types/src/plugin-settings/meta.d.ts +0 -3
  428. package/dist/types/src/plugin-settings/meta.d.ts.map +0 -1
  429. package/dist/types/src/plugin-settings/store.d.ts +0 -5
  430. package/dist/types/src/plugin-settings/store.d.ts.map +0 -1
  431. package/dist/types/src/plugin-settings/translations.d.ts +0 -11
  432. package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
  433. package/dist/types/src/react/App.d.ts +0 -10
  434. package/dist/types/src/react/App.d.ts.map +0 -1
  435. package/dist/types/src/react/App.stories.d.ts.map +0 -1
  436. package/dist/types/src/react/DefaultFallback.d.ts +0 -8
  437. package/dist/types/src/react/DefaultFallback.d.ts.map +0 -1
  438. package/dist/types/src/react/ErrorBoundary.d.ts +0 -30
  439. package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
  440. package/dist/types/src/react/IntentContext.d.ts +0 -8
  441. package/dist/types/src/react/IntentContext.d.ts.map +0 -1
  442. package/dist/types/src/react/PluginManagerProvider.d.ts +0 -10
  443. package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
  444. package/dist/types/src/react/Surface.d.ts +0 -12
  445. package/dist/types/src/react/Surface.d.ts.map +0 -1
  446. package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
  447. package/dist/types/src/react/common.d.ts +0 -13
  448. package/dist/types/src/react/common.d.ts.map +0 -1
  449. package/dist/types/src/react/index.d.ts +0 -9
  450. package/dist/types/src/react/index.d.ts.map +0 -1
  451. package/dist/types/src/react/types.d.ts +0 -14
  452. package/dist/types/src/react/types.d.ts.map +0 -1
  453. package/dist/types/src/react/useApp.d.ts.map +0 -1
  454. package/dist/types/src/react/useCapabilities.d.ts +0 -13
  455. package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
  456. package/dist/types/src/react/useIntentResolver.d.ts +0 -3
  457. package/dist/types/src/react/useIntentResolver.d.ts.map +0 -1
  458. package/dist/types/src/react/useLoading.d.ts.map +0 -1
  459. package/src/common/collaboration.ts +0 -18
  460. package/src/common/events.ts +0 -79
  461. package/src/common/file.ts +0 -22
  462. package/src/common/graph.ts +0 -30
  463. package/src/common/layout.ts +0 -277
  464. package/src/common/surface.ts +0 -88
  465. package/src/core/capabilities.test.ts +0 -136
  466. package/src/core/capabilities.ts +0 -263
  467. package/src/core/manager.test.ts +0 -516
  468. package/src/core/manager.ts +0 -604
  469. package/src/playground/debug/Debug.tsx +0 -39
  470. package/src/playground/debug/plugin.ts +0 -16
  471. package/src/playground/generator/Main.tsx +0 -70
  472. package/src/playground/generator/Toolbar.tsx +0 -47
  473. package/src/playground/generator/generator.ts +0 -48
  474. package/src/playground/generator/index.ts +0 -6
  475. package/src/playground/generator/plugin.ts +0 -22
  476. package/src/playground/layout/Layout.tsx +0 -33
  477. package/src/playground/layout/plugin.ts +0 -18
  478. package/src/playground/logger/Toolbar.tsx +0 -30
  479. package/src/playground/logger/plugin.ts +0 -41
  480. package/src/playground/logger/schema.ts +0 -12
  481. package/src/playground/playground.stories.tsx +0 -46
  482. package/src/plugin-intent/IntentPlugin.ts +0 -20
  483. package/src/plugin-intent/actions.ts +0 -31
  484. package/src/plugin-intent/errors.ts +0 -40
  485. package/src/plugin-intent/index.ts +0 -9
  486. package/src/plugin-intent/intent-dispatcher.test.ts +0 -286
  487. package/src/plugin-intent/intent-dispatcher.ts +0 -342
  488. package/src/plugin-intent/intent.ts +0 -154
  489. package/src/plugin-intent/meta.ts +0 -10
  490. package/src/plugin-settings/SettingsPlugin.ts +0 -34
  491. package/src/plugin-settings/actions.ts +0 -25
  492. package/src/plugin-settings/app-graph-builder.ts +0 -160
  493. package/src/plugin-settings/index.ts +0 -6
  494. package/src/plugin-settings/intent-resolver.ts +0 -35
  495. package/src/plugin-settings/meta.ts +0 -10
  496. package/src/plugin-settings/store.ts +0 -33
  497. package/src/plugin-settings/translations.ts +0 -19
  498. package/src/react/App.stories.tsx +0 -33
  499. package/src/react/DefaultFallback.tsx +0 -26
  500. package/src/react/ErrorBoundary.tsx +0 -56
  501. package/src/react/IntentContext.tsx +0 -35
  502. package/src/react/Surface.tsx +0 -109
  503. package/src/react/common.ts +0 -13
  504. package/src/react/index.ts +0 -14
  505. package/src/react/types.ts +0 -37
  506. package/src/react/useApp.tsx +0 -165
  507. package/src/react/useCapabilities.ts +0 -31
  508. package/src/react/useIntentResolver.ts +0 -22
  509. /package/dist/lib/browser/{intent-dispatcher-LZ4AE66E.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  510. /package/dist/lib/browser/{react/index.mjs.map → chunk-RFSO3JRG.mjs.map} +0 -0
  511. /package/dist/lib/{node-esm/intent-dispatcher-MGOJ3CHD.mjs.map → browser/common/activation-events.mjs.map} +0 -0
  512. /package/dist/lib/{node-esm/react/index.mjs.map → browser/common/capabilities.mjs.map} +0 -0
@@ -1,604 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Registry } from '@effect-atom/atom-react';
6
- import { untracked } from '@preact/signals-core';
7
- import * as Array from 'effect/Array';
8
- import * as Duration from 'effect/Duration';
9
- import * as Effect from 'effect/Effect';
10
- import * as Fiber from 'effect/Fiber';
11
- import * as Function from 'effect/Function';
12
- import * as HashSet from 'effect/HashSet';
13
- import * as Match from 'effect/Match';
14
- import * as Ref from 'effect/Ref';
15
-
16
- import { Event } from '@dxos/async';
17
- import { type Live, live } from '@dxos/live-object';
18
- import { log } from '@dxos/log';
19
- import { type MaybePromise } from '@dxos/util';
20
-
21
- import { type AnyCapability, PluginContext } from './capabilities';
22
- import { type ActivationEvent, eventKey, getEvents, isAllOf } from './events';
23
- import { type Plugin, type PluginModule } from './plugin';
24
-
25
- // TODO(wittjosiah): Factor out?
26
- const isPromise = (value: unknown): value is Promise<unknown> => {
27
- return value !== null && typeof value === 'object' && 'then' in value;
28
- };
29
-
30
- export type PluginManagerOptions = {
31
- pluginLoader: (id: string) => MaybePromise<Plugin>;
32
- plugins?: Plugin[];
33
- core?: string[];
34
- enabled?: string[];
35
- registry?: Registry.Registry;
36
- };
37
-
38
- type PluginManagerState = {
39
- // Plugins
40
- plugins: Plugin[];
41
- core: string[];
42
- enabled: string[];
43
-
44
- // Modules
45
- modules: PluginModule[];
46
- active: string[];
47
-
48
- // Events
49
- eventsFired: string[];
50
- pendingReset: string[];
51
- };
52
-
53
- export class PluginManager {
54
- readonly activation = new Event<{ event: string; state: 'activating' | 'activated' | 'error'; error?: any }>();
55
- readonly context: PluginContext;
56
- readonly registry: Registry.Registry;
57
-
58
- // TODO(wittjosiah): Replace with Atom.
59
- private readonly _state: Live<PluginManagerState>;
60
- private readonly _pluginLoader: PluginManagerOptions['pluginLoader'];
61
- private readonly _capabilities = new Map<string, AnyCapability[]>();
62
- private readonly _moduleMemoMap = new Map<PluginModule['id'], Promise<AnyCapability[]>>();
63
- private readonly _activatingEvents = Effect.runSync(Ref.make<string[]>([]));
64
- private readonly _activatingModules = Effect.runSync(Ref.make<string[]>([]));
65
-
66
- constructor({
67
- pluginLoader,
68
- plugins = [],
69
- core = plugins.map(({ meta }) => meta.id),
70
- enabled = [],
71
- registry,
72
- }: PluginManagerOptions) {
73
- this.registry = registry ?? Registry.make();
74
- this.context = new PluginContext({
75
- registry: this.registry,
76
- activate: (event) => this._activate(event),
77
- reset: (id) => this._reset(id),
78
- });
79
-
80
- this._pluginLoader = pluginLoader;
81
- this._state = live({
82
- plugins,
83
- core,
84
- enabled,
85
- modules: [],
86
- active: [],
87
- eventsFired: [],
88
- pendingReset: [],
89
- });
90
- plugins.forEach((plugin) => this._addPlugin(plugin));
91
- core.forEach((id) => this.enable(id));
92
- enabled.forEach((id) => this.enable(id));
93
- }
94
-
95
- /**
96
- * Plugins that are currently registered.
97
- *
98
- * @reactive
99
- */
100
- get plugins(): Live<readonly Plugin[]> {
101
- return this._state.plugins;
102
- }
103
-
104
- /**
105
- * Ids of plugins that are core and cannot be removed.
106
- *
107
- * @reactive
108
- */
109
- get core(): Live<readonly string[]> {
110
- return this._state.core;
111
- }
112
-
113
- /**
114
- * Ids of plugins that are currently enabled.
115
- *
116
- * @reactive
117
- */
118
- get enabled(): Live<readonly string[]> {
119
- return this._state.enabled;
120
- }
121
-
122
- /**
123
- * Modules of plugins which are currently enabled.
124
- *
125
- * @reactive
126
- */
127
- get modules(): Live<readonly PluginModule[]> {
128
- return this._state.modules;
129
- }
130
-
131
- /**
132
- * Ids of modules which are currently active.
133
- *
134
- * @reactive
135
- */
136
- get active(): Live<readonly string[]> {
137
- return this._state.active;
138
- }
139
-
140
- /**
141
- * Ids of events which have been fired.
142
- *
143
- * @reactive
144
- */
145
- get eventsFired(): Live<readonly string[]> {
146
- return this._state.eventsFired;
147
- }
148
-
149
- /**
150
- * Ids of modules which are pending reset.
151
- *
152
- * @reactive
153
- */
154
- get pendingReset(): Live<readonly string[]> {
155
- return this._state.pendingReset;
156
- }
157
-
158
- /**
159
- * Adds a plugin to the manager via the plugin loader.
160
- * @param id The id of the plugin.
161
- */
162
- async add(id: string): Promise<boolean> {
163
- return untracked(async () => {
164
- log('add plugin', { id });
165
- const plugin = await this._pluginLoader(id);
166
- this._addPlugin(plugin);
167
- return this.enable(id);
168
- });
169
- }
170
-
171
- /**
172
- * Enables a plugin.
173
- * @param id The id of the plugin.
174
- */
175
- enable(id: string): Promise<boolean> {
176
- return untracked(async () => {
177
- log('enable plugin', { id });
178
- const plugin = this._getPlugin(id);
179
- if (!plugin) {
180
- return false;
181
- }
182
-
183
- if (!this._state.enabled.includes(id)) {
184
- this._state.enabled.push(id);
185
- }
186
-
187
- plugin.modules.forEach((module) => {
188
- this._addModule(module);
189
- this._setPendingResetByModule(module);
190
- });
191
-
192
- log('pending reset', { events: [...this.pendingReset] });
193
- await Effect.runPromise(
194
- Effect.all(
195
- this.pendingReset.map((event) => this._activate(event)),
196
- { concurrency: 'unbounded' },
197
- ),
198
- );
199
-
200
- return true;
201
- });
202
- }
203
-
204
- /**
205
- * Removes a plugin from the manager.
206
- * @param id The id of the plugin.
207
- */
208
- remove(id: string): boolean {
209
- return untracked(() => {
210
- log('remove plugin', { id });
211
- const result = this.disable(id);
212
- if (!result) {
213
- return false;
214
- }
215
-
216
- this._removePlugin(id);
217
- return true;
218
- });
219
- }
220
-
221
- /**
222
- * Disables a plugin.
223
- * @param id The id of the plugin.
224
- */
225
- disable(id: string): Promise<boolean> {
226
- return untracked(async () => {
227
- log('disable plugin', { id });
228
- if (this._state.core.includes(id)) {
229
- return false;
230
- }
231
-
232
- const plugin = this._getPlugin(id);
233
- if (!plugin) {
234
- return false;
235
- }
236
-
237
- const enabledIndex = this._state.enabled.findIndex((enabled) => enabled === id);
238
- if (enabledIndex !== -1) {
239
- this._state.enabled.splice(enabledIndex, 1);
240
- await Effect.runPromise(this._deactivate(id));
241
-
242
- plugin.modules.forEach((module) => {
243
- this._removeModule(module.id);
244
- });
245
- }
246
-
247
- return true;
248
- });
249
- }
250
-
251
- /**
252
- * Activates plugins based on the activation event.
253
- * @param event The activation event.
254
- * @returns Whether the activation was successful.
255
- */
256
- activate(event: ActivationEvent | string): Promise<boolean> {
257
- return untracked(() => Effect.runPromise(this._activate(event)));
258
- }
259
-
260
- /**
261
- * Deactivates all of the modules for a plugin.
262
- * @param id The id of the plugin.
263
- * @returns Whether the deactivation was successful.
264
- */
265
- deactivate(id: string): Promise<boolean> {
266
- return untracked(() => Effect.runPromise(this._deactivate(id)));
267
- }
268
-
269
- /**
270
- * Re-activates the modules that were activated by the event.
271
- * @param event The activation event.
272
- * @returns Whether the reset was successful.
273
- */
274
- reset(event: ActivationEvent | string): Promise<boolean> {
275
- return untracked(() => Effect.runPromise(this._reset(event)));
276
- }
277
-
278
- private _addPlugin(plugin: Plugin): void {
279
- untracked(() => {
280
- log('add plugin', { id: plugin.meta.id });
281
- // TODO(wittjosiah): Find a way to add a warning for duplicate plugins that doesn't cause log spam.
282
- if (!this._state.plugins.includes(plugin)) {
283
- this._state.plugins.push(plugin);
284
- }
285
- });
286
- }
287
-
288
- private _removePlugin(id: string): void {
289
- untracked(() => {
290
- log('remove plugin', { id });
291
- const pluginIndex = this._state.plugins.findIndex((plugin) => plugin.meta.id === id);
292
- if (pluginIndex !== -1) {
293
- this._state.plugins.splice(pluginIndex, 1);
294
- }
295
- });
296
- }
297
-
298
- private _addModule(module: PluginModule): void {
299
- untracked(() => {
300
- log('add module', { id: module.id });
301
- // TODO(wittjosiah): Find a way to add a warning for duplicate modules that doesn't cause log spam.
302
- if (!this._state.modules.includes(module)) {
303
- this._state.modules.push(module);
304
- }
305
- });
306
- }
307
-
308
- private _removeModule(id: string): void {
309
- untracked(() => {
310
- log('remove module', { id });
311
- const moduleIndex = this._state.modules.findIndex((module) => module.id === id);
312
- if (moduleIndex !== -1) {
313
- this._state.modules.splice(moduleIndex, 1);
314
- }
315
- });
316
- }
317
-
318
- private _getPlugin(id: string): Plugin | undefined {
319
- return this._state.plugins.find((plugin) => plugin.meta.id === id);
320
- }
321
-
322
- private _getActiveModules(): PluginModule[] {
323
- return this._state.modules.filter((module) => this._state.active.includes(module.id));
324
- }
325
-
326
- private _getInactiveModules(): PluginModule[] {
327
- return this._state.modules.filter((module) => !this._state.active.includes(module.id));
328
- }
329
-
330
- private _getActiveModulesByEvent(key: string): PluginModule[] {
331
- return this._getActiveModules().filter((module) => getEvents(module.activatesOn).map(eventKey).includes(key));
332
- }
333
-
334
- private _getInactiveModulesByEvent(key: string): PluginModule[] {
335
- return this._getInactiveModules().filter((module) => getEvents(module.activatesOn).map(eventKey).includes(key));
336
- }
337
-
338
- private _setPendingResetByModule(module: PluginModule): void {
339
- return untracked(() => {
340
- const activationEvents = getEvents(module.activatesOn)
341
- .map(eventKey)
342
- .filter((key) => this._state.eventsFired.includes(key));
343
-
344
- const pendingReset = Array.fromIterable(new Set(activationEvents)).filter(
345
- (event) => !this._state.pendingReset.includes(event),
346
- );
347
- if (pendingReset.length > 0) {
348
- log('pending reset', { events: pendingReset });
349
- this._state.pendingReset.push(...pendingReset);
350
- }
351
- });
352
- }
353
-
354
- /**
355
- * @internal
356
- */
357
- // TODO(wittjosiah): Improve error typing.
358
- _activate(
359
- event: ActivationEvent | string,
360
- params?: { before?: string; after?: string },
361
- ): Effect.Effect<boolean, Error> {
362
- return Effect.gen(this, function* () {
363
- const key = typeof event === 'string' ? event : eventKey(event);
364
- log('activating', { key, ...params });
365
- yield* Ref.update(this._activatingEvents, (activating) => Array.append(activating, key));
366
- const pendingIndex = this._state.pendingReset.findIndex((event) => event === key);
367
- if (pendingIndex !== -1) {
368
- this._state.pendingReset.splice(pendingIndex, 1);
369
- }
370
-
371
- const activatingEvents = yield* this._activatingEvents;
372
- const activatingModules = yield* this._activatingModules;
373
- const modules = this._getInactiveModulesByEvent(key).filter((module) => {
374
- const allOf = isAllOf(module.activatesOn);
375
- if (!allOf) {
376
- return true;
377
- }
378
-
379
- // Check to see if all of the events in the `allOf` have been fired.
380
- // An event can be considered "fired" if it is in the `eventsFired` list or if it is currently being activated.
381
- const events = module.activatesOn.events.filter((event) => eventKey(event) !== key);
382
- return (
383
- events.every(
384
- (event) => this._state.eventsFired.includes(eventKey(event)) || activatingEvents.includes(eventKey(event)),
385
- ) && !activatingModules.includes(module.id)
386
- );
387
- });
388
- yield* Ref.update(this._activatingModules, (activating) =>
389
- Array.appendAll(
390
- activating,
391
- modules.map((module) => module.id),
392
- ),
393
- );
394
- if (modules.length === 0) {
395
- log('no modules to activate', { key });
396
- if (!this._state.eventsFired.includes(key)) {
397
- this._state.eventsFired.push(key);
398
- }
399
- return false;
400
- }
401
-
402
- log('activating modules', { key, modules: modules.map((module) => module.id) });
403
- this.activation.emit({ event: key, state: 'activating' });
404
-
405
- // Fire activatesBefore events.
406
- yield* Function.pipe(
407
- modules,
408
- Array.flatMap((module) => module.activatesBefore ?? []),
409
- HashSet.fromIterable,
410
- HashSet.toValues,
411
- Array.filter((event) => !activatingEvents.includes(eventKey(event))),
412
- Array.map((event) => this._activate(event, { before: key })),
413
- Effect.allWith({ concurrency: 'unbounded' }),
414
- );
415
-
416
- // Concurrently triggers loading of lazy capabilities.
417
- const getCapabilities = yield* Function.pipe(
418
- modules,
419
- Array.map((mod) => this._loadModule(mod)),
420
- Effect.allWith({ concurrency: 'unbounded' }),
421
- Effect.catchAll((error) => {
422
- this.activation.emit({ event: key, state: 'error', error });
423
- return Effect.fail(error);
424
- }),
425
- );
426
-
427
- // Contribute the capabilities from the activated modules.
428
- yield* Function.pipe(
429
- modules,
430
- Array.zip(getCapabilities),
431
- Array.map(([module, capabilities]) => this._contributeCapabilities(module, capabilities)),
432
- // TODO(wittjosiah): This currently can't be run in parallel.
433
- // Running this with concurrency causes races with `allOf` activation events.
434
- Effect.all,
435
- );
436
-
437
- // Fire activatesAfter events.
438
- yield* Function.pipe(
439
- modules,
440
- Array.flatMap((module) => module.activatesAfter ?? []),
441
- HashSet.fromIterable,
442
- HashSet.toValues,
443
- Array.filter((event) => !activatingEvents.includes(eventKey(event))),
444
- Array.map((event) => this._activate(event, { after: key })),
445
- Effect.allWith({ concurrency: 'unbounded' }),
446
- );
447
-
448
- yield* Ref.update(this._activatingEvents, (activating) => Array.filter(activating, (event) => event !== key));
449
- yield* Ref.update(this._activatingModules, (activating) =>
450
- Array.filter(activating, (module) => !modules.map((module) => module.id).includes(module)),
451
- );
452
-
453
- if (!this._state.eventsFired.includes(key)) {
454
- this._state.eventsFired.push(key);
455
- }
456
-
457
- this.activation.emit({ event: key, state: 'activated' });
458
- log('activated', { key });
459
-
460
- return true;
461
- });
462
- }
463
-
464
- // Memoized with _moduleMemoMap
465
- private _loadModule = (mod: PluginModule): Effect.Effect<AnyCapability[], Error> =>
466
- Effect.tryPromise({
467
- try: async () => {
468
- const entry = this._moduleMemoMap.get(mod.id);
469
- if (entry) {
470
- return entry;
471
- }
472
-
473
- const promise = (async () => {
474
- const start = performance.now();
475
- let failed = false;
476
- try {
477
- log('loading module', { module: mod.id });
478
- // TODO(wittjosiah): Support activation with an effect.
479
- let activationResult = await mod.activate(this.context);
480
- if (typeof activationResult === 'function') {
481
- activationResult = await activationResult();
482
- }
483
- return Array.isArray(activationResult) ? activationResult : [activationResult];
484
- } catch (error) {
485
- failed = true;
486
- throw error;
487
- } finally {
488
- performance.measure('activate-module', {
489
- start,
490
- end: performance.now(),
491
- detail: {
492
- module: mod.id,
493
- },
494
- });
495
- log('loaded module', { module: mod.id, elapsed: performance.now() - start, failed });
496
- }
497
- })();
498
- this._moduleMemoMap.set(mod.id, promise);
499
- return promise;
500
- },
501
- catch: (error) => error as Error,
502
- }).pipe(
503
- Effect.withSpan('PluginManager._loadModule'),
504
- together(
505
- Effect.sleep(Duration.seconds(10)).pipe(
506
- Effect.andThen(Effect.sync(() => log.warn(`module is taking a long time to activate`, { module: mod.id }))),
507
- ),
508
- ),
509
- );
510
-
511
- private _contributeCapabilities(module: PluginModule, capabilities: AnyCapability[]): Effect.Effect<void, Error> {
512
- return Effect.gen(this, function* () {
513
- capabilities.forEach((capability) => {
514
- this.context.contributeCapability({ module: module.id, ...capability });
515
- });
516
- this._state.active.push(module.id);
517
- this._capabilities.set(module.id, capabilities);
518
- });
519
- }
520
-
521
- private _deactivate(id: string): Effect.Effect<boolean, Error> {
522
- return Effect.gen(this, function* () {
523
- const plugin = this._getPlugin(id);
524
- if (!plugin) {
525
- return false;
526
- }
527
-
528
- const modules = plugin.modules;
529
- const results = yield* Effect.all(
530
- modules.map((module) => this._deactivateModule(module)),
531
- { concurrency: 'unbounded' },
532
- );
533
- return results.every((result) => result);
534
- });
535
- }
536
-
537
- private _deactivateModule(module: PluginModule): Effect.Effect<boolean, Error> {
538
- return Effect.gen(this, function* () {
539
- const id = module.id;
540
- log('deactivating', { id });
541
- this._moduleMemoMap.delete(id);
542
-
543
- const capabilities = this._capabilities.get(id);
544
- if (capabilities) {
545
- for (const capability of capabilities) {
546
- this.context.removeCapability(capability.interface, capability.implementation);
547
- const program = capability.deactivate?.();
548
- yield* Match.value(program).pipe(
549
- Match.when(Effect.isEffect, (effect) => effect),
550
- Match.when(isPromise, (promise) =>
551
- Effect.tryPromise({
552
- try: () => promise,
553
- catch: (error) => error as Error,
554
- }),
555
- ),
556
- Match.orElse((program) => Effect.succeed(program)),
557
- );
558
- }
559
- this._capabilities.delete(id);
560
- }
561
-
562
- const activeIndex = this._state.active.findIndex((event) => event === id);
563
- if (activeIndex !== -1) {
564
- this._state.active.splice(activeIndex, 1);
565
- }
566
-
567
- log('deactivated', { id });
568
- return true;
569
- });
570
- }
571
-
572
- private _reset(event: ActivationEvent | string): Effect.Effect<boolean, Error> {
573
- return Effect.gen(this, function* () {
574
- const key = typeof event === 'string' ? event : eventKey(event);
575
- log('reset', { key });
576
- const modules = this._getActiveModulesByEvent(key);
577
- const results = yield* Effect.all(
578
- modules.map((module) => this._deactivateModule(module)),
579
- { concurrency: 'unbounded' },
580
- );
581
-
582
- if (results.every((result) => result)) {
583
- return yield* this._activate(key);
584
- } else {
585
- return false;
586
- }
587
- });
588
- }
589
- }
590
-
591
- /**
592
- * Runs an effect concurrently with another effect.
593
- * If the first effect completes, the second effect is interrupted.
594
- */
595
- // TODO(dmaretskyi): Effect.race > Effect.asVoid
596
- const together =
597
- <R1>(togetherEffect: Effect.Effect<void, never, R1>) =>
598
- <A, E, R2>(effect: Effect.Effect<A, E, R2>): Effect.Effect<A, E, R1 | R2> =>
599
- Effect.gen(function* () {
600
- const togetherFiber = yield* Effect.fork(togetherEffect);
601
- const result = yield* effect;
602
- yield* Fiber.interrupt(togetherFiber);
603
- return result;
604
- });
@@ -1,39 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import React from 'react';
6
-
7
- import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
8
-
9
- import { Capabilities, createSurface } from '../../common';
10
- import { contributes } from '../../core';
11
- import { usePluginManager } from '../../react';
12
-
13
- export const Debug = () => {
14
- const manager = usePluginManager();
15
-
16
- const object = {
17
- core: manager.core,
18
- enabled: manager.enabled,
19
- active: manager.active,
20
- pendingReset: manager.pendingReset,
21
- eventsFired: manager.eventsFired,
22
- };
23
-
24
- return (
25
- <SyntaxHighlighter language='json' classNames='text-xs opacity-75 rounded'>
26
- {JSON.stringify(object, undefined, 2)}
27
- </SyntaxHighlighter>
28
- );
29
- };
30
-
31
- export default () =>
32
- contributes(
33
- Capabilities.ReactSurface,
34
- createSurface({
35
- id: 'dxos.org/test/debug/main',
36
- role: 'secondary',
37
- component: Debug,
38
- }),
39
- );
@@ -1,16 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Events } from '../../common';
6
- import { defineModule, definePlugin, lazy } from '../../core';
7
-
8
- const Debug = lazy(() => import('./Debug'));
9
-
10
- export const DebugPlugin = definePlugin({ id: 'dxos.org/test/plugin-debug', name: 'Debug' }, () => [
11
- defineModule({
12
- id: 'dxos.org/test/debug/main',
13
- activatesOn: Events.Startup,
14
- activate: Debug,
15
- }),
16
- ]);