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}