@pshurygin/ngx-quicklink
Version:
Quicklink for Angular
79 lines • 8.8 kB
JavaScript
import * as tslib_1 from "tslib";
import { Injectable } from '@angular/core';
import { Router, PRIMARY_OUTLET } from '@angular/router';
import { PrefetchRegistry } from './prefetch-registry.service';
import { EMPTY } from 'rxjs';
let QuicklinkStrategy = class QuicklinkStrategy {
constructor(queue, router) {
this.queue = queue;
this.router = router;
this.loading = new Set();
}
preload(route, load) {
if (this.loading.has(route)) {
// Don't preload the same route twice
return EMPTY;
}
const conn = typeof window !== 'undefined' ? navigator.connection : undefined;
if (conn) {
// Don't preload if the user is on 2G. or if Save-Data is enabled..
if ((conn.effectiveType || '').includes('2g') || conn.saveData)
return EMPTY;
}
// Prevent from preloading
if (route.data && route.data.preload === false) {
return EMPTY;
}
const fullPath = findPath(this.router.config, route);
if (this.queue.shouldPrefetch(fullPath)) {
this.loading.add(route);
return load();
}
return EMPTY;
}
};
QuicklinkStrategy = tslib_1.__decorate([
Injectable(),
tslib_1.__metadata("design:paramtypes", [PrefetchRegistry, Router])
], QuicklinkStrategy);
export { QuicklinkStrategy };
const findPath = (config, route) => {
config = config.slice();
const parent = new Map();
const visited = new Set();
while (config.length) {
const el = config.shift();
visited.add(el);
if (el === route)
break;
let children = el.children || [];
const current = el._loadedConfig;
if (current && current.routes) {
children = children.concat(current.routes);
}
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);
}
return path;
};
const ɵ0 = findPath;
function isPrimaryRoute(route) {
return route.outlet === PRIMARY_OUTLET || !route.outlet;
}
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tsaW5rLXN0cmF0ZWd5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AcHNodXJ5Z2luL25neC1xdWlja2xpbmsvIiwic291cmNlcyI6WyJzcmMvcXVpY2tsaW5rLXN0cmF0ZWd5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFzQixNQUFNLEVBQVMsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc3QixJQUFhLGlCQUFpQixHQUE5QixNQUFhLGlCQUFpQjtJQUc1QixZQUFvQixLQUF1QixFQUFVLE1BQWM7UUFBL0MsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRm5FLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBUyxDQUFDO0lBRTJDLENBQUM7SUFFdkUsT0FBTyxDQUFDLEtBQVksRUFBRSxJQUFjO1FBQ2xDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IscUNBQXFDO1lBQ3JDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFFLFNBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDdkYsSUFBSSxJQUFJLEVBQUU7WUFDUixtRUFBbUU7WUFDbkUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1NBQzlFO1FBQ0QsMEJBQTBCO1FBQzFCLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7WUFDOUMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxFQUFFLENBQUM7U0FDZjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGLENBQUE7QUEzQlksaUJBQWlCO0lBRDdCLFVBQVUsRUFBRTs2Q0FJZ0IsZ0JBQWdCLEVBQWtCLE1BQU07R0FIeEQsaUJBQWlCLENBMkI3QjtTQTNCWSxpQkFBaUI7QUE2QjlCLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBZSxFQUFFLEtBQVksRUFBVSxFQUFFO0lBQ3pELE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUM7SUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQVMsQ0FBQztJQUNqQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDcEIsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsSUFBSSxFQUFFLEtBQUssS0FBSztZQUFFLE1BQU07UUFDeEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUksRUFBVSxDQUFDLGFBQWEsQ0FBQztRQUMxQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQzdCLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM1QztRQUNELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRTtZQUM1QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE9BQU87WUFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztLQUNKO0lBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRXBCLE9BQU8sT0FBTyxFQUFFO1FBQ2QsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztTQUNsQzthQUFNO1lBQ0wsSUFBSSxHQUFHLEtBQUssT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDO1NBQ3REO1FBQ0QsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDL0I7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQzs7QUFFRixTQUFTLGNBQWMsQ0FBQyxLQUFZO0lBQ2xDLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxjQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcmVsb2FkaW5nU3RyYXRlZ3ksIFJvdXRlciwgUm91dGUsIFBSSU1BUllfT1VUTEVUIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFByZWZldGNoUmVnaXN0cnkgfSBmcm9tICcuL3ByZWZldGNoLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFF1aWNrbGlua1N0cmF0ZWd5IGltcGxlbWVudHMgUHJlbG9hZGluZ1N0cmF0ZWd5IHtcbiAgbG9hZGluZyA9IG5ldyBTZXQ8Um91dGU+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBxdWV1ZTogUHJlZmV0Y2hSZWdpc3RyeSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge31cblxuICBwcmVsb2FkKHJvdXRlOiBSb3V0ZSwgbG9hZDogRnVuY3Rpb24pIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nLmhhcyhyb3V0ZSkpIHtcbiAgICAgIC8vIERvbid0IHByZWxvYWQgdGhlIHNhbWUgcm91dGUgdHdpY2VcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG4gICAgY29uc3QgY29ubiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gKG5hdmlnYXRvciBhcyBhbnkpLmNvbm5lY3Rpb24gOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbm4pIHtcbiAgICAgIC8vIERvbid0IHByZWxvYWQgaWYgdGhlIHVzZXIgaXMgb24gMkcuIG9yIGlmIFNhdmUtRGF0YSBpcyBlbmFibGVkLi5cbiAgICAgIGlmICgoY29ubi5lZmZlY3RpdmVUeXBlIHx8ICcnKS5pbmNsdWRlcygnMmcnKSB8fCBjb25uLnNhdmVEYXRhKSByZXR1cm4gRU1QVFk7XG4gICAgfVxuICAgIC8vIFByZXZlbnQgZnJvbSBwcmVsb2FkaW5nXG4gICAgaWYgKHJvdXRlLmRhdGEgJiYgcm91dGUuZGF0YS5wcmVsb2FkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cbiAgICBjb25zdCBmdWxsUGF0aCA9IGZpbmRQYXRoKHRoaXMucm91dGVyLmNvbmZpZywgcm91dGUpO1xuICAgIGlmICh0aGlzLnF1ZXVlLnNob3VsZFByZWZldGNoKGZ1bGxQYXRoKSkge1xuICAgICAgdGhpcy5sb2FkaW5nLmFkZChyb3V0ZSk7XG4gICAgICByZXR1cm4gbG9hZCgpO1xuICAgIH1cblxuICAgIHJldHVybiBFTVBUWTtcbiAgfVxufVxuXG5jb25zdCBmaW5kUGF0aCA9IChjb25maWc6IFJvdXRlW10sIHJvdXRlOiBSb3V0ZSk6IHN0cmluZyA9PiB7XG4gIGNvbmZpZyA9IGNvbmZpZy5zbGljZSgpO1xuICBjb25zdCBwYXJlbnQgPSBuZXcgTWFwPFJvdXRlLCBSb3V0ZT4oKTtcbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQ8Um91dGU+KCk7XG4gIHdoaWxlIChjb25maWcubGVuZ3RoKSB7XG4gICAgY29uc3QgZWwgPSBjb25maWcuc2hpZnQoKTtcbiAgICB2aXNpdGVkLmFkZChlbCk7XG4gICAgaWYgKGVsID09PSByb3V0ZSkgYnJlYWs7XG4gICAgbGV0IGNoaWxkcmVuID0gZWwuY2hpbGRyZW4gfHwgW107XG4gICAgY29uc3QgY3VycmVudCA9IChlbCBhcyBhbnkpLl9sb2FkZWRDb25maWc7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudC5yb3V0ZXMpIHtcbiAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KGN1cnJlbnQucm91dGVzKTtcbiAgICB9XG4gICAgY2hpbGRyZW4uZm9yRWFjaCgocjogUm91dGUpID0+IHtcbiAgICAgIGlmICh2aXNpdGVkLmhhcyhyKSkgcmV0dXJuO1xuICAgICAgcGFyZW50LnNldChyLCBlbCk7XG4gICAgICBjb25maWcucHVzaChyKTtcbiAgICB9KTtcbiAgfVxuICBsZXQgcGF0aCA9ICcnO1xuICBsZXQgY3VycmVudCA9IHJvdXRlO1xuXG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgaWYgKGlzUHJpbWFyeVJvdXRlKGN1cnJlbnQpKSB7XG4gICAgICBwYXRoID0gYC8ke2N1cnJlbnQucGF0aH0ke3BhdGh9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCA9IGAvKCR7Y3VycmVudC5vdXRsZXR9OiR7Y3VycmVudC5wYXRofSR7cGF0aH0pYDtcbiAgICB9XG4gICAgY3VycmVudCA9IHBhcmVudC5nZXQoY3VycmVudCk7XG4gIH1cblxuICByZXR1cm4gcGF0aDtcbn07XG5cbmZ1bmN0aW9uIGlzUHJpbWFyeVJvdXRlKHJvdXRlOiBSb3V0ZSkge1xuICByZXR1cm4gcm91dGUub3V0bGV0ID09PSBQUklNQVJZX09VVExFVCB8fCAhcm91dGUub3V0bGV0O1xufVxuIl19