UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

1 lines • 6.23 kB
{"version":3,"file":"assetRange.js","names":[],"sources":["esm/server/assetRange.js"],"sourcesContent":["async function withRange(request, response) {\n const range = request.headers.get(\"range\");\n if (!range || request.method !== \"GET\" || response.status !== 200 || !response.body || response.headers.has(\"content-range\") || response.headers.has(\"content-encoding\") || !ifRangeMatches(request.headers.get(\"if-range\"), response.headers)) {\n return response;\n }\n const match = /^bytes=(\\d*)-(\\d*)$/.exec(range.trim());\n if (!match || !match[1] && !match[2]) return response;\n const length = response.headers.get(\"content-length\");\n const known = length && /^\\d+$/.test(length) ? Number(length) : void 0;\n const headers = new Headers(response.headers);\n headers.set(\"accept-ranges\", \"bytes\");\n headers.delete(\"content-length\");\n const { size, kept, keptStart } = await readRange(response.body, match, known);\n const span = resolve(match, size);\n if (!span) {\n headers.set(\"content-range\", `bytes */${size}`);\n return new Response(null, { status: 416, headers });\n }\n headers.set(\"content-range\", `bytes ${span.start}-${span.end}/${size}`);\n headers.set(\"content-length\", String(span.end - span.start + 1));\n return new Response(kept.subarray(span.start - keptStart, span.end - keptStart + 1), {\n status: 206,\n headers\n });\n}\nfunction ifRangeMatches(ifRange, headers) {\n if (!ifRange) return true;\n const value = ifRange.trim();\n if (value.startsWith('\"')) {\n const etag = headers.get(\"etag\");\n return !!etag && !etag.startsWith(\"W/\") && etag === value;\n }\n if (value.startsWith(\"W/\")) return false;\n return headers.get(\"last-modified\") === value;\n}\nfunction resolve(match, size) {\n let start;\n let end;\n if (!match[1]) {\n start = Math.max(0, size - Number(match[2]));\n end = size - 1;\n } else {\n start = Number(match[1]);\n end = match[2] ? Math.min(Number(match[2]), size - 1) : size - 1;\n }\n if (start >= size || start > end) return;\n return { start, end };\n}\nasync function readRange(body, match, known) {\n const span = known === void 0 ? void 0 : resolve(match, known) ?? { start: known, end: -1 };\n const suffix = !span && !match[1] ? Number(match[2]) : 0;\n const from = span ? span.start : match[1] ? Number(match[1]) : 0;\n const to = span ? span.end : match[2] && match[1] ? Number(match[2]) : Number.POSITIVE_INFINITY;\n const chunks = [];\n let keptBytes = 0;\n let size = 0;\n const reader = body.getReader();\n while (known === void 0 || size <= to) {\n const { done, value } = await reader.read();\n if (done) break;\n const chunkStart = size;\n size += value.byteLength;\n if (suffix) {\n chunks.push(value);\n keptBytes += value.byteLength;\n while (chunks.length > 1 && keptBytes - chunks[0].byteLength >= suffix) {\n keptBytes -= chunks.shift().byteLength;\n }\n continue;\n }\n const lo = Math.max(from, chunkStart);\n const hi = Math.min(to + 1, size);\n if (hi > lo) {\n chunks.push(value.subarray(lo - chunkStart, hi - chunkStart));\n keptBytes += hi - lo;\n }\n }\n if (known !== void 0) {\n await reader.cancel();\n size = known;\n }\n const kept = new Uint8Array(keptBytes);\n let at = 0;\n for (const chunk of chunks) {\n kept.set(chunk, at);\n at += chunk.byteLength;\n }\n return { size, kept, keptStart: suffix ? size - keptBytes : from };\n}\nexport {\n withRange\n};\n//# sourceMappingURL=assetRange.js.map\n"],"mappings":"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"}