@derschmidtler/ngx-translate-router 10.0.0
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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derschmidtler-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/derschmidtler-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 { 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 /**\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.setDefaultLang(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): string {\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(this._translationObject, 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 containes 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¶m2=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';\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.currentNavigation();\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): string {\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 {\n Router,\n ROUTES,\n Route,\n DefaultExport,\n Routes,\n PRIMARY_OUTLET,\n ɵEmptyOutletComponent as EmptyOutletComponent,\n} from \"@angular/router\";\nimport {\n Injector,\n Compiler,\n NgModuleFactory,\n PLATFORM_ID,\n inject,\n Injectable,\n EnvironmentInjector,\n runInInjectionContext,\n} from \"@angular/core\";\nimport { isPlatformBrowser } from \"@angular/common\";\nimport { isObservable, Observable, firstValueFrom } from \"rxjs\";\nimport { LocalizeParser } from \"./localize-router.parser\";\n\n@Injectable({ providedIn: \"root\" })\n/**\n * LocalizedRouter\n * ----------------\n * TL;DR: extends the angular router, especially the parts responsible for loading\n * routes + child routes.\n *\n * This class extends Angular's Router to transparently localize routes that\n * are loaded lazily.\n *\n * Why does this exist?\n * ====================\n *\n * ngx-translate-router modifies route definitions by translating the `path`\n * properties before Angular starts matching URLs.\n *\n * Prior to Angular 21 the library could recursively walk the route tree,\n * including lazily loaded children, by accessing Router internals such as\n * `_loadedRoutes` and repeatedly calling `router.resetConfig()`.\n *\n * Angular 21 completely changed the lazy loading pipeline. Child routes are now\n * resolved asynchronously through RouterConfigLoader and no longer exist at the\n * time `resetConfig()` executes.\n *\n * As a consequence, lazily loaded routes remained untranslated which eventually\n * caused router failures during matching (for example\n * `containsEmptyPathMatches()` receiving an undefined route array).\n *\n * Instead of rewriting Angular's routing pipeline, this class intercepts the\n * lazy loading process itself.\n *\n * High level flow\n * ===============\n *\n * Angular navigation\n * │\n * ▼\n * RouterConfigLoader.loadChildren()\n * │\n * ▼\n * LocalizedRouter.customLoadChildren()\n * │\n * ├── load original lazy module/routes\n * ├── translate child routes\n * ├── return translated Routes\n * ▼\n * Angular continues normally\n *\n * Angular itself never sees untranslated child routes.\n *\n * Design\n * ======\n *\n * The implementation overrides Angular's internal\n * RouterConfigLoader.loadChildren() method.\n *\n * This is intentionally done in one place instead of modifying the router state\n * afterwards via resetConfig(), because Angular now expects lazy routes to be\n * resolved through this loader.\n *\n * customLoadChildren() reproduces Angular's original implementation almost\n * verbatim while inserting the localization step immediately before the loaded\n * Routes are returned.\n *\n * Module-based lazy loading requires an additional trick:\n *\n * injector.get(ROUTES)\n *\n * is intercepted so the ROUTES injection token returns already-localized route\n * definitions. This avoids having to patch Angular's module loading process.\n *\n * Caching\n * =======\n *\n * Angular expects concurrent requests for the same lazy route to share a single\n * Promise. childrenLoaders reproduces that behaviour using a WeakMap keyed by\n * Route.\n *\n * Compatibility\n * =============\n *\n * This implementation intentionally accesses Angular private APIs:\n *\n * - navigationTransitions.configLoader\n * - RouterConfigLoader.loadChildren()\n * - _loadedRoutes\n * - _loadedInjector\n * - _loadedNgModuleFactory\n *\n * These APIs are not stable and may change between Angular releases.\n *\n * This file should therefore be considered an Angular-version compatibility\n * layer. If a future Angular update breaks lazy route localization, this is the\n * first file that should be investigated.\n *\n * Verified against:\n *\n * Angular 21.x\n *\n * A cleaner implementation using only public Router APIs is planned for a\n * future major version once Angular exposes sufficient extension points.\n */\nexport class LocalizedRouter extends Router {\n private platformId = inject(PLATFORM_ID);\n private compiler = inject(Compiler);\n private localize = inject(LocalizeParser);\n private childrenLoaders = new WeakMap<Route, Promise<LoadedRouterConfig>>();\n onLoadStartListener?: (r: Route) => void;\n onLoadEndListener?: (r: Route) => void;\n constructor() {\n super();\n\n // get the configLoader in order to get access to loadChildren().\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 // Overrides default Angular RouterConfigLoader.loadChildren method so we can extend it\n configLoader.loadChildren = (\n parentInjector: Injector,\n route: any,\n ): Promise<LoadedRouterConfig> => {\n if (this.childrenLoaders.get(route)) {\n return this.childrenLoaders.get(route)!;\n } else if (route._loadedRoutes) {\n return Promise.resolve({\n routes: route._loadedRoutes,\n injector: route._loadedInjector,\n });\n }\n\n if (this.onLoadStartListener) {\n this.onLoadStartListener(route);\n }\n const loader = (async () => {\n try {\n const result = await this.customLoadChildren(\n route,\n this.compiler,\n parentInjector,\n this.onLoadEndListener,\n );\n route._loadedRoutes = result.routes;\n route._loadedInjector = result.injector;\n route._loadedNgModuleFactory = result.factory;\n return result;\n } finally {\n this.childrenLoaders.delete(route);\n }\n })();\n this.childrenLoaders.set(route, loader);\n return loader;\n };\n }\n\n async customLoadChildren(\n route: Route,\n compiler: Compiler,\n parentInjector: Injector,\n onLoadEndListener?: (r: Route) => void,\n ): Promise<LoadedRouterConfig> {\n const loaded = await wrapIntoPromise(\n runInInjectionContext(parentInjector, () => route.loadChildren!()),\n );\n const t = maybeUnwrapDefaultExport(loaded);\n\n let factoryOrRoutes: NgModuleFactory<any> | Routes;\n if (t instanceof NgModuleFactory || Array.isArray(t)) {\n factoryOrRoutes = t;\n } else {\n factoryOrRoutes = await compiler.compileModuleAsync(t);\n }\n\n if (onLoadEndListener) {\n onLoadEndListener(route);\n }\n\n let injector: EnvironmentInjector | undefined;\n let rawRoutes: Route[];\n let factory: NgModuleFactory<unknown> | undefined = undefined;\n if (Array.isArray(factoryOrRoutes)) {\n rawRoutes = this.localize.initChildRoutes([].concat(...factoryOrRoutes));\n } else {\n injector = factoryOrRoutes.create(parentInjector).injector;\n factory = factoryOrRoutes;\n // instead of having to overwrite the whole routes function stack,\n // we simply override the ROUTES injection token\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\n rawRoutes = injector\n .get(ROUTES, [], { optional: true, self: true })\n .flat();\n }\n const routes = rawRoutes.map(standardizeConfig);\n return { routes, injector, factory };\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 (\n !c.component &&\n !c.loadComponent &&\n (children || c.loadChildren) &&\n c.outlet &&\n c.outlet !== PRIMARY_OUTLET\n ) {\n c.component = EmptyOutletComponent;\n }\n return c;\n}\n\nexport interface LoadedRouterConfig {\n routes: Route[];\n injector: EnvironmentInjector | undefined;\n factory?: NgModuleFactory<unknown>;\n}\n\n/**\n * see\n * @param value\n * @returns\n */\nfunction isWrappedDefaultExport<T>(\n value: T | DefaultExport<T>,\n): 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\n/**\n * see https://github.com/angular/angular/blob/main/packages/router/src/utils/collection.ts#L88\n * @param value\n * @returns\n */\nexport function wrapIntoPromise<T>(\n value: T | Promise<T> | Observable<T>,\n): Promise<T> {\n if (isObservable(value)) {\n return firstValueFrom(value);\n }\n return Promise.resolve(value);\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 } 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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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@derschmidtler/ngx-translate-router",
|
|
3
|
+
"version": "10.0.0",
|
|
4
|
+
"homepage": "https://github.com/SrgSteak/ngx-translate-router",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "Robin Schmidt & David Gilson",
|
|
8
|
+
"email": "gehirn.hauptfach.1r@icloud.com",
|
|
9
|
+
"url": "https://github.com/SrgSteak"
|
|
10
|
+
},
|
|
11
|
+
"peerDependencies": {
|
|
12
|
+
"@angular/common": ">=16.2.12",
|
|
13
|
+
"@angular/core": ">=16.2.12",
|
|
14
|
+
"@angular/router": ">=16.2.12",
|
|
15
|
+
"@ngx-translate/core": ">=15.0.0"
|
|
16
|
+
},
|
|
17
|
+
"module": "fesm2022/derschmidtler-ngx-translate-router.mjs",
|
|
18
|
+
"typings": "types/derschmidtler-ngx-translate-router.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
"./package.json": {
|
|
21
|
+
"default": "./package.json"
|
|
22
|
+
},
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./types/derschmidtler-ngx-translate-router.d.ts",
|
|
25
|
+
"default": "./fesm2022/derschmidtler-ngx-translate-router.mjs"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"sideEffects": false,
|
|
29
|
+
"type": "module",
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"tslib": "^2.3.0"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, Provider, PipeTransform, OnDestroy, ChangeDetectorRef, ModuleWithProviders, Injector, NgModuleFactory, Type, NgModuleRef, EnvironmentInjector, Compiler } from '@angular/core';
|
|
3
|
+
import * as i2 from '@angular/router';
|
|
4
|
+
import { Routes, NavigationExtras, Params, Router, ActivatedRoute, RouterConfigurationFeature, RouteReuseStrategy, ActivatedRouteSnapshot, DetachedRouteHandle, Route, UrlSegment } from '@angular/router';
|
|
5
|
+
import * as i3 from '@ngx-translate/core';
|
|
6
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
7
|
+
import { Observable, Subject } from 'rxjs';
|
|
8
|
+
import * as i1 from '@angular/common';
|
|
9
|
+
import { Location } from '@angular/common';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Guard to make sure we have single initialization of forRoot
|
|
13
|
+
*/
|
|
14
|
+
declare const LOCALIZE_ROUTER_FORROOT_GUARD: InjectionToken<LocalizeRouterModule>;
|
|
15
|
+
/**
|
|
16
|
+
* Static provider for keeping track of routes
|
|
17
|
+
*/
|
|
18
|
+
declare const RAW_ROUTES: InjectionToken<Routes[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Type for Caching of default language
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Namespace for fail proof access of CacheMechanism
|
|
24
|
+
*/
|
|
25
|
+
declare enum CacheMechanism {
|
|
26
|
+
LocalStorage = "LocalStorage",
|
|
27
|
+
SessionStorage = "SessionStorage",
|
|
28
|
+
Cookie = "Cookie"
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Boolean to indicate whether to use cached language value
|
|
32
|
+
*/
|
|
33
|
+
declare const USE_CACHED_LANG: InjectionToken<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Cache mechanism type
|
|
36
|
+
*/
|
|
37
|
+
declare const CACHE_MECHANISM: InjectionToken<CacheMechanism>;
|
|
38
|
+
/**
|
|
39
|
+
* Cache name
|
|
40
|
+
*/
|
|
41
|
+
declare const CACHE_NAME: InjectionToken<string>;
|
|
42
|
+
/**
|
|
43
|
+
* Cookie cache format
|
|
44
|
+
*/
|
|
45
|
+
declare const COOKIE_FORMAT: InjectionToken<boolean>;
|
|
46
|
+
/**
|
|
47
|
+
* Cookie cache format
|
|
48
|
+
*/
|
|
49
|
+
declare const INITIAL_NAVIGATION: InjectionToken<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* Type for default language function
|
|
52
|
+
* Used to override basic behaviour
|
|
53
|
+
*/
|
|
54
|
+
type DefaultLanguageFunction = (languages: string[], cachedLang?: string, browserLang?: string) => string;
|
|
55
|
+
/**
|
|
56
|
+
* Function for calculating default language
|
|
57
|
+
*/
|
|
58
|
+
declare const DEFAULT_LANG_FUNCTION: InjectionToken<DefaultLanguageFunction>;
|
|
59
|
+
/**
|
|
60
|
+
* Boolean to indicate whether prefix should be set for single language scenarios
|
|
61
|
+
*/
|
|
62
|
+
declare const ALWAYS_SET_PREFIX: InjectionToken<boolean>;
|
|
63
|
+
/**
|
|
64
|
+
* Config interface for LocalizeRouter
|
|
65
|
+
*/
|
|
66
|
+
interface LocalizeRouterConfig {
|
|
67
|
+
parser?: Provider;
|
|
68
|
+
useCachedLang?: boolean;
|
|
69
|
+
cacheMechanism?: CacheMechanism;
|
|
70
|
+
cacheName?: string;
|
|
71
|
+
defaultLangFunction?: DefaultLanguageFunction;
|
|
72
|
+
alwaysSetPrefix?: boolean;
|
|
73
|
+
cookieFormat?: string;
|
|
74
|
+
initialNavigation?: boolean;
|
|
75
|
+
}
|
|
76
|
+
declare class LocalizeRouterSettings implements LocalizeRouterConfig {
|
|
77
|
+
useCachedLang: boolean;
|
|
78
|
+
alwaysSetPrefix: boolean;
|
|
79
|
+
cacheName: string;
|
|
80
|
+
cookieFormat: string;
|
|
81
|
+
initialNavigation: boolean;
|
|
82
|
+
cacheMechanism: CacheMechanism;
|
|
83
|
+
defaultLangFunction: DefaultLanguageFunction;
|
|
84
|
+
/**
|
|
85
|
+
* Settings for localize router
|
|
86
|
+
*/
|
|
87
|
+
constructor(useCachedLang?: boolean, alwaysSetPrefix?: boolean, cacheMechanism?: CacheMechanism, cacheName?: string, defaultLangFunction?: any, cookieFormat?: string, initialNavigation?: boolean);
|
|
88
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeRouterSettings, never>;
|
|
89
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<LocalizeRouterSettings>;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Abstract class for parsing localization
|
|
94
|
+
*/
|
|
95
|
+
declare abstract class LocalizeParser {
|
|
96
|
+
private translate;
|
|
97
|
+
private location;
|
|
98
|
+
private settings;
|
|
99
|
+
locales: Array<string>;
|
|
100
|
+
currentLang: string;
|
|
101
|
+
routes: Routes;
|
|
102
|
+
defaultLang: string;
|
|
103
|
+
protected prefix: string;
|
|
104
|
+
protected escapePrefix: string;
|
|
105
|
+
private _translationObject;
|
|
106
|
+
private _wildcardRoute;
|
|
107
|
+
private _languageRoute;
|
|
108
|
+
/**
|
|
109
|
+
* Loader constructor
|
|
110
|
+
*/
|
|
111
|
+
constructor(translate: TranslateService, location: Location, settings: LocalizeRouterSettings);
|
|
112
|
+
/**
|
|
113
|
+
* Load routes and fetch necessary data
|
|
114
|
+
*/
|
|
115
|
+
abstract load(routes: Routes): Promise<any>;
|
|
116
|
+
/**
|
|
117
|
+
* Prepare routes to be fully usable by ngx-translate-router
|
|
118
|
+
* @param routes
|
|
119
|
+
*/
|
|
120
|
+
/**
|
|
121
|
+
* Initialize language and routes
|
|
122
|
+
*/
|
|
123
|
+
protected init(routes: Routes): Promise<any>;
|
|
124
|
+
initChildRoutes(routes: Routes): Routes;
|
|
125
|
+
/**
|
|
126
|
+
* Translate routes to selected language
|
|
127
|
+
*/
|
|
128
|
+
translateRoutes(language: string): Observable<any>;
|
|
129
|
+
/**
|
|
130
|
+
* Translate the route node and recursively call for all it's children
|
|
131
|
+
*/
|
|
132
|
+
private _translateRouteTree;
|
|
133
|
+
/**
|
|
134
|
+
* Translate property
|
|
135
|
+
* If first time translation then add original to route data object
|
|
136
|
+
*/
|
|
137
|
+
private _translateProperty;
|
|
138
|
+
get urlPrefix(): string;
|
|
139
|
+
/**
|
|
140
|
+
* Add current lang as prefix to given url.
|
|
141
|
+
*/
|
|
142
|
+
addPrefixToUrl(url: string): string;
|
|
143
|
+
/**
|
|
144
|
+
* Translate route and return observable
|
|
145
|
+
*/
|
|
146
|
+
translateRoute(path: string): string;
|
|
147
|
+
/**
|
|
148
|
+
* Get language from url
|
|
149
|
+
*/
|
|
150
|
+
getLocationLang(url?: string): string;
|
|
151
|
+
/**
|
|
152
|
+
* Get user's language set in the browser
|
|
153
|
+
*/
|
|
154
|
+
private _getBrowserLang;
|
|
155
|
+
/**
|
|
156
|
+
* Get language from local storage or cookie
|
|
157
|
+
*/
|
|
158
|
+
private get _cachedLang();
|
|
159
|
+
/**
|
|
160
|
+
* Save language to local storage or cookie
|
|
161
|
+
*/
|
|
162
|
+
private set _cachedLang(value);
|
|
163
|
+
/**
|
|
164
|
+
* Cache value to local storage
|
|
165
|
+
*/
|
|
166
|
+
private _cacheWithLocalStorage;
|
|
167
|
+
/**
|
|
168
|
+
* Cache value to session storage
|
|
169
|
+
*/
|
|
170
|
+
private _cacheWithSessionStorage;
|
|
171
|
+
/**
|
|
172
|
+
* Cache value via cookies
|
|
173
|
+
*/
|
|
174
|
+
private _cacheWithCookies;
|
|
175
|
+
/**
|
|
176
|
+
* Check if value exists in locales list
|
|
177
|
+
*/
|
|
178
|
+
private _returnIfInLocales;
|
|
179
|
+
/**
|
|
180
|
+
* Get translated value
|
|
181
|
+
*/
|
|
182
|
+
private translateText;
|
|
183
|
+
/**
|
|
184
|
+
* Strategy to choose between new or old queryParams
|
|
185
|
+
* @param newExtras extras that containes new QueryParams
|
|
186
|
+
* @param currentQueryParams current query params
|
|
187
|
+
*/
|
|
188
|
+
chooseQueryParams(newExtras: NavigationExtras, currentQueryParams: Params): Params;
|
|
189
|
+
/**
|
|
190
|
+
* Format query params from object to string.
|
|
191
|
+
* Exemple of result: `param=value¶m2=value2`
|
|
192
|
+
* @param params query params object
|
|
193
|
+
*/
|
|
194
|
+
formatQueryParams(params: Params): string;
|
|
195
|
+
/**
|
|
196
|
+
* Get translation key prefix from config
|
|
197
|
+
*/
|
|
198
|
+
getPrefix(): string;
|
|
199
|
+
/**
|
|
200
|
+
* Get escape translation prefix from config
|
|
201
|
+
*/
|
|
202
|
+
getEscapePrefix(): string;
|
|
203
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeParser, never>;
|
|
204
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<LocalizeParser>;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Manually set configuration
|
|
208
|
+
*/
|
|
209
|
+
declare class ManualParserLoader extends LocalizeParser {
|
|
210
|
+
/**
|
|
211
|
+
* CTOR
|
|
212
|
+
*/
|
|
213
|
+
constructor(translate: TranslateService, location: Location, settings: LocalizeRouterSettings, locales?: string[], prefix?: string, escapePrefix?: string);
|
|
214
|
+
/**
|
|
215
|
+
* Initialize or append routes
|
|
216
|
+
*/
|
|
217
|
+
load(routes: Routes): Promise<any>;
|
|
218
|
+
}
|
|
219
|
+
declare class DummyLocalizeParser extends LocalizeParser {
|
|
220
|
+
load(routes: Routes): Promise<any>;
|
|
221
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DummyLocalizeParser, never>;
|
|
222
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DummyLocalizeParser>;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Localization service
|
|
227
|
+
* modifyRoutes
|
|
228
|
+
*/
|
|
229
|
+
declare class LocalizeRouterService {
|
|
230
|
+
parser: LocalizeParser;
|
|
231
|
+
settings: LocalizeRouterSettings;
|
|
232
|
+
private router;
|
|
233
|
+
private route;
|
|
234
|
+
routerEvents: Subject<string>;
|
|
235
|
+
hooks: {
|
|
236
|
+
initialized: Observable<boolean>;
|
|
237
|
+
};
|
|
238
|
+
private latestUrl;
|
|
239
|
+
private lastExtras?;
|
|
240
|
+
/**
|
|
241
|
+
* CTOR
|
|
242
|
+
*/
|
|
243
|
+
constructor(parser: LocalizeParser, settings: LocalizeRouterSettings, router: Router, route: ActivatedRoute);
|
|
244
|
+
/**
|
|
245
|
+
* Start up the service
|
|
246
|
+
*/
|
|
247
|
+
init(): void;
|
|
248
|
+
/**
|
|
249
|
+
* Change language and navigate to translated route
|
|
250
|
+
*/
|
|
251
|
+
changeLanguage(lang: string, extras?: NavigationExtras, useNavigateMethod?: boolean): void;
|
|
252
|
+
/**
|
|
253
|
+
* Traverses through the tree to assemble new translated url
|
|
254
|
+
*/
|
|
255
|
+
private traverseRouteSnapshot;
|
|
256
|
+
/**
|
|
257
|
+
* Build URL from segments and snapshot (for params)
|
|
258
|
+
*/
|
|
259
|
+
private buildUrlFromSegments;
|
|
260
|
+
/**
|
|
261
|
+
* Extracts new segment value based on routeConfig and url
|
|
262
|
+
*/
|
|
263
|
+
private parseSegmentValue;
|
|
264
|
+
private parseSegmentValueMatcher;
|
|
265
|
+
/**
|
|
266
|
+
* Translate route to current language
|
|
267
|
+
* If new language is explicitly provided then replace language part in url with new language
|
|
268
|
+
*/
|
|
269
|
+
translateRoute(path: string | any[]): string | any[];
|
|
270
|
+
/**
|
|
271
|
+
* Event handler to react on route change
|
|
272
|
+
*/
|
|
273
|
+
private _routeChanged;
|
|
274
|
+
/**
|
|
275
|
+
* Drop the current Navigation
|
|
276
|
+
*/
|
|
277
|
+
private cancelCurrentNavigation;
|
|
278
|
+
/**
|
|
279
|
+
* Apply config to Angular RouterModule
|
|
280
|
+
* @param config routes to apply
|
|
281
|
+
*/
|
|
282
|
+
private applyConfigToRouter;
|
|
283
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeRouterService, never>;
|
|
284
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<LocalizeRouterService>;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
declare class LocalizeRouterPipe implements PipeTransform, OnDestroy {
|
|
288
|
+
private localize;
|
|
289
|
+
private _ref;
|
|
290
|
+
private value;
|
|
291
|
+
private lastKey;
|
|
292
|
+
private lastLanguage;
|
|
293
|
+
private subscription;
|
|
294
|
+
/**
|
|
295
|
+
* CTOR
|
|
296
|
+
*/
|
|
297
|
+
constructor(localize: LocalizeRouterService, _ref: ChangeDetectorRef);
|
|
298
|
+
ngOnDestroy(): void;
|
|
299
|
+
/**
|
|
300
|
+
* Transform current url to localized one
|
|
301
|
+
*/
|
|
302
|
+
transform(query: string | any[]): string | any[];
|
|
303
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeRouterPipe, never>;
|
|
304
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<LocalizeRouterPipe, "localize", true>;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
declare class ParserInitializer {
|
|
308
|
+
private injector;
|
|
309
|
+
parser: LocalizeParser;
|
|
310
|
+
routes: Routes;
|
|
311
|
+
/**
|
|
312
|
+
* CTOR
|
|
313
|
+
*/
|
|
314
|
+
constructor(injector: Injector);
|
|
315
|
+
appInitializer(): Promise<any>;
|
|
316
|
+
generateInitializer(parser: LocalizeParser, routes: Routes[]): () => Promise<any>;
|
|
317
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ParserInitializer, never>;
|
|
318
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ParserInitializer>;
|
|
319
|
+
}
|
|
320
|
+
declare function getAppInitializer(p: ParserInitializer, parser: LocalizeParser, routes: Routes[]): any;
|
|
321
|
+
declare class LocalizeRouterModule {
|
|
322
|
+
static forRoot(routes: Routes, config?: LocalizeRouterConfig): ModuleWithProviders<LocalizeRouterModule>;
|
|
323
|
+
static forChild(routes: Routes): ModuleWithProviders<LocalizeRouterModule>;
|
|
324
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeRouterModule, never>;
|
|
325
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<LocalizeRouterModule, never, [typeof i1.CommonModule, typeof i2.RouterModule, typeof i3.TranslateModule, typeof LocalizeRouterPipe], [typeof LocalizeRouterPipe]>;
|
|
326
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<LocalizeRouterModule>;
|
|
327
|
+
}
|
|
328
|
+
declare function provideForRootGuard(localizeRouterModule: LocalizeRouterModule): string;
|
|
329
|
+
declare function withLocalizeRouter(routes: Routes, config?: LocalizeRouterConfig): RouterConfigurationFeature;
|
|
330
|
+
|
|
331
|
+
declare class LocalizeNgModuleFactory extends NgModuleFactory<any> {
|
|
332
|
+
moduleType: Type<any>;
|
|
333
|
+
constructor(moduleType: Type<any>);
|
|
334
|
+
create: (parentInjector: Injector) => NgModuleRef<any>;
|
|
335
|
+
}
|
|
336
|
+
declare function translateModule(moduleType: Type<any>): LocalizeNgModuleFactory;
|
|
337
|
+
|
|
338
|
+
declare class GilsdavReuseStrategy implements RouteReuseStrategy {
|
|
339
|
+
constructor();
|
|
340
|
+
shouldDetach(route: ActivatedRouteSnapshot): boolean;
|
|
341
|
+
store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void;
|
|
342
|
+
shouldAttach(route: ActivatedRouteSnapshot): boolean;
|
|
343
|
+
retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle;
|
|
344
|
+
shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean;
|
|
345
|
+
private getKey;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
declare class LocalizedRouter extends Router {
|
|
349
|
+
private platformId;
|
|
350
|
+
private compiler;
|
|
351
|
+
private localize;
|
|
352
|
+
private childrenLoaders;
|
|
353
|
+
onLoadStartListener?: (r: Route) => void;
|
|
354
|
+
onLoadEndListener?: (r: Route) => void;
|
|
355
|
+
constructor();
|
|
356
|
+
customLoadChildren(route: Route, compiler: Compiler, parentInjector: Injector, onLoadEndListener?: (r: Route) => void): Promise<LoadedRouterConfig>;
|
|
357
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LocalizedRouter, never>;
|
|
358
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<LocalizedRouter>;
|
|
359
|
+
}
|
|
360
|
+
declare function standardizeConfig(r: Route): Route;
|
|
361
|
+
interface LoadedRouterConfig {
|
|
362
|
+
routes: Route[];
|
|
363
|
+
injector: EnvironmentInjector | undefined;
|
|
364
|
+
factory?: NgModuleFactory<unknown>;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* see https://github.com/angular/angular/blob/main/packages/router/src/utils/collection.ts#L88
|
|
368
|
+
* @param value
|
|
369
|
+
* @returns
|
|
370
|
+
*/
|
|
371
|
+
declare function wrapIntoPromise<T>(value: T | Promise<T> | Observable<T>): Promise<T>;
|
|
372
|
+
|
|
373
|
+
type LocalizedMatcherUrlSegment = UrlSegment & {
|
|
374
|
+
localizedParamName: string;
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
export { ALWAYS_SET_PREFIX, CACHE_MECHANISM, CACHE_NAME, COOKIE_FORMAT, CacheMechanism, DEFAULT_LANG_FUNCTION, DummyLocalizeParser, GilsdavReuseStrategy, INITIAL_NAVIGATION, LOCALIZE_ROUTER_FORROOT_GUARD, LocalizeNgModuleFactory, LocalizeParser, LocalizeRouterModule, LocalizeRouterPipe, LocalizeRouterService, LocalizeRouterSettings, LocalizedRouter, ManualParserLoader, ParserInitializer, RAW_ROUTES, USE_CACHED_LANG, getAppInitializer, provideForRootGuard, standardizeConfig, translateModule, withLocalizeRouter, wrapIntoPromise };
|
|
378
|
+
export type { DefaultLanguageFunction, LoadedRouterConfig, LocalizeRouterConfig, LocalizedMatcherUrlSegment };
|