@@ -53,63 +53,74 @@ require('yargs')
53
53
describe : 'Set of command line arguments to be provided to the Chromium instance via Puppeteer, e.g. --puppeteer-args="--no-sandbox --disable-setuid-sandbox"'
54
54
}
55
55
} , async argv => {
56
- const port = argv . serve ? await getPort ( ) : null ;
57
- const server = argv . serve ? makeServer ( argv . serve , port ) : null ;
58
-
59
56
try {
60
- const url = argv . file ? `file://${ path . join ( process . cwd ( ) , argv . file ) } ` : argv . url ;
61
- const symbolsUrl = argv . serve ? urlJoin ( `http://localhost:${ String ( port ) } ` , argv . url || '/' ) : url ;
62
- await waitOn ( { resources : [ symbolsUrl ] } ) ;
63
-
64
- const browser = await puppeteer . launch ( { args : argv . puppeteerArgs ? argv . puppeteerArgs . split ( ' ' ) : [ ] } ) ;
57
+ const port = argv . serve ? await getPort ( ) : null ;
58
+ const server = argv . serve ? makeServer ( argv . serve , port ) : null ;
65
59
66
60
try {
67
- const page = await browser . newPage ( ) ;
61
+ const url = argv . file ? `file://${ path . join ( process . cwd ( ) , argv . file ) } ` : argv . url ;
62
+ const symbolsUrl = argv . serve ? urlJoin ( `http://localhost:${ String ( port ) } ` , argv . url || '/' ) : url ;
63
+
64
+ await waitOn ( {
65
+ timeout : 5000 ,
66
+ headers : { accept : 'text/html' } ,
67
+ // Force 'wait-on' to make a GET request rather than a HEAD request
68
+ resources : [ symbolsUrl . replace ( / ^ ( h t t p s ? ) / , '$1-get' ) ] ,
69
+ } ) ;
70
+
71
+ const browser = await puppeteer . launch ( { args : argv . puppeteerArgs ? argv . puppeteerArgs . split ( ' ' ) : [ ] } ) ;
72
+
73
+ try {
74
+ const page = await browser . newPage ( ) ;
68
75
69
- await page . goto ( symbolsUrl , { waitUntil : 'networkidle0' } ) ;
76
+ await page . goto ( symbolsUrl , { waitUntil : 'networkidle0' } ) ;
70
77
71
- const bundlePath = path . resolve ( __dirname , '../script/dist/generateAlmostSketch.bundle.js' ) ;
72
- const bundle = await readFileAsync ( bundlePath , 'utf8' ) ;
73
- await page . addScriptTag ( { content : bundle } ) ;
78
+ const bundlePath = path . resolve ( __dirname , '../script/dist/generateAlmostSketch.bundle.js' ) ;
79
+ const bundle = await readFileAsync ( bundlePath , 'utf8' ) ;
80
+ await page . addScriptTag ( { content : bundle } ) ;
74
81
75
- await page . evaluate ( 'generateAlmostSketch.setupSymbols({ name: "html-sketchapp symbols" })' ) ;
82
+ await page . evaluate ( 'generateAlmostSketch.setupSymbols({ name: "html-sketchapp symbols" })' ) ;
76
83
77
- await page . evaluate ( 'generateAlmostSketch.snapshotColorStyles()' ) ;
84
+ await page . evaluate ( 'generateAlmostSketch.snapshotColorStyles()' ) ;
78
85
79
- const viewports = argv . viewports || { Desktop : '1024x768' } ;
80
- const hasViewports = Object . keys ( viewports ) . length > 1 ;
81
- for ( const viewportName in viewports ) {
82
- if ( viewports . hasOwnProperty ( viewportName ) ) {
83
- const viewport = viewports [ viewportName ] ;
84
- const [ width , height ] = viewport . split ( 'x' ) . map ( x => parseInt ( x , 10 ) ) ;
85
- await page . setViewport ( { width, height } ) ;
86
- await page . evaluate ( `generateAlmostSketch.snapshotTextStyles({ suffix: "${ hasViewports ? `/${ viewportName } ` : '' } " })` ) ;
87
- await page . evaluate ( `generateAlmostSketch.snapshotSymbols({ suffix: "${ hasViewports ? `/${ viewportName } ` : '' } " })` ) ;
86
+ const viewports = argv . viewports || { Desktop : '1024x768' } ;
87
+ const hasViewports = Object . keys ( viewports ) . length > 1 ;
88
+ for ( const viewportName in viewports ) {
89
+ if ( viewports . hasOwnProperty ( viewportName ) ) {
90
+ const viewport = viewports [ viewportName ] ;
91
+ const [ width , height ] = viewport . split ( 'x' ) . map ( x => parseInt ( x , 10 ) ) ;
92
+ await page . setViewport ( { width, height } ) ;
93
+ await page . evaluate ( `generateAlmostSketch.snapshotTextStyles({ suffix: "${ hasViewports ? `/${ viewportName } ` : '' } " })` ) ;
94
+ await page . evaluate ( `generateAlmostSketch.snapshotSymbols({ suffix: "${ hasViewports ? `/${ viewportName } ` : '' } " })` ) ;
95
+ }
88
96
}
89
- }
90
97
91
- const asketchDocumentJSON = await page . evaluate ( 'generateAlmostSketch.getDocumentJSON()' ) ;
92
- const asketchPageJSON = await page . evaluate ( 'generateAlmostSketch.getPageJSON()' ) ;
98
+ const asketchDocumentJSON = await page . evaluate ( 'generateAlmostSketch.getDocumentJSON()' ) ;
99
+ const asketchPageJSON = await page . evaluate ( 'generateAlmostSketch.getPageJSON()' ) ;
93
100
94
- const outputPath = path . resolve ( process . cwd ( ) , argv . outDir ) ;
95
- await mkdirp ( outputPath ) ;
101
+ const outputPath = path . resolve ( process . cwd ( ) , argv . outDir ) ;
102
+ await mkdirp ( outputPath ) ;
96
103
97
- const outputPagePath = path . join ( outputPath , 'page.asketch.json' ) ;
98
- const outputDocumentPath = path . join ( outputPath , 'document.asketch.json' ) ;
104
+ const outputPagePath = path . join ( outputPath , 'page.asketch.json' ) ;
105
+ const outputDocumentPath = path . join ( outputPath , 'document.asketch.json' ) ;
99
106
100
- await Promise . all ( [
101
- writeFileAsync ( outputPagePath , asketchPageJSON ) ,
102
- writeFileAsync ( outputDocumentPath , asketchDocumentJSON )
103
- ] ) ;
107
+ await Promise . all ( [
108
+ writeFileAsync ( outputPagePath , asketchPageJSON ) ,
109
+ writeFileAsync ( outputDocumentPath , asketchDocumentJSON )
110
+ ] ) ;
111
+ } finally {
112
+ if ( browser && typeof browser . close === 'function' ) {
113
+ browser . close ( ) ;
114
+ }
115
+ }
104
116
} finally {
105
- if ( browser && typeof browser . close === 'function' ) {
106
- browser . close ( ) ;
117
+ if ( server && typeof server . stop === 'function' ) {
118
+ server . stop ( ) ;
107
119
}
108
120
}
109
- } finally {
110
- if ( server && typeof server . stop === 'function' ) {
111
- server . stop ( ) ;
112
- }
121
+ } catch ( err ) {
122
+ console . error ( err ) ;
123
+ process . exit ( 1 ) ;
113
124
}
114
125
} )
115
126
. command ( 'install' , 'Install the html-sketchapp Sketch plugin' , { } , ( ) => {
0 commit comments