-
-
Notifications
You must be signed in to change notification settings - Fork 507
/
sync-readmes.js
74 lines (64 loc) · 2.14 KB
/
sync-readmes.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const fetch = require('node-fetch');
const fs = require('fs-extra');
const Listr = require('listr');
const path = require('path');
const workspaceMappings = {
maker: {
wix: 'wix-msi',
squirrel: 'squirrel.windows',
snap: 'snapcraft',
},
publisher: {},
plugin: {},
};
const BASE_DIR = path.resolve(__dirname, '..');
const DOCS_BASE = 'https://raw.githubusercontent.com/MarshallOfSound/electron-forge-docs/v6';
const sanitize = (gb) => {
return gb
.replace('{% code-tabs %}', '')
.replace('{% endcode-tabs %}', '')
.replace(/{% code-tabs-item title=".+?" %}/g, '')
.replace('{% endcode-tabs-item %}', '')
.replace('{% endhint %}', '\n--------')
.replace(/{% hint style="(.+?)" %}\n/g, (_, style) => {
const styleMap = {
warning: '⚠️',
info: 'ℹ️',
danger: '🚨',
};
return `\n--------\n\n${styleMap[style] || 'ℹ️'} `;
});
};
const sync = () => {
return new Listr([
{
title: 'Collecting package keys',
task: async (ctx) => {
ctx.packageKeys = [];
for (const workspace of Object.keys(workspaceMappings)) {
const workspaceDir = path.resolve(BASE_DIR, 'packages', workspace);
for (const packageName of await fs.readdir(path.resolve(workspaceDir))) {
const packageKey = workspaceMappings[workspace][packageName] || packageName;
ctx.packageKeys.push([workspace, workspaceDir, packageKey, packageName]);
}
}
},
},
{
title: 'Fetching READMEs',
task: (ctx) => new Listr(ctx.packageKeys.map(([workspace, workspaceDir, packageKey, packageName]) => ({
title: `Fetching README for ${path.basename(workspaceDir)}/${packageKey}`,
task: async () => {
const r = await fetch(`${DOCS_BASE}/${workspace}s/${packageKey}.md`);
if (r.status !== 200) return;
const md = sanitize(await r.text());
await fs.writeFile(path.resolve(workspaceDir, packageName, 'README.md'), md);
},
})), { concurrent: 5 }),
},
]);
};
if (process.mainModule === module) {
sync().run().catch(console.error);
}
module.exports = sync;