UNPKG

@platform/state

Version:

A small, simple, strongly typed, [rx/observable] state-machine.

45 lines (44 loc) 1.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.create = void 0; var common_1 = require("../common"); var TreeQuery_1 = require("../TreeQuery"); function create(tree) { var get = function (tree, parts) { if (parts.length === 0) { return undefined; } var child = tree.children.find(function (child) { return child.id === parts[0]; }); if (child && parts.length > 1) { return get(child, parts.slice(1)); } return child && parts.length > 1 ? get(child, parts.slice(1)) : child; }; return { from: function (child) { var target = common_1.toNodeId(child); if (target === tree.id) { return tree.id; } var parts = []; var match = tree.find(function (e) { return e.id === target; }); if (match) { var query = TreeQuery_1.TreeQuery.create({ root: tree.root }); query.walkUp(match.id, function (e) { parts.unshift(e.id); if (e.id === tree.id) { e.stop(); } }); } return parts.join('/'); }, get: function (path) { var parts = path.split('/').map(function (part) { return part.trim(); }); return parts.length === 1 && parts[0] === tree.id ? tree : get(tree, parts.slice(1)); }, }; } exports.create = create;