UNPKG

object-hierarchy-access

Version:

Get/Set value from/to JS object hierarchy properties

90 lines (81 loc) 2.35 kB
const assert = require('assert').strict; const {set} = require('../../'); const obj1 = set({}, 'a', {name: 'b', value: {}}, {name: 'c', value: []}, 0, 100); assert.deepEqual(obj1, {a: {b: {c: [100]}}}); const obj2 = set({}, 'a', {name: 'b', type: Array}, '0', 200); assert.deepEqual(obj2, {a: {b: [200]}}); let name; const obj3 = set(undefined, ['a', { name: 'b', create: (current, _name) => { name = _name; current.b1 = 301; return [1, 2, 3]; } }, '3'], 300); assert.deepEqual(obj3, {a: {b: [1, 2, 3, 300], b1: 301}}); assert.equal(name, 'b'); const obj4 = set(null, 'a', {name: 'b'}, 'c', 400); assert.deepEqual(obj4, {a: {b: {c: 400}}}); const obj5 = {a: {}}; set(obj5, { name: 'a', created: (parent, name, current) => { assert.fail() }, skipped: (parent, name, current) => { assert.deepEqual(parent, obj5); assert.equal(name, 'a'); assert.deepEqual(current, {}); }, got: (parent, name, current) => { assert.equal(parent, obj5); assert.equal(name, 'a'); assert.equal(current, obj5.a); } }, { name: 'b', created: (parent, name, current) => { assert.deepEqual(parent, obj5.a); assert.equal(name, 'b'); assert.deepEqual(current, {}); }, skipped: (parent, name, current) => { assert.fail(); }, got: (parent, name, current) => { assert.deepEqual(parent, obj5.a); assert.equal(name, 'b'); assert.equal(current, obj5.a.b); } }, { name: 'c', created: (parent, name, current) => { assert.deepEqual(parent, obj5.a.b); assert.equal(name, 'c'); assert.deepEqual(current, {}); }, skipped: (parent, name, current) => { assert.fail(); }, got: (parent, name, current) => { assert.deepEqual(parent, obj5.a.b); assert.equal(name, 'c'); assert.equal(current, obj5.a.b.c); } }, 500 ); const obj6 = set({}, 'a', 'b', 'c1', 600); set(obj6, 'a', {name: 'b', override: "true"}, 'c2', 601); assert.deepEqual(obj6, {a: {b: {c2: 601}}}); const obj7 = set({}, [{name: 'a'}, {name: 'b'}, {name: 'c', type: Array}, 0], 700); assert.deepEqual(obj7, {a: {b: {c: [700]}}}); const obj8 = {a: {b1: {}, b2: {}}}; set(obj8, 'a', parent => parent.b2 ? 'b2' : 'b1', 'c', 800); assert.deepEqual(obj8, {a: {b1: {}, b2: {c: 800}}}); set(obj8, 'a', {getName: parent => parent.b1 ? 'b1' : 'b2'}, 'c', 801); assert.deepEqual(obj8, {a: {b1: {c: 801}, b2: {c: 800}}});