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
278 lines (259 loc) • 16.1 kB
JavaScript
import _default45 from 'ramda/src/applySpec';
import _default44 from 'ramda/src/juxt';
import _default43 from 'ramda/src/all';
import _default42 from 'ramda/src/both';
import _default41 from 'ramda/src/adjust';
import _default40 from 'ramda/src/assocPath';
import _default39 from 'ramda/src/applyTo';
import _default38 from 'ramda/src/isEmpty';
import _default37 from 'ramda/src/propSatisfies';
import _default36 from 'ramda/src/not';
import _default35 from 'ramda/src/anyPass';
import _default34 from 'ramda/src/allPass';
import _default33 from 'ramda/src/call';
import _default32 from 'ramda/src/isNil';
import _default31 from 'ramda/src/pathSatisfies';
import _default30 from 'ramda/src/ifElse';
import _default29 from 'ramda/src/map';
import _default28 from 'ramda/src/propEq';
import _default27 from 'ramda/src/keys';
import _default26 from 'ramda/src/pick';
import _default25 from 'ramda/src/evolve';
import _default24 from 'ramda/src/mergeDeepRight';
import _default23 from 'ramda/src/converge';
import _default22 from 'ramda/src/objOf';
import _default21 from 'ramda/src/ap';
import _default20 from 'ramda/src/of';
import _default19 from 'ramda/src/mergeAll';
import _default18 from 'ramda/src/path';
import _default17 from 'ramda/src/split';
import _default16 from 'ramda/src/nth';
import _default15 from 'ramda/src/head';
import _default14 from 'ramda/src/either';
import _default13 from 'ramda/src/is';
import _default12 from 'ramda/src/__';
import _default11 from 'ramda/src/prop';
import _default10 from 'ramda/src/when';
import _default9 from 'ramda/src/always';
import _default8 from 'ramda/src/unless';
import _default7 from 'ramda/src/curry';
import _default6 from 'ramda/src/identity';
import _default5 from 'ramda/src/unapply';
import _default4 from 'ramda/src/filter';
import _default3 from 'ramda/src/assoc';
import _default2 from 'ramda/src/reduce';
import _default from 'ramda/src/compose';
import spected from 'spected';
import { shapeline, makeShaper } from 'shapey';
import { createMachines, getDefaultStateForMachines } from '../machines';
import { createTransitionsPostReducer, createReducer } from '../reducers';
import { deriveSelectors } from '../selectors';
import { makeWorkers } from '../workers';
import { makeQueries, copyRawQueriesToConsts } from '../queries';
import { metadataEvolvers, isDux } from './schema';
import { createTypes } from '../types';
import { coerceToFn, isEffect, isEnhancer, isNotEmpty, isPlainObj, isSpecOrFunction, isStringieThingie } from '../util';
import { createDuckSchemaValidator } from './validate';
import { makeEffectHandler } from '../effects';
import { createPayloadValidator, createPayloadValidationsLogger, createPayloadPruner, pruneValidatedFields } from '../validators';
/**
* Merges multiple ducks into one flattened Object (row).
*
* @func
* @sig ({k: v}...) -> {k: v}
* @param {...Object} ducks One or more ducks to merge into one row
* @returns {Object} A single object composed of many ducks
*/
export var createRow = _default(_default2(function (row, duck) {
return _default3(duck.store, duck, row);
}, {}), _default4(isDux), _default5(_default6));
/**
* A function which takes an Object of one or more ducks and finds the duck
* which matches a (potentially) namespaced Redux action
*
* @func
* @sig {k: v} -> {k: v} -> {k: v}
* @param {Object} row An Object containing one or more ducks
* @param {Object} action An dispatch Redux action (if belonging to this lib,
* should have a namespaced action type)
* @returns {Object} A single duck that corresponds to the dispatched action
* (defaults to an empty object if none found)
*/
export var createDuckLookup = _default7(function (row, action) {
return _default(_default8(isPlainObj, _default9({})), _default10(isStringieThingie, _default11(_default12, _default4(isDux, row))), _default10(_default13(String), _default(_default14(_default16(1), _default15), _default17('/'))), _default18(['type']))(action);
});
/**
* Validates and applies the configuration options for a new Duck, also
* performing final formatting for many of the duck's simpler props
* (consts, types, validationLevel, namespace, store, etc.).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} options All the configuration options to be passed into the duck constructor
* @returns {Object} An object containing all the validated configuration options for the new Duck
*/
export var createDuckMetadata = _default(_default19, _default21([_default(_default22('stateMachinesPropName'), _default9(['states'])), _default(_default23(_default24, [_default(_default25(metadataEvolvers), _default26(_default27(metadataEvolvers)), copyRawQueriesToConsts), _default(_default22('types'), _default23(createTypes, [_default6, _default11('types')]))]), _default11('validatedOptions')), _default(_default10(isNotEmpty, _default22('invalidOptions')), pruneValidatedFields, _default11('validationsResult')), _default(_default22('options'), _default11('validatedOptions'))]), _default20, createDuckSchemaValidator);
/**
* Creates the Duck's validators (if they are present inside of its 'options' prop).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain validators (inside of its 'options')
* @returns {Object} A clone of the duck, but now with validators (if they were found inside of 'options').
*/
export var createDuckValidators = _default(_default8(_default28('validationLevel', 'PRUNE'), _default25({
validators: _default29(function (validator) {
return _default(pruneValidatedFields, validator);
})
})), _default23(_default24, [_default6, _default30(_default31(_default32, ['options', 'validators']), _default9({}), _default(_default22('validators'), _default29(spected), _default23(_default33, [_default(coerceToFn, _default18(['options', 'validators'])), _default6])))]));
/**
* Creates the Duck's effect handlers (if they are present inside of its 'options' prop).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain effect handlers (inside of its 'options')
* @returns {Object} A clone of the duck, but now with effect handlers (if they were found inside of 'options').
*/
export var createDuckEffects = _default23(_default24, [_default6, _default30(_default31(_default32, ['options', 'effects']), _default9([]), _default(_default22('effects'), _default29(makeEffectHandler), _default4(isEffect), _default23(_default33, [_default(coerceToFn, _default18(['options', 'effects'])), _default6])))]);
/**
* Creates the Duck's throttlers (if they are present inside of its 'options' prop).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain throttlers (inside of its 'options')
* @returns {Object} A clone of the duck, but now with throttlers (if they were found inside of 'options').
*/
export var createDuckThrottlers = _default23(_default24, [_default6, _default30(_default31(_default32, ['options', 'throttling']), _default9([]), _default(_default22('throttling'), _default29(function (_ref) {
var pattern = _ref[0],
milliseconds = _ref[1];
return [pattern, Number(milliseconds)];
}), _default4(_default34([_default13(Array), _default31(_default35([_default13(String), _default13(RegExp), _default13(Function)]), [0]), _default31(_default(_default36, isNaN, Number), [1])])), _default23(_default33, [_default(coerceToFn, _default18(['options', 'throttling'])), _default6])))]);
/**
* Creates the Duck's debouncers (if they are present inside of its 'options' prop).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain debouncers (inside of its 'options')
* @returns {Object} A clone of the duck, but now with debouncers (if they were found inside of 'options').
*/
export var createDuckDebouncers = _default23(_default24, [_default6, _default30(_default31(_default32, ['options', 'debouncing']), _default9([]), _default(_default22('debouncing'), _default29(function (_ref2) {
var pattern = _ref2[0],
milliseconds = _ref2[1];
return [pattern, Number(milliseconds)];
}), _default4(_default34([_default13(Array), _default31(_default35([_default13(String), _default13(RegExp), _default13(Function)]), [0]), _default31(_default(_default36, isNaN, Number), [1])])), _default23(_default33, [_default(coerceToFn, _default18(['options', 'debouncing'])), _default6])))]);
/**
* Creates the Duck's queries (if they are present inside of its 'options' prop).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain queries (inside of its 'options')
* @returns {Object} A clone of the duck, but now with queries (if they were found inside of 'options').
*/
export var createDuckQueries = _default23(_default24, [_default6, _default30(_default31(_default32, ['options', 'queries']), _default9({}), _default(_default22('queries'), makeQueries))]);
/**
* Creates the Duck's workers (if they are present inside of its 'options' prop).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain workers (inside of its 'options')
* @returns {Object} A clone of the duck, but now with workers (if they were found inside of 'options').
*/
export var createDuckWorkers = _default23(_default24, [_default6, _default30(_default31(_default32, ['options', 'workers']), _default9({}), _default(_default22('workers'), makeWorkers))]);
/**
* Creates the Duck's state machines (if they are present inside of its 'options' prop).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain state machines (inside of its 'options')
* @returns {Object} A clone of the duck, but now with state machines (if they were found inside of 'options').
*/
export var createDuckMachines = _default23(_default24, [_default6, _default30(_default31(_default32, ['options', 'machines']), _default9({}), _default(_default22('machines'), _default23(createMachines, [_default23(_default33, [_default(coerceToFn, _default18(['options', 'machines'])), _default6]), _default6])))]);
/**
* Creates the Duck's initial state for the section of the store that affects this duck.
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain initialState (inside of its 'options')
* @returns {Object} A clone of the duck, but now with initialState (if it was found inside of 'options').
*/
export var createDuckInitialState = _default23(_default24, [_default6, _default(_default22('initialState'), _default23(_default24, [_default23(_default33, [_default(coerceToFn, _default18(['options', 'initialState'])), _default6]), _default30(_default37(_default38, 'machines'), _default9({}), _default(_default39({}), _default23(_default40, [_default11('stateMachinesPropName'), _default(getDefaultStateForMachines, _default11('machines'))])))]))]);
/**
* Creates the Duck's selectors (if they are present inside of its 'options' prop).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain selectors (inside of its 'options')
* @returns {Object} A clone of the duck, but now with selectors (if they were found inside of 'options').
*/
export var createDuckSelectors = _default23(_default24, [_default6, _default30(_default31(_default32, ['options', 'selectors']), _default9({}), _default(_default22('selectors'), deriveSelectors, _default23(_default33, [_default(coerceToFn, _default18(['options', 'selectors'])), _default6])))]);
/**
* Creates an Object of enhancement functions out of an Object of spec objects
* (or arrays of spec objects).
*
* @func
* @sig {k: [({k: v} -> {k: v}), ({k: v} -> {k: v}), ...]|({k: v} -> {k: v}) } -> {k: ({k: v} -> {k: v}) }
* @param {Object[]|Object} enhancements A single enhancement spec or an Array of enhancement specs
* @returns {Object} An object of enhancer functions, each ready to receive an
* input object and apply their single or chain of enhancer functions to it.
*/
export var makeEnhancers = _default30(_default13(Array), shapeline, makeShaper);
/**
* Creates the Duck's action enhancers (if they are present inside of its 'options' prop).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain action enhancers (inside of its 'options')
* @returns {Object} A clone of the duck, but now with action enhancers (if they were found inside of 'options').
*/
export var createDuckActionEnhancers = _default23(_default24, [_default6, _default30(_default31(_default32, ['options', 'enhancers']), _default9({}), _default(_default22('enhancers'), _default30(_default13(Array), _default29(_default41(makeEnhancers, 1)), _default29(makeEnhancers)), _default30(isPlainObj, _default4(isSpecOrFunction), _default4(_default42(_default13(Array), _default43(isEnhancer)))), _default23(_default33, [_default(coerceToFn, _default18(['options', 'enhancers'])), _default6])))]);
/**
* Creates an Object of multiplier functions out of an Object of spec objects
* (or arrays of spec objects).
*
* @func
* @sig {k: [({k: v} -> {k: v}), ({k: v} -> {k: v}), ...]|({k: v} -> {k: v}) } -> {k: ({k: v} -> {k: v}) }
* @param {Object[]|Object} multipliers A single multiplier spec or an Array of multipler specs
* @returns {Object} An object of multipler functions, each ready to receive an
* input object and apply their single or many multipler functions to it.
*/
export var makeMultipliers = _default(_default44, _default29(makeShaper), _default8(_default13(Array), _default20));
/**
* Creates the Duck's action multipliers (if they are present inside of its 'options' prop).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain action multipliers (inside of its 'options')
* @returns {Object} A clone of the duck, but now with action multipliers (if they were found inside of 'options').
*/
export var createDuckActionMultipliers = _default23(_default24, [_default6, _default30(_default31(_default32, ['options', 'multipliers']), _default9({}), _default(_default22('multipliers'), _default29(makeMultipliers), _default23(_default33, [_default(coerceToFn, _default18(['options', 'multipliers'])), _default6])))]);
/**
* Creates the Duck's action creators (if they are present inside of its 'options' prop).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain action creators (inside of its 'options')
* @returns {Object} A clone of the duck, but now with action creators (if they were found inside of 'options').
*/
export var createDuckActionCreators = _default23(_default24, [_default6, _default30(_default31(_default32, ['options', 'creators']), _default9({}), _default(_default22('creators'), _default23(_default33, [_default(coerceToFn, _default18(['options', 'creators'])), _default6])))]);
/**
* Creates the Duck's reducer (if it was present inside of its 'options' prop).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain a reducer (inside of its 'options')
* @returns {Object} A clone of the duck, but now with a reducer (if it was found inside of 'options').
*/
export var createDuckReducer = _default23(_default24, [_default6, _default30(_default14(_default31(_default32, ['options', 'reducer']), _default37(_default38, 'machines')), _default(_default22('reducer'), createReducer), _default(_default22('reducer'), createTransitionsPostReducer))]);
/**
* Creates validation helpers for a given Duck, to be used in the middleware chain.
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} duck A duck which (may) contain validators (inside of its 'options')
* @returns {Object} A clone of the duck, but now with validator helpers (if validators were found inside of 'options').
*/
export var createValidationMiddlewareHelpers = _default23(_default24, [_default6, _default30(_default37(_default32, 'validators'), _default9({}), _default(_default45({
isPayloadValid: createPayloadValidator,
getValidationErrors: createPayloadValidationsLogger,
pruneInvalidFields: createPayloadPruner
}), _default11('validators')))]);