Injector
npm install ts-constructor-injector!NPM version:latest
!npm downloads
!npm bundle size (minified + gzip)

!License
shell script
npm install ts-constructor-injector reflect-metadata
`
`shell script
yarn add ts-constructor-injector reflect-metadata
`tsconfig.json
`json
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
`Usage
`typescript
import { inject, resolve } from "ts-constructor-injector";class Logger {
constructor(@inject(context => context.topic) private name: string) {
}
}
const logger = resolve({topic: 'main'})(Logger);
`$3
`typescript
import { hook, getHooks } from "ts-constructor-injector";class Logger {
@hook('onDispose')
async dispose(message: string): Promise {
console.log(message);
}
}
(async () => {
const instance = new Logger();
for (const hook of getHooks(instance, 'onDispose')) {
await instancehook; // disposed
}
})()
`$3
`typescript
import { handleAsyncError } from "ts-constructor-injector";const prismaToDomainError: HandleErrorParams = (error, context) => {
if (error instanceof Prisma.PrismaClientKnownRequestError) {
switch (error.code) {
case "P2002":
throw new PersistenceConflictError(errorToString(error));
case "P2025":
throw new EntityNotFoundError(errorToString(error));
default:
throw new PersistenceError(errorToString(error));
}
}
throw new UnknownError(errorToString(error));
};
class AsyncRepo {
@handleAsyncError(prismaToDomainError)
async saveSmth() {
await sleep(1000);
throw new Prisma.PrismaClientKnownRequestError("P2002");
}
}
class Repo {
@handleError(prismaToDomainError)
saveSmth() {
throw new Prisma.PrismaClientKnownRequestError("P2002");
}
}
``