UNPKG

ruddy

Version:

Modularized state-management tools for modern front-end applications. Manage dispatched messages in a clean and predictable way for either small or large scale projects

153 lines (107 loc) 5.42 kB
'use strict'; exports.__esModule = true; exports.createTypes = exports.createConstants = exports.concatOrReplace = exports.getTypes = undefined; var _curry = require('ramda/src/curry'); var _curry2 = _interopRequireDefault(_curry); var _filter = require('ramda/src/filter'); var _filter2 = _interopRequireDefault(_filter); var _always = require('ramda/src/always'); var _always2 = _interopRequireDefault(_always); var _zipObj = require('ramda/src/zipObj'); var _zipObj2 = _interopRequireDefault(_zipObj); var _map = require('ramda/src/map'); var _map2 = _interopRequireDefault(_map); var _isEmpty = require('ramda/src/isEmpty'); var _isEmpty2 = _interopRequireDefault(_isEmpty); var _isNil = require('ramda/src/isNil'); var _isNil2 = _interopRequireDefault(_isNil); var _either = require('ramda/src/either'); var _either2 = _interopRequireDefault(_either); var _any = require('ramda/src/any'); var _any2 = _interopRequireDefault(_any); var _reject = require('ramda/src/reject'); var _reject2 = _interopRequireDefault(_reject); var _reduce = require('ramda/src/reduce'); var _reduce2 = _interopRequireDefault(_reduce); var _toPairs = require('ramda/src/toPairs'); var _toPairs2 = _interopRequireDefault(_toPairs); var _not = require('ramda/src/not'); var _not2 = _interopRequireDefault(_not); var _allPass = require('ramda/src/allPass'); var _allPass2 = _interopRequireDefault(_allPass); var _ifElse = require('ramda/src/ifElse'); var _ifElse2 = _interopRequireDefault(_ifElse); var _is = require('ramda/src/is'); var _is2 = _interopRequireDefault(_is); var _prop = require('ramda/src/prop'); var _prop2 = _interopRequireDefault(_prop); var _values = require('ramda/src/values'); var _values2 = _interopRequireDefault(_values); var _compose = require('ramda/src/compose'); var _compose2 = _interopRequireDefault(_compose); var _util = require('../util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Retrieves all a duck's namespaced types * * @func * @sig {k: v} -> [String] * @param {Object} duck An object containing an object of action types, whose values are namespaced * @returns {String[]} A list of all the namespaced types for a given duck */ var getTypes = exports.getTypes = (0, _compose2.default)(_values2.default, (0, _prop2.default)('types')); /** * Merges together either two lists or appends a non-list type into another list * * @func * @sig ([a], b) -> [a, b] * @param {Array} left A list of any type of values * @param {Array|*} right Either a list of values or any kind of non-list value * to append to the 'left' list * @returns {Array|*} a merged list (if 'left' was an array, otherwise 'right') */ var concatOrReplace = exports.concatOrReplace = function concatOrReplace(left, right) { return (0, _is2.default)(Array, left) ? [].concat(left, (0, _util.coerceToArray)(right)) : right; }; /** * A function which validates and then deep freezes an object of constants * * @func * @sig {k: v} -> {k: v} * @param {Object} constants An Object which should contain only primitive values or arrays of primitives values * @returns {Object} A frozen Object with only the values which have been validated */ var createConstants = exports.createConstants = (0, _ifElse2.default)( /* no nested functions or objects, just primitives or conversion of arrays * of primitives into simple objects whose keys and vals are the same */ (0, _allPass2.default)([(0, _compose2.default)(_not2.default, _util.isPrimitiveish), (0, _compose2.default)(_not2.default, (0, _is2.default)(Array)), (0, _is2.default)(Object)]), (0, _compose2.default)(Object.freeze, (0, _reduce2.default)(_util.listOfPairsToOneObject, {}), (0, _reject2.default)((0, _any2.default)((0, _either2.default)(_isNil2.default, _isEmpty2.default))), (0, _map2.default)(function (_ref) { var name = _ref[0], value = _ref[1]; if ((0, _is2.default)(Array, value)) { /* Creates an object whose keys and values are identical */ return [name, Object.freeze((0, _zipObj2.default)(value.filter(_util.isPrimitiveish), value.filter(_util.isPrimitiveish)))]; } else if ((0, _util.isPlainObj)(value)) { return [name, (0, _compose2.default)((0, _ifElse2.default)(_isEmpty2.default, (0, _always2.default)(null), Object.freeze), (0, _filter2.default)(_util.isPrimitiveish))(value)]; } return (0, _util.isPrimitiveish)(value) ? [name, value] : null; }), _toPairs2.default, (0, _reject2.default)(_isEmpty2.default)), (0, _always2.default)({})); /** * A function which takes an Object containing namespace and store values and returns * a function that will formats an array of strings to have the namespace and * store as prefixes. * * @func * @sig {k: v} -> ([String] -> {k: v}) * @param {Object} p An Object with both a 'namespace' and 'store' string value, * from which to format each action type * @returns {Function} A function which takes an array of Strings (action types) * and creates an Object formatted such that the each key and value matches the string, * but formatted as 'namespace/store/type' */ var createTypes = exports.createTypes = (0, _curry2.default)(function (_ref2, types) { var namespace = _ref2.namespace, store = _ref2.store; return (0, _zipObj2.default)(types, types.map(function (type) { return (namespace || '') + '/' + (store || '') + '/' + type; })); });