conteneur v2.1.2
ConteneurJS
TypeScript Inversion of Control container for Dependency Injection.
It supports Functions and Classes, Scoped Containers, Transient and Singleton Strategies, and Cyclic Dependency Detection.
- ๐ชถ 0.9KB minified
- ๐งฉ Zero dependencies
- ๐ฆ TypeScript and ESM
- ๐งช 100% Test Coverage
- ๐ Runtime Agnostic (Browser, Node, Deno, Bun, AWS, Vercel, Cloudflare, ..)
๐ Usage
import { createContainer } from 'conteneur'
const container = createContainer()
container.register({
dataService: [createDataService],
reportService: [createReportService],
})
const reportService = container.resolve('reportService')
reportService.getReport() // Report: data from DataService
Full TypeScript example with resolution, injection, scoping: docs/typescript-example.md
๐ APIs
Creates a new container.
createContainer(options?: ContainerOptions): Container
options.defaultStrategy
: transient (default) - singleton
register
Registers multiple resolvers within the container.
container.register(entries: ResolverEntries): void
options.strategy
: transient (default) - singleton
resolve
Injects a function or a class registered in the container with its dependencies and returns the result.
container.resolve<Key extends keyof Container>(key: Key): Container[Key]
inject
Injects a function or a class not registered in the container with its dependencies and returns the result.
container.inject<T>(target: FunctionFactory<T>): T
createScope
Creates a new scope within the container.
container.createScope(): void
๐ Comparisons
ConteneurJS | InversifyJS | TSyringe | TypeDI | Awilix | |
---|---|---|---|---|---|
TS + ESM + Tests | โ | โ | โ | โ | โ |
Dependency Count | ๐ฅ 0 | ๐ฅ 1 | ๐ฅ 1 | ๐ฅ 0 | ๐ฅ 2 |
Runtime Agnostic | โ | โ | โ | โ | โ |
Function Support | โ | โ | โ | โ | โ |
Class Support | โ | โ | โ | โ | โ |
Value Support | โ | โ | โ | โ | โ |
Decorator Free | โ | โ | โ | โ | โ |
Lifetime Management | โ | โ | โ | โ | โ |
Scoped Container | โ | โ | โ | โ | โ |
Size (min) | ๐ฅ 1.1kb | โ 49.9kb | โ 15.6kb | ๐ฅ 9.5kb | ๐ฅ 12.5kb |
Size (min + gzip) | ๐ฅ 0.6kb | โ 11.1kb | โ 4.7kb | ๐ฅ 2.7kb | ๐ฅ 4.6kb |
๐ Inspiration
This project was inspired by jeffijoe/awilix and builds upon its core concepts.