UNPKG

graphql-static-binding

Version:
189 lines 8.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var graphql_1 = require("graphql"); exports.generator = { GraphQLUnionType: renderUnionType, GraphQLObjectType: renderObjectType, GraphQLInputObjectType: renderInputObjectType, GraphQLScalarType: renderScalarType, GraphQLEnumType: renderEnumType, GraphQLInterfaceType: renderObjectType, RootType: renderRootType, SubscriptionType: renderSubscriptionType, SchemaType: renderSchemaInterface, Main: renderMainMethod, Header: renderHeader }; var scalarMapping = { Int: 'number', String: 'string', ID: 'string | number', Float: 'number', Boolean: 'boolean' }; function renderHeader(schema) { return "import { Graphcool as BaseGraphcool, BaseGraphcoolOptions } from 'graphcool-binding'\nimport { GraphQLResolveInfo } from 'graphql'\n\nconst typeDefs = `\n" + schema + "`"; } function renderMainMethod(queryType, mutationType, subscriptionType) { return "export class Graphcool extends BaseGraphcool {\n \n constructor({ endpoint, secret, fragmentReplacements, debug }: BaseGraphcoolOptions) {\n super({ typeDefs, endpoint, secret, fragmentReplacements, debug });\n }\n\n exists = {\n" + renderExistsFields(queryType.getFields()) + "\n }\n\n query: Query = {\n" + renderMainMethodFields('query', queryType.getFields()) + "\n }" + (mutationType ? "\n\n mutation: Mutation = {\n" + renderMainMethodFields('mutation', mutationType.getFields()) + "\n }" : '') + (subscriptionType ? "\n\n subscription: Subscription = {\n" + renderMainSubscriptionMethodFields(subscriptionType.getFields()) + "\n }" : '') + "\n}"; } function renderExistsFields(fields) { return Object.keys(fields) .map(function (f) { var field = fields[f]; var type = field.type; var foundList = false; // Traverse the wrapping types (if any) while (graphql_1.isWrappingType(type)) { type = type.ofType; // One of those wrappings need to be a GraphQLList for this field to qualify foundList = foundList || graphql_1.isListType(type); } if (foundList) { var whereType = field.args.find(function (a) { return a.name === 'where'; }).type.name; return " " + type.name + ": (where: " + whereType + "): Promise<boolean> => super.existsDelegate('query', '" + field.name + "', { where }, {}, '{ id }')"; } }) .filter(function (f) { return f; }) .join(',\n'); } exports.renderExistsFields = renderExistsFields; function renderMainMethodFields(operation, fields) { return Object.keys(fields) .map(function (f) { var field = fields[f]; return " " + field.name + ": (args, info): Promise<" + renderFieldType(field.type) + (!graphql_1.isNonNullType(field.type) ? ' | null' : '') + "> => super.delegate('" + operation + "', '" + field.name + "', args, {}, info)"; }) .join(',\n'); } exports.renderMainMethodFields = renderMainMethodFields; function renderMainSubscriptionMethodFields(fields) { return Object.keys(fields) .map(function (f) { var field = fields[f]; return " " + field.name + ": (args, infoOrQuery): Promise<AsyncIterator<" + renderFieldType(field.type) + ">> => super.delegateSubscription('" + field.name + "', args, {}, infoOrQuery)"; }) .join(',\n'); } exports.renderMainSubscriptionMethodFields = renderMainSubscriptionMethodFields; function renderScalarType(type) { if (type.name === 'ID') { return renderIDType(type); } return (type.description ? "/*\n" + type.description + "\n*/\n" : '') + "export type " + type.name + " = " + (scalarMapping[type.name] || 'string'); } function renderIDType(type) { return (type.description ? "/*\n" + type.description + "\n*/\n" : '') + "export type " + type.name + "_Input = " + (scalarMapping[type.name] || 'string') + "\nexport type " + type.name + "_Output = string"; } function renderEnumType(type) { return renderDescription(type.description) + "export type " + type.name + " = \n" + type .getValues() .map(function (e) { return " '" + e.name + "'"; }) .join(' |\n'); } function renderRootType(type) { var fieldDefinition = Object.keys(type.getFields()) .map(function (f) { var field = type.getFields()[f]; return " " + field.name + ": (args: {" + (field.args.length > 0 ? ' ' : '') + field.args .map(function (f) { return renderFieldName(f) + ": " + renderFieldType(f.type); }) .join(', ') + (field.args.length > 0 ? ' ' : '') + "}, info?: GraphQLResolveInfo | string) => Promise<" + renderFieldType(field.type) + (!graphql_1.isNonNullType(field.type) ? ' | null' : '') + ">"; }) .join('\n'); return renderTypeWrapper(type.name, type.description, fieldDefinition); } function renderSubscriptionType(type) { var fieldDefinition = Object.keys(type.getFields()) .map(function (f) { var field = type.getFields()[f]; return " " + field.name + ": (args: {" + (field.args.length > 0 ? ' ' : '') + field.args .map(function (f) { return renderFieldName(f) + ": " + renderFieldType(f.type); }) .join(', ') + (field.args.length > 0 ? ' ' : '') + "}, infoOrQuery?: GraphQLResolveInfo | string) => Promise<AsyncIterator<" + renderFieldType(field.type) + ">>"; }) .join('\n'); return renderTypeWrapper(type.name, type.description, fieldDefinition); } function renderUnionType(type) { return renderDescription(type.description) + "export type " + type.name + " = " + type .getTypes() .map(function (t) { return t.name; }) .join(' | '); } function renderObjectType(type) { var fieldDefinition = Object.keys(type.getFields()) .map(function (f) { var field = type.getFields()[f]; return " " + renderFieldName(field) + ": " + renderFieldType(field.type); }) .join('\n'); var interfaces = []; if (type instanceof graphql_1.GraphQLObjectType) { interfaces = type.getInterfaces(); } return renderInterfaceWrapper(type.name, type.description, interfaces, fieldDefinition); } function renderInputObjectType(type) { var fieldDefinition = Object.keys(type.getFields()) .map(function (f) { var field = type.getFields()[f]; return " " + renderFieldName(field) + ": " + renderInputFieldType(field.type); }) .join('\n'); var interfaces = []; if (type instanceof graphql_1.GraphQLObjectType) { interfaces = type.getInterfaces(); } return renderInterfaceWrapper(type.name, type.description, interfaces, fieldDefinition); } function renderFieldName(field) { return "" + field.name + (graphql_1.isNonNullType(field.type) ? '' : '?'); } exports.renderFieldName = renderFieldName; function renderFieldType(type) { if (graphql_1.isNonNullType(type)) { return renderFieldType(type.ofType); } if (graphql_1.isListType(type)) { return renderFieldType(type.ofType) + "[]"; } return "" + type.name + (type.name === 'ID' ? '_Output' : ''); } exports.renderFieldType = renderFieldType; function renderInputFieldType(type) { if (graphql_1.isNonNullType(type)) { return renderInputFieldType(type.ofType); } if (graphql_1.isListType(type)) { var inputType = renderInputFieldType(type.ofType); return inputType + "[] | " + inputType; } return "" + type.name + (type.name === 'ID' ? '_Input' : ''); } function renderSchemaInterface(queryType, mutationType, subscriptionType) { return "export interface Schema {\n query: " + queryType.name + "\n" + (mutationType ? " mutation: " + mutationType.name + "\n" : '') + (subscriptionType ? " subscription: " + subscriptionType.name + "\n" : '') + "}"; } function renderInterfaceWrapper(typeName, typeDescription, interfaces, fieldDefinition) { return renderDescription(typeDescription) + "export interface " + typeName + (interfaces.length > 0 ? " extends " + interfaces.map(function (i) { return i.name; }).join(', ') : '') + " {\n" + fieldDefinition + "\n}"; } function renderTypeWrapper(typeName, typeDescription, fieldDefinition) { return renderDescription(typeDescription) + "export type " + typeName + " = {\n" + fieldDefinition + "\n}"; } exports.renderTypeWrapper = renderTypeWrapper; function renderDescription(description) { return "" + (description ? "/*\n" + description.split('\n').map(function (l) { return " * " + l + "\n"; }) + "\n */\n" : ''); } //# sourceMappingURL=graphcool-ts.js.map