@eddeee888/gcg-typescript-resolver-files
Version:
This [GraphQL Code Generator](https://www.the-guild.dev/graphql/codegen) plugin creates resolvers given GraphQL schema.
65 lines (64 loc) • 2.89 kB
TypeScript
import { type GraphQLSchema } from 'graphql';
import type { ParseSourcesResult } from '../parseSources';
import type { TypeMappersMap } from '../parseTypeMappers';
import type { ParsedPresetConfig, ScalarsOverridesType } from '../validatePresetConfig';
import { normalizeResolverName } from './normalizeResolverName';
import type { GeneratedTypesFileMeta } from '../generateResolverFiles';
interface ParseGraphQLSchemaParams {
schemaAst: GraphQLSchema;
sourceMap: ParseSourcesResult['sourceMap'];
resolverTypesPath: string;
typeMappersMap: TypeMappersMap;
scalarsModule: ParsedPresetConfig['scalarsModule'];
scalarsOverrides: ParsedPresetConfig['scalarsOverrides'];
mode: ParsedPresetConfig['mode'];
baseOutputDir: string;
resolverRelativeTargetDir: string;
whitelistedModules: ParsedPresetConfig['whitelistedModules'];
blacklistedModules: ParsedPresetConfig['blacklistedModules'];
}
export interface ResolverDetails {
schemaType: string;
moduleName: string;
resolverFile: {
name: string;
path: string;
isOnFilesystem: boolean;
};
relativePathFromBaseToModule: string[];
normalizedResolverName: ReturnType<typeof normalizeResolverName>;
typeNamedImport: (generatedTypesFileMeta: GeneratedTypesFileMeta) => string;
typeString: (generatedTypesFileMeta: GeneratedTypesFileMeta) => string;
relativePathToResolverTypesFile: string;
}
type ObjectResolverDetails = ResolverDetails & {
fieldsToPick: string[];
};
type EnumResolverDetails = ResolverDetails & {
allowedValues: string[];
};
export interface ParsedGraphQLSchemaMeta {
userDefinedSchemaTypeMap: {
query: Record<string, // normalized resolver name
ResolverDetails>;
mutation: Record<string, // normalized resolver name
ResolverDetails>;
subscription: Record<string, // normalized resolver name
ResolverDetails>;
object: Record<string, // schema name e.g. `User`, `Job`, etc.
Record<string, // normalized name e.g. `user.User` (modules) or `.User` (merged)
ObjectResolverDetails>>;
scalar: Record<string, ResolverDetails>;
interface: Record<string, ResolverDetails>;
union: Record<string, ResolverDetails>;
enum: Record<string, EnumResolverDetails>;
};
pluginsConfig: {
defaultScalarTypesMap: Record<string, ScalarsOverridesType>;
scalarsModuleResolvers: Record<string, string>;
unmanagedScalarResolvers: Record<string, string>;
defaultTypeMappers: Record<string, string>;
};
}
export declare const parseGraphQLSchema: ({ schemaAst, sourceMap, resolverTypesPath, typeMappersMap, scalarsModule, scalarsOverrides, mode, baseOutputDir, resolverRelativeTargetDir, whitelistedModules, blacklistedModules, }: ParseGraphQLSchemaParams) => Promise<ParsedGraphQLSchemaMeta>;
export {};