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
JavaScript
;
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;
};