5.0.9 • Published 8 months ago

ts-constructor-injector v5.0.9

Weekly downloads
-
License
ISC
Repository
github
Last release
8 months ago

NPM version:latest npm downloads npm bundle size (minified + gzip) Coverage Status License

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