@@ -8,20 +8,30 @@ const config = require('./config');
8
8
exports . getBrowser = ( ( ) => {
9
9
let browser ;
10
10
return async ( ) => {
11
- if ( typeof browser === 'undefined' ) {
11
+ if ( typeof browser === 'undefined' || ! await isBrowserAvailable ( browser ) ) {
12
12
await setupChrome ( ) ;
13
13
browser = await puppeteer . launch ( {
14
14
headless : true ,
15
15
executablePath : config . executablePath ,
16
16
args : config . launchOptionForLambda ,
17
17
dumpio : ! ! exports . DEBUG ,
18
18
} ) ;
19
- debugLog ( `launch done: ${ await browser . version ( ) } ` ) ;
19
+ debugLog ( async ( b ) => `launch done: ${ await browser . version ( ) } ` ) ;
20
20
}
21
21
return browser ;
22
22
} ;
23
23
} ) ( ) ;
24
24
25
+ const isBrowserAvailable = async ( browser ) => {
26
+ try {
27
+ await browser . version ( ) ;
28
+ } catch ( e ) {
29
+ debugLog ( e ) ; // not opened etc.
30
+ return false ;
31
+ }
32
+ return true ;
33
+ } ;
34
+
25
35
const setupChrome = async ( ) => {
26
36
if ( ! await existsExecutableChrome ( ) ) {
27
37
if ( await existsLocalChrome ( ) ) {
@@ -52,34 +62,40 @@ const existsExecutableChrome = () => {
52
62
} ;
53
63
54
64
const setupLocalChrome = ( ) => {
55
- return new Promise ( ( resolve , reject ) => {
56
- fs . createReadStream ( config . localChromePath )
57
- . on ( 'error' , ( err ) => reject ( err ) )
58
- . pipe ( tar . x ( {
59
- C : config . setupChromePath ,
60
- } ) )
61
- . on ( 'error' , ( err ) => reject ( err ) )
62
- . on ( 'end' , ( ) => resolve ( ) ) ;
63
- } ) ;
65
+ return new Promise ( ( resolve , reject ) => {
66
+ fs . createReadStream ( config . localChromePath )
67
+ . on ( 'error' , ( err ) => reject ( err ) )
68
+ . pipe ( tar . x ( {
69
+ C : config . setupChromePath ,
70
+ } ) )
71
+ . on ( 'error' , ( err ) => reject ( err ) )
72
+ . on ( 'end' , ( ) => resolve ( ) ) ;
73
+ } ) ;
64
74
} ;
65
75
66
76
const setupS3Chrome = ( ) => {
67
- return new Promise ( ( resolve , reject ) => {
68
- const params = {
69
- Bucket : config . remoteChromeS3Bucket ,
70
- Key : config . remoteChromeS3Key ,
71
- } ;
72
- s3 . getObject ( params )
73
- . createReadStream ( )
74
- . on ( 'error' , ( err ) => reject ( err ) )
75
- . pipe ( tar . x ( {
76
- C : config . setupChromePath ,
77
- } ) )
78
- . on ( 'error' , ( err ) => reject ( err ) )
79
- . on ( 'end' , ( ) => resolve ( ) ) ;
80
- } ) ;
77
+ return new Promise ( ( resolve , reject ) => {
78
+ const params = {
79
+ Bucket : config . remoteChromeS3Bucket ,
80
+ Key : config . remoteChromeS3Key ,
81
+ } ;
82
+ s3 . getObject ( params )
83
+ . createReadStream ( )
84
+ . on ( 'error' , ( err ) => reject ( err ) )
85
+ . pipe ( tar . x ( {
86
+ C : config . setupChromePath ,
87
+ } ) )
88
+ . on ( 'error' , ( err ) => reject ( err ) )
89
+ . on ( 'end' , ( ) => resolve ( ) ) ;
90
+ } ) ;
81
91
} ;
82
92
83
93
const debugLog = ( log ) => {
84
- if ( config . DEBUG ) console . log ( log ) ;
94
+ if ( config . DEBUG ) {
95
+ let message = log ;
96
+ if ( typeof log === 'function' ) message = log ( ) ;
97
+ Promise . resolve ( message ) . then (
98
+ ( message ) => console . log ( message )
99
+ ) ;
100
+ }
85
101
} ;
0 commit comments