Skip to content

compose() function

Home > @rimitive/core > compose

Compose modules into a unified context.

Resolves the dependency graph automatically - you only need to pass the modules you want, and their dependencies are included transitively.

Returns a use() function that provides access to the composed context: - use() - Returns the context directly - use(callback) - Passes the context to callback and returns its result

Signature:

export declare function compose<TModules extends AnyModule[]>(...modules: TModules): Use<ComposedContext<TModules>>;

Parameter

Type

Description

modules

TModules

Returns:

Use<ComposedContext<TModules>>

Basic usage

import { compose } from '@rimitive/core';
import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
const svc = compose(SignalModule, ComputedModule, EffectModule);
const { signal, computed, effect } = svc;
const count = signal(0);
const doubled = computed(() => count() * 2);
effect(() => console.log(doubled()));

With instrumentation

import { compose, createInstrumentation, devtoolsProvider } from '@rimitive/core';
import { SignalModule, ComputedModule } from '@rimitive/signals/extend';
const svc = compose(SignalModule, ComputedModule, {
instrumentation: createInstrumentation({
providers: [devtoolsProvider()],
}),
});

Behavior pattern

const counter = (svc) => () => {
const count = svc.signal(0);
return {
value: svc.computed(() => count()),
increment: () => count(c => c + 1),
};
};
const useCounter = svc(counter);
const myCounter = useCounter();