1.0.2 • Published 10 months ago

nestjs-injection-token-resolver v1.0.2

Weekly downloads
-
License
MIT
Repository
-
Last release
10 months ago

nestjs-injection-token-resolver

npm version npm downloads

A tiny utility to standardize the injection token recovery among NestJS libraries.

Usage

npm install nestjs-injection-token-resolver

When you have a injection using some 3rd-party decorator instead of the @Inject() from @nestjs/core, that 3rd-party component (usually a NestJS library) will share with you a another function to resolve the provider's token so that you can use it in a non-class-based approach like the followin snippets:

@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User)
    private usersRepository: Repository<User>,
  ) {}
  // ...
}
@Injectable()
export class AlbumsService {
  constructor(
    @InjectDataSource('albumsConnection')
    private dataSource: DataSource,

    @InjectEntityManager('albumsConnection')
    private entityManager: EntityManager,
  ) {}
  // ...
}
@Module({
  providers: [
    {
      provide: AlbumsService,
      inject: [getDataSourceToken('albumsConnection')],
      useFactory: (albumsConnection: DataSource) => {
        return new AlbumsService(albumsConnection);
      },
    },
  ],
})
export class AlbumsModule {}
@Module({
  providers: [
    UsersService,
    {
      provide: getRepositoryToken(User),
      useValue: mockRepository,
    },
  ],
})
export class UsersModule {}

Thus, you will need to know about getDataSourceToken and getRepositoryToken instead of just knowing about the @Inject*() decorator.
And this is for every NestJS lib out there that has some sort of @Inject*() decorator.

With nestjs-injection-token-resolver you can forget about those helper functions!
Instead, just do:

@Module({
  providers: [
    {
      provide: AlbumsService,
      inject: [ InjectionTokenFor( InjectDataSource('albumsConnection') ) ],
      useFactory: (albumsConnection: DataSource) => {
        return new AlbumsService(albumsConnection);
      },
    },
  ],
})
export class AlbumsModule {}
@Module({
  providers: [
    UsersService,
    {
      provide: InjectionTokenFor( InjectRepository(User) ),
      useValue: mockRepository,
    },
  ],
})
export class UsersModule {}
1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago