12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- /**
- * Module dependencies
- */
- var _ = require('@sailshq/lodash');
- /**
- * Build an iterator/reducer function for a schema that builds up and returns a new value.
- *
- * Note that this works for either type schemas OR exemplars!
- *
- * @param {Function} onFacetDict
- * -> @param {Object} facetDictionary
- * -> @param {String} parentKeyOrIndex
- * -> @param {Function} iterateRecursive(nextSchema, nextKey)
- * -> @returns {*} value for this part of our result
- *
- * @param {Function} onPatternArray
- * -> @param {Array} patternArray
- * -> @param {String} parentKeyOrIndex
- * -> @param {Function} iterateRecursive(nextSchema, nextIndex)
- * -> @returns {*} value for this part of our result
- *
- * @param {Function} onGenericDict
- * -> @param {Object} schema -- (this is always `{}`)
- * -> @param {String} parentKeyOrIndex
- * -> @returns {*} value for this part of our result
- *
- * @param {Function} onGenericArray
- * -> @param {Array} schema -- (this is always `[]`)
- * -> @param {String} parentKeyOrIndex
- * -> @returns {*} value for this part of our result
- *
- * @param {Function} onOther
- * -> @param {*} schema
- * -> @param {String} parentKeyOrIndex
- * -> @returns {*} value for this part of our result
- *
- * @return {Function}
- */
- module.exports = function buildIterator(onFacetDict, onPatternArray, onGenericDict, onGenericArray, onOther) {
- /**
- * @param {*} subSchema [description]
- * @param {} keyOrIndex [description]
- * @return {[type]} [description]
- */
- function _iterator(subSchema, keyOrIndex){
- if (_.isArray(subSchema)) {
- if (_.isEqual(subSchema, [])) {
- return onGenericArray(subSchema, keyOrIndex);
- }
- return onPatternArray(subSchema, keyOrIndex, function (nextSchema, nextIndex){
- return _iterator(nextSchema, nextIndex);
- });
- }
- else if (_.isObject(subSchema)) {
- if (_.isEqual(subSchema, {})) {
- return onGenericDict(subSchema, keyOrIndex);
- }
- return onFacetDict(subSchema, keyOrIndex, function (nextSchema, nextKey) {
- return _iterator(nextSchema, nextKey);
- });
- }
- else {
- return onOther(subSchema, keyOrIndex);
- }
- }
- /**
- * @param {*} thingToTraverse
- * @return {*}
- */
- return function (thingToTraverse){
- return _iterator(thingToTraverse);
- };
- };
|