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
JavaScript
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=