@cran/gql.jm
Version:
Cran/GraphQL Join Monster Utilities
26 lines (25 loc) • 914 B
JavaScript
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})`;
};
}