UNPKG

@pshurygin/ngx-quicklink

Version:
89 lines 11.4 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'; const ɵ0 = function (cb) { const start = Date.now(); return setTimeout(function () { cb({ didTimeout: false, timeRemaining: function () { return Math.max(0, 50 - (Date.now() - start)); } }); }, 1); }, ɵ1 = () => { }; const requestIdleCallback = typeof window !== 'undefined' ? window.requestIdleCallback || ɵ0 : ɵ1; const observerSupported = () => typeof window !== 'undefined' ? !!window.IntersectionObserver : false; const ɵ2 = observerSupported; export const LinkHandler = new InjectionToken('LinkHandler'); let ObservableLinkHandler = class ObservableLinkHandler { constructor(loader, queue, ngZone) { this.loader = loader; this.queue = queue; this.ngZone = ngZone; this.elementLink = new Map(); this.observer = observerSupported() ? new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) { const link = entry.target; const routerLink = this.elementLink.get(link); if (!routerLink || !routerLink.urlTree) return; this.queue.add(routerLink.urlTree); this.observer.unobserve(link); requestIdleCallback(() => { this.loader.preload().subscribe(() => void 0); this.queue.remove(routerLink.urlTree); }); } }); }) : null; } register(el) { this.elementLink.set(el.element, el); this.ngZone.runOutsideAngular(() => { this.observer.observe(el.element); }); } // First call to unregister will not hit this. unregister(el) { if (this.elementLink.has(el.element)) { this.observer.unobserve(el.element); this.elementLink.delete(el.element); } } supported() { return observerSupported(); } }; ObservableLinkHandler = tslib_1.__decorate([ Injectable(), tslib_1.__metadata("design:paramtypes", [RouterPreloader, PrefetchRegistry, NgZone]) ], ObservableLinkHandler); export { ObservableLinkHandler }; let PreloadLinkHandler = class PreloadLinkHandler { constructor(loader, queue) { this.loader = loader; this.queue = queue; } register(el) { this.queue.add(el.urlTree); requestIdleCallback(() => this.loader.preload().subscribe(() => void 0)); } unregister(_) { } supported() { return true; } }; PreloadLinkHandler = tslib_1.__decorate([ Injectable(), tslib_1.__metadata("design:paramtypes", [RouterPreloader, PrefetchRegistry]) ], PreloadLinkHandler); export { PreloadLinkHandler }; export { ɵ0, ɵ1, ɵ2 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AcHNodXJ5Z2luL25neC1xdWlja2xpbmsvIiwic291cmNlcyI6WyJzcmMvbGluay1oYW5kbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7V0FtQnpELFVBQVMsRUFBWTtJQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDekIsT0FBTyxVQUFVLENBQUM7UUFDaEIsRUFBRSxDQUFDO1lBQ0QsVUFBVSxFQUFFLEtBQUs7WUFDakIsYUFBYSxFQUFFO2dCQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMsT0FDRCxHQUFHLEVBQUUsR0FBRSxDQUFDO0FBZGQsTUFBTSxtQkFBbUIsR0FDdkIsT0FBTyxNQUFNLEtBQUssV0FBVztJQUMzQixDQUFDLENBQUUsTUFBYyxDQUFDLG1CQUFtQixNQVdsQztJQUNILENBQUMsR0FBUyxDQUFDO0FBRWYsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsQ0FDN0IsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsTUFBYyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7O0FBRWpGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLGNB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LElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsVUFBVSxDQUFDLENBQWdCLElBQUcsQ0FBQztJQUUvQixTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0YsQ0FBQTtBQWJZLGtCQUFrQjtJQUQ5QixVQUFVLEVBQUU7NkNBRWlCLGVBQWUsRUFBaUIsZ0JBQWdCO0dBRGpFLGtCQUFrQixDQWE5QjtTQWJZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpbmtEaXJlY3RpdmUgfSBmcm9tICcuL2xpbmsuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJvdXRlclByZWxvYWRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBMaW5rSGFuZGxlclN0cmF0ZWd5IH0gZnJvbSAnLi9saW5rLWhhbmRsZXItc3RyYXRlZ3knO1xuaW1wb3J0IHsgUHJlZmV0Y2hSZWdpc3RyeSB9IGZyb20gJy4vcHJlZmV0Y2gtcmVnaXN0cnkuc2VydmljZSc7XG5cbnR5cGUgUmVxdWVzdElkbGVDYWxsYmFja0hhbmRsZSA9IGFueTtcbnR5cGUgUmVxdWVzdElkbGVDYWxsYmFja09wdGlvbnMgPSB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbn07XG50eXBlIFJlcXVlc3RJZGxlQ2FsbGJhY2tEZWFkbGluZSA9IHtcbiAgcmVhZG9ubHkgZGlkVGltZW91dDogYm9vbGVhbjtcbiAgdGltZVJlbWFpbmluZzogKCgpID0+IG51bWJlcik7XG59O1xuXG50eXBlIFJlcXVlc3RJZGxlQ2FsbGJhY2sgPSAoKFxuICBjYWxsYmFjazogKChkZWFkbGluZTogUmVxdWVzdElkbGVDYWxsYmFja0RlYWRsaW5lKSA9PiB2b2lkKSxcbiAgb3B0cz86IFJlcXVlc3RJZGxlQ2FsbGJhY2tPcHRpb25zXG4pID0+IFJlcXVlc3RJZGxlQ2FsbGJhY2tIYW5kbGUpO1xuXG5jb25zdCByZXF1ZXN0SWRsZUNhbGxiYWNrOiBSZXF1ZXN0SWRsZUNhbGxiYWNrID1cbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/ICh3aW5kb3cgYXMgYW55KS5yZXF1ZXN0SWRsZUNhbGxiYWNrIHx8XG4gICAgICBmdW5jdGlvbihjYjogRnVuY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBjYih7XG4gICAgICAgICAgICBkaWRUaW1lb3V0OiBmYWxzZSxcbiAgICAgICAgICAgIHRpbWVSZW1haW5pbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgNTAgLSAoRGF0ZS5ub3coKSAtIHN0YXJ0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfVxuICAgIDogKCkgPT4ge307XG5cbmNvbnN0IG9ic2VydmVyU3VwcG9ydGVkID0gKCkgPT5cbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyAhISh3aW5kb3cgYXMgYW55KS5JbnRlcnNlY3Rpb25PYnNlcnZlciA6IGZhbHNlO1xuXG5leHBvcnQgY29uc3QgTGlua0hhbmRsZXIgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ0xpbmtIYW5kbGVyJyk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmxlTGlua0hhbmRsZXIgaW1wbGVtZW50cyBMaW5rSGFuZGxlclN0cmF0ZWd5IHtcbiAgcHJpdmF0ZSBlbGVtZW50TGluayA9IG5ldyBNYXA8RWxlbWVudCwgTGlua0RpcmVjdGl2ZT4oKTtcbiAgcHJpdmF0ZSBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gb2JzZXJ2ZXJTdXBwb3J0ZWQoKVxuICAgID8gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICBlbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgICAgY29uc3QgbGluayA9IGVudHJ5LnRhcmdldCBhcyBIVE1MQW5jaG9yRWxlbWVudDtcblxuICAgICAgICAgICAgY29uc3Qgcm91dGVyTGluayA9IHRoaXMuZWxlbWVudExpbmsuZ2V0KGxpbmspO1xuICAgICAgICAgICAgaWYgKCAhcm91dGVyTGluayB8fCAhcm91dGVyTGluay51cmxUcmVlICkgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLnF1ZXVlLmFkZChyb3V0ZXJMaW5rLnVybFRyZWUpO1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlci51bm9ic2VydmUobGluayk7XG4gICAgICAgICAgICByZXF1ZXN0SWRsZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkZXIucHJlbG9hZCgpLnN1YnNjcmliZSgoKSA9PiB2b2lkIDApO1xuICAgICAgICAgICAgICB0aGlzLnF1ZXVlLnJlbW92ZShyb3V0ZXJMaW5rLnVybFRyZWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9hZGVyOiBSb3V0ZXJQcmVsb2FkZXIsIHByaXZhdGUgcXVldWU6IFByZWZldGNoUmVnaXN0cnksIHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHt9XG5cbiAgcmVnaXN0ZXIoZWw6IExpbmtEaXJlY3RpdmUpIHtcbiAgICB0aGlzLmVsZW1lbnRMaW5rLnNldChlbC5lbGVtZW50LCBlbCk7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGVsLmVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRmlyc3QgY2FsbCB0byB1bnJlZ2lzdGVyIHdpbGwgbm90IGhpdCB0aGlzLlxuICB1bnJlZ2lzdGVyKGVsOiBMaW5rRGlyZWN0aXZlKSB7XG4gICAgaWYgKHRoaXMuZWxlbWVudExpbmsuaGFzKGVsLmVsZW1lbnQpKSB7XG4gICAgICB0aGlzLm9ic2VydmVyLnVub2JzZXJ2ZShlbC5lbGVtZW50KTtcbiAgICAgIHRoaXMuZWxlbWVudExpbmsuZGVsZXRlKGVsLmVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gb2JzZXJ2ZXJTdXBwb3J0ZWQoKTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUHJlbG9hZExpbmtIYW5kbGVyIGltcGxlbWVudHMgTGlua0hhbmRsZXJTdHJhdGVneSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9hZGVyOiBSb3V0ZXJQcmVsb2FkZXIsIHByaXZhdGUgcXVldWU6IFByZWZldGNoUmVnaXN0cnkpIHt9XG5cbiAgcmVnaXN0ZXIoZWw6IExpbmtEaXJlY3RpdmUpIHtcbiAgICB0aGlzLnF1ZXVlLmFkZChlbC51cmxUcmVlKTtcbiAgICByZXF1ZXN0SWRsZUNhbGxiYWNrKCgpID0+IHRoaXMubG9hZGVyLnByZWxvYWQoKS5zdWJzY3JpYmUoKCkgPT4gdm9pZCAwKSk7XG4gIH1cblxuICB1bnJlZ2lzdGVyKF86IExpbmtEaXJlY3RpdmUpIHt9XG5cbiAgc3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=