Skip to content

Commit 5ac9df5

Browse files
committed
Merge pull request #41 from hapijs/browserify_tweak
avoid browserifying Buffer, for #39
2 parents 5877761 + ce6c0b2 commit 5ac9df5

File tree

3 files changed

+38
-12
lines changed

3 files changed

+38
-12
lines changed

lib/stringify.js

+12-8
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,14 @@ internals.stringify = function (obj, prefix) {
3131

3232
var values = [];
3333

34-
for (var key in obj) {
35-
if (obj.hasOwnProperty(key)) {
36-
values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']'));
37-
}
34+
if (typeof obj === 'undefined') {
35+
return values;
36+
}
37+
38+
var objKeys = Object.keys(obj);
39+
for (var i = 0, il = objKeys.length; i < il; ++i) {
40+
var key = objKeys[i];
41+
values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']'));
3842
}
3943

4044
return values;
@@ -48,10 +52,10 @@ module.exports = function (obj, options) {
4852

4953
var keys = [];
5054

51-
for (var key in obj) {
52-
if (obj.hasOwnProperty(key)) {
53-
keys = keys.concat(internals.stringify(obj[key], key));
54-
}
55+
var objKeys = Object.keys(obj);
56+
for (var i = 0, il = objKeys.length; i < il; ++i) {
57+
var key = objKeys[i];
58+
keys = keys.concat(internals.stringify(obj[key], key));
5559
}
5660

5761
return keys.join(delimiter);

lib/utils.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,13 @@ exports.isRegExp = function (obj) {
130130

131131
exports.isBuffer = function (obj) {
132132

133-
if (typeof Buffer !== 'undefined') {
134-
return Buffer.isBuffer(obj);
135-
}
136-
else {
133+
if (obj === null ||
134+
typeof obj === 'undefined') {
135+
137136
return false;
138137
}
138+
139+
return !!(obj.constructor &&
140+
obj.constructor.isBuffer &&
141+
obj.constructor.isBuffer(obj));
139142
};

test/stringify.js

+19
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,25 @@ describe('stringify()', function () {
6868
done();
6969
});
7070

71+
it('stringifies an empty object', function (done) {
72+
73+
var obj = Object.create(null);
74+
obj.a = 'b';
75+
expect(Qs.stringify(obj)).to.equal('a=b');
76+
done();
77+
});
78+
79+
it('stringifies an object with an empty object as a child', function (done) {
80+
81+
var obj = {
82+
a: Object.create(null)
83+
};
84+
85+
obj.a.b = 'c';
86+
expect(Qs.stringify(obj)).to.equal('a%5Bb%5D=c');
87+
done();
88+
});
89+
7190
it('drops keys with a value of undefined', function (done) {
7291

7392
expect(Qs.stringify({ a: undefined })).to.equal('');

0 commit comments

Comments
 (0)