@djodjonx/neosyringe
v0.1.2
Published
Runtime library for NeoSyringe DI
Readme
✨ Features
- Use Interfaces as Tokens -
useInterface<ILogger>()without manual Symbols - Zero Runtime Overhead - Generated factory functions, no DI library shipped
- Compile-Time Safety - Errors detected in your IDE, not at runtime
- Pure Classes - No decorators, no DI imports in your business code
- Gradual Migration - Bridge existing containers (tsyringe, InversifyJS)
- CI Validation - CLI to verify your dependency graph
📦 Installation
# npm
npm install @djodjonx/neosyringe
npm install -D @djodjonx/neosyringe-plugin
# pnpm
pnpm add @djodjonx/neosyringe
pnpm add -D @djodjonx/neosyringe-plugin🚀 Quick Example
// Pure TypeScript - no decorators!
interface ILogger {
log(msg: string): void;
}
class ConsoleLogger implements ILogger {
log(msg: string) { console.log(msg); }
}
class UserService {
constructor(private logger: ILogger) {}
}// container.ts
import { defineBuilderConfig, useInterface } from '@djodjonx/neosyringe';
export const container = defineBuilderConfig({
injections: [
// Bind interface to implementation
{ token: useInterface<ILogger>(), provider: ConsoleLogger },
// Autowire class (dependencies resolved automatically)
{ token: UserService }
]
});
// Use it
const userService = container.resolve(UserService);At build time, this generates optimized factory functions. Zero DI library shipped to production!
📖 Documentation
For complete documentation, visit djodjonx.github.io/neosyringe
| Topic | Description | |-------|-------------| | Getting Started | Installation and first container | | Why NeoSyringe? | Comparison with traditional DI | | Injection Types | Classes, interfaces, factories, primitives | | Lifecycle | Singleton vs transient | | Scoped Injections | Override parent container tokens | | Parent Container | SharedKernel architecture | | Legacy Migration | Bridge tsyringe, InversifyJS | | Generated Code | What the compiler produces | | CLI Validator | Validate in CI/CD | | IDE Plugin | Real-time error detection | | API Reference | Types and functions |
🔧 Build Plugin Setup
import { neoSyringePlugin } from '@djodjonx/neosyringe-plugin';
export default defineConfig({
plugins: [neoSyringePlugin.vite()]
});import { neoSyringePlugin } from '@djodjonx/neosyringe-plugin';
export default {
plugins: [neoSyringePlugin.rollup()]
};module.exports = {
plugins: [require('@djodjonx/neosyringe-plugin').webpack()]
};🛡️ IDE Support
Add to tsconfig.json for real-time error detection:
{
"compilerOptions": {
"plugins": [
{ "name": "@djodjonx/neosyringe-lsp" }
]
}
}📄 License
MIT
