conteneur
v2.1.1
Published
TypeScript Inversion of Control container for Dependency Injection.
Downloads
57
Maintainers
Readme
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.