graphql-static-binding
Version:
Generate static binding files for a GraphQL schema
60 lines • 3.92 kB
JavaScript
;
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var graphcool_ts_1 = require("./graphcool-ts");
exports.generator = __assign({}, graphcool_ts_1.generator, { Main: renderMainMethod, RootType: renderRootType, SubscriptionType: renderSubscriptionType, Header: renderHeader });
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 graphcool_ts_1.renderFieldName(f) + ": " + graphcool_ts_1.renderFieldType(f.type); })
.join(', ') + (field.args.length > 0 ? ' ' : '') + "}, context: { [key: string]: any }, infoOrQuery?: GraphQLResolveInfo | string) => Promise<AsyncIterator<" + graphcool_ts_1.renderFieldType(field.type) + ">>";
})
.join('\n');
return graphcool_ts_1.renderTypeWrapper(type.name, type.description, fieldDefinition);
}
function renderHeader(schema) {
return "import { Binding as BaseBinding, BindingOptions } from 'graphql-binding'\nimport { GraphQLResolveInfo } from 'graphql'";
}
function renderMainMethod(queryType, mutationType, subscriptionType) {
return "export class Binding extends BaseBinding {\n \n constructor({ schema, fragmentReplacements }: BindingOptions) {\n super({ schema, fragmentReplacements });\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 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 graphcool_ts_1.renderFieldName(f) + ": " + graphcool_ts_1.renderFieldType(f.type); })
.join(', ') + (field.args.length > 0 ? ' ' : '') + "}, context: { [key: string]: any }, info?: GraphQLResolveInfo | string) => Promise<" + graphcool_ts_1.renderFieldType(field.type) + (!graphql_1.isNonNullType(field.type) ? ' | null' : '') + ">";
})
.join('\n');
return graphcool_ts_1.renderTypeWrapper(type.name, type.description, fieldDefinition);
}
function renderMainMethodFields(operation, fields) {
return Object.keys(fields)
.map(function (f) {
var field = fields[f];
return " " + field.name + ": (args, context, info): Promise<" + graphcool_ts_1.renderFieldType(field.type) + (!graphql_1.isNonNullType(field.type) ? ' | null' : '') + "> => super.delegate('" + operation + "', '" + field.name + "', args, context, info)";
})
.join(',\n');
}
exports.renderMainMethodFields = renderMainMethodFields;
function renderMainSubscriptionMethodFields(fields) {
return Object.keys(fields)
.map(function (f) {
var field = fields[f];
return " " + field.name + ": (args, context, infoOrQuery): Promise<AsyncIterator<" + graphcool_ts_1.renderFieldType(field.type) + ">> => super.delegateSubscription('" + field.name + "', args, context, infoOrQuery)";
})
.join(',\n');
}
exports.renderMainSubscriptionMethodFields = renderMainSubscriptionMethodFields;
//# sourceMappingURL=binding-ts.js.map