ngx-localized-router 0.0.1

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.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # ngx-localized-router
2
+
3
+ tbd...
@@ -0,0 +1,146 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, inject, signal, Injectable, makeEnvironmentProviders, Pipe } from '@angular/core';
3
+ import { Router, NavigationEnd, NavigationStart } from '@angular/router';
4
+ import { Subject, distinctUntilChanged, filter, tap, map } from 'rxjs';
5
+
6
+ const NgxLocalizedRouterOptionsToken = new InjectionToken('NgxLocalizedRouterOptionsToken');
7
+
8
+ const ngxLocalizedRouterLangSegmentName = 'ngx-localized-route-lang';
9
+
10
+ class NgxLocalizedRouterService {
11
+ _initialConfig = inject(NgxLocalizedRouterOptionsToken);
12
+ _router = inject(Router);
13
+ _initialLanguageResolved = false;
14
+ _defaultLanguage = signal(this._initialConfig.defaultLanguage, ...(ngDevMode ? [{ debugName: "_defaultLanguage" }] : []));
15
+ _supportedLanguages = signal(this._initialConfig.languages || [], ...(ngDevMode ? [{ debugName: "_supportedLanguages" }] : []));
16
+ _routeLanguage = signal(this._defaultLanguage(), ...(ngDevMode ? [{ debugName: "_routeLanguage" }] : []));
17
+ _routeLanguageChanged = new Subject();
18
+ defaultLanguage = this._defaultLanguage.asReadonly();
19
+ supportedLanguages = this._supportedLanguages.asReadonly();
20
+ routeLanguage = this._routeLanguage.asReadonly();
21
+ routeLanguageChanged = this._routeLanguageChanged
22
+ .asObservable()
23
+ .pipe(distinctUntilChanged());
24
+ constructor() {
25
+ this._handleNavigation();
26
+ }
27
+ setLanguages(languages) {
28
+ this._supportedLanguages.set(Array.from(new Set(languages)));
29
+ }
30
+ addLanguages(languages) {
31
+ this.setLanguages(Array.from(new Set([...this._supportedLanguages(), ...languages])));
32
+ }
33
+ localizeUrl(url, language) {
34
+ let path = Array.isArray(url) ? url.join('/') : url;
35
+ if (!path.startsWith('/')) {
36
+ path = '/' + path;
37
+ }
38
+ const segments = path.split('/').filter(Boolean);
39
+ if (segments.length && this.supportedLanguages().includes(segments[0])) {
40
+ segments.shift();
41
+ }
42
+ if (language !== this.defaultLanguage()) {
43
+ segments.unshift(language);
44
+ }
45
+ return '/' + segments.join('/');
46
+ }
47
+ _handleNavigation() {
48
+ this._router.events
49
+ .pipe(filter((event) => event instanceof NavigationEnd || event instanceof NavigationStart), tap((event) => {
50
+ if (event instanceof NavigationStart &&
51
+ event.url === `/${this.defaultLanguage()}`) {
52
+ void this._router.navigateByUrl('/');
53
+ }
54
+ }), filter((event) => event instanceof NavigationEnd), map(() => {
55
+ let route = this._router.routerState.snapshot.root;
56
+ while (route.firstChild) {
57
+ route = route.firstChild;
58
+ }
59
+ return (route.paramMap.get(ngxLocalizedRouterLangSegmentName) ||
60
+ this.defaultLanguage());
61
+ }), tap((language) => {
62
+ this._routeLanguage.set(language);
63
+ this._routeLanguageChanged.next(language);
64
+ if (!this._initialLanguageResolved &&
65
+ this._initialConfig.languageResolved) {
66
+ this._initialConfig.languageResolved(language);
67
+ this._initialLanguageResolved = true;
68
+ }
69
+ }))
70
+ .subscribe();
71
+ }
72
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NgxLocalizedRouterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
73
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NgxLocalizedRouterService });
74
+ }
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NgxLocalizedRouterService, decorators: [{
76
+ type: Injectable
77
+ }], ctorParameters: () => [] });
78
+
79
+ const localizedRouteMatcher = (route, segments) => {
80
+ const ngxLocalizedRouterService = inject(NgxLocalizedRouterService);
81
+ if (route.path === `:${ngxLocalizedRouterLangSegmentName}` &&
82
+ !ngxLocalizedRouterService.supportedLanguages().includes(segments[0]?.path)) {
83
+ return false;
84
+ }
85
+ if (ngxLocalizedRouterService
86
+ .supportedLanguages()
87
+ .includes(segments[0]?.path) &&
88
+ route.path !== `:${ngxLocalizedRouterLangSegmentName}`) {
89
+ return false;
90
+ }
91
+ return true;
92
+ };
93
+
94
+ const patchRoutes = (routes, depth = 0) => routes
95
+ .map((route) => {
96
+ const patchedRoutes = [
97
+ {
98
+ ...route,
99
+ canMatch: [localizedRouteMatcher, ...(route.canMatch || [])],
100
+ children: patchRoutes(route.children || [], depth + 1),
101
+ },
102
+ ];
103
+ if (!depth) {
104
+ patchedRoutes.push({
105
+ ...route,
106
+ path: [`:${ngxLocalizedRouterLangSegmentName}`, route.path]
107
+ .filter(Boolean)
108
+ .join('/'),
109
+ canMatch: [localizedRouteMatcher, ...(route.canMatch || [])],
110
+ children: patchRoutes(route.children || [], depth + 1),
111
+ });
112
+ }
113
+ return patchedRoutes;
114
+ })
115
+ .flat();
116
+ const localizeRoutes = (routes) => patchRoutes(routes);
117
+
118
+ const provideNgxLocalizedRouter = (options) => makeEnvironmentProviders([
119
+ {
120
+ provide: NgxLocalizedRouterOptionsToken,
121
+ useValue: options,
122
+ },
123
+ NgxLocalizedRouterService,
124
+ ]);
125
+
126
+ class LocalizeRoutePipe {
127
+ _ngxLocalizedRouterService = inject(NgxLocalizedRouterService);
128
+ transform(url, language) {
129
+ return this._ngxLocalizedRouterService.localizeUrl(url, language);
130
+ }
131
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LocalizeRoutePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
132
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: LocalizeRoutePipe, isStandalone: true, name: "localizeRoute" });
133
+ }
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: LocalizeRoutePipe, decorators: [{
135
+ type: Pipe,
136
+ args: [{
137
+ name: 'localizeRoute',
138
+ }]
139
+ }] });
140
+
141
+ /**
142
+ * Generated bundle index. Do not edit.
143
+ */
144
+
145
+ export { LocalizeRoutePipe, NgxLocalizedRouterService, localizeRoutes, provideNgxLocalizedRouter };
146
+ //# sourceMappingURL=ngx-localized-router.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-localized-router.mjs","sources":["../../../../packages/ngx-localized-router/src/lib/ngx-localized-router-options-token.ts","../../../../packages/ngx-localized-router/src/lib/ngx-localized-router-lang-segment-name.ts","../../../../packages/ngx-localized-router/src/lib/ngx-localized-router.service.ts","../../../../packages/ngx-localized-router/src/lib/localized-route-matcher.ts","../../../../packages/ngx-localized-router/src/lib/localize-routes.ts","../../../../packages/ngx-localized-router/src/lib/ngx-localized-router.provider.ts","../../../../packages/ngx-localized-router/src/lib/localize-route.pipe.ts","../../../../packages/ngx-localized-router/src/ngx-localized-router.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { NgxLocalizedRouterOptions } from './ngx-localized-router-options';\n\nexport const NgxLocalizedRouterOptionsToken =\n new InjectionToken<NgxLocalizedRouterOptions>(\n 'NgxLocalizedRouterOptionsToken',\n );\n","export const ngxLocalizedRouterLangSegmentName = 'ngx-localized-route-lang';\n","import { inject, Injectable, signal } from '@angular/core';\nimport { NavigationEnd, NavigationStart, Router } from '@angular/router';\n\nimport { distinctUntilChanged, filter, map, Subject, tap } from 'rxjs';\n\nimport { NgxLocalizedRouterOptionsToken } from './ngx-localized-router-options-token';\nimport { ngxLocalizedRouterLangSegmentName } from './ngx-localized-router-lang-segment-name';\n\n@Injectable()\nexport class NgxLocalizedRouterService {\n private _initialConfig = inject(NgxLocalizedRouterOptionsToken);\n private _router = inject(Router);\n\n private _initialLanguageResolved = false;\n\n private _defaultLanguage = signal<string>(\n this._initialConfig.defaultLanguage,\n );\n private _supportedLanguages = signal<string[]>(\n this._initialConfig.languages || [],\n );\n private _routeLanguage = signal<string>(this._defaultLanguage());\n\n private _routeLanguageChanged = new Subject<string>();\n\n readonly defaultLanguage = this._defaultLanguage.asReadonly();\n readonly supportedLanguages = this._supportedLanguages.asReadonly();\n readonly routeLanguage = this._routeLanguage.asReadonly();\n\n readonly routeLanguageChanged = this._routeLanguageChanged\n .asObservable()\n .pipe(distinctUntilChanged());\n\n constructor() {\n this._handleNavigation();\n }\n\n setLanguages(languages: string[]): void {\n this._supportedLanguages.set(Array.from(new Set(languages)));\n }\n\n addLanguages(languages: string): void {\n this.setLanguages(\n Array.from(new Set([...this._supportedLanguages(), ...languages])),\n );\n }\n\n localizeUrl(url: string | string[], language: string): string {\n let path = Array.isArray(url) ? url.join('/') : url;\n\n if (!path.startsWith('/')) {\n path = '/' + path;\n }\n\n const segments = path.split('/').filter(Boolean);\n\n if (segments.length && this.supportedLanguages().includes(segments[0])) {\n segments.shift();\n }\n\n if (language !== this.defaultLanguage()) {\n segments.unshift(language);\n }\n\n return '/' + segments.join('/');\n }\n\n private _handleNavigation(): void {\n this._router.events\n .pipe(\n filter(\n (event) =>\n event instanceof NavigationEnd || event instanceof NavigationStart,\n ),\n tap((event) => {\n if (\n event instanceof NavigationStart &&\n event.url === `/${this.defaultLanguage()}`\n ) {\n void this._router.navigateByUrl('/');\n }\n }),\n filter((event) => event instanceof NavigationEnd),\n map(() => {\n let route = this._router.routerState.snapshot.root;\n\n while (route.firstChild) {\n route = route.firstChild;\n }\n return (\n route.paramMap.get(ngxLocalizedRouterLangSegmentName) ||\n this.defaultLanguage()\n );\n }),\n tap((language) => {\n this._routeLanguage.set(language);\n this._routeLanguageChanged.next(language);\n\n if (\n !this._initialLanguageResolved &&\n this._initialConfig.languageResolved\n ) {\n this._initialConfig.languageResolved(language);\n this._initialLanguageResolved = true;\n }\n }),\n )\n .subscribe();\n }\n}\n","import { CanMatchFn, Route, UrlSegment } from '@angular/router';\nimport { inject } from '@angular/core';\n\nimport { NgxLocalizedRouterService } from './ngx-localized-router.service';\nimport { ngxLocalizedRouterLangSegmentName } from './ngx-localized-router-lang-segment-name';\n\nexport const localizedRouteMatcher: CanMatchFn = (\n route: Route,\n segments: UrlSegment[],\n): boolean => {\n const ngxLocalizedRouterService = inject(NgxLocalizedRouterService);\n\n if (\n route.path === `:${ngxLocalizedRouterLangSegmentName}` &&\n !ngxLocalizedRouterService.supportedLanguages().includes(segments[0]?.path)\n ) {\n return false;\n }\n\n if (\n ngxLocalizedRouterService\n .supportedLanguages()\n .includes(segments[0]?.path) &&\n route.path !== `:${ngxLocalizedRouterLangSegmentName}`\n ) {\n return false;\n }\n\n return true;\n};\n","import { Routes } from '@angular/router';\n\nimport { localizedRouteMatcher } from './localized-route-matcher';\nimport { ngxLocalizedRouterLangSegmentName } from './ngx-localized-router-lang-segment-name';\n\nconst patchRoutes = (routes: Routes, depth = 0): Routes =>\n routes\n .map((route) => {\n const patchedRoutes = [\n {\n ...route,\n canMatch: [localizedRouteMatcher, ...(route.canMatch || [])],\n children: patchRoutes(route.children || [], depth + 1),\n },\n ];\n\n if (!depth) {\n patchedRoutes.push({\n ...route,\n path: [`:${ngxLocalizedRouterLangSegmentName}`, route.path]\n .filter(Boolean)\n .join('/'),\n canMatch: [localizedRouteMatcher, ...(route.canMatch || [])],\n children: patchRoutes(route.children || [], depth + 1),\n });\n }\n\n return patchedRoutes;\n })\n .flat();\n\nexport const localizeRoutes = (routes: Routes): Routes => patchRoutes(routes);\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { NgxLocalizedRouterOptions } from './ngx-localized-router-options';\nimport { NgxLocalizedRouterService } from './ngx-localized-router.service';\nimport { NgxLocalizedRouterOptionsToken } from './ngx-localized-router-options-token';\n\nexport const provideNgxLocalizedRouter = (\n options: NgxLocalizedRouterOptions,\n): EnvironmentProviders =>\n makeEnvironmentProviders([\n {\n provide: NgxLocalizedRouterOptionsToken,\n useValue: options,\n },\n NgxLocalizedRouterService,\n ]);\n","import { inject, Pipe, PipeTransform } from '@angular/core';\n\nimport { NgxLocalizedRouterService } from './ngx-localized-router.service';\n\n@Pipe({\n name: 'localizeRoute',\n})\nexport class LocalizeRoutePipe implements PipeTransform {\n private _ngxLocalizedRouterService = inject(NgxLocalizedRouterService);\n\n transform(url: string | string[], language: string): string {\n return this._ngxLocalizedRouterService.localizeUrl(url, language);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "ngx-localized-router",
3
+ "description": "Angular library that adds multilingual support to the Angular Router by translating route paths based on the active language",
4
+ "keywords": [
5
+ "Angular",
6
+ "Localization",
7
+ "Router",
8
+ "Translate router"
9
+ ],
10
+ "version": "0.0.1",
11
+ "license": "MIT",
12
+ "peerDependencies": {
13
+ "@angular/common": "^21.0.0",
14
+ "@angular/core": "^21.0.0"
15
+ },
16
+ "bugs": {
17
+ "url": "https://github.com/odomanskyi/ngx-localized-router/issues"
18
+ },
19
+ "repository": "https://github.com/odomanskyi/ngx-localized-router/tree/main/packages/ngx-localized-router",
20
+ "sideEffects": false,
21
+ "module": "fesm2022/ngx-localized-router.mjs",
22
+ "typings": "types/ngx-localized-router.d.ts",
23
+ "exports": {
24
+ "./package.json": {
25
+ "default": "./package.json"
26
+ },
27
+ ".": {
28
+ "types": "./types/ngx-localized-router.d.ts",
29
+ "default": "./fesm2022/ngx-localized-router.mjs"
30
+ }
31
+ },
32
+ "dependencies": {
33
+ "tslib": "^2.3.0"
34
+ }
35
+ }
@@ -0,0 +1,45 @@
1
+ import { Routes } from '@angular/router';
2
+ import * as i0 from '@angular/core';
3
+ import { EnvironmentProviders, PipeTransform } from '@angular/core';
4
+ import * as rxjs from 'rxjs';
5
+
6
+ interface NgxLocalizedRouterOptions {
7
+ defaultLanguage: string;
8
+ languages: string[];
9
+ languageResolved?: (language: string) => void;
10
+ }
11
+
12
+ declare const localizeRoutes: (routes: Routes) => Routes;
13
+
14
+ declare const provideNgxLocalizedRouter: (options: NgxLocalizedRouterOptions) => EnvironmentProviders;
15
+
16
+ declare class NgxLocalizedRouterService {
17
+ private _initialConfig;
18
+ private _router;
19
+ private _initialLanguageResolved;
20
+ private _defaultLanguage;
21
+ private _supportedLanguages;
22
+ private _routeLanguage;
23
+ private _routeLanguageChanged;
24
+ readonly defaultLanguage: i0.Signal<string>;
25
+ readonly supportedLanguages: i0.Signal<string[]>;
26
+ readonly routeLanguage: i0.Signal<string>;
27
+ readonly routeLanguageChanged: rxjs.Observable<string>;
28
+ constructor();
29
+ setLanguages(languages: string[]): void;
30
+ addLanguages(languages: string): void;
31
+ localizeUrl(url: string | string[], language: string): string;
32
+ private _handleNavigation;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgxLocalizedRouterService, never>;
34
+ static ɵprov: i0.ɵɵInjectableDeclaration<NgxLocalizedRouterService>;
35
+ }
36
+
37
+ declare class LocalizeRoutePipe implements PipeTransform {
38
+ private _ngxLocalizedRouterService;
39
+ transform(url: string | string[], language: string): string;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeRoutePipe, never>;
41
+ static ɵpipe: i0.ɵɵPipeDeclaration<LocalizeRoutePipe, "localizeRoute", true>;
42
+ }
43
+
44
+ export { LocalizeRoutePipe, NgxLocalizedRouterService, localizeRoutes, provideNgxLocalizedRouter };
45
+ export type { NgxLocalizedRouterOptions };