UNPKG

@graphql-codegen/typescript-type-graphql

Version:

GraphQL Code Generator plugin for generating TypeGraphQL compatible TypeScript types

26 lines (25 loc) 1.42 kB
import { getCachedDocumentNodeFromSchema, oldVisit, } from '@graphql-codegen/plugin-helpers'; import { includeIntrospectionTypesDefinitions, TsIntrospectionVisitor, } from '@graphql-codegen/typescript'; import { TypeGraphQLVisitor } from './visitor.js'; export * from './visitor.js'; const TYPE_GRAPHQL_IMPORT = `import * as TypeGraphQL from 'type-graphql';\nexport { TypeGraphQL };`; const isDefinitionInterface = (definition) => definition.includes('@TypeGraphQL.InterfaceType()'); export const plugin = (schema, documents, config) => { const visitor = new TypeGraphQLVisitor(schema, config); const astNode = getCachedDocumentNodeFromSchema(schema); const visitorResult = oldVisit(astNode, { leave: visitor }); const introspectionDefinitions = includeIntrospectionTypesDefinitions(schema, documents, config); const scalars = visitor.scalarsDefinition; const { definitions } = visitorResult; // Sort output by interfaces first, classes last to prevent TypeScript errors definitions.sort((definition1, definition2) => +isDefinitionInterface(definition2) - +isDefinitionInterface(definition1)); return { prepend: [ ...visitor.getEnumsImports(), ...visitor.getWrapperDefinitions(), TYPE_GRAPHQL_IMPORT, ], content: [scalars, ...definitions, ...introspectionDefinitions].join('\n'), }; }; export { TsIntrospectionVisitor };