Skip to content

Commit 279e9f8

Browse files
datastore: deep clone user objects
1 parent 413dd46 commit 279e9f8

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

packages/datastore/src/entity.js

Lines changed: 3 additions & 0 deletions
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

Lines changed: 17 additions & 0 deletions
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,22 @@ 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+
entity.encodeValue(value);
446+
447+
assert.deepEqual(value, originalValue);
448+
});
449+
433450
it('should encode an empty object', function() {
434451
var value = {};
435452

0 commit comments

Comments
 (0)