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

278 lines (259 loc) 16.1 kB
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')))]);