5.0.9 • Published 8 months ago
ts-constructor-injector v5.0.9
ts-constructor-injector
Dependency injection for typescript classes
Install
npm install ts-constructor-injector reflect-metadata
yarn add ts-constructor-injector reflect-metadata
tsconfig.json
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
Usage
import { inject, resolve } from "ts-constructor-injector";
class Logger {
constructor(@inject(context => context.topic) private name: string) {
}
}
const logger = resolve({topic: 'main'})(Logger);
Hooks
import { hook, getHooks } from "ts-constructor-injector";
class Logger {
@hook('onDispose')
async dispose(message: string): Promise<void> {
console.log(message);
}
}
(async () => {
const instance = new Logger();
for (const hook of getHooks(instance, 'onDispose')) {
await instance[hook]('disposed'); // disposed
}
})()
ErrorHandler
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");
}
}
5.0.6
10 months ago
5.0.5
10 months ago
5.0.4
10 months ago
5.0.3
11 months ago
5.0.2
11 months ago
5.0.1
11 months ago
5.0.9
8 months ago
5.0.8
8 months ago
5.0.7
9 months ago
3.4.0
12 months ago
3.1.3
1 year ago
3.0.4
1 year ago
3.3.0
1 year ago
3.1.2
1 year ago
3.0.3
1 year ago
3.2.0
1 year ago
3.1.1
1 year ago
3.0.2
1 year ago
3.1.0
1 year ago
3.0.1
1 year ago
3.0.6
1 year ago
3.0.5
1 year ago
3.0.0
1 year ago
4.0.1
12 months ago
4.0.0
12 months ago
4.0.2
12 months ago
2.3.0
2 years ago
2.2.0
2 years ago
2.3.1
2 years ago
2.1.0
2 years ago
2.0.0
2 years ago
1.2.0
2 years ago
1.1.1
2 years ago
1.5.3
2 years ago
1.5.2
2 years ago
1.5.1
2 years ago
1.4.2
2 years ago
1.5.0
2 years ago
1.4.1
2 years ago
1.3.0
2 years ago
1.2.1
2 years ago
1.1.0
2 years ago
1.0.6
2 years ago
1.0.5
2 years ago
1.0.4
2 years ago