зеркало из https://github.com/Azure/sway.git
Rewrite the document walker function
This commit is contained in:
Родитель
6d833908ac
Коммит
18604e262d
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
926
browser/sway.js
926
browser/sway.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, []);
|
||||
}
|
Загрузка…
Ссылка в новой задаче