mzinga
Version:
Node, React and MongoDB Headless CMS and Application Framework
103 lines (102 loc) • 11.9 kB
JavaScript
/* eslint-disable @typescript-eslint/no-use-before-define */ /* eslint-disable no-use-before-define */ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _graphql = require("graphql");
const _types = require("../../fields/config/types");
const _formatName = /*#__PURE__*/ _interop_require_default(require("../utilities/formatName"));
const _fieldToWhereInputSchemaMap = /*#__PURE__*/ _interop_require_default(require("./fieldToWhereInputSchemaMap"));
const _withOperators = require("./withOperators");
const _flattenTopLevelFields = /*#__PURE__*/ _interop_require_default(require("../../utilities/flattenTopLevelFields"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
/** This does as the function name suggests. It builds a where GraphQL input type
* for all the fields which are passed to the function.
* Each field has different operators which may be valid for a where input type.
* For example, a text field may have a "contains" operator, but a number field
* may not.
*
* buildWhereInputType is similar to buildObjectType and operates
* on a field basis with a few distinct differences.
*
* 1. Everything needs to be a GraphQLInputObjectType or scalar / enum
* 2. Relationships, groups, repeaters and flex content are not
* directly searchable. Instead, we need to build a chained pathname
* using dot notation so MongoDB can properly search nested paths.
*/ const buildWhereInputType = ({ name, fields, parentName, payload })=>{
// This is the function that builds nested paths for all
// field types with nested paths.
const idField = (0, _flattenTopLevelFields.default)(fields).find((field)=>(0, _types.fieldAffectsData)(field) && field.name === 'id');
const fieldTypes = fields.reduce((schema, field)=>{
if (!(0, _types.fieldIsPresentationalOnly)(field) && !field.hidden) {
const getFieldSchema = (0, _fieldToWhereInputSchemaMap.default)({
parentName,
payload
})[field.type];
if (getFieldSchema) {
const fieldSchema = getFieldSchema(field);
if ((0, _types.fieldHasSubFields)(field) || field.type === 'tabs') {
return {
...schema,
...fieldSchema.reduce((subFields, subField)=>({
...subFields,
[(0, _formatName.default)(subField.key)]: subField.type
}), {})
};
}
return {
...schema,
[(0, _formatName.default)(field.name)]: fieldSchema
};
}
}
return schema;
}, {});
if (!idField) {
fieldTypes.id = {
type: (0, _withOperators.withOperators)({
name: 'id',
type: 'text'
}, parentName)
};
}
const fieldName = (0, _formatName.default)(name);
const recursiveFields = {
AND: {
type: new _graphql.GraphQLList(new _graphql.GraphQLInputObjectType({
name: `${fieldName}_where_and`,
fields: ()=>({
...fieldTypes,
...recursiveFields
})
}))
},
OR: {
type: new _graphql.GraphQLList(new _graphql.GraphQLInputObjectType({
name: `${fieldName}_where_or`,
fields: ()=>({
...fieldTypes,
...recursiveFields
})
}))
}
};
return new _graphql.GraphQLInputObjectType({
name: `${fieldName}_where`,
fields: {
...fieldTypes,
...recursiveFields
}
});
};
const _default = buildWhereInputType;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ncmFwaHFsL3NjaGVtYS9idWlsZFdoZXJlSW5wdXRUeXBlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbmltcG9ydCB7IEdyYXBoUUxJbnB1dE9iamVjdFR5cGUsIEdyYXBoUUxMaXN0IH0gZnJvbSAnZ3JhcGhxbCdcblxuaW1wb3J0IHR5cGUgeyBQYXlsb2FkIH0gZnJvbSAnLi4vLi4nXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEgfSBmcm9tICcuLi8uLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQge1xuICBmaWVsZEFmZmVjdHNEYXRhLFxuICBmaWVsZEhhc1N1YkZpZWxkcyxcbiAgZmllbGRJc1ByZXNlbnRhdGlvbmFsT25seSxcbn0gZnJvbSAnLi4vLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCBmb3JtYXROYW1lIGZyb20gJy4uL3V0aWxpdGllcy9mb3JtYXROYW1lJ1xuaW1wb3J0IGZpZWxkVG9TY2hlbWFNYXAgZnJvbSAnLi9maWVsZFRvV2hlcmVJbnB1dFNjaGVtYU1hcCdcbmltcG9ydCB7IHdpdGhPcGVyYXRvcnMgfSBmcm9tICcuL3dpdGhPcGVyYXRvcnMnXG5pbXBvcnQgZmxhdHRlbkZpZWxkcyBmcm9tICcuLi8uLi91dGlsaXRpZXMvZmxhdHRlblRvcExldmVsRmllbGRzJ1xuXG50eXBlIEFyZ3MgPSB7XG4gIGZpZWxkczogRmllbGRbXVxuICBuYW1lOiBzdHJpbmdcbiAgcGFyZW50TmFtZTogc3RyaW5nXG4gIHBheWxvYWQ6IFBheWxvYWRcbn1cblxuLyoqIFRoaXMgZG9lcyBhcyB0aGUgZnVuY3Rpb24gbmFtZSBzdWdnZXN0cy4gSXQgYnVpbGRzIGEgd2hlcmUgR3JhcGhRTCBpbnB1dCB0eXBlXG4gKiBmb3IgYWxsIHRoZSBmaWVsZHMgd2hpY2ggYXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBFYWNoIGZpZWxkIGhhcyBkaWZmZXJlbnQgb3BlcmF0b3JzIHdoaWNoIG1heSBiZSB2YWxpZCBmb3IgYSB3aGVyZSBpbnB1dCB0eXBlLlxuICogRm9yIGV4YW1wbGUsIGEgdGV4dCBmaWVsZCBtYXkgaGF2ZSBhIFwiY29udGFpbnNcIiBvcGVyYXRvciwgYnV0IGEgbnVtYmVyIGZpZWxkXG4gKiBtYXkgbm90LlxuICpcbiAqIGJ1aWxkV2hlcmVJbnB1dFR5cGUgaXMgc2ltaWxhciB0byBidWlsZE9iamVjdFR5cGUgYW5kIG9wZXJhdGVzXG4gKiBvbiBhIGZpZWxkIGJhc2lzIHdpdGggYSBmZXcgZGlzdGluY3QgZGlmZmVyZW5jZXMuXG4gKlxuICogMS4gRXZlcnl0aGluZyBuZWVkcyB0byBiZSBhIEdyYXBoUUxJbnB1dE9iamVjdFR5cGUgb3Igc2NhbGFyIC8gZW51bVxuICogMi4gUmVsYXRpb25zaGlwcywgZ3JvdXBzLCByZXBlYXRlcnMgYW5kIGZsZXggY29udGVudCBhcmUgbm90XG4gKiAgICBkaXJlY3RseSBzZWFyY2hhYmxlLiBJbnN0ZWFkLCB3ZSBuZWVkIHRvIGJ1aWxkIGEgY2hhaW5lZCBwYXRobmFtZVxuICogICAgdXNpbmcgZG90IG5vdGF0aW9uIHNvIE1vbmdvREIgY2FuIHByb3Blcmx5IHNlYXJjaCBuZXN0ZWQgcGF0aHMuXG4gKi9cbmNvbnN0IGJ1aWxkV2hlcmVJbnB1dFR5cGUgPSAoe1xuICBuYW1lLFxuICBmaWVsZHMsXG4gIHBhcmVudE5hbWUsXG4gIHBheWxvYWQsXG59OiBBcmdzKTogR3JhcGhRTElucHV0T2JqZWN0VHlwZSA9PiB7XG4gIC8vIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYnVpbGRzIG5lc3RlZCBwYXRocyBmb3IgYWxsXG4gIC8vIGZpZWxkIHR5cGVzIHdpdGggbmVzdGVkIHBhdGhzLlxuXG4gIGNvbnN0IGlkRmllbGQgPSBmbGF0dGVuRmllbGRzKGZpZWxkcykuZmluZChcbiAgICAoZmllbGQpID0+IGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLm5hbWUgPT09ICdpZCcsXG4gIClcblxuICBjb25zdCBmaWVsZFR5cGVzID0gZmllbGRzLnJlZHVjZSgoc2NoZW1hLCBmaWVsZCkgPT4ge1xuICAgIGlmICghZmllbGRJc1ByZXNlbnRhdGlvbmFsT25seShmaWVsZCkgJiYgIWZpZWxkLmhpZGRlbikge1xuICAgICAgY29uc3QgZ2V0RmllbGRTY2hlbWEgPSBmaWVsZFRvU2NoZW1hTWFwKHtcbiAgICAgICAgcGFyZW50TmFtZSxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgIH0pW2ZpZWxkLnR5cGVdXG5cbiAgICAgIGlmIChnZXRGaWVsZFNjaGVtYSkge1xuICAgICAgICBjb25zdCBmaWVsZFNjaGVtYSA9IGdldEZpZWxkU2NoZW1hKGZpZWxkKVxuXG4gICAgICAgIGlmIChmaWVsZEhhc1N1YkZpZWxkcyhmaWVsZCkgfHwgZmllbGQudHlwZSA9PT0gJ3RhYnMnKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgIC4uLmZpZWxkU2NoZW1hLnJlZHVjZShcbiAgICAgICAgICAgICAgKHN1YkZpZWxkcywgc3ViRmllbGQpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uc3ViRmllbGRzLFxuICAgICAgICAgICAgICAgIFtmb3JtYXROYW1lKHN1YkZpZWxkLmtleSldOiBzdWJGaWVsZC50eXBlLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgIFtmb3JtYXROYW1lKGZpZWxkLm5hbWUpXTogZmllbGRTY2hlbWEsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hXG4gIH0sIHt9KVxuXG4gIGlmICghaWRGaWVsZCkge1xuICAgIGZpZWxkVHlwZXMuaWQgPSB7XG4gICAgICB0eXBlOiB3aXRoT3BlcmF0b3JzKHsgbmFtZTogJ2lkJywgdHlwZTogJ3RleHQnIH0gYXMgRmllbGRBZmZlY3RpbmdEYXRhLCBwYXJlbnROYW1lKSxcbiAgICB9XG4gIH1cblxuICBjb25zdCBmaWVsZE5hbWUgPSBmb3JtYXROYW1lKG5hbWUpXG5cbiAgY29uc3QgcmVjdXJzaXZlRmllbGRzID0ge1xuICAgIEFORDoge1xuICAgICAgdHlwZTogbmV3IEdyYXBoUUxMaXN0KFxuICAgICAgICBuZXcgR3JhcGhRTElucHV0T2JqZWN0VHlwZSh7XG4gICAgICAgICAgbmFtZTogYCR7ZmllbGROYW1lfV93aGVyZV9hbmRgLFxuICAgICAgICAgIGZpZWxkczogKCkgPT4gKHtcbiAgICAgICAgICAgIC4uLmZpZWxkVHlwZXMsXG4gICAgICAgICAgICAuLi5yZWN1cnNpdmVGaWVsZHMsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICB9LFxuICAgIE9SOiB7XG4gICAgICB0eXBlOiBuZXcgR3JhcGhRTExpc3QoXG4gICAgICAgIG5ldyBHcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtcbiAgICAgICAgICBuYW1lOiBgJHtmaWVsZE5hbWV9X3doZXJlX29yYCxcbiAgICAgICAgICBmaWVsZHM6ICgpID0+ICh7XG4gICAgICAgICAgICAuLi5maWVsZFR5cGVzLFxuICAgICAgICAgICAgLi4ucmVjdXJzaXZlRmllbGRzLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiBuZXcgR3JhcGhRTElucHV0T2JqZWN0VHlwZSh7XG4gICAgbmFtZTogYCR7ZmllbGROYW1lfV93aGVyZWAsXG4gICAgZmllbGRzOiB7XG4gICAgICAuLi5maWVsZFR5cGVzLFxuICAgICAgLi4ucmVjdXJzaXZlRmllbGRzLFxuICAgIH0sXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkV2hlcmVJbnB1dFR5cGVcbiJdLCJuYW1lcyI6WyJidWlsZFdoZXJlSW5wdXRUeXBlIiwibmFtZSIsImZpZWxkcyIsInBhcmVudE5hbWUiLCJwYXlsb2FkIiwiaWRGaWVsZCIsImZsYXR0ZW5GaWVsZHMiLCJmaW5kIiwiZmllbGQiLCJmaWVsZEFmZmVjdHNEYXRhIiwiZmllbGRUeXBlcyIsInJlZHVjZSIsInNjaGVtYSIsImZpZWxkSXNQcmVzZW50YXRpb25hbE9ubHkiLCJoaWRkZW4iLCJnZXRGaWVsZFNjaGVtYSIsImZpZWxkVG9TY2hlbWFNYXAiLCJ0eXBlIiwiZmllbGRTY2hlbWEiLCJmaWVsZEhhc1N1YkZpZWxkcyIsInN1YkZpZWxkcyIsInN1YkZpZWxkIiwiZm9ybWF0TmFtZSIsImtleSIsImlkIiwid2l0aE9wZXJhdG9ycyIsImZpZWxkTmFtZSIsInJlY3Vyc2l2ZUZpZWxkcyIsIkFORCIsIkdyYXBoUUxMaXN0IiwiR3JhcGhRTElucHV0T2JqZWN0VHlwZSIsIk9SIl0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwibWFwcGluZ3MiOiJBQUFBLDBEQUEwRCxHQUMxRCx1Q0FBdUM7Ozs7K0JBNkh2Qzs7O2VBQUE7Ozt5QkE1SG9EO3VCQVM3QzttRUFDZ0I7bUZBQ007K0JBQ0M7OEVBQ0o7Ozs7OztBQVMxQjs7Ozs7Ozs7Ozs7OztDQWFDLEdBQ0QsTUFBTUEsc0JBQXNCLENBQUMsRUFDM0JDLElBQUksRUFDSkMsTUFBTSxFQUNOQyxVQUFVLEVBQ1ZDLE9BQU8sRUFDRjtJQUNMLHdEQUF3RDtJQUN4RCxpQ0FBaUM7SUFFakMsTUFBTUMsVUFBVUMsSUFBQUEsOEJBQWEsRUFBQ0osUUFBUUssSUFBSSxDQUN4QyxDQUFDQyxRQUFVQyxJQUFBQSx1QkFBZ0IsRUFBQ0QsVUFBVUEsTUFBTVAsSUFBSSxLQUFLO0lBR3ZELE1BQU1TLGFBQWFSLE9BQU9TLE1BQU0sQ0FBQyxDQUFDQyxRQUFRSjtRQUN4QyxJQUFJLENBQUNLLElBQUFBLGdDQUF5QixFQUFDTCxVQUFVLENBQUNBLE1BQU1NLE1BQU0sRUFBRTtZQUN0RCxNQUFNQyxpQkFBaUJDLElBQUFBLG1DQUFnQixFQUFDO2dCQUN0Q2I7Z0JBQ0FDO1lBQ0YsRUFBRSxDQUFDSSxNQUFNUyxJQUFJLENBQUM7WUFFZCxJQUFJRixnQkFBZ0I7Z0JBQ2xCLE1BQU1HLGNBQWNILGVBQWVQO2dCQUVuQyxJQUFJVyxJQUFBQSx3QkFBaUIsRUFBQ1gsVUFBVUEsTUFBTVMsSUFBSSxLQUFLLFFBQVE7b0JBQ3JELE9BQU87d0JBQ0wsR0FBR0wsTUFBTTt3QkFDVCxHQUFHTSxZQUFZUCxNQUFNLENBQ25CLENBQUNTLFdBQVdDLFdBQWMsQ0FBQTtnQ0FDeEIsR0FBR0QsU0FBUztnQ0FDWixDQUFDRSxJQUFBQSxtQkFBVSxFQUFDRCxTQUFTRSxHQUFHLEVBQUUsRUFBRUYsU0FBU0osSUFBSTs0QkFDM0MsQ0FBQSxHQUNBLENBQUMsRUFDRjtvQkFDSDtnQkFDRjtnQkFFQSxPQUFPO29CQUNMLEdBQUdMLE1BQU07b0JBQ1QsQ0FBQ1UsSUFBQUEsbUJBQVUsRUFBQ2QsTUFBTVAsSUFBSSxFQUFFLEVBQUVpQjtnQkFDNUI7WUFDRjtRQUNGO1FBRUEsT0FBT047SUFDVCxHQUFHLENBQUM7SUFFSixJQUFJLENBQUNQLFNBQVM7UUFDWkssV0FBV2MsRUFBRSxHQUFHO1lBQ2RQLE1BQU1RLElBQUFBLDRCQUFhLEVBQUM7Z0JBQUV4QixNQUFNO2dCQUFNZ0IsTUFBTTtZQUFPLEdBQXlCZDtRQUMxRTtJQUNGO0lBRUEsTUFBTXVCLFlBQVlKLElBQUFBLG1CQUFVLEVBQUNyQjtJQUU3QixNQUFNMEIsa0JBQWtCO1FBQ3RCQyxLQUFLO1lBQ0hYLE1BQU0sSUFBSVksb0JBQVcsQ0FDbkIsSUFBSUMsK0JBQXNCLENBQUM7Z0JBQ3pCN0IsTUFBTSxDQUFDLEVBQUV5QixVQUFVLFVBQVUsQ0FBQztnQkFDOUJ4QixRQUFRLElBQU8sQ0FBQTt3QkFDYixHQUFHUSxVQUFVO3dCQUNiLEdBQUdpQixlQUFlO29CQUNwQixDQUFBO1lBQ0Y7UUFFSjtRQUNBSSxJQUFJO1lBQ0ZkLE1BQU0sSUFBSVksb0JBQVcsQ0FDbkIsSUFBSUMsK0JBQXNCLENBQUM7Z0JBQ3pCN0IsTUFBTSxDQUFDLEVBQUV5QixVQUFVLFNBQVMsQ0FBQztnQkFDN0J4QixRQUFRLElBQU8sQ0FBQTt3QkFDYixHQUFHUSxVQUFVO3dCQUNiLEdBQUdpQixlQUFlO29CQUNwQixDQUFBO1lBQ0Y7UUFFSjtJQUNGO0lBRUEsT0FBTyxJQUFJRywrQkFBc0IsQ0FBQztRQUNoQzdCLE1BQU0sQ0FBQyxFQUFFeUIsVUFBVSxNQUFNLENBQUM7UUFDMUJ4QixRQUFRO1lBQ04sR0FBR1EsVUFBVTtZQUNiLEdBQUdpQixlQUFlO1FBQ3BCO0lBQ0Y7QUFDRjtNQUVBLFdBQWUzQiJ9