@onn-software/ddl-to-gql
Version:
Convert a SQL DDL to a GraphQL implementation with all relations.
86 lines (82 loc) • 4.48 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.mutationResolvers = exports.queryResolvers = exports.mutationResolverEntry = exports.queryResolverEntry = exports.paginatedResolverBlock = exports.getResolverBlock = exports.resolverTemplate = exports.baseResolver = void 0;
exports.baseResolver = `
import * as model from './model';
import * as repo from './repos';
export class OnnResolverHooks {
static buildWrapper : () => {
before: <T, E = any>(resolverName:string, tableName :string, gqlParams: any) => Promise<T | undefined | null>;
after: <T, E = any>(resolverName:string, tableName :string, result: T, gqlParams: any) => Promise<T>;
} = () => ({
before: async () => null,
after: async (_,__,result) => result,
});
}
export const mapClauses: <T = any>(clauses?: any[]) => model.Clause<T>[] = clauses => {
return (clauses ?? []).map(c => ({field: c.field, operator: c.operator, value:
c.booleanValue ?? c.intValue ?? c.floatValue ?? c.stringValue ?? c.intValues ?? c.floatValues ?? c.stringValues}))
}
`;
exports.resolverTemplate = `
export const __GQL_TYPE___Resolver = {
__FIELD_GETTER_BLOCK__
__PAGINATED_FIELD_GETTER_BLOCK__
};
`;
exports.getResolverBlock = `
__RELATION_NAME__: async (parent: any, args: any, context: model.OnnContext | any, info: any) => {
let gqlParams = { parent, args, context, info };
const wrapper = OnnResolverHooks.buildWrapper();
let result = await wrapper.before<model.__FOREIGN_SQL_TYPE__>("__RELATION_NAME__", "__FOREIGN_TABLE_NAME__", gqlParams);
if (!result) {
const clauses = [{field: "__SAFE_FOREIGN_FIELD_NAME__", value: gqlParams.parent["__SAFE_FIELD_NAME__"], operator: model.QueryOperator.EQUALS}, ...mapClauses(gqlParams.args.where)];
result = await new repo.__FOREIGN_SQL_TYPE___Repo().getBy(gqlParams.context, clauses, gqlParams.args.orderBy);
}
return (await wrapper.after("__RELATION_NAME__", "__FOREIGN_TABLE_NAME__", result, gqlParams)) as any;
},
`;
exports.paginatedResolverBlock = `
__RELATION_NAME__: async (parent: any, args: any, context: model.OnnContext | any, info: any) => {
let gqlParams = { parent, args, context, info };
const wrapper = OnnResolverHooks.buildWrapper();
let result = await wrapper.before<model.Paginated<model.__FOREIGN_SQL_TYPE__>>("__RELATION_NAME__", "__FOREIGN_TABLE_NAME__", gqlParams);
if (!result) {
const clauses = [{field: "__SAFE_FOREIGN_FIELD_NAME__", value: gqlParams.parent["__SAFE_FIELD_NAME__"], operator: model.QueryOperator.EQUALS}, ...mapClauses(gqlParams.args.where)];
result = await new repo.__FOREIGN_SQL_TYPE___Repo().getPaginatedBy(gqlParams.context, clauses, gqlParams.args.paginate, gqlParams.args.orderBy, gqlParams.args.distinct);
}
return (await wrapper.after("__RELATION_NAME__", "__FOREIGN_TABLE_NAME__", result, gqlParams)) as any;
},
`;
exports.queryResolverEntry = `
__TABLE_NAME__: async (parent: any, args: any, context: model.OnnContext | any, info: any) => {
let gqlParams = { parent, args, context, info };
const wrapper = OnnResolverHooks.buildWrapper();
let result = await wrapper.before<model.Paginated<model.__SQL_TYPE__>>("__TABLE_NAME__", "__TABLE_NAME__", gqlParams);
if (!result) {
result = await new repo.__SQL_TYPE___Repo().getPaginatedBy(gqlParams.context, mapClauses(gqlParams.args.where), gqlParams.args.paginate, gqlParams.args.orderBy, gqlParams.args.distinct);
}
return (await wrapper.after("__TABLE_NAME__", "__TABLE_NAME__", result, gqlParams)) as any;
},
`;
exports.mutationResolverEntry = `
__MUTATION_TYPE_____TABLE_NAME__: async (parent: any, args: any, context: model.OnnContext | any, info: any) => {
let gqlParams = { parent, args, context, info };
const wrapper = OnnResolverHooks.buildWrapper();
let result = await wrapper.before<model.MutationResult>("__MUTATION_TYPE_____TABLE_NAME__", "__TABLE_NAME__", gqlParams);
if (!result) {
result = await (new repo.__SQL_TYPE___Repo() as any)[__MUTATION_METHOD__](gqlParams.context, mapClauses(gqlParams.args.where), gqlParams.args.value);
}
return (await wrapper.after("__MUTATION_TYPE_____TABLE_NAME__", "__TABLE_NAME__", result, gqlParams)) as any;
},
`;
exports.queryResolvers = `
export const allGqlQueryResolvers = {
__RESOLVER_ENTRIES__
};
`;
exports.mutationResolvers = `
export const allGqlMutationResolvers = {
__MUTATION_ENTRIES__
};
`;