ngx-foresight
Version:
<p align="center"> <img src="https://akshykhade.github.io/ngx-foresight/logo.svg" width="305px"> </p> <br/> <p align="center"> <a href="https://www.npmjs.com/package/ngx-foresight"> <img src="https://img.shields.io/npm/v/ngx-foresight.svg?style=fo
1 lines • 14.3 kB
Source Map (JSON)
{"version":3,"file":"ngx-foresight.mjs","sources":["../../../projects/ngx-foresight/src/lib/prefetch-registry.service.ts","../../../projects/ngx-foresight/src/lib/foresightjs.directive.ts","../../../projects/ngx-foresight/src/lib/utils/find-path.ts","../../../projects/ngx-foresight/src/lib/foresightjsStrategy.ts","../../../projects/ngx-foresight/src/public-api.ts","../../../projects/ngx-foresight/src/ngx-foresight.ts"],"sourcesContent":["import {\n Router,\n UrlTree,\n Params,\n UrlSegmentGroup,\n UrlSegment,\n PRIMARY_OUTLET,\n} from '@angular/router';\nimport { Injectable } from '@angular/core';\n\n// Using a global registry so we can keep it populated across lazy-loaded\n// modules with different parent injectors which create instance of the registry.\nconst globalRegistry: UrlTree[] = [];\n\n@Injectable({ providedIn: 'root' })\nexport class PrefetchRegistry {\n private trees: UrlTree[] = globalRegistry;\n constructor(private router: Router) {}\n\n add(tree: UrlTree) {\n this.trees.push(tree);\n }\n\n shouldPrefetch(url: string) {\n const tree = this.router.parseUrl(url);\n return this.trees.some(containsTree.bind(null, tree));\n }\n}\n\nfunction containsQueryParams(container: Params, containee: Params): boolean {\n // TODO: This does not handle array params correctly.\n return (\n Object.keys(containee).length <= Object.keys(container).length &&\n Object.keys(containee).every((key) => containee[key] === container[key])\n );\n}\n\nexport function containsTree(containee: UrlTree, container: UrlTree): boolean {\n return (\n containsQueryParams(container.queryParams, containee.queryParams) &&\n containsSegmentGroup(\n container.root,\n containee.root,\n containee.root.segments\n )\n );\n}\n\nfunction containsSegmentGroup(\n container: UrlSegmentGroup,\n containee: UrlSegmentGroup,\n containeePaths: UrlSegment[]\n): boolean {\n if (container.segments.length > containeePaths.length) {\n const current = container.segments.slice(0, containeePaths.length);\n if (!equalPath(current, containeePaths)) return false;\n if (containee.hasChildren()) return false;\n return true;\n } else if (container.segments.length === containeePaths.length) {\n if (!equalPath(container.segments, containeePaths)) return false;\n if (!containee.hasChildren()) return true;\n\n for (const c in containee.children) {\n if (!container.children[c]) break;\n if (\n containsSegmentGroup(\n container.children[c],\n containee.children[c],\n containee.children[c].segments\n )\n )\n return true;\n }\n return false;\n } else {\n const current = containeePaths.slice(0, container.segments.length);\n const next = containeePaths.slice(container.segments.length);\n if (!equalPath(container.segments, current)) return false;\n if (!container.children[PRIMARY_OUTLET]) return false;\n return containsSegmentGroup(\n container.children[PRIMARY_OUTLET],\n containee,\n next\n );\n }\n}\n\nexport function equalPath(as: UrlSegment[], bs: UrlSegment[]): boolean {\n if (as.length !== bs.length) return false;\n return as.every(\n (a, i) =>\n a.path === bs[i].path ||\n a.path.startsWith(':') ||\n bs[i].path.startsWith(':')\n );\n}\n","import { Directive, ElementRef, inject, Input } from '@angular/core';\nimport { Router, RouterPreloader } from '@angular/router';\nimport { ForesightManager } from 'js.foresight';\nimport { PrefetchRegistry } from './prefetch-registry.service';\n\n@Directive({\n selector: '[foresightjs],[registerForesight]',\n standalone: true,\n})\nexport class ForesightjsDirective {\n router = inject(Router);\n registry = inject(PrefetchRegistry);\n preloader = inject(RouterPreloader);\n @Input() routerLink: string = '';\n @Input() href: string = '';\n @Input('registerForesight') name: string | undefined = undefined;\n\n private unregisterRef: () => void = () => {};\n\n constructor(private elementRef: ElementRef) {}\n\n ngOnInit() {\n const { unregister } = ForesightManager.instance.register({\n element: this.elementRef.nativeElement,\n name: this.name,\n callback: () => {\n if (!this.routerLink && !this.href) {\n return;\n }\n const tree = this.router.parseUrl(this.routerLink || this.href);\n this.registry.add(tree);\n this.preloader.preload().subscribe(() => void 0);\n },\n });\n this.unregisterRef = unregister;\n }\n\n ngOnDestroy() {\n this.unregisterRef();\n }\n}\n","import { PRIMARY_OUTLET, Route } from '@angular/router';\n\nexport const findPath = (config: Route[], route: Route): string => {\n config = config.slice();\n const parent = new Map<Route, Route>();\n const visited = new Set<Route>();\n while (config.length) {\n const el = config.shift();\n if (!el) {\n continue;\n }\n visited.add(el);\n if (el === route) break;\n let children = el.children || [];\n const current = (el as any)._loadedRoutes || [];\n for (const route of current) {\n if (route && route.children) {\n children = children.concat(route.children);\n }\n }\n children.forEach((r: Route) => {\n if (visited.has(r)) return;\n parent.set(r, el);\n config.push(r);\n });\n }\n let path = '';\n let current: Route | undefined = route;\n\n while (current) {\n if (isPrimaryRoute(current)) {\n path = `/${current.path}${path}`;\n } else {\n path = `/(${current.outlet}:${current.path}${path})`;\n }\n current = parent.get(current);\n }\n\n // For routes with empty paths (the resulted string will look like `///section/sub-section`)\n return path.replace(/[\\/]+/, '/');\n};\n\nfunction isPrimaryRoute(route: Route) {\n return route.outlet === PRIMARY_OUTLET || !route.outlet;\n}\n","import { Injectable } from '@angular/core';\nimport { PreloadingStrategy, Route, Router } from '@angular/router';\nimport { EMPTY } from 'rxjs';\nimport { findPath } from './utils/find-path';\nimport { PrefetchRegistry } from './prefetch-registry.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ForesightjsStrategy implements PreloadingStrategy {\n loading = new Set<Route>();\n\n constructor(private registry: PrefetchRegistry, private router: Router) {}\n\n preload(route: Route, load: Function) {\n if (this.loading.has(route)) {\n // Don't preload the same route twice\n return EMPTY;\n }\n\n // Prevent from preloading\n if (route.data && route.data['preload'] === false) {\n return EMPTY;\n }\n const fullPath = findPath(this.router.config, route);\n if (this.registry.shouldPrefetch(fullPath)) {\n this.loading.add(route);\n return load();\n }\n\n return EMPTY;\n }\n}\n","/*\n * Public API Surface of ngx-foresight\n */\n\nexport * from './lib/foresightjs.directive';\nexport * from './lib/foresightjsStrategy';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PrefetchRegistry","i2"],"mappings":"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"}