arnaucube
arnaucube/raspberryGPIOhtmlserverPublic Self-hosted repository
raspberryGPIOhtmlserver/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};