conteneur
v2.1.2
Published
TypeScript Inversion of Control container for Dependency Injection.
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 DataServiceFull TypeScript example with resolution, injection, scoping: docs/typescript-example.md
🔋 APIs
Creates a new container.
createContainer(options?: ContainerOptions): Containeroptions.defaultStrategy : transient (default) - singleton
register
Registers multiple resolvers within the container.
container.register(entries: ResolverEntries): voidoptions.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>): TcreateScope
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.
