-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.ts
69 lines (64 loc) · 2.91 KB
/
index.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
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
import {PrerenderCrawler} from "./lib/PrerenderCrawler";
import {PrerenderCachedServer} from "./lib/PrerenderCachedServer";
import {PrerenderLiveServer} from "./lib/PrerenderLiveServer";
import {PrerenderMetaServer} from "./lib/PrerenderMetaServer"
const args = process.argv.slice(2);
const prerenderRegex = new RegExp(process.env.PR_WHITELIST_REGEX || '.*');
const indexURL = process.env.PR_INDEX_URL;
const outputDirectory = process.env.PR_CACHE_DIR || "./cached-output";
const metaOutDirectory = process.env.PR_META_DIR || './meta-output';
const workerCount = parseInt(process.env.PR_WORKERS) || 2;
const livePort = parseInt(process.env.PR_LIVE_PORT) || 3000;
const cachedPort = parseInt(process.env.PR_CACHED_PORT) || 4000;
const metaPort = parseInt(process.env.PR_META_PORT) || 5000;
console.log("Prerender starting with args: ", args);
if (!args || args.length < 1) {
console.error("Missing/invalid args");
}
let lServer, pServer, metaServer;
switch (args[0]) {
case 'serve-live':
lServer = new PrerenderLiveServer(livePort);
console.info("Starting live server (expect longer request wait times since pages are rendered on-demand)");
lServer.serve();
break;
case 'serve-cached':
pServer = new PrerenderCachedServer(outputDirectory, cachedPort);
console.info("Starting cached server");
pServer.serve();
break;
case 'serve-meta':
metaServer = new PrerenderMetaServer(metaOutDirectory, metaPort);
console.info("Starting meta server");
metaServer.serve();
break;
case 'serve-all-saved':
pServer = new PrerenderCachedServer(outputDirectory, cachedPort);
console.info("Starting cached server");
pServer.serve();
metaServer = new PrerenderMetaServer(metaOutDirectory, metaPort);
console.info("Starting meta server");
metaServer.serve();
break;
case 'prerender':
console.info("Starting prerender command");
const prerenderer = new PrerenderCrawler(indexURL, prerenderRegex, outputDirectory, metaOutDirectory, workerCount);
console.debug("Instantiated crawler");
prerenderer.setup().then(() => {
console.info("Crawler setup complete. Starting prerendering");
prerenderer.prerender((completedPages, failedPages) => {
console.log("Completed pages count: ", Object.keys(completedPages).length);
console.log("Failed pages (url: error):\n\n", failedPages);
process.exit(Object.keys(failedPages).length == 0 ? 0 : 1);
}).then(() => {
console.log("Successfully started crawling ...");
}).catch(err => {
console.error("Error crawling: ", err);
});
}).catch(err => {
console.error("Error setting up prerenderer: ", err);
});
break;
default:
console.error("Unknown/invalid command: ", args[0])
}