UNPKG

@httpland/range-request-middleware

Version:
54 lines (53 loc) 2.21 kB
"use strict"; // 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;