@brushy/di-core
v2.0.0
Published
Zero-dependency DI core for Node, browser and React Native
Maintainers
Readme
@brushy/di-core
Zero-React dependency injection for Node.js, browsers, and React Native. Part of the @brushy/di 2.0 umbrella.
Install
npm install @brushy/di-coreQuick start
import { Container, createToken } from "@brushy/di-core";
const LOGGER = createToken<{ log: (msg: string) => void }>("LOGGER");
const container = new Container();
container.register(LOGGER, {
useValue: { log: console.log },
});
const logger = container.resolve(LOGGER);
logger.log("ready");Features
- Lifecycles:
singleton,transient,scoped,immutable - Typed tokens:
createToken,deps,defineModule - Request scope:
runInRequestScope,runInRequestScopeAsync,brushyRequestScope(AsyncLocalStorage on Node) - Server facade:
server.setServerContainer,server.resolve,server.brushyRequestScope() - Modules:
defineModule,container.import,createBrushyApp - Subpath exports:
@brushy/di-core/container,/resolve,/inject,/server,/request-scope,/cache
Lifecycles
container.register(TOKEN, { useClass: MyService, lifecycle: "singleton" });
container.register(TOKEN, { useClass: MyService, lifecycle: "transient" });
container.register(TOKEN, { useClass: MyService, lifecycle: "scoped" });Scoped instances are isolated per request when you use request-scope middleware or runInRequestScope.
Request scope (Node)
import { runInRequestScope, server } from "@brushy/di-core";
server.setServerContainer(container);
app.use(server.brushyRequestScope());
app.get("/users", () => {
return server.resolve(USER_SERVICE).list();
});
// Or manually:
await runInRequestScopeAsync(async () => {
return container.resolve(USER_SERVICE).list();
});Modules
import { defineModule, Container } from "@brushy/di-core";
export const usersModule = defineModule({
userRepo: { useClass: UserRepository, lifecycle: "scoped" },
userService: { useClass: UserService, lifecycle: "scoped" },
});
const container = new Container({ name: "app" });
usersModule.register(container);
const USER_SERVICE = usersModule.tokens.userService;Related packages
| Package | Role |
| --- | --- |
| @brushy/di-react | React / React Native hooks |
| @brushy/di-monitor | Container event monitoring |
| @brushy/di-otel | OpenTelemetry resolve tracing |
| @brushy/di | Umbrella install (all of the above) |
Docs and examples
- Full documentation
- Server utilities
- Example projects (Express, Fastify, Vite, Expo)
