CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-nestjs--graphql

GraphQL integration for the NestJS framework enabling developers to build GraphQL APIs using decorators and TypeScript

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

services.mddocs/

Service Classes

Core service classes for exploring metadata, handling execution context, and managing GraphQL functionality. These services provide the underlying infrastructure for NestJS GraphQL's code-first approach and runtime operations.

Capabilities

Base Explorer Service

Foundation service for exploring and extracting metadata from NestJS modules.

/**
 * Base class for metadata exploration services
 */
export abstract class BaseExplorerService {
  /**
   * Explores modules and extracts relevant metadata
   * @returns Array of metadata objects
   */
  abstract explore(): any[];
}

Resolver Explorer Service

Service for discovering and processing GraphQL resolvers within NestJS modules.

/**
 * Service for exploring and extracting resolver metadata from modules
 */
export class ResolversExplorerService extends BaseExplorerService {
  /**
   * Explores modules to find GraphQL resolvers
   * @param modules - Array of NestJS modules to explore
   * @returns Array of resolver metadata
   */
  exploreResolvers(modules: Module[]): ResolverMetadata[];
  
  /**
   * Extracts field resolvers from resolver classes
   * @param resolverClass - The resolver class to analyze
   * @returns Array of field resolver metadata
   */
  extractFieldResolvers(resolverClass: Type<any>): FieldResolverMetadata[];
}

Usage Examples:

import { ResolversExplorerService } from "@nestjs/graphql";

const resolversExplorer = new ResolversExplorerService();
const resolverMetadata = resolversExplorer.exploreResolvers(appModules);

Scalar Explorer Service

Service for discovering and processing custom GraphQL scalars.

/**
 * Service for exploring and extracting scalar metadata from modules
 */
export class ScalarsExplorerService extends BaseExplorerService {
  /**
   * Explores modules to find custom GraphQL scalars
   * @param modules - Array of NestJS modules to explore
   * @returns Array of scalar metadata
   */
  exploreScalars(modules: Module[]): ScalarMetadata[];
  
  /**
   * Extracts scalar definition from scalar class
   * @param scalarClass - The scalar class to analyze
   * @returns Scalar metadata
   */
  extractScalarMetadata(scalarClass: Type<any>): ScalarMetadata;
}

GraphQL AST Explorer

Service for exploring GraphQL AST (Abstract Syntax Tree) and generating TypeScript definitions.

/**
 * Service for exploring GraphQL AST and generating type definitions
 */
export class GraphQLAstExplorer {
  /**
   * Explores GraphQL document node and generates TypeScript definitions
   * @param documentNode - GraphQL document AST node
   * @param outputPath - Path where to write generated definitions
   * @param mode - Output format mode
   */
  explore(
    documentNode: DocumentNode, 
    outputPath: string, 
    mode: GenerateOptions['outputAs']
  ): Promise<void>;
  
  /**
   * Generates TypeScript interfaces from GraphQL types
   * @param typeNode - GraphQL type definition node
   * @returns TypeScript interface definition
   */
  generateTypeDefinition(typeNode: TypeDefinitionNode): string;
}

Usage Examples:

import { GraphQLAstExplorer } from "@nestjs/graphql";
import { parse } from "graphql";

const astExplorer = new GraphQLAstExplorer();
const schema = parse(`
  type User {
    id: ID!
    name: String!
  }
`);

await astExplorer.explore(schema, './generated-types.ts', 'interface');

GraphQL Types Loader

Service for loading and merging GraphQL type definitions from files.

/**
 * Service for loading GraphQL schema definitions from files
 */
export class GraphQLTypesLoader {
  /**
   * Merges GraphQL type definitions from multiple file paths
   * @param paths - Array of file paths containing GraphQL schemas
   * @returns Merged GraphQL schema string
   */
  mergeTypesByPaths(paths: string[]): string;
  
  /**
   * Loads GraphQL schema from a single file
   * @param path - File path to GraphQL schema
   * @returns GraphQL schema string
   */
  loadSchema(path: string): string;
}

Usage Examples:

import { GraphQLTypesLoader } from "@nestjs/graphql";

const typesLoader = new GraphQLTypesLoader();
const mergedSchema = typesLoader.mergeTypesByPaths([
  './schemas/user.graphql',
  './schemas/post.graphql'
]);

Type Metadata Storage

Service for storing and managing type metadata used in schema generation.

/**
 * Storage for GraphQL type metadata
 */
export class TypeMetadataStorage {
  /**
   * Adds field metadata to storage
   * @param metadata - Field metadata to store
   */
  addFieldMetadata(metadata: FieldMetadata): void;
  
  /**
   * Adds class metadata to storage
   * @param metadata - Class metadata to store
   */
  addClassMetadata(metadata: ClassMetadata): void;
  
  /**
   * Compiles and returns complete metadata for a target class
   * @param target - Target class constructor
   * @returns Compiled class metadata
   */
  compileClassMetadata(target: Function): ClassMetadata;
  
  /**
   * Gets all field metadata for a specific target
   * @param target - Target class constructor
   * @returns Array of field metadata
   */
  getFieldMetadata(target: Function): FieldMetadata[];
  
  /**
   * Clears all stored metadata
   */
  clear(): void;
}

Metadata Interfaces

Supporting interfaces for metadata storage and exploration.

/**
 * Metadata for GraphQL resolver classes
 */
interface ResolverMetadata {
  target: Function;
  typeFn?: ReturnTypeFunc;
  isAbstract?: boolean;
  parent?: Function;
}

/**
 * Metadata for GraphQL field resolvers
 */
interface FieldResolverMetadata {
  target: Function;
  methodName: string;
  fieldName?: string;
  typeFn?: ReturnTypeFunc;
  options?: ResolveFieldOptions;
}

/**
 * Metadata for custom GraphQL scalars
 */
interface ScalarMetadata {
  target: Function;
  name: string;
  typeFn?: ReturnTypeFunc;
}

/**
 * Metadata for GraphQL fields
 */
interface FieldMetadata {
  target: Function;
  propertyKey: string;
  typeFn?: ReturnTypeFunc;
  options?: FieldOptions;
}

/**
 * Metadata for GraphQL classes (ObjectType, InputType, etc.)
 */
interface ClassMetadata {
  target: Function;
  name?: string;
  description?: string;
  isAbstract?: boolean;
  interfaces?: Function[];
  fields: FieldMetadata[];
}

/**
 * Options for generating TypeScript definitions
 */
interface GenerateOptions {
  outputAs?: 'class' | 'interface';
  outputPath?: string;
  watch?: boolean;
  debug?: boolean;
}

/**
 * NestJS module reference
 */
interface Module {
  metatype: Type<any>;
  providers: any[];
  controllers: any[];
  exports: any[];
}

Usage Examples:

import { TypeMetadataStorage } from "@nestjs/graphql";

const storage = new TypeMetadataStorage();

// Store field metadata
storage.addFieldMetadata({
  target: UserClass,
  propertyKey: 'name',
  typeFn: () => String,
  options: { nullable: false }
});

// Retrieve compiled metadata
const classMetadata = storage.compileClassMetadata(UserClass);

docs

federation.md

index.md

module-configuration.md

resolvers.md

schema-building.md

schema-decorators.md

services.md

subscriptions.md

type-system.md

tile.json