@esri/hub-common 12.17.0 → 12.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,11 +1,87 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Get a property out of a deeply nested object
|
|
3
|
-
*
|
|
2
|
+
* Get a property out of a deeply nested object. Supports array indexing
|
|
3
|
+
* and property matching.
|
|
4
|
+
*
|
|
5
|
+
* Examples:
|
|
6
|
+
* ```js
|
|
7
|
+
* getProp({a: {b: {c: 1}}}, "a.b.c") => 1
|
|
8
|
+
* getProp({a: {b: {c: 1}}}, "a.b.d") => undefined
|
|
9
|
+
* getProp({a: {b: {c: 1}}}, "a.b") => {c: 1}
|
|
10
|
+
* getProp({a: {b: [1,2]}}, "a.b[0]") => 1
|
|
11
|
+
* getProp({a: {b: {c: 1}, b2: { $use: "a.b"}}, "a.b2") => {c: 1}
|
|
12
|
+
* getProp({a: [{key: "x", val:1}, {key: "y", val:3}]}, "a[1]") => {key: "y", val:3}
|
|
13
|
+
* getProp({a: [{key: "x", val:1}, {key: "y", val:3}]}, "a[1].val") => 3
|
|
14
|
+
* getProp({a: [{key: "x", val:1}, {key: "y", val:3}]}, "a[findBy(key,y)].val") => 3
|
|
15
|
+
* getProp({a: [{key: "x", val:1}, {key: "y", val:3}]}, "a[findBy(val,1)].key") => "x"
|
|
16
|
+
* ```
|
|
4
17
|
*/
|
|
5
|
-
export
|
|
18
|
+
export const getProp = (obj, path) => {
|
|
6
19
|
return path.split(".").reduce(function (prev, curr) {
|
|
7
|
-
|
|
8
|
-
|
|
20
|
+
const match = curr.match(/\[(.*?)\]$/);
|
|
21
|
+
if (match) {
|
|
22
|
+
const indexOrFnName = match[1];
|
|
23
|
+
const propName = curr.replace(match[0], "");
|
|
24
|
+
if (parseInt(indexOrFnName, 10) > -1) {
|
|
25
|
+
const idx = parseInt(indexOrFnName, 10);
|
|
26
|
+
// check that the array exists and that the index is valid
|
|
27
|
+
if (Array.isArray(prev[propName]) && prev[propName][idx]) {
|
|
28
|
+
return prev[propName][idx];
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
// we have an operation that we want to apply to the array
|
|
36
|
+
return applyOperation(prev[propName], indexOrFnName);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
if (prev && prev[curr] !== undefined) {
|
|
41
|
+
if (prev[curr] !== null && prev[curr].$use) {
|
|
42
|
+
return getProp(obj, prev[curr].$use);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
return prev[curr];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
9
52
|
}, obj);
|
|
53
|
+
};
|
|
54
|
+
function applyOperation(arr, operation) {
|
|
55
|
+
// split up the operation into the operationName and the arguments
|
|
56
|
+
// e.g. "findBy(key,'projects')" => ["findBy", "key, 'projects'"]
|
|
57
|
+
const parts = operation.split("(");
|
|
58
|
+
// lots of guards...
|
|
59
|
+
if (!parts || parts.length !== 2)
|
|
60
|
+
return undefined;
|
|
61
|
+
let result;
|
|
62
|
+
const fnName = parts[0];
|
|
63
|
+
const args = parts[1]
|
|
64
|
+
.replace(")", "")
|
|
65
|
+
.split(",")
|
|
66
|
+
.map((p) => p.trim());
|
|
67
|
+
switch (fnName) {
|
|
68
|
+
case "findBy":
|
|
69
|
+
const prop = args[0];
|
|
70
|
+
let val;
|
|
71
|
+
if (isNumeric(args[1])) {
|
|
72
|
+
val = parseFloat(args[1]);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
val = args[1].replace(/'/g, "");
|
|
76
|
+
}
|
|
77
|
+
result = arr.find((p) => p[prop] === val);
|
|
78
|
+
break;
|
|
79
|
+
default:
|
|
80
|
+
result = undefined;
|
|
81
|
+
}
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
function isNumeric(n) {
|
|
85
|
+
return !isNaN(parseFloat(n));
|
|
10
86
|
}
|
|
11
87
|
//# sourceMappingURL=get-prop.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-prop.js","sourceRoot":"","sources":["../../../src/objects/get-prop.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"get-prop.js","sourceRoot":"","sources":["../../../src/objects/get-prop.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,14 +2,89 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getProp = void 0;
|
|
4
4
|
/**
|
|
5
|
-
* Get a property out of a deeply nested object
|
|
6
|
-
*
|
|
5
|
+
* Get a property out of a deeply nested object. Supports array indexing
|
|
6
|
+
* and property matching.
|
|
7
|
+
*
|
|
8
|
+
* Examples:
|
|
9
|
+
* ```js
|
|
10
|
+
* getProp({a: {b: {c: 1}}}, "a.b.c") => 1
|
|
11
|
+
* getProp({a: {b: {c: 1}}}, "a.b.d") => undefined
|
|
12
|
+
* getProp({a: {b: {c: 1}}}, "a.b") => {c: 1}
|
|
13
|
+
* getProp({a: {b: [1,2]}}, "a.b[0]") => 1
|
|
14
|
+
* getProp({a: {b: {c: 1}, b2: { $use: "a.b"}}, "a.b2") => {c: 1}
|
|
15
|
+
* getProp({a: [{key: "x", val:1}, {key: "y", val:3}]}, "a[1]") => {key: "y", val:3}
|
|
16
|
+
* getProp({a: [{key: "x", val:1}, {key: "y", val:3}]}, "a[1].val") => 3
|
|
17
|
+
* getProp({a: [{key: "x", val:1}, {key: "y", val:3}]}, "a[findBy(key,y)].val") => 3
|
|
18
|
+
* getProp({a: [{key: "x", val:1}, {key: "y", val:3}]}, "a[findBy(val,1)].key") => "x"
|
|
19
|
+
* ```
|
|
7
20
|
*/
|
|
8
|
-
|
|
21
|
+
exports.getProp = (obj, path) => {
|
|
9
22
|
return path.split(".").reduce(function (prev, curr) {
|
|
10
|
-
|
|
11
|
-
|
|
23
|
+
const match = curr.match(/\[(.*?)\]$/);
|
|
24
|
+
if (match) {
|
|
25
|
+
const indexOrFnName = match[1];
|
|
26
|
+
const propName = curr.replace(match[0], "");
|
|
27
|
+
if (parseInt(indexOrFnName, 10) > -1) {
|
|
28
|
+
const idx = parseInt(indexOrFnName, 10);
|
|
29
|
+
// check that the array exists and that the index is valid
|
|
30
|
+
if (Array.isArray(prev[propName]) && prev[propName][idx]) {
|
|
31
|
+
return prev[propName][idx];
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// we have an operation that we want to apply to the array
|
|
39
|
+
return applyOperation(prev[propName], indexOrFnName);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
if (prev && prev[curr] !== undefined) {
|
|
44
|
+
if (prev[curr] !== null && prev[curr].$use) {
|
|
45
|
+
return exports.getProp(obj, prev[curr].$use);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
return prev[curr];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
12
55
|
}, obj);
|
|
56
|
+
};
|
|
57
|
+
function applyOperation(arr, operation) {
|
|
58
|
+
// split up the operation into the operationName and the arguments
|
|
59
|
+
// e.g. "findBy(key,'projects')" => ["findBy", "key, 'projects'"]
|
|
60
|
+
const parts = operation.split("(");
|
|
61
|
+
// lots of guards...
|
|
62
|
+
if (!parts || parts.length !== 2)
|
|
63
|
+
return undefined;
|
|
64
|
+
let result;
|
|
65
|
+
const fnName = parts[0];
|
|
66
|
+
const args = parts[1]
|
|
67
|
+
.replace(")", "")
|
|
68
|
+
.split(",")
|
|
69
|
+
.map((p) => p.trim());
|
|
70
|
+
switch (fnName) {
|
|
71
|
+
case "findBy":
|
|
72
|
+
const prop = args[0];
|
|
73
|
+
let val;
|
|
74
|
+
if (isNumeric(args[1])) {
|
|
75
|
+
val = parseFloat(args[1]);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
val = args[1].replace(/'/g, "");
|
|
79
|
+
}
|
|
80
|
+
result = arr.find((p) => p[prop] === val);
|
|
81
|
+
break;
|
|
82
|
+
default:
|
|
83
|
+
result = undefined;
|
|
84
|
+
}
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
function isNumeric(n) {
|
|
88
|
+
return !isNaN(parseFloat(n));
|
|
13
89
|
}
|
|
14
|
-
exports.getProp = getProp;
|
|
15
90
|
//# sourceMappingURL=get-prop.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-prop.js","sourceRoot":"","sources":["../../../src/objects/get-prop.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"get-prop.js","sourceRoot":"","sources":["../../../src/objects/get-prop.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Get a property out of a deeply nested object
|
|
3
|
-
*
|
|
2
|
+
* Get a property out of a deeply nested object. Supports array indexing
|
|
3
|
+
* and property matching.
|
|
4
|
+
*
|
|
5
|
+
* Examples:
|
|
6
|
+
* ```js
|
|
7
|
+
* getProp({a: {b: {c: 1}}}, "a.b.c") => 1
|
|
8
|
+
* getProp({a: {b: {c: 1}}}, "a.b.d") => undefined
|
|
9
|
+
* getProp({a: {b: {c: 1}}}, "a.b") => {c: 1}
|
|
10
|
+
* getProp({a: {b: [1,2]}}, "a.b[0]") => 1
|
|
11
|
+
* getProp({a: {b: {c: 1}, b2: { $use: "a.b"}}, "a.b2") => {c: 1}
|
|
12
|
+
* getProp({a: [{key: "x", val:1}, {key: "y", val:3}]}, "a[1]") => {key: "y", val:3}
|
|
13
|
+
* getProp({a: [{key: "x", val:1}, {key: "y", val:3}]}, "a[1].val") => 3
|
|
14
|
+
* getProp({a: [{key: "x", val:1}, {key: "y", val:3}]}, "a[findBy(key,y)].val") => 3
|
|
15
|
+
* getProp({a: [{key: "x", val:1}, {key: "y", val:3}]}, "a[findBy(val,1)].key") => "x"
|
|
16
|
+
* ```
|
|
4
17
|
*/
|
|
5
|
-
export declare
|
|
18
|
+
export declare const getProp: (obj: {
|
|
6
19
|
[index: string]: any;
|
|
7
|
-
}, path: string)
|
|
20
|
+
}, path: string) => any;
|