@cran/gql.jm
Version:
Cran/GraphQL Join Monster Utilities
31 lines (30 loc) • 1.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.markComposite = exports.withSqlComposite = void 0;
const graphql_1 = require("graphql");
const gql_core_1 = require("@cran/gql.core");
function withSqlComposite(name = "sqlComposite") {
return (0, gql_core_1.createDirective)(name, {}, {
[gql_core_1.MapperKind.COMPOSITE_TYPE](_, composite) {
Object.assign((0, gql_core_1.getExtension)(composite, "joinMonster", {}), { composite: true, });
},
});
}
exports.withSqlComposite = withSqlComposite;
function markComposite(field, name) {
if (!(0, gql_core_1.getExtension)((0, graphql_1.getNamedType)(field.type), "joinMonster", {}).composite) {
return;
}
const ext = (0, gql_core_1.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})`;
};
}
exports.markComposite = markComposite;