@@ -8,17 +8,9 @@ var Log = require('./logger'),
8
8
utils = require ( './utils' ) ,
9
9
config = require ( '../lib/config' ) ,
10
10
proxyServer = require ( './proxy' ) . proxyServer ,
11
- chalk = require ( 'chalk' ) ;
12
-
13
- var mimeTypes = {
14
- 'html' : 'text/html' ,
15
- 'json' : 'text/json' ,
16
- 'jpeg' : 'image/jpeg' ,
17
- 'jpg' : 'image/jpeg' ,
18
- 'png' : 'image/png' ,
19
- 'js' : 'text/javascript' ,
20
- 'css' : 'text/css'
21
- } ;
11
+ chalk = require ( 'chalk' ) ,
12
+ mime = require ( 'mime' ) ,
13
+ send = require ( 'send' ) ;
22
14
23
15
24
16
exports . Server = function Server ( bsClient , workers ) {
@@ -37,7 +29,7 @@ exports.Server = function Server(bsClient, workers) {
37
29
worker . markAckd ( ) ;
38
30
}
39
31
40
- var getReporterPatch = function ( mimeType ) {
32
+ var getReporterPatch = function ( ) {
41
33
var scripts = [
42
34
'json2.js' ,
43
35
'browserstack.js' ,
@@ -53,7 +45,7 @@ exports.Server = function Server(bsClient, workers) {
53
45
var filePath = path . relative ( process . cwd ( ) , filename ) ;
54
46
var pathMatches = ( testFilePaths . indexOf ( filePath ) !== - 1 ) ;
55
47
56
- if ( pathMatches && mimeType === 'text/html' ) {
48
+ if ( pathMatches ) {
57
49
var framework = config [ 'test_framework' ] ;
58
50
var tag_name = ( framework === 'mocha' ) ? 'head' : 'body' ;
59
51
var patch = '$1' ;
@@ -98,13 +90,12 @@ exports.Server = function Server(bsClient, workers) {
98
90
return ;
99
91
}
100
92
101
- var mimeType = mimeTypes [ path . extname ( filename ) . split ( '.' ) [ 1 ] ] ;
102
93
response . writeHead ( 200 , {
103
- 'Content-Type' : mimeType + ' ; charset=utf-8',
94
+ 'Content-Type' : 'text/html ; charset=utf-8'
104
95
} ) ;
105
96
var tag_name = ( config [ 'test_framework' ] === 'mocha' ) ? 'head' : 'body' ;
106
97
var matcher = new RegExp ( '(.*)<\/' + tag_name + '>' ) ; ///(.*)<\/body>/;
107
- var patch = getReporterPatch ( mimeType ) ;
98
+ var patch = getReporterPatch ( ) ;
108
99
data = data . replace ( matcher , patch ) ;
109
100
110
101
response . write ( data ) ;
@@ -113,12 +104,12 @@ exports.Server = function Server(bsClient, workers) {
113
104
114
105
if ( ! doNotUseProxy && config . test_server ) {
115
106
proxyServer . onRequest ( request , response , config . test_server , function ( remote_response , response_data ) {
116
- var mimeType = mimeTypes [ path . extname ( filename ) . split ( '.' ) [ 1 ] ] ;
107
+ var mimeType = mime . lookup ( filename ) ;
117
108
var final_data = response_data ;
118
109
var headers = remote_response . headers ;
119
110
if ( mimeType === 'text/html' ) {
120
111
var matcher = / ( .* ) < \/ h e a d > / ;
121
- var patch = getReporterPatch ( mimeType ) ;
112
+ var patch = getReporterPatch ( ) ;
122
113
final_data = response_data . replace ( matcher , patch ) ;
123
114
headers [ 'content-length' ] = final_data . length ;
124
115
}
@@ -144,7 +135,19 @@ exports.Server = function Server(bsClient, workers) {
144
135
filename = filename + ( filename . lastIndexOf ( '/' ) === filename . length - 1 ? '' : '/' ) + 'index.html' ;
145
136
}
146
137
147
- fs . readFile ( filename , { encoding : 'utf8' } , writeResponse ) ;
138
+ var mimeType = mime . lookup ( filename ) ;
139
+ if ( mimeType === 'text/html' ) {
140
+ fs . readFile ( filename , { encoding : 'utf8' } , function ( err , data ) {
141
+ writeResponse ( err , data ) ;
142
+ } ) ;
143
+ } else {
144
+ send ( request , filename )
145
+ . on ( 'error' , function onSendError ( err ) {
146
+ response . statusCode = err . status || 500 ;
147
+ response . end ( err . message || 'Internal Server Error' ) ;
148
+ } )
149
+ . pipe ( response ) ;
150
+ }
148
151
} ) ;
149
152
}
150
153
}
0 commit comments