generated from voxpelli/node-module-template
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cli.js
56 lines (44 loc) · 1.23 KB
/
cli.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
#!/usr/bin/env node
/* eslint-disable no-console */
import { mkdir, writeFile } from 'node:fs/promises';
import path from 'node:path';
import { argv } from 'node:process';
import { generateOpmlForWebring } from './index.js';
const outDir = argv[2];
const webringNames = argv.slice(3);
if (!outDir) {
console.error('Error: An out dir is required');
process.exit(1);
}
if (webringNames.length === 0) {
console.error('Error: At least one webri.ng name required');
process.exit(1);
}
try {
// eslint-disable-next-line security/detect-non-literal-fs-filename
await mkdir(outDir);
} catch {
// Its okay if it already exists
}
const settled = await Promise.allSettled(webringNames.map(async (name) => {
const opml = await generateOpmlForWebring(name);
// eslint-disable-next-line security/detect-non-literal-fs-filename
await writeFile(
path.join(outDir, name + '.opml'),
opml,
'utf8'
);
return name;
}));
let failed = false;
for (const status of settled) {
if (status.status === 'rejected') {
console.error('Failed generating a webri.ng OPML because:', status.reason);
failed = true;
} else {
console.log('Successfully created webri.ng OPML for:', status.value);
}
}
if (failed) {
process.exit(1);
}