UNPKG

@onn-software/ddl-to-gql

Version:

Convert a SQL DDL to a GraphQL implementation with all relations.

73 lines (72 loc) 4.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ResolverGenerator = void 0; const globals_1 = require("../globals"); const resolver_generator_templates_1 = require("./resolver-generator.templates"); class ResolverGenerator { execute(tableDefs, gqlNoRoot = false) { const partialsDefs = tableDefs.map((tableDef) => this.generateResolver(tableDef)); partialsDefs.push(''); partialsDefs.push('export const allGqlTypeResolvers = {'); partialsDefs.push(tableDefs .map((table) => { const interfaceName = globals_1.Globals.getGqlName(table.tableName); return ` ${interfaceName}: ${interfaceName}_Resolver,`; }) .join('\n')); if (gqlNoRoot) { partialsDefs.push(` GqlQuery: allGqlQueryResolvers,`); partialsDefs.push(` GqlMutation: allGqlMutationResolvers,`); } partialsDefs.push('};'); partialsDefs.push(''); const queryResolvers = this.generateQueryResolvers(tableDefs); const mutationResolvers = this.generateMutationResolvers(tableDefs); return resolver_generator_templates_1.baseResolver + queryResolvers + mutationResolvers + partialsDefs.join('\n'); } generateMutationResolvers(tableDefs) { const untypedEntries = tableDefs.map((table) => resolver_generator_templates_1.mutationResolverEntry .replaceAll('__TABLE_NAME__', table.tableName) .replaceAll('__SQL_TYPE__', globals_1.Globals.getTypescriptName(table.tableName)) .replaceAll('__SQL_TYPE__', globals_1.Globals.getTypescriptName(table.tableName))); const insertEntries = untypedEntries.map(e => e.replaceAll('__MUTATION_TYPE__', 'insert').replaceAll('__MUTATION_METHOD__', "'insertBy'")); const updateEntries = untypedEntries.map(e => e.replaceAll('__MUTATION_TYPE__', 'update').replaceAll('__MUTATION_METHOD__', "'updateBy'")); const deleteEntries = untypedEntries.map(e => e.replaceAll('__MUTATION_TYPE__', 'delete').replaceAll('__MUTATION_METHOD__', "'deleteBy'")); const actionEntries = untypedEntries.map(e => e.replaceAll('__MUTATION_TYPE__', 'action').replaceAll('__MUTATION_METHOD__', '`${gqlParams.args.action}By`')); const entries = [...insertEntries, ...updateEntries, ...deleteEntries, ...actionEntries]; return resolver_generator_templates_1.mutationResolvers.replaceAll('__MUTATION_ENTRIES__', entries.join('\n')); } generateQueryResolvers(tableDefs) { const entries = tableDefs.map((table) => resolver_generator_templates_1.queryResolverEntry .replaceAll('__TABLE_NAME__', table.tableName) .replaceAll('__SQL_TYPE__', globals_1.Globals.getTypescriptName(table.tableName))); return resolver_generator_templates_1.queryResolvers.replaceAll('__RESOLVER_ENTRIES__', entries.join('\n')); } generateResolver(tableDef) { const manyRelations = tableDef.relations.filter((relation) => relation.many); const paginatedFieldKeyBlocks = manyRelations.map((relation) => { return resolver_generator_templates_1.paginatedResolverBlock .replaceAll('__RELATION_NAME__', globals_1.Globals.composeToRelationKey(relation)) .replaceAll('__SQL_TYPE__', globals_1.Globals.getTypescriptName(tableDef.tableName)) .replaceAll('__FOREIGN_TABLE_NAME__', relation.to.table) .replaceAll('__FOREIGN_SQL_TYPE__', globals_1.Globals.getTypescriptName(relation.to.table)) .replaceAll('__SAFE_FOREIGN_FIELD_NAME__', relation.to.key) .replaceAll('__SAFE_FIELD_NAME__', relation.from.key); }); const singleRelations = tableDef.relations.filter((relation) => !relation.many); const fieldKeyBlocks = singleRelations.map((relation) => { return resolver_generator_templates_1.getResolverBlock .replaceAll('__RELATION_NAME__', globals_1.Globals.composeToRelationKey(relation)) .replaceAll('__SQL_TYPE__', globals_1.Globals.getTypescriptName(tableDef.tableName)) .replaceAll('__FOREIGN_TABLE_NAME__', relation.to.table) .replaceAll('__FOREIGN_SQL_TYPE__', globals_1.Globals.getTypescriptName(relation.to.table)) .replaceAll('__SAFE_FOREIGN_FIELD_NAME__', relation.to.key) .replaceAll('__SAFE_FIELD_NAME__', relation.from.key); }); return resolver_generator_templates_1.resolverTemplate .replaceAll('__GQL_TYPE__', globals_1.Globals.getGqlName(tableDef.tableName)) .replaceAll('__FIELD_GETTER_BLOCK__', fieldKeyBlocks.join('\n')) .replaceAll('__PAGINATED_FIELD_GETTER_BLOCK__', paginatedFieldKeyBlocks.join('\n')); } } exports.ResolverGenerator = ResolverGenerator;