{"version":3,"file":"gilsdav-ngx-translate-router.mjs","sources":["../../../projects/ngx-translate-router/src/lib/localize-router.config.ts","../../../projects/ngx-translate-router/src/lib/localize-router.parser.ts","../../../projects/ngx-translate-router/src/lib/util.ts","../../../projects/ngx-translate-router/src/lib/localize-router.service.ts","../../../projects/ngx-translate-router/src/lib/localize-router.pipe.ts","../../../projects/ngx-translate-router/src/lib/gilsdav-reuse-strategy.ts","../../../projects/ngx-translate-router/src/lib/localized-router.ts","../../../projects/ngx-translate-router/src/lib/localize-router.module.ts","../../../projects/ngx-translate-router/src/lib/localize-router-config-loader.ts","../../../projects/ngx-translate-router/src/public_api.ts","../../../projects/ngx-translate-router/src/gilsdav-ngx-translate-router.ts"],"sourcesContent":["import { Inject, InjectionToken, Provider, Injectable, Optional } from '@angular/core';\nimport { Routes } from '@angular/router';\nimport { LocalizeRouterModule } from './localize-router.module';\n\n/**\n * Guard to make sure we have single initialization of forRoot\n */\nexport const LOCALIZE_ROUTER_FORROOT_GUARD = new InjectionToken<LocalizeRouterModule>('LOCALIZE_ROUTER_FORROOT_GUARD');\n\n/**\n * Static provider for keeping track of routes\n */\nexport const RAW_ROUTES: InjectionToken<Routes[]> = new InjectionToken<Routes[]>('RAW_ROUTES');\n\n/**\n * Type for Caching of default language\n */\n// export type CacheMechanism = 'LocalStorage' | 'Cookie';\n\n/**\n * Namespace for fail proof access of CacheMechanism\n */\nexport enum CacheMechanism {\n  LocalStorage = 'LocalStorage',\n  SessionStorage = 'SessionStorage',\n  Cookie = 'Cookie'\n}\n\n/**\n * Boolean to indicate whether to use cached language value\n */\nexport const USE_CACHED_LANG = new InjectionToken<boolean>('USE_CACHED_LANG');\n/**\n * Cache mechanism type\n */\nexport const CACHE_MECHANISM = new InjectionToken<CacheMechanism>('CACHE_MECHANISM');\n/**\n * Cache name\n */\nexport const CACHE_NAME = new InjectionToken<string>('CACHE_NAME');\n/**\n * Cookie cache format\n */\nexport const COOKIE_FORMAT = new InjectionToken<boolean>('COOKIE_FORMAT');\n/**\n * Cookie cache format\n */\nexport const INITIAL_NAVIGATION = new InjectionToken<boolean>('INITIAL_NAVIGATION');\n\n/**\n * Type for default language function\n * Used to override basic behaviour\n */\nexport type DefaultLanguageFunction = (languages: string[], cachedLang?: string, browserLang?: string) => string;\n\n/**\n * Function for calculating default language\n */\nexport const DEFAULT_LANG_FUNCTION = new InjectionToken<DefaultLanguageFunction>('DEFAULT_LANG_FUNCTION');\n\n/**\n * Boolean to indicate whether prefix should be set for single language scenarios\n */\nexport const ALWAYS_SET_PREFIX = new InjectionToken<boolean>('ALWAYS_SET_PREFIX');\n\n/**\n * Config interface for LocalizeRouter\n */\nexport interface LocalizeRouterConfig {\n  parser?: Provider;\n  useCachedLang?: boolean;\n  cacheMechanism?: CacheMechanism;\n  cacheName?: string;\n  defaultLangFunction?: DefaultLanguageFunction;\n  alwaysSetPrefix?: boolean;\n  cookieFormat?: string;\n  initialNavigation?: boolean;\n}\n\nconst LOCALIZE_CACHE_NAME = 'LOCALIZE_DEFAULT_LANGUAGE';\nconst DEFAULT_COOKIE_FORMAT = '{{value}};{{expires}}';\nconst DEFAULT_INITIAL_NAVIGATION = false;\n\n@Injectable()\nexport class LocalizeRouterSettings implements LocalizeRouterConfig {\n\n  public cacheMechanism: CacheMechanism;\n  public defaultLangFunction: DefaultLanguageFunction;\n\n  /**\n   * Settings for localize router\n   */\n  constructor(\n    @Inject(USE_CACHED_LANG) public useCachedLang: boolean = true,\n    @Inject(ALWAYS_SET_PREFIX) public alwaysSetPrefix: boolean = true,\n    @Inject(CACHE_MECHANISM) cacheMechanism = CacheMechanism.LocalStorage,\n    @Inject(CACHE_NAME) public cacheName: string = LOCALIZE_CACHE_NAME,\n    @Inject(DEFAULT_LANG_FUNCTION) defaultLangFunction = void 0,\n    @Inject(COOKIE_FORMAT) public cookieFormat: string = DEFAULT_COOKIE_FORMAT,\n    @Inject(INITIAL_NAVIGATION) public initialNavigation: boolean = DEFAULT_INITIAL_NAVIGATION,\n  ) {\n    this.cacheMechanism = cacheMechanism;\n    this.defaultLangFunction = defaultLangFunction;\n  }\n\n}\n","import { Routes, Route, NavigationExtras, Params } from '@angular/router';\nimport { StrictTranslation, TranslateService } from '@ngx-translate/core';\nimport { firstValueFrom, Observable, Observer } from 'rxjs';\nimport { Location } from '@angular/common';\nimport { CacheMechanism, LocalizeRouterSettings } from './localize-router.config';\nimport { Inject, Injectable } from '@angular/core';\nimport { HttpParams } from '@angular/common/http';\n\nconst COOKIE_EXPIRY = 30; // 1 month\n\n/**\n * Abstract class for parsing localization\n */\n@Injectable()\nexport abstract class LocalizeParser {\n  locales: Array<string>;\n  currentLang: string;\n  routes: Routes;\n  defaultLang: string;\n\n  protected prefix: string;\n  protected escapePrefix: string;\n\n  private _translationObject: any;\n  private _wildcardRoute: Route;\n  private _languageRoute: Route;\n\n  /**\n   * Loader constructor\n   */\n  constructor(@Inject(TranslateService) private translate: TranslateService,\n    @Inject(Location) private location: Location,\n    @Inject(LocalizeRouterSettings) private settings: LocalizeRouterSettings) {\n  }\n\n  /**\n   * Load routes and fetch necessary data\n   */\n  abstract load(routes: Routes): Promise<any>;\n\n  /**\n * Prepare routes to be fully usable by ngx-translate-router\n * @param routes\n */\n  /* private initRoutes(routes: Routes, prefix = '') {\n    routes.forEach(route => {\n      if (route.path !== '**') {\n        const routeData: any = route.data = route.data || {};\n        routeData.localizeRouter = {};\n        routeData.localizeRouter.fullPath = `${prefix}/${route.path}`;\n        if (route.children && route.children.length > 0) {\n          this.initRoutes(route.children, routeData.localizeRouter.fullPath);\n        }\n      }\n    });\n  } */\n\n  /**\n   * Initialize language and routes\n   */\n  protected init(routes: Routes): Promise<any> {\n    let selectedLanguage: string;\n\n    // this.initRoutes(routes);\n    this.routes = routes;\n\n    if (!this.locales || !this.locales.length) {\n      return Promise.resolve();\n    }\n    /** detect current language */\n    const locationLang = this.getLocationLang();\n    const browserLang = this._getBrowserLang();\n\n    if (this.settings.defaultLangFunction) {\n      this.defaultLang = this.settings.defaultLangFunction(this.locales, this._cachedLang, browserLang);\n    } else {\n      this.defaultLang = this._cachedLang || browserLang || this.locales[0];\n    }\n    selectedLanguage = locationLang || this.defaultLang;\n    this.translate.setFallbackLang(this.defaultLang);\n\n    let children: Routes = [];\n    /** if set prefix is enforced */\n    if (this.settings.alwaysSetPrefix) {\n      const baseRoute: Route = { path: '', redirectTo: this.defaultLang, pathMatch: 'full' };\n\n      /** extract potential wildcard route */\n      const wildcardIndex = routes.findIndex((route: Route) => route.path === '**');\n      if (wildcardIndex !== -1) {\n        this._wildcardRoute = routes.splice(wildcardIndex, 1)[0];\n      }\n      children = this.routes.splice(0, this.routes.length, baseRoute);\n    } else {\n      children = [...this.routes]; // shallow copy of routes\n    }\n\n    /** exclude certain routes */\n    for (let i = children.length - 1; i >= 0; i--) {\n      if (children[i].data && children[i].data['skipRouteLocalization']) {\n        if (this.settings.alwaysSetPrefix) {\n          // add directly to routes\n          this.routes.push(children[i]);\n        }\n        // remove from routes to translate only if doesn't have to translate `redirectTo` property\n        if (children[i].redirectTo === undefined || !(children[i].data['skipRouteLocalization']['localizeRedirectTo']) || typeof children[i].redirectTo === 'function') {\n          children.splice(i, 1);\n        }\n      }\n    }\n\n    /** append children routes */\n    if (children && children.length) {\n      if (this.locales.length > 1 || this.settings.alwaysSetPrefix) {\n        this._languageRoute = { children: children };\n        this.routes.unshift(this._languageRoute);\n      }\n    }\n\n    /** ...and potential wildcard route */\n    if (this._wildcardRoute && this.settings.alwaysSetPrefix) {\n      this.routes.push(this._wildcardRoute);\n    }\n\n    /** translate routes */\n    return firstValueFrom(\n      this.translateRoutes(selectedLanguage)\n    );\n  }\n\n  initChildRoutes(routes: Routes) {\n    this._translateRouteTree(routes);\n    return routes;\n  }\n\n  /**\n   * Translate routes to selected language\n   */\n  translateRoutes(language: string): Observable<any> {\n    return new Observable<any>((observer: Observer<any>) => {\n      this._cachedLang = language;\n      if (this._languageRoute) {\n        this._languageRoute.path = language;\n      }\n\n      this.translate.use(language).subscribe((translations: any) => {\n        this._translationObject = translations;\n        this.currentLang = language;\n\n        if (this._languageRoute) {\n          this._translateRouteTree(this._languageRoute.children, true);\n          // if there is wildcard route\n          if (this._wildcardRoute && this._wildcardRoute.redirectTo) {\n            this._translateProperty(this._wildcardRoute, 'redirectTo', true);\n          }\n        } else {\n          this._translateRouteTree(this.routes, true);\n        }\n\n        observer.next(void 0);\n        observer.complete();\n      });\n    });\n  }\n\n  /**\n   * Translate the route node and recursively call for all it's children\n   */\n  private _translateRouteTree(routes: Routes, isRootTree?: boolean): void {\n    routes.forEach((route: Route) => {\n      const skipRouteLocalization = (route.data && route.data['skipRouteLocalization']);\n      const localizeRedirection = !skipRouteLocalization || skipRouteLocalization['localizeRedirectTo'];\n\n      if (route.redirectTo && localizeRedirection && !(typeof route.redirectTo === 'function')) {\n        const prefixLang = route.redirectTo.indexOf('/') === 0 || isRootTree;\n        this._translateProperty(route, 'redirectTo', prefixLang);\n      }\n\n      if (skipRouteLocalization) {\n        return;\n      }\n\n      if (route.path !== null && route.path !== undefined/* && route.path !== '**'*/) {\n        this._translateProperty(route, 'path');\n      }\n      if (route.children) {\n        this._translateRouteTree(route.children);\n      }\n      if (route.loadChildren && (<any>route)._loadedRoutes?.length) {\n        this._translateRouteTree((<any>route)._loadedRoutes);\n      }\n    });\n  }\n\n  /**\n   * Translate property\n   * If first time translation then add original to route data object\n   */\n  private _translateProperty(route: Route, property: string, prefixLang?: boolean): void {\n    // set property to data if not there yet\n    const routeData: any = route.data = route.data || {};\n    if (!routeData.localizeRouter) {\n      routeData.localizeRouter = {};\n    }\n    if (!routeData.localizeRouter[property]) {\n      routeData.localizeRouter = { ...routeData.localizeRouter, [property]: route[property] };\n    }\n\n    const result = this.translateRoute(routeData.localizeRouter[property]);\n    (<any>route)[property] = prefixLang ? this.addPrefixToUrl(result) : result;\n  }\n\n  get urlPrefix() {\n    if (this.settings.alwaysSetPrefix || this.currentLang !== this.defaultLang) {\n      return this.currentLang ? this.currentLang : this.defaultLang;\n    } else {\n      return '';\n    }\n  }\n\n  /**\n   * Add current lang as prefix to given url.\n   */\n  addPrefixToUrl(url: string): string {\n    const splitUrl = url.split('?');\n    const isRootPath = splitUrl[0].length === 1 && splitUrl[0] === '/';\n    splitUrl[0] = splitUrl[0].replace(/\\/$/, '');\n\n    const joinedUrl = splitUrl.join('?');\n    if (this.urlPrefix === '') {\n      return joinedUrl;\n    }\n\n    if (!joinedUrl.startsWith('/') && !isRootPath) {\n      return `${this.urlPrefix}/${joinedUrl}`;\n    }\n    return `/${this.urlPrefix}${joinedUrl}`;\n  }\n\n  /**\n   * Translate route and return observable\n   */\n  translateRoute(path: string): string {\n    const queryParts = path.split('?');\n    if (queryParts.length > 2) {\n      throw Error('There should be only one query parameter block in the URL');\n    }\n    const pathSegments = queryParts[0].split('/');\n\n    /** collect observables  */\n    return pathSegments\n      .map((part: string) => part.length ? this.translateText(part) : part)\n      .join('/') +\n      (queryParts.length > 1 ? `?${queryParts[1]}` : '');\n  }\n\n  /**\n   * Get language from url\n   */\n  getLocationLang(url?: string): string {\n    const queryParamSplit = (url || this.location.path()).split(/[\\?;]/);\n    let pathSlices: string[] = [];\n    if (queryParamSplit.length > 0) {\n      pathSlices = queryParamSplit[0].split('/');\n    }\n    if (pathSlices.length > 1 && this.locales.indexOf(pathSlices[1]) !== -1) {\n      return pathSlices[1];\n    }\n    if (pathSlices.length && this.locales.indexOf(pathSlices[0]) !== -1) {\n      return pathSlices[0];\n    }\n    return null;\n  }\n\n  /**\n   * Get user's language set in the browser\n   */\n  private _getBrowserLang(): string {\n    return this._returnIfInLocales(this.translate.getBrowserLang());\n  }\n\n  /**\n   * Get language from local storage or cookie\n   */\n  private get _cachedLang(): string {\n    if (!this.settings.useCachedLang) {\n      return;\n    }\n    if (this.settings.cacheMechanism === CacheMechanism.LocalStorage) {\n      return this._cacheWithLocalStorage();\n    }\n    if (this.settings.cacheMechanism === CacheMechanism.SessionStorage) {\n      return this._cacheWithSessionStorage();\n    }\n    if (this.settings.cacheMechanism === CacheMechanism.Cookie) {\n      return this._cacheWithCookies();\n    }\n  }\n\n  /**\n   * Save language to local storage or cookie\n   */\n  private set _cachedLang(value: string) {\n    if (!this.settings.useCachedLang) {\n      return;\n    }\n    if (this.settings.cacheMechanism === CacheMechanism.LocalStorage) {\n      this._cacheWithLocalStorage(value);\n    }\n    if (this.settings.cacheMechanism === CacheMechanism.SessionStorage) {\n      this._cacheWithSessionStorage(value);\n    }\n    if (this.settings.cacheMechanism === CacheMechanism.Cookie) {\n      this._cacheWithCookies(value);\n    }\n  }\n\n  /**\n   * Cache value to local storage\n   */\n  private _cacheWithLocalStorage(value?: string): string {\n    try {\n      if (typeof window === 'undefined' || typeof window.localStorage === 'undefined') {\n        return;\n      }\n      if (value) {\n        window.localStorage.setItem(this.settings.cacheName, value);\n        return;\n      }\n      return this._returnIfInLocales(window.localStorage.getItem(this.settings.cacheName));\n    } catch (e) {\n      // weird Safari issue in private mode, where LocalStorage is defined but throws error on access\n      return;\n    }\n  }\n\n  /**\n   * Cache value to session storage\n   */\n  private _cacheWithSessionStorage(value?: string): string {\n    try {\n      if (typeof window === 'undefined' || typeof window.sessionStorage === 'undefined') {\n        return;\n      }\n      if (value) {\n        window.sessionStorage.setItem(this.settings.cacheName, value);\n        return;\n      }\n      return this._returnIfInLocales(window.sessionStorage.getItem(this.settings.cacheName));\n    } catch (e) {\n      return;\n    }\n  }\n\n  /**\n   * Cache value via cookies\n   */\n  private _cacheWithCookies(value?: string): string {\n    try {\n      if (typeof document === 'undefined' || typeof document.cookie === 'undefined') {\n        return;\n      }\n      const name = encodeURIComponent(this.settings.cacheName);\n      if (value) {\n        let cookieTemplate = `${this.settings.cookieFormat}`;\n        cookieTemplate = cookieTemplate\n          .replace('{{value}}', `${name}=${encodeURIComponent(value)}`)\n          .replace(/{{expires:?(\\d+)?}}/g, (fullMatch, groupMatch) => {\n            const days = groupMatch === undefined ? COOKIE_EXPIRY : parseInt(groupMatch, 10);\n            const date: Date = new Date();\n            date.setTime(date.getTime() + days * 86400000);\n            return `expires=${date.toUTCString()}`;\n          });\n\n        document.cookie = cookieTemplate;\n        return;\n      }\n      const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\n      const result = regexp.exec(document.cookie);\n      return decodeURIComponent(result[1]);\n    } catch (e) {\n      return; // should not happen but better safe than sorry (can happen by using domino)\n    }\n  }\n\n  /**\n   * Check if value exists in locales list\n   */\n  private _returnIfInLocales(value: string): string {\n    if (value && this.locales.indexOf(value) !== -1) {\n      return value;\n    }\n    return null;\n  }\n\n  /**\n   * Get translated value\n   */\n  private translateText(key: string): StrictTranslation | Observable<StrictTranslation> {\n    if (this.escapePrefix && key.startsWith(this.escapePrefix)) {\n      return key.replace(this.escapePrefix, '');\n    } else {\n      if (!this._translationObject) {\n        return key;\n      }\n      const fullKey = this.prefix + key;\n      const res = this.translate.getParsedResult(fullKey);\n      return res !== fullKey ? res : key;\n    }\n  }\n\n  /**\n   * Strategy to choose between new or old queryParams\n   * @param newExtras extras that contains new QueryParams\n   * @param currentQueryParams current query params\n   */\n  public chooseQueryParams(newExtras: NavigationExtras, currentQueryParams: Params) {\n    let queryParamsObj: Params;\n    if (newExtras && newExtras.queryParams) {\n      queryParamsObj = newExtras.queryParams;\n    } else if (currentQueryParams) {\n      queryParamsObj = currentQueryParams;\n    }\n    return queryParamsObj;\n  }\n\n  /**\n   * Format query params from object to string.\n   * Exemple of result: `param=value&param2=value2`\n   * @param params query params object\n   */\n  public formatQueryParams(params: Params): string {\n    return new HttpParams({ fromObject: params }).toString();\n  }\n\n  /**\n   * Get translation key prefix from config\n   */\n  public getPrefix(): string {\n    return this.prefix;\n  }\n\n  /**\n   * Get escape translation prefix from config\n   */\n  public getEscapePrefix(): string {\n    return this.escapePrefix;\n  }\n}\n\n/**\n * Manually set configuration\n */\nexport class ManualParserLoader extends LocalizeParser {\n\n  /**\n   * CTOR\n   */\n  constructor(translate: TranslateService, location: Location, settings: LocalizeRouterSettings,\n    locales: string[] = ['en'], prefix: string = 'ROUTES.', escapePrefix: string = '') {\n    super(translate, location, settings);\n    this.locales = locales;\n    this.prefix = prefix || '';\n    this.escapePrefix = escapePrefix || '';\n  }\n\n  /**\n   * Initialize or append routes\n   */\n  load(routes: Routes): Promise<any> {\n    return new Promise((resolve: any) => {\n      this.init(routes).then(resolve);\n    });\n  }\n}\n\n@Injectable()\nexport class DummyLocalizeParser extends LocalizeParser {\n  load(routes: Routes): Promise<any> {\n    return new Promise((resolve: any) => {\n      this.init(routes).then(resolve);\n    });\n  }\n}\n","/**\n * Compare if two objects are same\n */\nexport function equals(o1: any, o2: any): boolean {\n  if (o1 === o2) {\n    return true;\n  }\n  if (o1 === null || o2 === null) {\n    return false;\n  }\n  if (o1 !== o1 && o2 !== o2) {\n    return true; // NaN === NaN\n  }\n  const t1 = typeof o1,\n    t2 = typeof o2;\n  let length: number,\n    key: any,\n    keySet: any;\n\n  if (t1 === t2 && t1 === 'object') {\n    if (Array.isArray(o1)) {\n      if (!Array.isArray(o2)) {\n        return false;\n      }\n      if ((length = o1.length) === o2.length) {\n        for (key = 0; key < length; key++) {\n          if (!equals(o1[key], o2[key])) {\n            return false;\n          }\n        }\n        return true;\n      }\n    } else {\n      if (Array.isArray(o2)) {\n        return false;\n      }\n      keySet = Object.create(null);\n      for (key in o1) {\n        if (o1.hasOwnProperty(key)) {\n          if (!equals(o1[key], o2[key])) {\n            return false;\n          }\n          keySet[key] = true;\n        }\n      }\n      for (key in o2) {\n        if (o2.hasOwnProperty(key)) {\n          if (!(key in keySet) && typeof o2[key] !== 'undefined') {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Determine if the argument is shaped like a Promise\n */\nexport function isPromise(obj: any): obj is Promise<any> {\n  // allow any Promise/A+ compliant thenable.\n  // It's up to the caller to ensure that obj.then conforms to the spec\n  return !!obj && typeof obj.then === 'function';\n}\n\n/**\n * Deep copy of object and array\n */\nexport function deepCopy<t>(object: t): t {\n  const output = Array.isArray(object) ? [] : {};\n  for (const data in object) {\n    if (data) {\n      const value = object[data];\n      output[data as string] = (typeof value === 'object') ? deepCopy(value) : value;\n    }\n  }\n  return output as t;\n}\n\nexport function flatten<T>(list: Array<T|T[]>): T[] {\n  return list.reduce((flat: any[], item: T|T[]): T[] => {\n    const flatItem = Array.isArray(item) ? flatten(item) : item;\n    return (<T[]>flat).concat(flatItem);\n  }, []);\n}\n","import { Inject, Injectable } from '@angular/core';\n// import { Location } from '@angular/common';\nimport {\n  Router, NavigationStart, ActivatedRouteSnapshot, NavigationExtras, ActivatedRoute,\n  Event, NavigationCancel, Routes\n} from '@angular/router';\nimport { Subject, Observable, ReplaySubject } from 'rxjs';\nimport { filter, pairwise } from 'rxjs/operators';\n\nimport { LocalizeParser } from './localize-router.parser';\nimport { LocalizeRouterSettings } from './localize-router.config';\nimport { LocalizedMatcherUrlSegment } from './localized-matcher-url-segment';\nimport { deepCopy } from './util';\n\n/**\n * Localization service\n * modifyRoutes\n */\n@Injectable()\nexport class LocalizeRouterService {\n  routerEvents: Subject<string>;\n  hooks: {\n    /** @internal */\n    _initializedSubject: ReplaySubject<boolean>;\n    initialized: Observable<boolean>;\n  };\n\n\n  private latestUrl: string;\n  private lastExtras?: NavigationExtras;\n\n  /**\n   * CTOR\n   */\n  constructor(\n      @Inject(LocalizeParser) public parser: LocalizeParser,\n      @Inject(LocalizeRouterSettings) public settings: LocalizeRouterSettings,\n      @Inject(Router) private router: Router,\n      @Inject(ActivatedRoute) private route: ActivatedRoute/*,\n      @Inject(Location) private location: Location*/\n    ) {\n      this.routerEvents = new Subject<string>();\n      const initializedSubject = new ReplaySubject<boolean>(1);\n      this.hooks = {\n        _initializedSubject: initializedSubject,\n        initialized: initializedSubject.asObservable()\n      };\n  }\n\n  /**\n   * Start up the service\n   */\n  init(): void {\n    this.applyConfigToRouter(this.parser.routes);\n    // subscribe to router events\n    this.router.events\n      .pipe(\n        filter(event => event instanceof NavigationStart),\n        pairwise()\n      )\n      .subscribe(this._routeChanged());\n\n    if (this.settings.initialNavigation) {\n      this.router.initialNavigation();\n    }\n  }\n\n  /**\n   * Change language and navigate to translated route\n   */\n  changeLanguage(lang: string, extras?: NavigationExtras, useNavigateMethod?: boolean): void {\n\n    if (lang !== this.parser.currentLang) {\n      const rootSnapshot: ActivatedRouteSnapshot = this.router.routerState.snapshot.root;\n\n      this.parser.translateRoutes(lang).subscribe(() => {\n\n        let url = this.traverseRouteSnapshot(rootSnapshot);\n        url = this.translateRoute(url) as string;\n\n        if (!this.settings.alwaysSetPrefix) {\n          let urlSegments = url.split('/');\n          const languageSegmentIndex = urlSegments.indexOf(this.parser.currentLang);\n          // If the default language has no prefix make sure to remove and add it when necessary\n          if (this.parser.currentLang === this.parser.defaultLang) {\n            // Remove the language prefix from url when current language is the default language\n            if (languageSegmentIndex === 0 || (languageSegmentIndex === 1 && urlSegments[0] === '')) {\n              // Remove the current aka default language prefix from the url\n              urlSegments = urlSegments.slice(0, languageSegmentIndex).concat(urlSegments.slice(languageSegmentIndex + 1));\n            }\n          } else {\n            // When coming from a default language it's possible that the url doesn't contain the language, make sure it does.\n            if (languageSegmentIndex === -1) {\n              // If the url starts with a slash make sure to keep it.\n              const injectionIndex = urlSegments[0] === '' ? 1 : 0;\n              urlSegments = urlSegments.slice(0, injectionIndex).concat(this.parser.currentLang, urlSegments.slice(injectionIndex));\n            }\n          }\n          url = urlSegments.join('/');\n        }\n\n        // Prevent multiple \"/\" character\n        url = url.replace(/\\/+/g, '/');\n\n        const lastSlashIndex = url.lastIndexOf('/');\n        if (lastSlashIndex > 0 && lastSlashIndex === url.length - 1) {\n          url = url.slice(0, -1);\n        }\n\n        const queryParamsObj = this.parser.chooseQueryParams(extras, this.route.snapshot.queryParams);\n\n        this.applyConfigToRouter(this.parser.routes);\n\n        this.lastExtras = extras;\n        if (useNavigateMethod) {\n          const extrasToApply: NavigationExtras = extras ? {...extras} : {};\n          if (queryParamsObj) {\n            extrasToApply.queryParams = queryParamsObj;\n          }\n          this.router.navigate([url], extrasToApply);\n        } else {\n          let queryParams = this.parser.formatQueryParams(queryParamsObj);\n          queryParams = queryParams ? `?${queryParams}` : '';\n          this.router.navigateByUrl(`${url}${queryParams}`, extras);\n        }\n      });\n    }\n  }\n\n  /**\n   * Traverses through the tree to assemble new translated url\n   */\n  private traverseRouteSnapshot(snapshot: ActivatedRouteSnapshot): string {\n    if (snapshot.firstChild && snapshot.routeConfig) {\n      return `${this.parseSegmentValue(snapshot)}/${this.traverseRouteSnapshot(snapshot.firstChild)}`;\n    } else if (snapshot.firstChild) {\n      return this.traverseRouteSnapshot(snapshot.firstChild);\n    } else {\n      return this.parseSegmentValue(snapshot);\n    }\n    /* if (snapshot.firstChild && snapshot.firstChild.routeConfig && snapshot.firstChild.routeConfig.path) {\n      if (snapshot.firstChild.routeConfig.path !== '**') {\n        return this.parseSegmentValue(snapshot) + '/' + this.traverseRouteSnapshot(snapshot.firstChild);\n      } else {\n        return this.parseSegmentValue(snapshot.firstChild);\n      }\n    }\n    return this.parseSegmentValue(snapshot); */\n  }\n\n  /**\n   * Build URL from segments and snapshot (for params)\n   */\n  private buildUrlFromSegments(snapshot: ActivatedRouteSnapshot, segments: string[]): string {\n    return segments.map((s: string, i: number) => s.indexOf(':') === 0 ? snapshot.url[i].path : s).join('/');\n  }\n\n  /**\n   * Extracts new segment value based on routeConfig and url\n   */\n  private parseSegmentValue(snapshot: ActivatedRouteSnapshot): string {\n    if (snapshot.routeConfig && snapshot.routeConfig.matcher) {\n      const subPathMatchedSegments = this.parseSegmentValueMatcher(snapshot);\n      return this.buildUrlFromSegments(snapshot, subPathMatchedSegments);\n    } else if (snapshot.data.localizeRouter) {\n      const path = snapshot.data.localizeRouter.path;\n      const subPathSegments = path.split('/');\n      return this.buildUrlFromSegments(snapshot, subPathSegments);\n    } else if (snapshot.parent && snapshot.parent.parent) { // Not lang route and no localizeRouter data = excluded path\n      const path = snapshot.routeConfig.path;\n      const subPathSegments = path.split('/');\n      return this.buildUrlFromSegments(snapshot, subPathSegments);\n    } else {\n      return '';\n    }\n    /* if (snapshot.routeConfig) {\n      if (snapshot.routeConfig.path === '**') {\n        return snapshot.url.filter((segment: UrlSegment) => segment.path).map((segment: UrlSegment) => segment.path).join('/');\n      } else {\n        const subPathSegments = snapshot.routeConfig.path.split('/');\n        return subPathSegments.map((s: string, i: number) => s.indexOf(':') === 0 ? snapshot.url[i].path : s).join('/');\n      }\n    }\n    return ''; */\n  }\n\n  private parseSegmentValueMatcher(snapshot: ActivatedRouteSnapshot): string[] {\n    const localizeMatcherParams = snapshot.data && snapshot.data.localizeMatcher && snapshot.data.localizeMatcher.params || { };\n    const subPathSegments: string[] = snapshot.url\n      .map((segment: LocalizedMatcherUrlSegment) => {\n        const currentPath = segment.path;\n        const matchedParamName = segment.localizedParamName;\n        const val = (matchedParamName && localizeMatcherParams[matchedParamName]) ?\n          localizeMatcherParams[matchedParamName](currentPath) : null;\n        return val || `${this.parser.getEscapePrefix()}${currentPath}`;\n      });\n    return subPathSegments;\n  }\n\n  /**\n   * Translate route to current language\n   * If new language is explicitly provided then replace language part in url with new language\n   */\n  translateRoute(path: string | any[]): string | any[] {\n    if (typeof path === 'string') {\n      const url = this.parser.translateRoute(path);\n      return !path.indexOf('/') ? this.parser.addPrefixToUrl(url) : url;\n    }\n    // it's an array\n    const result: any[] = [];\n    (path as Array<any>).forEach((segment: any, index: number) => {\n      if (typeof segment === 'string') {\n        const res = this.parser.translateRoute(segment);\n        if (!index && !segment.indexOf('/')) {\n          result.push(this.parser.addPrefixToUrl(res));\n        } else {\n          result.push(res);\n        }\n      } else {\n        result.push(segment);\n      }\n    });\n    return result;\n  }\n\n  /**\n   * Event handler to react on route change\n   */\n  private _routeChanged(): (eventPair: [NavigationStart, NavigationStart]) => void {\n    return ([previousEvent, currentEvent]: [NavigationStart, NavigationStart]) => {\n      const previousLang = this.parser.getLocationLang(previousEvent.url) || this.parser.defaultLang;\n      const currentLang = this.parser.getLocationLang(currentEvent.url) || this.parser.defaultLang;\n      const lastExtras = this.lastExtras;\n\n      if (currentLang !== previousLang && this.latestUrl !== currentEvent.url) {\n        this.latestUrl = currentEvent.url;\n        this.cancelCurrentNavigation();\n        this.parser.translateRoutes(currentLang)\n          .subscribe(() => {\n            // Reset routes again once they are all translated\n            this.applyConfigToRouter(this.parser.routes);\n            // Clear global extras\n            this.lastExtras = undefined;\n            // Init new navigation with same url to take new config in consideration\n            this.router.navigateByUrl(currentEvent.url, lastExtras);\n            // Fire route change event\n            this.routerEvents.next(currentLang);\n          });\n      }\n      this.latestUrl = currentEvent.url;\n    };\n  }\n\n  /**\n   * Drop the current Navigation\n   */\n  private cancelCurrentNavigation() {\n    const currentNavigation = this.router.getCurrentNavigation();\n    const url = this.router.serializeUrl(currentNavigation.extractedUrl);\n    (this.router.events as Subject<Event>).next(new NavigationCancel(currentNavigation.id, url, ''));\n    (this.router as any).navigationTransitions.transitions.next({\n      ...(this.router as any).navigationTransitions.transitions.getValue(),\n      id: 0,\n    });\n  }\n\n  /**\n   * Apply config to Angular RouterModule\n   * @param config routes to apply\n   */\n  private applyConfigToRouter(config: Routes) {\n    this.router.resetConfig(deepCopy(config));\n  }\n\n}\n","import { PipeTransform, Pipe, ChangeDetectorRef, OnDestroy } from '@angular/core';\nimport { LocalizeRouterService } from './localize-router.service';\nimport { Subscription } from 'rxjs';\nimport { equals } from './util';\n\nconst VIEW_DESTROYED_STATE = 128;\n\n@Pipe({\n  name: 'localize',\n  pure: false, // required to update the value when the promise is resolved\n  standalone: true\n})\nexport class LocalizeRouterPipe implements PipeTransform, OnDestroy {\n  private value: string | any[] = '';\n  private lastKey: string | any[];\n  private lastLanguage: string;\n  private subscription: Subscription;\n\n  /**\n   * CTOR\n   */\n  constructor(private localize: LocalizeRouterService, private _ref: ChangeDetectorRef) {\n    this.subscription = this.localize.routerEvents.subscribe(() => {\n      this.transform(this.lastKey);\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  /**\n   * Transform current url to localized one\n   */\n  transform(query: string | any[]): string | any[] {\n    if (!query || query.length === 0 || !this.localize.parser.currentLang) {\n      return query;\n    }\n    if (equals(query, this.lastKey) && equals(this.lastLanguage, this.localize.parser.currentLang)) {\n      return this.value;\n    }\n    this.lastKey = query;\n    this.lastLanguage = this.localize.parser.currentLang;\n\n    /** translate key and update values */\n    this.value = this.localize.translateRoute(query);\n    this.lastKey = query;\n    // if view is already destroyed, ignore firing change detection\n    const view = (this._ref as any)._view;\n    if (view && (view.state & VIEW_DESTROYED_STATE)) {\n      return this.value;\n    }\n    setTimeout(() => {\n      this._ref.detectChanges();\n    }, 0)\n\n    return this.value;\n  }\n}\n","import { RouteReuseStrategy, DetachedRouteHandle, ActivatedRouteSnapshot } from '@angular/router';\n\nexport class GilsdavReuseStrategy implements RouteReuseStrategy {\n  // private handlers: {[key: string]: DetachedRouteHandle} = {};\n  constructor() {\n  }\n  shouldDetach(route: ActivatedRouteSnapshot): boolean {\n    // console.log('shouldDetach', route);\n    return false;\n  }\n  store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {\n    // console.log('store', route, handle);\n    // console.log('store url', this.getKey(route));\n    // this.handlers[this.getKey(route)] = handle;\n  }\n  shouldAttach(route: ActivatedRouteSnapshot): boolean {\n    // console.log('shouldAttach', route, this.getKey(route));\n    // return !!this.handlers[this.getKey(route)];\n    return false;\n  }\n  retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle {\n    // console.log('retrieve', route);\n    // console.log('retrieve url', this.getKey(route));\n    // const result = this.handlers[this.getKey(route)];\n    // delete this.handlers[this.getKey(route)];\n    // return result;\n    return null;\n  }\n  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n    // console.log('shouldReuseRoute', future, curr, this.getKey(future) === this.getKey(curr));\n    // console.log('shouldReuseRoute', future && curr ? this.getKey(future) === this.getKey(curr) : false);\n    return future && curr ? this.getKey(future) === this.getKey(curr) : false;\n  }\n  private getKey(route: ActivatedRouteSnapshot) {\n    // console.log(route.parent.component.toString());\n    if (route.firstChild && route.firstChild.routeConfig && route.firstChild.routeConfig.path &&\n        route.firstChild.routeConfig.path.indexOf('**') !== -1) { // WildCard\n      return 'WILDCARD';\n    } else if (!route.data.localizeRouter && (!route.parent || !route.parent.parent) && !route.data.skipRouteLocalization) { // Lang route\n      return 'LANG';\n    } else if (route.routeConfig.matcher) {\n      let keyM = `${this.getKey(route.parent)}/${route.routeConfig.matcher.name}`;\n      if (route.data.discriminantPathKey) {\n        keyM = `${keyM}-${route.data.discriminantPathKey}`;\n      }\n      return keyM;\n    } else if (route.data.localizeRouter) {\n      let key = `${this.getKey(route.parent)}/${route.data.localizeRouter.path}`;\n      if (route.data.discriminantPathKey) {\n        key = `${key}-${route.data.discriminantPathKey}`;\n      }\n      return key;\n    } else {\n      let key = route.routeConfig.path;\n      if (route.parent) {\n        key = `${this.getKey(route.parent)}/${route.routeConfig.path}`;\n      }\n      if (route.data.discriminantPathKey) {\n        key = `${key}-${route.data.discriminantPathKey}`;\n      }\n      return key;\n    }\n  }\n}\n","import { Router, ROUTES, Route, DefaultExport, Routes, PRIMARY_OUTLET, ɵEmptyOutletComponent as EmptyOutletComponent } from '@angular/router';\nimport { Injector, Compiler, NgModuleFactory, PLATFORM_ID, inject, Injectable, EnvironmentInjector } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { from, of, isObservable, Observable, ConnectableObservable, Subject } from 'rxjs';\nimport { mergeMap, map, refCount, finalize } from 'rxjs/operators';\nimport { isPromise } from './util';\nimport { LocalizeParser } from './localize-router.parser';\n\n@Injectable({providedIn: 'root'})\nexport class LocalizedRouter extends Router {\n\n  private platformId = inject(PLATFORM_ID);\n  private compiler = inject(Compiler);\n  private localize = inject(LocalizeParser);\n  private childrenLoaders = new WeakMap<Route, Observable<LoadedRouterConfig>>();\n  onLoadStartListener?: (r: Route) => void;\n  onLoadEndListener?: (r: Route) => void;\n  constructor() {\n    super();\n    // Custom configuration\n    const isBrowser = isPlatformBrowser(this.platformId);\n    // __proto__ is needed for preloaded modules be doesn't work with SSR\n    // @ts-ignore\n    const configLoader = isBrowser\n      ? (this as any).navigationTransitions.configLoader.__proto__\n      : (this as any).navigationTransitions.configLoader;\n\n    configLoader.loadChildren = (parentInjector: Injector, route: any) => {\n      if (this.childrenLoaders.get(route)) {\n        return this.childrenLoaders.get(route)!;\n      } else if (route._loadedRoutes) {\n        return of({routes: route._loadedRoutes, injector: route._loadedInjector});\n      }\n      if (this.onLoadStartListener) {\n        this.onLoadStartListener(route);\n      }\n      const moduleFactoryOrRoutes$ =\n      this.loadModuleFactoryOrRoutes(parentInjector, route);\n      const loadRunner = moduleFactoryOrRoutes$.pipe(\n          finalize(() => {\n            this.childrenLoaders.delete(route);\n          }),\n      );\n      const loader = new ConnectableObservable(loadRunner, () => new Subject<any>())\n                         .pipe(refCount());\n      this.childrenLoaders.set(route, loader);\n      return loader;\n   }\n  }\n\n  loadModuleFactoryOrRoutes = (parentInjector: Injector, route: Route) => {\n    return wrapIntoObservable(route.loadChildren!())\n    .pipe(\n        map(maybeUnwrapDefaultExport),\n        mergeMap((t) => {\n          if (t instanceof NgModuleFactory || Array.isArray(t)) {\n            return of(t);\n          } else {\n            return from(this.compiler.compileModuleAsync(t));\n          }\n        }),\n        map((factoryOrRoutes: NgModuleFactory<any>|Routes) => {\n          if (this.onLoadEndListener) {\n            this.onLoadEndListener(route);\n          }\n          let injector: EnvironmentInjector|undefined;\n          let rawRoutes: Route[];\n          if (Array.isArray(factoryOrRoutes)) {\n            rawRoutes = this.localize.initChildRoutes([].concat(...factoryOrRoutes));\n          } else {\n            injector = factoryOrRoutes.create(parentInjector).injector;\n            const getMethod = injector.get.bind(injector);\n            injector['get'] = (token: any, notFoundValue: any, flags?: any) => {\n              const getResult = getMethod(token, notFoundValue, flags);\n              if (token === ROUTES) {\n                return this.localize.initChildRoutes([].concat(...getResult));\n              } else {\n                return getResult;\n              }\n            };\n            rawRoutes = injector.get(ROUTES, [], {optional: true, self: true}).reduce((acc, routes) => acc.concat(routes), []);\n          }\n          const routes = rawRoutes.map(standardizeConfig);\n          return {routes, injector};\n        }),\n    );\n  };\n}\n\n\nexport function standardizeConfig(r: Route): Route {\n  const children = r.children && r.children.map(standardizeConfig);\n  const c = children ? {...r, children} : {...r};\n  if ((!c.component && !c.loadComponent) && (children || c.loadChildren) &&\n      (c.outlet && c.outlet !== PRIMARY_OUTLET)) {\n    c.component = EmptyOutletComponent;\n  }\n  return c;\n}\nexport interface LoadedRouterConfig {\n  routes: Route[];\n  injector: EnvironmentInjector|undefined;\n}\n\nfunction isWrappedDefaultExport<T>(value: T|DefaultExport<T>): value is DefaultExport<T> {\n  // We use `in` here with a string key `'default'`, because we expect `DefaultExport` objects to be\n  // dynamically imported ES modules with a spec-mandated `default` key. Thus we don't expect that\n  // `default` will be a renamed property.\n  return value && typeof value === 'object' && 'default' in value;\n}\n\nfunction maybeUnwrapDefaultExport<T>(input: T|DefaultExport<T>): T {\n  // As per `isWrappedDefaultExport`, the `default` key here is generated by the browser and not\n  // subject to property renaming, so we reference it with bracket access.\n  return isWrappedDefaultExport(input) ? input['default'] : input;\n}\n\nexport function wrapIntoObservable<T>(value: T | NgModuleFactory<T> | Promise<T> | Observable<T>) {\n  if (isObservable(value)) {\n    return value;\n  }\n\n  if (isPromise(value)) {\n    // Use `Promise.resolve()` to wrap promise-like instances.\n    // Required ie when a Resolver returns a AngularJS `$q` promise to correctly trigger the\n    // change detection.\n    return from(Promise.resolve(value));\n  }\n\n  return of(value);\n}\n","import {\n  NgModule, ModuleWithProviders, APP_INITIALIZER, Optional, SkipSelf,\n  Injectable, Injector, Provider\n} from '@angular/core';\nimport { LocalizeRouterService } from './localize-router.service';\nimport { DummyLocalizeParser, LocalizeParser } from './localize-router.parser';\nimport {\n  RouterModule, Routes, RouteReuseStrategy, Router, RouterConfigurationFeature\n} from '@angular/router';\nimport { LocalizeRouterPipe } from './localize-router.pipe';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CommonModule, Location } from '@angular/common';\nimport {\n  ALWAYS_SET_PREFIX,\n  CACHE_MECHANISM, CACHE_NAME, DEFAULT_LANG_FUNCTION, LOCALIZE_ROUTER_FORROOT_GUARD,\n  LocalizeRouterConfig, LocalizeRouterSettings,\n  RAW_ROUTES,\n  USE_CACHED_LANG,\n  COOKIE_FORMAT,\n  INITIAL_NAVIGATION\n} from './localize-router.config';\nimport { GilsdavReuseStrategy } from './gilsdav-reuse-strategy';\nimport { deepCopy } from './util';\nimport { LocalizedRouter } from './localized-router';\n\n@Injectable()\nexport class ParserInitializer {\n  parser: LocalizeParser;\n  routes: Routes;\n\n  /**\n   * CTOR\n   */\n  constructor(private injector: Injector) {\n  }\n\n  appInitializer(): Promise<any> {\n    const res = this.parser.load(this.routes);\n\n    return res.then(() => {\n      const localize = this.injector.get(LocalizeRouterService);\n      const router = this.injector.get(Router);\n      const settings = this.injector.get(LocalizeRouterSettings);\n      localize.init();\n\n      if (settings.initialNavigation) {\n        return new Promise<void>(resolve => {\n          // @ts-ignore\n          const oldAfterPreactivation = router.navigationTransitions.afterPreactivation;\n          let firstInit = true;\n          // @ts-ignore\n          router.navigationTransitions.afterPreactivation = () => {\n            if (firstInit) {\n              resolve();\n              firstInit = false;\n              localize.hooks._initializedSubject.next(true);\n              localize.hooks._initializedSubject.complete();\n            }\n            return oldAfterPreactivation();\n          };\n        });\n      } else {\n        localize.hooks._initializedSubject.next(true);\n        localize.hooks._initializedSubject.complete();\n      }\n    });\n  }\n\n  generateInitializer(parser: LocalizeParser, routes: Routes[]): () => Promise<any> {\n    this.parser = parser;\n    this.routes = routes.reduce((a, b) => a.concat(b));\n    return this.appInitializer;\n  }\n}\n\nexport function getAppInitializer(p: ParserInitializer, parser: LocalizeParser, routes: Routes[]): any {\n  // DeepCopy needed to prevent RAW_ROUTES mutation\n  const routesCopy = deepCopy(routes);\n  return p.generateInitializer(parser, routesCopy).bind(p);\n}\n\nfunction createLocalizeRouterProviders(routes: Routes, config: LocalizeRouterConfig): Provider[] {\n  return [\n    {\n      provide: Router,\n      useClass: LocalizedRouter\n    },\n    {\n      provide: LOCALIZE_ROUTER_FORROOT_GUARD,\n      useFactory: provideForRootGuard,\n      deps: [[LocalizeRouterModule, new Optional(), new SkipSelf()]]\n    },\n    { provide: USE_CACHED_LANG, useValue: config.useCachedLang },\n    { provide: ALWAYS_SET_PREFIX, useValue: config.alwaysSetPrefix },\n    { provide: CACHE_NAME, useValue: config.cacheName },\n    { provide: CACHE_MECHANISM, useValue: config.cacheMechanism },\n    { provide: DEFAULT_LANG_FUNCTION, useValue: config.defaultLangFunction },\n    { provide: COOKIE_FORMAT, useValue: config.cookieFormat },\n    { provide: INITIAL_NAVIGATION, useValue: config.initialNavigation },\n    LocalizeRouterSettings,\n    config.parser || { provide: LocalizeParser, useClass: DummyLocalizeParser },\n    {\n      provide: RAW_ROUTES,\n      multi: true,\n      useValue: routes\n    },\n    LocalizeRouterService,\n    ParserInitializer,\n    {\n      provide: APP_INITIALIZER,\n      multi: true,\n      useFactory: getAppInitializer,\n      deps: [ParserInitializer, LocalizeParser, RAW_ROUTES]\n    },\n    {\n      provide: RouteReuseStrategy,\n      useClass: GilsdavReuseStrategy\n    }\n  ];\n}\n\n@NgModule({\n  imports: [CommonModule, RouterModule, TranslateModule, LocalizeRouterPipe],\n  exports: [LocalizeRouterPipe]\n})\nexport class LocalizeRouterModule {\n\n  static forRoot(routes: Routes, config: LocalizeRouterConfig = {}): ModuleWithProviders<LocalizeRouterModule> {\n    return {\n      ngModule: LocalizeRouterModule,\n      providers: createLocalizeRouterProviders(routes, config)\n    };\n  }\n\n  static forChild(routes: Routes): ModuleWithProviders<LocalizeRouterModule> {\n    return {\n      ngModule: LocalizeRouterModule,\n      providers: [\n        {\n          provide: RAW_ROUTES,\n          multi: true,\n          useValue: routes\n        }\n      ]\n    };\n  }\n}\n\nexport function provideForRootGuard(localizeRouterModule: LocalizeRouterModule): string {\n  if (localizeRouterModule) {\n    throw new Error(\n      `LocalizeRouterModule.forRoot() called twice. Lazy loaded modules should use LocalizeRouterModule.forChild() instead.`);\n  }\n  return 'guarded';\n}\n\n\nexport function withLocalizeRouter(routes: Routes, config: LocalizeRouterConfig = {}): RouterConfigurationFeature {\n  return {\n    ɵkind: 'LocalizeRouter' as any,\n    ɵproviders: createLocalizeRouterProviders(routes, config)\n  };\n}\n","import { ROUTES } from '@angular/router';\nimport {\n  NgModuleFactory, Injector, Compiler, Type, NgModuleRef\n} from '@angular/core';\nimport { LocalizeParser } from './localize-router.parser';\n\nexport class LocalizeNgModuleFactory extends NgModuleFactory<any> {\n  constructor(public moduleType: Type<any>) {\n    super();\n  }\n  create = (parentInjector: Injector) => {\n    const compiler = parentInjector.get(Compiler);\n    const localize = parentInjector.get(LocalizeParser);\n    const compiled = compiler.compileModuleAndAllComponentsSync(this.moduleType);\n    const moduleRef: NgModuleRef<any> = compiled.ngModuleFactory.create(parentInjector);\n    const getMethod = moduleRef.injector.get.bind(moduleRef.injector);\n    moduleRef.injector['get'] = (token: any, notFoundValue: any) => {\n      const getResult = getMethod(token, notFoundValue);\n\n      if (token === ROUTES) {\n        // translate lazy routes\n        return localize.initChildRoutes([].concat(...getResult));\n      } else {\n        return getResult;\n      }\n    };\n\n    return moduleRef;\n  }\n}\n\nexport function translateModule(moduleType: Type<any>) {\n  return new LocalizeNgModuleFactory(moduleType);\n}\n","\n/*\n * Public API Surface of ngx-translate-router\n */\n\nexport * from './lib/localize-router.module';\nexport * from './lib/localize-router.parser';\nexport * from './lib/localize-router.service';\nexport * from './lib/localize-router.pipe';\nexport * from './lib/localize-router.config';\nexport * from './lib/localize-router-config-loader';\nexport * from './lib/gilsdav-reuse-strategy';\nexport * from './lib/localized-router';\nexport * from './lib/localized-matcher-url-segment';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.LocalizeRouterService","EmptyOutletComponent"],"mappings":"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"}