@@ -80,8 +80,26 @@ export function getStyles(nodes) {
80
80
return items
81
81
}
82
82
83
+ export class HttpError extends Error {
84
+ constructor ( { url, statusCode, statusText } ) {
85
+ this . url = url
86
+ this . statusCode = statusCode
87
+ this . statusText = statusText
88
+ this . message = `The origin server at "${ url } " errored with status ${ statusCode } (${ statusText } )`
89
+ }
90
+ }
91
+
83
92
export async function extractCss ( url ) {
84
- var { body, headers } = await got ( url )
93
+ let body = ''
94
+ let headers = { }
95
+
96
+ try {
97
+ var response = await got ( url )
98
+ body = response . body
99
+ headers = response . headers
100
+ } catch ( error ) {
101
+ throw new HttpError ( { url, statusCode, statusText } )
102
+ }
85
103
86
104
// Return early if our response was a CSS file already
87
105
if ( headers [ 'content-type' ] . includes ( 'text/css' ) ) {
@@ -117,7 +135,11 @@ export async function extractCss(url) {
117
135
// And c'mon, don't @import inside your @import.
118
136
var importUrls = getImportUrls ( item . css )
119
137
if ( importUrls . length > 0 ) {
120
- var cssRequests = importUrls . map ( importUrl => getCssFile ( resolveUrl ( importUrl , url ) ) )
138
+ var cssRequests = importUrls . map (
139
+ importUrl => getCssFile ( resolveUrl ( importUrl , url ) )
140
+ // silently fail on sub-resources
141
+ . catch ( _ => '' )
142
+ )
121
143
var importedFiles = await Promise . all ( cssRequests )
122
144
importedFiles . map ( ( css , index ) => {
123
145
result . push ( {
0 commit comments