Skip to content

defineModule() function

Home > @rimitive/core > defineModule

Define a module - the fundamental building block of Rimitive composition.

Modules declare dependencies on other modules and provide a create function that receives resolved dependencies and returns the implementation.

Signature:

export declare function defineModule<TName extends string, TImpl, TDeps>(definition: ModuleDefinition<TName, TImpl, TDeps>): Module<TName, TImpl, TDeps>;

Parameter

Type

Description

definition

ModuleDefinition<TName, TImpl, TDeps>

Returns:

Module<TName, TImpl, TDeps>

Basic module (no dependencies)

const Logger = defineModule({
name: 'logger',
create: () => ({
log: (msg: string) => console.log(msg),
}),
});

Module with dependencies

const UserService = defineModule({
name: 'userService',
dependencies: [Database, Logger],
create: ({ database, logger }) => ({
getUser: (id: string) => {
logger.log(`Fetching user ${id}`);
return database.query(`SELECT * FROM users WHERE id = ?`, [id]);
},
}),
});

Module with instrumentation

const Signal = defineModule({
name: 'signal',
dependencies: [GraphEdges, Scheduler],
create: ({ graphEdges, scheduler }) => (initialValue) => {
// ... signal implementation
},
instrument: (impl, instr) => (initialValue) => {
const sig = impl(initialValue);
instr.register(sig, 'signal');
return sig;
},
});