UNPKG

lore-hook-models

Version:

A lore hook that creates models for AJAX communication

80 lines (63 loc) 2.46 kB
'use strict'; 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'];