92 lines
1.8 KiB
JavaScript
Raw Normal View History

'use strict';
const _ = require('lodash');
/**
* Merges
*/
const mergeSchemas = (root, ...subs) => {
subs.forEach(sub => {
if (_.isEmpty(sub)) return;
const { definition = '', query = {}, mutation = {}, resolvers = {} } = sub;
root.definition += '\n' + definition;
_.merge(root, {
query,
mutation,
resolvers,
});
});
return root;
};
const createDefaultSchema = () => ({
definition: '',
query: {},
mutation: {},
resolvers: {},
});
const diffResolvers = (object, base) => {
let newObj = {};
Object.keys(object).forEach(type => {
Object.keys(object[type]).forEach(resolver => {
if (!_.has(base, [type, resolver])) {
_.set(newObj, [type, resolver], _.get(object, [type, resolver]));
}
});
});
return newObj;
};
const convertToParams = params => {
return Object.keys(params).reduce((acc, current) => {
const key = current === 'id' ? 'id' : `_${current}`;
acc[key] = params[current];
return acc;
}, {});
};
const convertToQuery = params => {
const result = {};
_.forEach(params, (value, key) => {
if (_.isPlainObject(value)) {
const flatObject = convertToQuery(value);
_.forEach(flatObject, (_value, _key) => {
result[`${key}.${_key}`] = _value;
});
} else {
result[key] = value;
}
});
return result;
};
const amountLimiting = (params = {}) => {
const { amountLimit } = strapi.plugins.graphql.config;
if (!amountLimit) return params;
if (!params.limit || params.limit === -1 || params.limit > amountLimit) {
params.limit = amountLimit;
} else if (params.limit < 0) {
params.limit = 0;
}
return params;
};
module.exports = {
diffResolvers,
mergeSchemas,
createDefaultSchema,
convertToParams,
convertToQuery,
amountLimiting,
};