Skip to content

Commit 2948c14

Browse files
stephenpluspluscallmehiphop
authored andcommitted
datastore: deep clone user objects (#1552)
* datastore: deep clone user objects * add notStrictEqual test
1 parent 413dd46 commit 2948c14

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

packages/datastore/src/entity.js

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
var arrify = require('arrify');
2525
var createErrorClass = require('create-error-class');
26+
var extend = require('extend');
2627
var is = require('is');
2728

2829
var entity = module.exports;
@@ -285,6 +286,8 @@ function encodeValue(value) {
285286

286287
if (is.object(value)) {
287288
if (!is.empty(value)) {
289+
value = extend(true, {}, value);
290+
288291
for (var prop in value) {
289292
if (value.hasOwnProperty(prop)) {
290293
value[prop] = entity.encodeValue(value[prop]);

packages/datastore/test/entity.js

+18
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ var deepStrictEqual = require('deep-strict-equal');
2121
assert.deepStrictEqual = assert.deepStrictEqual || function() {
2222
return assert(deepStrictEqual.apply(this, arguments));
2323
};
24+
var extend = require('extend');
2425

2526
var Datastore = require('../');
2627

@@ -430,6 +431,23 @@ describe('entity', function() {
430431
assert.deepEqual(entity.encodeValue(value), expectedValueProto);
431432
});
432433

434+
it('should clone an object', function() {
435+
var value = {
436+
a: {
437+
b: {
438+
obj: true
439+
}
440+
}
441+
};
442+
443+
var originalValue = extend(true, {}, value);
444+
445+
var encodedValue = entity.encodeValue(value);
446+
447+
assert.deepEqual(value, originalValue);
448+
assert.notStrictEqual(value, encodedValue);
449+
});
450+
433451
it('should encode an empty object', function() {
434452
var value = {};
435453

0 commit comments

Comments
 (0)