From 910cd68d0f961b92c4d64c67b5513527e92f277b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 3 May 2025 01:30:53 +0300 Subject: [PATCH] chore(express-partial-content): solve type errors --- .../src/createPartialContentHandler.ts | 4 ++-- .../express-partial-content/src/parseRangeHeader.ts | 12 ++++++++++-- packages/express-partial-content/src/utils.ts | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/express-partial-content/src/createPartialContentHandler.ts b/packages/express-partial-content/src/createPartialContentHandler.ts index b7fee0d42..d3f3b1595 100644 --- a/packages/express-partial-content/src/createPartialContentHandler.ts +++ b/packages/express-partial-content/src/createPartialContentHandler.ts @@ -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 === null) { logger.debug("createPartialContentHandler: No range found, returning full content."); - setContentLengthHeader(totalSize, res); + setContentLengthHeader(String(totalSize), res); return getStream().pipe(res); } setContentRangeHeader(range, totalSize, res); let { start, end } = range; - setContentLengthHeader(start === end ? 0 : end - start + 1, res); + setContentLengthHeader(String(start === end ? 0 : end - start + 1), res); setCacheControlHeaderNoCache(res); // Return 206 Partial Content status logger.debug("createPartialContentHandler: Returning partial content for range: ", JSON.stringify(range)); diff --git a/packages/express-partial-content/src/parseRangeHeader.ts b/packages/express-partial-content/src/parseRangeHeader.ts index 284ecdfc2..189b932f4 100644 --- a/packages/express-partial-content/src/parseRangeHeader.ts +++ b/packages/express-partial-content/src/parseRangeHeader.ts @@ -4,8 +4,16 @@ import type { Range } from "./Range.js"; const rangeRegEx = /bytes=([0-9]*)-([0-9]*)/; -export function parseRangeHeader(range: string, totalSize: number, logger: Logger): Range | null { - logger.debug("Un-parsed range is: ", range); +export function parseRangeHeader(_range: string | string[] | null | undefined, totalSize: number, logger: Logger): Range | null { + 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. if (!range || range === null || range.length === 0 || totalSize === 0) { return null; diff --git a/packages/express-partial-content/src/utils.ts b/packages/express-partial-content/src/utils.ts index 0aa4fdf08..fc413362e 100644 --- a/packages/express-partial-content/src/utils.ts +++ b/packages/express-partial-content/src/utils.ts @@ -1,7 +1,7 @@ import type { Request, Response } from "express"; import type { Range } from "./Range.js"; 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 setContentTypeHeader = setHeader.bind(null, "Content-Type"); export const setContentLengthHeader = setHeader.bind(null, "Content-Length");