@pshurygin/ngx-quicklink
Version:
Quicklink for Angular
75 lines • 11.1 kB
JavaScript
import * as tslib_1 from "tslib";
import { Router, PRIMARY_OUTLET } from '@angular/router';
import { Injectable } from '@angular/core';
// Using a global registry so we can keep it populated across lazy-loaded
// modules with different parent injectors which create instance of the registry.
var globalRegistry = [];
var PrefetchRegistry = /** @class */ (function () {
function PrefetchRegistry(router) {
this.router = router;
this.trees = globalRegistry;
}
PrefetchRegistry.prototype.add = function (tree) {
this.trees.push(tree);
};
PrefetchRegistry.prototype.remove = function (tree) {
this.trees.splice(this.trees.indexOf(tree), 1);
};
PrefetchRegistry.prototype.shouldPrefetch = function (url) {
var tree = this.router.parseUrl(url);
return this.trees.some(containsTree.bind(null, tree));
};
PrefetchRegistry = tslib_1.__decorate([
Injectable(),
tslib_1.__metadata("design:paramtypes", [Router])
], PrefetchRegistry);
return PrefetchRegistry;
}());
export { PrefetchRegistry };
function containsQueryParams(container, containee) {
// TODO: This does not handle array params correctly.
return (Object.keys(containee).length <= Object.keys(container).length &&
Object.keys(containee).every(function (key) { return containee[key] === container[key]; }));
}
function containsTree(containee, container) {
return (containsQueryParams(container.queryParams, containee.queryParams) &&
containsSegmentGroup(container.root, containee.root, containee.root.segments));
}
function containsSegmentGroup(container, containee, containeePaths) {
if (container.segments.length > containeePaths.length) {
var current = container.segments.slice(0, containeePaths.length);
if (!equalPath(current, containeePaths))
return false;
if (containee.hasChildren())
return false;
return true;
}
else if (container.segments.length === containeePaths.length) {
if (!equalPath(container.segments, containeePaths))
return false;
if (!containee.hasChildren())
return true;
for (var c in containee.children) {
if (!container.children[c])
break;
if (containsSegmentGroup(container.children[c], containee.children[c], containee.children[c].segments))
return true;
}
return false;
}
else {
var current = containeePaths.slice(0, container.segments.length);
var next = containeePaths.slice(container.segments.length);
if (!equalPath(container.segments, current))
return false;
if (!container.children[PRIMARY_OUTLET])
return false;
return containsSegmentGroup(container.children[PRIMARY_OUTLET], containee, next);
}
}
export function equalPath(as, bs) {
if (as.length !== bs.length)
return false;
return as.every(function (a, i) { return a.path === bs[i].path || a.path.startsWith(':') || bs[i].path.startsWith(':'); });
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmV0Y2gtcmVnaXN0cnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bwc2h1cnlnaW4vbmd4LXF1aWNrbGluay8iLCJzb3VyY2VzIjpbInNyYy9wcmVmZXRjaC1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUtOLGNBQWMsRUFDZixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MseUVBQXlFO0FBQ3pFLGlGQUFpRjtBQUNqRixJQUFNLGNBQWMsR0FBYyxFQUFFLENBQUM7QUFHckM7SUFFRSwwQkFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFEMUIsVUFBSyxHQUFjLGNBQWMsQ0FBQztJQUNMLENBQUM7SUFFdEMsOEJBQUcsR0FBSCxVQUFJLElBQWE7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsaUNBQU0sR0FBTixVQUFPLElBQWE7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELHlDQUFjLEdBQWQsVUFBZSxHQUFXO1FBQ3hCLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBZlUsZ0JBQWdCO1FBRDVCLFVBQVUsRUFBRTtpREFHaUIsTUFBTTtPQUZ2QixnQkFBZ0IsQ0FnQjVCO0lBQUQsdUJBQUM7Q0FBQSxBQWhCRCxJ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QUFDLEVBQWdCLEVBQUUsRUFBZ0I7SUFDMUQsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDMUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUNiLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBN0UsQ0FBNkUsQ0FDeEYsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBSb3V0ZXIsXG4gIFVybFRyZWUsXG4gIFBhcmFtcyxcbiAgVXJsU2VnbWVudEdyb3VwLFxuICBVcmxTZWdtZW50LFxuICBQUklNQVJZX09VVExFVFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBVc2luZyBhIGdsb2JhbCByZWdpc3RyeSBzbyB3ZSBjYW4ga2VlcCBpdCBwb3B1bGF0ZWQgYWNyb3NzIGxhenktbG9hZGVkXG4vLyBtb2R1bGVzIHdpdGggZGlmZmVyZW50IHBhcmVudCBpbmplY3RvcnMgd2hpY2ggY3JlYXRlIGluc3RhbmNlIG9mIHRoZSByZWdpc3RyeS5cbmNvbnN0IGdsb2JhbFJlZ2lzdHJ5OiBVcmxUcmVlW10gPSBbXTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFByZWZldGNoUmVnaXN0cnkge1xuICBwcml2YXRlIHRyZWVzOiBVcmxUcmVlW10gPSBnbG9iYWxSZWdpc3RyeTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge31cblxuICBhZGQodHJlZTogVXJsVHJlZSkge1xuICAgIHRoaXMudHJlZXMucHVzaCh0cmVlKTtcbiAgfVxuXG4gIHJlbW92ZSh0cmVlOiBVcmxUcmVlKSB7XG4gICAgdGhpcy50cmVlcy5zcGxpY2UodGhpcy50cmVlcy5pbmRleE9mKHRyZWUpLCAxKTtcbiAgfVxuXG4gIHNob3VsZFByZWZldGNoKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHVybCk7XG4gICAgcmV0dXJuIHRoaXMudHJlZXMuc29tZShjb250YWluc1RyZWUuYmluZChudWxsLCB0cmVlKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29udGFpbnNRdWVyeVBhcmFtcyhjb250YWluZXI6IFBhcmFtcywgY29udGFpbmVlOiBQYXJhbXMpOiBib29sZWFuIHtcbiAgLy8gVE9ETzogVGhpcyBkb2VzIG5vdCBoYW5kbGUgYXJyYXkgcGFyYW1zIGNvcnJlY3RseS5cbiAgcmV0dXJuIChcbiAgICBPYmplY3Qua2V5cyhjb250YWluZWUpLmxlbmd0aCA8PSBPYmplY3Qua2V5cyhjb250YWluZXIpLmxlbmd0aCAmJlxuICAgIE9iamVjdC5rZXlzKGNvbnRhaW5lZSkuZXZlcnkoa2V5ID0+IGNvbnRhaW5lZVtrZXldID09PSBjb250YWluZXJba2V5XSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNUcmVlKGNvbnRhaW5lZTogVXJsVHJlZSwgY29udGFpbmVyOiBVcmxUcmVlKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgY29udGFpbnNRdWVyeVBhcmFtcyhjb250YWluZXIucXVlcnlQYXJhbXMsIGNvbnRhaW5lZS5xdWVyeVBhcmFtcykgJiZcbiAgICBjb250YWluc1NlZ21lbnRHcm91cChjb250YWluZXIucm9vdCwgY29udGFpbmVlLnJvb3QsIGNvbnRhaW5lZS5yb290LnNlZ21lbnRzKVxuICApO1xufVxuXG5mdW5jdGlvbiBjb250YWluc1NlZ21lbnRHcm91cChcbiAgY29udGFpbmVyOiBVcmxTZWdtZW50R3JvdXAsXG4gIGNvbnRhaW5lZTogVXJsU2VnbWVudEdyb3VwLFxuICBjb250YWluZWVQYXRoczogVXJsU2VnbWVudFtdXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvbnRhaW5lci5zZWdtZW50cy5sZW5ndGggPiBjb250YWluZWVQYXRocy5sZW5ndGgpIHtcbiAgICBjb25zdCBjdXJyZW50ID0gY29udGFpbmVyLnNlZ21lbnRzLnNsaWNlKDAsIGNvbnRhaW5lZVBhdGhzLmxlbmd0aCk7XG4gICAgaWYgKCFlcXVhbFBhdGgoY3VycmVudCwgY29udGFpbmVlUGF0aHMpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGNvbnRhaW5lZS5oYXNDaGlsZHJlbigpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoY29udGFpbmVyLnNlZ21lbnRzLmxlbmd0aCA9PT0gY29udGFpbmVlUGF0aHMubGVuZ3RoKSB7XG4gICAgaWYgKCFlcXVhbFBhdGgoY29udGFpbmVyLnNlZ21lbnRzLCBjb250YWluZWVQYXRocykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWNvbnRhaW5lZS5oYXNDaGlsZHJlbigpKSByZXR1cm4gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgYyBpbiBjb250YWluZWUuY2hpbGRyZW4pIHtcbiAgICAgIGlmICghY29udGFpbmVyLmNoaWxkcmVuW2NdKSBicmVhaztcbiAgICAgIGlmIChcbiAgICAgICAgY29udGFpbnNTZWdtZW50R3JvdXAoXG4gICAgICAgICAgY29udGFpbmVyLmNoaWxkcmVuW2NdLFxuICAgICAgICAgIGNvbnRhaW5lZS5jaGlsZHJlbltjXSxcbiAgICAgICAgICBjb250YWluZWUuY2hpbGRyZW5bY10uc2VnbWVudHNcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBjb250YWluZWVQYXRocy5zbGljZSgwLCBjb250YWluZXIuc2VnbWVudHMubGVuZ3RoKTtcbiAgICBjb25zdCBuZXh0ID0gY29udGFpbmVlUGF0aHMuc2xpY2UoY29udGFpbmVyLnNlZ21lbnRzLmxlbmd0aCk7XG4gICAgaWYgKCFlcXVhbFBhdGgoY29udGFpbmVyLnNlZ21lbnRzLCBjdXJyZW50KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghY29udGFpbmVyLmNoaWxkcmVuW1BSSU1BUllfT1VUTEVUXSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb250YWluc1NlZ21lbnRHcm91cChjb250YWluZXIuY2hpbGRyZW5bUFJJTUFSWV9PVVRMRVRdLCBjb250YWluZWUsIG5leHQpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbFBhdGgoYXM6IFVybFNlZ21lbnRbXSwgYnM6IFVybFNlZ21lbnRbXSk6IGJvb2xlYW4ge1xuICBpZiAoYXMubGVuZ3RoICE9PSBicy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGFzLmV2ZXJ5KFxuICAgIChhLCBpKSA9PiBhLnBhdGggPT09IGJzW2ldLnBhdGggfHwgYS5wYXRoLnN0YXJ0c1dpdGgoJzonKSB8fCBic1tpXS5wYXRoLnN0YXJ0c1dpdGgoJzonKVxuICApO1xufVxuIl19