Skip to content

Commit 5aed5d1

Browse files
committed
chore: import merge submodule
1 parent 36a2529 commit 5aed5d1

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ node_modules
55
*.log
66

77
/index.d.ts
8+
/merge
89
/dist

package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
"import": "./dist/index.mjs",
1515
"require": "./dist/index.js"
1616
},
17+
"./merge": {
18+
"import": "./merge/index.mjs",
19+
"require": "./merge/index.js"
20+
},
1721
"./package.json": "./package.json"
1822
},
1923
"author": {
@@ -30,9 +34,11 @@
3034
},
3135
"files": [
3236
"*.d.ts",
37+
"merge",
3338
"dist"
3439
],
3540
"modes": {
41+
"merge": "src/merge.js",
3642
"default": "src/index.js"
3743
},
3844
"keywords": [

src/merge.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export function merge(foo: any, bar: any): any; // TODO
2+
export function dset<T extends object, V>(obj: T, keys: string | ArrayLike<string | number>, value: V): void;

src/merge.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
export function merge(a, b) {
2+
if (typeof a === 'object' && typeof b === 'object')  {
3+
if (Array.isArray(a) && Array.isArray(b)) {
4+
for (let i=0; i < b.length; i++) {
5+
a[i] = merge(a[i], b[i]);
6+
}
7+
} else {
8+
for (let k in b) {
9+
a[k] = merge(a[k], b[k]);
10+
}
11+
}
12+
return a;
13+
}
14+
return b;
15+
}
16+
17+
export function dset(obj, keys, val) {
18+
keys.split && (keys=keys.split('.'));
19+
var i=0, l=keys.length, t=obj, x, k;
20+
for (; i < l;) {
21+
k = keys[i++];
22+
if (k === '__proto__' || k === 'constructor' || k === 'prototype') break;
23+
t = t[k] = (i === l) ? merge(t[k],val) : (typeof(x=t[k])===typeof keys) ? x : (keys[i]*0 !== 0 || !!~(''+keys[i]).indexOf('.')) ? {} : [];
24+
}
25+
}
26+

0 commit comments

Comments
 (0)