chore(express-partial-content): solve type errors

This commit is contained in:
Elian Doran 2025-05-03 01:30:53 +03:00
parent 7976f43a35
commit 910cd68d0f
No known key found for this signature in database
3 changed files with 13 additions and 5 deletions

View File

@ -44,12 +44,12 @@ export function createPartialContentHandler(contentProvider: ContentProvider, lo
// If range is not specified, or the file is empty, return the full stream // If range is not specified, or the file is empty, return the full stream
if (range === null) { if (range === null) {
logger.debug("createPartialContentHandler: No range found, returning full content."); logger.debug("createPartialContentHandler: No range found, returning full content.");
setContentLengthHeader(totalSize, res); setContentLengthHeader(String(totalSize), res);
return getStream().pipe(res); return getStream().pipe(res);
} }
setContentRangeHeader(range, totalSize, res); setContentRangeHeader(range, totalSize, res);
let { start, end } = range; let { start, end } = range;
setContentLengthHeader(start === end ? 0 : end - start + 1, res); setContentLengthHeader(String(start === end ? 0 : end - start + 1), res);
setCacheControlHeaderNoCache(res); setCacheControlHeaderNoCache(res);
// Return 206 Partial Content status // Return 206 Partial Content status
logger.debug("createPartialContentHandler: Returning partial content for range: ", JSON.stringify(range)); logger.debug("createPartialContentHandler: Returning partial content for range: ", JSON.stringify(range));

View File

@ -4,8 +4,16 @@ import type { Range } from "./Range.js";
const rangeRegEx = /bytes=([0-9]*)-([0-9]*)/; const rangeRegEx = /bytes=([0-9]*)-([0-9]*)/;
export function parseRangeHeader(range: string, totalSize: number, logger: Logger): Range | null { export function parseRangeHeader(_range: string | string[] | null | undefined, totalSize: number, logger: Logger): Range | null {
logger.debug("Un-parsed range is: ", range); logger.debug("Un-parsed range is: ", _range);
if (!_range?.length) {
return null;
}
// TODO: Maybe we need to support multiple ranges.
const range = Array.isArray(_range) ? _range[0] : _range;
// 1. If range is not specified or the file is empty, return null. // 1. If range is not specified or the file is empty, return null.
if (!range || range === null || range.length === 0 || totalSize === 0) { if (!range || range === null || range.length === 0 || totalSize === 0) {
return null; return null;

View File

@ -1,7 +1,7 @@
import type { Request, Response } from "express"; import type { Request, Response } from "express";
import type { Range } from "./Range.js"; import type { Range } from "./Range.js";
export const getHeader = (name: string, req: Request) => req.headers[name]; export const getHeader = (name: string, req: Request) => req.headers[name];
export const getRangeHeader = getHeader.bind(null, "range"); export const getRangeHeader: (req: Request) => string | string[] | undefined = getHeader.bind(null, "range");
export const setHeader = (name: string, value: string, res: Response) => res.setHeader(name, value); export const setHeader = (name: string, value: string, res: Response) => res.setHeader(name, value);
export const setContentTypeHeader = setHeader.bind(null, "Content-Type"); export const setContentTypeHeader = setHeader.bind(null, "Content-Type");
export const setContentLengthHeader = setHeader.bind(null, "Content-Length"); export const setContentLengthHeader = setHeader.bind(null, "Content-Length");