deno/tests/specs/bundle/html/print-dir.ts
Nathan Whitaker 4e4bbf2fcc
feat(bundle): support html entrypoint (#29856)
For instance

`deno bundle --outdir dist index.html`

It will find scripts referenced in the html, bundle them, and then
update the paths in index.html for the bundled assets.

Right now it doesn't handle other assets (from `link` elements), but it
could
2025-09-09 12:18:10 -07:00

56 lines
1.5 KiB
TypeScript

function printName(name: string, level = 0) {
console.log("-".repeat(level + 1) + " " + name);
}
function walk(
dir: string,
fn: (
{ name, dir, level, kind }: {
name: string;
dir: string;
level: number;
kind: "file" | "dir" | "symlink";
},
) => void,
{ maxLevel }: { maxLevel: number },
) {
const walkRecursive = (dir: string, level: number) => {
if (maxLevel > 0 && level > maxLevel) {
return;
}
const files = Deno.readDirSync(dir).toArray();
files.sort((a, b) => a.name.localeCompare(b.name));
for (const file of files) {
if (file.isDirectory) {
fn({ name: file.name, dir, level, kind: "dir" });
walkRecursive(dir + "/" + file.name, level + 1);
} else if (file.isFile) {
fn({ name: file.name, dir, level, kind: "file" });
} else {
fn({ name: file.name, dir, level, kind: "symlink" });
}
}
};
walkRecursive(dir, 0);
}
function printDir(dir: string, maxLevel = 0) {
walk(dir, ({ name, level, kind }) => {
printName(name + (kind === "symlink" ? " (symlink)" : ""), level);
}, { maxLevel });
}
let maxLevel = 0;
for (let i = 0; i < Deno.args.length; i++) {
const arg = Deno.args[i];
if (arg.startsWith("--max-level=")) {
maxLevel = parseInt(arg.split("=")[1]) - 1;
maxLevel = Math.max(0, maxLevel);
} else {
console.log(arg);
printDir(arg, maxLevel);
if (i < Deno.args.length - 1) {
console.log("");
maxLevel = 0;
}
}
}