@httpland/range-request-middleware
Version:
HTTP range request middleware
54 lines (53 loc) • 2.21 kB
JavaScript
// Copyright 2023-latest the httpland authors. All rights reserved. MIT license.
// This module is browser compatible.
Object.defineProperty(exports, "__esModule", { value: true });
exports.hasToken = exports.equalsCaseInsensitive = exports.RequestedRangeNotSatisfiableResponse = exports.shallowMergeHeaders = exports.RangeUnit = void 0;
const deps_js_1 = require("./deps.js");
var RangeUnit;
(function (RangeUnit) {
RangeUnit["Bytes"] = "bytes";
RangeUnit["None"] = "none";
})(RangeUnit = exports.RangeUnit || (exports.RangeUnit = {}));
/** Shallow merge two headers. */
function shallowMergeHeaders(left, right) {
const lHeader = new Headers(left);
right.forEach((value, key) => lHeader.set(key, value));
return lHeader;
}
exports.shallowMergeHeaders = shallowMergeHeaders;
class RequestedRangeNotSatisfiableResponse extends Response {
constructor(contentRange, init) {
const { statusText } = init ?? {};
const headers = (0, deps_js_1.filterKeys)(new Headers(init?.headers), (0, deps_js_1.not)(deps_js_1.isRepresentationHeader));
if (!headers.has(deps_js_1.RangeHeader.ContentRange)) {
const contentRangeStr = (0, deps_js_1.stringifyContentRange)(contentRange);
headers.set(deps_js_1.RangeHeader.ContentRange, contentRangeStr);
}
super(null, {
status: deps_js_1.Status.RequestedRangeNotSatisfiable,
statusText,
headers,
});
}
}
exports.RequestedRangeNotSatisfiableResponse = RequestedRangeNotSatisfiableResponse;
/** Whether the inputs are equal to case sensitivity. */
function equalsCaseInsensitive(left, right) {
if (left === right)
return true;
return !left.localeCompare(right, undefined, { sensitivity: "accent" });
}
exports.equalsCaseInsensitive = equalsCaseInsensitive;
/** Whether the input has {@link Token} or not.
* If the input is invalid [`Accept-Ranges`](https://www.rfc-editor.org/rfc/rfc9110.html#section-14.3-2) then `false`.
*/
function hasToken(input, token) {
try {
return (0, deps_js_1.parseAcceptRanges)(input).includes(token);
}
catch {
return false;
}
}
exports.hasToken = hasToken;
;