UNPKG

graphql-sequelize-helper

Version:

graphql-sequelize-helper transform Sequelize models to GraphQL schemas that is compatible with Relay. * <a href="http://docs.sequelizejs.com/">Sequelize</a> is a promise-based Node.js ORM for Postgres, MySQL, SQLite and Microsoft SQL Server. It features s

132 lines (107 loc) 4.76 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.lcFirst = exports.connectionName = exports.convertFieldsToGlobalId = exports.removePrimaryKeyOrAutoIncrement = exports.getQueryDescription = exports.getQueryName = exports.getModelGrapqhQLConfig = exports.connectionNameForAssociation = exports.getTableName = undefined; var _camelcase = require('camelcase'); var _camelcase2 = _interopRequireDefault(_camelcase); var _defaults = require('defaults'); var _defaults2 = _interopRequireDefault(_defaults); var _pluralize = require('pluralize'); var _pluralize2 = _interopRequireDefault(_pluralize); var _graphql = require('graphql'); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _index = require('./index'); var _index2 = require('../type/index'); var _index3 = _interopRequireDefault(_index2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var getTableName = exports.getTableName = function getTableName(model) { return model.name; }; var connectionNameForAssociation = exports.connectionNameForAssociation = function connectionNameForAssociation(model, associationName) { return _index.StringHelper.toInitialUpperCase((0, _camelcase2.default)(getTableName(model) + '_to_' + associationName)); }; var getModelGrapqhQLConfig = exports.getModelGrapqhQLConfig = function getModelGrapqhQLConfig(model) { var config = (0, _defaults2.default)(model.graphql, { modelType: function modelType(_modelType) { return _modelType; }, crud: {} }); var defaultCrudEnable = _lodash2.default.isBoolean(config.crud.enable) ? config.crud.enable : true; var defaultCrud = defaultCrudEnable ? function (func) { return func; } : false; var _arr = ['add', 'read', 'update', 'delete']; for (var _i = 0; _i < _arr.length; _i++) { var crudType = _arr[_i]; config.crud[crudType] = (0, _defaults2.default)(config.crud[crudType], { one: defaultCrud, all: defaultCrud }); if (crudType !== 'read') { delete config.crud[crudType].all; } } return config; }; var getQueryName = exports.getQueryName = function getQueryName(model, type, countType) { if (type === 'read') { if (countType === 'all') { return (0, _camelcase2.default)(_pluralize2.default.plural(getTableName(model))); } else if (countType === 'one') { return (0, _camelcase2.default)(getTableName(model)); } } else if (['add', 'update', 'delete'].indexOf(type) !== -1) { if (countType === 'all') { return (0, _camelcase2.default)(type + '_' + _pluralize2.default.plural(getTableName(model))); } else if (countType === 'one') { return (0, _camelcase2.default)(type + '_' + getTableName(model)); } } console.warn('Unknown query type: ', type); return (0, _camelcase2.default)(type + '_' + countType + '_' + getTableName(model)); }; var getQueryDescription = exports.getQueryDescription = function getQueryDescription(model, type, countType) { var tableName = getTableName(model); if (countType === 'all') { return type + ' ' + countType + ' ' + _pluralize2.default.plural(tableName) + '.'; } else if (countType === 'one') { return type + ' ' + countType + ' ' + tableName + '.'; } else { return type + ' ' + countType + ' ' + tableName + '.'; } }; var removePrimaryKeyOrAutoIncrement = exports.removePrimaryKeyOrAutoIncrement = function removePrimaryKeyOrAutoIncrement(model, fields) { for (var field in fields) { var attribute = model.rawAttributes[field]; if (attribute.references) continue; if (attribute._autoGenerated || attribute.autoIncrement) { delete fields[field]; } } }; var convertFieldsToGlobalId = exports.convertFieldsToGlobalId = function convertFieldsToGlobalId(model, fields) { var isUpdateFields = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; _lodash2.default.forOwn(model.associations, function (value, key) { if (['BelongsTo'].indexOf(value.associationType) !== -1) { var globalIdType = _index3.default.GraphQLScalarTypes.globalIdInputType(value.target.name); var required = _lodash2.default.get(value, 'options.required', false); if (required === true && isUpdateFields === false) globalIdType = new _graphql.GraphQLNonNull(globalIdType); fields[value.foreignKey] = { description: 'ID for ' + key, type: globalIdType }; } }); }; var connectionName = exports.connectionName = function connectionName(model) { return model.name + 'Connection'; }; var lcFirst = exports.lcFirst = function lcFirst(name) { if (name) { name = (0, _camelcase2.default)(name); } return name; };