Files
osr-mono/packages/fs/utils/tree_walker.js
T
2025-01-29 17:40:56 +01:00

105 lines
7.9 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.sync = sync;
exports.stream = stream;
const stream_1 = require("stream");
const pathUtil = require("path");
const inspect_1 = require("../inspect");
const interfaces_1 = require("../interfaces");
const list_1 = require("../list");
// ---------------------------------------------------------
// SYNC
// ---------------------------------------------------------
function sync(path, options, callback, currentLevel) {
const item = (0, inspect_1.sync)(path, options.inspectOptions);
if (options.maxLevelsDeep === undefined) {
options.maxLevelsDeep = Infinity;
}
if (currentLevel === undefined) {
currentLevel = 0;
}
let children = [];
const hasChildren = item && item.type === interfaces_1.ENodeType.DIR && currentLevel < options.maxLevelsDeep;
if (hasChildren) {
children = (0, list_1.sync)(path);
}
callback(path, item);
if (hasChildren) {
children.forEach(child => sync(path + pathUtil.sep + child, options, callback, currentLevel + 1));
}
}
function stream(path, options) {
const rs = new stream_1.Readable({ objectMode: true });
let nextTreeNode = {
path: path,
parent: undefined,
level: 0
};
let running = false;
let readSome;
const error = (err) => {
rs.emit('error', err);
};
const findNextUnprocessedNode = (node) => {
if (node.nextSibling) {
return node.nextSibling;
}
else if (node.parent) {
return findNextUnprocessedNode(node.parent);
}
return undefined;
};
const pushAndContinueMaybe = (data) => {
const theyWantMore = rs.push(data);
running = false;
if (!nextTreeNode) {
// Previous was the last node. The job is done.
rs.push(null);
}
else if (theyWantMore) {
readSome();
}
};
if (options.maxLevelsDeep === undefined) {
options.maxLevelsDeep = Infinity;
}
readSome = () => {
const theNode = nextTreeNode;
running = true;
(0, inspect_1.async)(theNode.path, options.inspectOptions)
.then((inspected) => {
theNode.inspected = inspected;
if (inspected && inspected.type === interfaces_1.ENodeType.DIR && theNode.level < options.maxLevelsDeep) {
(0, list_1.async)(theNode.path)
.then((childrenNames) => {
const children = childrenNames.map((name) => {
return {
name: name,
path: theNode.path + pathUtil.sep + name,
parent: theNode,
level: theNode.level + 1
};
});
children.forEach((child, index) => {
child.nextSibling = children[index + 1];
});
nextTreeNode = children[0] || findNextUnprocessedNode(theNode);
pushAndContinueMaybe({ path: theNode.path, item: inspected });
})
.catch(error);
}
else {
nextTreeNode = findNextUnprocessedNode(theNode);
pushAndContinueMaybe({ path: theNode.path, item: inspected });
}
})
.catch(error);
};
rs['_read'] = () => {
if (!running) {
readSome();
}
};
return rs;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZV93YWxrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvdHJlZV93YWxrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFjQSxvQkFrQkM7QUFhRCx3QkEwRUM7QUF2SEQsbUNBQWtDO0FBQ2xDLGlDQUFrQztBQUNsQyx3Q0FBd0U7QUFDeEUsOENBQWtFO0FBQ2xFLGtDQUErRDtBQU8vRCw0REFBNEQ7QUFDNUQsT0FBTztBQUNQLDREQUE0RDtBQUM1RCxTQUFnQixJQUFJLENBQUMsSUFBWSxFQUFFLE9BQWlCLEVBQUUsUUFBNkMsRUFBRSxZQUFxQjtJQUN6SCxNQUFNLElBQUksR0FBRyxJQUFBLGNBQVcsRUFBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZELElBQUksT0FBTyxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN6QyxPQUFPLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDaEMsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxRQUFRLEdBQWEsRUFBRSxDQUFDO0lBQzVCLE1BQU0sV0FBVyxHQUFZLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLHNCQUFTLENBQUMsR0FBRyxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQ3pHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDakIsUUFBUSxHQUFHLElBQUEsV0FBUSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDakIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdB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