@tracworx/nestjs-dataloader
Version:
Quick and easy GraphQL dataloaders for NestJS
111 lines (82 loc) • 3.74 kB
Markdown
# GraphQL Dataloaders for NestJS
[](https://www.npmjs.com/package/@tracworx/nestjs-dataloader)
[](https://www.npmjs.com/package/@tracworx/nestjs-dataloader)

[](https://www.npmjs.com/package/@tracworx/nestjs-dataloader)
[](https://github.com/tracworx/nestjs-dataloader/actions/workflows/super-linter.yml)
[](https://github.com/tracworx/nestjs-dataloader/actions/workflows/ci.yml)
[](https://github.com/tracworx/nestjs-dataloader/actions/workflows/npm-publish.yml)
[](https://codeclimate.com/github/tracworx/nestjs-dataloader/maintainability)
[](https://codeclimate.com/github/tracworx/nestjs-dataloader/test_coverage)
[](https://twitter.com/realEoinOBrien)
## Description
Quick and easy GraphQL [dataloaders](https://github.com/graphql/dataloader) for NestJS.
## Installation
```bash
$ npm install @tracworx/nestjs-dataloader
```
## Usage
Import the `DataloaderModule` in your root module.
```typescript
import { Module } from '@nestjs/common';
import { DataloaderModule } from '@tracworx/nestjs-dataloader';
import { ItemResolver } from './item.resolver';
import { ItemLoader } from './item.loader';
@Module({
imports: [DataloaderModule],
providers: [ItemResolver, ItemLoader],
})
export class AppModule {}
```
Decorate dataloader factory classes with `@DataloaderProvider()` to automatically provide them to the GraphQL context object for each request.
```typescript
import DataLoader from 'dataloader';
import { DataloaderProvider } from '@tracworx/nestjs-dataloader';
@DataloaderProvider()
class ItemLoader {
createDataloader(ctx: GqlExecutionContext) {
// Fetch request-scoped context data if needed
const user = ctx.getContext().req.user;
// Replace this with your actual dataloader implementation
return new DataLoader<string, Item>(async (ids) => getItemsWithIds(user, ids));
}
}
```
Use `@Loader(...)` to inject a dataloader instance into your resolver methods.
```typescript
import DataLoader from 'dataloader';
import { Loader } from '@tracworx/nestjs-dataloader';
import { ItemLoader } from './item.loader';
@Resolver()
class ItemResolver {
@Query(() => Item, { name: 'item' })
getItem(@Args('id') id: string, @Loader(ItemLoader) itemLoader) {
return itemLoader.load(id);
}
}
```
And that's it. Happy coding!
## Development
```bash
# build
$ npm run build
# format with prettier
$ npm run format
# lint with eslint
$ npm run lint
```
## Test
```bash
# unit tests
$ npm run test
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov
```
## Stay in touch
- Author - [Eoin O'Brien](https://github.com/eoin-obrien)
- Website - [https://tracworx.ai](https://tracworx.ai/)
- Twitter - [@realEoinOBrien](https://twitter.com/realEoinOBrien)
## License
`@tracworx/nestjs-dataloader` is [MIT licensed](LICENSE).