comunicationLeap/node_modules/range-parser/index.js
node_modules/range-parser/index.jsRaw
1
2/**
3 * Parse "Range" header `str` relative to the given file `size`.
4 *
5 * @param {Number} size
6 * @param {String} str
7 * @return {Array}
8 * @api public
9 */
10
11module.exports = function(size, str){
12 var valid = true;
13 var i = str.indexOf('=');
14
15 if (-1 == i) return -2;
16
17 var arr = str.slice(i + 1).split(',').map(function(range){
18 var range = range.split('-')
19 , start = parseInt(range[0], 10)
20 , end = parseInt(range[1], 10);
21
22 // -nnn
23 if (isNaN(start)) {
24 start = size - end;
25 end = size - 1;
26 // nnn-
27 } else if (isNaN(end)) {
28 end = size - 1;
29 }
30
31 // limit last-byte-pos to current length
32 if (end > size - 1) end = size - 1;
33
34 // invalid
35 if (isNaN(start)
36 || isNaN(end)
37 || start > end
38 || start < 0) valid = false;
39
40 return {
41 start: start,
42 end: end
43 };
44 });
45
46 arr.type = str.slice(0, i);
47
48 return valid ? arr : -1;
49};