@ngrdt/router 0.0.17 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +254 -254
  2. package/fesm2022/ngrdt-router.mjs +90 -23
  3. package/fesm2022/ngrdt-router.mjs.map +1 -1
  4. package/index.d.ts +416 -12
  5. package/package.json +1 -3
  6. package/esm2022/index.mjs +0 -13
  7. package/esm2022/lib/directives/rdt-any-route-active.directive.mjs +0 -126
  8. package/esm2022/lib/directives/rdt-router-link.directive.mjs +0 -69
  9. package/esm2022/lib/guards/global-route-guard.service.mjs +0 -51
  10. package/esm2022/lib/guards/prevent-data-loss.guard.mjs +0 -7
  11. package/esm2022/lib/rdt-route/constants.mjs +0 -5
  12. package/esm2022/lib/rdt-route/rdt-angular-route.mjs +0 -196
  13. package/esm2022/lib/rdt-route/rdt-route-builder.mjs +0 -112
  14. package/esm2022/lib/rdt-route/rdt-route.mjs +0 -308
  15. package/esm2022/lib/rdt-route/utils.mjs +0 -15
  16. package/esm2022/lib/services/rdt-cannot-be-entered.token.mjs +0 -7
  17. package/esm2022/lib/services/rdt-confirm-data-loss.service.mjs +0 -11
  18. package/esm2022/lib/services/rdt-router.service.mjs +0 -161
  19. package/esm2022/lib/services/rdt-routes.token.mjs +0 -3
  20. package/esm2022/ngrdt-router.mjs +0 -5
  21. package/lib/directives/rdt-any-route-active.directive.d.ts +0 -34
  22. package/lib/directives/rdt-router-link.directive.d.ts +0 -23
  23. package/lib/guards/global-route-guard.service.d.ts +0 -10
  24. package/lib/guards/prevent-data-loss.guard.d.ts +0 -2
  25. package/lib/rdt-route/constants.d.ts +0 -3
  26. package/lib/rdt-route/rdt-angular-route.d.ts +0 -29
  27. package/lib/rdt-route/rdt-route-builder.d.ts +0 -46
  28. package/lib/rdt-route/rdt-route.d.ts +0 -138
  29. package/lib/rdt-route/utils.d.ts +0 -21
  30. package/lib/services/rdt-cannot-be-entered.token.d.ts +0 -7
  31. package/lib/services/rdt-confirm-data-loss.service.d.ts +0 -9
  32. package/lib/services/rdt-router.service.d.ts +0 -61
  33. package/lib/services/rdt-routes.token.d.ts +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"ngrdt-router.mjs","sources":["../../../../@ngrdt/router/src/lib/services/rdt-cannot-be-entered.token.ts","../../../../@ngrdt/router/src/lib/services/rdt-confirm-data-loss.service.ts","../../../../@ngrdt/router/src/lib/rdt-route/utils.ts","../../../../@ngrdt/router/src/lib/services/rdt-routes.token.ts","../../../../@ngrdt/router/src/lib/services/rdt-router.service.ts","../../../../@ngrdt/router/src/lib/rdt-route/constants.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-angular-route.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-route.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-route-builder.ts","../../../../@ngrdt/router/src/lib/directives/rdt-any-route-active.directive.ts","../../../../@ngrdt/router/src/lib/directives/rdt-router-link.directive.ts","../../../../@ngrdt/router/src/lib/guards/prevent-data-loss.guard.ts","../../../../@ngrdt/router/src/lib/guards/global-route-guard.service.ts","../../../../@ngrdt/router/src/ngrdt-router.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { RdtRedirectFn, RdtRedirectReturnType } from '../rdt-route/utils';\r\n\r\n/**\r\n * Injection token that defines behavior when route cannot be entered (canBeEntered returns false).\r\n * If value is undefined, route will be redirected to ''.\r\n */\r\nexport const RDT_CANNOT_BE_ENTERED_PROVIDER = new InjectionToken<\r\n RdtRedirectFn | RdtRedirectReturnType\r\n>('RDT_CANNOT_BE_ENTERED', { factory: () => undefined, providedIn: 'root' });\r\n","import { InjectionToken } from '@angular/core';\r\nimport { defer, Observable, of } from 'rxjs';\r\n\r\nexport const RDT_CONFIRM_DATA_LOSS_SERVICE =\r\n new InjectionToken<RdtConfirmDataLossService>(\r\n 'RDT_CONFIRM_DATA_LOSS_SERVICE',\r\n { factory: () => new RdtConfirmDataLossServiceAlert() }\r\n );\r\n\r\nexport abstract class RdtConfirmDataLossService {\r\n abstract confirmDataLoss(): Observable<boolean>;\r\n}\r\n\r\nexport class RdtConfirmDataLossServiceAlert extends RdtConfirmDataLossService {\r\n override confirmDataLoss(): Observable<boolean> {\r\n return defer(() =>\r\n of(confirm('Are you sure you want to leave this page?'))\r\n );\r\n }\r\n}\r\n","import { RdtRoute } from './rdt-route';\r\n\r\nexport type ParamTypeMap<T> = {\r\n [key in keyof T]?: 'string' | 'number';\r\n};\r\n\r\nexport interface ParamMapping {\r\n urlName: string;\r\n tableName: string;\r\n}\r\n\r\nexport interface StaticRouteParams {\r\n [absolutePath: string]: object;\r\n}\r\n\r\nexport type RdtRedirectReturnType = string | void | undefined;\r\n\r\nexport type RdtRedirectFn = (\r\n currentPath: string,\r\n targetPath: string,\r\n targetRoute: RdtRoute\r\n) => RdtRedirectReturnType;\r\n\r\nexport class RdtReadonlyParameters {\r\n constructor(protected readonly params: StaticRouteParams = {}) {}\r\n\r\n get<T extends object>(route: RdtRoute<T>): Partial<T> | null {\r\n return (this.params[route.absolutePath] as Partial<T>) ?? null;\r\n }\r\n}\r\n\r\nexport class RdtParameters extends RdtReadonlyParameters {\r\n set<T extends object>(route: RdtRoute<T>, params: Partial<T>) {\r\n this.params[route.absolutePath] = params;\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\n\r\nexport const RDT_ROUTES_PROVIDER = new InjectionToken<RdtRoute[]>(\r\n 'RDT_ROUTES_PROVIDER'\r\n);\r\n","import { Location, PlatformLocation } from '@angular/common';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { NavigationEnd, Params, Router } from '@angular/router';\r\nimport { RdtStringUtils } from '@ngrdt/utils';\r\nimport { filter, Observable, take } from 'rxjs';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\nimport { RdtReadonlyParameters } from '../rdt-route/utils';\r\nimport { RDT_ROUTES_PROVIDER } from './rdt-routes.token';\r\n\r\nexport interface RdtNavigateExtras {\r\n state?: Params;\r\n query?: Params;\r\n target?: '_blank' | '_self' | '_parent' | '_top';\r\n replaceUrl?: boolean;\r\n}\r\n\r\nconst DEFAULT_TARGET = '_self';\r\nconst RDT_STATE_PARAMS_KEY = 'RdtStateParams';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RdtRouterService {\r\n readonly allRoutes = inject(RDT_ROUTES_PROVIDER, { optional: true });\r\n\r\n private readonly location = inject(Location);\r\n private readonly router = inject(Router);\r\n private readonly baseHref = inject(PlatformLocation).getBaseHrefFromDOM();\r\n\r\n private _previousUrl: string | null = null;\r\n private _currentUrl: string | null = null;\r\n\r\n get previousUrl() {\r\n return this._previousUrl;\r\n }\r\n\r\n get currentUrl() {\r\n return this._currentUrl;\r\n }\r\n\r\n parsePreviousUrl() {\r\n return this._previousUrl ? this.parseAbsoluteUrl(this._previousUrl) : null;\r\n }\r\n\r\n parseCurrentUrl() {\r\n return this._currentUrl ? this.parseAbsoluteUrl(this._currentUrl) : null;\r\n }\r\n\r\n readonly navigationEnd$ = this.router.events.pipe(\r\n filter((e) => e instanceof NavigationEnd)\r\n ) as Observable<NavigationEnd>;\r\n\r\n readonly nextNavigationEnd$ = this.navigationEnd$.pipe(take(1));\r\n\r\n constructor() {\r\n if (this.allRoutes === null) {\r\n console.warn(\r\n 'All routes not provided. Make sure to provide RDT_ROUTES_PROVIDER with RdtRoute[].'\r\n );\r\n this.allRoutes = [];\r\n }\r\n\r\n this.navigationEnd$.subscribe((e) => {\r\n this._previousUrl = this._currentUrl;\r\n this._currentUrl = e.url;\r\n });\r\n }\r\n\r\n /**\r\n * @returns window.history.state extended by state parameters passed from parent window.\r\n */\r\n getHistoryState() {\r\n if (\r\n 'RdtStateParams' in window &&\r\n typeof window[RDT_STATE_PARAMS_KEY] === 'object'\r\n ) {\r\n return { ...window[RDT_STATE_PARAMS_KEY], ...(history.state ?? {}) };\r\n } else {\r\n return history.state ?? {};\r\n }\r\n }\r\n\r\n /**\r\n * Navigates to the specified route.\r\n * @param link Route to navigate to.\r\n * @param params Parameter of route passed as first argument.\r\n * @param extras Allows you to specify additional parameters for navigation. These extras have higher priority than those defined in the route.\r\n * @returns Promise that resolves when navigation is complete.\r\n */\r\n navigate<T extends object>(\r\n link: RdtRoute<T>,\r\n params?: Partial<T>,\r\n extras?: RdtNavigateExtras\r\n ) {\r\n const url = params\r\n ? link.createAbsoluteUrl(params)\r\n : link.createAbsoluteUrl();\r\n\r\n const target = extras?.target ?? DEFAULT_TARGET;\r\n const queryParams = extras?.query ?? link.queryParams;\r\n const stateParams = extras?.state ?? link.stateParams;\r\n\r\n if (target === '_self') {\r\n return this.router.navigate([url], {\r\n queryParams: queryParams,\r\n state: stateParams,\r\n replaceUrl: extras?.replaceUrl,\r\n });\r\n }\r\n\r\n const absolutePath = RdtStringUtils.createAbsoluteUrl(url, this.baseHref);\r\n const pathWithParams = RdtStringUtils.appendQueryParams(\r\n absolutePath,\r\n queryParams\r\n );\r\n const win = window.open(pathWithParams, target);\r\n if (win) {\r\n (win as any)[RDT_STATE_PARAMS_KEY] = stateParams;\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n navigateHome(extras?: RdtNavigateExtras) {\r\n return this.router.navigateByUrl(\r\n RdtStringUtils.appendQueryParams('/', extras?.query ?? {}),\r\n {\r\n state: extras?.state,\r\n replaceUrl: extras?.replaceUrl,\r\n }\r\n );\r\n }\r\n\r\n navigateBack(extras?: RdtNavigateExtras) {\r\n const parsed = this.parseAbsoluteUrl();\r\n if (parsed) {\r\n let route: RdtRoute | null = parsed.route.withStaticParams(parsed.params);\r\n do {\r\n route = route.parent;\r\n } while (route && route.entryDisabled);\r\n\r\n // In case route has no ancestor with allowed entry,\r\n if (!route) {\r\n return this.navigateHome(extras);\r\n }\r\n if (extras) {\r\n if (extras.query) {\r\n route = route.withQueryParams(extras.query);\r\n }\r\n if (extras.state) {\r\n route = route.withStateParams(extras.state);\r\n }\r\n }\r\n return this.navigate(route, extras);\r\n } else {\r\n console.warn(\r\n `Cannot go back from ${this.location.path()} because no route matches current url`\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * This method will try to find matching route for given absolute URL, extract its parameters and return them.\r\n * If no route matches the URL, it returns null. Parameters are extracted only for the last matching route, not ancestors.\r\n * @param url Absolute URL to parse (e.g. '/home/details/123?query=abc').\r\n * @returns Object containing the matching route and its parameters, or null if no route is matching.\r\n */\r\n parseAbsoluteUrl(url = this.location.path()) {\r\n if (this.allRoutes) {\r\n for (const route of this.allRoutes) {\r\n const params = route.parseAbsoluteUrl(url);\r\n if (params) {\r\n return { route, params };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n extractAllParams(currentRoute?: RdtRoute): RdtReadonlyParameters | null {\r\n if (!currentRoute) {\r\n const parsed = this.parseAbsoluteUrl();\r\n if (!parsed) {\r\n console.warn('No route matches current url.');\r\n return new RdtReadonlyParameters();\r\n }\r\n currentRoute = parsed.route;\r\n }\r\n const url = this.location.path();\r\n return currentRoute.parseAbsoluteUrl(url);\r\n }\r\n\r\n isParentOfCurrentLocation(route: RdtRoute) {\r\n console.log(this.parseAbsoluteUrl());\r\n return true;\r\n }\r\n\r\n removeQueryParams(...paramNames: string[]) {\r\n const regex = new RegExp(`[?&](${paramNames.join('|')})=[^&]*`, 'g');\r\n\r\n return history.replaceState(\r\n history.state,\r\n '',\r\n location.pathname + location.search.replace(regex, '').replace(/^&/, '?')\r\n );\r\n }\r\n}\r\n","export enum RdtNavigationSource {\r\n BREADCRUMB = 'breadcrumb',\r\n}\r\n","import { Location } from '@angular/common';\r\nimport {\r\n EnvironmentInjector,\r\n EnvironmentProviders,\r\n inject,\r\n Provider,\r\n runInInjectionContext,\r\n Type,\r\n} from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n CanActivateChildFn,\r\n CanActivateFn,\r\n CanDeactivateFn,\r\n CanMatchFn,\r\n Data,\r\n LoadChildrenCallback,\r\n ResolveFn,\r\n Route,\r\n Router,\r\n RouterStateSnapshot,\r\n RunGuardsAndResolvers,\r\n UrlSegment,\r\n} from '@angular/router';\r\nimport { RDT_CANNOT_BE_ENTERED_PROVIDER } from '../services/rdt-cannot-be-entered.token';\r\nimport { RdtNavigationSource } from './constants';\r\nimport { RdtRoute } from './rdt-route';\r\n\r\nexport class RdtAngularRoute<T extends object> {\r\n private route: RdtRoute<T>;\r\n private children: Route[] = [];\r\n\r\n // Must be set from component declaration files\r\n private loadChildren?: LoadChildrenCallback;\r\n private component?: Type<any>;\r\n private providers: (Provider | EnvironmentProviders)[] = [];\r\n private resolvers: { [key: string]: ResolveFn<unknown> } = {};\r\n private canActivate: CanActivateFn[] = [];\r\n private canActivateChild: CanActivateChildFn[] = [];\r\n private canDeactivate: CanDeactivateFn<T>[] = [];\r\n private runGuardsAndResolvers?: RunGuardsAndResolvers;\r\n private data?: Data;\r\n\r\n constructor(route: RdtRoute<T>) {\r\n this.route = route;\r\n }\r\n\r\n provide(...providers: Type<unknown>[]) {\r\n this.providers.push(...providers);\r\n return this;\r\n }\r\n\r\n setModule(callback: LoadChildrenCallback) {\r\n this.loadChildren = callback;\r\n return this;\r\n }\r\n\r\n setComponent(comp: Type<any>) {\r\n this.component = comp;\r\n return this;\r\n }\r\n\r\n setChildren(...routes: Route[]) {\r\n this.children = routes;\r\n return this;\r\n }\r\n\r\n addResolve(paramName: string, resolver: ResolveFn<unknown>) {\r\n this.resolvers[paramName] = resolver;\r\n return this;\r\n }\r\n\r\n addCanActivate(...fns: CanActivateFn[]) {\r\n this.canActivate.push(...fns);\r\n return this;\r\n }\r\n\r\n addCanDeactivate(...fns: CanDeactivateFn<any>[]) {\r\n this.canDeactivate.push(...fns);\r\n return this;\r\n }\r\n\r\n addCanActivateChild(...fns: CanActivateChildFn[]) {\r\n this.canActivateChild.push(...fns);\r\n return this;\r\n }\r\n\r\n setRunGuardsAndResolvers(value: RunGuardsAndResolvers) {\r\n this.runGuardsAndResolvers = value;\r\n return this;\r\n }\r\n\r\n build(): Route {\r\n this.checkChildrenMatch();\r\n\r\n let res: Route = {\r\n path: this.route.path,\r\n providers: this.providers,\r\n title: this.route.name,\r\n canMatch: this.getCanMatch(),\r\n };\r\n\r\n if (this.component) {\r\n res.component = this.component;\r\n } else if (this.loadChildren) {\r\n res.loadChildren = this.loadChildren;\r\n }\r\n\r\n res.data = this.data ?? {\r\n breadcrumb: {\r\n label: this.route.name,\r\n disable: this.route.entryDisabled,\r\n staticStateParams: {\r\n src: RdtNavigationSource.BREADCRUMB,\r\n },\r\n },\r\n ...this.route.data,\r\n };\r\n\r\n const guard: CanActivateFn = (\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ) => {\r\n const injector = inject(EnvironmentInjector);\r\n if (\r\n runInInjectionContext(\r\n injector,\r\n this.route.canBeEntered.bind(this.route)\r\n )\r\n ) {\r\n return true;\r\n } else {\r\n const router = inject(Router);\r\n const location = inject(Location);\r\n let url = inject(RDT_CANNOT_BE_ENTERED_PROVIDER);\r\n if (typeof url === 'function') {\r\n //console.error(this.route.absolutePath);\r\n url = runInInjectionContext(\r\n injector,\r\n url.bind(url, location.path(), state.url, this.route)\r\n );\r\n }\r\n if (typeof url === 'string') {\r\n return router.parseUrl(url);\r\n } else {\r\n return false;\r\n }\r\n }\r\n };\r\n this.canActivate.push(guard);\r\n\r\n res.canActivate = this.canActivate;\r\n res.canDeactivate = this.canDeactivate;\r\n\r\n // If children exist, change\r\n // {\r\n // path: '/path',\r\n // component: FeatureComponent,\r\n // children: [...]\r\n // }\r\n // into\r\n // {\r\n // path: '/path',\r\n // children: [\r\n // {\r\n // path: '',\r\n // component: FeatureComponent\r\n // },\r\n // ...\r\n // ]\r\n // }\r\n if (this.children.length > 0) {\r\n if (this.loadChildren || this.component) {\r\n const path = res.path;\r\n res.path = '';\r\n res.pathMatch = 'full';\r\n res.canMatch = undefined;\r\n res = {\r\n path: path,\r\n children: [res, ...this.children],\r\n canActivateChild: this.canActivateChild,\r\n canMatch: this.getCanMatch(),\r\n };\r\n } else {\r\n res.children = this.children;\r\n }\r\n }\r\n\r\n if (Object.keys(this.resolvers).length > 0) {\r\n res.resolve = this.resolvers;\r\n }\r\n\r\n if (this.runGuardsAndResolvers) {\r\n res.runGuardsAndResolvers = this.runGuardsAndResolvers;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n private getCanMatch(): CanMatchFn[] | undefined {\r\n const paramMap = this.route.paramMap;\r\n const hasNumberParams = Object.keys(paramMap).some(\r\n (p) => paramMap[p as keyof T] === 'number'\r\n );\r\n if (!hasNumberParams) {\r\n return undefined;\r\n }\r\n const routeSegmentLength = this.route.path.split('/').length;\r\n const regex = this.route.regex\r\n ? new RegExp(`^${this.route.regex.source}$`)\r\n : this.route.absoluteRegex;\r\n return [\r\n (route: Route, segments: UrlSegment[]) => {\r\n const path = segments\r\n .slice(0, routeSegmentLength)\r\n .map((s) => s.path)\r\n .join('/');\r\n return regex.test(path);\r\n },\r\n ];\r\n }\r\n\r\n private checkChildrenMatch() {\r\n // Check that all routes are present if route is not\r\n // lazy loaded module.\r\n if (\r\n !this.loadChildren &&\r\n (this.route.children.length > 0 || this.children.length > 0)\r\n ) {\r\n if (this.children.length < this.route.children.length) {\r\n throw new Error(\r\n `RdtRoute ${this.route.name} has ${\r\n this.route.children.length\r\n } children, but RdtAngularRoute has ${\r\n this.children.length\r\n }. These numbers must match. Did you forget to call .setChildren() method in global routes definition? Routes with following names should be present: ${this.route.children\r\n .map((ch) => ch.name)\r\n .join(', ')}`\r\n );\r\n } else if (this.children.length > this.route.children.length) {\r\n throw new Error(\r\n `RdtRoute ${this.route.name} has ${\r\n this.route.children.length\r\n } children, but RdtAngularRoute has ${\r\n this.children.length\r\n }. These numbers must match. Did you forget to call .setChildren() method in feature shell routes definition? Routes with following paths should be present: ${this.children\r\n .map((ch) => ch.path)\r\n .join(', ')}`\r\n );\r\n }\r\n const n1 = this.children.map((ch) => ch.path!);\r\n const n2 = this.route.children.map((ch) => ch.path);\r\n n1.sort();\r\n n2.sort();\r\n for (let i = 0; i < n1.length; i++) {\r\n if (n1[i] !== n2[i]) {\r\n throw new Error(\r\n `Paths of children provided in RdtRoute and\r\n RdtAngularRoute do not match. ${n1[i]} != ${n2[i]}`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { Injector, runInInjectionContext } from '@angular/core';\r\nimport { Data, Params } from '@angular/router';\r\nimport { RdtStringUtils } from '@ngrdt/utils';\r\nimport { RdtAngularRoute } from './rdt-angular-route';\r\nimport { ParamMapping, ParamTypeMap, RdtReadonlyParameters } from './utils';\r\n\r\nexport function ALWAYS_TRUE() {\r\n return true;\r\n}\r\n\r\nexport class RdtRoute<T extends object = any> {\r\n protected orderedParams: string[] = [];\r\n protected _paramMap: ParamTypeMap<T> = {};\r\n protected _regex: RegExp | null = null;\r\n protected paramMappings: ParamMapping[] = [];\r\n protected _staticParams: Partial<T> = {};\r\n protected _queryParams: Params = {};\r\n protected _stateParams: Params = {};\r\n protected _data: Data = {};\r\n\r\n protected _name!: string;\r\n protected _path!: string;\r\n protected _parent: RdtRoute | null = null;\r\n protected _children: RdtRoute[] = [];\r\n protected _entryDisabled = false;\r\n protected _canBeEntered: () => boolean = ALWAYS_TRUE;\r\n protected _built = false;\r\n\r\n private _absoluteRegex?: RegExp;\r\n\r\n /**\r\n * Map of parameters and their types.\r\n */\r\n get paramMap(): Readonly<ParamTypeMap<T>> {\r\n return this._paramMap;\r\n }\r\n\r\n /**\r\n * Human readable name for display in breadcrumbs, title, etc.\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n\r\n /**\r\n * Path of the route relative to parent route.\r\n */\r\n get path() {\r\n return this._path;\r\n }\r\n\r\n /**\r\n * Parent route.\r\n */\r\n get parent() {\r\n return this._parent;\r\n }\r\n\r\n /**\r\n * Child routes.\r\n */\r\n get children() {\r\n return this._children;\r\n }\r\n\r\n /**\r\n * Absolute path of parent route or '/' if there is no parent.\r\n * Hostname excluded.\r\n */\r\n get basePath(): string {\r\n return this._parent ? this._parent.absolutePath : '/';\r\n }\r\n\r\n /**\r\n * Absolute path of the route. Hostname excluded.\r\n */\r\n get absolutePath() {\r\n return RdtStringUtils.joinPaths(this.basePath, this._path);\r\n }\r\n\r\n /**\r\n * Regular expression route path relative to parent route.\r\n * Hostname excluded.\r\n */\r\n get regex() {\r\n return this._regex;\r\n }\r\n\r\n /**\r\n * Regular expression to match only this route (not children\r\n * or parent routes). Hostname excluded.\r\n */\r\n get absoluteRegex(): RegExp {\r\n if (this._absoluteRegex) {\r\n return this._absoluteRegex;\r\n }\r\n\r\n if (!this._regex) {\r\n this._absoluteRegex = new RegExp('^/$');\r\n if (this._parent) {\r\n throw new Error('Nested route with empty path is not allowed.');\r\n }\r\n } else if (this._parent) {\r\n // Remove initial ^ and ending $\r\n const parent = this._parent.absoluteRegex.source.slice(1, -1);\r\n this._absoluteRegex = new RegExp(\r\n '^' + RdtStringUtils.joinPaths(parent, this._regex.source) + '$'\r\n );\r\n } else {\r\n this._absoluteRegex = new RegExp(\r\n '^' + RdtStringUtils.joinPaths('/', this._regex.source) + '$'\r\n );\r\n }\r\n return this._absoluteRegex;\r\n }\r\n\r\n /**\r\n * Denotes disabled route entry.\r\n * If true, route should have no NgModule\r\n * or component and only serves as virtual module\r\n * for breadcrumb.\r\n */\r\n get entryDisabled() {\r\n return this._entryDisabled;\r\n }\r\n\r\n /**\r\n * Statically set state params used when navigating to this instance.\r\n */\r\n get stateParams() {\r\n return this._stateParams;\r\n }\r\n\r\n /**\r\n * Statically set query params used when navigating to this instance.\r\n */\r\n get queryParams() {\r\n return this._queryParams;\r\n }\r\n\r\n /**\r\n * @param url Absolute path to test.\r\n * @returns True if url matches this route.\r\n */\r\n testUrl(url: string) {\r\n return this.absoluteRegex.test(url);\r\n }\r\n\r\n /**\r\n * Statically set parameters used when navigating to this instance.\r\n */\r\n get staticParams() {\r\n return { ...this._staticParams };\r\n }\r\n\r\n get hasCanBeEnteredGuard() {\r\n return this._canBeEntered !== ALWAYS_TRUE;\r\n }\r\n\r\n /**\r\n * Data that is passed to Angular route definition.\r\n */\r\n get data() {\r\n return this._data;\r\n }\r\n\r\n /**\r\n * Meta guard that is used by [rdtRouterLink] and RdtMenu\r\n * to determine if route can be entered.\r\n * @param injector Environment or custom injector.\r\n * @returns True if route can be entered.\r\n */\r\n canBeEntered(injector?: Injector): boolean {\r\n return injector\r\n ? runInInjectionContext(injector, this._canBeEntered)\r\n : this._canBeEntered();\r\n }\r\n\r\n /**\r\n * Extracts url parameters from absolute path for this path and each parent.\r\n */\r\n parseAbsoluteUrl(url: string): RdtReadonlyParameters | null {\r\n const reg = this.absoluteRegex;\r\n if (!reg.test(url)) {\r\n return null;\r\n }\r\n const matches = reg.exec(url);\r\n if (matches) {\r\n const values = matches.slice(1).reverse();\r\n const obj = this.fill(values);\r\n if (obj) {\r\n return new RdtReadonlyParameters(obj);\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n private fill(values: string[], res: Record<string, any> = {}) {\r\n const params: { [key in keyof T]?: string | number } = {};\r\n const reversedParams = this.orderedParams.slice().reverse();\r\n for (let i = 0; i < reversedParams.length && i < values.length; i++) {\r\n const key = reversedParams[i] as keyof T;\r\n const mappedKey =\r\n this.paramMappings.find((m) => m.urlName === key)?.tableName ?? key;\r\n let val: string | number = values[i];\r\n\r\n if (this._paramMap[key] === 'number') {\r\n val = parseInt(val);\r\n }\r\n params[mappedKey as keyof T] = val;\r\n }\r\n res[this.absolutePath] = params;\r\n\r\n if (values.length > reversedParams.length && this._parent) {\r\n this._parent.fill(values.slice(reversedParams.length), res);\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Fills parameters in path with values from paramMap.\r\n * Use withStaticParams() beforehand in case parent paths contain parameters.\r\n * @param paramMap Must contain all parameters for this route.\r\n * @returns Absolute path.\r\n */\r\n createAbsoluteUrl(paramMap: Partial<T> = this._staticParams): string {\r\n if (!this._parent) {\r\n return this.createUrl(this.absolutePath, paramMap);\r\n } else {\r\n return RdtStringUtils.joinPaths(\r\n this._parent.createAbsoluteUrl(),\r\n this.createRelativeUrl(paramMap)\r\n );\r\n }\r\n }\r\n\r\n createRelativeUrl(paramMap: Partial<T> = this._staticParams) {\r\n return this.createUrl(this.path, paramMap);\r\n }\r\n\r\n private createUrl(path: string, paramMap: Partial<T>) {\r\n const paramNames = Object.keys(this._paramMap);\r\n paramNames.sort((a, b) => b.length - a.length);\r\n const extendedParamMap: any = { ...paramMap };\r\n\r\n this.paramMappings.forEach((mapping) => {\r\n if (mapping.tableName in paramMap) {\r\n extendedParamMap[mapping.urlName] = (paramMap as any)[\r\n mapping.tableName\r\n ];\r\n }\r\n });\r\n\r\n paramNames.forEach((param) => {\r\n path = path.replace(`:${param}`, `${extendedParamMap[param as keyof T]}`);\r\n });\r\n\r\n return path;\r\n }\r\n\r\n toAngularRoute() {\r\n if (!this._built) {\r\n throw new Error('You have to first call .build() on route!');\r\n }\r\n return new RdtAngularRoute<T>(this);\r\n }\r\n\r\n /**\r\n * Provides static mapping for parameter names tableName -> urlName.\r\n * Returns new instance of RdtRoute<T> that is clone of\r\n * this route and its parents (NOT children).\r\n * @returns Clone of this route with mapped parameter names.\r\n */\r\n withParamMappings(mappings: ParamMapping[]) {\r\n const clone = this.clone();\r\n clone.paramMappings = mappings;\r\n return clone;\r\n }\r\n\r\n /**\r\n * Sets static parameters for this route.\r\n * @param params Static parameters for this route.\r\n * @returns Clone of this with static parameters set.\r\n */\r\n withStaticParams(params: T): RdtRoute<T>;\r\n withStaticParams<T2 extends object>(\r\n route: RdtRoute<T2>,\r\n params: T2\r\n ): RdtRoute<T>;\r\n\r\n /**\r\n * Sets parameters for itself or parents.\r\n * Returns new instance of RdtRoute<T> that is clone of\r\n * this route and its parents (NOT children).\r\n * @returns Clone of this route with static parameters set.\r\n */\r\n withStaticParams<T2 extends object>(param1: RdtRoute<T2> | T, param2?: T2) {\r\n const clone = this.clone();\r\n\r\n if (param2) {\r\n const routeAbsPath = (param1 as RdtRoute<T2>).absolutePath;\r\n let current: RdtRoute | null = clone;\r\n\r\n while (current) {\r\n if (current.absolutePath === routeAbsPath) {\r\n current._staticParams = param2;\r\n }\r\n current = current._parent;\r\n }\r\n } else {\r\n clone._staticParams = param1 as T;\r\n }\r\n return clone;\r\n }\r\n\r\n withQueryParams(queryParams: Params) {\r\n const clone = this.clone();\r\n clone._queryParams = { ...queryParams };\r\n return clone;\r\n }\r\n\r\n withStateParams(stateParams: Params) {\r\n const clone = this.clone();\r\n clone._stateParams = { ...stateParams };\r\n return clone;\r\n }\r\n\r\n /**\r\n * @returns Partial of object that only contains properties necessary to create this route.\r\n */\r\n extractRouteParams(row: T): Partial<T> {\r\n const res: Partial<T> = {};\r\n\r\n this.orderedParams.forEach((param) => {\r\n const mapping = this.paramMappings.find((m) => m.urlName === param);\r\n const mappedParam = (mapping?.tableName ?? param) as keyof T;\r\n if (mappedParam in row) {\r\n res[mappedParam] = row[mappedParam];\r\n }\r\n });\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * @returns New instance of RdtRoute<T> that is clone of\r\n * this route and its parents (NOT children).\r\n */\r\n clone() {\r\n const clone = new RdtRoute<T>();\r\n clone._name = this._name;\r\n clone._parent = this._parent?.clone() ?? null;\r\n clone._path = this.path;\r\n clone._entryDisabled = this._entryDisabled;\r\n clone.orderedParams = [...this.orderedParams];\r\n clone._paramMap = { ...this._paramMap };\r\n clone._regex = this._regex ? new RegExp(this._regex) : null;\r\n clone.paramMappings = this.paramMappings;\r\n clone._staticParams = { ...this._staticParams };\r\n clone._stateParams = { ...this._stateParams };\r\n return clone;\r\n }\r\n}\r\n","import { Data } from '@angular/router';\r\nimport { RdtRoute } from './rdt-route';\r\n\r\nconst DEFAULT_PARAM_TYPE = 'number';\r\n\r\nexport class RdtRouteBuilder<T extends object = any> extends RdtRoute<T> {\r\n /**\r\n * CanBeEntered function is synchronous function which\r\n * lets framework hide menu buttons and disable links.\r\n * Function is run in environment injection context, so\r\n * you can inject global services, tokens, etc.\r\n * @param fn\r\n */\r\n setCanBeEntered(fn: () => boolean) {\r\n this._canBeEntered = fn;\r\n return this;\r\n }\r\n\r\n /**\r\n * Entry disabled route will generate disabled breadcrumb.\r\n * It should not have any component nor module added to it.\r\n * @param value\r\n * @returns\r\n */\r\n setEntryDisabled(value = true) {\r\n this._entryDisabled = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets path relative to parent. It is defined the same way as Angular route path including parameters.\r\n * You need to call setParam() for each parameter you use in the path.\r\n */\r\n setPath(path: string) {\r\n this._path = path;\r\n const s = path.split('/');\r\n const params: string[] = [];\r\n s.forEach((part) => {\r\n if (part.includes(':')) {\r\n const param = part.split(':')[1] as keyof T;\r\n if (param) {\r\n params.push(param as string);\r\n if (!this._paramMap[param]) {\r\n this._paramMap[param] = DEFAULT_PARAM_TYPE;\r\n }\r\n }\r\n }\r\n });\r\n this.orderedParams = params;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets Angular route data.\r\n * @param data Angular route data object. Breadcrumb key is merged into it.\r\n */\r\n setData(data: Data) {\r\n this._data = data;\r\n return this;\r\n }\r\n\r\n /**\r\n * Defines parameter type and lets framework parse it.\r\n * @param paramName\r\n * @param type\r\n */\r\n setParam(paramName: keyof T, type: 'string' | 'number') {\r\n this._paramMap[paramName] = type;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets name to display in breadcrumb, etc.\r\n */\r\n setName(name: string) {\r\n this._name = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Call .build() on children before you call this method!\r\n */\r\n setChildren(...children: RdtRoute[]) {\r\n this._children = children;\r\n for (const child of children) {\r\n (child as RdtRouteBuilder)._parent = this;\r\n }\r\n return this;\r\n }\r\n\r\n build() {\r\n if (typeof this._path !== 'string') {\r\n throw new Error(\r\n 'Please provide path for route. Empty string is acceptable.'\r\n );\r\n }\r\n this._built = true;\r\n this.setRegex();\r\n return this as RdtRoute<T>;\r\n }\r\n\r\n private setRegex() {\r\n const params = Object.keys(this._paramMap);\r\n params.sort((a, b) => b.length - a.length);\r\n let substituted = this.path;\r\n params.forEach((p) => {\r\n const type = this._paramMap[p as keyof T];\r\n if (!type) {\r\n throw new Error('Params is not set i');\r\n }\r\n substituted = substituted.replace(`:${p}`, RdtRouteBuilder.groups[type]);\r\n });\r\n\r\n if (substituted === '') {\r\n this._regex = null;\r\n } else {\r\n this._regex = new RegExp(substituted);\r\n }\r\n }\r\n\r\n private static readonly groups = {\r\n string: '(.+)',\r\n number: '(\\\\d+)',\r\n };\r\n}\r\n","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Renderer2,\r\n SimpleChanges,\r\n inject,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport {\r\n IsActiveMatchOptions,\r\n NavigationEnd,\r\n Router,\r\n RouterModule,\r\n} from '@angular/router';\r\nimport { filter } from 'rxjs';\r\n\r\nconst EXACT_TRUE_OPTS: IsActiveMatchOptions = {\r\n paths: 'exact',\r\n queryParams: 'exact',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n};\r\n\r\nconst EXACT_FALSE_OPTS: IsActiveMatchOptions = {\r\n paths: 'subset',\r\n queryParams: 'subset',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n};\r\n\r\n/**\r\n * Directive that appends class to host if any of the watched routes is active.\r\n */\r\n@Directive({\r\n selector: '[rdtAnyRouteActive]',\r\n standalone: true,\r\n providers: [RouterModule],\r\n})\r\nexport class RdtAnyRouteActiveDirective implements OnInit, OnChanges {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly router = inject(Router);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly elRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n\r\n @Input({ required: true, alias: 'rdtAnyRouteActive' })\r\n set anyRouteActive(data: string[] | string) {\r\n this.classes = this.parseClasses(data);\r\n }\r\n\r\n @Input({ required: true })\r\n watchedRoutes: (string | string[])[] = [];\r\n\r\n @Input()\r\n set anyRouteActiveOptions(value: { exact: boolean } | IsActiveMatchOptions) {\r\n this._anyRouteActiveOptions = this.parseOptions(value);\r\n }\r\n private _anyRouteActiveOptions: IsActiveMatchOptions = EXACT_FALSE_OPTS;\r\n\r\n @Input()\r\n ariaCurrentWhenActive?:\r\n | 'page'\r\n | 'step'\r\n | 'location'\r\n | 'date'\r\n | 'time'\r\n | true\r\n | false;\r\n\r\n get isActive() {\r\n return this._isActive;\r\n }\r\n private _isActive = false;\r\n\r\n private classes: string[] = [];\r\n\r\n ngOnInit() {\r\n this.update();\r\n this.listenRouterEvents();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['anyRouteActive']?.previousValue) {\r\n const prev = this.parseClasses(changes['anyRouteActive'].previousValue);\r\n prev.forEach((c) => this.removeClass(c));\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n update() {\r\n this._isActive = this.watchedRoutes.some((route) => {\r\n const param =\r\n typeof route === 'string' ? route : this.router.createUrlTree(route);\r\n return this.router.isActive(param, this._anyRouteActiveOptions);\r\n });\r\n this.setClasses();\r\n this.setAriaCurrent();\r\n }\r\n\r\n private setAriaCurrent() {\r\n const el = this.elRef.nativeElement;\r\n\r\n if (this._isActive && this.ariaCurrentWhenActive !== undefined) {\r\n const value = this.ariaCurrentWhenActive.toString();\r\n this.renderer.setAttribute(el, 'aria-current', value);\r\n } else {\r\n this.renderer.removeAttribute(el, 'aria-current');\r\n }\r\n }\r\n\r\n private setClasses() {\r\n if (this._isActive) {\r\n this.classes.forEach((c) => this.addClass(c));\r\n } else {\r\n this.classes.forEach((c) => this.removeClass(c));\r\n }\r\n }\r\n\r\n private addClass(className: string) {\r\n this.renderer.addClass(this.elRef.nativeElement, className);\r\n }\r\n\r\n private removeClass(className: string) {\r\n this.renderer.removeClass(this.elRef.nativeElement, className);\r\n }\r\n\r\n private listenRouterEvents() {\r\n this.router.events\r\n .pipe(\r\n filter((ev) => ev instanceof NavigationEnd),\r\n takeUntilDestroyed(this.destroyRef)\r\n )\r\n .subscribe(() => this.update());\r\n }\r\n\r\n private parseClasses(data: string[] | string) {\r\n const classes = Array.isArray(data) ? data : data.split(' ');\r\n return classes.filter((c) => !!c);\r\n }\r\n\r\n private parseOptions(input: { exact: boolean } | IsActiveMatchOptions) {\r\n if ('exact' in input) {\r\n if (input.exact) {\r\n return EXACT_TRUE_OPTS;\r\n } else {\r\n return EXACT_FALSE_OPTS;\r\n }\r\n } else {\r\n return input;\r\n }\r\n }\r\n}\r\n","import {\r\n booleanAttribute,\r\n Directive,\r\n EnvironmentInjector,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { Params, RouterLink } from '@angular/router';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\n\r\n@Directive({\r\n selector: '[rdtRouterLink]',\r\n standalone: true,\r\n hostDirectives: [\r\n {\r\n directive: RouterLink,\r\n inputs: ['target'],\r\n },\r\n ],\r\n})\r\nexport class RdtRouterLinkDirective<T extends object>\r\n implements OnInit, OnChanges\r\n{\r\n private readonly routerLinkRef = inject(RouterLink, { self: true });\r\n private readonly envInjector = inject(EnvironmentInjector);\r\n\r\n @Input({ alias: 'rdtRouterLink', required: true })\r\n route!: RdtRoute<T>;\r\n\r\n @Input()\r\n target: '_blank' | '_self' | '_parent' | '_top' = '_self';\r\n\r\n @Input()\r\n params?: Partial<T>;\r\n\r\n @Input()\r\n queryParams?: Params;\r\n\r\n @Input()\r\n stateParams?: Params;\r\n\r\n @Input({ transform: booleanAttribute })\r\n disabled = false;\r\n\r\n ngOnInit() {\r\n this.update();\r\n }\r\n\r\n ngOnChanges() {\r\n this.update();\r\n }\r\n\r\n private update() {\r\n if (this.route.canBeEntered(this.envInjector) && !this.disabled) {\r\n this.setLink();\r\n } else {\r\n this.disableLink();\r\n }\r\n }\r\n\r\n private setLink() {\r\n this.routerLinkRef.routerLink = this.route.createAbsoluteUrl(this.params);\r\n this.routerLinkRef.state = this.stateParams ?? this.route.stateParams;\r\n this.routerLinkRef.queryParams = this.queryParams ?? this.route.queryParams;\r\n this.routerLinkRef.ngOnChanges({});\r\n }\r\n\r\n private disableLink() {\r\n this.routerLinkRef.routerLink = null;\r\n this.routerLinkRef.ngOnChanges({});\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { CanDeactivateFn } from '@angular/router';\r\nimport { RdtComponentGuardStoreService } from '@ngrdt/core';\r\n\r\nexport const preventDataLossGuardFn: CanDeactivateFn<any> = () => {\r\n const guardStore = inject(RdtComponentGuardStoreService);\r\n return guardStore.checkCanLeaveGlobal$();\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n GuardsCheckStart,\r\n NavigationEnd,\r\n Route,\r\n Router,\r\n} from '@angular/router';\r\nimport { preventDataLossGuardFn } from './prevent-data-loss.guard';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class GlobalRouteGuardService {\r\n constructor(private router: Router) {}\r\n\r\n // This will help ensure that routes are automatically protected by ensuring that global guards are applied to every route\r\n public ensureGlobalGuards() {\r\n let lastUrl = '';\r\n\r\n this.router.events.subscribe((e) => {\r\n // Remember last url after successful navigation\r\n if (e instanceof NavigationEnd) {\r\n lastUrl = location.href;\r\n }\r\n if (e instanceof GuardsCheckStart) {\r\n let lastChild: ActivatedRouteSnapshot = e.state.root;\r\n while (lastChild?.firstChild) {\r\n lastChild = lastChild.firstChild;\r\n }\r\n // Native back button will immediately replace url on click\r\n // Replace it back to last url before guard check is finished.\r\n // Angular will set it to correct value afterwards.\r\n history.replaceState(window.history.state, '', lastUrl);\r\n\r\n if (lastChild?.routeConfig) {\r\n this.ensureCanDeactivateGuards(lastChild.routeConfig);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private ensureCanDeactivateGuards(routeConfig: Route) {\r\n if (!routeConfig.canDeactivate) {\r\n routeConfig.canDeactivate = [];\r\n }\r\n\r\n const canDeactivateGuards = routeConfig.canDeactivate;\r\n\r\n // ensure that the \"MySpecialCanDeactivateGuard\" is in effect.\r\n if (!canDeactivateGuards.find((o) => o == preventDataLossGuardFn)) {\r\n canDeactivateGuards.push(preventDataLossGuardFn);\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngrdt-router.mjs","sources":["../tmp-esm2022/lib/services/rdt-cannot-be-entered.token.js","../tmp-esm2022/lib/services/rdt-confirm-data-loss.service.js","../tmp-esm2022/lib/rdt-route/utils.js","../tmp-esm2022/lib/services/rdt-routes.token.js","../tmp-esm2022/lib/services/rdt-router.service.js","../tmp-esm2022/lib/rdt-route/constants.js","../tmp-esm2022/lib/rdt-route/rdt-angular-route.js","../tmp-esm2022/lib/rdt-route/rdt-route.js","../tmp-esm2022/lib/rdt-route/rdt-route-builder.js","../tmp-esm2022/lib/directives/rdt-any-route-active.directive.js","../tmp-esm2022/lib/directives/rdt-router-link.directive.js","../tmp-esm2022/lib/guards/prevent-data-loss.guard.js","../tmp-esm2022/lib/guards/global-route-guard.service.js","../tmp-esm2022/ngrdt-router.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n/**\n * Injection token that defines behavior when route cannot be entered (canBeEntered returns false).\n * If value is undefined, route will be redirected to ''.\n */\nexport const RDT_CANNOT_BE_ENTERED_PROVIDER = new InjectionToken('RDT_CANNOT_BE_ENTERED', { factory: () => undefined, providedIn: 'root' });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWNhbm5vdC1iZS1lbnRlcmVkLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3NlcnZpY2VzL3JkdC1jYW5ub3QtYmUtZW50ZXJlZC50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLElBQUksY0FBYyxDQUU5RCx1QkFBdUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR0UmVkaXJlY3RGbiwgUmR0UmVkaXJlY3RSZXR1cm5UeXBlIH0gZnJvbSAnLi4vcmR0LXJvdXRlL3V0aWxzJztcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBkZWZpbmVzIGJlaGF2aW9yIHdoZW4gcm91dGUgY2Fubm90IGJlIGVudGVyZWQgKGNhbkJlRW50ZXJlZCByZXR1cm5zIGZhbHNlKS5cbiAqIElmIHZhbHVlIGlzIHVuZGVmaW5lZCwgcm91dGUgd2lsbCBiZSByZWRpcmVjdGVkIHRvICcnLlxuICovXG5leHBvcnQgY29uc3QgUkRUX0NBTk5PVF9CRV9FTlRFUkVEX1BST1ZJREVSID0gbmV3IEluamVjdGlvblRva2VuPFxuICBSZHRSZWRpcmVjdEZuIHwgUmR0UmVkaXJlY3RSZXR1cm5UeXBlXG4+KCdSRFRfQ0FOTk9UX0JFX0VOVEVSRUQnLCB7IGZhY3Rvcnk6ICgpID0+IHVuZGVmaW5lZCwgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pO1xuIl19","import { InjectionToken } from '@angular/core';\nimport { defer, of } from 'rxjs';\nexport const RDT_CONFIRM_DATA_LOSS_SERVICE = new InjectionToken('RDT_CONFIRM_DATA_LOSS_SERVICE', { factory: () => new RdtConfirmDataLossServiceAlert() });\nexport class RdtConfirmDataLossService {\n}\nexport class RdtConfirmDataLossServiceAlert extends RdtConfirmDataLossService {\n confirmDataLoss() {\n return defer(() => of(confirm('Are you sure you want to leave this page?')));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWNvbmZpcm0tZGF0YS1sb3NzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvc2VydmljZXMvcmR0LWNvbmZpcm0tZGF0YS1sb3NzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FDeEMsSUFBSSxjQUFjLENBQ2hCLCtCQUErQixFQUMvQixFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLDhCQUE4QixFQUFFLEVBQUUsQ0FDeEQsQ0FBQztBQUVKLE1BQU0sT0FBZ0IseUJBQXlCO0NBRTlDO0FBRUQsTUFBTSxPQUFPLDhCQUErQixTQUFRLHlCQUF5QjtJQUNsRSxlQUFlO1FBQ3RCLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUNoQixFQUFFLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxDQUFDLENBQUMsQ0FDekQsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGRlZmVyLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFJEVF9DT05GSVJNX0RBVEFfTE9TU19TRVJWSUNFID1cclxuICBuZXcgSW5qZWN0aW9uVG9rZW48UmR0Q29uZmlybURhdGFMb3NzU2VydmljZT4oXHJcbiAgICAnUkRUX0NPTkZJUk1fREFUQV9MT1NTX1NFUlZJQ0UnLFxyXG4gICAgeyBmYWN0b3J5OiAoKSA9PiBuZXcgUmR0Q29uZmlybURhdGFMb3NzU2VydmljZUFsZXJ0KCkgfVxyXG4gICk7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmR0Q29uZmlybURhdGFMb3NzU2VydmljZSB7XHJcbiAgYWJzdHJhY3QgY29uZmlybURhdGFMb3NzKCk6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZHRDb25maXJtRGF0YUxvc3NTZXJ2aWNlQWxlcnQgZXh0ZW5kcyBSZHRDb25maXJtRGF0YUxvc3NTZXJ2aWNlIHtcclxuICBvdmVycmlkZSBjb25maXJtRGF0YUxvc3MoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gZGVmZXIoKCkgPT5cclxuICAgICAgb2YoY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGxlYXZlIHRoaXMgcGFnZT8nKSlcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==","export class RdtReadonlyParameters {\n params;\n constructor(params = {}) {\n this.params = params;\n }\n get(route) {\n return this.params[route.absolutePath] ?? null;\n }\n}\nexport class RdtParameters extends RdtReadonlyParameters {\n set(route, params) {\n this.params[route.absolutePath] = params;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvcmR0LXJvdXRlL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVCQSxNQUFNLE9BQU8scUJBQXFCO0lBQ0Q7SUFBL0IsWUFBK0IsU0FBNEIsRUFBRTtRQUE5QixXQUFNLEdBQU4sTUFBTSxDQUF3QjtJQUFHLENBQUM7SUFFakUsR0FBRyxDQUFtQixLQUFrQjtRQUN0QyxPQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBZ0IsSUFBSSxJQUFJLENBQUM7SUFDakUsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGFBQWMsU0FBUSxxQkFBcUI7SUFDdEQsR0FBRyxDQUFtQixLQUFrQixFQUFFLE1BQWtCO1FBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUMzQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZHRSb3V0ZSB9IGZyb20gJy4vcmR0LXJvdXRlJztcclxuXHJcbmV4cG9ydCB0eXBlIFBhcmFtVHlwZU1hcDxUPiA9IHtcclxuICBba2V5IGluIGtleW9mIFRdPzogJ3N0cmluZycgfCAnbnVtYmVyJztcclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1NYXBwaW5nIHtcclxuICB1cmxOYW1lOiBzdHJpbmc7XHJcbiAgdGFibGVOYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljUm91dGVQYXJhbXMge1xyXG4gIFthYnNvbHV0ZVBhdGg6IHN0cmluZ106IG9iamVjdDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUmR0UmVkaXJlY3RSZXR1cm5UeXBlID0gc3RyaW5nIHwgdm9pZCB8IHVuZGVmaW5lZDtcclxuXHJcbmV4cG9ydCB0eXBlIFJkdFJlZGlyZWN0Rm4gPSAoXHJcbiAgY3VycmVudFBhdGg6IHN0cmluZyxcclxuICB0YXJnZXRQYXRoOiBzdHJpbmcsXHJcbiAgdGFyZ2V0Um91dGU6IFJkdFJvdXRlXHJcbikgPT4gUmR0UmVkaXJlY3RSZXR1cm5UeXBlO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJkdFJlYWRvbmx5UGFyYW1ldGVycyB7XHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHBhcmFtczogU3RhdGljUm91dGVQYXJhbXMgPSB7fSkge31cclxuXHJcbiAgZ2V0PFQgZXh0ZW5kcyBvYmplY3Q+KHJvdXRlOiBSZHRSb3V0ZTxUPik6IFBhcnRpYWw8VD4gfCBudWxsIHtcclxuICAgIHJldHVybiAodGhpcy5wYXJhbXNbcm91dGUuYWJzb2x1dGVQYXRoXSBhcyBQYXJ0aWFsPFQ+KSA/PyBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJkdFBhcmFtZXRlcnMgZXh0ZW5kcyBSZHRSZWFkb25seVBhcmFtZXRlcnMge1xyXG4gIHNldDxUIGV4dGVuZHMgb2JqZWN0Pihyb3V0ZTogUmR0Um91dGU8VD4sIHBhcmFtczogUGFydGlhbDxUPikge1xyXG4gICAgdGhpcy5wYXJhbXNbcm91dGUuYWJzb2x1dGVQYXRoXSA9IHBhcmFtcztcclxuICB9XHJcbn1cclxuIl19","import { InjectionToken } from '@angular/core';\nexport const RDT_ROUTES_PROVIDER = new InjectionToken('RDT_ROUTES_PROVIDER');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlcy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9yb3V0ZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZHQtcm91dGVzLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQ25ELHFCQUFxQixDQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuLi9yZHQtcm91dGUvcmR0LXJvdXRlJztcclxuXHJcbmV4cG9ydCBjb25zdCBSRFRfUk9VVEVTX1BST1ZJREVSID0gbmV3IEluamVjdGlvblRva2VuPFJkdFJvdXRlW10+KFxyXG4gICdSRFRfUk9VVEVTX1BST1ZJREVSJ1xyXG4pO1xyXG4iXX0=","import { Location, PlatformLocation } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { RdtStringUtils } from '@ngrdt/utils';\nimport { filter, take } from 'rxjs';\nimport { RdtReadonlyParameters } from '../rdt-route/utils';\nimport { RDT_ROUTES_PROVIDER } from './rdt-routes.token';\nimport * as i0 from \"@angular/core\";\nconst DEFAULT_TARGET = '_self';\nconst RDT_STATE_PARAMS_KEY = 'RdtStateParams';\nexport class RdtRouterService {\n allRoutes = inject(RDT_ROUTES_PROVIDER, { optional: true });\n location = inject(Location);\n router = inject(Router);\n baseHref = inject(PlatformLocation).getBaseHrefFromDOM();\n _previousUrl = null;\n _currentUrl = null;\n get previousUrl() {\n return this._previousUrl;\n }\n get currentUrl() {\n return this._currentUrl;\n }\n parsePreviousUrl() {\n return this._previousUrl ? this.parseAbsoluteUrl(this._previousUrl) : null;\n }\n parseCurrentUrl() {\n return this._currentUrl ? this.parseAbsoluteUrl(this._currentUrl) : null;\n }\n navigationEnd$ = this.router.events.pipe(filter((e) => e instanceof NavigationEnd));\n nextNavigationEnd$ = this.navigationEnd$.pipe(take(1));\n constructor() {\n if (this.allRoutes === null) {\n console.warn('All routes not provided. Make sure to provide RDT_ROUTES_PROVIDER with RdtRoute[].');\n this.allRoutes = [];\n }\n this.navigationEnd$.subscribe((e) => {\n this._previousUrl = this._currentUrl;\n this._currentUrl = e.url;\n });\n }\n /**\n * @returns window.history.state extended by state parameters passed from parent window.\n */\n getHistoryState() {\n if ('RdtStateParams' in window &&\n typeof window[RDT_STATE_PARAMS_KEY] === 'object') {\n return { ...window[RDT_STATE_PARAMS_KEY], ...(history.state ?? {}) };\n }\n else {\n return history.state ?? {};\n }\n }\n /**\n * Navigates to the specified route.\n * @param link Route to navigate to.\n * @param params Parameter of route passed as first argument.\n * @param extras Allows you to specify additional parameters for navigation. These extras have higher priority than those defined in the route.\n * @returns Promise that resolves when navigation is complete.\n */\n navigate(link, params, extras) {\n const url = params\n ? link.createAbsoluteUrl(params)\n : link.createAbsoluteUrl();\n const target = extras?.target ?? DEFAULT_TARGET;\n const queryParams = extras?.query ?? link.queryParams;\n const stateParams = extras?.state ?? link.stateParams;\n if (target === '_self') {\n return this.router.navigate([url], {\n queryParams: queryParams,\n state: stateParams,\n replaceUrl: extras?.replaceUrl,\n });\n }\n const absolutePath = RdtStringUtils.createAbsoluteUrl(url, this.baseHref);\n const pathWithParams = RdtStringUtils.appendQueryParams(absolutePath, queryParams);\n const win = window.open(pathWithParams, target);\n if (win) {\n win[RDT_STATE_PARAMS_KEY] = stateParams;\n }\n return Promise.resolve(true);\n }\n navigateHome(extras) {\n return this.router.navigateByUrl(RdtStringUtils.appendQueryParams('/', extras?.query ?? {}), {\n state: extras?.state,\n replaceUrl: extras?.replaceUrl,\n });\n }\n navigateBack(extras) {\n const parsed = this.parseAbsoluteUrl();\n if (parsed) {\n let route = parsed.route.withStaticParams(parsed.params);\n do {\n route = route.parent;\n } while (route && route.entryDisabled);\n // In case route has no ancestor with allowed entry,\n if (!route) {\n return this.navigateHome(extras);\n }\n if (extras) {\n if (extras.query) {\n route = route.withQueryParams(extras.query);\n }\n if (extras.state) {\n route = route.withStateParams(extras.state);\n }\n }\n return this.navigate(route, extras);\n }\n else {\n console.warn(`Cannot go back from ${this.location.path()} because no route matches current url`);\n return null;\n }\n }\n /**\n * This method will try to find matching route for given absolute URL, extract its parameters and return them.\n * If no route matches the URL, it returns null. Parameters are extracted only for the last matching route, not ancestors.\n * @param url Absolute URL to parse (e.g. '/home/details/123?query=abc').\n * @returns Object containing the matching route and its parameters, or null if no route is matching.\n */\n parseAbsoluteUrl(url = this.location.path()) {\n if (this.allRoutes) {\n for (const route of this.allRoutes) {\n const params = route.parseAbsoluteUrl(url);\n if (params) {\n return { route, params };\n }\n }\n }\n return null;\n }\n extractAllParams(currentRoute) {\n if (!currentRoute) {\n const parsed = this.parseAbsoluteUrl();\n if (!parsed) {\n console.warn('No route matches current url.');\n return new RdtReadonlyParameters();\n }\n currentRoute = parsed.route;\n }\n const url = this.location.path();\n return currentRoute.parseAbsoluteUrl(url);\n }\n isParentOfCurrentLocation(route) {\n console.log(this.parseAbsoluteUrl());\n return true;\n }\n removeQueryParams(...paramNames) {\n const regex = new RegExp(`[?&](${paramNames.join('|')})=[^&]*`, 'g');\n return history.replaceState(history.state, '', location.pathname + location.search.replace(regex, '').replace(/^&/, '?'));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtRouterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtRouterService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtRouterService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3NlcnZpY2VzL3JkdC1yb3V0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQVN6RCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUM7QUFDL0IsTUFBTSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUs5QyxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLFNBQVMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVwRCxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFFbEUsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFFMUMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdFLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0UsQ0FBQztJQUVRLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQy9DLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLGFBQWEsQ0FBQyxDQUNiLENBQUM7SUFFdEIsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEU7UUFDRSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FDVixvRkFBb0YsQ0FDckYsQ0FBQztZQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsSUFDRSxnQkFBZ0IsSUFBSSxNQUFNO1lBQzFCLE9BQU8sTUFBTSxDQUFDLG9CQUFvQixDQUFDLEtBQUssUUFBUSxFQUNoRCxDQUFDO1lBQ0QsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN2RSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxRQUFRLENBQ04sSUFBaUIsRUFDakIsTUFBbUIsRUFDbkIsTUFBMEI7UUFFMUIsTUFBTSxHQUFHLEdBQUcsTUFBTTtZQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztZQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLE1BQU0sSUFBSSxjQUFjLENBQUM7UUFDaEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3RELE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUV0RCxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLFdBQVcsRUFBRSxXQUFXO2dCQUN4QixLQUFLLEVBQUUsV0FBVztnQkFDbEIsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVO2FBQy9CLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRSxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsaUJBQWlCLENBQ3JELFlBQVksRUFDWixXQUFXLENBQ1osQ0FBQztRQUNGLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELElBQUksR0FBRyxFQUFFLENBQUM7WUFDUCxHQUFXLENBQUMsb0JBQW9CLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDbkQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQTBCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQzlCLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFDMUQ7WUFDRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUs7WUFDcEIsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVO1NBQy9CLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBMEI7UUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdkMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksS0FBSyxHQUFvQixNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRSxHQUFHLENBQUM7Z0JBQ0YsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDdkIsQ0FBQyxRQUFRLEtBQUssSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO1lBRXZDLG9EQUFvRDtZQUNwRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFDRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNqQixLQUFLLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlDLENBQUM7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2pCLEtBQUssR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLElBQUksQ0FDVix1QkFBdUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsdUNBQXVDLENBQ25GLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7UUFDekMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxZQUF1QjtRQUN0QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDckMsQ0FBQztZQUNELFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzlCLENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pDLE9BQU8sWUFBWSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxLQUFlO1FBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFHLFVBQW9CO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLFFBQVEsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXJFLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FDekIsT0FBTyxDQUFDLEtBQUssRUFDYixFQUFFLEVBQ0YsUUFBUSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7dUdBdkxVLGdCQUFnQjsyR0FBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uLCBQbGF0Zm9ybUxvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFBhcmFtcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0U3RyaW5nVXRpbHMgfSBmcm9tICdAbmdyZHQvdXRpbHMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuLi9yZHQtcm91dGUvcmR0LXJvdXRlJztcclxuaW1wb3J0IHsgUmR0UmVhZG9ubHlQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vcmR0LXJvdXRlL3V0aWxzJztcclxuaW1wb3J0IHsgUkRUX1JPVVRFU19QUk9WSURFUiB9IGZyb20gJy4vcmR0LXJvdXRlcy50b2tlbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE5hdmlnYXRlRXh0cmFzIHtcclxuICBzdGF0ZT86IFBhcmFtcztcclxuICBxdWVyeT86IFBhcmFtcztcclxuICB0YXJnZXQ/OiAnX2JsYW5rJyB8ICdfc2VsZicgfCAnX3BhcmVudCcgfCAnX3RvcCc7XHJcbiAgcmVwbGFjZVVybD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfVEFSR0VUID0gJ19zZWxmJztcclxuY29uc3QgUkRUX1NUQVRFX1BBUkFNU19LRVkgPSAnUmR0U3RhdGVQYXJhbXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdFJvdXRlclNlcnZpY2Uge1xyXG4gIHJlYWRvbmx5IGFsbFJvdXRlcyA9IGluamVjdChSRFRfUk9VVEVTX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGxvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZUhyZWYgPSBpbmplY3QoUGxhdGZvcm1Mb2NhdGlvbikuZ2V0QmFzZUhyZWZGcm9tRE9NKCk7XHJcblxyXG4gIHByaXZhdGUgX3ByZXZpb3VzVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9jdXJyZW50VXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgZ2V0IHByZXZpb3VzVXJsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByZXZpb3VzVXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRVcmwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFVybDtcclxuICB9XHJcblxyXG4gIHBhcnNlUHJldmlvdXNVcmwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJldmlvdXNVcmwgPyB0aGlzLnBhcnNlQWJzb2x1dGVVcmwodGhpcy5fcHJldmlvdXNVcmwpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHBhcnNlQ3VycmVudFVybCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VXJsID8gdGhpcy5wYXJzZUFic29sdXRlVXJsKHRoaXMuX2N1cnJlbnRVcmwpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IG5hdmlnYXRpb25FbmQkID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXHJcbiAgICBmaWx0ZXIoKGUpID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKVxyXG4gICkgYXMgT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uRW5kPjtcclxuXHJcbiAgcmVhZG9ubHkgbmV4dE5hdmlnYXRpb25FbmQkID0gdGhpcy5uYXZpZ2F0aW9uRW5kJC5waXBlKHRha2UoMSkpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGlmICh0aGlzLmFsbFJvdXRlcyA9PT0gbnVsbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgJ0FsbCByb3V0ZXMgbm90IHByb3ZpZGVkLiBNYWtlIHN1cmUgdG8gcHJvdmlkZSBSRFRfUk9VVEVTX1BST1ZJREVSIHdpdGggUmR0Um91dGVbXS4nXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuYWxsUm91dGVzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRW5kJC5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5fcHJldmlvdXNVcmwgPSB0aGlzLl9jdXJyZW50VXJsO1xyXG4gICAgICB0aGlzLl9jdXJyZW50VXJsID0gZS51cmw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEByZXR1cm5zIHdpbmRvdy5oaXN0b3J5LnN0YXRlIGV4dGVuZGVkIGJ5IHN0YXRlIHBhcmFtZXRlcnMgcGFzc2VkIGZyb20gcGFyZW50IHdpbmRvdy5cclxuICAgKi9cclxuICBnZXRIaXN0b3J5U3RhdGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICdSZHRTdGF0ZVBhcmFtcycgaW4gd2luZG93ICYmXHJcbiAgICAgIHR5cGVvZiB3aW5kb3dbUkRUX1NUQVRFX1BBUkFNU19LRVldID09PSAnb2JqZWN0J1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB7IC4uLndpbmRvd1tSRFRfU1RBVEVfUEFSQU1TX0tFWV0sIC4uLihoaXN0b3J5LnN0YXRlID8/IHt9KSB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGhpc3Rvcnkuc3RhdGUgPz8ge307XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHNwZWNpZmllZCByb3V0ZS5cclxuICAgKiBAcGFyYW0gbGluayBSb3V0ZSB0byBuYXZpZ2F0ZSB0by5cclxuICAgKiBAcGFyYW0gcGFyYW1zIFBhcmFtZXRlciBvZiByb3V0ZSBwYXNzZWQgYXMgZmlyc3QgYXJndW1lbnQuXHJcbiAgICogQHBhcmFtIGV4dHJhcyBBbGxvd3MgeW91IHRvIHNwZWNpZnkgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBuYXZpZ2F0aW9uLiBUaGVzZSBleHRyYXMgaGF2ZSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aG9zZSBkZWZpbmVkIGluIHRoZSByb3V0ZS5cclxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBuYXZpZ2F0aW9uIGlzIGNvbXBsZXRlLlxyXG4gICAqL1xyXG4gIG5hdmlnYXRlPFQgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAgbGluazogUmR0Um91dGU8VD4sXHJcbiAgICBwYXJhbXM/OiBQYXJ0aWFsPFQ+LFxyXG4gICAgZXh0cmFzPzogUmR0TmF2aWdhdGVFeHRyYXNcclxuICApIHtcclxuICAgIGNvbnN0IHVybCA9IHBhcmFtc1xyXG4gICAgICA/IGxpbmsuY3JlYXRlQWJzb2x1dGVVcmwocGFyYW1zKVxyXG4gICAgICA6IGxpbmsuY3JlYXRlQWJzb2x1dGVVcmwoKTtcclxuXHJcbiAgICBjb25zdCB0YXJnZXQgPSBleHRyYXM/LnRhcmdldCA/PyBERUZBVUxUX1RBUkdFVDtcclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gZXh0cmFzPy5xdWVyeSA/PyBsaW5rLnF1ZXJ5UGFyYW1zO1xyXG4gICAgY29uc3Qgc3RhdGVQYXJhbXMgPSBleHRyYXM/LnN0YXRlID8/IGxpbmsuc3RhdGVQYXJhbXM7XHJcblxyXG4gICAgaWYgKHRhcmdldCA9PT0gJ19zZWxmJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0sIHtcclxuICAgICAgICBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgc3RhdGU6IHN0YXRlUGFyYW1zLFxyXG4gICAgICAgIHJlcGxhY2VVcmw6IGV4dHJhcz8ucmVwbGFjZVVybCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWJzb2x1dGVQYXRoID0gUmR0U3RyaW5nVXRpbHMuY3JlYXRlQWJzb2x1dGVVcmwodXJsLCB0aGlzLmJhc2VIcmVmKTtcclxuICAgIGNvbnN0IHBhdGhXaXRoUGFyYW1zID0gUmR0U3RyaW5nVXRpbHMuYXBwZW5kUXVlcnlQYXJhbXMoXHJcbiAgICAgIGFic29sdXRlUGF0aCxcclxuICAgICAgcXVlcnlQYXJhbXNcclxuICAgICk7XHJcbiAgICBjb25zdCB3aW4gPSB3aW5kb3cub3BlbihwYXRoV2l0aFBhcmFtcywgdGFyZ2V0KTtcclxuICAgIGlmICh3aW4pIHtcclxuICAgICAgKHdpbiBhcyBhbnkpW1JEVF9TVEFURV9QQVJBTVNfS0VZXSA9IHN0YXRlUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlSG9tZShleHRyYXM/OiBSZHROYXZpZ2F0ZUV4dHJhcykge1xyXG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmFwcGVuZFF1ZXJ5UGFyYW1zKCcvJywgZXh0cmFzPy5xdWVyeSA/PyB7fSksXHJcbiAgICAgIHtcclxuICAgICAgICBzdGF0ZTogZXh0cmFzPy5zdGF0ZSxcclxuICAgICAgICByZXBsYWNlVXJsOiBleHRyYXM/LnJlcGxhY2VVcmwsXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZUJhY2soZXh0cmFzPzogUmR0TmF2aWdhdGVFeHRyYXMpIHtcclxuICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VBYnNvbHV0ZVVybCgpO1xyXG4gICAgaWYgKHBhcnNlZCkge1xyXG4gICAgICBsZXQgcm91dGU6IFJkdFJvdXRlIHwgbnVsbCA9IHBhcnNlZC5yb3V0ZS53aXRoU3RhdGljUGFyYW1zKHBhcnNlZC5wYXJhbXMpO1xyXG4gICAgICBkbyB7XHJcbiAgICAgICAgcm91dGUgPSByb3V0ZS5wYXJlbnQ7XHJcbiAgICAgIH0gd2hpbGUgKHJvdXRlICYmIHJvdXRlLmVudHJ5RGlzYWJsZWQpO1xyXG5cclxuICAgICAgLy8gSW4gY2FzZSByb3V0ZSBoYXMgbm8gYW5jZXN0b3Igd2l0aCBhbGxvd2VkIGVudHJ5LFxyXG4gICAgICBpZiAoIXJvdXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVIb21lKGV4dHJhcyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGV4dHJhcykge1xyXG4gICAgICAgIGlmIChleHRyYXMucXVlcnkpIHtcclxuICAgICAgICAgIHJvdXRlID0gcm91dGUud2l0aFF1ZXJ5UGFyYW1zKGV4dHJhcy5xdWVyeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleHRyYXMuc3RhdGUpIHtcclxuICAgICAgICAgIHJvdXRlID0gcm91dGUud2l0aFN0YXRlUGFyYW1zKGV4dHJhcy5zdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHJvdXRlLCBleHRyYXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBDYW5ub3QgZ28gYmFjayBmcm9tICR7dGhpcy5sb2NhdGlvbi5wYXRoKCl9IGJlY2F1c2Ugbm8gcm91dGUgbWF0Y2hlcyBjdXJyZW50IHVybGBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIHRyeSB0byBmaW5kIG1hdGNoaW5nIHJvdXRlIGZvciBnaXZlbiBhYnNvbHV0ZSBVUkwsIGV4dHJhY3QgaXRzIHBhcmFtZXRlcnMgYW5kIHJldHVybiB0aGVtLlxyXG4gICAqIElmIG5vIHJvdXRlIG1hdGNoZXMgdGhlIFVSTCwgaXQgcmV0dXJucyBudWxsLiBQYXJhbWV0ZXJzIGFyZSBleHRyYWN0ZWQgb25seSBmb3IgdGhlIGxhc3QgbWF0Y2hpbmcgcm91dGUsIG5vdCBhbmNlc3RvcnMuXHJcbiAgICogQHBhcmFtIHVybCBBYnNvbHV0ZSBVUkwgdG8gcGFyc2UgKGUuZy4gJy9ob21lL2RldGFpbHMvMTIzP3F1ZXJ5PWFiYycpLlxyXG4gICAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIHRoZSBtYXRjaGluZyByb3V0ZSBhbmQgaXRzIHBhcmFtZXRlcnMsIG9yIG51bGwgaWYgbm8gcm91dGUgaXMgbWF0Y2hpbmcuXHJcbiAgICovXHJcbiAgcGFyc2VBYnNvbHV0ZVVybCh1cmwgPSB0aGlzLmxvY2F0aW9uLnBhdGgoKSkge1xyXG4gICAgaWYgKHRoaXMuYWxsUm91dGVzKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgcm91dGUgb2YgdGhpcy5hbGxSb3V0ZXMpIHtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSByb3V0ZS5wYXJzZUFic29sdXRlVXJsKHVybCk7XHJcbiAgICAgICAgaWYgKHBhcmFtcykge1xyXG4gICAgICAgICAgcmV0dXJuIHsgcm91dGUsIHBhcmFtcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBleHRyYWN0QWxsUGFyYW1zKGN1cnJlbnRSb3V0ZT86IFJkdFJvdXRlKTogUmR0UmVhZG9ubHlQYXJhbWV0ZXJzIHwgbnVsbCB7XHJcbiAgICBpZiAoIWN1cnJlbnRSb3V0ZSkge1xyXG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlQWJzb2x1dGVVcmwoKTtcclxuICAgICAgaWYgKCFwYXJzZWQpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ05vIHJvdXRlIG1hdGNoZXMgY3VycmVudCB1cmwuJyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZHRSZWFkb25seVBhcmFtZXRlcnMoKTtcclxuICAgICAgfVxyXG4gICAgICBjdXJyZW50Um91dGUgPSBwYXJzZWQucm91dGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLmxvY2F0aW9uLnBhdGgoKTtcclxuICAgIHJldHVybiBjdXJyZW50Um91dGUucGFyc2VBYnNvbHV0ZVVybCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgaXNQYXJlbnRPZkN1cnJlbnRMb2NhdGlvbihyb3V0ZTogUmR0Um91dGUpIHtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMucGFyc2VBYnNvbHV0ZVVybCgpKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUXVlcnlQYXJhbXMoLi4ucGFyYW1OYW1lczogc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgWz8mXSgke3BhcmFtTmFtZXMuam9pbignfCcpfSk9W14mXSpgLCAnZycpO1xyXG5cclxuICAgIHJldHVybiBoaXN0b3J5LnJlcGxhY2VTdGF0ZShcclxuICAgICAgaGlzdG9yeS5zdGF0ZSxcclxuICAgICAgJycsXHJcbiAgICAgIGxvY2F0aW9uLnBhdGhuYW1lICsgbG9jYXRpb24uc2VhcmNoLnJlcGxhY2UocmVnZXgsICcnKS5yZXBsYWNlKC9eJi8sICc/JylcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==","export var RdtNavigationSource;\n(function (RdtNavigationSource) {\n RdtNavigationSource[\"BREADCRUMB\"] = \"breadcrumb\";\n})(RdtNavigationSource || (RdtNavigationSource = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3JkdC1yb3V0ZS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksbUJBRVg7QUFGRCxXQUFZLG1CQUFtQjtJQUM3QixnREFBeUIsQ0FBQTtBQUMzQixDQUFDLEVBRlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUU5QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFJkdE5hdmlnYXRpb25Tb3VyY2Uge1xyXG4gIEJSRUFEQ1JVTUIgPSAnYnJlYWRjcnVtYicsXHJcbn1cclxuIl19","import { Location } from '@angular/common';\nimport { EnvironmentInjector, inject, runInInjectionContext, } from '@angular/core';\nimport { Router, } from '@angular/router';\nimport { RDT_CANNOT_BE_ENTERED_PROVIDER } from '../services/rdt-cannot-be-entered.token';\nimport { RdtNavigationSource } from './constants';\nexport class RdtAngularRoute {\n route;\n children = [];\n // Must be set from component declaration files\n loadChildren;\n component;\n providers = [];\n resolvers = {};\n canActivate = [];\n canActivateChild = [];\n canDeactivate = [];\n runGuardsAndResolvers;\n data;\n constructor(route) {\n this.route = route;\n }\n provide(...providers) {\n this.providers.push(...providers);\n return this;\n }\n withModule(callback) {\n this.loadChildren = callback;\n return this;\n }\n /**\n * @deprecated Use withModule() instead.\n */\n setModule(callback) {\n this.loadChildren = callback;\n return this;\n }\n withComponent(comp) {\n this.component = comp;\n return this;\n }\n /**\n * @deprecated Use withComponent() instead.\n */\n setComponent(comp) {\n return this.withComponent(comp);\n }\n withChildren(...routes) {\n this.children = routes;\n return this;\n }\n /**\n * @deprecated Use withChildren() instead.\n */\n setChildren(...routes) {\n return this.withChildren(...routes);\n }\n addResolve(paramName, resolver) {\n this.resolvers[paramName] = resolver;\n return this;\n }\n addCanActivate(...fns) {\n this.canActivate.push(...fns);\n return this;\n }\n addCanDeactivate(...fns) {\n this.canDeactivate.push(...fns);\n return this;\n }\n addCanActivateChild(...fns) {\n this.canActivateChild.push(...fns);\n return this;\n }\n withRunGuardsAndResolvers(value) {\n this.runGuardsAndResolvers = value;\n return this;\n }\n /**\n * @deprecated Use withRunGuardsAndResolvers() instead.\n */\n setRunGuardsAndResolvers(value) {\n return this.withRunGuardsAndResolvers(value);\n }\n build() {\n this.checkChildrenMatch();\n let res = {\n path: this.route.path,\n providers: this.providers,\n title: this.route.name,\n canMatch: this.getCanMatch(),\n };\n if (this.component) {\n res.component = this.component;\n }\n else if (this.loadChildren) {\n res.loadChildren = this.loadChildren;\n }\n res.data = this.data ?? {\n breadcrumb: {\n label: this.route.name,\n disable: this.route.entryDisabled,\n staticStateParams: {\n src: RdtNavigationSource.BREADCRUMB,\n },\n },\n ...this.route.data,\n };\n const guard = (route, state) => {\n const injector = inject(EnvironmentInjector);\n if (runInInjectionContext(injector, this.route.canBeEntered.bind(this.route))) {\n return true;\n }\n else {\n const router = inject(Router);\n const location = inject(Location);\n let url = inject(RDT_CANNOT_BE_ENTERED_PROVIDER);\n if (typeof url === 'function') {\n //console.error(this.route.absolutePath);\n url = runInInjectionContext(injector, url.bind(url, location.path(), state.url, this.route));\n }\n if (typeof url === 'string') {\n return router.parseUrl(url);\n }\n else {\n return false;\n }\n }\n };\n this.canActivate.push(guard);\n res.canActivate = this.canActivate;\n res.canDeactivate = this.canDeactivate;\n // If children exist, change\n // {\n // path: '/path',\n // component: FeatureComponent,\n // children: [...]\n // }\n // into\n // {\n // path: '/path',\n // children: [\n // {\n // path: '',\n // component: FeatureComponent\n // },\n // ...\n // ]\n // }\n if (this.children.length > 0) {\n if (this.loadChildren || this.component) {\n const path = res.path;\n res.path = '';\n res.pathMatch = 'full';\n res.canMatch = undefined;\n res = {\n path: path,\n children: [res, ...this.children],\n canActivateChild: this.canActivateChild,\n canMatch: this.getCanMatch(),\n };\n }\n else {\n res.children = this.children;\n }\n }\n if (Object.keys(this.resolvers).length > 0) {\n res.resolve = this.resolvers;\n }\n if (this.runGuardsAndResolvers) {\n res.runGuardsAndResolvers = this.runGuardsAndResolvers;\n }\n return res;\n }\n getCanMatch() {\n const paramMap = this.route.paramMap;\n const hasNumberParams = Object.keys(paramMap).some((p) => paramMap[p] === 'number');\n if (!hasNumberParams) {\n return undefined;\n }\n const routeSegmentLength = this.route.path.split('/').length;\n const regex = this.route.regex\n ? new RegExp(`^${this.route.regex.source}$`)\n : this.route.absoluteRegex;\n return [\n (route, segments) => {\n const path = segments\n .slice(0, routeSegmentLength)\n .map((s) => s.path)\n .join('/');\n return regex.test(path);\n },\n ];\n }\n checkChildrenMatch() {\n // Check that all routes are present if route is not\n // lazy loaded module.\n if (!this.loadChildren &&\n (this.route.children.length > 0 || this.children.length > 0)) {\n if (this.children.length < this.route.children.length) {\n throw new Error(`RdtRoute ${this.route.name} has ${this.route.children.length} children, but RdtAngularRoute has ${this.children.length}. These numbers must match. Did you forget to call .setChildren() method in global routes definition? Routes with following names should be present: ${this.route.children\n .map((ch) => ch.name)\n .join(', ')}`);\n }\n else if (this.children.length > this.route.children.length) {\n throw new Error(`RdtRoute ${this.route.name} has ${this.route.children.length} children, but RdtAngularRoute has ${this.children.length}. These numbers must match. Did you forget to call .setChildren() method in feature shell routes definition? Routes with following paths should be present: ${this.children\n .map((ch) => ch.path)\n .join(', ')}`);\n }\n const n1 = this.children.map((ch) => ch.path);\n const n2 = this.route.children.map((ch) => ch.path);\n n1.sort();\n n2.sort();\n for (let i = 0; i < n1.length; i++) {\n if (n1[i] !== n2[i]) {\n throw new Error(`Paths of children provided in RdtRoute and\r\n RdtAngularRoute do not match. ${n1[i]} != ${n2[i]}`);\n }\n }\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWFuZ3VsYXItcm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvcmR0LXJvdXRlL3JkdC1hbmd1bGFyLXJvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsbUJBQW1CLEVBRW5CLE1BQU0sRUFFTixxQkFBcUIsR0FFdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQVVMLE1BQU0sR0FJUCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdsRCxNQUFNLE9BQU8sZUFBZTtJQUNsQixLQUFLLENBQWM7SUFDbkIsUUFBUSxHQUFZLEVBQUUsQ0FBQztJQUUvQiwrQ0FBK0M7SUFDdkMsWUFBWSxDQUF3QjtJQUNwQyxTQUFTLENBQWE7SUFDdEIsU0FBUyxHQUF3QyxFQUFFLENBQUM7SUFDcEQsU0FBUyxHQUEwQyxFQUFFLENBQUM7SUFDdEQsV0FBVyxHQUFvQixFQUFFLENBQUM7SUFDbEMsZ0JBQWdCLEdBQXlCLEVBQUUsQ0FBQztJQUM1QyxhQUFhLEdBQXlCLEVBQUUsQ0FBQztJQUN6QyxxQkFBcUIsQ0FBeUI7SUFDOUMsSUFBSSxDQUFRO0lBRXBCLFlBQVksS0FBa0I7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLFNBQTBCO1FBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQThCO1FBQ3ZDLElBQUksQ0FB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QUFDLEVBQUUsQ0FDaEIsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BELEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ25DLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNwQixNQUFNLElBQUksS0FBSyxDQUNiOzRDQUNnQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3BELENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXHJcbiAgaW5qZWN0LFxyXG4gIFByb3ZpZGVyLFxyXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcclxuICBUeXBlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgQ2FuQWN0aXZhdGVDaGlsZEZuLFxyXG4gIENhbkFjdGl2YXRlRm4sXHJcbiAgQ2FuRGVhY3RpdmF0ZUZuLFxyXG4gIENhbk1hdGNoRm4sXHJcbiAgRGF0YSxcclxuICBMb2FkQ2hpbGRyZW5DYWxsYmFjayxcclxuICBSZXNvbHZlRm4sXHJcbiAgUm91dGUsXHJcbiAgUm91dGVyLFxyXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXHJcbiAgUnVuR3VhcmRzQW5kUmVzb2x2ZXJzLFxyXG4gIFVybFNlZ21lbnQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUkRUX0NBTk5PVF9CRV9FTlRFUkVEX1BST1ZJREVSIH0gZnJvbSAnLi4vc2VydmljZXMvcmR0LWNhbm5vdC1iZS1lbnRlcmVkLnRva2VuJztcclxuaW1wb3J0IHsgUmR0TmF2aWdhdGlvblNvdXJjZSB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuL3JkdC1yb3V0ZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmR0QW5ndWxhclJvdXRlPFQgZXh0ZW5kcyBvYmplY3Q+IHtcclxuICBwcml2YXRlIHJvdXRlOiBSZHRSb3V0ZTxUPjtcclxuICBwcml2YXRlIGNoaWxkcmVuOiBSb3V0ZVtdID0gW107XHJcblxyXG4gIC8vIE11c3QgYmUgc2V0IGZyb20gY29tcG9uZW50IGRlY2xhcmF0aW9uIGZpbGVzXHJcbiAgcHJpdmF0ZSBsb2FkQ2hpbGRyZW4/OiBMb2FkQ2hpbGRyZW5DYWxsYmFjaztcclxuICBwcml2YXRlIGNvbXBvbmVudD86IFR5cGU8YW55PjtcclxuICBwcml2YXRlIHByb3ZpZGVyczogKFByb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnMpW10gPSBbXTtcclxuICBwcml2YXRlIHJlc29sdmVyczogeyBba2V5OiBzdHJpbmddOiBSZXNvbHZlRm48dW5rbm93bj4gfSA9IHt9O1xyXG4gIHByaXZhdGUgY2FuQWN0aXZhdGU6IENhbkFjdGl2YXRlRm5bXSA9IFtdO1xyXG4gIHByaXZhdGUgY2FuQWN0aXZhdGVDaGlsZDogQ2FuQWN0aXZhdGVDaGlsZEZuW10gPSBbXTtcclxuICBwcml2YXRlIGNhbkRlYWN0aXZhdGU6IENhbkRlYWN0aXZhdGVGbjxUPltdID0gW107XHJcbiAgcHJpdmF0ZSBydW5HdWFyZHNBbmRSZXNvbHZlcnM/OiBSdW5HdWFyZHNBbmRSZXNvbHZlcnM7XHJcbiAgcHJpdmF0ZSBkYXRhPzogRGF0YTtcclxuXHJcbiAgY29uc3RydWN0b3Iocm91dGU6IFJkdFJvdXRlPFQ+KSB7XHJcbiAgICB0aGlzLnJvdXRlID0gcm91dGU7XHJcbiAgfVxyXG5cclxuICBwcm92aWRlKC4uLnByb3ZpZGVyczogVHlwZTx1bmtub3duPltdKSB7XHJcbiAgICB0aGlzLnByb3ZpZGVycy5wdXNoKC4uLnByb3ZpZGVycyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIHdpdGhNb2R1bGUoY2FsbGJhY2s6IExvYWRDaGlsZHJlbkNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLmxvYWRDaGlsZHJlbiA9IGNhbGxiYWNrO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIFVzZSB3aXRoTW9kdWxlKCkgaW5zdGVhZC5cclxuICAgKi9cclxuICBzZXRNb2R1bGUoY2FsbGJhY2s6IExvYWRDaGlsZHJlbkNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLmxvYWRDaGlsZHJlbiA9IGNhbGxiYWNrO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICB3aXRoQ29tcG9uZW50KGNvbXA6IFR5cGU8YW55Pikge1xyXG4gICAgdGhpcy5jb21wb25lbnQgPSBjb21wO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIFVzZSB3aXRoQ29tcG9uZW50KCkgaW5zdGVhZC5cclxuICAgKi9cclxuICBzZXRDb21wb25lbnQoY29tcDogVHlwZTxhbnk+KSB7XHJcbiAgICByZXR1cm4gdGhpcy53aXRoQ29tcG9uZW50KGNvbXApO1xyXG4gIH1cclxuXHJcbiAgd2l0aENoaWxkcmVuKC4uLnJvdXRlczogUm91dGVbXSkge1xyXG4gICAgdGhpcy5jaGlsZHJlbiA9IHJvdXRlcztcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugd2l0aENoaWxkcmVuKCkgaW5zdGVhZC5cclxuICAgKi9cclxuICBzZXRDaGlsZHJlbiguLi5yb3V0ZXM6IFJvdXRlW10pIHtcclxuICAgIHJldHVybiB0aGlzLndpdGhDaGlsZHJlbiguLi5yb3V0ZXMpO1xyXG4gIH1cclxuXHJcbiAgYWRkUmVzb2x2ZShwYXJhbU5hbWU6IHN0cmluZywgcmVzb2x2ZXI6IFJlc29sdmVGbjx1bmtub3duPikge1xyXG4gICAgdGhpcy5yZXNvbHZlcnNbcGFyYW1OYW1lXSA9IHJlc29sdmVyO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBhZGRDYW5BY3RpdmF0ZSguLi5mbnM6IENhbkFjdGl2YXRlRm5bXSkge1xyXG4gICAgdGhpcy5jYW5BY3RpdmF0ZS5wdXNoKC4uLmZucyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGFkZENhbkRlYWN0aXZhdGUoLi4uZm5zOiBDYW5EZWFjdGl2YXRlRm48YW55PltdKSB7XHJcbiAgICB0aGlzLmNhbkRlYWN0aXZhdGUucHVzaCguLi5mbnMpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBhZGRDYW5BY3RpdmF0ZUNoaWxkKC4uLmZuczogQ2FuQWN0aXZhdGVDaGlsZEZuW10pIHtcclxuICAgIHRoaXMuY2FuQWN0aXZhdGVDaGlsZC5wdXNoKC4uLmZucyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIHdpdGhSdW5HdWFyZHNBbmRSZXNvbHZlcnModmFsdWU6IFJ1bkd1YXJkc0FuZFJlc29sdmVycykge1xyXG4gICAgdGhpcy5ydW5HdWFyZHNBbmRSZXNvbHZlcnMgPSB2YWx1ZTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugd2l0aFJ1bkd1YXJkc0FuZFJlc29sdmVycygpIGluc3RlYWQuXHJcbiAgICovXHJcbiAgc2V0UnVuR3VhcmRzQW5kUmVzb2x2ZXJzKHZhbHVlOiBSdW5HdWFyZHNBbmRSZXNvbHZlcnMpIHtcclxuICAgIHJldHVybiB0aGlzLndpdGhSdW5HdWFyZHNBbmRSZXNvbHZlcnModmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgYnVpbGQoKTogUm91dGUge1xyXG4gICAgdGhpcy5jaGVja0NoaWxkcmVuTWF0Y2goKTtcclxuXHJcbiAgICBsZXQgcmVzOiBSb3V0ZSA9IHtcclxuICAgICAgcGF0aDogdGhpcy5yb3V0ZS5wYXRoLFxyXG4gICAgICBwcm92aWRlcnM6IHRoaXMucHJvdmlkZXJzLFxyXG4gICAgICB0aXRsZTogdGhpcy5yb3V0ZS5uYW1lLFxyXG4gICAgICBjYW5NYXRjaDogdGhpcy5nZXRDYW5NYXRjaCgpLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5jb21wb25lbnQpIHtcclxuICAgICAgcmVzLmNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmxvYWRDaGlsZHJlbikge1xyXG4gICAgICByZXMubG9hZENoaWxkcmVuID0gdGhpcy5sb2FkQ2hpbGRyZW47XHJcbiAgICB9XHJcblxyXG4gICAgcmVzLmRhdGEgPSB0aGlzLmRhdGEgPz8ge1xyXG4gICAgICBicmVhZGNydW1iOiB7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMucm91dGUubmFtZSxcclxuICAgICAgICBkaXNhYmxlOiB0aGlzLnJvdXRlLmVudHJ5RGlzYWJsZWQsXHJcbiAgICAgICAgc3RhdGljU3RhdGVQYXJhbXM6IHtcclxuICAgICAgICAgIHNyYzogUmR0TmF2aWdhdGlvblNvdXJjZS5CUkVBRENSVU1CLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLnRoaXMucm91dGUuZGF0YSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZ3VhcmQ6IENhbkFjdGl2YXRlRm4gPSAoXHJcbiAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcnVuSW5JbmplY3Rpb25Db250ZXh0KFxyXG4gICAgICAgICAgaW5qZWN0b3IsXHJcbiAgICAgICAgICB0aGlzLnJvdXRlLmNhbkJlRW50ZXJlZC5iaW5kKHRoaXMucm91dGUpXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XHJcbiAgICAgICAgbGV0IHVybCA9IGluamVjdChSRFRfQ0FOTk9UX0JFX0VOVEVSRURfUFJPVklERVIpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZXJyb3IodGhpcy5yb3V0ZS5hYnNvbHV0ZVBhdGgpO1xyXG4gICAgICAgICAgdXJsID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KFxyXG4gICAgICAgICAgICBpbmplY3RvcixcclxuICAgICAgICAgICAgdXJsLmJpbmQodXJsLCBsb2NhdGlvbi5wYXRoKCksIHN0YXRlLnVybCwgdGhpcy5yb3V0ZSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgcmV0dXJuIHJvdXRlci5wYXJzZVVybCh1cmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5jYW5BY3RpdmF0ZS5wdXNoKGd1YXJkKTtcclxuXHJcbiAgICByZXMuY2FuQWN0aXZhdGUgPSB0aGlzLmNhbkFjdGl2YXRlO1xyXG4gICAgcmVzLmNhbkRlYWN0aXZhdGUgPSB0aGlzLmNhbkRlYWN0aXZhdGU7XHJcblxyXG4gICAgLy8gSWYgY2hpbGRyZW4gZXhpc3QsIGNoYW5nZVxyXG4gICAgLy8ge1xyXG4gICAgLy8gICAgcGF0aDogJy9wYXRoJyxcclxuICAgIC8vICAgIGNvbXBvbmVudDogRmVhdHVyZUNvbXBvbmVudCxcclxuICAgIC8vICAgIGNoaWxkcmVuOiBbLi4uXVxyXG4gICAgLy8gfVxyXG4gICAgLy8gaW50b1xyXG4gICAgLy8ge1xyXG4gICAgLy8gICAgcGF0aDogJy9wYXRoJyxcclxuICAgIC8vICAgIGNoaWxkcmVuOiBbXHJcbiAgICAvLyAgICAgIHtcclxuICAgIC8vICAgICAgICBwYXRoOiAnJyxcclxuICAgIC8vICAgICAgICBjb21wb25lbnQ6IEZlYXR1cmVDb21wb25lbnRcclxuICAgIC8vICAgICAgfSxcclxuICAgIC8vICAgIC4uLlxyXG4gICAgLy8gICAgXVxyXG4gICAgLy8gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAodGhpcy5sb2FkQ2hpbGRyZW4gfHwgdGhpcy5jb21wb25lbnQpIHtcclxuICAgICAgICBjb25zdCBwYXRoID0gcmVzLnBhdGg7XHJcbiAgICAgICAgcmVzLnBhdGggPSAnJztcclxuICAgICAgICByZXMucGF0aE1hdGNoID0gJ2Z1bGwnO1xyXG4gICAgICAgIHJlcy5jYW5NYXRjaCA9IHVuZGVmaW5lZDtcclxuICAgICAgICByZXMgPSB7XHJcbiAgICAgICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICAgICAgY2hpbGRyZW46IFtyZXMsIC4uLnRoaXMuY2hpbGRyZW5dLFxyXG4gICAgICAgICAgY2FuQWN0aXZhdGVDaGlsZDogdGhpcy5jYW5BY3RpdmF0ZUNoaWxkLFxyXG4gICAgICAgICAgY2FuTWF0Y2g6IHRoaXMuZ2V0Q2FuTWF0Y2goKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlcy5jaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5yZXNvbHZlcnMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmVzLnJlc29sdmUgPSB0aGlzLnJlc29sdmVycztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5ydW5HdWFyZHNBbmRSZXNvbHZlcnMpIHtcclxuICAgICAgcmVzLnJ1bkd1YXJkc0FuZFJlc29sdmVycyA9IHRoaXMucnVuR3VhcmRzQW5kUmVzb2x2ZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENhbk1hdGNoKCk6IENhbk1hdGNoRm5bXSB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBwYXJhbU1hcCA9IHRoaXMucm91dGUucGFyYW1NYXA7XHJcbiAgICBjb25zdCBoYXNOdW1iZXJQYXJhbXMgPSBPYmplY3Qua2V5cyhwYXJhbU1hcCkuc29tZShcclxuICAgICAgKHApID0+IHBhcmFtTWFwW3AgYXMga2V5b2YgVF0gPT09ICdudW1iZXInXHJcbiAgICApO1xyXG4gICAgaWYgKCFoYXNOdW1iZXJQYXJhbXMpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJvdXRlU2VnbWVudExlbmd0aCA9IHRoaXMucm91dGUucGF0aC5zcGxpdCgnLycpLmxlbmd0aDtcclxuICAgIGNvbnN0IHJlZ2V4ID0gdGhpcy5yb3V0ZS5yZWdleFxyXG4gICAgICA/IG5ldyBSZWdFeHAoYF4ke3RoaXMucm91dGUucmVnZXguc291cmNlfSRgKVxyXG4gICAgICA6IHRoaXMucm91dGUuYWJzb2x1dGVSZWdleDtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIChyb3V0ZTogUm91dGUsIHNlZ21lbnRzOiBVcmxTZWdtZW50W10pID0+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gc2VnbWVudHNcclxuICAgICAgICAgIC5zbGljZSgwLCByb3V0ZVNlZ21lbnRMZW5ndGgpXHJcbiAgICAgICAgICAubWFwKChzKSA9PiBzLnBhdGgpXHJcbiAgICAgICAgICAuam9pbignLycpO1xyXG4gICAgICAgIHJldHVybiByZWdleC50ZXN0KHBhdGgpO1xyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tDaGlsZHJlbk1hdGNoKCkge1xyXG4gICAgLy8gQ2hlY2sgdGhhdCBhbGwgcm91dGVzIGFyZSBwcmVzZW50IGlmIHJvdXRlIGlzIG5vdFxyXG4gICAgLy8gbGF6eSBsb2FkZWQgbW9kdWxlLlxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5sb2FkQ2hpbGRyZW4gJiZcclxuICAgICAgKHRoaXMucm91dGUuY2hpbGRyZW4ubGVuZ3RoID4gMCB8fCB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApXHJcbiAgICApIHtcclxuICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDwgdGhpcy5yb3V0ZS5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBgUmR0Um91dGUgJHt0aGlzLnJvdXRlLm5hbWV9IGhhcyAke1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlLmNoaWxkcmVuLmxlbmd0aFxyXG4gICAgICAgICAgfSBjaGlsZHJlbiwgYnV0IFJkdEFuZ3VsYXJSb3V0ZSBoYXMgJHtcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5sZW5ndGhcclxuICAgICAgICAgIH0uIFRoZXNlIG51bWJlcnMgbXVzdCBtYXRjaC4gRGlkIHlvdSBmb3JnZXQgdG8gY2FsbCAuc2V0Q2hpbGRyZW4oKSBtZXRob2QgaW4gZ2xvYmFsIHJvdXRlcyBkZWZpbml0aW9uPyBSb3V0ZXMgd2l0aCBmb2xsb3dpbmcgbmFtZXMgc2hvdWxkIGJlIHByZXNlbnQ6ICR7dGhpcy5yb3V0ZS5jaGlsZHJlblxyXG4gICAgICAgICAgICAubWFwKChjaCkgPT4gY2gubmFtZSlcclxuICAgICAgICAgICAgLmpvaW4oJywgJyl9YFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiB0aGlzLnJvdXRlLmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBSZHRSb3V0ZSAke3RoaXMucm91dGUubmFtZX0gaGFzICR7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGUuY2hpbGRyZW4ubGVuZ3RoXHJcbiAgICAgICAgICB9IGNoaWxkcmVuLCBidXQgUmR0QW5ndWxhclJvdXRlIGhhcyAke1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmxlbmd0aFxyXG4gICAgICAgICAgfS4gVGhlc2UgbnVtYmVycyBtdXN0IG1hdGNoLiBEaWQgeW91IGZvcmdldCB0byBjYWxsIC5zZXRDaGlsZHJlbigpIG1ldGhvZCBpbiBmZWF0dXJlIHNoZWxsIHJvdXRlcyBkZWZpbml0aW9uPyBSb3V0ZXMgd2l0aCBmb2xsb3dpbmcgcGF0aHMgc2hvdWxkIGJlIHByZXNlbnQ6ICR7dGhpcy5jaGlsZHJlblxyXG4gICAgICAgICAgICAubWFwKChjaCkgPT4gY2gucGF0aClcclxuICAgICAgICAgICAgLmpvaW4oJywgJyl9YFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbjEgPSB0aGlzLmNoaWxkcmVuLm1hcCgoY2gpID0+IGNoLnBhdGghKTtcclxuICAgICAgY29uc3QgbjIgPSB0aGlzLnJvdXRlLmNoaWxkcmVuLm1hcCgoY2gpID0+IGNoLnBhdGgpO1xyXG4gICAgICBuMS5zb3J0KCk7XHJcbiAgICAgIG4yLnNvcnQoKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuMS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChuMVtpXSAhPT0gbjJbaV0pIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYFBhdGhzIG9mIGNoaWxkcmVuIHByb3ZpZGVkIGluIFJkdFJvdXRlIGFuZFxyXG4gICAgICAgICAgICBSZHRBbmd1bGFyUm91dGUgZG8gbm90IG1hdGNoLiAke24xW2ldfSAhPSAke24yW2ldfWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { runInInjectionContext } from '@angular/core';\nimport { RdtStringUtils } from '@ngrdt/utils';\nimport { RdtAngularRoute } from './rdt-angular-route';\nimport { RdtReadonlyParameters } from './utils';\nexport function ALWAYS_TRUE() {\n return true;\n}\nexport class RdtRoute {\n orderedParams = [];\n _paramMap = {};\n _regex = null;\n paramMappings = [];\n _staticParams = {};\n _queryParams = {};\n _stateParams = {};\n _data = {};\n _name;\n _path;\n _parent = null;\n _children = [];\n _entryDisabled = false;\n _canBeEntered = ALWAYS_TRUE;\n _built = false;\n _absoluteRegex;\n /**\n * Map of parameters and their types.\n */\n get paramMap() {\n return this._paramMap;\n }\n /**\n * Human readable name for display in breadcrumbs, title, etc.\n */\n get name() {\n return this._name;\n }\n /**\n * Path of the route relative to parent route.\n */\n get path() {\n return this._path;\n }\n /**\n * Parent route.\n */\n get parent() {\n return this._parent;\n }\n /**\n * Child routes.\n */\n get children() {\n return this._children;\n }\n /**\n * Absolute path of parent route or '/' if there is no parent.\n * Hostname excluded.\n */\n get basePath() {\n return this._parent ? this._parent.absolutePath : '/';\n }\n /**\n * Absolute path of the route. Hostname excluded.\n */\n get absolutePath() {\n return RdtStringUtils.joinPaths(this.basePath, this._path);\n }\n /**\n * Regular expression route path relative to parent route.\n * Hostname excluded.\n */\n get regex() {\n return this._regex;\n }\n /**\n * Regular expression to match only this route (not children\n * or parent routes). Hostname excluded.\n */\n get absoluteRegex() {\n if (this._absoluteRegex) {\n return this._absoluteRegex;\n }\n if (!this._regex) {\n this._absoluteRegex = new RegExp('^/$');\n if (this._parent) {\n throw new Error('Nested route with empty path is not allowed.');\n }\n }\n else if (this._parent) {\n // Remove initial ^ and ending $\n const parent = this._parent.absoluteRegex.source.slice(1, -1);\n this._absoluteRegex = new RegExp('^' + RdtStringUtils.joinPaths(parent, this._regex.source) + '$');\n }\n else {\n this._absoluteRegex = new RegExp('^' + RdtStringUtils.joinPaths('/', this._regex.source) + '$');\n }\n return this._absoluteRegex;\n }\n /**\n * Denotes disabled route entry.\n * If true, route should have no NgModule\n * or component and only serves as virtual module\n * for breadcrumb.\n */\n get entryDisabled() {\n return this._entryDisabled;\n }\n /**\n * Statically set state params used when navigating to this instance.\n */\n get stateParams() {\n return this._stateParams;\n }\n /**\n * Statically set query params used when navigating to this instance.\n */\n get queryParams() {\n return this._queryParams;\n }\n /**\n * @param url Absolute path to test.\n * @returns True if url matches this route.\n */\n testUrl(url) {\n return this.absoluteRegex.test(url);\n }\n /**\n * Statically set parameters used when navigating to this instance.\n */\n get staticParams() {\n return { ...this._staticParams };\n }\n get hasCanBeEnteredGuard() {\n return this._canBeEntered !== ALWAYS_TRUE;\n }\n /**\n * Data that is passed to Angular route definition.\n */\n get data() {\n return this._data;\n }\n /**\n * Meta guard that is used by [rdtRouterLink] and RdtMenu\n * to determine if route can be entered.\n * @param injector Environment or custom injector.\n * @returns True if route can be entered.\n */\n canBeEntered(injector) {\n return injector\n ? runInInjectionContext(injector, this._canBeEntered)\n : this._canBeEntered();\n }\n /**\n * Extracts url parameters from absolute path for this path and each parent.\n */\n parseAbsoluteUrl(url) {\n const reg = this.absoluteRegex;\n if (!reg.test(url)) {\n return null;\n }\n const matches = reg.exec(url);\n if (matches) {\n const values = matches.slice(1).reverse();\n const obj = this.fill(values);\n if (obj) {\n return new RdtReadonlyParameters(obj);\n }\n else {\n return null;\n }\n }\n else {\n return null;\n }\n }\n fill(values, res = {}) {\n const params = {};\n const reversedParams = this.orderedParams.slice().reverse();\n for (let i = 0; i < reversedParams.length && i < values.length; i++) {\n const key = reversedParams[i];\n const mappedKey = this.paramMappings.find((m) => m.urlName === key)?.tableName ?? key;\n let val = values[i];\n if (this._paramMap[key] === 'number') {\n val = parseInt(val);\n }\n params[mappedKey] = val;\n }\n res[this.absolutePath] = params;\n if (values.length > reversedParams.length && this._parent) {\n this._parent.fill(values.slice(reversedParams.length), res);\n }\n return res;\n }\n /**\n * Fills parameters in path with values from paramMap.\n * Use withStaticParams() beforehand in case parent paths contain parameters.\n * @param paramMap Must contain all parameters for this route.\n * @returns Absolute path.\n */\n createAbsoluteUrl(paramMap = this._staticParams) {\n if (!this._parent) {\n return this.createUrl(this.absolutePath, paramMap);\n }\n else {\n return RdtStringUtils.joinPaths(this._parent.createAbsoluteUrl(), this.createRelativeUrl(paramMap));\n }\n }\n createRelativeUrl(paramMap = this._staticParams) {\n return this.createUrl(this.path, paramMap);\n }\n createUrl(path, paramMap) {\n const paramNames = Object.keys(this._paramMap);\n paramNames.sort((a, b) => b.length - a.length);\n const extendedParamMap = { ...paramMap };\n this.paramMappings.forEach((mapping) => {\n if (mapping.tableName in paramMap) {\n extendedParamMap[mapping.urlName] = paramMap[mapping.tableName];\n }\n });\n paramNames.forEach((param) => {\n path = path.replace(`:${param}`, `${extendedParamMap[param]}`);\n });\n return path;\n }\n toAngularRoute() {\n if (!this._built) {\n throw new Error('You have to first call .build() on route!');\n }\n return new RdtAngularRoute(this);\n }\n /**\n * Provides static mapping for parameter names tableName -> urlName.\n * Returns new instance of RdtRoute<T> that is clone of\n * this route and its parents (NOT children).\n * @returns Clone of this route with mapped parameter names.\n */\n withParamMappings(mappings) {\n const clone = this.clone();\n clone.paramMappings = mappings;\n return clone;\n }\n /**\n * Sets parameters for itself or parents.\n * Returns new instance of RdtRoute<T> that is clone of\n * this route and its parents (NOT children).\n * @returns Clone of this route with static parameters set.\n */\n withStaticParams(param1, param2) {\n const clone = this.clone();\n if (param2) {\n const routeAbsPath = param1.absolutePath;\n let current = clone;\n while (current) {\n if (current.absolutePath === routeAbsPath) {\n current._staticParams = param2;\n }\n current = current._parent;\n }\n }\n else {\n clone._staticParams = param1;\n }\n return clone;\n }\n withQueryParams(queryParams) {\n const clone = this.clone();\n clone._queryParams = { ...queryParams };\n return clone;\n }\n withStateParams(stateParams) {\n const clone = this.clone();\n clone._stateParams = { ...stateParams };\n return clone;\n }\n /**\n * @returns Partial of object that only contains properties necessary to create this route.\n */\n extractRouteParams(row) {\n const res = {};\n this.orderedParams.forEach((param) => {\n const mapping = this.paramMappings.find((m) => m.urlName === param);\n const mappedParam = (mapping?.tableName ?? param);\n if (mappedParam in row) {\n res[mappedParam] = row[mappedParam];\n }\n });\n return res;\n }\n /**\n * @returns New instance of RdtRoute<T> that is clone of\n * this route and its parents (NOT children).\n */\n clone() {\n const clone = new RdtRoute();\n clone._name = this._name;\n clone._parent = this._parent?.clone() ?? null;\n clone._path = this.path;\n clone._entryDisabled = this._entryDisabled;\n clone.orderedParams = [...this.orderedParams];\n clone._paramMap = { ...this._paramMap };\n clone._regex = this._regex ? new RegExp(this._regex) : null;\n clone.paramMappings = this.paramMappings;\n clone._staticParams = { ...this._staticParams };\n clone._stateParams = { ...this._stateParams };\n return clone;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3JkdC1yb3V0ZS9yZHQtcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBOEIscUJBQXFCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFNUUsTUFBTSxVQUFVLFdBQVc7SUFDekIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxPQUFPLFFBQVE7SUFDVCxhQUFhLEdBQWEsRUFBRSxDQUFDO0lBQzdCLFNBQVMsR0FBb0IsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sR0FBa0IsSUFBSSxDQUFDO0lBQzdCLGFBQWEsR0FBbUIsRUFBRSxDQUFDO0lBQ25DLGFBQWEsR0FBZSxFQUFFLENBQUM7SUFDL0IsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLEtBQUssR0FBUyxFQUFFLENBQUM7SUFFakIsS0FBSyxDQUFVO0lBQ2YsS0FBSyxDQUFVO0lBQ2YsT0FBTyxHQUFvQixJQUFJLENBQUM7SUFDaEMsU0FBUyxHQUFlLEVBQUUsQ0FBQztJQUMzQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLGFBQWEsR0FBa0IsV0FBVyxDQUFDO0lBQzNDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFakIsY0FBYyxDQUFVO0lBRWhDOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUss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Q0FBQyxjQUFjLENBQUM7UUFDM0MsS0FBSyxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN4QyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVELEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxLQUFLLENBQUMsYUFBYSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEQsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRhLCBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRTdHJpbmdVdGlscyB9IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IFJkdEFuZ3VsYXJSb3V0ZSB9IGZyb20gJy4vcmR0LWFuZ3VsYXItcm91dGUnO1xyXG5pbXBvcnQgeyBQYXJhbU1hcHBpbmcsIFBhcmFtVHlwZU1hcCwgUmR0UmVhZG9ubHlQYXJhbWV0ZXJzIH0gZnJvbSAnLi91dGlscyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQUxXQVlTX1RSVUUoKSB7XHJcbiAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZHRSb3V0ZTxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XHJcbiAgcHJvdGVjdGVkIG9yZGVyZWRQYXJhbXM6IHN0cmluZ1tdID0gW107XHJcbiAgcHJvdGVjdGVkIF9wYXJhbU1hcDogUGFyYW1UeXBlTWFwPFQ+ID0ge307XHJcbiAgcHJvdGVjdGVkIF9yZWdleDogUmVnRXhwIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHBhcmFtTWFwcGluZ3M6IFBhcmFtTWFwcGluZ1tdID0gW107XHJcbiAgcHJvdGVjdGVkIF9zdGF0aWNQYXJhbXM6IFBhcnRpYWw8VD4gPSB7fTtcclxuICBwcm90ZWN0ZWQgX3F1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7fTtcclxuICBwcm90ZWN0ZWQgX3N0YXRlUGFyYW1zOiBQYXJhbXMgPSB7fTtcclxuICBwcm90ZWN0ZWQgX2RhdGE6IERhdGEgPSB7fTtcclxuXHJcbiAgcHJvdGVjdGVkIF9uYW1lITogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfcGF0aCE6IHN0cmluZztcclxuICBwcm90ZWN0ZWQgX3BhcmVudDogUmR0Um91dGUgfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgX2NoaWxkcmVuOiBSZHRSb3V0ZVtdID0gW107XHJcbiAgcHJvdGVjdGVkIF9lbnRyeURpc2FibGVkID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIF9jYW5CZUVudGVyZWQ6ICgpID0+IGJvb2xlYW4gPSBBTFdBWVNfVFJVRTtcclxuICBwcm90ZWN0ZWQgX2J1aWx0ID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2Fic29sdXRlUmVnZXg/OiBSZWdFeHA7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcCBvZiBwYXJhbWV0ZXJzIGFuZCB0aGVpciB0eXBlcy5cclxuICAgKi9cclxuICBnZXQgcGFyYW1NYXAoKTogUmVhZG9ubHk8UGFyYW1UeXBlTWFwPFQ+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1NYXA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIdW1hbiByZWFkYWJsZSBuYW1lIGZvciBkaXNwbGF5IGluIGJyZWFkY3J1bWJzLCB0aXRsZSwgZXRjLlxyXG4gICAqL1xyXG4gIGdldCBuYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXRoIG9mIHRoZSByb3V0ZSByZWxhdGl2ZSB0byBwYXJlbnQgcm91dGUuXHJcbiAgICovXHJcbiAgZ2V0IHBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGF0aDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcmVudCByb3V0ZS5cclxuICAgKi9cclxuICBnZXQgcGFyZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoaWxkIHJvdXRlcy5cclxuICAgKi9cclxuICBnZXQgY2hpbGRyZW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBYnNvbHV0ZSBwYXRoIG9mIHBhcmVudCByb3V0ZSBvciAnLycgaWYgdGhlcmUgaXMgbm8gcGFyZW50LlxyXG4gICAqIEhvc3RuYW1lIGV4Y2x1ZGVkLlxyXG4gICAqL1xyXG4gIGdldCBiYXNlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudC5hYnNvbHV0ZVBhdGggOiAnLyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSByb3V0ZS4gSG9zdG5hbWUgZXhjbHVkZWQuXHJcbiAgICovXHJcbiAgZ2V0IGFic29sdXRlUGF0aCgpIHtcclxuICAgIHJldHVybiBSZHRTdHJpbmdVdGlscy5qb2luUGF0aHModGhpcy5iYXNlUGF0aCwgdGhpcy5fcGF0aCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWd1bGFyIGV4cHJlc3Npb24gcm91dGUgcGF0aCByZWxhdGl2ZSB0byBwYXJlbnQgcm91dGUuXHJcbiAgICogSG9zdG5hbWUgZXhjbHVkZWQuXHJcbiAgICovXHJcbiAgZ2V0IHJlZ2V4KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlZ2V4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIG9ubHkgdGhpcyByb3V0ZSAobm90IGNoaWxkcmVuXHJcbiAgICogb3IgcGFyZW50IHJvdXRlcykuIEhvc3RuYW1lIGV4Y2x1ZGVkLlxyXG4gICAqL1xyXG4gIGdldCBhYnNvbHV0ZVJlZ2V4KCk6IFJlZ0V4cCB7XHJcbiAgICBpZiAodGhpcy5fYWJzb2x1dGVSZWdleCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYWJzb2x1dGVSZWdleDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3JlZ2V4KSB7XHJcbiAgICAgIHRoaXMuX2Fic29sdXRlUmVnZXggPSBuZXcgUmVnRXhwKCdeLyQnKTtcclxuICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTmVzdGVkIHJvdXRlIHdpdGggZW1wdHkgcGF0aCBpcyBub3QgYWxsb3dlZC4nKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgLy8gUmVtb3ZlIGluaXRpYWwgXiBhbmQgZW5kaW5nICRcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fcGFyZW50LmFic29sdXRlUmVnZXguc291cmNlLnNsaWNlKDEsIC0xKTtcclxuICAgICAgdGhpcy5fYWJzb2x1dGVSZWdleCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgICAgJ14nICsgUmR0U3RyaW5nVXRpbHMuam9pblBhdGhzKHBhcmVudCwgdGhpcy5fcmVnZXguc291cmNlKSArICckJ1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYWJzb2x1dGVSZWdleCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgICAgJ14nICsgUmR0U3RyaW5nVXRpbHMuam9pblBhdGhzKCcvJywgdGhpcy5fcmVnZXguc291cmNlKSArICckJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2Fic29sdXRlUmVnZXg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZW5vdGVzIGRpc2FibGVkIHJvdXRlIGVudHJ5LlxyXG4gICAqIElmIHRydWUsIHJvdXRlIHNob3VsZCBoYXZlIG5vIE5nTW9kdWxlXHJcbiAgICogb3IgY29tcG9uZW50IGFuZCBvbmx5IHNlcnZlcyBhcyB2aXJ0dWFsIG1vZHVsZVxyXG4gICAqIGZvciBicmVhZGNydW1iLlxyXG4gICAqL1xyXG4gIGdldCBlbnRyeURpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VudHJ5RGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGF0aWNhbGx5IHNldCBzdGF0ZSBwYXJhbXMgdXNlZCB3aGVuIG5hdmlnYXRpbmcgdG8gdGhpcyBpbnN0YW5jZS5cclxuICAgKi9cclxuICBnZXQgc3RhdGVQYXJhbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdGVQYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGF0aWNhbGx5IHNldCBxdWVyeSBwYXJhbXMgdXNlZCB3aGVuIG5hdmlnYXRpbmcgdG8gdGhpcyBpbnN0YW5jZS5cclxuICAgKi9cclxuICBnZXQgcXVlcnlQYXJhbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlQYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gdXJsIEFic29sdXRlIHBhdGggdG8gdGVzdC5cclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHVybCBtYXRjaGVzIHRoaXMgcm91dGUuXHJcbiAgICovXHJcbiAgdGVzdFVybCh1cmw6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYWJzb2x1dGVSZWdleC50ZXN0KHVybCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGF0aWNhbGx5IHNldCBwYXJhbWV0ZXJzIHVzZWQgd2hlbiBuYXZpZ2F0aW5nIHRvIHRoaXMgaW5zdGFuY2UuXHJcbiAgICovXHJcbiAgZ2V0IHN0YXRpY1BhcmFtcygpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuX3N0YXRpY1BhcmFtcyB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0NhbkJlRW50ZXJlZEd1YXJkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbkJlRW50ZXJlZCAhPT0gQUxXQVlTX1RSVUU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRhIHRoYXQgaXMgcGFzc2VkIHRvIEFuZ3VsYXIgcm91dGUgZGVmaW5pdGlvbi5cclxuICAgKi9cclxuICBnZXQgZGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0YSBndWFyZCB0aGF0IGlzIHVzZWQgYnkgW3JkdFJvdXRlckxpbmtdIGFuZCBSZHRNZW51XHJcbiAgICogdG8gZGV0ZXJtaW5lIGlmIHJvdXRlIGNhbiBiZSBlbnRlcmVkLlxyXG4gICAqIEBwYXJhbSBpbmplY3RvciBFbnZpcm9ubWVudCBvciBjdXN0b20gaW5qZWN0b3IuXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiByb3V0ZSBjYW4gYmUgZW50ZXJlZC5cclxuICAgKi9cclxuICBjYW5CZUVudGVyZWQoaW5qZWN0b3I/OiBJbmplY3Rvcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGluamVjdG9yXHJcbiAgICAgID8gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCB0aGlzLl9jYW5CZUVudGVyZWQpXHJcbiAgICAgIDogdGhpcy5fY2FuQmVFbnRlcmVkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHRyYWN0cyB1cmwgcGFyYW1ldGVycyBmcm9tIGFic29sdXRlIHBhdGggZm9yIHRoaXMgcGF0aCBhbmQgZWFjaCBwYXJlbnQuXHJcbiAgICovXHJcbiAgcGFyc2VBYnNvbHV0ZVVybCh1cmw6IHN0cmluZyk6IFJkdFJlYWRvbmx5UGFyYW1ldGVycyB8IG51bGwge1xyXG4gICAgY29uc3QgcmVnID0gdGhpcy5hYnNvbHV0ZVJlZ2V4O1xyXG4gICAgaWYgKCFyZWcudGVzdCh1cmwpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlZy5leGVjKHVybCk7XHJcbiAgICBpZiAobWF0Y2hlcykge1xyXG4gICAgICBjb25zdCB2YWx1ZXMgPSBtYXRjaGVzLnNsaWNlKDEpLnJldmVyc2UoKTtcclxuICAgICAgY29uc3Qgb2JqID0gdGhpcy5maWxsKHZhbHVlcyk7XHJcbiAgICAgIGlmIChvYmopIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJkdFJlYWRvbmx5UGFyYW1ldGVycyhvYmopO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsbCh2YWx1ZXM6IHN0cmluZ1tdLCByZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkge1xyXG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXkgaW4ga2V5b2YgVF0/OiBzdHJpbmcgfCBudW1iZXIgfSA9IHt9O1xyXG4gICAgY29uc3QgcmV2ZXJzZWRQYXJhbXMgPSB0aGlzLm9yZGVyZWRQYXJhbXMuc2xpY2UoKS5yZXZlcnNlKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldmVyc2VkUGFyYW1zLmxlbmd0aCAmJiBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGtleSA9IHJldmVyc2VkUGFyYW1zW2ldIGFzIGtleW9mIFQ7XHJcbiAgICAgIGNvbnN0IG1hcHBlZEtleSA9XHJcbiAgICAgICAgdGhpcy5wYXJhbU1hcHBpbmdzLmZpbmQoKG0pID0+IG0udXJsTmFtZSA9PT0ga2V5KT8udGFibGVOYW1lID8/IGtleTtcclxuICAgICAgbGV0IHZhbDogc3RyaW5nIHwgbnVtYmVyID0gdmFsdWVzW2ldO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX3BhcmFtTWFwW2tleV0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgdmFsID0gcGFyc2VJbnQodmFsKTtcclxuICAgICAgfVxyXG4gICAgICBwYXJhbXNbbWFwcGVkS2V5IGFzIGtleW9mIFRdID0gdmFsO1xyXG4gICAgfVxyXG4gICAgcmVzW3RoaXMuYWJzb2x1dGVQYXRoXSA9IHBhcmFtcztcclxuXHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA+IHJldmVyc2VkUGFyYW1zLmxlbmd0aCAmJiB0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgdGhpcy5fcGFyZW50LmZpbGwodmFsdWVzLnNsaWNlKHJldmVyc2VkUGFyYW1zLmxlbmd0aCksIHJlcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlsbHMgcGFyYW1ldGVycyBpbiBwYXRoIHdpdGggdmFsdWVzIGZyb20gcGFyYW1NYXAuXHJcbiAgICogVXNlIHdpdGhTdGF0aWNQYXJhbXMoKSBiZWZvcmVoYW5kIGluIGNhc2UgcGFyZW50IHBhdGhzIGNvbnRhaW4gcGFyYW1ldGVycy5cclxuICAgKiBAcGFyYW0gcGFyYW1NYXAgTXVzdCBjb250YWluIGFsbCBwYXJhbWV0ZXJzIGZvciB0aGlzIHJvdXRlLlxyXG4gICAqIEByZXR1cm5zIEFic29sdXRlIHBhdGguXHJcbiAgICovXHJcbiAgY3JlYXRlQWJzb2x1dGVVcmwocGFyYW1NYXA6IFBhcnRpYWw8VD4gPSB0aGlzLl9zdGF0aWNQYXJhbXMpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVXJsKHRoaXMuYWJzb2x1dGVQYXRoLCBwYXJhbU1hcCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUmR0U3RyaW5nVXRpbHMuam9pblBhdGhzKFxyXG4gICAgICAgIHRoaXMuX3BhcmVudC5jcmVhdGVBYnNvbHV0ZVVybCgpLFxyXG4gICAgICAgIHRoaXMuY3JlYXRlUmVsYXRpdmVVcmwocGFyYW1NYXApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVSZWxhdGl2ZVVybChwYXJhbU1hcDogUGFydGlhbDxUPiA9IHRoaXMuX3N0YXRpY1BhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVXJsKHRoaXMucGF0aCwgcGFyYW1NYXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVVcmwocGF0aDogc3RyaW5nLCBwYXJhbU1hcDogUGFydGlhbDxUPikge1xyXG4gICAgY29uc3QgcGFyYW1OYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuX3BhcmFtTWFwKTtcclxuICAgIHBhcmFtTmFtZXMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aCk7XHJcbiAgICBjb25zdCBleHRlbmRlZFBhcmFtTWFwOiBhbnkgPSB7IC4uLnBhcmFtTWFwIH07XHJcblxyXG4gICAgdGhpcy5wYXJhbU1hcHBpbmdzLmZvckVhY2goKG1hcHBpbmcpID0+IHtcclxuICAgICAgaWYgKG1hcHBpbmcudGFibGVOYW1lIGluIHBhcmFtTWFwKSB7XHJcbiAgICAgICAgZXh0ZW5kZWRQYXJhbU1hcFttYXBwaW5nLnVybE5hbWVdID0gKHBhcmFtTWFwIGFzIGFueSlbXHJcbiAgICAgICAgICBtYXBwaW5nLnRhYmxlTmFtZVxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHBhcmFtTmFtZXMuZm9yRWFjaCgocGFyYW0pID0+IHtcclxuICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShgOiR7cGFyYW19YCwgYCR7ZXh0ZW5kZWRQYXJhbU1hcFtwYXJhbSBhcyBrZXlvZiBUXX1gKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgdG9Bbmd1bGFyUm91dGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuX2J1aWx0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGhhdmUgdG8gZmlyc3QgY2FsbCAuYnVpbGQoKSBvbiByb3V0ZSEnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgUmR0QW5ndWxhclJvdXRlPFQ+KHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvdmlkZXMgc3RhdGljIG1hcHBpbmcgZm9yIHBhcmFtZXRlciBuYW1lcyB0YWJsZU5hbWUgLT4gdXJsTmFtZS5cclxuICAgKiBSZXR1cm5zIG5ldyBpbnN0YW5jZSBvZiBSZHRSb3V0ZTxUPiB0aGF0IGlzIGNsb25lIG9mXHJcbiAgICogdGhpcyByb3V0ZSBhbmQgaXRzIHBhcmVudHMgKE5PVCBjaGlsZHJlbikuXHJcbiAgICogQHJldHVybnMgQ2xvbmUgb2YgdGhpcyByb3V0ZSB3aXRoIG1hcHBlZCBwYXJhbWV0ZXIgbmFtZXMuXHJcbiAgICovXHJcbiAgd2l0aFBhcmFtTWFwcGluZ3MobWFwcGluZ3M6IFBhcmFtTWFwcGluZ1tdKSB7XHJcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcclxuICAgIGNsb25lLnBhcmFtTWFwcGluZ3MgPSBtYXBwaW5ncztcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgc3RhdGljIHBhcmFtZXRlcnMgZm9yIHRoaXMgcm91dGUuXHJcbiAgICogQHBhcmFtIHBhcmFtcyBTdGF0aWMgcGFyYW1ldGVycyBmb3IgdGhpcyByb3V0ZS5cclxuICAgKiBAcmV0dXJucyBDbG9uZSBvZiB0aGlzIHdpdGggc3RhdGljIHBhcmFtZXRlcnMgc2V0LlxyXG4gICAqL1xyXG4gIHdpdGhTdGF0aWNQYXJhbXMocGFyYW1zOiBUKTogUmR0Um91dGU8VD47XHJcbiAgd2l0aFN0YXRpY1BhcmFtczxUMiBleHRlbmRzIG9iamVjdD4oXHJcbiAgICByb3V0ZTogUmR0Um91dGU8VDI+LFxyXG4gICAgcGFyYW1zOiBUMlxyXG4gICk6IFJkdFJvdXRlPFQ+O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHBhcmFtZXRlcnMgZm9yIGl0c2VsZiBvciBwYXJlbnRzLlxyXG4gICAqIFJldHVybnMgbmV3IGluc3RhbmNlIG9mIFJkdFJvdXRlPFQ+IHRoYXQgaXMgY2xvbmUgb2ZcclxuICAgKiB0aGlzIHJvdXRlIGFuZCBpdHMgcGFyZW50cyAoTk9UIGNoaWxkcmVuKS5cclxuICAgKiBAcmV0dXJucyBDbG9uZSBvZiB0aGlzIHJvdXRlIHdpdGggc3RhdGljIHBhcmFtZXRlcnMgc2V0LlxyXG4gICAqL1xyXG4gIHdpdGhTdGF0aWNQYXJhbXM8VDIgZXh0ZW5kcyBvYmplY3Q+KHBhcmFtMTogUmR0Um91dGU8VDI+IHwgVCwgcGFyYW0yPzogVDIpIHtcclxuICAgIGNvbnN0IGNsb25lID0gdGhpcy5jbG9uZSgpO1xyXG5cclxuICAgIGlmIChwYXJhbTIpIHtcclxuICAgICAgY29uc3Qgcm91dGVBYnNQYXRoID0gKHBhcmFtMSBhcyBSZHRSb3V0ZTxUMj4pLmFic29sdXRlUGF0aDtcclxuICAgICAgbGV0IGN1cnJlbnQ6IFJkdFJvdXRlIHwgbnVsbCA9IGNsb25lO1xyXG5cclxuICAgICAgd2hpbGUgKGN1cnJlbnQpIHtcclxuICAgICAgICBpZiAoY3VycmVudC5hYnNvbHV0ZVBhdGggPT09IHJvdXRlQWJzUGF0aCkge1xyXG4gICAgICAgICAgY3VycmVudC5fc3RhdGljUGFyYW1zID0gcGFyYW0yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5fcGFyZW50O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjbG9uZS5fc3RhdGljUGFyYW1zID0gcGFyYW0xIGFzIFQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFBhcmFtcykge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5fcXVlcnlQYXJhbXMgPSB7IC4uLnF1ZXJ5UGFyYW1zIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICB3aXRoU3RhdGVQYXJhbXMoc3RhdGVQYXJhbXM6IFBhcmFtcykge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5fc3RhdGVQYXJhbXMgPSB7IC4uLnN0YXRlUGFyYW1zIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcmV0dXJucyBQYXJ0aWFsIG9mIG9iamVjdCB0aGF0IG9ubHkgY29udGFpbnMgcHJvcGVydGllcyBuZWNlc3NhcnkgdG8gY3JlYXRlIHRoaXMgcm91dGUuXHJcbiAgICovXHJcbiAgZXh0cmFjdFJvdXRlUGFyYW1zKHJvdzogVCk6IFBhcnRpYWw8VD4ge1xyXG4gICAgY29uc3QgcmVzOiBQYXJ0aWFsPFQ+ID0ge307XHJcblxyXG4gICAgdGhpcy5vcmRlcmVkUGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1hcHBpbmcgPSB0aGlzLnBhcmFtTWFwcGluZ3MuZmluZCgobSkgPT4gbS51cmxOYW1lID09PSBwYXJhbSk7XHJcbiAgICAgIGNvbnN0IG1hcHBlZFBhcmFtID0gKG1hcHBpbmc/LnRhYmxlTmFtZSA/PyBwYXJhbSkgYXMga2V5b2YgVDtcclxuICAgICAgaWYgKG1hcHBlZFBhcmFtIGluIHJvdykge1xyXG4gICAgICAgIHJlc1ttYXBwZWRQYXJhbV0gPSByb3dbbWFwcGVkUGFyYW1dO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHJldHVybnMgTmV3IGluc3RhbmNlIG9mIFJkdFJvdXRlPFQ+IHRoYXQgaXMgY2xvbmUgb2ZcclxuICAgKiB0aGlzIHJvdXRlIGFuZCBpdHMgcGFyZW50cyAoTk9UIGNoaWxkcmVuKS5cclxuICAgKi9cclxuICBjbG9uZSgpIHtcclxuICAgIGNvbnN0IGNsb25lID0gbmV3IFJkdFJvdXRlPFQ+KCk7XHJcbiAgICBjbG9uZS5fbmFtZSA9IHRoaXMuX25hbWU7XHJcbiAgICBjbG9uZS5fcGFyZW50ID0gdGhpcy5fcGFyZW50Py5jbG9uZSgpID8/IG51bGw7XHJcbiAgICBjbG9uZS5fcGF0aCA9IHRoaXMucGF0aDtcclxuICAgIGNsb25lLl9lbnRyeURpc2FibGVkID0gdGhpcy5fZW50cnlEaXNhYmxlZDtcclxuICAgIGNsb25lLm9yZGVyZWRQYXJhbXMgPSBbLi4udGhpcy5vcmRlcmVkUGFyYW1zXTtcclxuICAgIGNsb25lLl9wYXJhbU1hcCA9IHsgLi4udGhpcy5fcGFyYW1NYXAgfTtcclxuICAgIGNsb25lLl9yZWdleCA9IHRoaXMuX3JlZ2V4ID8gbmV3IFJlZ0V4cCh0aGlzLl9yZWdleCkgOiBudWxsO1xyXG4gICAgY2xvbmUucGFyYW1NYXBwaW5ncyA9IHRoaXMucGFyYW1NYXBwaW5ncztcclxuICAgIGNsb25lLl9zdGF0aWNQYXJhbXMgPSB7IC4uLnRoaXMuX3N0YXRpY1BhcmFtcyB9O1xyXG4gICAgY2xvbmUuX3N0YXRlUGFyYW1zID0geyAuLi50aGlzLl9zdGF0ZVBhcmFtcyB9O1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxufVxyXG4iXX0=","import { RdtRoute } from './rdt-route';\nconst DEFAULT_PARAM_TYPE = 'number';\nexport class RdtRouteBuilder extends RdtRoute {\n /**\n * CanBeEntered function is synchronous function which\n * lets framework hide menu buttons and disable links.\n * Function is run in environment injection context, so\n * you can inject global services, tokens, etc.\n * @param fn\n */\n withCanBeEntered(fn) {\n this._canBeEntered = fn;\n return this;\n }\n /**\n * @deprecated Use withCanBeEntered() instead.\n */\n setCanBeEntered(fn) {\n return this.withCanBeEntered(fn);\n }\n /**\n * Entry disabled route will generate disabled breadcrumb.\n * It should not have any component nor module added to it.\n * @param value\n * @returns\n */\n withEntryDisabled(value = true) {\n this._entryDisabled = value;\n return this;\n }\n /**\n * @deprecated Use withEntryDisabled() instead.\n */\n setEntryDisabled(value = true) {\n return this.withEntryDisabled(value);\n }\n /**\n * Sets path relative to parent. It is defined the same way as Angular route path including parameters.\n * You need to call setParam() for each parameter you use in the path.\n */\n withPath(path) {\n this._path = path;\n const s = path.split('/');\n const params = [];\n s.forEach((part) => {\n if (part.includes(':')) {\n const param = part.split(':')[1];\n if (param) {\n params.push(param);\n if (!this._paramMap[param]) {\n this._paramMap[param] = DEFAULT_PARAM_TYPE;\n }\n }\n }\n });\n this.orderedParams = params;\n return this;\n }\n /**\n * @deprecated Use withPath() instead.\n */\n setPath(path) {\n return this.withPath(path);\n }\n /**\n * Sets Angular route data.\n * @param data Angular route data object. Breadcrumb key is merged into it.\n */\n withData(data) {\n this._data = data;\n return this;\n }\n /**\n * @deprecated Use withData() instead.\n */\n setData(data) {\n return this.withData(data);\n }\n /**\n * Defines parameter type and lets framework parse it.\n * @param paramName\n * @param type\n */\n withParam(paramName, type) {\n this._paramMap[paramName] = type;\n return this;\n }\n /**\n * @deprecated Use withParam() instead.\n */\n setParam(paramName, type) {\n return this.withParam(paramName, type);\n }\n /**\n * Sets name to display in breadcrumb, etc.\n */\n withName(name) {\n this._name = name;\n return this;\n }\n /**\n * @deprecated Use withName() instead.\n */\n setName(name) {\n return this.withName(name);\n }\n /**\n * Call .build() on children before you call this method!\n */\n withChildren(...children) {\n this._children = children;\n for (const child of children) {\n child._parent = this;\n }\n return this;\n }\n /**\n * @deprecated Use withChildren() instead.\n */\n setChildren(...children) {\n return this.withChildren(...children);\n }\n build() {\n if (typeof this._path !== 'string') {\n throw new Error('Please provide path for route. Empty string is acceptable.');\n }\n this._built = true;\n this.setRegex();\n return this;\n }\n setRegex() {\n const params = Object.keys(this._paramMap);\n params.sort((a, b) => b.length - a.length);\n let substituted = this.path;\n params.forEach((p) => {\n const type = this._paramMap[p];\n if (!type) {\n throw new Error('Params is not set i');\n }\n substituted = substituted.replace(`:${p}`, RdtRouteBuilder.groups[type]);\n });\n if (substituted === '') {\n this._regex = null;\n }\n else {\n this._regex = new RegExp(substituted);\n }\n }\n static groups = {\n string: '(.+)',\n number: '(\\\\d+)',\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvcmR0LXJvdXRlL3JkdC1yb3V0ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkMsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUM7QUFFcEMsTUFBTSxPQUFPLGVBQXdDLFNBQVEsUUFBVztJQUN0RTs7Ozs7O09BTUc7SUFDSCxnQkFBZ0IsQ0FBQyxFQUFpQjtRQUNoQyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxFQUFpQjtRQUMvQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsSUFBSTtRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsSUFBWTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDakIsSUFBSSxJQUFJ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V0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBWSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsV0FBVyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNyQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFTyxNQUFNLENBQVUsTUFBTSxHQUFHO1FBQy9CLE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLFFBQVE7S0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGEgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRSb3V0ZSB9IGZyb20gJy4vcmR0LXJvdXRlJztcclxuXHJcbmNvbnN0IERFRkFVTFRfUEFSQU1fVFlQRSA9ICdudW1iZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJkdFJvdXRlQnVpbGRlcjxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiBleHRlbmRzIFJkdFJvdXRlPFQ+IHtcclxuICAvKipcclxuICAgKiBDYW5CZUVudGVyZWQgZnVuY3Rpb24gaXMgc3luY2hyb25vdXMgZnVuY3Rpb24gd2hpY2hcclxuICAgKiBsZXRzIGZyYW1ld29yayBoaWRlIG1lbnUgYnV0dG9ucyBhbmQgZGlzYWJsZSBsaW5rcy5cclxuICAgKiBGdW5jdGlvbiBpcyBydW4gaW4gZW52aXJvbm1lbnQgaW5qZWN0aW9uIGNvbnRleHQsIHNvXHJcbiAgICogeW91IGNhbiBpbmplY3QgZ2xvYmFsIHNlcnZpY2VzLCB0b2tlbnMsIGV0Yy5cclxuICAgKiBAcGFyYW0gZm5cclxuICAgKi9cclxuICB3aXRoQ2FuQmVFbnRlcmVkKGZuOiAoKSA9PiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9jYW5CZUVudGVyZWQgPSBmbjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugd2l0aENhbkJlRW50ZXJlZCgpIGluc3RlYWQuXHJcbiAgICovXHJcbiAgc2V0Q2FuQmVFbnRlcmVkKGZuOiAoKSA9PiBib29sZWFuKSB7XHJcbiAgICByZXR1cm4gdGhpcy53aXRoQ2FuQmVFbnRlcmVkKGZuKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVudHJ5IGRpc2FibGVkIHJvdXRlIHdpbGwgZ2VuZXJhdGUgZGlzYWJsZWQgYnJlYWRjcnVtYi5cclxuICAgKiBJdCBzaG91bGQgbm90IGhhdmUgYW55IGNvbXBvbmVudCBub3IgbW9kdWxlIGFkZGVkIHRvIGl0LlxyXG4gICAqIEBwYXJhbSB2YWx1ZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgd2l0aEVudHJ5RGlzYWJsZWQodmFsdWUgPSB0cnVlKSB7XHJcbiAgICB0aGlzLl9lbnRyeURpc2FibGVkID0gdmFsdWU7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHdpdGhFbnRyeURpc2FibGVkKCkgaW5zdGVhZC5cclxuICAgKi9cclxuICBzZXRFbnRyeURpc2FibGVkKHZhbHVlID0gdHJ1ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMud2l0aEVudHJ5RGlzYWJsZWQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBwYXRoIHJlbGF0aXZlIHRvIHBhcmVudC4gSXQgaXMgZGVmaW5lZCB0aGUgc2FtZSB3YXkgYXMgQW5ndWxhciByb3V0ZSBwYXRoIGluY2x1ZGluZyBwYXJhbWV0ZXJzLlxyXG4gICAqIFlvdSBuZWVkIHRvIGNhbGwgc2V0UGFyYW0oKSBmb3IgZWFjaCBwYXJhbWV0ZXIgeW91IHVzZSBpbiB0aGUgcGF0aC5cclxuICAgKi9cclxuICB3aXRoUGF0aChwYXRoOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3BhdGggPSBwYXRoO1xyXG4gICAgY29uc3QgcyA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgIGNvbnN0IHBhcmFtczogc3RyaW5nW10gPSBbXTtcclxuICAgIHMuZm9yRWFjaCgocGFydCkgPT4ge1xyXG4gICAgICBpZiAocGFydC5pbmNsdWRlcygnOicpKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW0gPSBwYXJ0LnNwbGl0KCc6JylbMV0gYXMga2V5b2YgVDtcclxuICAgICAgICBpZiAocGFyYW0pIHtcclxuICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtIGFzIHN0cmluZyk7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3BhcmFtTWFwW3BhcmFtXSkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXJhbU1hcFtwYXJhbV0gPSBERUZBVUxUX1BBUkFNX1RZUEU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMub3JkZXJlZFBhcmFtcyA9IHBhcmFtcztcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugd2l0aFBhdGgoKSBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIHNldFBhdGgocGF0aDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy53aXRoUGF0aChwYXRoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgQW5ndWxhciByb3V0ZSBkYXRhLlxyXG4gICAqIEBwYXJhbSBkYXRhIEFuZ3VsYXIgcm91dGUgZGF0YSBvYmplY3QuIEJyZWFkY3J1bWIga2V5IGlzIG1lcmdlZCBpbnRvIGl0LlxyXG4gICAqL1xyXG4gIHdpdGhEYXRhKGRhdGE6IERhdGEpIHtcclxuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIFVzZSB3aXRoRGF0YSgpIGluc3RlYWQuXHJcbiAgICovXHJcbiAgc2V0RGF0YShkYXRhOiBEYXRhKSB7XHJcbiAgICByZXR1cm4gdGhpcy53aXRoRGF0YShkYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZXMgcGFyYW1ldGVyIHR5cGUgYW5kIGxldHMgZnJhbWV3b3JrIHBhcnNlIGl0LlxyXG4gICAqIEBwYXJhbSBwYXJhbU5hbWVcclxuICAgKiBAcGFyYW0gdHlwZVxyXG4gICAqL1xyXG4gIHdpdGhQYXJhbShwYXJhbU5hbWU6IGtleW9mIFQsIHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicpIHtcclxuICAgIHRoaXMuX3BhcmFtTWFwW3BhcmFtTmFtZV0gPSB0eXBlO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIFVzZSB3aXRoUGFyYW0oKSBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIHNldFBhcmFtKHBhcmFtTmFtZToga2V5b2YgVCwgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJykge1xyXG4gICAgcmV0dXJuIHRoaXMud2l0aFBhcmFtKHBhcmFtTmFtZSwgdHlwZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIG5hbWUgdG8gZGlzcGxheSBpbiBicmVhZGNydW1iLCBldGMuXHJcbiAgICovXHJcbiAgd2l0aE5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9uYW1lID0gbmFtZTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugd2l0aE5hbWUoKSBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIHNldE5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy53aXRoTmFtZShuYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGwgLmJ1aWxkKCkgb24gY2hpbGRyZW4gYmVmb3JlIHlvdSBjYWxsIHRoaXMgbWV0aG9kIVxyXG4gICAqL1xyXG4gIHdpdGhDaGlsZHJlbiguLi5jaGlsZHJlbjogUmR0Um91dGVbXSkge1xyXG4gICAgdGhpcy5fY2hpbGRyZW4gPSBjaGlsZHJlbjtcclxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcclxuICAgICAgKGNoaWxkIGFzIFJkdFJvdXRlQnVpbGRlcikuX3BhcmVudCA9IHRoaXM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHdpdGhDaGlsZHJlbigpIGluc3RlYWQuXHJcbiAgICovXHJcbiAgc2V0Q2hpbGRyZW4oLi4uY2hpbGRyZW46IFJkdFJvdXRlW10pIHtcclxuICAgIHJldHVybiB0aGlzLndpdGhDaGlsZHJlbiguLi5jaGlsZHJlbik7XHJcbiAgfVxyXG5cclxuICBidWlsZCgpIHtcclxuICAgIGlmICh0eXBlb2YgdGhpcy5fcGF0aCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdQbGVhc2UgcHJvdmlkZSBwYXRoIGZvciByb3V0ZS4gRW1wdHkgc3RyaW5nIGlzIGFjY2VwdGFibGUuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fYnVpbHQgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXRSZWdleCgpO1xyXG4gICAgcmV0dXJuIHRoaXMgYXMgUmR0Um91dGU8VD47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJlZ2V4KCkge1xyXG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmtleXModGhpcy5fcGFyYW1NYXApO1xyXG4gICAgcGFyYW1zLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpO1xyXG4gICAgbGV0IHN1YnN0aXR1dGVkID0gdGhpcy5wYXRoO1xyXG4gICAgcGFyYW1zLmZvckVhY2goKHApID0+IHtcclxuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuX3BhcmFtTWFwW3AgYXMga2V5b2YgVF07XHJcbiAgICAgIGlmICghdHlwZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1zIGlzIG5vdCBzZXQgaScpO1xyXG4gICAgICB9XHJcbiAgICAgIHN1YnN0aXR1dGVkID0gc3Vic3RpdHV0ZWQucmVwbGFjZShgOiR7cH1gLCBSZHRSb3V0ZUJ1aWxkZXIuZ3JvdXBzW3R5cGVdKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzdWJzdGl0dXRlZCA9PT0gJycpIHtcclxuICAgICAgdGhpcy5fcmVnZXggPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fcmVnZXggPSBuZXcgUmVnRXhwKHN1YnN0aXR1dGVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGdyb3VwcyA9IHtcclxuICAgIHN0cmluZzogJyguKyknLFxyXG4gICAgbnVtYmVyOiAnKFxcXFxkKyknLFxyXG4gIH07XHJcbn1cclxuIl19","import { DestroyRef, Directive, ElementRef, Input, Renderer2, inject, } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router, RouterModule, } from '@angular/router';\nimport { filter } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nconst EXACT_TRUE_OPTS = {\n paths: 'exact',\n queryParams: 'exact',\n fragment: 'ignored',\n matrixParams: 'ignored',\n};\nconst EXACT_FALSE_OPTS = {\n paths: 'subset',\n queryParams: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored',\n};\n/**\n * Directive that appends class to host if any of the watched routes is active.\n */\nexport class RdtAnyRouteActiveDirective {\n destroyRef = inject(DestroyRef);\n router = inject(Router);\n renderer = inject(Renderer2);\n elRef = inject(ElementRef);\n set anyRouteActive(data) {\n this.classes = this.parseClasses(data);\n }\n watchedRoutes = [];\n set anyRouteActiveOptions(value) {\n this._anyRouteActiveOptions = this.parseOptions(value);\n }\n _anyRouteActiveOptions = EXACT_FALSE_OPTS;\n ariaCurrentWhenActive;\n get isActive() {\n return this._isActive;\n }\n _isActive = false;\n classes = [];\n ngOnInit() {\n this.update();\n this.listenRouterEvents();\n }\n ngOnChanges(changes) {\n if (changes['anyRouteActive']?.previousValue) {\n const prev = this.parseClasses(changes['anyRouteActive'].previousValue);\n prev.forEach((c) => this.removeClass(c));\n }\n this.update();\n }\n update() {\n this._isActive = this.watchedRoutes.some((route) => {\n const param = typeof route === 'string' ? route : this.router.createUrlTree(route);\n return this.router.isActive(param, this._anyRouteActiveOptions);\n });\n this.setClasses();\n this.setAriaCurrent();\n }\n setAriaCurrent() {\n const el = this.elRef.nativeElement;\n if (this._isActive && this.ariaCurrentWhenActive !== undefined) {\n const value = this.ariaCurrentWhenActive.toString();\n this.renderer.setAttribute(el, 'aria-current', value);\n }\n else {\n this.renderer.removeAttribute(el, 'aria-current');\n }\n }\n setClasses() {\n if (this._isActive) {\n this.classes.forEach((c) => this.addClass(c));\n }\n else {\n this.classes.forEach((c) => this.removeClass(c));\n }\n }\n addClass(className) {\n this.renderer.addClass(this.elRef.nativeElement, className);\n }\n removeClass(className) {\n this.renderer.removeClass(this.elRef.nativeElement, className);\n }\n listenRouterEvents() {\n this.router.events\n .pipe(filter((ev) => ev instanceof NavigationEnd), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.update());\n }\n parseClasses(data) {\n const classes = Array.isArray(data) ? data : data.split(' ');\n return classes.filter((c) => !!c);\n }\n parseOptions(input) {\n if ('exact' in input) {\n if (input.exact) {\n return EXACT_TRUE_OPTS;\n }\n else {\n return EXACT_FALSE_OPTS;\n }\n }\n else {\n return input;\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtAnyRouteActiveDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.7\", type: RdtAnyRouteActiveDirective, isStandalone: true, selector: \"[rdtAnyRouteActive]\", inputs: { anyRouteActive: [\"rdtAnyRouteActive\", \"anyRouteActive\"], watchedRoutes: \"watchedRoutes\", anyRouteActiveOptions: \"anyRouteActiveOptions\", ariaCurrentWhenActive: \"ariaCurrentWhenActive\" }, providers: [RouterModule], usesOnChanges: true, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtAnyRouteActiveDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdtAnyRouteActive]',\n standalone: true,\n providers: [RouterModule],\n }]\n }], propDecorators: { anyRouteActive: [{\n type: Input,\n args: [{ required: true, alias: 'rdtAnyRouteActive' }]\n }], watchedRoutes: [{\n type: Input,\n args: [{ required: true }]\n }], anyRouteActiveOptions: [{\n type: Input\n }], ariaCurrentWhenActive: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWFueS1yb3V0ZS1hY3RpdmUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL2RpcmVjdGl2ZXMvcmR0LWFueS1yb3V0ZS1hY3RpdmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBR0wsU0FBUyxFQUVULE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBRUwsYUFBYSxFQUNiLE1BQU0sRUFDTixZQUFZLEdBQ2IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUU5QixNQUFNLGVBQWUsR0FBeUI7SUFDNUMsS0FBSyxFQUFFLE9BQU87SUFDZCxXQUFXLEVBQUUsT0FBTztJQUNwQixRQUFRLEVBQUUsU0FBUztJQUNuQixZQUFZLEVBQUUsU0FBUztDQUN4QixDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBeUI7SUFDN0MsS0FBSyxFQUFFLFFBQVE7SUFDZixXQUFXLEVBQUUsUUFBUTtJQUNyQixRQUFRLEVBQUUsU0FBUztJQUNuQixZQUFZLEVBQUUsU0FBUztDQUN4QixDQUFDO0FBRUY7O0dBRUc7QUFNSCxNQUFNLE9BQU8sMEJBQTBCO0lBQ3BCLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLEtBQUssR0FBNEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXJFLElBQ0ksY0FBYyxDQUFDLElBQXVCO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBR0QsYUFBYSxHQUEwQixFQUFFLENBQUM7SUFFMUMsSUFDSSxxQkFBcUIsQ0FBQyxLQUFnRDtRQUN4RSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ08sc0JBQXNCLEdBQXlCLGdCQUFnQixDQUFDO0lBR3hFLHFCQUFxQixDQU9YO0lBRVYsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDTyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWxCLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFFL0IsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pELE1BQU0sS0FBSyxHQUNULE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFFcEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFFTyxRQUFRLENBQUMsU0FBaUI7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLFdBQVcsQ0FBQyxTQUFpQjtRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTthQUNmLElBQUksQ0FDSCxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBWSxhQUFhLENBQUMsRUFDM0Msa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNwQzthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sWUFBWSxDQUFDLElBQXVCO1FBQzFDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWdEO1FBQ25FLElBQUksT0FBTyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3JCLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQixPQUFPLGVBQWUsQ0FBQztZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxnQkFBZ0IsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO3VHQWhIVSwwQkFBMEI7MkZBQTFCLDBCQUEwQix1UUFGMUIsQ0FBQyxZQUFZLENBQUM7OzJGQUVkLDBCQUEwQjtrQkFMdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUMxQjs4QkFRSyxjQUFjO3NCQURqQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUU7Z0JBTXJELGFBQWE7c0JBRFosS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSXJCLHFCQUFxQjtzQkFEeEIsS0FBSztnQkFPTixxQkFBcUI7c0JBRHBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBpbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHtcclxuICBJc0FjdGl2ZU1hdGNoT3B0aW9ucyxcclxuICBOYXZpZ2F0aW9uRW5kLFxyXG4gIFJvdXRlcixcclxuICBSb3V0ZXJNb2R1bGUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XHJcblxyXG5jb25zdCBFWEFDVF9UUlVFX09QVFM6IElzQWN0aXZlTWF0Y2hPcHRpb25zID0ge1xyXG4gIHBhdGhzOiAnZXhhY3QnLFxyXG4gIHF1ZXJ5UGFyYW1zOiAnZXhhY3QnLFxyXG4gIGZyYWdtZW50OiAnaWdub3JlZCcsXHJcbiAgbWF0cml4UGFyYW1zOiAnaWdub3JlZCcsXHJcbn07XHJcblxyXG5jb25zdCBFWEFDVF9GQUxTRV9PUFRTOiBJc0FjdGl2ZU1hdGNoT3B0aW9ucyA9IHtcclxuICBwYXRoczogJ3N1YnNldCcsXHJcbiAgcXVlcnlQYXJhbXM6ICdzdWJzZXQnLFxyXG4gIGZyYWdtZW50OiAnaWdub3JlZCcsXHJcbiAgbWF0cml4UGFyYW1zOiAnaWdub3JlZCcsXHJcbn07XHJcblxyXG4vKipcclxuICogRGlyZWN0aXZlIHRoYXQgYXBwZW5kcyBjbGFzcyB0byBob3N0IGlmIGFueSBvZiB0aGUgd2F0Y2hlZCByb3V0ZXMgaXMgYWN0aXZlLlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbcmR0QW55Um91dGVBY3RpdmVdJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHByb3ZpZGVyczogW1JvdXRlck1vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRBbnlSb3V0ZUFjdGl2ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBlbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPSBpbmplY3QoRWxlbWVudFJlZik7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ3JkdEFueVJvdXRlQWN0aXZlJyB9KVxyXG4gIHNldCBhbnlSb3V0ZUFjdGl2ZShkYXRhOiBzdHJpbmdbXSB8IHN0cmluZykge1xyXG4gICAgdGhpcy5jbGFzc2VzID0gdGhpcy5wYXJzZUNsYXNzZXMoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHdhdGNoZWRSb3V0ZXM6IChzdHJpbmcgfCBzdHJpbmdbXSlbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBhbnlSb3V0ZUFjdGl2ZU9wdGlvbnModmFsdWU6IHsgZXhhY3Q6IGJvb2xlYW4gfSB8IElzQWN0aXZlTWF0Y2hPcHRpb25zKSB7XHJcbiAgICB0aGlzLl9hbnlSb3V0ZUFjdGl2ZU9wdGlvbnMgPSB0aGlzLnBhcnNlT3B0aW9ucyh2YWx1ZSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FueVJvdXRlQWN0aXZlT3B0aW9uczogSXNBY3RpdmVNYXRjaE9wdGlvbnMgPSBFWEFDVF9GQUxTRV9PUFRTO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGFyaWFDdXJyZW50V2hlbkFjdGl2ZT86XHJcbiAgICB8ICdwYWdlJ1xyXG4gICAgfCAnc3RlcCdcclxuICAgIHwgJ2xvY2F0aW9uJ1xyXG4gICAgfCAnZGF0ZSdcclxuICAgIHwgJ3RpbWUnXHJcbiAgICB8IHRydWVcclxuICAgIHwgZmFsc2U7XHJcblxyXG4gIGdldCBpc0FjdGl2ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaXNBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB0aGlzLmxpc3RlblJvdXRlckV2ZW50cygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2FueVJvdXRlQWN0aXZlJ10/LnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgY29uc3QgcHJldiA9IHRoaXMucGFyc2VDbGFzc2VzKGNoYW5nZXNbJ2FueVJvdXRlQWN0aXZlJ10ucHJldmlvdXNWYWx1ZSk7XHJcbiAgICAgIHByZXYuZm9yRWFjaCgoYykgPT4gdGhpcy5yZW1vdmVDbGFzcyhjKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuX2lzQWN0aXZlID0gdGhpcy53YXRjaGVkUm91dGVzLnNvbWUoKHJvdXRlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmFtID1cclxuICAgICAgICB0eXBlb2Ygcm91dGUgPT09ICdzdHJpbmcnID8gcm91dGUgOiB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHJvdXRlKTtcclxuICAgICAgcmV0dXJuIHRoaXMucm91dGVyLmlzQWN0aXZlKHBhcmFtLCB0aGlzLl9hbnlSb3V0ZUFjdGl2ZU9wdGlvbnMpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNldENsYXNzZXMoKTtcclxuICAgIHRoaXMuc2V0QXJpYUN1cnJlbnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QXJpYUN1cnJlbnQoKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICBpZiAodGhpcy5faXNBY3RpdmUgJiYgdGhpcy5hcmlhQ3VycmVudFdoZW5BY3RpdmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlLnRvU3RyaW5nKCk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCAnYXJpYS1jdXJyZW50JywgdmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUoZWwsICdhcmlhLWN1cnJlbnQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2xhc3NlcygpIHtcclxuICAgIGlmICh0aGlzLl9pc0FjdGl2ZSkge1xyXG4gICAgICB0aGlzLmNsYXNzZXMuZm9yRWFjaCgoYykgPT4gdGhpcy5hZGRDbGFzcyhjKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsYXNzZXMuZm9yRWFjaCgoYykgPT4gdGhpcy5yZW1vdmVDbGFzcyhjKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZENsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5Sb3V0ZXJFdmVudHMoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5ldmVudHNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKChldikgPT4gZXYgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGUoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhcnNlQ2xhc3NlcyhkYXRhOiBzdHJpbmdbXSB8IHN0cmluZykge1xyXG4gICAgY29uc3QgY2xhc3NlcyA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogZGF0YS5zcGxpdCgnICcpO1xyXG4gICAgcmV0dXJuIGNsYXNzZXMuZmlsdGVyKChjKSA9PiAhIWMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZU9wdGlvbnMoaW5wdXQ6IHsgZXhhY3Q6IGJvb2xlYW4gfSB8IElzQWN0aXZlTWF0Y2hPcHRpb25zKSB7XHJcbiAgICBpZiAoJ2V4YWN0JyBpbiBpbnB1dCkge1xyXG4gICAgICBpZiAoaW5wdXQuZXhhY3QpIHtcclxuICAgICAgICByZXR1cm4gRVhBQ1RfVFJVRV9PUFRTO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBFWEFDVF9GQUxTRV9PUFRTO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW5wdXQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { booleanAttribute, Directive, EnvironmentInjector, inject, Input, } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { RdtRoute } from '../rdt-route/rdt-route';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/router\";\nexport class RdtRouterLinkDirective {\n routerLinkRef = inject(RouterLink, { self: true });\n envInjector = inject(EnvironmentInjector);\n route;\n target = '_self';\n params;\n queryParams;\n stateParams;\n disabled = false;\n ngOnInit() {\n this.update();\n }\n ngOnChanges() {\n this.update();\n }\n update() {\n if (this.route.canBeEntered(this.envInjector) && !this.disabled) {\n this.setLink();\n }\n else {\n this.disableLink();\n }\n }\n setLink() {\n this.routerLinkRef.routerLink = this.route.createAbsoluteUrl(this.params);\n this.routerLinkRef.state = this.stateParams ?? this.route.stateParams;\n this.routerLinkRef.queryParams = this.queryParams ?? this.route.queryParams;\n this.routerLinkRef.ngOnChanges({});\n }\n disableLink() {\n this.routerLinkRef.routerLink = null;\n this.routerLinkRef.ngOnChanges({});\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtRouterLinkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"16.1.0\", version: \"20.1.7\", type: RdtRouterLinkDirective, isStandalone: true, selector: \"[rdtRouterLink]\", inputs: { route: [\"rdtRouterLink\", \"route\"], target: \"target\", params: \"params\", queryParams: \"queryParams\", stateParams: \"stateParams\", disabled: [\"disabled\", \"disabled\", booleanAttribute] }, usesOnChanges: true, hostDirectives: [{ directive: i1.RouterLink, inputs: [\"target\", \"target\"] }], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtRouterLinkDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[rdtRouterLink]',\n standalone: true,\n hostDirectives: [\n {\n directive: RouterLink,\n inputs: ['target'],\n },\n ],\n }]\n }], propDecorators: { route: [{\n type: Input,\n args: [{ alias: 'rdtRouterLink', required: true }]\n }], target: [{\n type: Input\n }], params: [{\n type: Input\n }], queryParams: [{\n type: Input\n }], stateParams: [{\n type: Input\n }], disabled: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlci1saW5rLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9yb3V0ZXIvc3JjL2xpYi9kaXJlY3RpdmVzL3JkdC1yb3V0ZXItbGluay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBWWxELE1BQU0sT0FBTyxzQkFBc0I7SUFHaEIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFHM0QsS0FBSyxDQUFlO0lBR3BCLE1BQU0sR0FBNEMsT0FBTyxDQUFDO0lBRzFELE1BQU0sQ0FBYztJQUdwQixXQUFXLENBQVU7SUFHckIsV0FBVyxDQUFVO0lBR3JCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFakIsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU8sTUFBTTtRQUNaLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVPLE9BQU87UUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDNUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7dUdBbERVLHNCQUFzQjsyRkFBdEIsc0JBQXNCLCtOQXFCYixnQkFBZ0I7OzJGQXJCekIsc0JBQXNCO2tCQVZsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixjQUFjLEVBQUU7d0JBQ2Q7NEJBQ0UsU0FBUyxFQUFFLFVBQVU7NEJBQ3JCLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzt5QkFDbkI7cUJBQ0Y7aUJBQ0Y7OEJBUUMsS0FBSztzQkFESixLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUlqRCxNQUFNO3NCQURMLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBib29sZWFuQXR0cmlidXRlLFxyXG4gIERpcmVjdGl2ZSxcclxuICBFbnZpcm9ubWVudEluamVjdG9yLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYXJhbXMsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRSb3V0ZSB9IGZyb20gJy4uL3JkdC1yb3V0ZS9yZHQtcm91dGUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbcmR0Um91dGVyTGlua10nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaG9zdERpcmVjdGl2ZXM6IFtcclxuICAgIHtcclxuICAgICAgZGlyZWN0aXZlOiBSb3V0ZXJMaW5rLFxyXG4gICAgICBpbnB1dHM6IFsndGFyZ2V0J10sXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRSb3V0ZXJMaW5rRGlyZWN0aXZlPFQgZXh0ZW5kcyBvYmplY3Q+XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlc1xyXG57XHJcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXJMaW5rUmVmID0gaW5qZWN0KFJvdXRlckxpbmssIHsgc2VsZjogdHJ1ZSB9KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVudkluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xyXG5cclxuICBASW5wdXQoeyBhbGlhczogJ3JkdFJvdXRlckxpbmsnLCByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHJvdXRlITogUmR0Um91dGU8VD47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgdGFyZ2V0OiAnX2JsYW5rJyB8ICdfc2VsZicgfCAnX3BhcmVudCcgfCAnX3RvcCcgPSAnX3NlbGYnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHBhcmFtcz86IFBhcnRpYWw8VD47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcXVlcnlQYXJhbXM/OiBQYXJhbXM7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc3RhdGVQYXJhbXM/OiBQYXJhbXM7XHJcblxyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxyXG4gIGRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlKCkge1xyXG4gICAgaWYgKHRoaXMucm91dGUuY2FuQmVFbnRlcmVkKHRoaXMuZW52SW5qZWN0b3IpICYmICF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuc2V0TGluaygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNhYmxlTGluaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRMaW5rKCkge1xyXG4gICAgdGhpcy5yb3V0ZXJMaW5rUmVmLnJvdXRlckxpbmsgPSB0aGlzLnJvdXRlLmNyZWF0ZUFic29sdXRlVXJsKHRoaXMucGFyYW1zKTtcclxuICAgIHRoaXMucm91dGVyTGlua1JlZi5zdGF0ZSA9IHRoaXMuc3RhdGVQYXJhbXMgPz8gdGhpcy5yb3V0ZS5zdGF0ZVBhcmFtcztcclxuICAgIHRoaXMucm91dGVyTGlua1JlZi5xdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXMgPz8gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcztcclxuICAgIHRoaXMucm91dGVyTGlua1JlZi5uZ09uQ2hhbmdlcyh7fSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc2FibGVMaW5rKCkge1xyXG4gICAgdGhpcy5yb3V0ZXJMaW5rUmVmLnJvdXRlckxpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5yb3V0ZXJMaW5rUmVmLm5nT25DaGFuZ2VzKHt9KTtcclxuICB9XHJcbn1cclxuIl19","import { inject } from '@angular/core';\nimport { RdtComponentGuardStoreService } from '@ngrdt/core';\nexport const preventDataLossGuardFn = () => {\n const guardStore = inject(RdtComponentGuardStoreService);\n return guardStore.checkCanLeaveGlobal$();\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmVudC1kYXRhLWxvc3MuZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvZ3VhcmRzL3ByZXZlbnQtZGF0YS1sb3NzLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUF5QixHQUFHLEVBQUU7SUFDL0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDekQsT0FBTyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztBQUMzQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2FuRGVhY3RpdmF0ZUZuIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0Q29tcG9uZW50R3VhcmRTdG9yZVNlcnZpY2UgfSBmcm9tICdAbmdyZHQvY29yZSc7XHJcblxyXG5leHBvcnQgY29uc3QgcHJldmVudERhdGFMb3NzR3VhcmRGbjogQ2FuRGVhY3RpdmF0ZUZuPGFueT4gPSAoKSA9PiB7XHJcbiAgY29uc3QgZ3VhcmRTdG9yZSA9IGluamVjdChSZHRDb21wb25lbnRHdWFyZFN0b3JlU2VydmljZSk7XHJcbiAgcmV0dXJuIGd1YXJkU3RvcmUuY2hlY2tDYW5MZWF2ZUdsb2JhbCQoKTtcclxufTtcclxuIl19","import { Injectable } from '@angular/core';\nimport { GuardsCheckStart, NavigationEnd, Router, } from '@angular/router';\nimport { preventDataLossGuardFn } from './prevent-data-loss.guard';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/router\";\nexport class GlobalRouteGuardService {\n router;\n constructor(router) {\n this.router = router;\n }\n // This will help ensure that routes are automatically protected by ensuring that global guards are applied to every route\n ensureGlobalGuards() {\n let lastUrl = '';\n this.router.events.subscribe((e) => {\n // Remember last url after successful navigation\n if (e instanceof NavigationEnd) {\n lastUrl = location.href;\n }\n if (e instanceof GuardsCheckStart) {\n let lastChild = e.state.root;\n while (lastChild?.firstChild) {\n lastChild = lastChild.firstChild;\n }\n // Native back button will immediately replace url on click\n // Replace it back to last url before guard check is finished.\n // Angular will set it to correct value afterwards.\n history.replaceState(window.history.state, '', lastUrl);\n if (lastChild?.routeConfig) {\n this.ensureCanDeactivateGuards(lastChild.routeConfig);\n }\n }\n });\n }\n ensureCanDeactivateGuards(routeConfig) {\n if (!routeConfig.canDeactivate) {\n routeConfig.canDeactivate = [];\n }\n const canDeactivateGuards = routeConfig.canDeactivate;\n // ensure that the \"MySpecialCanDeactivateGuard\" is in effect.\n if (!canDeactivateGuards.find((o) => o == preventDataLossGuardFn)) {\n canDeactivateGuards.push(preventDataLossGuardFn);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: GlobalRouteGuardService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: GlobalRouteGuardService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: GlobalRouteGuardService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.Router }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLXJvdXRlLWd1YXJkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvZ3VhcmRzL2dsb2JhbC1yb3V0ZS1ndWFyZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixhQUFhLEVBRWIsTUFBTSxHQUNQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUduRSxNQUFNLE9BQU8sdUJBQXVCO0lBQ2Q7SUFBcEIsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRXRDLDBIQUEwSDtJQUNuSCxrQkFBa0I7UUFDdkIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2pDLGdEQUFnRDtZQUNoRCxJQUFJLENBQUMsWUFBWSxhQUFhLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDMUIsQ0FBQztZQUNELElBQUksQ0FBQyxZQUFZLGdCQUFnQixFQUFFLENBQUM7Z0JBQ2xDLElBQUksU0FBUyxHQUEyQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDckQsT0FBTyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUM7b0JBQzdCLFNBQVMsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO2dCQUNuQyxDQUFDO2dCQUNELDJEQUEyRDtnQkFDM0QsOERBQThEO2dCQUM5RCxtREFBbUQ7Z0JBQ25ELE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUV4RCxJQUFJLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxXQUFrQjtRQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQy9CLFdBQVcsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFFRCxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFFdEQsOERBQThEO1FBQzlELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7WUFDbEUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7dUdBeENVLHVCQUF1QjsyR0FBdkIsdUJBQXVCLGNBRFYsTUFBTTs7MkZBQ25CLHVCQUF1QjtrQkFEbkMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICBHdWFyZHNDaGVja1N0YXJ0LFxyXG4gIE5hdmlnYXRpb25FbmQsXHJcbiAgUm91dGUsXHJcbiAgUm91dGVyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHByZXZlbnREYXRhTG9zc0d1YXJkRm4gfSBmcm9tICcuL3ByZXZlbnQtZGF0YS1sb3NzLmd1YXJkJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBHbG9iYWxSb3V0ZUd1YXJkU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge31cclxuXHJcbiAgLy8gVGhpcyB3aWxsIGhlbHAgZW5zdXJlIHRoYXQgcm91dGVzIGFyZSBhdXRvbWF0aWNhbGx5IHByb3RlY3RlZCBieSBlbnN1cmluZyB0aGF0IGdsb2JhbCBndWFyZHMgYXJlIGFwcGxpZWQgdG8gZXZlcnkgcm91dGVcclxuICBwdWJsaWMgZW5zdXJlR2xvYmFsR3VhcmRzKCkge1xyXG4gICAgbGV0IGxhc3RVcmwgPSAnJztcclxuXHJcbiAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIC8vIFJlbWVtYmVyIGxhc3QgdXJsIGFmdGVyIHN1Y2Nlc3NmdWwgbmF2aWdhdGlvblxyXG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuICAgICAgICBsYXN0VXJsID0gbG9jYXRpb24uaHJlZjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEd1YXJkc0NoZWNrU3RhcnQpIHtcclxuICAgICAgICBsZXQgbGFzdENoaWxkOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90ID0gZS5zdGF0ZS5yb290O1xyXG4gICAgICAgIHdoaWxlIChsYXN0Q2hpbGQ/LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgIGxhc3RDaGlsZCA9IGxhc3RDaGlsZC5maXJzdENoaWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBOYXRpdmUgYmFjayBidXR0b24gd2lsbCBpbW1lZGlhdGVseSByZXBsYWNlIHVybCBvbiBjbGlja1xyXG4gICAgICAgIC8vIFJlcGxhY2UgaXQgYmFjayB0byBsYXN0IHVybCBiZWZvcmUgZ3VhcmQgY2hlY2sgaXMgZmluaXNoZWQuXHJcbiAgICAgICAgLy8gQW5ndWxhciB3aWxsIHNldCBpdCB0byBjb3JyZWN0IHZhbHVlIGFmdGVyd2FyZHMuXHJcbiAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUod2luZG93Lmhpc3Rvcnkuc3RhdGUsICcnLCBsYXN0VXJsKTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RDaGlsZD8ucm91dGVDb25maWcpIHtcclxuICAgICAgICAgIHRoaXMuZW5zdXJlQ2FuRGVhY3RpdmF0ZUd1YXJkcyhsYXN0Q2hpbGQucm91dGVDb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVuc3VyZUNhbkRlYWN0aXZhdGVHdWFyZHMocm91dGVDb25maWc6IFJvdXRlKSB7XHJcbiAgICBpZiAoIXJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUpIHtcclxuICAgICAgcm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZSA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGVHdWFyZHMgPSByb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlO1xyXG5cclxuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBcIk15U3BlY2lhbENhbkRlYWN0aXZhdGVHdWFyZFwiIGlzIGluIGVmZmVjdC5cclxuICAgIGlmICghY2FuRGVhY3RpdmF0ZUd1YXJkcy5maW5kKChvKSA9PiBvID09IHByZXZlbnREYXRhTG9zc0d1YXJkRm4pKSB7XHJcbiAgICAgIGNhbkRlYWN0aXZhdGVHdWFyZHMucHVzaChwcmV2ZW50RGF0YUxvc3NHdWFyZEZuKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdyZHQtcm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbmdyZHQtcm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}