serve-handler
Advanced tools
Comparing version 3.6.2 to 4.0.0
{ | ||
"name": "serve-handler", | ||
"version": "3.6.2", | ||
"version": "4.0.0", | ||
"description": "The routing foundation of `serve` and static deployments on Now", | ||
@@ -72,4 +72,5 @@ "main": "src/index.js", | ||
"path-is-inside": "1.0.2", | ||
"path-to-regexp": "2.2.1" | ||
"path-to-regexp": "2.2.1", | ||
"range-parser": "1.2.0" | ||
} | ||
} |
@@ -268,3 +268,3 @@ # serve-handler | ||
stat(path) {}, | ||
createReadStream(path) {}, | ||
createReadStream(path, config) {} | ||
readdir(path) {}, | ||
@@ -275,2 +275,4 @@ sendError(absolutePath, response, acceptsJSON, root, handlers, config, error) {} | ||
**NOTE:** It's important that – for native methods like `createReadStream` – all arguments are passed on to the native call. | ||
## Use Cases | ||
@@ -277,0 +279,0 @@ |
@@ -15,2 +15,3 @@ // Native | ||
const isPathInside = require('path-is-inside'); | ||
const parseRange = require('range-parser'); | ||
@@ -208,3 +209,4 @@ // Other | ||
type: 'inline' | ||
}) | ||
}), | ||
'Accept-Ranges': 'bytes' | ||
}; | ||
@@ -649,5 +651,31 @@ | ||
const stream = await handlers.createReadStream(absolutePath); | ||
const streamOpts = {}; | ||
// TODO ? if-range | ||
if (request.headers.range) { | ||
const range = parseRange(stats.size, request.headers.range); | ||
if (typeof range === 'object' && range.type === 'bytes') { | ||
const {start, end} = range[0]; | ||
streamOpts.start = start; | ||
streamOpts.end = end; | ||
response.statusCode = 206; | ||
} else { | ||
response.statusCode = 416; | ||
response.setHeader('Content-Range', `bytes */${stats.size}`); | ||
} | ||
} | ||
// TODO ? multiple ranges | ||
const stream = await handlers.createReadStream(absolutePath, streamOpts); | ||
const headers = await getHeaders(config.headers, current, absolutePath, stats); | ||
// eslint-disable-next-line no-undefined | ||
if (streamOpts.start !== undefined && streamOpts.end !== undefined) { | ||
headers['Content-Range'] = `bytes ${streamOpts.start}-${streamOpts.end}/${stats.size}`; | ||
headers['Content-Length'] = streamOpts.end - streamOpts.start + 1; | ||
} | ||
// We need to check for `headers.ETag` being truthy first, otherwise it will | ||
@@ -654,0 +682,0 @@ // match `undefined` being equal to `undefined`, which is true. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
40675
593
293
9
+ Addedrange-parser@1.2.0
+ Addedrange-parser@1.2.0(transitive)