typed-serverless
Version:
Helps you write a consistent Serverless Framework configuration in TypeScript
36 lines (35 loc) • 1.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.traverseObject = void 0;
/**
* Traverse objects by visiting every node on a recursive walk.
*/
function traverseObject(object, visitor, visited = new Set(), key = null, path = [], parent = null) {
if (visited.has(object))
return;
visited.add(object);
// only visit if its not our root object
if (key &&
(Array.isArray(parent) || typeof parent === 'object') &&
parent !== null) {
if (!visitor(object, parent, key, path))
return;
// check if our object was changed by visitor...
const newObject = parent[key];
if (newObject !== object && !visited.has(newObject)) {
// visit our new object instead
traverseObject(newObject, visitor, visited, key, path, parent);
return;
}
}
if (Array.isArray(object) || typeof object === 'object') {
for (const key in object) {
const node = object[key];
traverseObject(node, visitor, visited, key, [...path, key], object);
}
}
else {
traverseObject(object, visitor, visited, key, path, parent);
}
}
exports.traverseObject = traverseObject;