Rechercher

PythonReactSEOPDF
GitHub Skill

rimitive-compose

Compose Rimitive services with the right modules. Use when setting up a new service, adding primitives, or understanding what modules to import and from where.

hejhi☆ 0 Étoiles du dépôt0 Forks du dépôt

Installation

Suivez les instructions du dépôt pour votre agent. Consultez les fichiers et dépendances avant l’installation.

Voir la source ↗Guides

Instructions

Composing Rimitive Services

Rimitive uses compose() to wire modules together into a reactive service. This guide helps you choose the right modules and imports.

Import Paths

// Core composition
import { compose } from '@rimitive/core';

// Signal modules (from /extend path)
import {
  SignalModule,
  ComputedModule,
  EffectModule,
  BatchModule,
  SubscribeModule,
  UntrackModule,
} from '@rimitive/signals/extend';

// View module factories (need an adapter)
import { createElModule } from '@rimitive/view/el';
import { createMapModule } from '@rimitive/view/map';
import { createMatchModule } from '@rimitive/view/match';
import { createPortalModule } from '@rimitive/view/portal';
import { createLoadModule } from '@rimitive/view/load';

// Adapters
import { createDOMAdapter } from '@rimitive/view/adapters/dom';
import { createSSRAdapter } from '@rimitive/ssr/adapter';
import { createHydrationAdapter } from '@rimitive/ssr/hydration';

// View helpers
import { MountModule } from '@rimitive/view/deps/mount';
import { OnModule } from '@rimitive/view/deps/addEventListener';

// Router
import { createRouter } from '@rimitive/router';

// Resource (async data)
import { createResource } from '@rimitive/resource';

Common Service Configurations

Signals Only (No UI)

For headless logic, state management, or Node.js:

import { compose } from '@rimitive/core';
import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';

const svc = compose(SignalModule, ComputedModule, EffectModule);
const { signal, computed, effect } = svc;
Signals + Batching

When you need to batch multiple updates:

import { compose } from '@rimitive/core';
import {
  SignalModule,
  ComputedModule,
  EffectModule,
  BatchModule,
} from '@rimitive/signals/extend';

const svc = compose(SignalModule, ComputedModule, EffectModule, BatchModule);
const { signal, computed, effect, batch } = svc;
Full View Service (Browser)

For building UI components:

import { compose } from '@rimitive/core';
import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
import { createElModule } from '@rimitive/view/el';
import { createMapModule } from '@rimitive/view/map';
import { createMatchModule } from '@rimitive/view/match';
import { createDOMAdapter } from '@rimitive/view/adapters/dom';
import { MountModule } from '@rimitive/view/deps/mount';
import { OnModule } from '@rimitive/view/deps/addEventListener';

const adapter = createDOMAdapter();

const svc = compose(
  SignalModule,
  ComputedModule,
  EffectModule,
  createElModule(adapter),
  createMapModule(adapter),
  createMatchModule(adapter),
  MountModule,
  OnModule
);

const { signal, computed, effect, el, map, match, mount, on } = svc;
View Service with Router

Add client-side routing:

import { compose, merge } from '@rimitive/core';
import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
import { createElModule } from '@rimitive/view/el';
import { createMapModule } from '@rimitive/view/map';
import { createMatchModule } from '@rimitive/view/match';
import { createDOMAdapter } from '@rimitive/view/adapters/dom';
import { MountModule } from '@rimitive/view/deps/mount';
import { createRouter } from '@rimitive/router';

const adapter = createDOMAdapter();

const baseSvc = compose(
  SignalModule,
  ComputedModule,
  EffectModule,
  createElModule(adapter),
  createMapModule(adapter),
  createMatchModule(adapter),
  MountModule
);

// Add router (uses merge because router needs the base service)
const router = createRouter(baseSvc);
const svc = merge(baseSvc, router);

const { signal, computed, el, map, match, mount, route, link, navigate } = svc;
SSR Service

For server-side rendering:

import { compose } from '@rimitive/core';
import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
import { createElModule } from '@rimitive/view/el';
import { createMapModule } from '@rimitive/view/map';
import { createMatchModule } from '@rimitive/view/match';
import { createSSRAdapter } from '@rimitive/ssr/adapter';

const adapter = createSSRAdapter();

const svc = compose(
  SignalModule,
  ComputedModule,
  EffectModule,
  createElModule(adapter),
  createMapModule(adapter),
  createMatchModule(adapter)
);

Module Reference

Module Provides Use When
SignalModule signal() Always - core reactive state
ComputedModule computed() Deriving values from signals
EffectModule effect() Side effects on signal changes
BatchModule batch() Batching multiple updates
SubscribeModule subscribe() External subscriptions to signals
UntrackModule untrack() Reading without tracking
createElModule(adapter) el() Building DOM elements
createMapModule(adapter) map() Reactive lists
createMatchModule(adapter) match() Conditional rendering
createPortalModule(adapter) portal() Render to different DOM location
createLoadModule(adapter) load() Async component loading
MountModule mount() Mounting specs to DOM
OnModule on() Event listener helper with auto-batching

Adapter Pattern

View modules need an adapter because Rimitive is renderer-agnostic:

// DOM (browser)
const adapter = createDOMAdapter();

// SSR (server)
const adapter = createSSRAdapter();

// Hydration (client, after SSR)
const adapter = createHydrationAdapter(ssrHtml);

// Custom (canvas, WebGL, etc.)
const adapter = createMyAdapter();

The same view code works with any adapter—swap adapters to change where/how elements render.

Service Types

Export a type for your service to use in behaviors and components:

// service.ts
import { compose } from '@rimitive/core';
import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
import { createElModule } from '@rimitive/view/el';
import { createDOMAdapter } from '@rimitive/view/adapters/dom';

const adapter = createDOMAdapter();

export const svc = compose(
  SignalModule,
  ComputedModule,
  EffectModule,
  createElModule(adapter)
);

// Export the service type for behaviors
export type Service = typeof svc;

Then use in behaviors:

import type { Service } from './service';

const myBehavior = (svc: Service) => () => {
  const { signal, computed } = svc;
  // ...
};

Exemples

Consultez les exemples du dépôt source.

Voir la source ↗

Historique source

Date d’indexation
2026-01-20
Mise à jour de l’index
2026-01-26
Branch
main

Les dates concernent ce répertoire. Consultez le dépôt pour l’historique du code.

GitHub ↗

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!