conteneur
Version:
TypeScript Inversion of Control container for Dependency Injection.
98 lines (66 loc) โข 3.44 kB
Markdown
# ConteneurJS
[](https://www.npmjs.com/package/conteneur)
[](https://www.npmjs.com/package/conteneur)
[](https://github.com/QuentinDutot/conteneur/actions/workflows/ci.yml)
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
```js
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](./docs/typescript-example.md)
## ๐ APIs
Creates a new container.
```js
createContainer(options?: ContainerOptions): Container
```
`options.defaultStrategy` : *transient* (default) - *singleton*
### register
Registers multiple resolvers within the container.
```js
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.
```js
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.
```js
container.inject<T>(target: FunctionFactory<T>): T
```
### createScope
Creates a new scope within the container.
```js
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](https://github.com/jeffijoe/awilix) and builds upon its core concepts.