1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.propertyTreeFromPaths = exports.getProperties = exports.getProperty = exports.addProperty = void 0;
|
4 | function addProperty(object, path, value) {
|
5 | const initialSegment = path[0];
|
6 | if (path.length === 1) {
|
7 | object[initialSegment] = value;
|
8 | return;
|
9 | }
|
10 | let field = object[initialSegment];
|
11 | if (field != null) {
|
12 | addProperty(field, path.slice(1), value);
|
13 | return;
|
14 | }
|
15 | if (typeof path[1] === 'string') {
|
16 | field = Object.create(null);
|
17 | }
|
18 | else {
|
19 | field = [];
|
20 | }
|
21 | addProperty(field, path.slice(1), value);
|
22 | object[initialSegment] = field;
|
23 | }
|
24 | exports.addProperty = addProperty;
|
25 | function getProperty(object, path) {
|
26 | if (!path.length || object == null) {
|
27 | return object;
|
28 | }
|
29 | const newPath = path.slice();
|
30 | const key = newPath.shift();
|
31 | if (key == null) {
|
32 | return;
|
33 | }
|
34 | const prop = object[key];
|
35 | return getProperty(prop, newPath);
|
36 | }
|
37 | exports.getProperty = getProperty;
|
38 | function getProperties(object, propertyTree) {
|
39 | if (object == null) {
|
40 | return object;
|
41 | }
|
42 | const newObject = Object.create(null);
|
43 | for (const key in propertyTree) {
|
44 | const subKey = propertyTree[key];
|
45 | if (subKey == null) {
|
46 | newObject[key] = object[key];
|
47 | continue;
|
48 | }
|
49 | const prop = object[key];
|
50 | newObject[key] = deepMap(prop, function deepMapFn(item) {
|
51 | return getProperties(item, subKey);
|
52 | });
|
53 | }
|
54 | return newObject;
|
55 | }
|
56 | exports.getProperties = getProperties;
|
57 | function propertyTreeFromPaths(paths) {
|
58 | const propertyTree = Object.create(null);
|
59 | for (const path of paths) {
|
60 | addProperty(propertyTree, path, null);
|
61 | }
|
62 | return propertyTree;
|
63 | }
|
64 | exports.propertyTreeFromPaths = propertyTreeFromPaths;
|
65 | function deepMap(arrayOrItem, fn) {
|
66 | if (Array.isArray(arrayOrItem)) {
|
67 | return arrayOrItem.map(nestedArrayOrItem => deepMap(nestedArrayOrItem, fn));
|
68 | }
|
69 | return fn(arrayOrItem);
|
70 | }
|