// Module without options - single capability
export default Capability.makeModule(
Effect.fnUntraced(function* () {
const client = yield* Capability.get(ClientCapabilities.Client);
return contributes(Capabilities.SettingsStore, store);
})
);
// Module with multiple capabilities
export default Capability.makeModule(
Effect.fnUntraced(function* () {
return [
contributes(Capabilities.SettingsStore, store),
contributes(Capabilities.Translations, translations),
];
})
);
// Module with additional options (context accessed via layer)
export default Capability.makeModule(
Effect.fnUntraced(function* ({ observability }: { observability?: boolean }) {
const invoker = yield* Capability.get(Capabilities.OperationInvoker);
return contributes(Capabilities.IntentResolver, ...);
})
);
Helper to define a capability module with explicit typing. Wraps the default export function to provide better type inference and make the pattern explicit.
This helper provides explicit typing for the module activation function, making it clear that the function should:
Supports returning multiple capabilities of different types as a tuple, which will be normalized to an array at runtime for compatibility with the plugin system.