@launchmenu/core
Version:
An environment for visual keyboard controlled applets
47 lines • 3.84 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createActionOrdering = void 0;
/**
* Creates a full ordering from the given tree, such that no action depends on the actions that come after it
* @param tree The tree to get the full ordering for
* @returns The full action ordering
*/
function createActionOrdering(tree) {
const processingTag = Symbol();
const processedTag = Symbol();
function recursiveCreateActionOrdering(node, path) {
if (node[processedTag])
return [];
if (node[processingTag])
throw Error(`An action dependency cycle was detected: ${getCycle([...path, node])
.map(({ action }) => action.name)
.join("->")}`);
node[processingTag] = true;
path = [...path, node];
const children = node.children.flatMap(child => recursiveCreateActionOrdering(child, path));
const ordering = [...children, node];
delete node[processingTag];
node[processedTag] = true;
return ordering;
}
const ordering = recursiveCreateActionOrdering(tree, []);
ordering.forEach(node => delete node[processedTag]);
return ordering;
}
exports.createActionOrdering = createActionOrdering;
/**
* Obtains the cycle from a parent to the child, assuming one exists
* @param path The path in which the cycle occurred
* @returns The sequence of nodes that makes up a cycle
*/
function getCycle(path) {
const last = path[path.length - 1];
const cycle = [last];
for (let i = path.length - 2; i >= 0; i--) {
cycle.unshift(path[i]);
if (path[i] == last)
return cycle;
}
return cycle;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQWN0aW9uT3JlcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hY3Rpb25zL2FjdGlvbkdyYXBoL2NyZWF0ZUFjdGlvbk9yZXJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBUUE7Ozs7R0FJRztBQUNILFNBQWdCLG9CQUFvQixDQUNoQyxJQUFPO0lBRVAsTUFBTSxhQUFhLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDL0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFFOUIsU0FBUyw2QkFBNkIsQ0FDbEMsSUFBeUUsRUFDekUsSUFBbUI7UUFFbkIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ25CLE1BQU0sS0FBSyxDQUNQLDRDQUE0QyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDaEUsR0FBRyxDQUFDLENBQUMsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztpQkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3BCLENBQUM7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBRTNCLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQzNDLDZCQUE2QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FDN0MsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFckMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUUxQixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsNkJBQTZCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELFFBQVEsQ0FBQyxPQUFPLENBQ1osSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFRLElBQWlELENBQUMsWUFBWSxDQUFDLENBQ2xGLENBQUM7SUFDRixPQUFPLFFBRWEsQ0FBQztBQUN6QixDQUFDO0FBdENELG9EQXNDQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFFBQVEsQ0FBQyxJQUFtQjtJQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN2QyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztLQUNyQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMifQ==
;