UNPKG

5.8 kBSource Map (JSON)View Raw
1{"version":3,"file":"RangeUtils.js","sourceRoot":"","sources":["../../../../../src/_utils/http/RangeUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// ==LICENSE-BEGIN==\n// Copyright 2017 European Digital Reading Lab. All rights reserved.\n// Licensed to the Readium Foundation under one or more contributor license agreements.\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file exposed on Github (readium) in the project repository.\n// ==LICENSE-END==\n\nexport interface IRange { begin: number; end: number; }\n\nexport function parseRangeHeader(rangeHeader: undefined | string | string[]): IRange[] {\n let ranges: IRange[] = [];\n\n if (!rangeHeader) {\n return ranges;\n }\n\n let rHeader: string[];\n if (rangeHeader instanceof Array) {\n rHeader = rangeHeader as string[];\n } else { // typeof rangeHeader === \"string\"\n rHeader = [rangeHeader] as string[];\n }\n\n rHeader.forEach((rh) => {\n const arr = parseRangeHeader_(rh);\n ranges = ranges.concat(arr);\n });\n\n return ranges;\n}\n\nfunction parseRangeHeader_(rangeHeader: string): IRange[] {\n const ranges: IRange[] = [];\n const iEqual = rangeHeader.indexOf(\"=\");\n if (iEqual <= 0) {\n return ranges;\n }\n // const rangeType = rangeHeader.substr(0, iEqual); // assumes \"bytes\"\n const rangesStr = rangeHeader.substr(iEqual + 1); // multi-ranges?\n const rangeStrArray = rangesStr.split(\",\");\n rangeStrArray.forEach((rangeStr) => {\n // can be \"-END\", \"BEGIN-\" or \"BEGIN-END\"\n const beginEndArray = rangeStr.split(\"-\");\n const beginStr = beginEndArray[0];\n const endStr = beginEndArray[1];\n let begin = -1;\n if (beginStr && beginStr.length) {\n begin = parseInt(beginStr, 10);\n }\n let end = -1;\n if (endStr && endStr.length) {\n end = parseInt(endStr, 10);\n }\n\n const rangeObj: IRange = { begin, end };\n ranges.push(rangeObj);\n });\n\n return ranges;\n}\n\nexport function combineRanges(ranges: IRange[]): IRange[] {\n\n const orderedRanges = ranges\n .map((range, index) => {\n return {\n begin: range.begin,\n end: range.end,\n index,\n };\n })\n .sort((a, b) => {\n return a.begin - b.begin;\n });\n\n let j = 0;\n let i = 1;\n for (j = 0, i = 1; i < orderedRanges.length; i++) {\n const orderedRange = orderedRanges[i];\n const currentRange = orderedRanges[j];\n\n if (orderedRange.begin > currentRange.end + 1) {\n orderedRanges[++j] = orderedRange;\n } else if (orderedRange.end > currentRange.end) {\n currentRange.end = orderedRange.end;\n currentRange.index = Math.min(currentRange.index, orderedRange.index);\n }\n }\n\n orderedRanges.length = j + 1;\n\n return orderedRanges\n .sort((a, b) => {\n return a.index - b.index;\n })\n .map((range) => {\n return {\n begin: range.begin,\n end: range.end,\n };\n });\n}\n"]}
\No newline at end of file