forked from mapprotocol/map-protocol-website
-
Notifications
You must be signed in to change notification settings - Fork 0
/
list-docs.js
52 lines (42 loc) · 1.43 KB
/
list-docs.js
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
41
42
43
44
45
46
47
48
49
50
51
52
const fs = require('fs');
const path = require('path');
const dirPath = path.join(__dirname, 'public/docs'); // directory path
const outputPath = path.join(__dirname, 'public/docs-list.json'); // output file path
const extractTitleFromMd = (content) => {
const lines = content.split('\n');
for (let line of lines) {
if (line.startsWith('# ')) {
return line.replace('# ', '').trim();
}
}
return null;
};
const generateTree = (dir, relativePath = '') => {
const result = {
type: 'directory',
name: path.basename(dir),
children: []
};
const items = fs.readdirSync(dir);
items.forEach(item => {
const itemPath = path.join(dir, item);
const isDirectory = fs.statSync(itemPath).isDirectory();
const itemRelativePath = path.join(relativePath, item);
if (isDirectory) {
result.children.push(generateTree(itemPath, itemRelativePath));
} else if (path.extname(item) === '.md') {
const content = fs.readFileSync(itemPath, 'utf-8');
const title = extractTitleFromMd(content) || item;
const mdPath = itemRelativePath.replace('.md', '');
result.children.push({
type: 'file',
name: title,
path: mdPath // Add path field here
});
}
});
return result;
};
const tree = generateTree(dirPath);
fs.writeFileSync(outputPath, JSON.stringify(tree, null, 2), 'utf8');
console.log('Markdown files tree with titles and paths generated successfully!');