UNPKG

graphql-static-binding

Version:
66 lines 3.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var graphql_1 = require("graphql"); var buildASTSchema_1 = require("graphql/utilities/buildASTSchema"); var generators_1 = require("./generators"); /** * The schema contains incompatible characters sometimes, e.g. * data types in comments are emphasized with "`", which represents * template strings in ES2015 and TypeScript. This function * replaces those characters with sane defaults. * * @param schema {String} The serialized schema * @returns {String} * */ var sanitizeSchema = function (schema) { return schema.replace(/\`/g, '\''); }; function generateCode(schema, generator) { if (typeof generator === 'string') { generator = generators_1.generators[generator] || require(generator).generator; if (!generator) { throw new Error("Generator '" + generator + "' could not be found. Available generators:\n" + Object.keys(generators_1.generators).map(function (k) { return "'" + k; }).join(', ')); } } schema = sanitizeSchema(schema); var document = graphql_1.parse(schema, { noLocation: true }); var ast = buildASTSchema_1.buildASTSchema(document); // Create types var typeNames = Object .keys(ast.getTypeMap()) .filter(function (typeName) { return !typeName.startsWith('__'); }) .filter(function (typeName) { return typeName !== ast.getQueryType().name; }) .filter(function (typeName) { return ast.getMutationType() ? typeName !== ast.getMutationType().name : true; }) .filter(function (typeName) { return ast.getSubscriptionType() ? typeName !== ast.getSubscriptionType().name : true; }) .sort(function (a, b) { return ast.getType(a).constructor.name < ast.getType(b).constructor.name ? -1 : 1; }); // Special case 4: header var generatedClass = [generator.Header(schema)]; // Process all types generatedClass.push.apply(generatedClass, typeNames.map(function (typeName) { var type = ast.getTypeMap()[typeName]; return generator[type.constructor.name] ? generator[type.constructor.name](type) : null; })); // Special case 1: generate schema interface if (generator.SchemaType) { generatedClass.push(generator.SchemaType(ast.getQueryType(), ast.getMutationType(), ast.getSubscriptionType())); } // Special case 2: generate root field interfaces if (generator.RootType) { generatedClass.push(generator.RootType(ast.getQueryType())); if (ast.getMutationType()) { generatedClass.push(generator.RootType(ast.getMutationType())); } } // Special case 5: subscription type if (generator.SubscriptionType) { if (ast.getSubscriptionType()) { generatedClass.push(generator.SubscriptionType(ast.getSubscriptionType())); } } // Special case 3: the main method generatedClass.push(generator.Main(ast.getQueryType(), ast.getMutationType(), ast.getSubscriptionType())); return generatedClass.filter(function (r) { return r; }).join('\n\n'); } exports.generateCode = generateCode; //# sourceMappingURL=index.js.map