Creating a Service
A service bundles modules into an isolated reactive context.
The simplest example of a reactive service:
import { compose } from '@rimitive/core';import { SignalModule } from '@rimitive/signals/extend';
const svc = compose(SignalModule);const { signal } = svc;- A service is the result of calling
compose(). - A module is what you provide to
compose(). Modules can depend on other modules and share the same reactive graph.
Adding More Modules
Section titled “Adding More Modules”We can add some more modules that would react to signal updates:
import { compose } from '@rimitive/core';import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
const { signal, computed, effect } = compose(SignalModule, ComputedModule, EffectModule);Then use them:
const count = signal(0);const doubled = computed(() => count() * 2);
effect(() => { console.log('Count is now:', count());});
// ...etcReactive dependencies are automatically tracked.
Why compose()?
Section titled “Why compose()?”Each compose() call creates an independent reactive context with no global leakage. This means:
- Isolation: Multiple services don’t interfere with each other
- Testing: Fresh contexts per test, no cleanup needed
- Tree-shaking: Only bundle what you use
- Extensibility: Add view modules, router, or custom modules later