UNPKG

canner

Version:

Build CMS in few lines of code for different data sources

331 lines (281 loc) 10.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.fieldToQueriesObject = fieldToQueriesObject; exports.genQuery = genQuery; exports.schemaToQueriesObject = schemaToQueriesObject; exports.objectToQueries = objectToQueries; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread")); var _pluralize = _interopRequireDefault(require("pluralize")); var _lowerFirst = _interopRequireDefault(require("lodash/lowerFirst")); var _upperFirst = _interopRequireDefault(require("lodash/upperFirst")); var _lodash = require("lodash"); var _utils = require("./schema/utils"); var _types = require("./schema/types"); var DEFAULT_FIRST = 10; var MAX = undefined; function fieldToQueriesObject(field) { var queriesObj = {}; var variables = {}; var variableTypes = {}; var type = field.getType(); switch (type) { case _types.types.OBJECT: { field.forEach(function (childField) { var qlo = fieldToQueriesObject(childField); (0, _lodash.set)(queriesObj, ['fields', childField.getKey()], qlo.queriesObj); }); break; } case _types.types.ARRAY: { field.forEach(function (childField) { var qlo = fieldToQueriesObject(childField); (0, _lodash.set)(queriesObj, ['fields', childField.getKey()], qlo.queriesObj); (0, _lodash.merge)(variables, qlo.variables); (0, _lodash.merge)(variableTypes, qlo.variableTypes); }); if (field.isEntity) { var _objectSpread2; var _genQuery = genQuery(field), args = _genQuery.args, firstKey = _genQuery.firstKey, afterKey = _genQuery.afterKey, lastKey = _genQuery.lastKey, beforeKey = _genQuery.beforeKey, whereKey = _genQuery.whereKey, orderByKey = _genQuery.orderByKey; queriesObj.declareArgs = (0, _objectSpread3.default)({}, variableTypes, (_objectSpread2 = {}, (0, _defineProperty2.default)(_objectSpread2, firstKey, 'Int'), (0, _defineProperty2.default)(_objectSpread2, afterKey, 'String'), (0, _defineProperty2.default)(_objectSpread2, lastKey, 'Int'), (0, _defineProperty2.default)(_objectSpread2, beforeKey, 'String'), (0, _defineProperty2.default)(_objectSpread2, whereKey, "".concat(typeKey(field.getKey()), "WhereInput")), (0, _defineProperty2.default)(_objectSpread2, orderByKey, "".concat(typeKey(field.getKey()), "OrderByInput")), _objectSpread2)); queriesObj.connection = true; queriesObj.args = args; queriesObj.isPlural = true; queriesObj.alias = field.getKey(); (0, _lodash.set)(queriesObj, ['fields', 'id'], null); variables[firstKey] = MAX; variables[whereKey] = {}; var toolbar = field.getAttr('toolbar'); var asyncToolbar = toolbar && toolbar.async; var defaultSortField = toolbar && toolbar.sorter && toolbar.sorter.defaultField; var permanentFilter = toolbar && toolbar.filter && toolbar.filter.permanentFilter; var defaultFilter = toolbar && toolbar.filter && toolbar.filter.defaultFilter; if (asyncToolbar) { variables[firstKey] = DEFAULT_FIRST; if (permanentFilter) { variables[whereKey] = permanentFilter; } if (defaultFilter) { variables[whereKey] = defaultFilter; } if (defaultSortField) { var _field = (toolbar.sorter.options || []).find(function (option) { return option.field === defaultSortField; }); var defaultOrder = _field && _field.defaultOrder ? _field.defaultOrder.toUpperCase() : 'ASC'; variables[orderByKey] = "".concat(defaultSortField, "_").concat(defaultOrder); } } } break; } case _types.types.RELATION: { (0, _lodash.set)(queriesObj, ['fields', 'id'], null); var relationFields = field.getRelationFields(); field.forEach(function (childField) { if (relationFields.includes(childField.getKey()) || relationFields.length === 0 && childField.getType() !== _types.types.RELATION) { var qlo = fieldToQueriesObject(childField); (0, _lodash.set)(queriesObj, ['fields', childField.getKey()], qlo.queriesObj); (0, _lodash.merge)(variables, qlo.variables); (0, _lodash.merge)(variableTypes, qlo.variableTypes); } }); // for now, fetch all toMany data // if (field.isToMany()) { // const {args, firstKey, afterKey, lastKey, beforeKey, whereKey, orderByKey} = genQuery(); // queriesObj.args = args; // queriesObj.isPlural = true; // variables[firstKey] = defaultFirst; // variableTypes = { // ...variableTypes, // [firstKey]: 'Int', // [afterKey]: 'String', // [lastKey]: 'Int', // [beforeKey]: 'String', // [whereKey]: `${typeKey(field.relationTo())}WhereUniqueInput`, // [orderByKey]: `${typeKey(field.relationTo())}WhereUniqueInput` // } // } break; } case _types.types.DATETIME: case _types.types.FILE: case _types.types.GEOPOINT: case _types.types.IMAGE: { field.forEach(function (childField) { var qlo = fieldToQueriesObject(childField); (0, _lodash.set)(queriesObj, ['fields', childField.getKey()], qlo.queriesObj); }); break; } case _types.types.COMPONENT: queriesObj = undefined; break; case _types.types.BOOLEAN: case _types.types.NUMBER: case _types.types.INT: case _types.types.ID: case _types.types.STRING: case _types.types.JSON: default: queriesObj = null; break; } return { queriesObj: queriesObj, variables: variables, variableTypes: variableTypes }; } function genQuery(field) { var key = field.getKey(); var firstKey = "$".concat(key, "First"); var afterKey = "$".concat(key, "After"); var lastKey = "$".concat(key, "Last"); var beforeKey = "$".concat(key, "Before"); var whereKey = "$".concat(key, "Where"); var orderByKey = "$".concat(key, "OrderBy"); var args = { first: firstKey, after: afterKey, last: lastKey, before: beforeKey, where: whereKey, orderBy: orderByKey }; return { args: args, firstKey: firstKey, afterKey: afterKey, lastKey: lastKey, beforeKey: beforeKey, whereKey: whereKey, orderByKey: orderByKey }; } function schemaToQueriesObject(schema) { var rootFields = (0, _utils.createSchema)(schema); var rootVariables = {}; var rootVariableTypes = {}; var queriesObj = (0, _lodash.mapValues)(rootFields, function (v, key) { var _fieldToQueriesObject = fieldToQueriesObject(v), variables = _fieldToQueriesObject.variables, queriesObj = _fieldToQueriesObject.queriesObj, variableTypes = _fieldToQueriesObject.variableTypes; (0, _lodash.merge)(rootVariables, variables); rootVariableTypes[key] = variableTypes; return queriesObj; }); return { queriesObj: queriesObj, variables: rootVariables }; } function objectToQueries(o) { var close = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var variables = arguments.length > 2 ? arguments[2] : undefined; var result = Object.keys(o).map(function (key) { var query = "".concat(key); var element = o[key]; if (element === null) { return "".concat(query); } else if (!element) { return ''; } if (element.declareArgs) { var originElement = (0, _objectSpread3.default)({}, element); var args = originElement.declareArgs; delete originElement.declareArgs; query = 'query'; element = { args: args, fields: (0, _defineProperty2.default)({}, key, originElement) }; key = 'query'; } if (element.isPlural) { query = _pluralize.default.plural((0, _lowerFirst.default)(query)); } if (element.connection) { query = "".concat(query, "Connection"); } if (element.alias) { query = "".concat(element.alias, ": ").concat(query); } if (element.args) { if (key === 'query') { var _args = genDeclareArgs(element.args, variables); query = _args ? "".concat(query, "(").concat(_args, ")") : "".concat(query); } else { var _args2 = genArgs(element.args, variables); query = _args2 ? "".concat(query, "(").concat(_args2, ")") : "".concat(query); } } if (element.fields) { var _element = element, fields = _element.fields; if (element.connection) { fields = { edges: { fields: { cursor: null, node: { fields: fields } } }, pageInfo: { fields: { hasNextPage: null, hasPreviousPage: null, startCursor: null, endCursor: null } } }; } fields = objectToQueries(fields, true, variables); query = "".concat(query).concat(fields); } return "".concat(query); }).join(' '); return close ? "{".concat(result, "}") : result; } function genArgs(args, variables) { return Object.keys(args).filter(function (key) { if (variables && variables[args[key].substr(1)] === undefined) { return false; } return true; }).map(function (key) { var argValue = args[key]; return "".concat(key, ": ").concat(argValue); }).join(','); } function genDeclareArgs(args, variables) { return Object.keys(args).filter(function (key) { if (variables && variables[key.substr(1)] === undefined) { return false; } return true; }).map(function (key) { var argValue = args[key]; return "".concat(key, ": ").concat(argValue); }).join(','); } function typeKey(key) { return (0, _upperFirst.default)(_pluralize.default.singular(key)); }