1 | /**
|
2 | * Sigma.js Utils
|
3 | * ===============
|
4 | *
|
5 | * Various helper functions & classes used throughout the library.
|
6 | */
|
7 |
|
8 | /**
|
9 | * Checks whether the given value is a plain object.
|
10 | *
|
11 | * @param {mixed} value - Target value.
|
12 | * @return {boolean}
|
13 | */
|
14 | export function isPlainObject(value: any): boolean {
|
15 | return typeof value === "object" && value !== null && value.constructor === Object;
|
16 | }
|
17 |
|
18 | /**
|
19 | * Very simple recursive Object.assign-like function.
|
20 | *
|
21 | * @param {object} target - First object.
|
22 | * @param {object} [...objects] - Objects to merge.
|
23 | * @return {object}
|
24 | */
|
25 | export function assign(target: object, ...objects): object {
|
26 | target = target || {};
|
27 |
|
28 | for (let i = 0, l = objects.length; i < l; i++) {
|
29 | const o = objects[i];
|
30 |
|
31 | if (!o) continue;
|
32 |
|
33 | for (const k in o) {
|
34 | if (isPlainObject(o[k])) {
|
35 | target[k] = assign(target[k], o[k]);
|
36 | } else {
|
37 | target[k] = o[k];
|
38 | }
|
39 | }
|
40 | }
|
41 |
|
42 | return target;
|
43 | }
|