@@ -8,17 +8,9 @@ var Log = require('./logger'),
88 utils = require ( './utils' ) ,
99 config = require ( '../lib/config' ) ,
1010 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' ) ;
2214
2315
2416exports . Server = function Server ( bsClient , workers ) {
@@ -37,7 +29,7 @@ exports.Server = function Server(bsClient, workers) {
3729 worker . markAckd ( ) ;
3830 }
3931
40- var getReporterPatch = function ( mimeType ) {
32+ var getReporterPatch = function ( ) {
4133 var scripts = [
4234 'json2.js' ,
4335 'browserstack.js' ,
@@ -53,7 +45,7 @@ exports.Server = function Server(bsClient, workers) {
5345 var filePath = path . relative ( process . cwd ( ) , filename ) ;
5446 var pathMatches = ( testFilePaths . indexOf ( filePath ) !== - 1 ) ;
5547
56- if ( pathMatches && mimeType === 'text/html' ) {
48+ if ( pathMatches ) {
5749 var framework = config [ 'test_framework' ] ;
5850 var tag_name = ( framework === 'mocha' ) ? 'head' : 'body' ;
5951 var patch = '$1' ;
@@ -98,13 +90,12 @@ exports.Server = function Server(bsClient, workers) {
9890 return ;
9991 }
10092
101- var mimeType = mimeTypes [ path . extname ( filename ) . split ( '.' ) [ 1 ] ] ;
10293 response . writeHead ( 200 , {
103- 'Content-Type' : mimeType + ' ; charset=utf-8',
94+ 'Content-Type' : 'text/html ; charset=utf-8'
10495 } ) ;
10596 var tag_name = ( config [ 'test_framework' ] === 'mocha' ) ? 'head' : 'body' ;
10697 var matcher = new RegExp ( '(.*)<\/' + tag_name + '>' ) ; ///(.*)<\/body>/;
107- var patch = getReporterPatch ( mimeType ) ;
98+ var patch = getReporterPatch ( ) ;
10899 data = data . replace ( matcher , patch ) ;
109100
110101 response . write ( data ) ;
@@ -113,12 +104,12 @@ exports.Server = function Server(bsClient, workers) {
113104
114105 if ( ! doNotUseProxy && config . test_server ) {
115106 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 ) ;
117108 var final_data = response_data ;
118109 var headers = remote_response . headers ;
119110 if ( mimeType === 'text/html' ) {
120111 var matcher = / ( .* ) < \/ h e a d > / ;
121- var patch = getReporterPatch ( mimeType ) ;
112+ var patch = getReporterPatch ( ) ;
122113 final_data = response_data . replace ( matcher , patch ) ;
123114 headers [ 'content-length' ] = final_data . length ;
124115 }
@@ -144,7 +135,19 @@ exports.Server = function Server(bsClient, workers) {
144135 filename = filename + ( filename . lastIndexOf ( '/' ) === filename . length - 1 ? '' : '/' ) + 'index.html' ;
145136 }
146137
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+ }
148151 } ) ;
149152 }
150153 }
0 commit comments