UNPKG

r2-utils-js

Version:

Readium 2 'utils' for NodeJS (TypeScript)

85 lines 2.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseRangeHeader = parseRangeHeader; exports.combineRanges = combineRanges; function parseRangeHeader(rangeHeader) { var ranges = []; if (!rangeHeader) { return ranges; } var rHeader; if (rangeHeader instanceof Array) { rHeader = rangeHeader; } else { rHeader = [rangeHeader]; } rHeader.forEach(function (rh) { var arr = parseRangeHeader_(rh); ranges = ranges.concat(arr); }); return ranges; } function parseRangeHeader_(rangeHeader) { var ranges = []; var iEqual = rangeHeader.indexOf("="); if (iEqual <= 0) { return ranges; } var rangesStr = rangeHeader.substr(iEqual + 1); var rangeStrArray = rangesStr.split(","); rangeStrArray.forEach(function (rangeStr) { var beginEndArray = rangeStr.split("-"); var beginStr = beginEndArray[0]; var endStr = beginEndArray[1]; var begin = -1; if (beginStr && beginStr.length) { begin = parseInt(beginStr, 10); } var end = -1; if (endStr && endStr.length) { end = parseInt(endStr, 10); } var rangeObj = { begin: begin, end: end }; ranges.push(rangeObj); }); return ranges; } function combineRanges(ranges) { var orderedRanges = ranges .map(function (range, index) { return { begin: range.begin, end: range.end, index: index, }; }) .sort(function (a, b) { return a.begin - b.begin; }); var j = 0; var i = 1; for (j = 0, i = 1; i < orderedRanges.length; i++) { var orderedRange = orderedRanges[i]; var currentRange = orderedRanges[j]; if (orderedRange.begin > currentRange.end + 1) { orderedRanges[++j] = orderedRange; } else if (orderedRange.end > currentRange.end) { currentRange.end = orderedRange.end; currentRange.index = Math.min(currentRange.index, orderedRange.index); } } orderedRanges.length = j + 1; return orderedRanges .sort(function (a, b) { return a.index - b.index; }) .map(function (range) { return { begin: range.begin, end: range.end, }; }); } //# sourceMappingURL=RangeUtils.js.map