1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.combineRanges = exports.parseRangeHeader = void 0;
|
4 | function 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 | }
|
22 | exports.parseRangeHeader = parseRangeHeader;
|
23 | function 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 | }
|
48 | function 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 | }
|
85 | exports.combineRanges = combineRanges;
|
86 |
|
\ | No newline at end of file |