-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmain.ts
39 lines (34 loc) · 862 Bytes
/
main.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
type Nothing = void;
type Just<T = unknown> = T;
type Maybe<T = unknown> = Just<T> | Nothing;
function handleFallback<T = unknown>(val: unknown): Just<T> {
return val === undefined ? void 0 : typeof val === "function" ? val() : val;
}
/**
* @method mjn
* @param {any} obj
* @param {String} path
* @param {any} fallback
* @returns {any}
*/
function mjn<T = any>(obj: any, path: string, fallback?: T): Maybe<T> {
const arrToPath: any[] = path
.replace(/\[(\w+)\]/g, ".$1")
.replace(/^\./, "")
.split(".");
try {
let i = 0;
while (i < arrToPath.length) {
if (arrToPath[i] in obj) {
obj = obj[arrToPath[i]];
i++;
} else {
return handleFallback(fallback);
}
}
return obj === undefined ? void 0 : obj;
} catch (_) {
return handleFallback(fallback);
}
}
export default mjn;