UNPKG

@pshurygin/ngx-quicklink

Version:
96 lines 12 kB
import * as tslib_1 from "tslib"; import { Injectable, InjectionToken, NgZone } from '@angular/core'; import { RouterPreloader } from '@angular/router'; import { PrefetchRegistry } from './prefetch-registry.service'; var ɵ0 = function (cb) { var start = Date.now(); return setTimeout(function () { cb({ didTimeout: false, timeRemaining: function () { return Math.max(0, 50 - (Date.now() - start)); } }); }, 1); }, ɵ1 = function () { }; var requestIdleCallback = typeof window !== 'undefined' ? window.requestIdleCallback || ɵ0 : ɵ1; var observerSupported = function () { return typeof window !== 'undefined' ? !!window.IntersectionObserver : false; }; var ɵ2 = observerSupported; export var LinkHandler = new InjectionToken('LinkHandler'); var ObservableLinkHandler = /** @class */ (function () { function ObservableLinkHandler(loader, queue, ngZone) { var _this = this; this.loader = loader; this.queue = queue; this.ngZone = ngZone; this.elementLink = new Map(); this.observer = observerSupported() ? new IntersectionObserver(function (entries) { entries.forEach(function (entry) { if (entry.isIntersecting) { var link = entry.target; var routerLink_1 = _this.elementLink.get(link); if (!routerLink_1 || !routerLink_1.urlTree) return; _this.queue.add(routerLink_1.urlTree); _this.observer.unobserve(link); requestIdleCallback(function () { _this.loader.preload().subscribe(function () { return void 0; }); _this.queue.remove(routerLink_1.urlTree); }); } }); }) : null; } ObservableLinkHandler.prototype.register = function (el) { var _this = this; this.elementLink.set(el.element, el); this.ngZone.runOutsideAngular(function () { _this.observer.observe(el.element); }); }; // First call to unregister will not hit this. ObservableLinkHandler.prototype.unregister = function (el) { if (this.elementLink.has(el.element)) { this.observer.unobserve(el.element); this.elementLink.delete(el.element); } }; ObservableLinkHandler.prototype.supported = function () { return observerSupported(); }; ObservableLinkHandler = tslib_1.__decorate([ Injectable(), tslib_1.__metadata("design:paramtypes", [RouterPreloader, PrefetchRegistry, NgZone]) ], ObservableLinkHandler); return ObservableLinkHandler; }()); export { ObservableLinkHandler }; var PreloadLinkHandler = /** @class */ (function () { function PreloadLinkHandler(loader, queue) { this.loader = loader; this.queue = queue; } PreloadLinkHandler.prototype.register = function (el) { var _this = this; this.queue.add(el.urlTree); requestIdleCallback(function () { return _this.loader.preload().subscribe(function () { return void 0; }); }); }; PreloadLinkHandler.prototype.unregister = function (_) { }; PreloadLinkHandler.prototype.supported = function () { return true; }; PreloadLinkHandler = tslib_1.__decorate([ Injectable(), tslib_1.__metadata("design:paramtypes", [RouterPreloader, PrefetchRegistry]) ], PreloadLinkHandler); return PreloadLinkHandler; }()); export { PreloadLinkHandler }; export { ɵ0, ɵ1, ɵ2 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AcHNodXJ5Z2luL25neC1xdWlja2xpbmsvIiwic291cmNlcyI6WyJzcmMvbGluay1oYW5kbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7U0FtQnpELFVBQVMsRUFBWTtJQUNuQixJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDekIsT0FBTyxVQUFVLENBQUM7UUFDaEIsRUFBRSxDQUFDO1lBQ0QsVUFBVSxFQUFFLEtBQUs7WUFDakIsYUFBYSxFQUFFO2dCQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMsT0FDRCxjQUFPLENBQUM7QUFkZCxJQUFNLG1CQUFtQixHQUN2QixPQUFPLE1BQU0sS0FBSyxXQUFXO0lBQzNCLENBQUMsQ0FBRSxNQUFjLENBQUMsbUJBQW1CLE1BV2xDO0lBQ0gsQ0FBQyxHQUFTLENBQUM7QUFFZixJQUFNLGlCQUFpQixHQUFHO0lBQ3hCLE9BQUEsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsTUFBYyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxLQUFLO0FBQTlFLENBQThFLENBQUM7O0FBRWpGLE1BQU0sQ0FBQyxJQUFNLFdBQVcsR0FBRyxJQUFJLGNBQWMs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Q0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsY0FBTSxPQUFBLEtBQUssQ0FBQyxFQUFOLENBQU0sQ0FBQyxFQUE3QyxDQUE2QyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELHVDQUFVLEdBQVYsVUFBVyxDQUFnQixJQUFHLENBQUM7SUFFL0Isc0NBQVMsR0FBVDtRQUNFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQVpVLGtCQUFrQjtRQUQ5QixVQUFVLEVBQUU7aURBRWlCLGVBQWUsRUFBaUIsZ0JBQWdCO09BRGpFLGtCQUFrQixDQWE5QjtJQUFELHlCQUFDO0NBQUEsQUFiRCxJQWFDO1NBYlksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlua0RpcmVjdGl2ZSB9IGZyb20gJy4vbGluay5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUm91dGVyUHJlbG9hZGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IExpbmtIYW5kbGVyU3RyYXRlZ3kgfSBmcm9tICcuL2xpbmstaGFuZGxlci1zdHJhdGVneSc7XG5pbXBvcnQgeyBQcmVmZXRjaFJlZ2lzdHJ5IH0gZnJvbSAnLi9wcmVmZXRjaC1yZWdpc3RyeS5zZXJ2aWNlJztcblxudHlwZSBSZXF1ZXN0SWRsZUNhbGxiYWNrSGFuZGxlID0gYW55O1xudHlwZSBSZXF1ZXN0SWRsZUNhbGxiYWNrT3B0aW9ucyA9IHtcbiAgdGltZW91dDogbnVtYmVyO1xufTtcbnR5cGUgUmVxdWVzdElkbGVDYWxsYmFja0RlYWRsaW5lID0ge1xuICByZWFkb25seSBkaWRUaW1lb3V0OiBib29sZWFuO1xuICB0aW1lUmVtYWluaW5nOiAoKCkgPT4gbnVtYmVyKTtcbn07XG5cbnR5cGUgUmVxdWVzdElkbGVDYWxsYmFjayA9ICgoXG4gIGNhbGxiYWNrOiAoKGRlYWRsaW5lOiBSZXF1ZXN0SWRsZUNhbGxiYWNrRGVhZGxpbmUpID0+IHZvaWQpLFxuICBvcHRzPzogUmVxdWVzdElkbGVDYWxsYmFja09wdGlvbnNcbikgPT4gUmVxdWVzdElkbGVDYWxsYmFja0hhbmRsZSk7XG5cbmNvbnN0IHJlcXVlc3RJZGxlQ2FsbGJhY2s6IFJlcXVlc3RJZGxlQ2FsbGJhY2sgPVxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgID8gKHdpbmRvdyBhcyBhbnkpLnJlcXVlc3RJZGxlQ2FsbGJhY2sgfHxcbiAgICAgIGZ1bmN0aW9uKGNiOiBGdW5jdGlvbikge1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGNiKHtcbiAgICAgICAgICAgIGRpZFRpbWVvdXQ6IGZhbHNlLFxuICAgICAgICAgICAgdGltZVJlbWFpbmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCA1MCAtIChEYXRlLm5vdygpIC0gc3RhcnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMSk7XG4gICAgICB9XG4gICAgOiAoKSA9PiB7fTtcblxuY29uc3Qgb2JzZXJ2ZXJTdXBwb3J0ZWQgPSAoKSA9PlxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/ICEhKHdpbmRvdyBhcyBhbnkpLkludGVyc2VjdGlvbk9ic2VydmVyIDogZmFsc2U7XG5cbmV4cG9ydCBjb25zdCBMaW5rSGFuZGxlciA9IG5ldyBJbmplY3Rpb25Ub2tlbignTGlua0hhbmRsZXInKTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9ic2VydmFibGVMaW5rSGFuZGxlciBpbXBsZW1lbnRzIExpbmtIYW5kbGVyU3RyYXRlZ3kge1xuICBwcml2YXRlIGVsZW1lbnRMaW5rID0gbmV3IE1hcDxFbGVtZW50LCBMaW5rRGlyZWN0aXZlPigpO1xuICBwcml2YXRlIG9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGwgPSBvYnNlcnZlclN1cHBvcnRlZCgpXG4gICAgPyBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gZW50cnkudGFyZ2V0IGFzIEhUTUxBbmNob3JFbGVtZW50O1xuXG4gICAgICAgICAgICBjb25zdCByb3V0ZXJMaW5rID0gdGhpcy5lbGVtZW50TGluay5nZXQobGluayk7XG4gICAgICAgICAgICBpZiAoICFyb3V0ZXJMaW5rIHx8ICFyb3V0ZXJMaW5rLnVybFRyZWUgKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMucXVldWUuYWRkKHJvdXRlckxpbmsudXJsVHJlZSk7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLnVub2JzZXJ2ZShsaW5rKTtcbiAgICAgICAgICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRlci5wcmVsb2FkKCkuc3Vic2NyaWJlKCgpID0+IHZvaWQgMCk7XG4gICAgICAgICAgICAgIHRoaXMucXVldWUucmVtb3ZlKHJvdXRlckxpbmsudXJsVHJlZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICA6IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsb2FkZXI6IFJvdXRlclByZWxvYWRlciwgcHJpdmF0ZSBxdWV1ZTogUHJlZmV0Y2hSZWdpc3RyeSwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge31cblxuICByZWdpc3RlcihlbDogTGlua0RpcmVjdGl2ZSkge1xuICAgIHRoaXMuZWxlbWVudExpbmsuc2V0KGVsLmVsZW1lbnQsIGVsKTtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZWwuZWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBGaXJzdCBjYWxsIHRvIHVucmVnaXN0ZXIgd2lsbCBub3QgaGl0IHRoaXMuXG4gIHVucmVnaXN0ZXIoZWw6IExpbmtEaXJlY3RpdmUpIHtcbiAgICBpZiAodGhpcy5lbGVtZW50TGluay5oYXMoZWwuZWxlbWVudCkpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXIudW5vYnNlcnZlKGVsLmVsZW1lbnQpO1xuICAgICAgdGhpcy5lbGVtZW50TGluay5kZWxldGUoZWwuZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgc3VwcG9ydGVkKCkge1xuICAgIHJldHVybiBvYnNlcnZlclN1cHBvcnRlZCgpO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQcmVsb2FkTGlua0hhbmRsZXIgaW1wbGVtZW50cyBMaW5rSGFuZGxlclN0cmF0ZWd5IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsb2FkZXI6IFJvdXRlclByZWxvYWRlciwgcHJpdmF0ZSBxdWV1ZTogUHJlZmV0Y2hSZWdpc3RyeSkge31cblxuICByZWdpc3RlcihlbDogTGlua0RpcmVjdGl2ZSkge1xuICAgIHRoaXMucXVldWUuYWRkKGVsLnVybFRyZWUpO1xuICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT4gdGhpcy5sb2FkZXIucHJlbG9hZCgpLnN1YnNjcmliZSgoKSA9PiB2b2lkIDApKTtcbiAgfVxuXG4gIHVucmVnaXN0ZXIoXzogTGlua0RpcmVjdGl2ZSkge31cblxuICBzdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==