@tracworx/nestjs-dataloader
TypeScript icon, indicating that this package has built-in type declarations

1.2.1 • Public • Published

GraphQL Dataloaders for NestJS

NPM Version Package License Libraries.io dependency status for latest release NPM Downloads Lint Code Base Node.js CI Node.js Package Maintainability Test Coverage Twitter

Description

Quick and easy GraphQL dataloaders for NestJS.

Installation

$ npm install @tracworx/nestjs-dataloader

Usage

Import the DataloaderModule in your root module.

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.

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.

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

# build
$ npm run build

# format with prettier
$ npm run format

# lint with eslint
$ npm run lint

Test

# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

# test coverage
$ npm run test:cov

Stay in touch

License

@tracworx/nestjs-dataloader is MIT licensed.

Package Sidebar

Install

npm i @tracworx/nestjs-dataloader

Weekly Downloads

1,975

Version

1.2.1

License

MIT

Unpacked Size

21.2 kB

Total Files

27

Last publish

Collaborators

  • eoin-obrien