lore-hook-models
Version:
A lore hook that creates models for AJAX communication
80 lines (63 loc) • 2.46 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (modelName, options) {
var connection = options.connection || {};
var config = options.config || {};
var definition = options.definition || {};
/**
* Merge apiRoot, pluralize and casingStyle from config files for
* connections, models and the individual model definition
*/
var combinedConfig = _lodash2.default.merge({}, connection, config, definition);
var conventions = {
properties: {
urlRoot: getUrlRoot(modelName, combinedConfig)
}
};
if (connection.headers) {
conventions.properties.headers = connection.headers;
}
// Build the final set of properties for the collection
var properties = _lodash2.default.defaultsDeep({}, definition.properties, config.properties, connection.models.properties, conventions.properties);
return properties;
};
var _pluralize = require('pluralize');
var _pluralize2 = _interopRequireDefault(_pluralize);
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var CasingStyles = {
Camel: 'camel',
Snake: 'snake',
Kebab: 'kebab',
Pascal: 'pascal'
};
function applyCasingStyle(casingStyle, modelName) {
switch (casingStyle) {
case CasingStyles.Camel:
return _lodash2.default.camelCase(modelName);
case CasingStyles.Kebab:
return _lodash2.default.kebabCase(modelName);
case CasingStyles.Pascal:
return _lodash2.default.upperFirst(_lodash2.default.camelCase(modelName));
case CasingStyles.Snake:
return _lodash2.default.snakeCase(modelName);
default:
throw new Error('Illegal casingStyle of \'' + casingStyle + '\' provided. Must be one of [' + [CasingStyles.Camel, CasingStyles.Kebab, CasingStyles.Pascal, CasingStyles.Snake] + ']');
}
}
function getUrlRoot(modelName, config) {
var apiRoot = config.apiRoot;
var isPlural = config.pluralize;
var casingStyle = config.casingStyle;
var endpoint = config.endpoint;
// if the user did not provide a custom endpoint, generate
// one from the model name
if (!endpoint) {
endpoint = isPlural ? applyCasingStyle(casingStyle, (0, _pluralize2.default)(modelName)) : applyCasingStyle(casingStyle, modelName);
}
return apiRoot ? apiRoot + '/' + endpoint : endpoint;
}
module.exports = exports['default'];
;