import { Query, Args, Resolver } from '@nestjs/graphql'; import { returnsNodeInterface, returnsNodeInterfaces, NodeInterface } from './node.interface'; import { ResolvedGlobalId, typeResolvedGlobalId, typeResolvedGlobalIds } from '../global-id'; export type ResolvedNode = | Promise<NodeInterface> | NodeInterface | Promise<null> | null | Promise<undefined> | undefined; export interface NodeResolver { resolveNode(id: ResolvedGlobalId): ResolvedNode; } @Resolver(NodeInterface) export class NodeFieldResolver implements NodeResolver { // eslint-disable-next-line @typescript-eslint/no-unused-vars resolveNode(id: ResolvedGlobalId): ResolvedNode { throw new Error('Method not implemented.'); } @Query(returnsNodeInterface, { name: 'node', description: 'Fetches an object given its ID', nullable: true, }) node( @Args({ name: 'id', nullable: false, description: 'The ID of an object', type: typeResolvedGlobalId, }) id: ResolvedGlobalId, ): ResolvedNode { return this.resolveNode(id); } @Query(returnsNodeInterfaces, { name: 'nodes', description: 'Fetches objects given their IDs', nullable: 'items', }) nodes( @Args({ name: 'ids', nullable: false, description: 'The IDs of objects', type: typeResolvedGlobalIds, }) ids: ResolvedGlobalId[], ): Promise<ResolvedNode[]> { return Promise.all(ids.map((id) => Promise.resolve(this.resolveNode(id)))); } }