UNPKG

2.49 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.combineRanges = exports.parseRangeHeader = void 0;
4function parseRangeHeader(rangeHeader) {
5 var ranges = [];
6 if (!rangeHeader) {
7 return ranges;
8 }
9 var rHeader;
10 if (rangeHeader instanceof Array) {
11 rHeader = rangeHeader;
12 }
13 else {
14 rHeader = [rangeHeader];
15 }
16 rHeader.forEach(function (rh) {
17 var arr = parseRangeHeader_(rh);
18 ranges = ranges.concat(arr);
19 });
20 return ranges;
21}
22exports.parseRangeHeader = parseRangeHeader;
23function parseRangeHeader_(rangeHeader) {
24 var ranges = [];
25 var iEqual = rangeHeader.indexOf("=");
26 if (iEqual <= 0) {
27 return ranges;
28 }
29 var rangesStr = rangeHeader.substr(iEqual + 1);
30 var rangeStrArray = rangesStr.split(",");
31 rangeStrArray.forEach(function (rangeStr) {
32 var beginEndArray = rangeStr.split("-");
33 var beginStr = beginEndArray[0];
34 var endStr = beginEndArray[1];
35 var begin = -1;
36 if (beginStr && beginStr.length) {
37 begin = parseInt(beginStr, 10);
38 }
39 var end = -1;
40 if (endStr && endStr.length) {
41 end = parseInt(endStr, 10);
42 }
43 var rangeObj = { begin: begin, end: end };
44 ranges.push(rangeObj);
45 });
46 return ranges;
47}
48function combineRanges(ranges) {
49 var orderedRanges = ranges
50 .map(function (range, index) {
51 return {
52 begin: range.begin,
53 end: range.end,
54 index: index,
55 };
56 })
57 .sort(function (a, b) {
58 return a.begin - b.begin;
59 });
60 var j = 0;
61 var i = 1;
62 for (j = 0, i = 1; i < orderedRanges.length; i++) {
63 var orderedRange = orderedRanges[i];
64 var currentRange = orderedRanges[j];
65 if (orderedRange.begin > currentRange.end + 1) {
66 orderedRanges[++j] = orderedRange;
67 }
68 else if (orderedRange.end > currentRange.end) {
69 currentRange.end = orderedRange.end;
70 currentRange.index = Math.min(currentRange.index, orderedRange.index);
71 }
72 }
73 orderedRanges.length = j + 1;
74 return orderedRanges
75 .sort(function (a, b) {
76 return a.index - b.index;
77 })
78 .map(function (range) {
79 return {
80 begin: range.begin,
81 end: range.end,
82 };
83 });
84}
85exports.combineRanges = combineRanges;
86//# sourceMappingURL=RangeUtils.js.map
\No newline at end of file