@docuify/engine
Version:
A flexible, pluggable engine for building and transforming documentation content from source files.
78 lines (74 loc) • 2.49 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// lib/utils/preload.ts
var preload_exports = {};
__export(preload_exports, {
preloadFlatNodesContent: () => preloadFlatNodesContent,
preloadTreeContent: () => preloadTreeContent
});
module.exports = __toCommonJS(preload_exports);
// lib/utils/walk_tree.ts
function walkTree(node, visitor) {
visitor(node);
if (node.type === "folder" && node.children?.length) {
for (const child of node.children) {
walkTree(child, visitor);
}
}
}
// lib/utils/preload.ts
async function preloadFiles(files, concurrency = 10, keepContent = false) {
const fileList = files.filter(
(f) => f.type === "file" && typeof f.actions?.loadContent === "function"
);
let index = 0;
const worker = async () => {
while (index < fileList.length) {
const currentIndex = index++;
const file = fileList[currentIndex];
try {
await file.actions?.loadContent?.();
} catch (err) {
console.warn(
`[docuify] Failed to preload content for: ${file.path}`,
err
);
}
}
};
const workers = Array.from({ length: concurrency }, () => worker());
await Promise.all(workers);
}
async function preloadFlatNodesContent(nodes, concurrency = 10, keepContent = false) {
await preloadFiles(nodes, concurrency, keepContent);
}
async function preloadTreeContent(tree, concurrency = 10, keepContent = false) {
const files = [];
walkTree(tree, (node) => {
if (node.type === "file") {
files.push(node);
}
});
await preloadFiles(files, concurrency, keepContent);
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
preloadFlatNodesContent,
preloadTreeContent
});