{"_id":"@ejekanshjain/type-graphql-dataloader","_rev":"3-39195a7ea8739d82a86d830b11aa0a5d","name":"@ejekanshjain/type-graphql-dataloader","dist-tags":{"latest":"0.6.0"},"versions":{"0.5.2":{"name":"@ejekanshjain/type-graphql-dataloader","version":"0.5.2","keywords":["typescript","graphql","dataloader","typeorm"],"author":{"url":"https://github.com/ejekanshjain","name":"Ekansh Jain"},"license":"MIT","_id":"@ejekanshjain/type-graphql-dataloader@0.5.2","maintainers":[{"name":"ejekanshjain","email":"ejekanshjain@gmail.com"}],"homepage":"https://github.com/ejekanshjain/type-graphql-dataloader#readme","bugs":{"url":"https://github.com/ejekanshjain/type-graphql-dataloader/issues"},"dist":{"shasum":"66165a18e8c7d3b433a8391bbdd64f59ecfeacdc","tarball":"https://registry.npmjs.org/@ejekanshjain/type-graphql-dataloader/-/type-graphql-dataloader-0.5.2.tgz","fileCount":17,"integrity":"sha512-apdQJBLkmwpq/bFY/fdkYcR7Fy5J8lksQl0vfnuVEZa+E7laziyJX0rhaIy0WrzpZCsZlAlk5AqQ7BLhVRQyJw==","signatures":[{"sig":"MEUCIFwQCcHZNONGWjwgRR9fkbDmkHPuw/owh/5s57XXFBPpAiEAleviCbteR0x+aRKJA0PkiBF5H1CMd0t2gt2WNyMHsVE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26223},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"4d5b67f8adde0c92993674f5eb9a1c4cec3f722a","scripts":{"test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist","dev:typeorm":"ts-node-dev -r tsconfig-paths/register examples/typeorm/index.ts"},"_npmUser":{"name":"ejekanshjain","email":"ejekanshjain@gmail.com"},"repository":{"url":"git+https://github.com/ejekanshjain/type-graphql-dataloader.git","type":"git"},"_npmVersion":"10.1.0","description":"Fork of slaypni's type-graphql-dataloader utility to use DataLoader with TypeGraphQL without fuss","directories":{},"_nodeVersion":"20.8.1","dependencies":{"uuid":"^9.0.0","lodash":"^4.17.21","typedi":"^0.8.0","dataloader":"^2.1.0","@types/validator":"^13.7.17","reflect-metadata":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","rimraf":"^3.0.2","express":"^4.17.1","graphql":"^16.6.0","sqlite3":"^5.0.2","ts-jest":"^26.4.1","typeorm":"^0.2.38","typescript":"~5.1.6","@types/jest":"^26.0.14","@types/node":"^16.11.6","@types/uuid":"^9.0.0","ts-node-dev":"^1.1.8","type-graphql":"^2.0.0-beta.3","@types/lodash":"^4.14.162","@apollo/server":"^4.4.1","@types/express":"^4.17.17","tsconfig-paths":"^3.11.0","class-validator":"^0.14.0","graphql-request":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/type-graphql-dataloader_0.5.2_1697910504727_0.5791348618485672","host":"s3://npm-registry-packages"}},"0.5.3":{"name":"@ejekanshjain/type-graphql-dataloader","version":"0.5.3","keywords":["typescript","graphql","dataloader","typeorm"],"author":{"url":"https://github.com/ejekanshjain","name":"Ekansh Jain"},"license":"MIT","_id":"@ejekanshjain/type-graphql-dataloader@0.5.3","maintainers":[{"name":"ejekanshjain","email":"ejekanshjain@gmail.com"}],"homepage":"https://github.com/ejekanshjain/type-graphql-dataloader#readme","bugs":{"url":"https://github.com/ejekanshjain/type-graphql-dataloader/issues"},"dist":{"shasum":"7fcf81941e864be0df32a6d33f8f54920ba8f7a8","tarball":"https://registry.npmjs.org/@ejekanshjain/type-graphql-dataloader/-/type-graphql-dataloader-0.5.3.tgz","fileCount":17,"integrity":"sha512-LkQq54wRRJPokiGBDY/vH537IOdhrrThvIjaY6PvkqGAbekAd0LwDlD1xrY9/Z5mj1txqqt3xf/WFZJfe6kO0A==","signatures":[{"sig":"MEUCIQCnf5SXpnv105WXZWNdAp3v+2TXPxdatG3grl+K7L7HAQIgU9FHO2fLV+Ad0J+qY02bvd8aCVlkvRGaRKeDGmV1NW8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26223},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"12d81daf7e4b514bf70aa539f32c9dba284b7816","scripts":{"test":"jest","build":"tsc -p tsconfig.build.json","clean":"rimraf dist","dev:typeorm":"ts-node-dev -r tsconfig-paths/register examples/typeorm/index.ts"},"_npmUser":{"name":"ejekanshjain","email":"ejekanshjain@gmail.com"},"repository":{"url":"git+https://github.com/ejekanshjain/type-graphql-dataloader.git","type":"git"},"_npmVersion":"10.1.0","description":"Fork of slaypni's type-graphql-dataloader utility to use DataLoader with TypeGraphQL without fuss","directories":{},"_nodeVersion":"20.8.1","dependencies":{"uuid":"^9.0.0","lodash":"^4.17.21","typedi":"^0.8.0","dataloader":"^2.1.0","@types/validator":"^13.7.17","reflect-metadata":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","rimraf":"^3.0.2","express":"^4.17.1","graphql":"^16.6.0","sqlite3":"^5.0.2","ts-jest":"^26.4.1","typeorm":"^0.3.17","typescript":"~5.1.6","@types/jest":"^26.0.14","@types/node":"^16.11.6","@types/uuid":"^9.0.0","ts-node-dev":"^1.1.8","type-graphql":"^2.0.0-beta.3","@types/lodash":"^4.14.162","@apollo/server":"^4.4.1","@types/express":"^4.17.17","tsconfig-paths":"^3.11.0","class-validator":"^0.14.0","graphql-request":"^3.6.1"},"_npmOperationalInternal":{"tmp":"tmp/type-graphql-dataloader_0.5.3_1697912048009_0.46531557513051935","host":"s3://npm-registry-packages"}},"0.6.0":{"name":"@ejekanshjain/type-graphql-dataloader","description":"Fork of slaypni's type-graphql-dataloader utility to use DataLoader with TypeGraphQL without fuss","version":"0.6.0","author":{"name":"Ekansh Jain","url":"https://github.com/ejekanshjain"},"repository":{"type":"git","url":"git+https://github.com/ejekanshjain/type-graphql-dataloader.git"},"keywords":["typescript","graphql","dataloader","typeorm"],"license":"MIT","bugs":{"url":"https://github.com/ejekanshjain/type-graphql-dataloader/issues"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc -p tsconfig.build.json","clean":"rimraf dist","dev:typeorm":"ts-node-dev -r tsconfig-paths/register examples/typeorm/index.ts","test":"jest"},"dependencies":{"dataloader":"^2.2.3","lodash":"^4.18.1","reflect-metadata":"^0.1.14","typedi":"^0.10.0"},"devDependencies":{"@apollo/server":"^5.5.1","@as-integrations/express4":"^1.1.2","@types/better-sqlite3":"^9.6.0","@types/express":"^4.17.25","@types/jest":"^30.0.0","@types/lodash":"^4.17.25","@types/node":"^26.4.0","better-sqlite3":"^13.0.3","class-validator":"^0.14.0","express":"^4.22.2","graphql":"^16.14.0","graphql-request":"^3.6.1","jest":"^30.5.0","rimraf":"^6.1.3","ts-jest":"^29.4.12","ts-node-dev":"^2.0.0","tsconfig-paths":"^4.2.0","type-graphql":"^2.0.0-rc.3","typeorm":"^1.1.0","typescript":"^6.0.3"},"gitHead":"96c7a35c3596d19920dd0208ece49b2f8185e342","_id":"@ejekanshjain/type-graphql-dataloader@0.6.0","homepage":"https://github.com/ejekanshjain/type-graphql-dataloader#readme","_nodeVersion":"26.8.1","_npmVersion":"12.0.2","dist":{"integrity":"sha512-vuAVFpqvZ1RqIRvKona7URy/tKjggnwZm5EWtZtMHx06HLNtN4AUxsKI9j+spriKdUd9tbx8imi2SDt/BOksag==","shasum":"db70ab5c5289b8ff865b3fc9ad80f3153e78db6f","tarball":"https://registry.npmjs.org/@ejekanshjain/type-graphql-dataloader/-/type-graphql-dataloader-0.6.0.tgz","fileCount":18,"unpackedSize":26718,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICRgpWkT9KU662Q1iWM5ywWBGaEujCQb0LXCLVEYthBFAiBJ0sTnQp4Oj0znAkp9DVbxSH5F3+h/1dB9Tt9qx/vz+g=="}]},"_npmUser":{"name":"ejekanshjain","email":"ejekanshjain@gmail.com"},"directories":{},"maintainers":[{"name":"ejekanshjain","email":"ejekanshjain@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/type-graphql-dataloader_0.6.0_1788169821486_0.5371448554204021"},"_hasShrinkwrap":false}},"time":{"created":"2023-10-21T17:48:24.651Z","modified":"2026-08-31T09:50:21.791Z","0.5.2":"2023-10-21T17:48:24.976Z","0.5.3":"2023-10-21T18:14:08.225Z","0.6.0":"2026-08-31T09:50:21.614Z"},"bugs":{"url":"https://github.com/ejekanshjain/type-graphql-dataloader/issues"},"author":{"name":"Ekansh Jain","url":"https://github.com/ejekanshjain"},"license":"MIT","homepage":"https://github.com/ejekanshjain/type-graphql-dataloader#readme","keywords":["typescript","graphql","dataloader","typeorm"],"repository":{"type":"git","url":"git+https://github.com/ejekanshjain/type-graphql-dataloader.git"},"description":"Fork of slaypni's type-graphql-dataloader utility to use DataLoader with TypeGraphQL without fuss","maintainers":[{"name":"ejekanshjain","email":"ejekanshjain@gmail.com"}],"readme":"# TypeGraphQL-DataLoader\n\nTypeGraphQL-DataLoader is an utility to use DataLoader with TypeGraphQL without fuss.\n\n## Install\n\n```\nnpm install type-graphql-dataloader\n```\n\nThe latest build is tested with the following packages:\n\n- type-graphql 2.0.0\n- apollo-server-express 4.4.1\n- (optional) typeorm 0.3.17\n\n## Getting Started\n\nApollo Server is the first-class supported server. If your application uses Apollo Server, pass `ApolloServerLoaderPlugin()` as a plugin when instantiating the server. This plugin is for set-up and clean-up against each request.\n\n```ts\nimport { ApolloServerLoaderPlugin } from \"type-graphql-dataloader\";\nimport { getConnection } from \"typeorm\";\n\n...\n\nconst apollo = new ApolloServer({\n  schema,\n  plugins: [\n    ApolloServerLoaderPlugin({\n      typeormGetConnection: getConnection,  // for use with TypeORM\n    }),\n  ],\n});\n\n...\n```\n\n### With TypeORM\n\nTypeORM is the first-class supported ORM. If your application uses TypeORM with TypeGraphQL, adding `@TypeormLoader` decorator to relation properties will solve N + 1 problem. When the fields are accessed by graphQL, batch loading will be performed using DataLoader under the hood.\n\n```ts\nimport { ObjectType, Field, ID } from \"type-graphql\";\nimport { TypeormLoader } from \"type-graphql-dataloader\";\nimport { Entity, PrimaryGeneratedColumn, ManyToOne, RelationId } from \"typeorm\";\nimport { User } from \"./User\";\n\n@ObjectType()\n@Entity()\nexport class Photo {\n  @Field((type) => ID)\n  @PrimaryGeneratedColumn()\n  id: number;\n\n  @Field((type) => User)\n  @ManyToOne((type) => User, (user) => user.photos)\n  @TypeormLoader()\n  user: User;\n}\n```\n\n```ts\nimport { ObjectType, Field, ID } from \"type-graphql\";\nimport { TypeormLoader } from \"type-graphql-dataloader\";\nimport { Entity, PrimaryGeneratedColumn, OneToMany, RelationId } from \"typeorm\";\nimport { Photo } from \"./Photo\";\n\n@ObjectType()\n@Entity()\nexport class User {\n  @Field((type) => ID)\n  @PrimaryGeneratedColumn()\n  id: number;\n\n  @Field((type) => [Photo])\n  @OneToMany((type) => Photo, (photo) => photo.user)\n  @TypeormLoader()\n  photos: Photo[];\n}\n```\n\n`@TypeormLoader` does not need arguments since `v0.4.0`. In order to pass foeign key explicitly, arguments are still supported. Take a look at previous [README](https://github.com/slaypni/type-graphql-dataloader/blob/v0.3.7/README.md#with-typeorm) for details.\n\n### With Custom DataLoader\n\nIt is possible to assign custom DataLoader to a field by adding `@Loader` decorator to the corresponding method with `@FieldResolver`. `@Loader` takes a batch load function which is passed to the DataLoader constructor. The decorated method should return a function which takes a DataLoader instance and returns Promise of loaded value(s).\n\n```ts\nimport DataLoader from \"dataloader\";\nimport { groupBy } from \"lodash\";\nimport { Resolver, Query, FieldResolver, Root } from \"type-graphql\";\nimport { Loader } from \"type-graphql-dataloader\";\nimport { getRepository, In } from \"typeorm\";\nimport { Photo } from \"./Photo\";\nimport { User } from \"./User\";\n\n@Resolver((of) => User)\nexport default class UserResolver {\n\n  ...\n\n  @FieldResolver()\n  @Loader<number, Photo[]>(async (ids, { context }) => {  // batchLoadFn\n    const photos = await getRepository(Photo).find({\n      where: { user: { id: In([...ids]) } },\n    });\n    const photosById = groupBy(photos, \"userId\");\n    return ids.map((id) => photosById[id] ?? []);\n  })\n  photos(@Root() root: User) {\n    return (dataloader: DataLoader<number, Photo[]>) =>\n      dataloader.load(root.id);\n  }\n}\n```\n","readmeFilename":"README.md"}