arnaucube
arnaucube/socketioMEANseedPublic Self-hosted repository
socketioMEANseed/server/node_modules/range-parser/index.js
server/node_modules/range-parser/index.jsRaw
 1/*!
 2 * range-parser
 3 * Copyright(c) 2012-2014 TJ Holowaychuk
 4 * MIT Licensed
 5 */
 6
 7'use strict';
 8
 9/**
10 * Module exports.
11 * @public
12 */
13
14module.exports = rangeParser;
15
16/**
17 * Parse "Range" header `str` relative to the given file `size`.
18 *
19 * @param {Number} size
20 * @param {String} str
21 * @return {Array}
22 * @public
23 */
24
25function rangeParser(size, str) {
26  var valid = true;
27  var i = str.indexOf('=');
28
29  if (-1 == i) return -2;
30
31  var arr = str.slice(i + 1).split(',').map(function(range){
32    var range = range.split('-')
33      , start = parseInt(range[0], 10)
34      , end = parseInt(range[1], 10);
35
36    // -nnn
37    if (isNaN(start)) {
38      start = size - end;
39      end = size - 1;
40    // nnn-
41    } else if (isNaN(end)) {
42      end = size - 1;
43    }
44
45    // limit last-byte-pos to current length
46    if (end > size - 1) end = size - 1;
47
48    // invalid
49    if (isNaN(start)
50      || isNaN(end)
51      || start > end
52      || start < 0) valid = false;
53
54    return {
55      start: start,
56      end: end
57    };
58  });
59
60  arr.type = str.slice(0, i);
61
62  return valid ? arr : -1;
63}