diff options
author | EuAndreh <eu@euandre.org> | 2024-03-08 08:40:59 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-03-08 08:40:59 -0300 |
commit | ee882ae2ba0275ef32ff7fadcd7414458e273e1c (patch) | |
tree | ec16930784e73dbfe10f4f0398b152d30795cf4e | |
parent | src/web.mjs: Move logging and interceptors to the beginning of the file (diff) | |
download | papod-ee882ae2ba0275ef32ff7fadcd7414458e273e1c.tar.gz papod-ee882ae2ba0275ef32ff7fadcd7414458e273e1c.tar.xz |
src/utils.mjs: Add dissoc()
-rw-r--r-- | src/utils.mjs | 6 | ||||
-rw-r--r-- | tests/js/utils.mjs | 18 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/utils.mjs b/src/utils.mjs index 1080219..9a600e7 100644 --- a/src/utils.mjs +++ b/src/utils.mjs @@ -25,6 +25,12 @@ export const assocIn = (obj, path, value) => ) }; +export const dissoc = (obj, key) => { + const ret = { ...obj }; + delete ret[key] + return ret; +}; + export const getIn = (obj, path) => path.length === 0 ? obj : getIn(obj?.[path[0]], path.slice(1)); diff --git a/tests/js/utils.mjs b/tests/js/utils.mjs index d8a8ded..33bdac2 100644 --- a/tests/js/utils.mjs +++ b/tests/js/utils.mjs @@ -5,6 +5,7 @@ import { keys, difference, assocIn, + dissoc, getIn, findFirst, partial, @@ -123,6 +124,22 @@ const test_assocIn = async t => { }); }; +const test_dissoc = async t => { + t.start("dissoc()"); + + await t.test("empty values", () => { + assert.deepEqual(dissoc({}, "k"), {}); + }); + + await t.test("noop when key does not exist", () => { + assert.deepEqual(dissoc({ a: 1 }, "b"), { a: 1 }); + }); + + await t.test("removes the key", () => { + assert.deepEqual(dissoc({ a: 1, b: 2}, "b"), { a: 1 }); + }); +}; + const test_getIn = async t => { t.start("getIn()"); @@ -347,6 +364,7 @@ await runner.runTests([ test_keys, test_difference, test_assocIn, + test_dissoc, test_getIn, test_findFirst, test_partial, |