graphql-compose-mongoose
Version:
Plugin for `graphql-compose` which derive a graphql types from a mongoose model.
59 lines • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.projectionHelper = projectionHelper;
exports.dotifyWithAliases = dotifyWithAliases;
const graphql_compose_1 = require("graphql-compose");
function projectionHelper(resolveParams, aliases) {
const projection = resolveParams.projection;
if (projection) {
if (projection['*']) {
return;
}
const flatProjection = dotifyWithAliases(projection, aliases);
if (Object.keys(flatProjection).length > 0) {
resolveParams.query = resolveParams.query.select(flatProjection);
}
}
}
function dotifyWithAliases(obj, aliases) {
const res = {};
dotifyRecurse(obj, res, aliases);
return res;
}
function dotifyRecurse(obj, res, aliases, prefix) {
Object.keys(obj).forEach((key) => {
const value = obj[key];
let newKey;
if (aliases && (aliases === null || aliases === void 0 ? void 0 : aliases[key])) {
const alias = aliases === null || aliases === void 0 ? void 0 : aliases[key];
let aliasValue;
if (typeof alias === 'string') {
aliasValue = alias;
}
else if ((0, graphql_compose_1.isObject)(alias)) {
aliasValue = alias === null || alias === void 0 ? void 0 : alias.__selfAlias;
}
newKey = aliasValue || key;
}
else {
newKey = key;
}
if (prefix) {
newKey = `${prefix}.${newKey}`;
}
if (value && (value.$meta || value.$slice || value.$elemMatch || value.$)) {
res[newKey] = value;
}
else if ((0, graphql_compose_1.isObject)(value) && Object.keys(value).length > 0) {
let subAliases;
if (aliases && (0, graphql_compose_1.isObject)(aliases === null || aliases === void 0 ? void 0 : aliases[key])) {
subAliases = aliases[key];
}
dotifyRecurse(value, res, subAliases, newKey);
}
else {
res[newKey] = !!value;
}
});
}
//# sourceMappingURL=projection.js.map