sequenceserver 1.1.0.beta → 1.1.0.beta2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sequenceserver might be problematic. Click here for more details.

Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -7
  3. data/README.md +9 -11
  4. data/Rakefile +2 -15
  5. data/lib/sequenceserver/database.rb +7 -1
  6. data/lib/sequenceserver/routes.rb +5 -2
  7. data/lib/sequenceserver/version.rb +1 -1
  8. data/lib/sequenceserver.rb +3 -1
  9. data/package.json +2 -3
  10. data/public/config.js +0 -7
  11. data/public/css/sequenceserver.css +8 -17
  12. data/public/css/sequenceserver.min.css +2 -2
  13. data/public/js/report.js +62 -45
  14. data/public/js/search.js +24 -17
  15. data/public/js/sequenceserver.js +23 -60
  16. data/public/sequenceserver-report.min.js +17 -0
  17. data/public/sequenceserver-search.min.js +11 -0
  18. data/sequenceserver.gemspec +5 -5
  19. data/spec/capybara_spec.rb +3 -3
  20. data/spec/sequence_spec.rb +2 -2
  21. data/views/layout.erb +1 -13
  22. data/views/report.erb +13 -0
  23. data/views/search.erb +45 -0
  24. metadata +26 -92
  25. data/public/css/sequenceserver.min.css.gz +0 -0
  26. data/public/sequenceserver.min.js +0 -26
  27. data/public/sequenceserver.min.js.gz +0 -0
  28. data/public/vendor/npm/object-assign@2.1.1/.jspm-hash +0 -1
  29. data/public/vendor/npm/object-assign@2.1.1/.jspm.json +0 -72
  30. data/public/vendor/npm/object-assign@2.1.1/index.js +0 -27
  31. data/public/vendor/npm/object-assign@2.1.1/package.json +0 -38
  32. data/public/vendor/npm/object-assign@2.1.1.js +0 -1
  33. data/public/vendor/npm/qs@2.4.1/.jshintignore +0 -1
  34. data/public/vendor/npm/qs@2.4.1/.jshintrc +0 -10
  35. data/public/vendor/npm/qs@2.4.1/.jspm-hash +0 -1
  36. data/public/vendor/npm/qs@2.4.1/.jspm.json +0 -61
  37. data/public/vendor/npm/qs@2.4.1/.npmignore +0 -18
  38. data/public/vendor/npm/qs@2.4.1/.travis.yml +0 -6
  39. data/public/vendor/npm/qs@2.4.1/CHANGELOG.md +0 -68
  40. data/public/vendor/npm/qs@2.4.1/CONTRIBUTING.md +0 -1
  41. data/public/vendor/npm/qs@2.4.1/LICENSE +0 -28
  42. data/public/vendor/npm/qs@2.4.1/Makefile +0 -8
  43. data/public/vendor/npm/qs@2.4.1/README.md +0 -233
  44. data/public/vendor/npm/qs@2.4.1/index.js +0 -2
  45. data/public/vendor/npm/qs@2.4.1/lib/index.js +0 -8
  46. data/public/vendor/npm/qs@2.4.1/lib/parse.js +0 -100
  47. data/public/vendor/npm/qs@2.4.1/lib/stringify.js +0 -67
  48. data/public/vendor/npm/qs@2.4.1/lib/utils.js +0 -132
  49. data/public/vendor/npm/qs@2.4.1/lib.js +0 -2
  50. data/public/vendor/npm/qs@2.4.1/package.json +0 -29
  51. data/public/vendor/npm/qs@2.4.1/test/parse.js +0 -359
  52. data/public/vendor/npm/qs@2.4.1.js +0 -1
  53. data/public/vendor/npm/react-router@0.13.3/.jspm-hash +0 -1
  54. data/public/vendor/npm/react-router@0.13.3/.jspm.json +0 -70
  55. data/public/vendor/npm/react-router@0.13.3/README.md +0 -140
  56. data/public/vendor/npm/react-router@0.13.3/lib/Cancellation.js +0 -9
  57. data/public/vendor/npm/react-router@0.13.3/lib/History.js +0 -31
  58. data/public/vendor/npm/react-router@0.13.3/lib/Match.js +0 -80
  59. data/public/vendor/npm/react-router@0.13.3/lib/Navigation.js +0 -22
  60. data/public/vendor/npm/react-router@0.13.3/lib/PathUtils.js +0 -154
  61. data/public/vendor/npm/react-router@0.13.3/lib/PropTypes.js +0 -15
  62. data/public/vendor/npm/react-router@0.13.3/lib/Redirect.js +0 -12
  63. data/public/vendor/npm/react-router@0.13.3/lib/Route.js +0 -133
  64. data/public/vendor/npm/react-router@0.13.3/lib/ScrollHistory.js +0 -53
  65. data/public/vendor/npm/react-router@0.13.3/lib/State.js +0 -25
  66. data/public/vendor/npm/react-router@0.13.3/lib/TestUtils.js +0 -102
  67. data/public/vendor/npm/react-router@0.13.3/lib/Transition.js +0 -58
  68. data/public/vendor/npm/react-router@0.13.3/lib/actions/LocationActions.js +0 -25
  69. data/public/vendor/npm/react-router@0.13.3/lib/behaviors/ImitateBrowserBehavior.js +0 -19
  70. data/public/vendor/npm/react-router@0.13.3/lib/behaviors/ScrollToTopBehavior.js +0 -15
  71. data/public/vendor/npm/react-router@0.13.3/lib/components/ActiveHandler.js +0 -111
  72. data/public/vendor/npm/react-router@0.13.3/lib/components/ContextWrapper.js +0 -39
  73. data/public/vendor/npm/react-router@0.13.3/lib/components/DefaultRoute.js +0 -41
  74. data/public/vendor/npm/react-router@0.13.3/lib/components/Link.js +0 -119
  75. data/public/vendor/npm/react-router@0.13.3/lib/components/NotFoundRoute.js +0 -41
  76. data/public/vendor/npm/react-router@0.13.3/lib/components/Redirect.js +0 -40
  77. data/public/vendor/npm/react-router@0.13.3/lib/components/Route.js +0 -67
  78. data/public/vendor/npm/react-router@0.13.3/lib/components/RouteHandler.js +0 -111
  79. data/public/vendor/npm/react-router@0.13.3/lib/createRouter.js +0 -329
  80. data/public/vendor/npm/react-router@0.13.3/lib/createRoutesFromReactChildren.js +0 -59
  81. data/public/vendor/npm/react-router@0.13.3/lib/getWindowScrollPosition.js +0 -19
  82. data/public/vendor/npm/react-router@0.13.3/lib/index.js +0 -26
  83. data/public/vendor/npm/react-router@0.13.3/lib/isReactChildren.js +0 -14
  84. data/public/vendor/npm/react-router@0.13.3/lib/locations/HashLocation.js +0 -79
  85. data/public/vendor/npm/react-router@0.13.3/lib/locations/HistoryLocation.js +0 -64
  86. data/public/vendor/npm/react-router@0.13.3/lib/locations/RefreshLocation.js +0 -18
  87. data/public/vendor/npm/react-router@0.13.3/lib/locations/StaticLocation.js +0 -50
  88. data/public/vendor/npm/react-router@0.13.3/lib/locations/TestLocation.js +0 -104
  89. data/public/vendor/npm/react-router@0.13.3/lib/runRouter.js +0 -16
  90. data/public/vendor/npm/react-router@0.13.3/lib/supportsHistory.js +0 -17
  91. data/public/vendor/npm/react-router@0.13.3/lib.js +0 -2
  92. data/public/vendor/npm/react-router@0.13.3/package.json +0 -36
  93. data/public/vendor/npm/react-router@0.13.3/umd/ReactRouter.js +0 -3388
  94. data/public/vendor/npm/react-router@0.13.3/umd/ReactRouter.min.js +0 -8
@@ -1,100 +0,0 @@
1
- /* */
2
- var Utils = require("./utils");
3
- var internals = {
4
- delimiter: '&',
5
- depth: 5,
6
- arrayLimit: 20,
7
- parameterLimit: 1000
8
- };
9
- internals.parseValues = function(str, options) {
10
- var obj = {};
11
- var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit);
12
- for (var i = 0,
13
- il = parts.length; i < il; ++i) {
14
- var part = parts[i];
15
- var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1;
16
- if (pos === -1) {
17
- obj[Utils.decode(part)] = '';
18
- } else {
19
- var key = Utils.decode(part.slice(0, pos));
20
- var val = Utils.decode(part.slice(pos + 1));
21
- if (Object.prototype.hasOwnProperty(key)) {
22
- continue;
23
- }
24
- if (!obj.hasOwnProperty(key)) {
25
- obj[key] = val;
26
- } else {
27
- obj[key] = [].concat(obj[key]).concat(val);
28
- }
29
- }
30
- }
31
- return obj;
32
- };
33
- internals.parseObject = function(chain, val, options) {
34
- if (!chain.length) {
35
- return val;
36
- }
37
- var root = chain.shift();
38
- var obj = {};
39
- if (root === '[]') {
40
- obj = [];
41
- obj = obj.concat(internals.parseObject(chain, val, options));
42
- } else {
43
- var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root;
44
- var index = parseInt(cleanRoot, 10);
45
- var indexString = '' + index;
46
- if (!isNaN(index) && root !== cleanRoot && indexString === cleanRoot && index >= 0 && index <= options.arrayLimit) {
47
- obj = [];
48
- obj[index] = internals.parseObject(chain, val, options);
49
- } else {
50
- obj[cleanRoot] = internals.parseObject(chain, val, options);
51
- }
52
- }
53
- return obj;
54
- };
55
- internals.parseKeys = function(key, val, options) {
56
- if (!key) {
57
- return;
58
- }
59
- var parent = /^([^\[\]]*)/;
60
- var child = /(\[[^\[\]]*\])/g;
61
- var segment = parent.exec(key);
62
- if (Object.prototype.hasOwnProperty(segment[1])) {
63
- return;
64
- }
65
- var keys = [];
66
- if (segment[1]) {
67
- keys.push(segment[1]);
68
- }
69
- var i = 0;
70
- while ((segment = child.exec(key)) !== null && i < options.depth) {
71
- ++i;
72
- if (!Object.prototype.hasOwnProperty(segment[1].replace(/\[|\]/g, ''))) {
73
- keys.push(segment[1]);
74
- }
75
- }
76
- if (segment) {
77
- keys.push('[' + key.slice(segment.index) + ']');
78
- }
79
- return internals.parseObject(keys, val, options);
80
- };
81
- module.exports = function(str, options) {
82
- if (str === '' || str === null || typeof str === 'undefined') {
83
- return {};
84
- }
85
- options = options || {};
86
- options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : internals.delimiter;
87
- options.depth = typeof options.depth === 'number' ? options.depth : internals.depth;
88
- options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : internals.arrayLimit;
89
- options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : internals.parameterLimit;
90
- var tempObj = typeof str === 'string' ? internals.parseValues(str, options) : str;
91
- var obj = {};
92
- var keys = Object.keys(tempObj);
93
- for (var i = 0,
94
- il = keys.length; i < il; ++i) {
95
- var key = keys[i];
96
- var newObj = internals.parseKeys(key, tempObj[key], options);
97
- obj = Utils.merge(obj, newObj);
98
- }
99
- return Utils.compact(obj);
100
- };
@@ -1,67 +0,0 @@
1
- /* */
2
- var Utils = require("./utils");
3
- var internals = {
4
- delimiter: '&',
5
- arrayPrefixGenerators: {
6
- brackets: function(prefix, key) {
7
- return prefix + '[]';
8
- },
9
- indices: function(prefix, key) {
10
- return prefix + '[' + key + ']';
11
- },
12
- repeat: function(prefix, key) {
13
- return prefix;
14
- }
15
- }
16
- };
17
- internals.stringify = function(obj, prefix, generateArrayPrefix) {
18
- if (Utils.isBuffer(obj)) {
19
- obj = obj.toString();
20
- } else if (obj instanceof Date) {
21
- obj = obj.toISOString();
22
- } else if (obj === null) {
23
- obj = '';
24
- }
25
- if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean') {
26
- return [encodeURIComponent(prefix) + '=' + encodeURIComponent(obj)];
27
- }
28
- var values = [];
29
- if (typeof obj === 'undefined') {
30
- return values;
31
- }
32
- var objKeys = Object.keys(obj);
33
- for (var i = 0,
34
- il = objKeys.length; i < il; ++i) {
35
- var key = objKeys[i];
36
- if (Array.isArray(obj)) {
37
- values = values.concat(internals.stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix));
38
- } else {
39
- values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', generateArrayPrefix));
40
- }
41
- }
42
- return values;
43
- };
44
- module.exports = function(obj, options) {
45
- options = options || {};
46
- var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter;
47
- var keys = [];
48
- if (typeof obj !== 'object' || obj === null) {
49
- return '';
50
- }
51
- var arrayFormat;
52
- if (options.arrayFormat in internals.arrayPrefixGenerators) {
53
- arrayFormat = options.arrayFormat;
54
- } else if ('indices' in options) {
55
- arrayFormat = options.indices ? 'indices' : 'repeat';
56
- } else {
57
- arrayFormat = 'indices';
58
- }
59
- var generateArrayPrefix = internals.arrayPrefixGenerators[arrayFormat];
60
- var objKeys = Object.keys(obj);
61
- for (var i = 0,
62
- il = objKeys.length; i < il; ++i) {
63
- var key = objKeys[i];
64
- keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix));
65
- }
66
- return keys.join(delimiter);
67
- };
@@ -1,132 +0,0 @@
1
- // Load modules
2
-
3
-
4
- // Declare internals
5
-
6
- var internals = {};
7
-
8
-
9
- exports.arrayToObject = function (source) {
10
-
11
- var obj = {};
12
- for (var i = 0, il = source.length; i < il; ++i) {
13
- if (typeof source[i] !== 'undefined') {
14
-
15
- obj[i] = source[i];
16
- }
17
- }
18
-
19
- return obj;
20
- };
21
-
22
-
23
- exports.merge = function (target, source) {
24
-
25
- if (!source) {
26
- return target;
27
- }
28
-
29
- if (typeof source !== 'object') {
30
- if (Array.isArray(target)) {
31
- target.push(source);
32
- }
33
- else {
34
- target[source] = true;
35
- }
36
-
37
- return target;
38
- }
39
-
40
- if (typeof target !== 'object') {
41
- target = [target].concat(source);
42
- return target;
43
- }
44
-
45
- if (Array.isArray(target) &&
46
- !Array.isArray(source)) {
47
-
48
- target = exports.arrayToObject(target);
49
- }
50
-
51
- var keys = Object.keys(source);
52
- for (var k = 0, kl = keys.length; k < kl; ++k) {
53
- var key = keys[k];
54
- var value = source[key];
55
-
56
- if (!target[key]) {
57
- target[key] = value;
58
- }
59
- else {
60
- target[key] = exports.merge(target[key], value);
61
- }
62
- }
63
-
64
- return target;
65
- };
66
-
67
-
68
- exports.decode = function (str) {
69
-
70
- try {
71
- return decodeURIComponent(str.replace(/\+/g, ' '));
72
- } catch (e) {
73
- return str;
74
- }
75
- };
76
-
77
-
78
- exports.compact = function (obj, refs) {
79
-
80
- if (typeof obj !== 'object' ||
81
- obj === null) {
82
-
83
- return obj;
84
- }
85
-
86
- refs = refs || [];
87
- var lookup = refs.indexOf(obj);
88
- if (lookup !== -1) {
89
- return refs[lookup];
90
- }
91
-
92
- refs.push(obj);
93
-
94
- if (Array.isArray(obj)) {
95
- var compacted = [];
96
-
97
- for (var i = 0, il = obj.length; i < il; ++i) {
98
- if (typeof obj[i] !== 'undefined') {
99
- compacted.push(obj[i]);
100
- }
101
- }
102
-
103
- return compacted;
104
- }
105
-
106
- var keys = Object.keys(obj);
107
- for (i = 0, il = keys.length; i < il; ++i) {
108
- var key = keys[i];
109
- obj[key] = exports.compact(obj[key], refs);
110
- }
111
-
112
- return obj;
113
- };
114
-
115
-
116
- exports.isRegExp = function (obj) {
117
- return Object.prototype.toString.call(obj) === '[object RegExp]';
118
- };
119
-
120
-
121
- exports.isBuffer = function (obj) {
122
-
123
- if (obj === null ||
124
- typeof obj === 'undefined') {
125
-
126
- return false;
127
- }
128
-
129
- return !!(obj.constructor &&
130
- obj.constructor.isBuffer &&
131
- obj.constructor.isBuffer(obj));
132
- };
@@ -1,2 +0,0 @@
1
- /* */
2
- module.exports = require('./lib/index');
@@ -1,29 +0,0 @@
1
- {
2
- "name": "qs",
3
- "version": "2.4.1",
4
- "description": "A querystring parser that supports nesting and arrays, with a depth limit",
5
- "homepage": "https://github.com/hapijs/qs",
6
- "main": "index.js",
7
- "dependencies": {},
8
- "devDependencies": {
9
- "code": "1.x.x",
10
- "lab": "5.x.x"
11
- },
12
- "scripts": {
13
- "test": "make test-cov"
14
- },
15
- "repository": {
16
- "type": "git",
17
- "url": "https://github.com/hapijs/qs.git"
18
- },
19
- "keywords": [
20
- "querystring",
21
- "qs"
22
- ],
23
- "licenses": [
24
- {
25
- "type": "BSD",
26
- "url": "http://github.com/hapijs/qs/raw/master/LICENSE"
27
- }
28
- ]
29
- }
@@ -1,359 +0,0 @@
1
- /* */
2
- (function(Buffer) {
3
- var Code = require("code");
4
- var Lab = require("lab");
5
- var Qs = require("../index");
6
- var internals = {};
7
- var lab = exports.lab = Lab.script();
8
- var expect = Code.expect;
9
- var describe = lab.experiment;
10
- var it = lab.test;
11
- describe('parse()', function() {
12
- it('parses a simple string', function(done) {
13
- expect(Qs.parse('0=foo')).to.deep.equal({'0': 'foo'});
14
- expect(Qs.parse('foo=c++')).to.deep.equal({foo: 'c '});
15
- expect(Qs.parse('a[>=]=23')).to.deep.equal({a: {'>=': '23'}});
16
- expect(Qs.parse('a[<=>]==23')).to.deep.equal({a: {'<=>': '=23'}});
17
- expect(Qs.parse('a[==]=23')).to.deep.equal({a: {'==': '23'}});
18
- expect(Qs.parse('foo')).to.deep.equal({foo: ''});
19
- expect(Qs.parse('foo=bar')).to.deep.equal({foo: 'bar'});
20
- expect(Qs.parse(' foo = bar = baz ')).to.deep.equal({' foo ': ' bar = baz '});
21
- expect(Qs.parse('foo=bar=baz')).to.deep.equal({foo: 'bar=baz'});
22
- expect(Qs.parse('foo=bar&bar=baz')).to.deep.equal({
23
- foo: 'bar',
24
- bar: 'baz'
25
- });
26
- expect(Qs.parse('foo=bar&baz')).to.deep.equal({
27
- foo: 'bar',
28
- baz: ''
29
- });
30
- expect(Qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World')).to.deep.equal({
31
- cht: 'p3',
32
- chd: 't:60,40',
33
- chs: '250x100',
34
- chl: 'Hello|World'
35
- });
36
- done();
37
- });
38
- it('parses a single nested string', function(done) {
39
- expect(Qs.parse('a[b]=c')).to.deep.equal({a: {b: 'c'}});
40
- done();
41
- });
42
- it('parses a double nested string', function(done) {
43
- expect(Qs.parse('a[b][c]=d')).to.deep.equal({a: {b: {c: 'd'}}});
44
- done();
45
- });
46
- it('defaults to a depth of 5', function(done) {
47
- expect(Qs.parse('a[b][c][d][e][f][g][h]=i')).to.deep.equal({a: {b: {c: {d: {e: {f: {'[g][h]': 'i'}}}}}}});
48
- done();
49
- });
50
- it('only parses one level when depth = 1', function(done) {
51
- expect(Qs.parse('a[b][c]=d', {depth: 1})).to.deep.equal({a: {b: {'[c]': 'd'}}});
52
- expect(Qs.parse('a[b][c][d]=e', {depth: 1})).to.deep.equal({a: {b: {'[c][d]': 'e'}}});
53
- done();
54
- });
55
- it('parses a simple array', function(done) {
56
- expect(Qs.parse('a=b&a=c')).to.deep.equal({a: ['b', 'c']});
57
- done();
58
- });
59
- it('parses an explicit array', function(done) {
60
- expect(Qs.parse('a[]=b')).to.deep.equal({a: ['b']});
61
- expect(Qs.parse('a[]=b&a[]=c')).to.deep.equal({a: ['b', 'c']});
62
- expect(Qs.parse('a[]=b&a[]=c&a[]=d')).to.deep.equal({a: ['b', 'c', 'd']});
63
- done();
64
- });
65
- it('parses a mix of simple and explicit arrays', function(done) {
66
- expect(Qs.parse('a=b&a[]=c')).to.deep.equal({a: ['b', 'c']});
67
- expect(Qs.parse('a[]=b&a=c')).to.deep.equal({a: ['b', 'c']});
68
- expect(Qs.parse('a[0]=b&a=c')).to.deep.equal({a: ['b', 'c']});
69
- expect(Qs.parse('a=b&a[0]=c')).to.deep.equal({a: ['b', 'c']});
70
- expect(Qs.parse('a[1]=b&a=c')).to.deep.equal({a: ['b', 'c']});
71
- expect(Qs.parse('a=b&a[1]=c')).to.deep.equal({a: ['b', 'c']});
72
- done();
73
- });
74
- it('parses a nested array', function(done) {
75
- expect(Qs.parse('a[b][]=c&a[b][]=d')).to.deep.equal({a: {b: ['c', 'd']}});
76
- expect(Qs.parse('a[>=]=25')).to.deep.equal({a: {'>=': '25'}});
77
- done();
78
- });
79
- it('allows to specify array indices', function(done) {
80
- expect(Qs.parse('a[1]=c&a[0]=b&a[2]=d')).to.deep.equal({a: ['b', 'c', 'd']});
81
- expect(Qs.parse('a[1]=c&a[0]=b')).to.deep.equal({a: ['b', 'c']});
82
- expect(Qs.parse('a[1]=c')).to.deep.equal({a: ['c']});
83
- done();
84
- });
85
- it('limits specific array indices to 20', function(done) {
86
- expect(Qs.parse('a[20]=a')).to.deep.equal({a: ['a']});
87
- expect(Qs.parse('a[21]=a')).to.deep.equal({a: {'21': 'a'}});
88
- done();
89
- });
90
- it('supports keys that begin with a number', function(done) {
91
- expect(Qs.parse('a[12b]=c')).to.deep.equal({a: {'12b': 'c'}});
92
- done();
93
- });
94
- it('supports encoded = signs', function(done) {
95
- expect(Qs.parse('he%3Dllo=th%3Dere')).to.deep.equal({'he=llo': 'th=ere'});
96
- done();
97
- });
98
- it('is ok with url encoded strings', function(done) {
99
- expect(Qs.parse('a[b%20c]=d')).to.deep.equal({a: {'b c': 'd'}});
100
- expect(Qs.parse('a[b]=c%20d')).to.deep.equal({a: {b: 'c d'}});
101
- done();
102
- });
103
- it('allows brackets in the value', function(done) {
104
- expect(Qs.parse('pets=["tobi"]')).to.deep.equal({pets: '["tobi"]'});
105
- expect(Qs.parse('operators=[">=", "<="]')).to.deep.equal({operators: '[">=", "<="]'});
106
- done();
107
- });
108
- it('allows empty values', function(done) {
109
- expect(Qs.parse('')).to.deep.equal({});
110
- expect(Qs.parse(null)).to.deep.equal({});
111
- expect(Qs.parse(undefined)).to.deep.equal({});
112
- done();
113
- });
114
- it('transforms arrays to objects', function(done) {
115
- expect(Qs.parse('foo[0]=bar&foo[bad]=baz')).to.deep.equal({foo: {
116
- '0': 'bar',
117
- bad: 'baz'
118
- }});
119
- expect(Qs.parse('foo[bad]=baz&foo[0]=bar')).to.deep.equal({foo: {
120
- bad: 'baz',
121
- '0': 'bar'
122
- }});
123
- expect(Qs.parse('foo[bad]=baz&foo[]=bar')).to.deep.equal({foo: {
124
- bad: 'baz',
125
- '0': 'bar'
126
- }});
127
- expect(Qs.parse('foo[]=bar&foo[bad]=baz')).to.deep.equal({foo: {
128
- '0': 'bar',
129
- bad: 'baz'
130
- }});
131
- expect(Qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo')).to.deep.equal({foo: {
132
- bad: 'baz',
133
- '0': 'bar',
134
- '1': 'foo'
135
- }});
136
- expect(Qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb')).to.deep.equal({foo: [{
137
- a: 'a',
138
- b: 'b'
139
- }, {
140
- a: 'aa',
141
- b: 'bb'
142
- }]});
143
- done();
144
- });
145
- it('can add keys to objects', function(done) {
146
- expect(Qs.parse('a[b]=c&a=d')).to.deep.equal({a: {
147
- b: 'c',
148
- d: true
149
- }});
150
- done();
151
- });
152
- it('correctly prunes undefined values when converting an array to an object', function(done) {
153
- expect(Qs.parse('a[2]=b&a[99999999]=c')).to.deep.equal({a: {
154
- '2': 'b',
155
- '99999999': 'c'
156
- }});
157
- done();
158
- });
159
- it('supports malformed uri characters', function(done) {
160
- expect(Qs.parse('{%:%}')).to.deep.equal({'{%:%}': ''});
161
- expect(Qs.parse('foo=%:%}')).to.deep.equal({foo: '%:%}'});
162
- done();
163
- });
164
- it('doesn\'t produce empty keys', function(done) {
165
- expect(Qs.parse('_r=1&')).to.deep.equal({'_r': '1'});
166
- done();
167
- });
168
- it('cannot override prototypes', function(done) {
169
- var obj = Qs.parse('hasOwnProperty=bad&toString=bad&bad[toString]=bad&constructor=bad');
170
- expect(typeof obj.toString).to.equal('function');
171
- expect(typeof obj.bad.toString).to.equal('function');
172
- expect(typeof obj.constructor).to.equal('function');
173
- done();
174
- });
175
- it('cannot access Object prototype', function(done) {
176
- Qs.parse('constructor[prototype][bad]=bad');
177
- Qs.parse('bad[constructor][prototype][bad]=bad');
178
- expect(typeof Object.prototype.bad).to.equal('undefined');
179
- done();
180
- });
181
- it('parses arrays of objects', function(done) {
182
- expect(Qs.parse('a[][b]=c')).to.deep.equal({a: [{b: 'c'}]});
183
- expect(Qs.parse('a[0][b]=c')).to.deep.equal({a: [{b: 'c'}]});
184
- done();
185
- });
186
- it('allows for empty strings in arrays', function(done) {
187
- expect(Qs.parse('a[]=b&a[]=&a[]=c')).to.deep.equal({a: ['b', '', 'c']});
188
- expect(Qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]=')).to.deep.equal({a: ['b', '', 'c', '']});
189
- expect(Qs.parse('a[]=&a[]=b&a[]=c')).to.deep.equal({a: ['', 'b', 'c']});
190
- done();
191
- });
192
- it('compacts sparse arrays', function(done) {
193
- expect(Qs.parse('a[10]=1&a[2]=2')).to.deep.equal({a: ['2', '1']});
194
- done();
195
- });
196
- it('parses semi-parsed strings', function(done) {
197
- expect(Qs.parse({'a[b]': 'c'})).to.deep.equal({a: {b: 'c'}});
198
- expect(Qs.parse({
199
- 'a[b]': 'c',
200
- 'a[d]': 'e'
201
- })).to.deep.equal({a: {
202
- b: 'c',
203
- d: 'e'
204
- }});
205
- done();
206
- });
207
- it('parses buffers correctly', function(done) {
208
- var b = new Buffer('test');
209
- expect(Qs.parse({a: b})).to.deep.equal({a: b});
210
- done();
211
- });
212
- it('continues parsing when no parent is found', function(done) {
213
- expect(Qs.parse('[]&a=b')).to.deep.equal({
214
- '0': '',
215
- a: 'b'
216
- });
217
- expect(Qs.parse('[foo]=bar')).to.deep.equal({foo: 'bar'});
218
- done();
219
- });
220
- it('does not error when parsing a very long array', function(done) {
221
- var str = 'a[]=a';
222
- while (Buffer.byteLength(str) < 128 * 1024) {
223
- str += '&' + str;
224
- }
225
- expect(function() {
226
- Qs.parse(str);
227
- }).to.not.throw();
228
- done();
229
- });
230
- it('should not throw when a native prototype has an enumerable property', {parallel: false}, function(done) {
231
- Object.prototype.crash = '';
232
- Array.prototype.crash = '';
233
- expect(Qs.parse.bind(null, 'a=b')).to.not.throw();
234
- expect(Qs.parse('a=b')).to.deep.equal({a: 'b'});
235
- expect(Qs.parse.bind(null, 'a[][b]=c')).to.not.throw();
236
- expect(Qs.parse('a[][b]=c')).to.deep.equal({a: [{b: 'c'}]});
237
- delete Object.prototype.crash;
238
- delete Array.prototype.crash;
239
- done();
240
- });
241
- it('parses a string with an alternative string delimiter', function(done) {
242
- expect(Qs.parse('a=b;c=d', {delimiter: ';'})).to.deep.equal({
243
- a: 'b',
244
- c: 'd'
245
- });
246
- done();
247
- });
248
- it('parses a string with an alternative RegExp delimiter', function(done) {
249
- expect(Qs.parse('a=b; c=d', {delimiter: /[;,] */})).to.deep.equal({
250
- a: 'b',
251
- c: 'd'
252
- });
253
- done();
254
- });
255
- it('does not use non-splittable objects as delimiters', function(done) {
256
- expect(Qs.parse('a=b&c=d', {delimiter: true})).to.deep.equal({
257
- a: 'b',
258
- c: 'd'
259
- });
260
- done();
261
- });
262
- it('allows overriding parameter limit', function(done) {
263
- expect(Qs.parse('a=b&c=d', {parameterLimit: 1})).to.deep.equal({a: 'b'});
264
- done();
265
- });
266
- it('allows setting the parameter limit to Infinity', function(done) {
267
- expect(Qs.parse('a=b&c=d', {parameterLimit: Infinity})).to.deep.equal({
268
- a: 'b',
269
- c: 'd'
270
- });
271
- done();
272
- });
273
- it('allows overriding array limit', function(done) {
274
- expect(Qs.parse('a[0]=b', {arrayLimit: -1})).to.deep.equal({a: {'0': 'b'}});
275
- expect(Qs.parse('a[-1]=b', {arrayLimit: -1})).to.deep.equal({a: {'-1': 'b'}});
276
- expect(Qs.parse('a[0]=b&a[1]=c', {arrayLimit: 0})).to.deep.equal({a: {
277
- '0': 'b',
278
- '1': 'c'
279
- }});
280
- done();
281
- });
282
- it('parses an object', function(done) {
283
- var input = {
284
- 'user[name]': {'pop[bob]': 3},
285
- 'user[email]': null
286
- };
287
- var expected = {'user': {
288
- 'name': {'pop[bob]': 3},
289
- 'email': null
290
- }};
291
- var result = Qs.parse(input);
292
- expect(result).to.deep.equal(expected);
293
- done();
294
- });
295
- it('parses an object and not child values', function(done) {
296
- var input = {
297
- 'user[name]': {'pop[bob]': {'test': 3}},
298
- 'user[email]': null
299
- };
300
- var expected = {'user': {
301
- 'name': {'pop[bob]': {'test': 3}},
302
- 'email': null
303
- }};
304
- var result = Qs.parse(input);
305
- expect(result).to.deep.equal(expected);
306
- done();
307
- });
308
- it('does not blow up when Buffer global is missing', function(done) {
309
- var tempBuffer = global.Buffer;
310
- delete global.Buffer;
311
- var result = Qs.parse('a=b&c=d');
312
- global.Buffer = tempBuffer;
313
- expect(result).to.deep.equal({
314
- a: 'b',
315
- c: 'd'
316
- });
317
- done();
318
- });
319
- it('does not crash when using invalid dot notation', function(done) {
320
- expect(Qs.parse('roomInfoList[0].childrenAges[0]=15&roomInfoList[0].numberOfAdults=2')).to.deep.equal({roomInfoList: [['15', '2']]});
321
- done();
322
- });
323
- it('does not crash when parsing circular references', function(done) {
324
- var a = {};
325
- a.b = a;
326
- var parsed;
327
- expect(function() {
328
- parsed = Qs.parse({
329
- 'foo[bar]': 'baz',
330
- 'foo[baz]': a
331
- });
332
- }).to.not.throw();
333
- expect(parsed).to.contain('foo');
334
- expect(parsed.foo).to.contain('bar', 'baz');
335
- expect(parsed.foo.bar).to.equal('baz');
336
- expect(parsed.foo.baz).to.deep.equal(a);
337
- done();
338
- });
339
- it('parses plain objects correctly', function(done) {
340
- var a = Object.create(null);
341
- a.b = 'c';
342
- expect(Qs.parse(a)).to.deep.equal({b: 'c'});
343
- var result = Qs.parse({a: a});
344
- expect(result).to.contain('a');
345
- expect(result.a).to.deep.equal(a);
346
- done();
347
- });
348
- it('parses dates correctly', function(done) {
349
- var now = new Date();
350
- expect(Qs.parse({a: now})).to.deep.equal({a: now});
351
- done();
352
- });
353
- it('parses regular expressions correctly', function(done) {
354
- var re = /^test$/;
355
- expect(Qs.parse({a: re})).to.deep.equal({a: re});
356
- done();
357
- });
358
- });
359
- })(require("buffer").Buffer);
@@ -1 +0,0 @@
1
- module.exports = require("npm:qs@2.4.1/index");
@@ -1 +0,0 @@
1
- 95455dd19d2c04c7b2957ff7fccda76031ac29b199914b932bd37a50b983c5e7c90ae93bjspm-npm@0.240.16