@eddeee888/gcg-typescript-resolver-files
Version:
This [GraphQL Code Generator](https://www.the-guild.dev/graphql/codegen) plugin creates resolvers given GraphQL schema.
165 lines (164 loc) • 6.06 kB
TypeScript
import type { SourceFile, Project } from 'ts-morph';
import type * as typeScriptResolversPlugin from '@graphql-codegen/typescript-resolvers';
import type { GraphQLObjectTypeResolversToGenerate } from '../getGraphQLObjectTypeResolversToGenerate';
import type { TypeMappersMap } from '../parseTypeMappers';
import type { ImportLineMeta, RootObjectType } from '../utils';
import type { ParsedPresetConfig } from '../validatePresetConfig';
import type { NormalizedResolverName } from '../parseGraphQLSchema';
import type { ParsedGraphQLSchemaMeta } from '../parseGraphQLSchema';
export type GeneratedTypesFileMeta = {
generatedResolverTypes: NonNullable<Awaited<ReturnType<typeof typeScriptResolversPlugin.plugin>>['meta']>['generatedResolverTypes'];
};
interface BaseVirtualFile {
__filetype: string;
filesystem: {
type: 'virtual' | 'filesystem';
contentUpdated: boolean;
};
content: string;
mainImportIdentifier: string;
}
export interface StandardFile extends BaseVirtualFile {
__filetype: 'file';
}
export interface InterfacelResolverFile extends BaseVirtualFile {
__filetype: 'interfaceResolver';
meta: {
moduleName: string;
relativePathFromBaseToModule: string[];
resolverTypeImportDeclaration: string;
variableStatement: string;
resolverType: {
baseImport: string;
final: string;
};
normalizedResolverName: NormalizedResolverName;
};
}
export interface UnionResolverFile extends BaseVirtualFile {
__filetype: 'unionResolver';
meta: {
moduleName: string;
relativePathFromBaseToModule: string[];
resolverTypeImportDeclaration: string;
variableStatement: string;
resolverType: {
baseImport: string;
final: string;
};
normalizedResolverName: NormalizedResolverName;
};
}
export interface ScalarResolverFile extends BaseVirtualFile {
__filetype: 'scalarResolver';
meta: {
moduleName: string;
relativePathFromBaseToModule: string[];
resolverTypeImportDeclaration: string;
variableStatement: string;
resolverType: {
baseImport: string;
final: string;
};
normalizedResolverName: NormalizedResolverName;
};
}
export interface EnumResolverFile extends BaseVirtualFile {
__filetype: 'enumResolver';
meta: {
moduleName: string;
relativePathFromBaseToModule: string[];
resolverTypeImportDeclaration: string;
variableStatement: string;
resolverType: {
baseImport: string;
final: string;
};
normalizedResolverName: NormalizedResolverName;
allowedValues: string[];
};
}
export interface RootObjectTypeFieldResolverFile extends BaseVirtualFile {
__filetype: 'rootObjectTypeFieldResolver';
meta: {
moduleName: string;
relativePathFromBaseToModule: string[];
belongsToRootObject: RootObjectType;
resolverTypeImportDeclaration: string;
variableStatement: string;
resolverType: {
baseImport: string;
resolver: string;
final: string;
};
normalizedResolverName: NormalizedResolverName;
};
}
export interface ObjectTypeFile extends BaseVirtualFile {
__filetype: 'objectType';
meta: {
moduleName: string;
relativePathFromBaseToModule: string[];
resolverTypeImportDeclaration: string;
variableStatement: string;
resolverType: {
baseImport: string;
final: string;
otherVariants: string[];
};
normalizedResolverName: NormalizedResolverName;
resolversToGenerate?: GraphQLObjectTypeResolversToGenerate[number];
};
}
export type ResolverFile = RootObjectTypeFieldResolverFile | ObjectTypeFile | InterfacelResolverFile | UnionResolverFile | ScalarResolverFile | EnumResolverFile;
export interface GenerateResolverFilesContext {
config: {
baseOutputDir: string;
resolverTypesPath: string;
resolverRelativeTargetDir: string;
resolverMainFile: string;
resolverMainFileMode: ParsedPresetConfig['resolverMainFileMode'];
resolverGeneration: ParsedPresetConfig['resolverGeneration'];
unmanagedResolvers: Record<string, string>;
tsMorph: {
project: Project;
typesSourceFile: SourceFile;
};
typeMappersMap: TypeMappersMap;
parsedGraphQLSchemaMeta: ParsedGraphQLSchemaMeta;
graphQLObjectTypeResolversToGenerate: GraphQLObjectTypeResolversToGenerate;
fixObjectTypeResolvers: ParsedPresetConfig['fixObjectTypeResolvers'];
emitLegacyCommonJSImports: boolean;
generatedTypesFileMeta: GeneratedTypesFileMeta;
};
result: {
files: Record<string, StandardFile | ResolverFile>;
externalImports: Record<string, {
moduleName: string;
relativePathFromBaseToModule: string[];
importLineMeta: ImportLineMeta;
identifierUsages: {
identifierName: string;
normalizedResolverName: string;
}[];
}>;
};
}
export interface GraphQLTypeHandlerParams<BelongsToRootObject = null> {
moduleName: string;
relativePathFromBaseToModule: string[];
fieldFilePath: string;
resolverName: string;
isFileAlreadyOnFilesystem: boolean;
belongsToRootObject: BelongsToRootObject;
normalizedResolverName: NormalizedResolverName;
resolversTypeMeta: {
typeNamedImport: string;
module: ImportLineMeta['module'];
moduleType: ImportLineMeta['moduleType'];
typeString: string;
};
generatedTypesFileMeta: GeneratedTypesFileMeta;
}
export type GraphQLTypeHandler<BelongsToRootObject = null, ExtraParams = Record<string, unknown>> = (params: GraphQLTypeHandlerParams<BelongsToRootObject> & ExtraParams, ctx: GenerateResolverFilesContext) => void;
export {};