UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

47 lines 3.84 kB
"use strict"; 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==