UNPKG

@cran/gql.jm

Version:

Cran/GraphQL Join Monster Utilities

26 lines (25 loc) 914 B
import { getNamedType } from "graphql"; import { MapperKind, createDirective, getExtension } from "@cran/gql.core"; export function withSqlComposite(name = "sqlComposite") { return createDirective(name, {}, { [MapperKind.COMPOSITE_TYPE](_, composite) { Object.assign(getExtension(composite, "joinMonster", {}), { composite: true, }); }, }); } export function markComposite(field, name) { if (!getExtension(getNamedType(field.type), "joinMonster", {}).composite) { return; } const ext = getExtension(field, "joinMonster", {}); if (ext.composited) { return; } ext.composited = true; const expr = ext.sqlExpr; ext.sqlExpr = function composite(table, args, context, ast) { const column = expr ? expr(table, args, context, ast) : `${table}."${ext.sqlColumn || name}"`; return `to_json(${column})`; }; }