@platform/state
Version:
A small, simple, strongly typed, [rx/observable] state-machine.
45 lines (44 loc) • 1.54 kB
JavaScript
;
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;