-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
import { readdir } from "node:fs/promises";
interface Entry {
url: URL;
name: string;
}
export async function listEntries(
dir: URL,
root: URL = dir,
): Promise<readonly Entry[]> {
const entries = await readdir(dir, {
withFileTypes: true,
});
return Promise.all(
entries.map(async (entry) => {
if (entry.isDirectory()) {
return listEntries(new URL(entry.name + "/", dir), root);
}
if (!entry.isFile()) {
return [];
}
const url = new URL(entry.name, dir);
if (url.pathname.indexOf(root.pathname) !== 0) {
throw new Error("Document outside docs root dir: " + url.pathname);
}
return [
{
url,
name: url.pathname.slice(root.pathname.length).replace(/\.md$/, ""),
},
];
}),
).then((arr) => arr.flat());
}