5
5
const path = require ( 'path' ) ;
6
6
const fs = require ( 'fs' ) ;
7
7
const url = require ( 'url' ) ;
8
+ const { Readable } = require ( 'stream' ) ;
9
+ const buffer = require ( 'buffer' ) ;
8
10
const mime = require ( 'mime' ) ;
9
11
const urlJoin = require ( 'url-join' ) ;
10
12
const showDir = require ( './show-dir' ) ;
@@ -13,7 +15,6 @@ const status = require('./status-handlers');
13
15
const generateEtag = require ( './etag' ) ;
14
16
const optsParser = require ( './opts' ) ;
15
17
const htmlEncodingSniffer = require ( 'html-encoding-sniffer' ) ;
16
- const { Readable } = require ( 'stream' ) ;
17
18
18
19
let httpServerCore = null ;
19
20
@@ -236,12 +237,17 @@ module.exports = function createMiddleware(_dir, _options) {
236
237
let cacheControl = cache ;
237
238
let stream = null ;
238
239
if ( contentType && isTextFile ( contentType ) ) {
239
- const htmlBytes = fs . readFileSync ( file ) ;
240
- const sniffedEncoding = htmlEncodingSniffer ( htmlBytes , {
241
- defaultEncoding : 'UTF-8'
242
- } ) ;
243
- contentType += `; charset=${ sniffedEncoding } ` ;
244
- stream = Readable . from ( htmlBytes )
240
+ if ( stat . size < buffer . constants . MAX_LENGTH ) {
241
+ const bytes = fs . readFileSync ( file ) ;
242
+ const sniffedEncoding = htmlEncodingSniffer ( bytes , {
243
+ defaultEncoding : 'UTF-8'
244
+ } ) ;
245
+ contentType += `; charset=${ sniffedEncoding } ` ;
246
+ stream = Readable . from ( bytes )
247
+ } else {
248
+ // Assume text types are utf8
249
+ contentType += '; charset=UTF-8' ;
250
+ }
245
251
}
246
252
247
253
if ( file === gzippedFile ) { // is .gz picked up
0 commit comments