UNPKG

2.06 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.propertyTreeFromPaths = exports.getProperties = exports.getProperty = exports.addProperty = void 0;
4function 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}
24exports.addProperty = addProperty;
25function 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}
37exports.getProperty = getProperty;
38function 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}
56exports.getProperties = getProperties;
57function propertyTreeFromPaths(paths) {
58 const propertyTree = Object.create(null);
59 for (const path of paths) {
60 addProperty(propertyTree, path, null);
61 }
62 return propertyTree;
63}
64exports.propertyTreeFromPaths = propertyTreeFromPaths;
65function deepMap(arrayOrItem, fn) {
66 if (Array.isArray(arrayOrItem)) {
67 return arrayOrItem.map(nestedArrayOrItem => deepMap(nestedArrayOrItem, fn));
68 }
69 return fn(arrayOrItem);
70}