A gitbeaker wrapper for NestJS framework.
Gitlab API library module for Nest.
npm install --save nest-gitlab @gitbeaker/node| gitbeaker | nest-gitlab |
|---|---|
| node-gitlab (former gitbeaker) | 1.x |
| 19.0.0 ~ 23.5.0 | 2.x |
| 23.6.0 ~ | 3.x |
Import GitlabModule and configure it with the same initiating options as the gitbeaker package.
import { GitlabModule } from 'nest-gitlab';
@Module({
imports: [
GitlabModule.forRoot({
// options
}),
],
})
export class AppModule {}Afterward, the gitlab instance will be ready to be injected across the entire project using the gitlab injection token.
import { Controller, Inject } from '@nestjs/common';
import { GitlabInstance } from 'nest-gitlab';
@Controller('cats')
export class CatsController {
constructor(@Inject('gitlab') private readonly gitlab: GitlabInstance) { }
}You could also use the InjectGitlabInstance decorator to inject gitlab instance.
import { Controller, Inject } from '@nestjs/common';
import { GitlabInstance, InjectGitlabInstance } from 'nest-gitlab';
@Controller('cats')
export class CatsController {
constructor(@InjectGitlabInstance() private readonly gitlab: GitlabInstance) { }
@Get('/projects')
public async getProjects() {
return await this.gitlab.Projects.all();
}
}You might want to asynchronously pass your module options. In such case, use the forRootAsync() method. The option object could be returned by useFactory method:
import { Module } from '@nestjs/common';
import { GitlabModule } from 'nest-gitlab';
@Module({
imports: [
GitlabModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (config: ConfigService) => {
// return options
},
inject: [ConfigService],
}),
],
})
export class AppModule {}gitbeaker provides bundle feature which is a export for importing and instantiating all related API's of a specific resource at once. In order to use this feature, you could use the InjectBundleRef decorator combined with forFeature method:
import { GitlabModule } from 'nest-gitlab';
@Module({
imports: [
GitlabModule.forRoot({
// options
}),
],
})
export class AppModule {}import { Module } from '@nestjs/common';
import { BundleType, GitlabModule } from 'nest-gitlab';
@Module({
imports: [
GitlabModule.forFeature([BundleType.Projects]),
],
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}BundleType could be Projects, Users, or Groups.
import { Controller, Inject } from '@nestjs/common';
import { BundleType, GitlabInstance, InjectBundleRef, ProjectsBundleRef } from 'nest-gitlab';
@Controller('cats')
export class CatsController {
constructor(@InjectBundleRef(BundleType.Projects) private readonly pbr: ProjectsBundleRef) { }
@Get('/projects')
public async getProjects() {
return await this.pbr.Projects.all();
}
}In some cases, your projects may require multiple GitLab instances. This can be achieved by naming the gitlab instances:
import { Module } from '@nestjs/common';
import { GitlabModule } from 'nest-gitlab';
@Module({
imports: [
GitlabModule.forRootAsync({
name: 'ins1',
imports: [ConfigModule],
useFactory: async (config: ConfigService) => {
// return options
},
inject: [ConfigService],
}),
GitlabModule.forRoot({
name: 'ins2',
// options
}),
],
})
export class AppModule {}import { Module } from '@nestjs/common';
import { BundleType, GitlabModule } from 'nest-gitlab';
@Module({
imports: [
GitlabModule.forFeature([BundleType.Projects], 'ins1'),
],
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}import { Controller, Inject } from '@nestjs/common';
import { BundleType, GitlabInstance, InjectBundleRef, InjectGitlabInstance, ProjectsBundleRef } from 'nest-gitlab';
@Controller('cats')
export class CatsController {
constructor(@InjectBundleRef(BundleType.Projects, 'ins1') private readonly pbr1: ProjectsBundleRef,
@InjectGitlabInstance('ins2') private readonly gitlab2: GitlabInstance) { }
}MIT