conteneur
v1.1.0
Published
Lightweight and efficient TypeScript IoC container.
Downloads
546
Maintainers
Readme
ConteneurJS
Conteneur is a lightweight, efficient Inversion of Control container for Dependency Injection with Factory Functions.
- 🪶 3.68KB minified
- 🧩 Zero dependencies
- 📦 TypeScript and ESM
- 🧪 100% Test Coverage
- 🌐 Platform Agnostic (Browser, Node, Deno, Bun, AWS, Vercel, Cloudflare, ..)
🚀 Usage
import { createContainer } from 'conteneur'
const container = createContainer<Container>()
container.register({
connectionString: [() => process.env.DATABASE_URL, { strategy: 'singleton' }],
database: [() => new Database()],
userService: [createUserService],
userController: [createUserController]
})
const userController = container.resolve('userController')
🔋 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 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 not registered in the container with its dependencies and returns the result.
container.inject<T>(target: ClassOrFunctionReturning<T>): T
createScope
Creates a new scope within the container.
container.createScope(): void
📃 Examples
Basics
Features
- TypeScript [WIP]
- Lifetime [WIP]
- Scope [WIP]
- Errors [WIP]
Integrations
📊 Comparisons
| | ConteneurJS | InversifyJS | TSyringe | TypeDI | Awilix | |---------------------|-------------|-------------|-----------|----------|-----------| | TS + ESM + Tests | ✅ | ✅ | ✅ | ✅ | ✅ | | Dependency Count | 🥇 0 | 🥈 1 | 🥈 1 | 🥇 0 | 🥉 2 | | Platform Agnostic | ✅ | ❌ | ❌ | ❌ | ❌ | | Function Support | ✅ | ❌ | ❌ | ❌ | ✅ | | Class Support | ✅ | ✅ | ✅ | ✅ | ✅ | | Value Support | ✅ | ❌ | ❌ | ❌ | ✅ | | Decorator Free | ✅ | ❌ | ❌ | ❌ | ✅ | | Lifetime Management | ✅ | ✅ | ✅ | ✅ | ✅ | | Scoped Container | ✅ | ✅ | ✅ | ❌ | ✅ | | Size (min) | 🥇 3.4kb | ➖ 49.9kb | ➖ 15.6kb | 🥈 9.5kb | 🥉 12.5kb | | Size (min + gzip) | 🥇 1.4kb | ➖ 11.1kb | ➖ 4.7kb | 🥈 2.7kb | 🥉 4.6kb |
📃 Inspiration
This project is inspired by jeffijoe/awilix and builds upon its core concepts.