@dxos/app-framework 0.8.2-main.f11618f → 0.8.2-staging.42af850

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 (315) hide show
  1. package/dist/lib/browser/{app-graph-builder-OHM2Z6YQ.mjs → app-graph-builder-DYEAGZPS.mjs} +23 -23
  2. package/dist/lib/browser/app-graph-builder-DYEAGZPS.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-DVNSCQJ5.mjs → chunk-5GE2ERNU.mjs} +314 -280
  4. package/dist/lib/browser/chunk-5GE2ERNU.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-SFPT4Z2C.mjs → chunk-WWEJRWFX.mjs} +10 -10
  6. package/dist/lib/browser/chunk-WWEJRWFX.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-X2YC645Z.mjs → chunk-ZMXJV64L.mjs} +122 -62
  8. package/dist/lib/browser/chunk-ZMXJV64L.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +10 -10
  10. package/dist/lib/browser/{intent-dispatcher-J7QIFHLO.mjs → intent-dispatcher-ELZN5EM7.mjs} +2 -2
  11. package/dist/lib/browser/{intent-resolver-QV5MDMDV.mjs → intent-resolver-SGWLINTO.mjs} +3 -3
  12. package/dist/lib/browser/meta.json +1 -1
  13. package/dist/lib/browser/{store-XMPVLJOQ.mjs → store-YIU6IPZ2.mjs} +7 -6
  14. package/dist/lib/browser/store-YIU6IPZ2.mjs.map +7 -0
  15. package/dist/lib/browser/testing/index.mjs +30 -14
  16. package/dist/lib/browser/testing/index.mjs.map +3 -3
  17. package/dist/lib/browser/worker.mjs +3 -3
  18. package/dist/lib/node/app-graph-builder-GBLISL7L.cjs +146 -0
  19. package/dist/lib/node/app-graph-builder-GBLISL7L.cjs.map +7 -0
  20. package/dist/lib/node/{chunk-JUSEAFDU.cjs → chunk-G774ASXO.cjs} +5 -5
  21. package/dist/lib/node/chunk-G774ASXO.cjs.map +7 -0
  22. package/dist/lib/node/{chunk-I3CJYEBC.cjs → chunk-HIVITTZD.cjs} +156 -122
  23. package/dist/lib/node/chunk-HIVITTZD.cjs.map +7 -0
  24. package/dist/lib/node/{chunk-5UOVF3OR.cjs → chunk-Z2PMVDJ5.cjs} +155 -95
  25. package/dist/lib/node/chunk-Z2PMVDJ5.cjs.map +7 -0
  26. package/dist/lib/node/index.cjs +81 -81
  27. package/dist/lib/node/{intent-dispatcher-FQPJNKIZ.cjs → intent-dispatcher-LFXZJTAS.cjs} +8 -8
  28. package/dist/lib/node/{intent-dispatcher-FQPJNKIZ.cjs.map → intent-dispatcher-LFXZJTAS.cjs.map} +2 -2
  29. package/dist/lib/node/{intent-resolver-PBAOGJS6.cjs → intent-resolver-EPSFTHL6.cjs} +12 -12
  30. package/dist/lib/node/meta.json +1 -1
  31. package/dist/lib/node/{store-N7JLYYDI.cjs → store-CVVRXUTH.cjs} +10 -9
  32. package/dist/lib/node/store-CVVRXUTH.cjs.map +7 -0
  33. package/dist/lib/node/testing/index.cjs +34 -17
  34. package/dist/lib/node/testing/index.cjs.map +3 -3
  35. package/dist/lib/node/worker.cjs +39 -39
  36. package/dist/lib/node/worker.cjs.map +1 -1
  37. package/dist/lib/node-esm/{app-graph-builder-OMH534A4.mjs → app-graph-builder-LUBDEIT6.mjs} +23 -23
  38. package/dist/lib/node-esm/app-graph-builder-LUBDEIT6.mjs.map +7 -0
  39. package/dist/lib/node-esm/{chunk-QHXUTJHE.mjs → chunk-6IKYKERU.mjs} +122 -62
  40. package/dist/lib/node-esm/chunk-6IKYKERU.mjs.map +7 -0
  41. package/dist/lib/node-esm/{chunk-PHOUQACM.mjs → chunk-I6BVZMAH.mjs} +10 -10
  42. package/dist/lib/node-esm/chunk-I6BVZMAH.mjs.map +7 -0
  43. package/dist/lib/node-esm/{chunk-GSDBF2CK.mjs → chunk-Z2ZHH4HN.mjs} +314 -280
  44. package/dist/lib/node-esm/chunk-Z2ZHH4HN.mjs.map +7 -0
  45. package/dist/lib/node-esm/index.mjs +10 -10
  46. package/dist/lib/node-esm/{intent-dispatcher-QDUGA7NT.mjs → intent-dispatcher-A2JCMWRD.mjs} +2 -2
  47. package/dist/lib/node-esm/{intent-resolver-P7TC5RBD.mjs → intent-resolver-5C4O43GK.mjs} +3 -3
  48. package/dist/lib/node-esm/meta.json +1 -1
  49. package/dist/lib/node-esm/{store-M2BYJL6K.mjs → store-HRZXZ2D2.mjs} +7 -6
  50. package/dist/lib/node-esm/store-HRZXZ2D2.mjs.map +7 -0
  51. package/dist/lib/node-esm/testing/index.mjs +30 -14
  52. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  53. package/dist/lib/node-esm/worker.mjs +3 -3
  54. package/dist/types/src/App.d.ts +3 -1
  55. package/dist/types/src/App.d.ts.map +1 -1
  56. package/dist/types/src/common/capabilities.d.ts +40 -222
  57. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  58. package/dist/types/src/common/collaboration.d.ts +8 -8
  59. package/dist/types/src/common/collaboration.d.ts.map +1 -1
  60. package/dist/types/src/common/events.d.ts.map +1 -1
  61. package/dist/types/src/common/file.d.ts +7 -7
  62. package/dist/types/src/common/file.d.ts.map +1 -1
  63. package/dist/types/src/common/layout.d.ts +165 -163
  64. package/dist/types/src/common/layout.d.ts.map +1 -1
  65. package/dist/types/src/common/surface.d.ts.map +1 -1
  66. package/dist/types/src/common/translations.d.ts +7 -7
  67. package/dist/types/src/common/translations.d.ts.map +1 -1
  68. package/dist/types/src/core/capabilities.d.ts +28 -13
  69. package/dist/types/src/core/capabilities.d.ts.map +1 -1
  70. package/dist/types/src/core/events.d.ts.map +1 -1
  71. package/dist/types/src/core/manager.d.ts +6 -3
  72. package/dist/types/src/core/manager.d.ts.map +1 -1
  73. package/dist/types/src/core/plugin.d.ts +2 -2
  74. package/dist/types/src/core/plugin.d.ts.map +1 -1
  75. package/dist/types/src/helpers.d.ts.map +1 -1
  76. package/dist/types/src/playground/generator/generator.d.ts.map +1 -1
  77. package/dist/types/src/playground/logger/schema.d.ts +6 -6
  78. package/dist/types/src/playground/logger/schema.d.ts.map +1 -1
  79. package/dist/types/src/playground/playground.stories.d.ts.map +1 -1
  80. package/dist/types/src/plugin-intent/actions.d.ts +14 -14
  81. package/dist/types/src/plugin-intent/actions.d.ts.map +1 -1
  82. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +3 -3
  83. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +1 -1
  84. package/dist/types/src/plugin-intent/intent.d.ts +14 -20
  85. package/dist/types/src/plugin-intent/intent.d.ts.map +1 -1
  86. package/dist/types/src/plugin-settings/actions.d.ts +10 -10
  87. package/dist/types/src/plugin-settings/actions.d.ts.map +1 -1
  88. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +2 -195
  89. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +1 -1
  90. package/dist/types/src/plugin-settings/store.d.ts +2 -2
  91. package/dist/types/src/plugin-settings/store.d.ts.map +1 -1
  92. package/dist/types/src/react/ErrorBoundary.d.ts +1 -1
  93. package/dist/types/src/react/ErrorBoundary.d.ts.map +1 -1
  94. package/dist/types/src/react/IntentContext.d.ts.map +1 -1
  95. package/dist/types/src/react/Surface.d.ts +2 -2
  96. package/dist/types/src/react/Surface.d.ts.map +1 -1
  97. package/dist/types/src/react/useCapabilities.d.ts +2 -2
  98. package/dist/types/src/react/useCapabilities.d.ts.map +1 -1
  99. package/dist/types/src/react/useIntentResolver.d.ts.map +1 -1
  100. package/dist/types/src/testing/withPluginManager.d.ts +6 -2
  101. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  102. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  103. package/dist/types/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +28 -21
  105. package/src/App.tsx +97 -47
  106. package/src/common/capabilities.ts +18 -7
  107. package/src/common/collaboration.ts +9 -9
  108. package/src/common/file.ts +7 -7
  109. package/src/common/layout.ts +156 -136
  110. package/src/common/translations.ts +7 -7
  111. package/src/core/capabilities.test.ts +55 -36
  112. package/src/core/capabilities.ts +79 -59
  113. package/src/core/manager.test.ts +19 -19
  114. package/src/core/manager.ts +24 -16
  115. package/src/core/plugin.ts +2 -2
  116. package/src/playground/generator/generator.ts +4 -4
  117. package/src/playground/logger/schema.ts +5 -5
  118. package/src/playground/playground.stories.tsx +13 -9
  119. package/src/plugin-intent/actions.ts +9 -9
  120. package/src/plugin-intent/intent-dispatcher.test.ts +23 -42
  121. package/src/plugin-intent/intent-dispatcher.ts +7 -11
  122. package/src/plugin-intent/intent.ts +22 -20
  123. package/src/plugin-settings/actions.ts +8 -8
  124. package/src/plugin-settings/app-graph-builder.ts +129 -94
  125. package/src/plugin-settings/store.ts +20 -17
  126. package/src/react/ErrorBoundary.tsx +3 -3
  127. package/src/react/Surface.stories.tsx +1 -1
  128. package/src/react/Surface.tsx +3 -3
  129. package/src/react/useCapabilities.ts +9 -19
  130. package/src/testing/withPluginManager.stories.tsx +0 -1
  131. package/src/testing/withPluginManager.tsx +35 -16
  132. package/tsconfig.json +1 -53
  133. package/typedoc/assets/navigation.js +1 -1
  134. package/typedoc/assets/search.js +1 -1
  135. package/typedoc/classes/CollaborationActions.InsertContent.html +280 -280
  136. package/typedoc/classes/ErrorBoundary.html +6 -6
  137. package/typedoc/classes/IntentAction.ShowUndo.html +125 -125
  138. package/typedoc/classes/IntentAction.Track.html +239 -239
  139. package/typedoc/classes/LayoutAction.AddToast.html +163 -163
  140. package/typedoc/classes/LayoutAction.Close.html +352 -352
  141. package/typedoc/classes/LayoutAction.Expose.html +238 -238
  142. package/typedoc/classes/LayoutAction.Open.html +904 -748
  143. package/typedoc/classes/LayoutAction.RevertWorkspace.html +241 -241
  144. package/typedoc/classes/LayoutAction.ScrollIntoView.html +280 -280
  145. package/typedoc/classes/LayoutAction.Set.html +436 -358
  146. package/typedoc/classes/LayoutAction.SetLayoutMode.html +469 -391
  147. package/typedoc/classes/LayoutAction.SwitchWorkspace.html +238 -238
  148. package/typedoc/classes/LayoutAction.UpdateComplementary.html +358 -358
  149. package/typedoc/classes/LayoutAction.UpdateDialog.html +865 -475
  150. package/typedoc/classes/LayoutAction.UpdateLayout.html +281 -281
  151. package/typedoc/classes/LayoutAction.UpdatePopover.html +826 -826
  152. package/typedoc/classes/LayoutAction.UpdateSidebar.html +397 -319
  153. package/typedoc/classes/Plugin.html +3 -3
  154. package/typedoc/classes/PluginContext.html +38 -0
  155. package/typedoc/classes/PluginManager.html +17 -16
  156. package/typedoc/classes/PluginModule.html +9 -9
  157. package/typedoc/classes/SettingsAction.Open.html +199 -199
  158. package/typedoc/classes/SettingsAction.OpenPluginRegistry.html +124 -124
  159. package/typedoc/functions/Events.createStateEvent.html +2 -2
  160. package/typedoc/functions/IntentPlugin.html +1 -1
  161. package/typedoc/functions/SettingsPlugin.html +1 -1
  162. package/typedoc/functions/allOf.html +2 -2
  163. package/typedoc/functions/chain.html +2 -2
  164. package/typedoc/functions/contributes.html +2 -2
  165. package/typedoc/functions/createDispatcher.html +3 -3
  166. package/typedoc/functions/createIntent.html +3 -3
  167. package/typedoc/functions/createResolver.html +2 -2
  168. package/typedoc/functions/createSurface.html +2 -2
  169. package/typedoc/functions/defineCapability.html +2 -2
  170. package/typedoc/functions/defineEvent.html +2 -2
  171. package/typedoc/functions/defineModule.html +2 -2
  172. package/typedoc/functions/definePlugin.html +2 -2
  173. package/typedoc/functions/eventKey.html +2 -2
  174. package/typedoc/functions/getEvents.html +2 -2
  175. package/typedoc/functions/isAllOf.html +2 -2
  176. package/typedoc/functions/isOneOf.html +2 -2
  177. package/typedoc/functions/isSurfaceAvailable.html +2 -2
  178. package/typedoc/functions/lazy.html +2 -2
  179. package/typedoc/functions/oneOf.html +2 -2
  180. package/typedoc/functions/{createApp.html → useApp.html} +2 -2
  181. package/typedoc/functions/useAppGraph.html +1 -1
  182. package/typedoc/functions/useCapabilities.html +3 -3
  183. package/typedoc/functions/useCapability.html +3 -3
  184. package/typedoc/functions/useIntentDispatcher.html +1 -1
  185. package/typedoc/functions/useIntentResolver.html +1 -1
  186. package/typedoc/functions/useLayout.html +1 -1
  187. package/typedoc/functions/usePluginManager.html +2 -2
  188. package/typedoc/hierarchy.html +1 -1
  189. package/typedoc/index.html +2 -2
  190. package/typedoc/interfaces/LayoutAction.Toast.html +2 -2
  191. package/typedoc/modules/Capabilities.html +1 -1
  192. package/typedoc/modules/CollaborationActions.html +1 -1
  193. package/typedoc/modules/Events.html +1 -1
  194. package/typedoc/modules/IntentAction.html +1 -1
  195. package/typedoc/modules/LayoutAction.html +2 -2
  196. package/typedoc/modules/SettingsAction.html +1 -1
  197. package/typedoc/modules.html +1 -1
  198. package/typedoc/types/ActivationEvent.html +3 -3
  199. package/typedoc/types/ActivationEvents.html +2 -2
  200. package/typedoc/types/AnyCapability.html +1 -1
  201. package/typedoc/types/AnyIntent.html +1 -1
  202. package/typedoc/types/AnyIntentChain.html +1 -1
  203. package/typedoc/types/AnyIntentEffectResult.html +1 -1
  204. package/typedoc/types/AnyIntentResolver.html +1 -1
  205. package/typedoc/types/AnyIntentResult.html +1 -1
  206. package/typedoc/types/Capabilities.FileUploader.html +1 -1
  207. package/typedoc/types/Capabilities.IntentResolver.html +1 -1
  208. package/typedoc/types/Capabilities.Layout.html +1 -1
  209. package/typedoc/types/Capabilities.Metadata.html +1 -1
  210. package/typedoc/types/Capabilities.ReactContext.html +1 -1
  211. package/typedoc/types/Capabilities.ReactRoot.html +1 -1
  212. package/typedoc/types/Capabilities.ReactSurface.html +1 -1
  213. package/typedoc/types/Capabilities.Settings.html +2 -2
  214. package/typedoc/types/Capability.html +5 -5
  215. package/typedoc/types/CreateAppOptions.html +3 -2
  216. package/typedoc/types/FileInfo.html +1 -1
  217. package/typedoc/types/Intent.html +6 -10
  218. package/typedoc/types/IntentChain.html +3 -3
  219. package/typedoc/types/IntentContext.html +2 -2
  220. package/typedoc/types/IntentData.html +1 -1
  221. package/typedoc/types/IntentDispatcher.html +2 -2
  222. package/typedoc/types/IntentDispatcherResult.html +2 -2
  223. package/typedoc/types/IntentEffectDefinition.html +2 -2
  224. package/typedoc/types/IntentEffectResult.html +6 -6
  225. package/typedoc/types/IntentParams.html +2 -2
  226. package/typedoc/types/IntentResolver.html +2 -2
  227. package/typedoc/types/IntentResultData.html +1 -1
  228. package/typedoc/types/IntentSchema.html +1 -1
  229. package/typedoc/types/IntentUndo.html +2 -2
  230. package/typedoc/types/InterfaceDef.html +3 -3
  231. package/typedoc/types/Label.html +1 -1
  232. package/typedoc/types/NodeSerializer.html +3 -3
  233. package/typedoc/types/PluginManagerOptions.html +3 -2
  234. package/typedoc/types/PluginMeta.html +9 -9
  235. package/typedoc/types/PromiseIntentDispatcher.html +2 -2
  236. package/typedoc/types/PromiseIntentUndo.html +2 -2
  237. package/typedoc/types/Resource.html +1 -1
  238. package/typedoc/types/ResourceKey.html +1 -1
  239. package/typedoc/types/ResourceLanguage.html +1 -1
  240. package/typedoc/types/SerializedNode.html +2 -2
  241. package/typedoc/types/SurfaceComponent.html +2 -2
  242. package/typedoc/types/SurfaceDefinition.html +2 -2
  243. package/typedoc/types/SurfaceProps.html +2 -2
  244. package/typedoc/variables/Capabilities.AnchorSort.html +1 -0
  245. package/typedoc/variables/Capabilities.AppGraph.html +1 -1
  246. package/typedoc/variables/Capabilities.AppGraphBuilder.html +1 -1
  247. package/typedoc/variables/Capabilities.AppGraphSerializer.html +1 -1
  248. package/typedoc/variables/Capabilities.ArtifactDefinition.html +1 -1
  249. package/typedoc/variables/Capabilities.FileUploader.html +1 -1
  250. package/typedoc/variables/Capabilities.IntentDispatcher.html +1 -1
  251. package/typedoc/variables/Capabilities.IntentResolver.html +1 -1
  252. package/typedoc/variables/Capabilities.Layout.html +1 -1
  253. package/typedoc/variables/Capabilities.Metadata.html +1 -1
  254. package/typedoc/variables/Capabilities.Null.html +1 -1
  255. package/typedoc/variables/Capabilities.PluginManager.html +1 -1
  256. package/typedoc/variables/Capabilities.ReactContext.html +1 -1
  257. package/typedoc/variables/Capabilities.ReactRoot.html +1 -1
  258. package/typedoc/variables/Capabilities.ReactSurface.html +1 -1
  259. package/typedoc/variables/Capabilities.RxRegistry.html +1 -0
  260. package/typedoc/variables/Capabilities.Settings.html +1 -1
  261. package/typedoc/variables/Capabilities.SettingsStore.html +1 -1
  262. package/typedoc/variables/Capabilities.Tools.html +1 -1
  263. package/typedoc/variables/Capabilities.Translations.html +1 -1
  264. package/typedoc/variables/Events.AppGraphReady.html +2 -2
  265. package/typedoc/variables/Events.DispatcherReady.html +2 -2
  266. package/typedoc/variables/Events.LayoutReady.html +1 -1
  267. package/typedoc/variables/Events.SettingsReady.html +2 -2
  268. package/typedoc/variables/Events.SetupAppGraph.html +2 -2
  269. package/typedoc/variables/Events.SetupArtifactDefinition.html +2 -2
  270. package/typedoc/variables/Events.SetupIntentResolver.html +2 -2
  271. package/typedoc/variables/Events.SetupMetadata.html +2 -2
  272. package/typedoc/variables/Events.SetupReactSurface.html +2 -2
  273. package/typedoc/variables/Events.SetupSettings.html +2 -2
  274. package/typedoc/variables/Events.SetupTranslations.html +2 -2
  275. package/typedoc/variables/Events.Startup.html +2 -2
  276. package/typedoc/variables/FileInfoSchema.html +1 -1
  277. package/typedoc/variables/INTENT_ACTION.html +1 -1
  278. package/typedoc/variables/INTENT_PLUGIN.html +1 -1
  279. package/typedoc/variables/LAYOUT_ACTION.html +1 -1
  280. package/typedoc/variables/LAYOUT_PLUGIN.html +1 -1
  281. package/typedoc/variables/Label.html +1 -1
  282. package/typedoc/variables/LayoutAction.Toast.html +1 -1
  283. package/typedoc/variables/LayoutAction.UPDATE_LAYOUT.html +1 -1
  284. package/typedoc/variables/PluginManagerProvider.html +2 -2
  285. package/typedoc/variables/Resource.html +2 -2
  286. package/typedoc/variables/ResourceKey.html +1 -1
  287. package/typedoc/variables/ResourceLanguage.html +1 -1
  288. package/typedoc/variables/SETTINGS_ACTION.html +1 -1
  289. package/typedoc/variables/SETTINGS_ID.html +1 -1
  290. package/typedoc/variables/SETTINGS_KEY.html +1 -1
  291. package/typedoc/variables/SETTINGS_PLUGIN.html +1 -1
  292. package/typedoc/variables/Surface.html +2 -2
  293. package/typedoc/variables/defaultFileTypes.html +1 -1
  294. package/dist/lib/browser/app-graph-builder-OHM2Z6YQ.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-DVNSCQJ5.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-SFPT4Z2C.mjs.map +0 -7
  297. package/dist/lib/browser/chunk-X2YC645Z.mjs.map +0 -7
  298. package/dist/lib/browser/store-XMPVLJOQ.mjs.map +0 -7
  299. package/dist/lib/node/app-graph-builder-Z45FKS52.cjs +0 -146
  300. package/dist/lib/node/app-graph-builder-Z45FKS52.cjs.map +0 -7
  301. package/dist/lib/node/chunk-5UOVF3OR.cjs.map +0 -7
  302. package/dist/lib/node/chunk-I3CJYEBC.cjs.map +0 -7
  303. package/dist/lib/node/chunk-JUSEAFDU.cjs.map +0 -7
  304. package/dist/lib/node/store-N7JLYYDI.cjs.map +0 -7
  305. package/dist/lib/node-esm/app-graph-builder-OMH534A4.mjs.map +0 -7
  306. package/dist/lib/node-esm/chunk-GSDBF2CK.mjs.map +0 -7
  307. package/dist/lib/node-esm/chunk-PHOUQACM.mjs.map +0 -7
  308. package/dist/lib/node-esm/chunk-QHXUTJHE.mjs.map +0 -7
  309. package/dist/lib/node-esm/store-M2BYJL6K.mjs.map +0 -7
  310. package/typedoc/classes/PluginsContext.html +0 -25
  311. /package/dist/lib/browser/{intent-dispatcher-J7QIFHLO.mjs.map → intent-dispatcher-ELZN5EM7.mjs.map} +0 -0
  312. /package/dist/lib/browser/{intent-resolver-QV5MDMDV.mjs.map → intent-resolver-SGWLINTO.mjs.map} +0 -0
  313. /package/dist/lib/node/{intent-resolver-PBAOGJS6.cjs.map → intent-resolver-EPSFTHL6.cjs.map} +0 -0
  314. /package/dist/lib/node-esm/{intent-dispatcher-QDUGA7NT.mjs.map → intent-dispatcher-A2JCMWRD.mjs.map} +0 -0
  315. /package/dist/lib/node-esm/{intent-resolver-P7TC5RBD.mjs.map → intent-resolver-5C4O43GK.mjs.map} +0 -0
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema as S } from 'effect';
5
+ import { Schema } from 'effect';
6
6
 
7
7
  import { Label } from '../plugin-intent';
8
8
 
@@ -18,17 +18,17 @@ export namespace LayoutAction {
18
18
  /**
19
19
  * Generic layout action.
20
20
  */
21
- export class UpdateLayout extends S.TaggedClass<UpdateLayout>()(UPDATE_LAYOUT, {
22
- input: S.Struct({
23
- part: S.String.annotations({ description: 'The part of the layout to mutate.' }),
24
- subject: S.optional(S.Any.annotations({ description: 'The subject of the layout update.' })),
25
- options: S.optional(
26
- S.Record({ key: S.String, value: S.Any }).annotations({
21
+ export class UpdateLayout extends Schema.TaggedClass<UpdateLayout>()(UPDATE_LAYOUT, {
22
+ input: Schema.Struct({
23
+ part: Schema.String.annotations({ description: 'The part of the layout to mutate.' }),
24
+ subject: Schema.optional(Schema.Any.annotations({ description: 'The subject of the layout update.' })),
25
+ options: Schema.optional(
26
+ Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
27
27
  description: 'Additional options for the layout action.',
28
28
  }),
29
29
  ),
30
30
  }),
31
- output: S.Void,
31
+ output: Schema.Void,
32
32
  }) {}
33
33
 
34
34
  //
@@ -41,98 +41,112 @@ export namespace LayoutAction {
41
41
  // This allows for plugins to update the layout without depending on a specific layout plugin.
42
42
  // The expectation is that other norms other than these will emerge over time.
43
43
 
44
- export class SetLayoutMode extends S.TaggedClass<SetLayoutMode>()(UPDATE_LAYOUT, {
45
- input: S.Struct({
46
- part: S.Literal('mode').annotations({ description: 'Setting the layout mode.' }),
47
- subject: S.optional(S.String.annotations({ description: 'Item which is the subject of the new layout mode.' })),
48
- options: S.Union(
49
- S.Struct({ mode: S.String.annotations({ description: 'The new layout mode.' }) }),
50
- S.Struct({ revert: S.Boolean.annotations({ description: 'Revert to the previous layout mode.' }) }),
44
+ export class SetLayoutMode extends Schema.TaggedClass<SetLayoutMode>()(UPDATE_LAYOUT, {
45
+ input: Schema.Struct({
46
+ part: Schema.Literal('mode').annotations({ description: 'Setting the layout mode.' }),
47
+ subject: Schema.optional(
48
+ Schema.String.annotations({ description: 'Item which is the subject of the new layout mode.' }),
49
+ ),
50
+ options: Schema.Union(
51
+ Schema.Struct({ mode: Schema.String.annotations({ description: 'The new layout mode.' }) }),
52
+ Schema.Struct({ revert: Schema.Boolean.annotations({ description: 'Revert to the previous layout mode.' }) }),
51
53
  ),
52
54
  }),
53
- output: S.Void,
55
+ output: Schema.Void,
54
56
  }) {}
55
57
 
56
- export class UpdateSidebar extends S.TaggedClass<UpdateSidebar>()(UPDATE_LAYOUT, {
57
- input: S.Struct({
58
- part: S.Literal('sidebar').annotations({ description: 'Updating the sidebar.' }),
59
- subject: S.optional(S.String.annotations({ description: 'URI of the component to display in the sidebar.' })),
60
- options: S.optional(
61
- S.Struct({
62
- state: S.Literal('closed', 'collapsed', 'expanded').annotations({
58
+ export class UpdateSidebar extends Schema.TaggedClass<UpdateSidebar>()(UPDATE_LAYOUT, {
59
+ input: Schema.Struct({
60
+ part: Schema.Literal('sidebar').annotations({ description: 'Updating the sidebar.' }),
61
+ subject: Schema.optional(
62
+ Schema.String.annotations({ description: 'URI of the component to display in the sidebar.' }),
63
+ ),
64
+ options: Schema.optional(
65
+ Schema.Struct({
66
+ state: Schema.Literal('closed', 'collapsed', 'expanded').annotations({
63
67
  description: 'Whether the sidebar is closed, collapsed, or expanded.',
64
68
  }),
65
69
  }),
66
70
  ),
67
71
  }),
68
- output: S.Void,
72
+ output: Schema.Void,
69
73
  }) {}
70
74
 
71
- export class UpdateComplementary extends S.TaggedClass<UpdateComplementary>()(UPDATE_LAYOUT, {
72
- input: S.Struct({
73
- part: S.Literal('complementary').annotations({ description: 'Updating the complementary sidebar.' }),
74
- subject: S.optional(
75
- S.String.annotations({ description: 'URI of the component to display in the complementary area.' }),
75
+ export class UpdateComplementary extends Schema.TaggedClass<UpdateComplementary>()(UPDATE_LAYOUT, {
76
+ input: Schema.Struct({
77
+ part: Schema.Literal('complementary').annotations({ description: 'Updating the complementary sidebar.' }),
78
+ subject: Schema.optional(
79
+ Schema.String.annotations({ description: 'URI of the component to display in the complementary area.' }),
76
80
  ),
77
- options: S.optional(
78
- S.Struct({
79
- state: S.Literal('closed', 'collapsed', 'expanded').annotations({
81
+ options: Schema.optional(
82
+ Schema.Struct({
83
+ state: Schema.Literal('closed', 'collapsed', 'expanded').annotations({
80
84
  description: 'Whether the complementary sidebar is closed, collapsed, or expanded.',
81
85
  }),
82
86
  }),
83
87
  ),
84
88
  }),
85
- output: S.Void,
89
+ output: Schema.Void,
86
90
  }) {}
87
91
 
88
- export class UpdateDialog extends S.TaggedClass<UpdateDialog>()(UPDATE_LAYOUT, {
89
- input: S.Struct({
90
- part: S.Literal('dialog').annotations({ description: 'Updating the dialog.' }),
91
- subject: S.optional(S.String.annotations({ description: 'URI of the component to display in the dialog.' })),
92
- options: S.Struct({
93
- state: S.optional(S.Boolean.annotations({ description: 'Whether the dialog is open or closed.' })),
94
- blockAlign: S.optional(
95
- S.Literal('start', 'center', 'end').annotations({ description: 'The alignment of the dialog.' }),
92
+ export class UpdateDialog extends Schema.TaggedClass<UpdateDialog>()(UPDATE_LAYOUT, {
93
+ input: Schema.Struct({
94
+ part: Schema.Literal('dialog').annotations({ description: 'Updating the dialog.' }),
95
+ subject: Schema.optional(
96
+ Schema.String.annotations({ description: 'URI of the component to display in the dialog.' }),
97
+ ),
98
+ options: Schema.Struct({
99
+ state: Schema.optional(Schema.Boolean.annotations({ description: 'Whether the dialog is open or closed.' })),
100
+ type: Schema.optional(Schema.Literal('default', 'alert').annotations({ description: 'The type of dialog.' })),
101
+ blockAlign: Schema.optional(
102
+ Schema.Literal('start', 'center', 'end').annotations({ description: 'The alignment of the dialog.' }),
96
103
  ),
97
- type: S.optional(S.Literal('default', 'alert').annotations({ description: 'The type of dialog.' })),
98
- props: S.optional(
99
- S.Record({ key: S.String, value: S.Any }).annotations({
104
+ overlayClasses: Schema.optional(
105
+ Schema.String.annotations({ description: 'Additional classes for the dialog overlay.' }),
106
+ ),
107
+ overlayStyle: Schema.optional(
108
+ Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
109
+ description: 'Additional styles for the dialog overlay.',
110
+ }),
111
+ ),
112
+ props: Schema.optional(
113
+ Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
100
114
  description: 'Additional props for the dialog.',
101
115
  }),
102
116
  ),
103
117
  }),
104
118
  }),
105
- output: S.Void,
119
+ output: Schema.Void,
106
120
  }) {}
107
121
 
108
- export class UpdatePopover extends S.TaggedClass<UpdatePopover>()(UPDATE_LAYOUT, {
109
- input: S.Struct({
110
- part: S.Literal('popover').annotations({ description: 'Updating the popover.' }),
111
- subject: S.optional(
112
- S.Any.annotations({
122
+ export class UpdatePopover extends Schema.TaggedClass<UpdatePopover>()(UPDATE_LAYOUT, {
123
+ input: Schema.Struct({
124
+ part: Schema.Literal('popover').annotations({ description: 'Updating the popover.' }),
125
+ subject: Schema.optional(
126
+ Schema.Any.annotations({
113
127
  description: 'URI of the component to display in the popover or data to pass to the popover.',
114
128
  }),
115
129
  ),
116
- options: S.Struct({
117
- side: S.optional(
118
- S.Literal('top', 'right', 'bottom', 'left').annotations({ description: 'The side of the anchor.' }),
130
+ options: Schema.Struct({
131
+ side: Schema.optional(
132
+ Schema.Literal('top', 'right', 'bottom', 'left').annotations({ description: 'The side of the anchor.' }),
119
133
  ),
120
- state: S.optional(S.Boolean.annotations({ description: 'Whether the popover is open or closed.' })),
121
- props: S.optional(
122
- S.Record({ key: S.String, value: S.Any }).annotations({
134
+ state: Schema.optional(Schema.Boolean.annotations({ description: 'Whether the popover is open or closed.' })),
135
+ props: Schema.optional(
136
+ Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
123
137
  description: 'Additional props for the popover.',
124
138
  }),
125
139
  ),
126
140
  }).pipe(
127
- S.extend(
128
- S.Union(
129
- S.Struct({
130
- variant: S.Literal('virtual'),
131
- anchor: S.Any.annotations({ description: 'The DOM element to anchor the popover to.' }),
141
+ Schema.extend(
142
+ Schema.Union(
143
+ Schema.Struct({
144
+ variant: Schema.Literal('virtual'),
145
+ anchor: Schema.Any.annotations({ description: 'The DOM element to anchor the popover to.' }),
132
146
  }),
133
- S.Struct({
134
- variant: S.optional(S.Literal('react')),
135
- anchorId: S.String.annotations({
147
+ Schema.Struct({
148
+ variant: Schema.optional(Schema.Literal('react')),
149
+ anchorId: Schema.String.annotations({
136
150
  description: 'An id that can be used to determine whether to render the anchor subcomponent.',
137
151
  }),
138
152
  }),
@@ -140,119 +154,125 @@ export namespace LayoutAction {
140
154
  ),
141
155
  ),
142
156
  }),
143
- output: S.Void,
157
+ output: Schema.Void,
144
158
  }) {}
145
159
 
146
- export const Toast = S.Struct({
147
- id: S.String.annotations({ description: 'The id of the toast.' }),
148
- title: S.optional(Label.annotations({ description: 'The title of the toast.' })),
149
- description: S.optional(Label.annotations({ description: 'The description of the toast.' })),
150
- icon: S.optional(S.String.annotations({ description: 'The icon of the toast.' })),
151
- duration: S.optional(S.Number.annotations({ description: 'The duration of the toast.' })),
152
- closeLabel: S.optional(Label.annotations({ description: 'The label of the close button.' })),
153
- actionLabel: S.optional(Label.annotations({ description: 'The label of the action button.' })),
154
- actionAlt: S.optional(Label.annotations({ description: 'The alt text of the action button.' })),
155
- onAction: S.optional(
156
- S.Any.annotations({ description: 'The action to perform when the action button is clicked.' }),
160
+ export const Toast = Schema.Struct({
161
+ id: Schema.String.annotations({ description: 'The id of the toast.' }),
162
+ title: Schema.optional(Label.annotations({ description: 'The title of the toast.' })),
163
+ description: Schema.optional(Label.annotations({ description: 'The description of the toast.' })),
164
+ icon: Schema.optional(Schema.String.annotations({ description: 'The icon of the toast.' })),
165
+ duration: Schema.optional(Schema.Number.annotations({ description: 'The duration of the toast.' })),
166
+ closeLabel: Schema.optional(Label.annotations({ description: 'The label of the close button.' })),
167
+ actionLabel: Schema.optional(Label.annotations({ description: 'The label of the action button.' })),
168
+ actionAlt: Schema.optional(Label.annotations({ description: 'The alt text of the action button.' })),
169
+ onAction: Schema.optional(
170
+ Schema.Any.annotations({ description: 'The action to perform when the action button is clicked.' }),
157
171
  ),
158
172
  });
159
173
 
160
- export interface Toast extends Omit<S.Schema.Type<typeof Toast>, 'onAction'> {
174
+ export interface Toast extends Omit<Schema.Schema.Type<typeof Toast>, 'onAction'> {
161
175
  onAction?: () => void;
162
176
  }
163
177
 
164
- export class AddToast extends S.TaggedClass<AddToast>()(UPDATE_LAYOUT, {
165
- input: S.Struct({
166
- part: S.Literal('toast').annotations({ description: 'Adding a toast.' }),
178
+ export class AddToast extends Schema.TaggedClass<AddToast>()(UPDATE_LAYOUT, {
179
+ input: Schema.Struct({
180
+ part: Schema.Literal('toast').annotations({ description: 'Adding a toast.' }),
167
181
  subject: Toast.annotations({ description: 'The toast to add.' }),
168
182
  }),
169
- output: S.Void,
183
+ output: Schema.Void,
170
184
  }) {}
171
185
 
172
- export class SwitchWorkspace extends S.TaggedClass<SwitchWorkspace>()(UPDATE_LAYOUT, {
173
- input: S.Struct({
174
- part: S.Literal('workspace').annotations({ description: 'Switching the workspace.' }),
175
- subject: S.String.annotations({ description: 'The id of the workspace to switch to.' }),
186
+ export class SwitchWorkspace extends Schema.TaggedClass<SwitchWorkspace>()(UPDATE_LAYOUT, {
187
+ input: Schema.Struct({
188
+ part: Schema.Literal('workspace').annotations({ description: 'Switching the workspace.' }),
189
+ subject: Schema.String.annotations({ description: 'The id of the workspace to switch to.' }),
176
190
  }),
177
- output: S.Void,
191
+ output: Schema.Void,
178
192
  }) {}
179
193
 
180
- export class RevertWorkspace extends S.TaggedClass<RevertWorkspace>()(UPDATE_LAYOUT, {
181
- input: S.Struct({
182
- part: S.Literal('workspace').annotations({ description: 'Switching the workspace.' }),
183
- options: S.Struct({
184
- revert: S.Literal(true).annotations({ description: 'Revert to the previous workspace.' }),
194
+ export class RevertWorkspace extends Schema.TaggedClass<RevertWorkspace>()(UPDATE_LAYOUT, {
195
+ input: Schema.Struct({
196
+ part: Schema.Literal('workspace').annotations({ description: 'Switching the workspace.' }),
197
+ options: Schema.Struct({
198
+ revert: Schema.Literal(true).annotations({ description: 'Revert to the previous workspace.' }),
185
199
  }),
186
200
  }),
187
- output: S.Void,
201
+ output: Schema.Void,
188
202
  }) {}
189
203
 
190
- export class Open extends S.TaggedClass<Open>()(UPDATE_LAYOUT, {
191
- input: S.Struct({
192
- part: S.Literal('main').annotations({ description: 'Opening an item in the main content area.' }),
193
- subject: S.Array(S.String.annotations({ description: 'Ids of the items to open.' })),
194
- options: S.optional(
195
- S.Struct({
196
- state: S.optional(S.Literal(true).annotations({ description: 'The items are being added.' })),
197
- variant: S.optional(S.String.annotations({ description: 'The variant of the item to open.' })),
198
- key: S.optional(
199
- S.String.annotations({ description: 'If provided, will replace item with a matching key (id prefix).' }),
204
+ export class Open extends Schema.TaggedClass<Open>()(UPDATE_LAYOUT, {
205
+ input: Schema.Struct({
206
+ part: Schema.Literal('main').annotations({ description: 'Opening an item in the main content area.' }),
207
+ subject: Schema.Array(Schema.String.annotations({ description: 'Ids of the items to open.' })),
208
+ options: Schema.optional(
209
+ Schema.Struct({
210
+ state: Schema.optional(Schema.Literal(true).annotations({ description: 'The items are being added.' })),
211
+ variant: Schema.optional(Schema.String.annotations({ description: 'The variant of the item to open.' })),
212
+ key: Schema.optional(
213
+ Schema.String.annotations({
214
+ description: 'If provided, will replace item with a matching key (id prefix).',
215
+ }),
200
216
  ),
201
- workspace: S.optional(S.String.annotations({ description: 'The workspace to open the items in.' })),
202
- scrollIntoView: S.optional(S.Boolean.annotations({ description: 'Scroll the items into view.' })),
203
- pivotId: S.optional(S.String.annotations({ description: 'The id of the item to place new items next to.' })),
204
- positioning: S.optional(
205
- S.Union(
206
- S.Literal('start').annotations({ description: 'The items are being added before the pivot item.' }),
207
- S.Literal('end').annotations({ description: 'The items are being added after the pivot item.' }),
217
+ workspace: Schema.optional(Schema.String.annotations({ description: 'The workspace to open the items in.' })),
218
+ scrollIntoView: Schema.optional(Schema.Boolean.annotations({ description: 'Scroll the items into view.' })),
219
+ pivotId: Schema.optional(
220
+ Schema.String.annotations({ description: 'The id of the item to place new items next to.' }),
221
+ ),
222
+ positioning: Schema.optional(
223
+ Schema.Union(
224
+ Schema.Literal('start').annotations({ description: 'The items are being added before the pivot item.' }),
225
+ Schema.Literal('end').annotations({ description: 'The items are being added after the pivot item.' }),
208
226
  ),
209
227
  ),
210
228
  }),
211
229
  ),
212
230
  }),
213
- output: S.Void,
231
+ output: Schema.Void,
214
232
  }) {}
215
233
 
216
- export class Set extends S.TaggedClass<Set>()(UPDATE_LAYOUT, {
217
- input: S.Struct({
218
- part: S.Literal('main').annotations({ description: 'Setting items in the main content area.' }),
219
- subject: S.Array(S.String.annotations({ description: 'Ids of the items to set.' })),
220
- options: S.Struct({
221
- override: S.Literal(true).annotations({ description: 'Override the current items in the main content area.' }),
234
+ export class Set extends Schema.TaggedClass<Set>()(UPDATE_LAYOUT, {
235
+ input: Schema.Struct({
236
+ part: Schema.Literal('main').annotations({ description: 'Setting items in the main content area.' }),
237
+ subject: Schema.Array(Schema.String.annotations({ description: 'Ids of the items to set.' })),
238
+ options: Schema.Struct({
239
+ override: Schema.Literal(true).annotations({
240
+ description: 'Override the current items in the main content area.',
241
+ }),
222
242
  }),
223
243
  }),
224
- output: S.Void,
244
+ output: Schema.Void,
225
245
  }) {}
226
246
 
227
- export class Close extends S.TaggedClass<Close>()(UPDATE_LAYOUT, {
228
- input: S.Struct({
229
- part: S.Literal('main').annotations({ description: 'Closing items in the main content area.' }),
230
- subject: S.Array(S.String.annotations({ description: 'Ids of the items to close.' })),
231
- options: S.Struct({
232
- state: S.Literal(false).annotations({ description: 'The items are being removed.' }),
247
+ export class Close extends Schema.TaggedClass<Close>()(UPDATE_LAYOUT, {
248
+ input: Schema.Struct({
249
+ part: Schema.Literal('main').annotations({ description: 'Closing items in the main content area.' }),
250
+ subject: Schema.Array(Schema.String.annotations({ description: 'Ids of the items to close.' })),
251
+ options: Schema.Struct({
252
+ state: Schema.Literal(false).annotations({ description: 'The items are being removed.' }),
233
253
  }),
234
254
  }),
235
- output: S.Void,
255
+ output: Schema.Void,
236
256
  }) {}
237
257
 
238
- export class ScrollIntoView extends S.TaggedClass<ScrollIntoView>()(UPDATE_LAYOUT, {
239
- input: S.Struct({
240
- part: S.Literal('current').annotations({ description: 'Setting the current item' }),
241
- subject: S.optional(S.String.annotations({ description: 'The id of the item to set as current.' })),
242
- options: S.optional(
243
- S.Record({ key: S.String, value: S.Any }).annotations({
258
+ export class ScrollIntoView extends Schema.TaggedClass<ScrollIntoView>()(UPDATE_LAYOUT, {
259
+ input: Schema.Struct({
260
+ part: Schema.Literal('current').annotations({ description: 'Setting the current item' }),
261
+ subject: Schema.optional(Schema.String.annotations({ description: 'The id of the item to set as current.' })),
262
+ options: Schema.optional(
263
+ Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
244
264
  description: 'Additional options for the scroll into view.',
245
265
  }),
246
266
  ),
247
267
  }),
248
- output: S.Void,
268
+ output: Schema.Void,
249
269
  }) {}
250
270
 
251
- export class Expose extends S.TaggedClass<Expose>()(UPDATE_LAYOUT, {
252
- input: S.Struct({
253
- part: S.Literal('navigation').annotations({ description: 'Exposing an item in the navigation area.' }),
254
- subject: S.String.annotations({ description: 'The id of the item to expose.' }),
271
+ export class Expose extends Schema.TaggedClass<Expose>()(UPDATE_LAYOUT, {
272
+ input: Schema.Struct({
273
+ part: Schema.Literal('navigation').annotations({ description: 'Exposing an item in the navigation area.' }),
274
+ subject: Schema.String.annotations({ description: 'The id of the item to expose.' }),
255
275
  }),
256
- output: S.Void,
276
+ output: Schema.Void,
257
277
  }) {}
258
278
  }
@@ -2,16 +2,16 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema as S } from 'effect';
5
+ import { Schema } from 'effect';
6
6
 
7
- export const ResourceKey = S.Union(S.String, S.Record({ key: S.String, value: S.Any }));
8
- export type ResourceKey = S.Schema.Type<typeof ResourceKey>;
7
+ export const ResourceKey = Schema.Union(Schema.String, Schema.Record({ key: Schema.String, value: Schema.Any }));
8
+ export type ResourceKey = Schema.Schema.Type<typeof ResourceKey>;
9
9
 
10
- export const ResourceLanguage = S.Record({ key: S.String, value: ResourceKey });
11
- export type ResourceLanguage = S.Schema.Type<typeof ResourceLanguage>;
10
+ export const ResourceLanguage = Schema.Record({ key: Schema.String, value: ResourceKey });
11
+ export type ResourceLanguage = Schema.Schema.Type<typeof ResourceLanguage>;
12
12
 
13
13
  /**
14
14
  * A resource is a collection of translations for a language.
15
15
  */
16
- export const Resource = S.Record({ key: S.String, value: ResourceLanguage });
17
- export type Resource = S.Schema.Type<typeof Resource>;
16
+ export const Resource = Schema.Record({ key: Schema.String, value: ResourceLanguage });
17
+ export type Resource = Schema.Schema.Type<typeof Resource>;
@@ -2,15 +2,11 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import { Registry } from '@effect-rx/rx-react';
5
6
  import { Effect } from 'effect';
6
- import { describe, expect, it } from 'vitest';
7
+ import { describe, expect, it, onTestFinished } from 'vitest';
7
8
 
8
- import { updateCounter } from '@dxos/echo-schema/testing';
9
- import { registerSignalsRuntime } from '@dxos/echo-signals';
10
-
11
- import { defineCapability, PluginsContext } from './capabilities';
12
-
13
- registerSignalsRuntime();
9
+ import { defineCapability, PluginContext } from './capabilities';
14
10
 
15
11
  const defaultOptions = {
16
12
  activate: () => Effect.succeed(false),
@@ -19,99 +15,122 @@ const defaultOptions = {
19
15
 
20
16
  describe('PluginsContext', () => {
21
17
  it('should return empty array if no capabilities are contributed', () => {
22
- const context = new PluginsContext(defaultOptions);
18
+ const registry = Registry.make();
19
+ const context = new PluginContext({ registry, ...defaultOptions });
23
20
  const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
24
- expect(context.requestCapabilities(interfaceDef)).toEqual([]);
21
+ expect(context.getCapabilities(interfaceDef)).toEqual([]);
25
22
  });
26
23
 
27
24
  it('should be able to contribute and request capabilities', () => {
28
- const context = new PluginsContext(defaultOptions);
25
+ const registry = Registry.make();
26
+ const context = new PluginContext({ registry, ...defaultOptions });
29
27
  const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
30
28
  const implementation = { example: 'identifier' };
31
29
  context.contributeCapability({ interface: interfaceDef, implementation, module: 'test' });
32
- expect(context.requestCapabilities(interfaceDef)).toEqual([implementation]);
30
+ expect(context.getCapabilities(interfaceDef)).toEqual([implementation]);
33
31
  });
34
32
 
35
33
  it('should be able to remove capabilities', () => {
36
- const context = new PluginsContext(defaultOptions);
34
+ const registry = Registry.make();
35
+ const context = new PluginContext({ registry, ...defaultOptions });
37
36
  const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
38
37
  const implementation = { example: 'identifier' };
39
38
  context.contributeCapability({ interface: interfaceDef, implementation, module: 'test' });
40
- expect(context.requestCapabilities(interfaceDef)).toEqual([implementation]);
39
+ expect(context.getCapabilities(interfaceDef)).toEqual([implementation]);
41
40
  context.removeCapability(interfaceDef, implementation);
42
- expect(context.requestCapabilities(interfaceDef)).toEqual([]);
41
+ expect(context.getCapabilities(interfaceDef)).toEqual([]);
43
42
  });
44
43
 
45
44
  it('should be able to contribute and request multiple implementations', () => {
46
- const context = new PluginsContext(defaultOptions);
45
+ const registry = Registry.make();
46
+ const context = new PluginContext({ registry, ...defaultOptions });
47
47
  const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
48
48
  const implementation1 = { example: 'first' };
49
49
  const implementation2 = { example: 'second' };
50
50
  context.contributeCapability({ interface: interfaceDef, implementation: implementation1, module: 'test' });
51
51
  context.contributeCapability({ interface: interfaceDef, implementation: implementation2, module: 'test' });
52
- expect(context.requestCapabilities(interfaceDef)).toEqual([implementation1, implementation2]);
52
+ expect(context.getCapabilities(interfaceDef)).toEqual([implementation1, implementation2]);
53
53
  });
54
54
 
55
55
  it('should be able to request multiple capabilities', () => {
56
- const context = new PluginsContext(defaultOptions);
56
+ const registry = Registry.make();
57
+ const context = new PluginContext({ registry, ...defaultOptions });
57
58
  const interfaceDef1 = defineCapability<{ one: number }>('@dxos/app-framework/test/one');
58
59
  const interfaceDef2 = defineCapability<{ two: number }>('@dxos/app-framework/test/two');
59
60
  const implementation1 = { one: 1 };
60
61
  const implementation2 = { two: 2 };
61
62
  context.contributeCapability({ interface: interfaceDef1, implementation: implementation1, module: 'test' });
62
63
  context.contributeCapability({ interface: interfaceDef2, implementation: implementation2, module: 'test' });
63
- expect(context.requestCapabilities(interfaceDef1)).toEqual([implementation1]);
64
- expect(context.requestCapabilities(interfaceDef2)).toEqual([implementation2]);
64
+ expect(context.getCapabilities(interfaceDef1)).toEqual([implementation1]);
65
+ expect(context.getCapabilities(interfaceDef2)).toEqual([implementation2]);
65
66
  });
66
67
 
67
68
  it('should be reactive', () => {
68
- const context = new PluginsContext(defaultOptions);
69
+ const registry = Registry.make();
70
+ const context = new PluginContext({ registry, ...defaultOptions });
69
71
  const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
70
72
 
71
- using updates = updateCounter(() => {
72
- context.requestCapabilities(interfaceDef);
73
+ let count = 0;
74
+ const cancel = registry.subscribe(context.capabilities(interfaceDef), () => {
75
+ count++;
73
76
  });
77
+ onTestFinished(() => cancel());
78
+ expect(count).toEqual(0);
74
79
 
75
- expect(updates.count).toEqual(0);
80
+ registry.get(context.capabilities(interfaceDef));
81
+ expect(count).toEqual(1);
76
82
 
77
83
  const implementation = { example: 'identifier' };
78
84
  context.contributeCapability({ interface: interfaceDef, implementation, module: 'test' });
79
- expect(updates.count).toEqual(1);
85
+ expect(count).toEqual(2);
80
86
 
81
87
  context.removeCapability(interfaceDef, implementation);
82
- expect(updates.count).toEqual(2);
88
+ expect(count).toEqual(3);
83
89
  });
84
90
 
85
91
  it('should not be reactive to changes within the implementation', () => {
86
- const context = new PluginsContext(defaultOptions);
92
+ const registry = Registry.make();
93
+ const context = new PluginContext({ registry, ...defaultOptions });
87
94
  const interfaceDef = defineCapability<{ example: string }>('@dxos/app-framework/test/example');
88
95
 
89
- using updates = updateCounter(() => {
90
- context.requestCapabilities(interfaceDef);
96
+ let count = 0;
97
+ const cancel = registry.subscribe(context.capabilities(interfaceDef), () => {
98
+ count++;
91
99
  });
100
+ onTestFinished(() => cancel());
101
+ expect(count).toEqual(0);
92
102
 
93
- expect(updates.count).toEqual(0);
103
+ registry.get(context.capabilities(interfaceDef));
104
+ expect(count).toEqual(1);
94
105
 
95
106
  const implementation = { example: 'identifier' };
96
107
  context.contributeCapability({ interface: interfaceDef, implementation, module: 'test' });
97
- expect(updates.count).toEqual(1);
108
+ expect(count).toEqual(2);
98
109
 
99
110
  implementation.example = 'updated';
100
- expect(updates.count).toEqual(1);
111
+ expect(count).toEqual(2);
101
112
 
102
- const capabilities = context.requestCapabilities(interfaceDef);
113
+ const capabilities = context.getCapabilities(interfaceDef);
103
114
  expect(capabilities).toEqual([implementation]);
104
115
  expect(capabilities[0].example).toEqual('updated');
105
- expect(updates.count).toEqual(1);
116
+ expect(count).toEqual(2);
106
117
  });
107
118
 
108
119
  it('should be able to wait for a capability', async () => {
109
- const context = new PluginsContext(defaultOptions);
120
+ const registry = Registry.make();
121
+ const context = new PluginContext({ registry, ...defaultOptions });
110
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
+
111
132
  const implementation = { example: 'identifier' };
112
- const promise = context.waitForCapability(interfaceDef);
113
133
  context.contributeCapability({ interface: interfaceDef, implementation, module: 'test' });
114
- const capability = await promise;
115
134
  expect(capability).toEqual(implementation);
116
135
  });
117
136
  });