@graphql-codegen/typescript-type-graphql
Version:
GraphQL Code Generator plugin for generating TypeGraphQL compatible TypeScript types
31 lines (30 loc) • 1.74 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.TsIntrospectionVisitor = exports.plugin = void 0;
const tslib_1 = require("tslib");
const plugin_helpers_1 = require("@graphql-codegen/plugin-helpers");
const typescript_1 = require("@graphql-codegen/typescript");
Object.defineProperty(exports, "TsIntrospectionVisitor", { enumerable: true, get: function () { return typescript_1.TsIntrospectionVisitor; } });
const visitor_js_1 = require("./visitor.js");
tslib_1.__exportStar(require("./visitor.js"), exports);
const TYPE_GRAPHQL_IMPORT = `import * as TypeGraphQL from 'type-graphql';\nexport { TypeGraphQL };`;
const isDefinitionInterface = (definition) => definition.includes('@TypeGraphQL.InterfaceType()');
const plugin = (schema, documents, config) => {
const visitor = new visitor_js_1.TypeGraphQLVisitor(schema, config);
const astNode = (0, plugin_helpers_1.getCachedDocumentNodeFromSchema)(schema);
const visitorResult = (0, plugin_helpers_1.oldVisit)(astNode, { leave: visitor });
const introspectionDefinitions = (0, typescript_1.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'),
};
};
exports.plugin = plugin;
;