@pshurygin/ngx-quicklink
Version:
Quicklink for Angular
85 lines • 9.02 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';
var QuicklinkStrategy = /** @class */ (function () {
function QuicklinkStrategy(queue, router) {
this.queue = queue;
this.router = router;
this.loading = new Set();
}
QuicklinkStrategy.prototype.preload = function (route, load) {
if (this.loading.has(route)) {
// Don't preload the same route twice
return EMPTY;
}
var 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;
}
var 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);
return QuicklinkStrategy;
}());
export { QuicklinkStrategy };
var findPath = function (config, route) {
config = config.slice();
var parent = new Map();
var visited = new Set();
var _loop_1 = function () {
var el = config.shift();
visited.add(el);
if (el === route)
return "break";
var children = el.children || [];
var current_1 = el._loadedConfig;
if (current_1 && current_1.routes) {
children = children.concat(current_1.routes);
}
children.forEach(function (r) {
if (visited.has(r))
return;
parent.set(r, el);
config.push(r);
});
};
while (config.length) {
var state_1 = _loop_1();
if (state_1 === "break")
break;
}
var path = '';
var current = route;
while (current) {
if (isPrimaryRoute(current)) {
path = "/" + current.path + path;
}
else {
path = "/(" + current.outlet + ":" + current.path + path + ")";
}
current = parent.get(current);
}
return path;
};
var ɵ0 = findPath;
function isPrimaryRoute(route) {
return route.outlet === PRIMARY_OUTLET || !route.outlet;
}
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tsaW5rLXN0cmF0ZWd5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AcHNodXJ5Z2luL25neC1xdWlja2xpbmsvIiwic291cmNlcyI6WyJzcmMvcXVpY2tsaW5rLXN0cmF0ZWd5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFzQixNQUFNLEVBQVMsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc3QjtJQUdFLDJCQUFvQixLQUF1QixFQUFVLE1BQWM7UUFBL0MsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRm5FLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBUyxDQUFDO0lBRTJDLENBQUM7SUFFdkUsbUNBQU8sR0FBUCxVQUFRLEtBQVksRUFBRSxJQUFjO1FBQ2xDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IscUNBQXFDO1lBQ3JDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFNLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFFLFNBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDdkYsSUFBSSxJQUFJLEVBQUU7WUFDUixtRUFBbUU7WUFDbkUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1NBQzlFO1FBQ0QsMEJBQTBCO1FBQzFCLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7WUFDOUMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxFQUFFLENBQUM7U0FDZjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQTFCVSxpQkFBaUI7UUFEN0IsVUFBVSxFQUFFO2lEQUlnQixnQkFBZ0IsRUFBa0IsTUFBTTtPQUh4RCxpQkFBaUIsQ0EyQjdCO0lBQUQsd0JBQUM7Q0FBQSxBQTNCRCxJQTJCQztTQTNCWSxpQkFBaUI7QUE2QjlCLElBQU0sUUFBUSxHQUFHLFVBQUMsTUFBZSxFQUFFLEtBQVk7SUFDN0MsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixJQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztJQUN2QyxJQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBUyxDQUFDOztRQUUvQixJQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixJQUFJLEVBQUUsS0FBSyxLQUFLOzJCQUFRO1FBQ3hCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2pDLElBQU0sU0FBTyxHQUFJLEVBQVUsQ0FBQyxhQUFhLENBQUM7UUFDMUMsSUFBSSxTQUFPLElBQUksU0FBTyxDQUFDLE1BQU0sRUFBRTtZQUM3QixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUM7UUFDRCxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQUMsQ0FBUTtZQUN4QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE9BQU87WUFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQzs7SUFiTCxPQUFPLE1BQU0sQ0FBQyxNQUFNOzs7O0tBY25CO0lBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRXBCLE9BQU8sT0FBTyxFQUFFO1FBQ2QsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxHQUFHLE1BQUksT0FBTyxDQUFDLElBQUksR0FBRyxJQUFNLENBQUM7U0FDbEM7YUFBTTtZQUNMLElBQUksR0FBRyxPQUFLLE9BQU8sQ0FBQyxNQUFNLFNBQUksT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLE1BQUcsQ0FBQztTQUN0RDtRQUNELE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQy9CO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7O0FBRUYsU0FBUyxjQUFjLENBQUMsS0FBWTtJQUNsQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJlbG9hZGluZ1N0cmF0ZWd5LCBSb3V0ZXIsIFJvdXRlLCBQUklNQVJZX09VVExFVCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBQcmVmZXRjaFJlZ2lzdHJ5IH0gZnJvbSAnLi9wcmVmZXRjaC1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEVNUFRZIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBRdWlja2xpbmtTdHJhdGVneSBpbXBsZW1lbnRzIFByZWxvYWRpbmdTdHJhdGVneSB7XG4gIGxvYWRpbmcgPSBuZXcgU2V0PFJvdXRlPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcXVldWU6IFByZWZldGNoUmVnaXN0cnksIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHt9XG5cbiAgcHJlbG9hZChyb3V0ZTogUm91dGUsIGxvYWQ6IEZ1bmN0aW9uKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZy5oYXMocm91dGUpKSB7XG4gICAgICAvLyBEb24ndCBwcmVsb2FkIHRoZSBzYW1lIHJvdXRlIHR3aWNlXG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuICAgIGNvbnN0IGNvbm4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IChuYXZpZ2F0b3IgYXMgYW55KS5jb25uZWN0aW9uIDogdW5kZWZpbmVkO1xuICAgIGlmIChjb25uKSB7XG4gICAgICAvLyBEb24ndCBwcmVsb2FkIGlmIHRoZSB1c2VyIGlzIG9uIDJHLiBvciBpZiBTYXZlLURhdGEgaXMgZW5hYmxlZC4uXG4gICAgICBpZiAoKGNvbm4uZWZmZWN0aXZlVHlwZSB8fCAnJykuaW5jbHVkZXMoJzJnJykgfHwgY29ubi5zYXZlRGF0YSkgcmV0dXJuIEVNUFRZO1xuICAgIH1cbiAgICAvLyBQcmV2ZW50IGZyb20gcHJlbG9hZGluZ1xuICAgIGlmIChyb3V0ZS5kYXRhICYmIHJvdXRlLmRhdGEucHJlbG9hZCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG4gICAgY29uc3QgZnVsbFBhdGggPSBmaW5kUGF0aCh0aGlzLnJvdXRlci5jb25maWcsIHJvdXRlKTtcbiAgICBpZiAodGhpcy5xdWV1ZS5zaG91bGRQcmVmZXRjaChmdWxsUGF0aCkpIHtcbiAgICAgIHRoaXMubG9hZGluZy5hZGQocm91dGUpO1xuICAgICAgcmV0dXJuIGxvYWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cbn1cblxuY29uc3QgZmluZFBhdGggPSAoY29uZmlnOiBSb3V0ZVtdLCByb3V0ZTogUm91dGUpOiBzdHJpbmcgPT4ge1xuICBjb25maWcgPSBjb25maWcuc2xpY2UoKTtcbiAgY29uc3QgcGFyZW50ID0gbmV3IE1hcDxSb3V0ZSwgUm91dGU+KCk7XG4gIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PFJvdXRlPigpO1xuICB3aGlsZSAoY29uZmlnLmxlbmd0aCkge1xuICAgIGNvbnN0IGVsID0gY29uZmlnLnNoaWZ0KCk7XG4gICAgdmlzaXRlZC5hZGQoZWwpO1xuICAgIGlmIChlbCA9PT0gcm91dGUpIGJyZWFrO1xuICAgIGxldCBjaGlsZHJlbiA9IGVsLmNoaWxkcmVuIHx8IFtdO1xuICAgIGNvbnN0IGN1cnJlbnQgPSAoZWwgYXMgYW55KS5fbG9hZGVkQ29uZmlnO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQucm91dGVzKSB7XG4gICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmNvbmNhdChjdXJyZW50LnJvdXRlcyk7XG4gICAgfVxuICAgIGNoaWxkcmVuLmZvckVhY2goKHI6IFJvdXRlKSA9PiB7XG4gICAgICBpZiAodmlzaXRlZC5oYXMocikpIHJldHVybjtcbiAgICAgIHBhcmVudC5zZXQociwgZWwpO1xuICAgICAgY29uZmlnLnB1c2gocik7XG4gICAgfSk7XG4gIH1cbiAgbGV0IHBhdGggPSAnJztcbiAgbGV0IGN1cnJlbnQgPSByb3V0ZTtcblxuICB3aGlsZSAoY3VycmVudCkge1xuICAgIGlmIChpc1ByaW1hcnlSb3V0ZShjdXJyZW50KSkge1xuICAgICAgcGF0aCA9IGAvJHtjdXJyZW50LnBhdGh9JHtwYXRofWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhdGggPSBgLygke2N1cnJlbnQub3V0bGV0fToke2N1cnJlbnQucGF0aH0ke3BhdGh9KWA7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBwYXJlbnQuZ2V0KGN1cnJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHBhdGg7XG59O1xuXG5mdW5jdGlvbiBpc1ByaW1hcnlSb3V0ZShyb3V0ZTogUm91dGUpIHtcbiAgcmV0dXJuIHJvdXRlLm91dGxldCA9PT0gUFJJTUFSWV9PVVRMRVQgfHwgIXJvdXRlLm91dGxldDtcbn1cbiJdfQ==