Rewrite the document walker function

This commit is contained in:
Jeremy Whitlock 2018-01-21 14:05:11 -07:00
Родитель 6d833908ac
Коммит 18604e262d
5 изменённых файлов: 1630 добавлений и 1103 удалений

2
browser/sway-min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

2
browser/sway-standalone-min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -126,6 +126,7 @@ function normalizeError (obj) {
});
}
}
/**
* Helper method to take a Swagger parameter definition and compute its schema.
*
@ -403,30 +404,12 @@ module.exports.parameterLocations = ['body', 'formData', 'header', 'path', 'quer
* @param {object} obj - The JavaScript object
*/
module.exports.removeCirculars = function (obj) {
function walk (ancestors, node, path) {
function walkItem (item, segment) {
path.push(segment);
walk(ancestors, item, path);
path.pop();
}
// We do not process circular objects again
if (ancestors.indexOf(node) === -1) {
ancestors.push(node);
if (_.isArray(node) || _.isPlainObject(node)) {
_.each(node, function (member, indexOrKey) {
walkItem(member, indexOrKey.toString());
});
}
} else {
walk(obj, function (node, path, ancestors) {
// Replace circulars with {}
if (ancestors.indexOf(node) > -1) {
_.set(obj, path, {});
}
ancestors.pop();
}
walk([], obj, []);
});
}
/**
@ -482,3 +465,34 @@ module.exports.validateContentType = function (contentType, supportedTypes, resu
});
}
};
/**
* Walk an object and invoke the provided function for each node.
*
* @param {*} obj - The object to walk
* @param {function} [fn] - The function to invoke
*/
var walk = module.exports.walk = function (obj, fn) {
var callFn = _.isFunction(fn);
function doWalk (ancestors, node, path) {
if (callFn) {
fn(node, path, ancestors);
}
// We do not process circular objects again
if (ancestors.indexOf(node) === -1) {
ancestors.push(node);
if (_.isArray(node) || _.isPlainObject(node)) {
_.each(node, function (member, indexOrKey) {
doWalk(ancestors, member, path.concat(indexOrKey.toString()));
});
}
}
ancestors.pop();
}
doWalk([], obj, []);
}