rttc
Version:
Runtime type-checking for JavaScript.
54 lines (50 loc) • 1.91 kB
JavaScript
/**
* Module dependencies
*/
var rebuildRecursive = require('./helpers/rebuild-recursive');
/**
* rebuild()
*
* Rebuild a potentially-recursively-deep value, running
* the specified `handleLeafTransform` lifecycle callback
* (aka transformer function) for every primitive (i.e. string,
* number, boolean, null) and function.
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* @param {Anything} val
*
* @param {Function} handleLeafTransform [run AFTER stringification of Errors, Dates, etc.]
* @param {Anything} leafVal
* @param {String} leafType [either 'string', 'number', 'boolean', 'null', or 'lamda']
* @return {Anything} [transformed version of `leafVal`]
*
* @param {Function} handleCompositeTransform [run BEFORE recursion and stripping of undefined items/props]
* @param {Dictionary|Array} compositeVal
* @param {String} leafType [either 'array' or 'dictionary']
* @return {Dictionary|Array} [transformed version of `compositeVal`-- MUST BE A DICTONARY OR ARRAY THAT IS SAFE TO RECURSIVELY DIVE INTO!!!]
*
* @returns {JSONCompatible}
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Example usage:
*
* ```
* rttc.rebuild({
* foo: [
* 3,
* ['hey', 'yo', 235, {}]
* ]
* },
* function transformPrimitive(val, type){ return val;},
* function transformDictOrArray(compositeThing, type) {
* if (type === 'array') { return compositeThing.slice(1); }
* else { return compositeThing; }
* })
*
* // Yields:
* // { foo: [ [ 'yo', 235, {} ] ] }
* ```
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
module.exports = function rebuild(val, handleLeafTransform, handleCompositeTransform){
return rebuildRecursive(val, handleLeafTransform, handleCompositeTransform);
};