@onn-software/ddl-to-gql
Version:
Convert a SQL DDL to a GraphQL implementation with all relations.
73 lines (72 loc) • 4.87 kB
JavaScript
;
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;