MCPcopy Create free account
hub / github.com/denoland/std / parseRangeHeader

Function parseRangeHeader

http/file_server.ts:121–146  ·  view source on GitHub ↗

* parse range header. * * ```ts ignore * parseRangeHeader("bytes=0-100", 500); // => { start: 0, end: 100 } * parseRangeHeader("bytes=0-", 500); // => { start: 0, end: 499 } * parseRangeHeader("bytes=-100", 500); // => { start: 400, end: 499 } * parseRangeHeader("bytes=invalid", 500)

(rangeValue: string, fileSize: number)

Source from the content-addressed store, hash-verified

119 * Note: Currently, no support for multiple Ranges (e.g. `bytes=0-10, 20-30`)
120 */
121function parseRangeHeader(rangeValue: string, fileSize: number) {
122 const rangeRegex = /bytes=(?<start>\d+)?-(?<end>\d+)?$/u;
123 const parsed = rangeValue.match(rangeRegex);
124
125 if (!parsed || !parsed.groups) {
126 // failed to parse range header
127 return null;
128 }
129
130 const { start, end } = parsed.groups;
131 if (start !== undefined) {
132 if (end !== undefined) {
133 return { start: +start, end: +end };
134 } else {
135 return { start: +start, end: fileSize - 1 };
136 }
137 } else {
138 if (end !== undefined) {
139 // example: `bytes=-100` means the last 100 bytes.
140 return { start: fileSize - +end, end: fileSize - 1 };
141 } else {
142 // failed to parse range header
143 return null;
144 }
145 }
146}
147
148/** Options for {@linkcode serveFile}. */
149export interface ServeFileOptions {

Callers 1

serveFileFunction · 0.85

Calls 1

matchMethod · 0.80

Tested by

no test coverage detected