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