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
53 lines (49 loc) • 3.23 kB
JavaScript
import _default5 from 'ramda/src/uncurryN';
import _default4 from 'ramda/src/always';
import _default3 from 'ramda/src/converge';
import _default2 from 'ramda/src/mergeDeepRight';
import _default from 'ramda/src/compose';
import { duxDefaults } from './schema';
import { createDuckEffects, createDuckThrottlers, createDuckDebouncers, createDuckWorkers, createDuckQueries, createDuckValidators, createDuckMachines, createDuckInitialState, createDuckSelectors, createDuckActionCreators, createDuckActionEnhancers, createDuckActionMultipliers, createDuckReducer, createDuckMetadata, createValidationMiddlewareHelpers } from './create';
import { createDuckExtender } from './extend';
/**
* Builds a duck from a set of options (whose keys are validated against
* a whitelist and corresponding schema), including selectors, action creators,
* state machines, validators, a reducer and basic metadata
* (including the required 'namespace' and 'store' name).
*
* @func
* @sig {k: v} -> {k: v}
* @param {Object} options A set of functions, objects (of various schema types)
* and basic metadata which will go into the finished duck.
* @returns {Object} A fully built duck, complete with types, action creators,
* a reducer, selectors, state machines, validators and some basic metadata.
*/
export var createDuck = _default(Object.freeze, createDuckReducer, createDuckEffects, createDuckWorkers, createValidationMiddlewareHelpers, createDuckActionMultipliers, createDuckActionEnhancers, createDuckActionCreators, createDuckDebouncers, createDuckThrottlers, createDuckSelectors, createDuckInitialState, createDuckMachines, createDuckValidators, createDuckQueries, createDuckMetadata, _default2(duxDefaults));
/**
* Builds a function that will extend a duck with options to be supplied at a later time.
* Those options (supplied later) may include selectors, action creators, state machines,
* validators, a reducer and basic metadata (including the required 'namespace' and 'store' name).
*
* @func
* @sig {k: v} -> ({k: v} -> {k: v})
* @param {Object} duck A 'parent' duck whose own options will be merged with those supplied for the new (child) duck.
* @returns {Object} An extender function, ready to be supplied a set of options to extend the original duck.
*/
export var createExtenderForDuck = _default3(_default, [_default4(createDuck), createDuckExtender]);
/**
* Builds a duck from an existing duck _and_ a set of options for a new duck.
* This function is meant to be invoked when both the duck and the child options
* are available together (not a curried function).
*
* @func
* @sig {k: v} -> {k: v} -> {k: v}
* @param {Object} duck A 'parent' duck whose own options will be merged with
* those supplied for the new (child) duck.
* @param {Object} options A set of functions, objects (of various schema types)
* and basic metadata which will go into the finished duck, merged with the parent duck.
* @returns {Object} A fully built duck, complete with types, action creators,
* a reducer, selectors, state machines, validators and some basic metadata,
* merged from the parent duck along with the options supplied for the new duck.
*/
export var extendDuck = _default5(2, createExtenderForDuck);