A tiny (~2 KB) Inversion-of-Control Container for JS/TS.
What's this exactly?
featherioc is an Inversion-of-Control (IoC) container. It allows you to easily build a dependency graph for your application and inject dependencies where needed. Using an IoC container enforces various SOLID principles and decouples your application, which is critical if you want your application to be testable and modular.
Why do we need yet another IoC container library?
For Node-powered apps, InversifyJS and TSyringe among other libraries often do the job well enough. This library, however, fills the gap in the frontend development world. featherioc does not rely on the reflect-metadata polyfill and does not use decorators for service definitions.
No decorators? How come?
There are two reasons for this. The main reason for not having decorators is because that would otherwise break compatibility with ESBuild (see this issue) and thus, would break compatibility with Vite.
Another reason for not having decorators is because they tend to clutter the codebase quite fast; coworkers/others who have little to no experience with IoC may struggle with decorators such as
@injectable in codebases they're working on because they don't know what it means. featherioc leaves your classes as-is, which is a huge plus if you ask me.
What's already supported?
useClassprovider for services
useValueprovider for services
useFunctionprovider for services
Symbols as tokens
What are you planning on supporting?
What are you *not* planning on supporting?
See this document.
Kees van Voorthuizen