@djodjonx/neosyringe
v0.2.1
Published
Runtime library for NeoSyringe DI
Readme
✨ Features
- IDE Plugin - Real-time validation with all errors shown at once, precise error positioning
- Use Interfaces as Tokens -
useInterface<ILogger>()without manual Symbols - Zero Runtime Overhead - Generated factory functions, no DI library shipped
- Compile-Time Safety - Missing dependencies, cycles, and duplicates detected in your IDE
- Pure Classes - No decorators, no DI imports in your business code
- Comprehensive Validation - Validates across parent containers, extends, and partialConfigs
- Gradual Migration - Bridge existing containers (tsyringe, InversifyJS)
- CI Validation - CLI to verify your dependency graph
- ts-patch support - Works with plain
tsc, no bundler required
📦 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) {}
greet(name: string) { this.logger.log(`Hello, ${name}`); }
}// container.ts
import { defineBuilderConfig, useInterface } from '@djodjonx/neosyringe';
export const container = defineBuilderConfig({
injections: [
{ token: useInterface<ILogger>(), provider: ConsoleLogger },
{ token: UserService },
]
});
// main.ts — full type safety, no assertions
const userService = container.resolve(UserService); // Type: UserService ✅
userService.greet('World');At build time, this generates optimized factory functions. Zero DI library shipped to production!
🧪 Live Examples
| Example | |
|---------|--|
| Nuxt 4 — DDD | |
| NestJS — REST API |
|
📖 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 | | Multiple Containers | Organize multiple containers per file | | 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()]
};Install ts-patch and add the transformer to your tsconfig.json:
pnpm add -D ts-patch @djodjonx/neosyringe-plugin{
"compilerOptions": {
"plugins": [
{ "transform": "@djodjonx/neosyringe-plugin/transformer", "transformProgram": true }
]
}
}Add to package.json scripts so ts-patch patches TypeScript on install:
{
"scripts": {
"prepare": "ts-patch install -s"
}
}tsc (and any CLI that uses it, like nest build) will then run the NeoSyringe transformer automatically.
🛡️ IDE Support
Get comprehensive real-time validation in your editor:
pnpm add -D @djodjonx/neosyringe-lsp{
"compilerOptions": {
"plugins": [
{ "name": "@djodjonx/neosyringe-lsp" }
]
}
}What you get:
- ✅ All missing dependencies shown at once (not just the first error)
- ✅ Precise error positioning on the exact token with the problem
- ✅ Clean error messages without internal hash IDs
- ✅ Cross-file validation works correctly with imported services
- ✅ Context-aware validates across parent containers and extends
See IDE Plugin Guide for setup details.
🔍 CLI Validator
Validate your dependency graph in CI/CD:
pnpm add -D @djodjonx/neosyringe-cli
npx neosyringe-check
# or specify a custom tsconfig:
npx neosyringe-check --project tsconfig.build.jsonSee CLI Guide for all options.
📄 License
MIT
