-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.ts
40 lines (35 loc) · 1.25 KB
/
main.ts
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 { loadSite } from "./helpers/loadSite.js";
import PQueue from "p-queue";
import { generateFeed } from "./helpers/generateFeed.js";
import { fetchWebsite } from "./helpers/fetchWebsite.js";
import { getAllSites } from "./helpers/getAllSites.js";
import { printError } from "./helpers/printError.js";
import { newBrowser } from "./lib/browser.js";
const queue = new PQueue({ concurrency: 4 });
const createTask = (siteName: string): Promise<void> =>
queue.add(async () => {
const browser = await newBrowser();
try {
console.log("[START]", siteName);
const site = await loadSite(siteName);
const { info, articles } = await fetchWebsite({ site, browser });
await generateFeed({ site, info, articles });
console.log("[FINISH]", siteName);
} catch (e) {
console.error("[ERROR]", siteName);
console.error(e);
await printError(e).catch(() => undefined);
throw e;
} finally {
await browser.close();
}
});
(async () => {
const [, , ...args] = process.argv;
const sites: string[] = args.length ? args : await getAllSites();
const results = await Promise.allSettled(sites.map(createTask));
if (results.some((_) => _.status === "rejected")) {
process.exit(1);
}
process.exit(0);
})();