@dxos/app-framework 0.8.4-main.406dc2a → 0.8.4-main.422d1c7879

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 (552) hide show
  1. package/.storybook/main.mts +2 -4
  2. package/.storybook/preview.mts +2 -2
  3. package/dist/lib/browser/capability-DOMNPRJP.mjs +35 -0
  4. package/dist/lib/browser/capability-DOMNPRJP.mjs.map +7 -0
  5. package/dist/lib/browser/capability-KSNT34SN.mjs +38 -0
  6. package/dist/lib/browser/capability-KSNT34SN.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-7B6AJK4D.mjs +964 -0
  10. package/dist/lib/browser/chunk-7B6AJK4D.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-BMIAYUWT.mjs +397 -0
  12. package/dist/lib/browser/chunk-BMIAYUWT.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-F7FW2RK2.mjs +167 -0
  14. package/dist/lib/browser/chunk-F7FW2RK2.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-GDWTW4ZW.mjs +148 -0
  16. package/dist/lib/browser/chunk-GDWTW4ZW.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-I34GF4NG.mjs +34 -0
  18. package/dist/lib/browser/chunk-I34GF4NG.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  20. package/dist/lib/browser/chunk-JKWMHZP6.mjs +80 -0
  21. package/dist/lib/browser/chunk-JKWMHZP6.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-QRTB4Q3U.mjs +594 -0
  23. package/dist/lib/browser/chunk-QRTB4Q3U.mjs.map +7 -0
  24. package/dist/lib/browser/chunk-QSXYHXCE.mjs +48 -0
  25. package/dist/lib/browser/chunk-QSXYHXCE.mjs.map +7 -0
  26. package/dist/lib/browser/chunk-RFSO3JRG.mjs +1 -0
  27. package/dist/lib/browser/chunk-T3Y4AEKX.mjs +42 -0
  28. package/dist/lib/browser/chunk-T3Y4AEKX.mjs.map +7 -0
  29. package/dist/lib/browser/chunk-TGX63LTL.mjs +8 -0
  30. package/dist/lib/browser/chunk-TGX63LTL.mjs.map +7 -0
  31. package/dist/lib/browser/chunk-Y543KCO7.mjs +174 -0
  32. package/dist/lib/browser/chunk-Y543KCO7.mjs.map +7 -0
  33. package/dist/lib/browser/cli/index.mjs +90 -0
  34. package/dist/lib/browser/cli/index.mjs.map +7 -0
  35. package/dist/lib/browser/common/activation-events.mjs +24 -0
  36. package/dist/lib/browser/common/capabilities.mjs +46 -0
  37. package/dist/lib/browser/core/activation-event.mjs +20 -0
  38. package/dist/lib/browser/core/activation-event.mjs.map +7 -0
  39. package/dist/lib/browser/core/capability.mjs +30 -0
  40. package/dist/lib/browser/core/capability.mjs.map +7 -0
  41. package/dist/lib/browser/core/plugin-manager.mjs +15 -0
  42. package/dist/lib/browser/core/plugin-manager.mjs.map +7 -0
  43. package/dist/lib/browser/core/plugin.mjs +29 -0
  44. package/dist/lib/browser/core/plugin.mjs.map +7 -0
  45. package/dist/lib/browser/core/url-loader.mjs +16 -0
  46. package/dist/lib/browser/core/url-loader.mjs.map +7 -0
  47. package/dist/lib/browser/index.mjs +91 -148
  48. package/dist/lib/browser/index.mjs.map +4 -4
  49. package/dist/lib/browser/invoker-capability-VCMPQOIA.mjs +43 -0
  50. package/dist/lib/browser/invoker-capability-VCMPQOIA.mjs.map +7 -0
  51. package/dist/lib/browser/meta.json +1 -1
  52. package/dist/lib/browser/testing/index.mjs +243 -41
  53. package/dist/lib/browser/testing/index.mjs.map +4 -4
  54. package/dist/lib/browser/testing/react.mjs +78 -0
  55. package/dist/lib/browser/testing/react.mjs.map +7 -0
  56. package/dist/lib/browser/ui/index.mjs +46 -0
  57. package/dist/lib/browser/ui/index.mjs.map +7 -0
  58. package/dist/lib/node-esm/capability-EOQTORML.mjs +39 -0
  59. package/dist/lib/node-esm/capability-EOQTORML.mjs.map +7 -0
  60. package/dist/lib/node-esm/capability-KJTQIWDK.mjs +36 -0
  61. package/dist/lib/node-esm/capability-KJTQIWDK.mjs.map +7 -0
  62. package/dist/lib/node-esm/chunk-42KBWDE4.mjs +80 -0
  63. package/dist/lib/node-esm/chunk-42KBWDE4.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-7PJ5OKRB.mjs +965 -0
  65. package/dist/lib/node-esm/chunk-7PJ5OKRB.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-DXVXOGJ7.mjs +175 -0
  67. package/dist/lib/node-esm/chunk-DXVXOGJ7.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs +2 -0
  69. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs.map +7 -0
  70. package/dist/lib/node-esm/chunk-FKE4Z3D6.mjs +10 -0
  71. package/dist/lib/node-esm/chunk-FKE4Z3D6.mjs.map +7 -0
  72. package/dist/lib/node-esm/chunk-G3RTFSNG.mjs +81 -0
  73. package/dist/lib/node-esm/chunk-G3RTFSNG.mjs.map +7 -0
  74. package/dist/lib/node-esm/chunk-HI3YBICQ.mjs +149 -0
  75. package/dist/lib/node-esm/chunk-HI3YBICQ.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  77. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-JPWVIQ5I.mjs +595 -0
  79. package/dist/lib/node-esm/chunk-JPWVIQ5I.mjs.map +7 -0
  80. package/dist/lib/node-esm/chunk-URWHJQT2.mjs +168 -0
  81. package/dist/lib/node-esm/chunk-URWHJQT2.mjs.map +7 -0
  82. package/dist/lib/node-esm/chunk-VKHGNEDB.mjs +43 -0
  83. package/dist/lib/node-esm/chunk-VKHGNEDB.mjs.map +7 -0
  84. package/dist/lib/node-esm/chunk-WZ6DHQER.mjs +398 -0
  85. package/dist/lib/node-esm/chunk-WZ6DHQER.mjs.map +7 -0
  86. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs +35 -0
  87. package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs.map +7 -0
  88. package/dist/lib/node-esm/chunk-ZZ7CKK6W.mjs +49 -0
  89. package/dist/lib/node-esm/chunk-ZZ7CKK6W.mjs.map +7 -0
  90. package/dist/lib/node-esm/cli/index.mjs +91 -0
  91. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  92. package/dist/lib/node-esm/common/activation-events.mjs +25 -0
  93. package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
  94. package/dist/lib/node-esm/common/capabilities.mjs +47 -0
  95. package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
  96. package/dist/lib/node-esm/core/activation-event.mjs +21 -0
  97. package/dist/lib/node-esm/core/activation-event.mjs.map +7 -0
  98. package/dist/lib/node-esm/core/capability.mjs +31 -0
  99. package/dist/lib/node-esm/core/capability.mjs.map +7 -0
  100. package/dist/lib/node-esm/core/plugin-manager.mjs +16 -0
  101. package/dist/lib/node-esm/core/plugin-manager.mjs.map +7 -0
  102. package/dist/lib/node-esm/core/plugin.mjs +30 -0
  103. package/dist/lib/node-esm/core/plugin.mjs.map +7 -0
  104. package/dist/lib/node-esm/core/url-loader.mjs +17 -0
  105. package/dist/lib/node-esm/core/url-loader.mjs.map +7 -0
  106. package/dist/lib/node-esm/index.mjs +91 -148
  107. package/dist/lib/node-esm/index.mjs.map +4 -4
  108. package/dist/lib/node-esm/invoker-capability-EGA3XW6J.mjs +44 -0
  109. package/dist/lib/node-esm/invoker-capability-EGA3XW6J.mjs.map +7 -0
  110. package/dist/lib/node-esm/meta.json +1 -1
  111. package/dist/lib/node-esm/testing/index.mjs +243 -41
  112. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  113. package/dist/lib/node-esm/testing/react.mjs +79 -0
  114. package/dist/lib/node-esm/testing/react.mjs.map +7 -0
  115. package/dist/lib/node-esm/ui/index.mjs +47 -0
  116. package/dist/lib/node-esm/ui/index.mjs.map +7 -0
  117. package/dist/plugin/node-esm/index.mjs +794 -0
  118. package/dist/plugin/node-esm/index.mjs.map +7 -0
  119. package/dist/plugin/node-esm/meta.json +1 -0
  120. package/dist/types/src/cli/cli.d.ts +39 -0
  121. package/dist/types/src/cli/cli.d.ts.map +1 -0
  122. package/dist/types/src/cli/index.d.ts +2 -0
  123. package/dist/types/src/cli/index.d.ts.map +1 -0
  124. package/dist/types/src/common/activation-events.d.ts +27 -0
  125. package/dist/types/src/common/activation-events.d.ts.map +1 -0
  126. package/dist/types/src/common/capabilities.d.ts +109 -200
  127. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  128. package/dist/types/src/common/index.d.ts +4 -8
  129. package/dist/types/src/common/index.d.ts.map +1 -1
  130. package/dist/types/src/common/operations.d.ts +19 -0
  131. package/dist/types/src/common/operations.d.ts.map +1 -0
  132. package/dist/types/src/common/translations.d.ts +7 -7
  133. package/dist/types/src/common/translations.d.ts.map +1 -1
  134. package/dist/types/src/context.d.ts +5 -0
  135. package/dist/types/src/context.d.ts.map +1 -0
  136. package/dist/types/src/core/{events.d.ts → activation-event.d.ts} +7 -7
  137. package/dist/types/src/core/activation-event.d.ts.map +1 -0
  138. package/dist/types/src/core/capability-manager.d.ts +48 -0
  139. package/dist/types/src/core/capability-manager.d.ts.map +1 -0
  140. package/dist/types/src/core/capability-manager.test.d.ts +2 -0
  141. package/dist/types/src/core/capability-manager.test.d.ts.map +1 -0
  142. package/dist/types/src/core/capability.d.ts +156 -0
  143. package/dist/types/src/core/capability.d.ts.map +1 -0
  144. package/dist/types/src/core/index.d.ts +6 -4
  145. package/dist/types/src/core/index.d.ts.map +1 -1
  146. package/dist/types/src/core/plugin-manager.d.ts +78 -0
  147. package/dist/types/src/core/plugin-manager.d.ts.map +1 -0
  148. package/dist/types/src/core/plugin-manager.test.d.ts +2 -0
  149. package/dist/types/src/core/plugin-manager.test.d.ts.map +1 -0
  150. package/dist/types/src/core/plugin.d.ts +127 -39
  151. package/dist/types/src/core/plugin.d.ts.map +1 -1
  152. package/dist/types/src/core/url-loader.d.ts +42 -0
  153. package/dist/types/src/core/url-loader.d.ts.map +1 -0
  154. package/dist/types/src/core/url-loader.test.d.ts +2 -0
  155. package/dist/types/src/core/url-loader.test.d.ts.map +1 -0
  156. package/dist/types/src/index.d.ts +3 -4
  157. package/dist/types/src/index.d.ts.map +1 -1
  158. package/dist/types/src/plugin-operation/OperationPlugin.d.ts +3 -0
  159. package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +1 -0
  160. package/dist/types/src/plugin-operation/history/capability.d.ts +7 -0
  161. package/dist/types/src/plugin-operation/history/capability.d.ts.map +1 -0
  162. package/dist/types/src/plugin-operation/history/errors.d.ts +32 -0
  163. package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -0
  164. package/dist/types/src/plugin-operation/history/history-tracker.d.ts +18 -0
  165. package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +1 -0
  166. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts +2 -0
  167. package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts.map +1 -0
  168. package/dist/types/src/plugin-operation/history/index.d.ts +6 -0
  169. package/dist/types/src/plugin-operation/history/index.d.ts.map +1 -0
  170. package/dist/types/src/plugin-operation/history/types.d.ts +13 -0
  171. package/dist/types/src/plugin-operation/history/types.d.ts.map +1 -0
  172. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +101 -0
  173. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -0
  174. package/dist/types/src/plugin-operation/history/undo-registry.d.ts +23 -0
  175. package/dist/types/src/plugin-operation/history/undo-registry.d.ts.map +1 -0
  176. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts +2 -0
  177. package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts.map +1 -0
  178. package/dist/types/src/plugin-operation/index.d.ts +3 -0
  179. package/dist/types/src/plugin-operation/index.d.ts.map +1 -0
  180. package/dist/types/src/plugin-operation/invoker-capability.d.ts +6 -0
  181. package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -0
  182. package/dist/types/src/plugin-operation/meta.d.ts +3 -0
  183. package/dist/types/src/plugin-operation/meta.d.ts.map +1 -0
  184. package/dist/types/src/plugin-operation/testing.d.ts +58 -0
  185. package/dist/types/src/plugin-operation/testing.d.ts.map +1 -0
  186. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts +3 -0
  187. package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +1 -0
  188. package/dist/types/src/plugin-runtime/capability.d.ts +6 -0
  189. package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -0
  190. package/dist/types/src/plugin-runtime/index.d.ts +2 -0
  191. package/dist/types/src/plugin-runtime/index.d.ts.map +1 -0
  192. package/dist/types/src/plugin-runtime/meta.d.ts +3 -0
  193. package/dist/types/src/plugin-runtime/meta.d.ts.map +1 -0
  194. package/dist/types/src/testing/harness.d.ts +67 -0
  195. package/dist/types/src/testing/harness.d.ts.map +1 -0
  196. package/dist/types/src/testing/index.d.ts +2 -0
  197. package/dist/types/src/testing/index.d.ts.map +1 -1
  198. package/dist/types/src/testing/react.d.ts +27 -0
  199. package/dist/types/src/testing/react.d.ts.map +1 -0
  200. package/dist/types/src/testing/react.test.d.ts +2 -0
  201. package/dist/types/src/testing/react.test.d.ts.map +1 -0
  202. package/dist/types/src/testing/service.d.ts +8 -0
  203. package/dist/types/src/testing/service.d.ts.map +1 -0
  204. package/dist/types/src/testing/withPluginManager.d.ts +7 -6
  205. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  206. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  207. package/dist/types/src/ui/components/App/App.d.ts +9 -0
  208. package/dist/types/src/ui/components/App/App.d.ts.map +1 -0
  209. package/dist/types/src/ui/components/App/App.stories.d.ts +19 -0
  210. package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -0
  211. package/dist/types/src/ui/components/App/index.d.ts +2 -0
  212. package/dist/types/src/ui/components/App/index.d.ts.map +1 -0
  213. package/dist/types/src/{playground/playground.stories.d.ts → ui/components/PluginManager/PluginManagerContext.stories.d.ts} +5 -3
  214. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -0
  215. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts +10 -0
  216. package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts.map +1 -0
  217. package/dist/types/src/ui/components/PluginManager/index.d.ts +2 -0
  218. package/dist/types/src/ui/components/PluginManager/index.d.ts.map +1 -0
  219. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +24 -0
  220. package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -0
  221. package/dist/types/src/{components/App.stories.d.ts → ui/components/Surface/SurfaceComponent.stories.d.ts} +1 -1
  222. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -0
  223. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts +11 -0
  224. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -0
  225. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts +48 -0
  226. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts.map +1 -0
  227. package/dist/types/src/ui/components/Surface/context.d.ts +5 -0
  228. package/dist/types/src/ui/components/Surface/context.d.ts.map +1 -0
  229. package/dist/types/src/ui/components/Surface/index.d.ts +36 -0
  230. package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -0
  231. package/dist/types/src/ui/components/Surface/types.d.ts +197 -0
  232. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -0
  233. package/dist/types/src/ui/components/Surface/types.test.d.ts +2 -0
  234. package/dist/types/src/ui/components/Surface/types.test.d.ts.map +1 -0
  235. package/dist/types/src/ui/components/index.d.ts +4 -0
  236. package/dist/types/src/ui/components/index.d.ts.map +1 -0
  237. package/dist/types/src/ui/hooks/index.d.ts +6 -0
  238. package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
  239. package/dist/types/src/ui/hooks/useApp.d.ts +62 -0
  240. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
  241. package/dist/types/src/ui/hooks/useApp.test.d.ts +2 -0
  242. package/dist/types/src/ui/hooks/useApp.test.d.ts.map +1 -0
  243. package/dist/types/src/ui/hooks/useCapabilities.d.ts +31 -0
  244. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
  245. package/dist/types/src/{components → ui/hooks}/useLoading.d.ts +1 -2
  246. package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
  247. package/dist/types/src/ui/hooks/useSettingsState.d.ts +10 -0
  248. package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
  249. package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
  250. package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
  251. package/dist/types/src/ui/index.d.ts +3 -0
  252. package/dist/types/src/ui/index.d.ts.map +1 -0
  253. package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts +50 -0
  254. package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts.map +1 -0
  255. package/dist/types/src/vite-plugin/boot-loader/index.d.ts +51 -0
  256. package/dist/types/src/vite-plugin/boot-loader/index.d.ts.map +1 -0
  257. package/dist/types/src/vite-plugin/composer/index.d.ts +34 -0
  258. package/dist/types/src/vite-plugin/composer/index.d.ts.map +1 -0
  259. package/dist/types/src/vite-plugin/import-map/index.d.ts +16 -0
  260. package/dist/types/src/vite-plugin/import-map/index.d.ts.map +1 -0
  261. package/dist/types/src/vite-plugin/index.d.ts +5 -0
  262. package/dist/types/src/vite-plugin/index.d.ts.map +1 -0
  263. package/dist/types/src/vite-plugin/manifest.d.ts +16 -0
  264. package/dist/types/src/vite-plugin/manifest.d.ts.map +1 -0
  265. package/dist/types/src/vite-plugin/manifest.test.d.ts +2 -0
  266. package/dist/types/src/vite-plugin/manifest.test.d.ts.map +1 -0
  267. package/dist/types/src/vite-plugin/packages.d.ts +13 -0
  268. package/dist/types/src/vite-plugin/packages.d.ts.map +1 -0
  269. package/dist/types/tsconfig.tsbuildinfo +1 -1
  270. package/moon.yml +25 -6
  271. package/package.json +110 -55
  272. package/src/cli/cli.ts +107 -0
  273. package/src/{components → cli}/index.ts +1 -1
  274. package/src/common/activation-events.ts +44 -0
  275. package/src/common/capabilities.ts +168 -213
  276. package/src/common/index.ts +4 -8
  277. package/src/common/operations.ts +35 -0
  278. package/src/common/translations.ts +17 -9
  279. package/src/context.ts +9 -0
  280. package/src/core/{events.ts → activation-event.ts} +10 -7
  281. package/src/core/capability-manager.test.ts +151 -0
  282. package/src/core/capability-manager.ts +192 -0
  283. package/src/core/capability.ts +247 -0
  284. package/src/core/index.ts +6 -4
  285. package/src/core/plugin-manager.test.ts +1142 -0
  286. package/src/core/plugin-manager.ts +893 -0
  287. package/src/core/plugin.ts +263 -46
  288. package/src/core/url-loader.test.ts +112 -0
  289. package/src/core/url-loader.ts +178 -0
  290. package/src/index.ts +3 -4
  291. package/src/plugin-operation/OperationPlugin.ts +24 -0
  292. package/src/plugin-operation/history/capability.ts +36 -0
  293. package/src/plugin-operation/history/errors.ts +7 -0
  294. package/src/plugin-operation/history/history-tracker.test.ts +373 -0
  295. package/src/plugin-operation/history/history-tracker.ts +128 -0
  296. package/src/plugin-operation/history/index.ts +9 -0
  297. package/src/plugin-operation/history/types.ts +17 -0
  298. package/src/plugin-operation/history/undo-mapping.ts +135 -0
  299. package/src/plugin-operation/history/undo-registry.test.ts +72 -0
  300. package/src/plugin-operation/history/undo-registry.ts +54 -0
  301. package/src/plugin-operation/index.ts +6 -0
  302. package/src/plugin-operation/invoker-capability.ts +54 -0
  303. package/src/plugin-operation/meta.ts +11 -0
  304. package/src/plugin-operation/testing.ts +154 -0
  305. package/src/plugin-runtime/RuntimePlugin.ts +19 -0
  306. package/src/plugin-runtime/capability.ts +53 -0
  307. package/src/{playground/logger → plugin-runtime}/index.ts +1 -1
  308. package/src/plugin-runtime/meta.ts +11 -0
  309. package/src/testing/harness.ts +229 -0
  310. package/src/testing/index.ts +2 -0
  311. package/src/testing/react.test.tsx +48 -0
  312. package/src/testing/react.tsx +113 -0
  313. package/src/testing/service.ts +52 -0
  314. package/src/testing/withPluginManager.stories.tsx +7 -8
  315. package/src/testing/withPluginManager.tsx +68 -40
  316. package/src/ui/components/App/App.stories.tsx +92 -0
  317. package/src/ui/components/App/App.tsx +70 -0
  318. package/src/{playground/debug → ui/components/App}/index.ts +1 -1
  319. package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +183 -0
  320. package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +3 -3
  321. package/src/ui/components/PluginManager/index.ts +5 -0
  322. package/src/ui/components/Surface/SurfaceComponent.stories.tsx +144 -0
  323. package/src/ui/components/Surface/SurfaceComponent.tsx +303 -0
  324. package/src/ui/components/Surface/SurfaceInfo.tsx +107 -0
  325. package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
  326. package/src/ui/components/Surface/context.ts +12 -0
  327. package/src/ui/components/Surface/index.ts +54 -0
  328. package/src/ui/components/Surface/types.test.ts +126 -0
  329. package/src/ui/components/Surface/types.ts +269 -0
  330. package/src/ui/components/index.ts +7 -0
  331. package/src/ui/hooks/index.ts +9 -0
  332. package/src/ui/hooks/useApp.test.tsx +159 -0
  333. package/src/ui/hooks/useApp.tsx +289 -0
  334. package/src/ui/hooks/useCapabilities.ts +67 -0
  335. package/src/{components → ui/hooks}/useLoading.tsx +4 -6
  336. package/src/ui/hooks/useSettingsState.ts +26 -0
  337. package/src/ui/hooks/useSurface.ts +13 -0
  338. package/src/ui/index.ts +6 -0
  339. package/src/vite-plugin/boot-loader/BootLoader.stories.tsx +162 -0
  340. package/src/vite-plugin/boot-loader/boot-loader.css +117 -0
  341. package/src/vite-plugin/boot-loader/boot-loader.js +55 -0
  342. package/src/vite-plugin/boot-loader/index.ts +99 -0
  343. package/src/vite-plugin/composer/index.ts +284 -0
  344. package/src/vite-plugin/import-map/index.ts +490 -0
  345. package/src/vite-plugin/index.ts +10 -0
  346. package/src/vite-plugin/manifest.test.ts +23 -0
  347. package/src/vite-plugin/manifest.ts +20 -0
  348. package/src/vite-plugin/packages.ts +181 -0
  349. package/tsconfig.json +13 -19
  350. package/tsconfig.node.json +2 -4
  351. package/typedoc.json +2 -4
  352. package/vitest.config.ts +1 -1
  353. package/.swc/plugins/linux_x86_64_19.0.0/fce1bdb8e20a094e4af08bad09cc81497ed0e2e7c51223b07d371063cca18429.wasmer-v7 +0 -0
  354. package/dist/lib/browser/app-graph-builder-LG4RG2LM.mjs +0 -138
  355. package/dist/lib/browser/app-graph-builder-LG4RG2LM.mjs.map +0 -7
  356. package/dist/lib/browser/chunk-2GRQ4QXA.mjs +0 -1646
  357. package/dist/lib/browser/chunk-2GRQ4QXA.mjs.map +0 -7
  358. package/dist/lib/browser/chunk-FRUTKCPG.mjs +0 -467
  359. package/dist/lib/browser/chunk-FRUTKCPG.mjs.map +0 -7
  360. package/dist/lib/browser/chunk-SCPE4ZO2.mjs +0 -35
  361. package/dist/lib/browser/chunk-SCPE4ZO2.mjs.map +0 -7
  362. package/dist/lib/browser/intent-dispatcher-6SHA5B3N.mjs +0 -11
  363. package/dist/lib/browser/intent-resolver-UZZ4OANZ.mjs +0 -39
  364. package/dist/lib/browser/intent-resolver-UZZ4OANZ.mjs.map +0 -7
  365. package/dist/lib/browser/store-ACBEYK4B.mjs +0 -30
  366. package/dist/lib/browser/store-ACBEYK4B.mjs.map +0 -7
  367. package/dist/lib/browser/worker.mjs +0 -77
  368. package/dist/lib/node-esm/app-graph-builder-FMHVHPWA.mjs +0 -139
  369. package/dist/lib/node-esm/app-graph-builder-FMHVHPWA.mjs.map +0 -7
  370. package/dist/lib/node-esm/chunk-CXT6CYPE.mjs +0 -468
  371. package/dist/lib/node-esm/chunk-CXT6CYPE.mjs.map +0 -7
  372. package/dist/lib/node-esm/chunk-KSPOOYT3.mjs +0 -1648
  373. package/dist/lib/node-esm/chunk-KSPOOYT3.mjs.map +0 -7
  374. package/dist/lib/node-esm/chunk-ZX63QUGE.mjs +0 -37
  375. package/dist/lib/node-esm/chunk-ZX63QUGE.mjs.map +0 -7
  376. package/dist/lib/node-esm/intent-dispatcher-SIYQ5ZIU.mjs +0 -12
  377. package/dist/lib/node-esm/intent-resolver-7FYJMXAG.mjs +0 -40
  378. package/dist/lib/node-esm/intent-resolver-7FYJMXAG.mjs.map +0 -7
  379. package/dist/lib/node-esm/store-6OBLTVXC.mjs +0 -31
  380. package/dist/lib/node-esm/store-6OBLTVXC.mjs.map +0 -7
  381. package/dist/lib/node-esm/worker.mjs +0 -78
  382. package/dist/types/src/common/collaboration.d.ts +0 -20
  383. package/dist/types/src/common/collaboration.d.ts.map +0 -1
  384. package/dist/types/src/common/events.d.ts +0 -52
  385. package/dist/types/src/common/events.d.ts.map +0 -1
  386. package/dist/types/src/common/file.d.ts +0 -14
  387. package/dist/types/src/common/file.d.ts.map +0 -1
  388. package/dist/types/src/common/graph.d.ts +0 -21
  389. package/dist/types/src/common/graph.d.ts.map +0 -1
  390. package/dist/types/src/common/layout.d.ts +0 -279
  391. package/dist/types/src/common/layout.d.ts.map +0 -1
  392. package/dist/types/src/common/surface.d.ts +0 -59
  393. package/dist/types/src/common/surface.d.ts.map +0 -1
  394. package/dist/types/src/components/App.d.ts +0 -10
  395. package/dist/types/src/components/App.d.ts.map +0 -1
  396. package/dist/types/src/components/App.stories.d.ts.map +0 -1
  397. package/dist/types/src/components/DefaultFallback.d.ts +0 -8
  398. package/dist/types/src/components/DefaultFallback.d.ts.map +0 -1
  399. package/dist/types/src/components/index.d.ts +0 -2
  400. package/dist/types/src/components/index.d.ts.map +0 -1
  401. package/dist/types/src/components/useApp.d.ts +0 -44
  402. package/dist/types/src/components/useApp.d.ts.map +0 -1
  403. package/dist/types/src/components/useLoading.d.ts.map +0 -1
  404. package/dist/types/src/core/capabilities.d.ts +0 -117
  405. package/dist/types/src/core/capabilities.d.ts.map +0 -1
  406. package/dist/types/src/core/capabilities.test.d.ts +0 -2
  407. package/dist/types/src/core/capabilities.test.d.ts.map +0 -1
  408. package/dist/types/src/core/events.d.ts.map +0 -1
  409. package/dist/types/src/core/manager.d.ts +0 -126
  410. package/dist/types/src/core/manager.d.ts.map +0 -1
  411. package/dist/types/src/core/manager.test.d.ts +0 -2
  412. package/dist/types/src/core/manager.test.d.ts.map +0 -1
  413. package/dist/types/src/playground/debug/Debug.d.ts +0 -6
  414. package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
  415. package/dist/types/src/playground/debug/index.d.ts +0 -2
  416. package/dist/types/src/playground/debug/index.d.ts.map +0 -1
  417. package/dist/types/src/playground/debug/plugin.d.ts +0 -2
  418. package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
  419. package/dist/types/src/playground/generator/Main.d.ts +0 -6
  420. package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
  421. package/dist/types/src/playground/generator/Toolbar.d.ts +0 -6
  422. package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
  423. package/dist/types/src/playground/generator/generator.d.ts +0 -7
  424. package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
  425. package/dist/types/src/playground/generator/index.d.ts +0 -3
  426. package/dist/types/src/playground/generator/index.d.ts.map +0 -1
  427. package/dist/types/src/playground/generator/plugin.d.ts +0 -2
  428. package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
  429. package/dist/types/src/playground/layout/Layout.d.ts +0 -8
  430. package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
  431. package/dist/types/src/playground/layout/index.d.ts +0 -2
  432. package/dist/types/src/playground/layout/index.d.ts.map +0 -1
  433. package/dist/types/src/playground/layout/plugin.d.ts +0 -2
  434. package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
  435. package/dist/types/src/playground/logger/Toolbar.d.ts +0 -6
  436. package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
  437. package/dist/types/src/playground/logger/index.d.ts +0 -2
  438. package/dist/types/src/playground/logger/index.d.ts.map +0 -1
  439. package/dist/types/src/playground/logger/plugin.d.ts +0 -2
  440. package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
  441. package/dist/types/src/playground/logger/schema.d.ts +0 -13
  442. package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
  443. package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
  444. package/dist/types/src/plugin-intent/IntentPlugin.d.ts +0 -2
  445. package/dist/types/src/plugin-intent/IntentPlugin.d.ts.map +0 -1
  446. package/dist/types/src/plugin-intent/actions.d.ts +0 -36
  447. package/dist/types/src/plugin-intent/actions.d.ts.map +0 -1
  448. package/dist/types/src/plugin-intent/errors.d.ts +0 -16
  449. package/dist/types/src/plugin-intent/errors.d.ts.map +0 -1
  450. package/dist/types/src/plugin-intent/index.d.ts +0 -6
  451. package/dist/types/src/plugin-intent/index.d.ts.map +0 -1
  452. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +0 -139
  453. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +0 -1
  454. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts +0 -2
  455. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts.map +0 -1
  456. package/dist/types/src/plugin-intent/intent.d.ts +0 -63
  457. package/dist/types/src/plugin-intent/intent.d.ts.map +0 -1
  458. package/dist/types/src/plugin-intent/meta.d.ts +0 -3
  459. package/dist/types/src/plugin-intent/meta.d.ts.map +0 -1
  460. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -2
  461. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  462. package/dist/types/src/plugin-settings/actions.d.ts +0 -25
  463. package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
  464. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -4
  465. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
  466. package/dist/types/src/plugin-settings/index.d.ts +0 -3
  467. package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
  468. package/dist/types/src/plugin-settings/intent-resolver.d.ts +0 -4
  469. package/dist/types/src/plugin-settings/intent-resolver.d.ts.map +0 -1
  470. package/dist/types/src/plugin-settings/meta.d.ts +0 -3
  471. package/dist/types/src/plugin-settings/meta.d.ts.map +0 -1
  472. package/dist/types/src/plugin-settings/store.d.ts +0 -5
  473. package/dist/types/src/plugin-settings/store.d.ts.map +0 -1
  474. package/dist/types/src/plugin-settings/translations.d.ts +0 -11
  475. package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
  476. package/dist/types/src/react/ErrorBoundary.d.ts +0 -30
  477. package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
  478. package/dist/types/src/react/IntentContext.d.ts +0 -8
  479. package/dist/types/src/react/IntentContext.d.ts.map +0 -1
  480. package/dist/types/src/react/PluginManagerProvider.d.ts +0 -10
  481. package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
  482. package/dist/types/src/react/Surface.d.ts +0 -12
  483. package/dist/types/src/react/Surface.d.ts.map +0 -1
  484. package/dist/types/src/react/Surface.stories.d.ts +0 -17
  485. package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
  486. package/dist/types/src/react/common.d.ts +0 -13
  487. package/dist/types/src/react/common.d.ts.map +0 -1
  488. package/dist/types/src/react/index.d.ts +0 -7
  489. package/dist/types/src/react/index.d.ts.map +0 -1
  490. package/dist/types/src/react/useCapabilities.d.ts +0 -13
  491. package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
  492. package/dist/types/src/react/useIntentResolver.d.ts +0 -3
  493. package/dist/types/src/react/useIntentResolver.d.ts.map +0 -1
  494. package/dist/types/src/worker.d.ts +0 -4
  495. package/dist/types/src/worker.d.ts.map +0 -1
  496. package/src/common/collaboration.ts +0 -18
  497. package/src/common/events.ts +0 -79
  498. package/src/common/file.ts +0 -22
  499. package/src/common/graph.ts +0 -30
  500. package/src/common/layout.ts +0 -277
  501. package/src/common/surface.ts +0 -83
  502. package/src/components/App.stories.tsx +0 -33
  503. package/src/components/App.tsx +0 -59
  504. package/src/components/DefaultFallback.tsx +0 -26
  505. package/src/components/useApp.tsx +0 -164
  506. package/src/core/capabilities.test.ts +0 -136
  507. package/src/core/capabilities.ts +0 -259
  508. package/src/core/manager.test.ts +0 -516
  509. package/src/core/manager.ts +0 -604
  510. package/src/playground/debug/Debug.tsx +0 -39
  511. package/src/playground/debug/plugin.ts +0 -16
  512. package/src/playground/generator/Main.tsx +0 -71
  513. package/src/playground/generator/Toolbar.tsx +0 -47
  514. package/src/playground/generator/generator.ts +0 -48
  515. package/src/playground/generator/index.ts +0 -6
  516. package/src/playground/generator/plugin.ts +0 -22
  517. package/src/playground/layout/Layout.tsx +0 -33
  518. package/src/playground/layout/index.ts +0 -5
  519. package/src/playground/layout/plugin.ts +0 -18
  520. package/src/playground/logger/Toolbar.tsx +0 -30
  521. package/src/playground/logger/plugin.ts +0 -41
  522. package/src/playground/logger/schema.ts +0 -12
  523. package/src/playground/playground.stories.tsx +0 -46
  524. package/src/plugin-intent/IntentPlugin.ts +0 -20
  525. package/src/plugin-intent/actions.ts +0 -31
  526. package/src/plugin-intent/errors.ts +0 -40
  527. package/src/plugin-intent/index.ts +0 -9
  528. package/src/plugin-intent/intent-dispatcher.test.ts +0 -286
  529. package/src/plugin-intent/intent-dispatcher.ts +0 -337
  530. package/src/plugin-intent/intent.ts +0 -154
  531. package/src/plugin-intent/meta.ts +0 -10
  532. package/src/plugin-settings/SettingsPlugin.ts +0 -34
  533. package/src/plugin-settings/actions.ts +0 -25
  534. package/src/plugin-settings/app-graph-builder.ts +0 -160
  535. package/src/plugin-settings/index.ts +0 -6
  536. package/src/plugin-settings/intent-resolver.ts +0 -35
  537. package/src/plugin-settings/meta.ts +0 -10
  538. package/src/plugin-settings/store.ts +0 -33
  539. package/src/plugin-settings/translations.ts +0 -19
  540. package/src/react/ErrorBoundary.tsx +0 -56
  541. package/src/react/IntentContext.tsx +0 -35
  542. package/src/react/Surface.stories.tsx +0 -101
  543. package/src/react/Surface.tsx +0 -86
  544. package/src/react/common.ts +0 -13
  545. package/src/react/index.ts +0 -10
  546. package/src/react/useCapabilities.ts +0 -31
  547. package/src/react/useIntentResolver.ts +0 -22
  548. package/src/worker.ts +0 -11
  549. /package/dist/lib/browser/{intent-dispatcher-6SHA5B3N.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  550. /package/dist/lib/browser/{worker.mjs.map → chunk-RFSO3JRG.mjs.map} +0 -0
  551. /package/dist/lib/{node-esm/intent-dispatcher-SIYQ5ZIU.mjs.map → browser/common/activation-events.mjs.map} +0 -0
  552. /package/dist/lib/{node-esm/worker.mjs.map → browser/common/capabilities.mjs.map} +0 -0
@@ -1,136 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Registry } from '@effect-rx/rx-react';
6
- import * as Effect from 'effect/Effect';
7
- import { describe, expect, it, onTestFinished } from 'vitest';
8
-
9
- import { PluginContext, defineCapability } from './capabilities';
10
-
11
- const defaultOptions = {
12
- activate: () => Effect.succeed(false),
13
- reset: () => Effect.succeed(false),
14
- };
15
-
16
- describe('PluginsContext', () => {
17
- it('should return empty array if no capabilities are contributed', () => {
18
- const registry = Registry.make();
19
- const context = new PluginContext({ registry, ...defaultOptions });
20
- const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
21
- expect(context.getCapabilities(interfaceDef)).toEqual([]);
22
- });
23
-
24
- it('should be able to contribute and request capabilities', () => {
25
- const registry = Registry.make();
26
- const context = new PluginContext({ registry, ...defaultOptions });
27
- const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
28
- const implementation = { example: 'identifier' };
29
- context.contributeCapability({ interface: interfaceDef, implementation, module: 'test' });
30
- expect(context.getCapabilities(interfaceDef)).toEqual([implementation]);
31
- });
32
-
33
- it('should be able to remove capabilities', () => {
34
- const registry = Registry.make();
35
- const context = new PluginContext({ registry, ...defaultOptions });
36
- const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
37
- const implementation = { example: 'identifier' };
38
- context.contributeCapability({ interface: interfaceDef, implementation, module: 'test' });
39
- expect(context.getCapabilities(interfaceDef)).toEqual([implementation]);
40
- context.removeCapability(interfaceDef, implementation);
41
- expect(context.getCapabilities(interfaceDef)).toEqual([]);
42
- });
43
-
44
- it('should be able to contribute and request multiple implementations', () => {
45
- const registry = Registry.make();
46
- const context = new PluginContext({ registry, ...defaultOptions });
47
- const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
48
- const implementation1 = { example: 'first' };
49
- const implementation2 = { example: 'second' };
50
- context.contributeCapability({ interface: interfaceDef, implementation: implementation1, module: 'test' });
51
- context.contributeCapability({ interface: interfaceDef, implementation: implementation2, module: 'test' });
52
- expect(context.getCapabilities(interfaceDef)).toEqual([implementation1, implementation2]);
53
- });
54
-
55
- it('should be able to request multiple capabilities', () => {
56
- const registry = Registry.make();
57
- const context = new PluginContext({ registry, ...defaultOptions });
58
- const interfaceDef1 = defineCapability<{ one: number }>('@dxos/app-framework/test/one');
59
- const interfaceDef2 = defineCapability<{ two: number }>('@dxos/app-framework/test/two');
60
- const implementation1 = { one: 1 };
61
- const implementation2 = { two: 2 };
62
- context.contributeCapability({ interface: interfaceDef1, implementation: implementation1, module: 'test' });
63
- context.contributeCapability({ interface: interfaceDef2, implementation: implementation2, module: 'test' });
64
- expect(context.getCapabilities(interfaceDef1)).toEqual([implementation1]);
65
- expect(context.getCapabilities(interfaceDef2)).toEqual([implementation2]);
66
- });
67
-
68
- it('should be reactive', () => {
69
- const registry = Registry.make();
70
- const context = new PluginContext({ registry, ...defaultOptions });
71
- const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
72
-
73
- let count = 0;
74
- const cancel = registry.subscribe(context.capabilities(interfaceDef), () => {
75
- count++;
76
- });
77
- onTestFinished(() => cancel());
78
- expect(count).toEqual(0);
79
-
80
- registry.get(context.capabilities(interfaceDef));
81
- expect(count).toEqual(1);
82
-
83
- const implementation = { example: 'identifier' };
84
- context.contributeCapability({ interface: interfaceDef, implementation, module: 'test' });
85
- expect(count).toEqual(2);
86
-
87
- context.removeCapability(interfaceDef, implementation);
88
- expect(count).toEqual(3);
89
- });
90
-
91
- it('should not be reactive to changes within the implementation', () => {
92
- const registry = Registry.make();
93
- const context = new PluginContext({ registry, ...defaultOptions });
94
- const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
95
-
96
- let count = 0;
97
- const cancel = registry.subscribe(context.capabilities(interfaceDef), () => {
98
- count++;
99
- });
100
- onTestFinished(() => cancel());
101
- expect(count).toEqual(0);
102
-
103
- registry.get(context.capabilities(interfaceDef));
104
- expect(count).toEqual(1);
105
-
106
- const implementation = { example: 'identifier' };
107
- context.contributeCapability({ interface: interfaceDef, implementation, module: 'test' });
108
- expect(count).toEqual(2);
109
-
110
- implementation.example = 'updated';
111
- expect(count).toEqual(2);
112
-
113
- const capabilities = context.getCapabilities(interfaceDef);
114
- expect(capabilities).toEqual([implementation]);
115
- expect(capabilities[0].example).toEqual('updated');
116
- expect(count).toEqual(2);
117
- });
118
-
119
- it('should be able to wait for a capability', async () => {
120
- const registry = Registry.make();
121
- const context = new PluginContext({ registry, ...defaultOptions });
122
- const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
123
-
124
- let capability: { example: string } | undefined;
125
- const cancel = registry.subscribe(context.capabilities(interfaceDef), (capabilities) => {
126
- capability = capabilities[0];
127
- });
128
- onTestFinished(() => cancel());
129
- registry.get(context.capabilities(interfaceDef));
130
- expect(capability).toBeUndefined();
131
-
132
- const implementation = { example: 'identifier' };
133
- context.contributeCapability({ interface: interfaceDef, implementation, module: 'test' });
134
- expect(capability).toEqual(implementation);
135
- });
136
- });
@@ -1,259 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type Registry, Rx } from '@effect-rx/rx-react';
6
- import * as Effect from 'effect/Effect';
7
-
8
- import { Trigger } from '@dxos/async';
9
- import { invariant } from '@dxos/invariant';
10
- import { log } from '@dxos/log';
11
- import { type MaybePromise } from '@dxos/util';
12
-
13
- import { type ActivationEvent } from './events';
14
-
15
- const InterfaceDefTypeId: unique symbol = Symbol.for('InterfaceDefTypeId');
16
-
17
- /**
18
- * The interface definition of a capability.
19
- */
20
- export type InterfaceDef<T> = {
21
- [InterfaceDefTypeId]: T;
22
- identifier: string;
23
- };
24
-
25
- export namespace InterfaceDef {
26
- export type Implementation<I extends InterfaceDef<any>> = I extends InterfaceDef<infer T> ? T : never;
27
- }
28
-
29
- /**
30
- * Helper to define the interface of a capability.
31
- */
32
- export const defineCapability = <T>(identifier: string) => {
33
- return { identifier } as InterfaceDef<T>;
34
- };
35
-
36
- /**
37
- * A unique string identifier with a Typescript type associated with it.
38
- * When a capability is contributed to the application an implementation of the interface is provided.
39
- */
40
- export type Capability<T> = {
41
- /**
42
- * The interface definition of the capability.
43
- */
44
- interface: InterfaceDef<T>;
45
-
46
- /**
47
- * The implementation of the capability.
48
- */
49
- implementation: T;
50
-
51
- /**
52
- * Called when the capability is deactivated.
53
- */
54
- deactivate?: () => MaybePromise<void> | Effect.Effect<void, Error>;
55
- };
56
-
57
- export type AnyCapability = Capability<any>;
58
-
59
- type PluginsContextOptions = {
60
- registry: Registry.Registry;
61
- activate: (event: ActivationEvent) => Effect.Effect<boolean, Error>;
62
- reset: (event: ActivationEvent) => Effect.Effect<boolean, Error>;
63
- };
64
-
65
- // NOTE: This is implemented as a class to prevent it from being proxied by PluginManager state.
66
- class CapabilityImpl<T> {
67
- constructor(
68
- readonly moduleId: string,
69
- readonly implementation: T,
70
- ) {}
71
- }
72
-
73
- /**
74
- * Helper to define the implementation of a capability.
75
- */
76
- export const contributes = <I extends InterfaceDef<any>>(
77
- interfaceDef: I,
78
- implementation: Capability<InterfaceDef.Implementation<I>>['implementation'],
79
- deactivate?: Capability<InterfaceDef.Implementation<I>>['deactivate'],
80
- ): Capability<I> => {
81
- return { interface: interfaceDef, implementation, deactivate } satisfies Capability<I>;
82
- };
83
-
84
- type LoadCapability<T, U> = () => Promise<{ default: (props: T) => MaybePromise<Capability<U>> }>;
85
- type LoadCapabilities<T> = () => Promise<{ default: (props: T) => MaybePromise<AnyCapability[]> }>;
86
-
87
- // TODO(wittjosiah): Not having the array be `any` causes type errors when using the lazy capability.
88
- type LazyCapability<T, U> = (props?: T) => Promise<() => Promise<Capability<U> | AnyCapability[]>>;
89
-
90
- /**
91
- * Helper to define a lazily loaded implementation of a capability.
92
- */
93
- export const lazy =
94
- <T, U>(c: LoadCapability<T, U> | LoadCapabilities<T>): LazyCapability<T, U> =>
95
- async (props?: T) => {
96
- const { default: getCapability } = await c();
97
- return async () => getCapability(props as T);
98
- };
99
-
100
- /**
101
- * Facilitates the dependency injection between [plugin modules](#pluginmodule) by allowing them contribute and request capabilities from each other.
102
- * It tracks the capabilities that are contributed in an in-memory live object.
103
- * This allows the application to subscribe to this state and incorporate plugins which are added dynamically.
104
- */
105
- export class PluginContext {
106
- private readonly _registry: Registry.Registry;
107
-
108
- private readonly _capabilityImpls = Rx.family<string, Rx.Writable<CapabilityImpl<unknown>[]>>(() => {
109
- return Rx.make<CapabilityImpl<unknown>[]>([]).pipe(Rx.keepAlive);
110
- });
111
-
112
- readonly _capabilities = Rx.family<string, Rx.Rx<unknown[]>>((id: string) => {
113
- return Rx.make((get) => {
114
- const current = get(this._capabilityImpls(id));
115
- return current.map((c) => c.implementation);
116
- });
117
- });
118
-
119
- readonly _capability = Rx.family<string, Rx.Rx<unknown>>((id: string) => {
120
- return Rx.make((get) => {
121
- const current = get(this._capabilities(id));
122
- invariant(current.length > 0, `No capability found for ${id}`);
123
- return current[0];
124
- });
125
- });
126
-
127
- /**
128
- * Activates plugins based on the activation event.
129
- * @param event The activation event.
130
- * @returns Whether the activation was successful.
131
- */
132
- readonly activate: PluginsContextOptions['activate'];
133
-
134
- /**
135
- * Re-activates the modules that were activated by the event.
136
- * @param event The activation event.
137
- * @returns Whether the reset was successful.
138
- */
139
- readonly reset: PluginsContextOptions['reset'];
140
-
141
- constructor({ registry, activate, reset }: PluginsContextOptions) {
142
- this._registry = registry;
143
- this.activate = activate;
144
- this.reset = reset;
145
- }
146
-
147
- /**
148
- * @internal
149
- */
150
- contributeCapability<T>({
151
- module: moduleId,
152
- interface: interfaceDef,
153
- implementation,
154
- }: {
155
- module: string;
156
- interface: InterfaceDef<T>;
157
- implementation: T;
158
- }): void {
159
- const current = this._registry.get(this._capabilityImpls(interfaceDef.identifier));
160
- const capability = new CapabilityImpl(moduleId, implementation);
161
- if (current.includes(capability)) {
162
- return;
163
- }
164
-
165
- this._registry.set(this._capabilityImpls(interfaceDef.identifier), [...current, capability]);
166
- log('capability contributed', {
167
- id: interfaceDef.identifier,
168
- moduleId,
169
- count: current.length,
170
- });
171
- }
172
-
173
- /**
174
- * @internal
175
- */
176
- removeCapability<T>(interfaceDef: InterfaceDef<T>, implementation: T): void {
177
- const current = this._registry.get(this._capabilityImpls(interfaceDef.identifier));
178
- if (current.length === 0) {
179
- return;
180
- }
181
-
182
- const next = current.filter((c) => c.implementation !== implementation);
183
- if (next.length !== current.length) {
184
- this._registry.set(this._capabilityImpls(interfaceDef.identifier), next);
185
- log('capability removed', { id: interfaceDef.identifier, count: current.length });
186
- } else {
187
- log.warn('capability not removed', { id: interfaceDef.identifier });
188
- }
189
- }
190
-
191
- /**
192
- * Get the Rx reference to the available capabilities for a given interface.
193
- * Primarily useful for deriving other Rx values based on the capabilities or
194
- * for subscribing to changes in the capabilities.
195
- * @returns An Rx reference to the available capabilities.
196
- */
197
- capabilities<T>(interfaceDef: InterfaceDef<T>): Rx.Rx<T[]> {
198
- // NOTE: This the type-checking for capabilities is done at the time of contribution.
199
- return this._capabilities(interfaceDef.identifier) as Rx.Rx<T[]>;
200
- }
201
-
202
- /**
203
- * Get the Rx reference to the available capabilities for a given interface.
204
- * Primarily useful for deriving other Rx values based on the capability or
205
- * for subscribing to changes in the capability.
206
- * @returns An Rx reference to the available capability.
207
- * @throws If no capability is found.
208
- */
209
- capability<T>(interfaceDef: InterfaceDef<T>): Rx.Rx<T> {
210
- // NOTE: This the type-checking for capabilities is done at the time of contribution.
211
- return this._capability(interfaceDef.identifier) as Rx.Rx<T>;
212
- }
213
-
214
- /**
215
- * Get capabilities from the plugin context.
216
- * @returns An array of capabilities.
217
- */
218
- getCapabilities<T>(interfaceDef: InterfaceDef<T>): T[] {
219
- return this._registry.get(this.capabilities(interfaceDef));
220
- }
221
-
222
- /**
223
- * Requests a single capability from the plugin context.
224
- * @returns The capability.
225
- * @throws If no capability is found.
226
- */
227
- getCapability<T>(interfaceDef: InterfaceDef<T>): T {
228
- return this._registry.get(this.capability(interfaceDef));
229
- }
230
-
231
- /**
232
- * Waits for a capability to be available.
233
- * @returns The capability.
234
- */
235
- async waitForCapability<T>(interfaceDef: InterfaceDef<T>): Promise<T> {
236
- const [capability] = this.getCapabilities(interfaceDef);
237
- if (capability) {
238
- return capability;
239
- }
240
-
241
- const trigger = new Trigger<T>();
242
- const cancel = this._registry.subscribe(this.capabilities(interfaceDef), (capabilities) => {
243
- if (capabilities.length > 0) {
244
- trigger.wake(capabilities[0]);
245
- }
246
- });
247
- const result = await trigger.wait();
248
- cancel();
249
- return result;
250
- }
251
-
252
- async activatePromise(event: ActivationEvent): Promise<boolean> {
253
- return this.activate(event).pipe(Effect.runPromise);
254
- }
255
-
256
- async resetPromise(event: ActivationEvent): Promise<boolean> {
257
- return this.reset(event).pipe(Effect.runPromise);
258
- }
259
- }