From 5aed5d1a8edf7cc14336ca6566baf8ece6bd3617 Mon Sep 17 00:00:00 2001 From: Luke Edwards Date: Tue, 23 Feb 2021 22:43:50 -0800 Subject: [PATCH] chore: import `merge` submodule --- .gitignore | 1 + package.json | 6 ++++++ src/merge.d.ts | 2 ++ src/merge.js | 26 ++++++++++++++++++++++++++ 4 files changed, 35 insertions(+) create mode 100644 src/merge.d.ts create mode 100644 src/merge.js diff --git a/.gitignore b/.gitignore index 205b98c..fdedc87 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ node_modules *.log /index.d.ts +/merge /dist diff --git a/package.json b/package.json index 73d369b..7b7c64b 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,10 @@ "import": "./dist/index.mjs", "require": "./dist/index.js" }, + "./merge": { + "import": "./merge/index.mjs", + "require": "./merge/index.js" + }, "./package.json": "./package.json" }, "author": { @@ -30,9 +34,11 @@ }, "files": [ "*.d.ts", + "merge", "dist" ], "modes": { + "merge": "src/merge.js", "default": "src/index.js" }, "keywords": [ diff --git a/src/merge.d.ts b/src/merge.d.ts new file mode 100644 index 0000000..57ca3ee --- /dev/null +++ b/src/merge.d.ts @@ -0,0 +1,2 @@ +export function merge(foo: any, bar: any): any; // TODO +export function dset(obj: T, keys: string | ArrayLike, value: V): void; diff --git a/src/merge.js b/src/merge.js new file mode 100644 index 0000000..9b9a791 --- /dev/null +++ b/src/merge.js @@ -0,0 +1,26 @@ +export function merge(a, b) { + if (typeof a === 'object' && typeof b === 'object')  { + if (Array.isArray(a) && Array.isArray(b)) { + for (let i=0; i < b.length; i++) { + a[i] = merge(a[i], b[i]); + } + } else { + for (let k in b) { + a[k] = merge(a[k], b[k]); + } + } + return a; + } + return b; +} + +export function dset(obj, keys, val) { + keys.split && (keys=keys.split('.')); + var i=0, l=keys.length, t=obj, x, k; + for (; i < l;) { + k = keys[i++]; + if (k === '__proto__' || k === 'constructor' || k === 'prototype') break; + t = t[k] = (i === l) ? merge(t[k],val) : (typeof(x=t[k])===typeof keys) ? x : (keys[i]*0 !== 0 || !!~(''+keys[i]).indexOf('.')) ? {} : []; + } +} +