1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.create = void 0;
|
4 | var common_1 = require("../common");
|
5 | var TreeQuery_1 = require("../TreeQuery");
|
6 | function create(tree) {
|
7 | var get = function (tree, parts) {
|
8 | if (parts.length === 0) {
|
9 | return undefined;
|
10 | }
|
11 | var child = tree.children.find(function (child) { return child.id === parts[0]; });
|
12 | if (child && parts.length > 1) {
|
13 | return get(child, parts.slice(1));
|
14 | }
|
15 | return child && parts.length > 1
|
16 | ? get(child, parts.slice(1))
|
17 | : child;
|
18 | };
|
19 | return {
|
20 | from: function (child) {
|
21 | var target = common_1.toNodeId(child);
|
22 | if (target === tree.id) {
|
23 | return tree.id;
|
24 | }
|
25 | var parts = [];
|
26 | var match = tree.find(function (e) { return e.id === target; });
|
27 | if (match) {
|
28 | var query = TreeQuery_1.TreeQuery.create({ root: tree.state });
|
29 | query.walkUp(match.id, function (e) {
|
30 | parts.unshift(e.id);
|
31 | if (e.id === tree.id) {
|
32 | e.stop();
|
33 | }
|
34 | });
|
35 | }
|
36 | return parts.join('/');
|
37 | },
|
38 | get: function (path) {
|
39 | var parts = path.split('/').map(function (part) { return part.trim(); });
|
40 | return parts.length === 1 && parts[0] === tree.id ? tree : get(tree, parts.slice(1));
|
41 | },
|
42 | };
|
43 | }
|
44 | exports.create = create;
|