1.1.0 • Published 1 year ago

@luxury-presence/nestjs-liveby v1.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

@luxurypresence/nestjs-liveby

LiveBy module for for Nest based on the LiveBy's api.

Installation

$ npm i --save @luxury-presence/nestjs-liveby @nestjs/axios rxjs

Usage

Import LiveByModule:

@Module({
  imports: [LiveByModule.register({
    apiKey: 'LIVEBY_API_KEY',
    clientId: 'LIVEBY_CLIENT_ID',
    baseApi: 'LIVEBY_BASE_API',
  })],
  providers: [...],
})
export class SearchModule {}

Inject LiveByService:

@Injectable()
export class SearchService {
  constructor(private readonly liveByService: LiveByService) {}

  async findWalkScores(lat: number, lon: number): Promise<WalkScores> {
    return this.liveByService.findWalkScores(lat, lon);
  }

  async findAreaOfInterest(
    lat: number,
    lon: number
  ): Promise<AreaOfInterest[]> {
    return this.liveByService.findAreasOfInterest(lat, lon);
  }
}

Async options

Quite often you might want to asynchronously pass your module options instead of passing them beforehand. In such case, use registerAsync() method, that provides a couple of various ways to deal with async data.

1. Use factory

LiveByModule.registerAsync({
  useFactory: () => ({
    apiKey: 'LIVEBY_API_KEY',
    clientId: 'LIVEBY_CLIENT_ID',
    baseApi: 'LIVEBY_BASE_API',
  }),
});

Obviously, our factory behaves like every other one (might be async and is able to inject dependencies through inject).

LiveByModule.registerAsync({
  imports: [ConfigModule],
  useFactory: async (configService: ConfigService) => ({
    apiKey: configService.get('LIVEBY_API_KEY'),
    clientId: configService.get('LIVEBY_CLIENT_ID'),
    baseApi: configService.get('LIVEBY_BASE_API'),
  }),
  inject: [ConfigService],
}),

2. Use class

LiveByModule.registerAsync({
  useClass: LiveByConfigService,
});

Above construction will instantiate LiveByConfigService inside LiveByModule and will leverage it to create options object.

class LiveByConfigService implements LiveByModuleOptionsFactory {
  createLiveByModuleOptions(): LiveByModuleOptions {
    return {
      apiKey: 'LIVEBY_API_KEY',
      clientId: 'LIVEBY_CLIENT_ID',
      baseApi: 'LIVEBY_BASE_API',
    };
  }
}

3. Use existing

LiveByModule.registerAsync({
  imports: [ConfigModule],
  useExisting: ConfigService,
}),

It works the same as useClass with one critical difference - LiveByModule will lookup imported modules to reuse already created ConfigService, instead of instantiating it on its own.

License

MIT

2.0.1-0

1 year ago

1.1.1-alpha.1

2 years ago

1.1.0

2 years ago

1.0.1

3 years ago

1.0.0

3 years ago

0.2.2

3 years ago

0.2.1

3 years ago

0.2.0

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.2

3 years ago

0.1.1

3 years ago

0.1.0

3 years ago