UNPKG

ngx-foresight

Version:

<p align="center"> <img src="https://akshykhade.github.io/ngx-foresight/logo.svg" width="305px"> </p> <br/> <p align="center"> <a href="https://www.npmjs.com/package/ngx-foresight"> <img src="https://img.shields.io/npm/v/ngx-foresight.svg?style=fo

45 lines 5.29 kB
import { PRIMARY_OUTLET } from '@angular/router'; export const findPath = (config, route) => { config = config.slice(); const parent = new Map(); const visited = new Set(); while (config.length) { const el = config.shift(); if (!el) { continue; } visited.add(el); if (el === route) break; let children = el.children || []; const current = el._loadedRoutes || []; for (const route of current) { if (route && route.children) { children = children.concat(route.children); } } children.forEach((r) => { if (visited.has(r)) return; parent.set(r, el); config.push(r); }); } let path = ''; let current = route; while (current) { if (isPrimaryRoute(current)) { path = `/${current.path}${path}`; } else { path = `/(${current.outlet}:${current.path}${path})`; } current = parent.get(current); } // For routes with empty paths (the resulted string will look like `///section/sub-section`) return path.replace(/[\/]+/, '/'); }; function isPrimaryRoute(route) { return route.outlet === PRIMARY_OUTLET || !route.outlet; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcmVzaWdodC9zcmMvbGliL3V0aWxzL2ZpbmQtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBZSxFQUFFLEtBQVksRUFBVSxFQUFFO0lBQ2hFLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUM7SUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQVMsQ0FBQztJQUNqQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyQixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsU0FBUztRQUNYLENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksRUFBRSxLQUFLLEtBQUs7WUFBRSxNQUFNO1FBQ3hCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2pDLE1BQU0sT0FBTyxHQUFJLEVBQVUsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBQ2hELEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUM7UUFDRCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFBRSxPQUFPO1lBQzNCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsSUFBSSxPQUFPLEdBQXNCLEtBQUssQ0FBQztJQUV2QyxPQUFPLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxHQUFHLEtBQUssT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsNEZBQTRGO0lBQzVGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBRUYsU0FBUyxjQUFjLENBQUMsS0FBWTtJQUNsQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUFJJTUFSWV9PVVRMRVQsIFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuZXhwb3J0IGNvbnN0IGZpbmRQYXRoID0gKGNvbmZpZzogUm91dGVbXSwgcm91dGU6IFJvdXRlKTogc3RyaW5nID0+IHtcbiAgY29uZmlnID0gY29uZmlnLnNsaWNlKCk7XG4gIGNvbnN0IHBhcmVudCA9IG5ldyBNYXA8Um91dGUsIFJvdXRlPigpO1xuICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxSb3V0ZT4oKTtcbiAgd2hpbGUgKGNvbmZpZy5sZW5ndGgpIHtcbiAgICBjb25zdCBlbCA9IGNvbmZpZy5zaGlmdCgpO1xuICAgIGlmICghZWwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2aXNpdGVkLmFkZChlbCk7XG4gICAgaWYgKGVsID09PSByb3V0ZSkgYnJlYWs7XG4gICAgbGV0IGNoaWxkcmVuID0gZWwuY2hpbGRyZW4gfHwgW107XG4gICAgY29uc3QgY3VycmVudCA9IChlbCBhcyBhbnkpLl9sb2FkZWRSb3V0ZXMgfHwgW107XG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiBjdXJyZW50KSB7XG4gICAgICBpZiAocm91dGUgJiYgcm91dGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQocm91dGUuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cbiAgICBjaGlsZHJlbi5mb3JFYWNoKChyOiBSb3V0ZSkgPT4ge1xuICAgICAgaWYgKHZpc2l0ZWQuaGFzKHIpKSByZXR1cm47XG4gICAgICBwYXJlbnQuc2V0KHIsIGVsKTtcbiAgICAgIGNvbmZpZy5wdXNoKHIpO1xuICAgIH0pO1xuICB9XG4gIGxldCBwYXRoID0gJyc7XG4gIGxldCBjdXJyZW50OiBSb3V0ZSB8IHVuZGVmaW5lZCA9IHJvdXRlO1xuXG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgaWYgKGlzUHJpbWFyeVJvdXRlKGN1cnJlbnQpKSB7XG4gICAgICBwYXRoID0gYC8ke2N1cnJlbnQucGF0aH0ke3BhdGh9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IGAvKCR7Y3VycmVudC5vdXRsZXR9OiR7Y3VycmVudC5wYXRofSR7cGF0aH0pYDtcbiAgICB9XG4gICAgY3VycmVudCA9IHBhcmVudC5nZXQoY3VycmVudCk7XG4gIH1cblxuICAvLyBGb3Igcm91dGVzIHdpdGggZW1wdHkgcGF0aHMgKHRoZSByZXN1bHRlZCBzdHJpbmcgd2lsbCBsb29rIGxpa2UgYC8vL3NlY3Rpb24vc3ViLXNlY3Rpb25gKVxuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9bXFwvXSsvLCAnLycpO1xufTtcblxuZnVuY3Rpb24gaXNQcmltYXJ5Um91dGUocm91dGU6IFJvdXRlKSB7XG4gIHJldHVybiByb3V0ZS5vdXRsZXQgPT09IFBSSU1BUllfT1VUTEVUIHx8ICFyb3V0ZS5vdXRsZXQ7XG59XG4iXX0=