Skip to content

override() function

Home > @rimitive/core > override

Override dependencies of a module.

Creates a new module with the same implementation but different dependencies. Useful for testing (swapping real services for mocks) or environment-specific configurations.

Replacements are matched by the dependency’s name. If a replacement module has a different name, it will be aliased to the original dependency’s name.

Signature:

export declare function override<T extends AnyModule, R extends {
[K in keyof ModuleDeps<T>]?: Module<string, ModuleDeps<T>[K], unknown>;
}>(mod: T, replacements: R): OverriddenModule<ModuleName<T>, ModuleImpl<T>, ModuleDeps<T>, ReplacementsToTuple<R> extends AnyModule[] ? ReplacementsToTuple<R> : never[]>;

Parameter

Type

Description

mod

T

replacements

R

Returns:

OverriddenModule<ModuleName<T>, ModuleImpl<T>, ModuleDeps<T>, ReplacementsToTuple<R> extends AnyModule[] ? ReplacementsToTuple<R> : never[]>

Testing with mocks

const MockDB = defineModule({
name: 'db',
create: () => ({ query: vi.fn() }),
});
const testSvc = compose(override(UserService, { db: MockDB }));

Environment-specific dependencies

const prodSvc = compose(override(App, { logger: CloudLogger }));
const devSvc = compose(override(App, { logger: ConsoleLogger }));