UNPKG

@pshurygin/ngx-quicklink

Version:
79 lines 8.8 kB
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