diff --git a/README.md b/README.md index 5076773..aa0050e 100644 --- a/README.md +++ b/README.md @@ -223,10 +223,10 @@ protocols. `Range` is the following structure: -| Name | Type | Description | -| ------- | --------- | ---------------------------------------------------------------------------------------- | -| unit | `string` | Corresponding range unit. | -| respond | `Respond` | Takes the context of a range request and handler response and return a partial response. | +| Name | Type | Description | +| --------- | -------------- | ---------------------------------------------------------------------------------------- | +| rangeUnit | `string` | Corresponding range unit. | +| respond | `RangeRespond` | Takes the context of a range request and handler response and return a partial response. | The middleware supports the following range request protocols by default: diff --git a/deps.ts b/deps.ts index 01f2fff..7133e07 100644 --- a/deps.ts +++ b/deps.ts @@ -28,8 +28,8 @@ export { type OtherRange, parse, type Range, - type RangeSet, type RangeSpec, + type RangesSpecifier, type SuffixRange, } from "https://deno.land/x/range_parser@1.0.0/mod.ts"; export { concat } from "https://deno.land/std@0.180.0/bytes/concat.ts"; diff --git a/middleware.ts b/middleware.ts index 305f57b..208f0bb 100644 --- a/middleware.ts +++ b/middleware.ts @@ -49,7 +49,7 @@ export function rangeRequest( ranges?: Iterable, ): Middleware { const $ranges = ranges ?? DefaultRanges; - const units = Array.from($ranges).map((range) => range.unit); + const units = Array.from($ranges).map((range) => range.rangeUnit); const unitLike = isNotEmpty(units) ? units : RangeUnit.None; const contentRangeMiddleware = contentRange($ranges); diff --git a/mod.ts b/mod.ts index 2351aae..6b77c12 100644 --- a/mod.ts +++ b/mod.ts @@ -7,8 +7,8 @@ export { type IntRange, type Middleware, type OtherRange, - type RangeSet, type RangeSpec, + type RangesSpecifier, type SuffixRange, } from "./deps.ts"; export { @@ -16,4 +16,4 @@ export { BytesRange, type ComputeBoundary, } from "./ranges/bytes.ts"; -export type { Range, RangeContext, Respond } from "./types.ts"; +export type { Range, RangeContext, RangeRespond } from "./types.ts"; diff --git a/ranges/bytes.ts b/ranges/bytes.ts index 0f10602..e6aeaa4 100644 --- a/ranges/bytes.ts +++ b/ranges/bytes.ts @@ -40,7 +40,7 @@ export class BytesRange implements Range { this.#boundary = options?.computeBoundary ?? digestSha1; } - unit = RangeUnit.Bytes; + rangeUnit = RangeUnit.Bytes; respond(context: RangeContext): Promise { return respondPartial({ ...context, computeBoundary: this.#boundary }); diff --git a/ranges/bytes_test.ts b/ranges/bytes_test.ts index fbb21b3..b00898e 100644 --- a/ranges/bytes_test.ts +++ b/ranges/bytes_test.ts @@ -237,6 +237,6 @@ describe("BytesRange", () => { const bytesRange = new BytesRange(); it("should unit is bytes", () => { - assertEquals(bytesRange.unit, "bytes"); + assertEquals(bytesRange.rangeUnit, "bytes"); }); }); diff --git a/transform.ts b/transform.ts index 676ddac..cf4daa3 100644 --- a/transform.ts +++ b/transform.ts @@ -66,8 +66,8 @@ export async function withContentRange( } const parsedRange = rangeContainer.value; - const matchedRange = Array.from(context.ranges).find(({ unit }) => - unit === parsedRange.rangeUnit + const matchedRange = Array.from(context.ranges).find(({ rangeUnit }) => + rangeUnit === parsedRange.rangeUnit ); const body = await response.clone().arrayBuffer(); diff --git a/transform_test.ts b/transform_test.ts index eee31a9..389a0ba 100644 --- a/transform_test.ts +++ b/transform_test.ts @@ -19,7 +19,7 @@ describe("withContentRange", () => { const response = await withContentRange(initResponse, { rangeValue: "", - ranges: [{ unit: "bytes", respond }], + ranges: [{ rangeUnit: "bytes", respond }], }); assert(response === initResponse); @@ -33,7 +33,7 @@ describe("withContentRange", () => { const response = await withContentRange(initResponse, { rangeValue: "", - ranges: [{ unit: "bytes", respond }], + ranges: [{ rangeUnit: "bytes", respond }], }); assert(response === initResponse); @@ -47,7 +47,7 @@ describe("withContentRange", () => { const response = await withContentRange(initResponse, { rangeValue: "", - ranges: [{ unit: "bytes", respond }], + ranges: [{ rangeUnit: "bytes", respond }], }); assert(response === initResponse); @@ -63,7 +63,7 @@ describe("withContentRange", () => { const response = await withContentRange(initResponse, { rangeValue: "", - ranges: [{ unit: "bytes", respond }], + ranges: [{ rangeUnit: "bytes", respond }], }); assert(response === initResponse); @@ -78,7 +78,7 @@ describe("withContentRange", () => { const response = await withContentRange(initResponse, { rangeValue: "", - ranges: [{ unit: "bytes", respond }], + ranges: [{ rangeUnit: "bytes", respond }], }); assert(response === initResponse); @@ -90,7 +90,7 @@ describe("withContentRange", () => { const response = await withContentRange(initResponse, { rangeValue: "", - ranges: [{ unit: "bytes", respond }], + ranges: [{ rangeUnit: "bytes", respond }], }); assert(response === initResponse); @@ -105,7 +105,7 @@ describe("withContentRange", () => { { rangeValue: "bytes=0-", ranges: [{ - unit: "xxx", + rangeUnit: "xxx", respond, }], }, @@ -132,7 +132,7 @@ describe("withContentRange", () => { initResponse, { rangeValue: "bytes=0-", - ranges: [{ unit: "bytes", respond }], + ranges: [{ rangeUnit: "bytes", respond }], }, ); @@ -175,8 +175,8 @@ describe("withAcceptRanges", () => { ], ]; - await Promise.all(table.map(async ([initResponse, unit, expected]) => { - const response = withAcceptRanges(initResponse, unit); + await Promise.all(table.map(async ([initResponse, rangeUnit, expected]) => { + const response = withAcceptRanges(initResponse, rangeUnit); assert( await equalsResponse(response, expected, true), diff --git a/types.ts b/types.ts index 0b233bb..0108f4d 100644 --- a/types.ts +++ b/types.ts @@ -1,29 +1,24 @@ // Copyright 2023-latest the httpland authors. All rights reserved. MIT license. // This module is browser compatible. -import { type RangeSet } from "./deps.ts"; +import { type RangesSpecifier } from "./deps.ts"; /** Range API. */ export interface Range { /** Corresponding range unit. */ - readonly unit: string; + readonly rangeUnit: string; /** Takes the context of a range request and handler response and return a partial response. */ - readonly respond: Respond; + readonly respond: RangeRespond; } -export interface Respond { +/** Range responding API. */ +export interface RangeRespond { (context: RangeContext): Response | Promise; } /** Context of range request and response. */ -export interface RangeContext { - /** Corresponding range unit. */ - readonly rangeUnit: string; - - /** Representation of [``](https://www.rfc-editor.org/rfc/rfc9110#range.specifiers). */ - readonly rangeSet: RangeSet; - +export interface RangeContext extends RangesSpecifier { /** Full response content. */ readonly content: ArrayBuffer;