Skip to content

Commit 471c2eb

Browse files
authored
feat(retry render and dnb): retry puppetteer on failure and render routes on full render only (#256)
1 parent e54dac4 commit 471c2eb

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

scully/renderPlugins/puppeteerRenderPlugin.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import {scullyConfig} from '../utils/config';
88
import {logError, yellow} from '../utils/log';
99
import {launchedBrowser} from './launchedBrowser';
1010

11+
const errorredPages = new Set<string>();
12+
1113
export const puppeteerRender = async (route: HandledRoute): Promise<string> => {
1214
let version = '0.0.0';
1315
try {
@@ -70,6 +72,16 @@ export const puppeteerRender = async (route: HandledRoute): Promise<string> => {
7072
// tslint:disable-next-line: no-unused-expression
7173
page && typeof page.close === 'function' && (await page.close());
7274
logError(`Puppeteer error while rendering "${yellow(route.route)}"`, err);
75+
if (errorredPages.has(route.route)) {
76+
/** we tried this page before, something is really off. Exit stage left. */
77+
process.exit(15);
78+
} else {
79+
errorredPages.add(route.route);
80+
/** give it a couple of secs */
81+
await waitForIt(3 * 1000);
82+
/** retry! */
83+
return puppeteerRender(route);
84+
}
7385
}
7486

7587
return pageHtml;

scully/utils/defaultAction.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const {baseFilter} = yargs
2020
.describe('bf', 'provide a minimatch glob for the unhandled routes').argv;
2121

2222
console.log(baseFilter);
23-
export const generateAll = async (config?: Partial<ScullyConfig>) => {
23+
export const generateAll = async (config?: Partial<ScullyConfig>, localBaseFilter = baseFilter) => {
2424
if (config) {
2525
await updateScullyConfig(config);
2626
}
@@ -36,10 +36,13 @@ export const generateAll = async (config?: Partial<ScullyConfig>) => {
3636

3737
log('Pull in data to create additional routes.');
3838
const handledRoutes = await addOptionalRoutes(
39-
unhandledRoutes.filter((r: string) => r && r.startsWith(baseFilter))
39+
unhandledRoutes.filter((r: string) => r && r.startsWith(localBaseFilter))
4040
);
4141
/** save routerinfo, so its available during rendering */
42-
await storeRoutes(handledRoutes);
42+
if (localBaseFilter === '') {
43+
/** only store when the routes are complete */
44+
await storeRoutes(handledRoutes);
45+
}
4346

4447
/** launch the browser, its shared among renderers */
4548
const browser = await launchedBrowser();

0 commit comments

Comments
 (0)