@bespunky/angular-zen
Version:
The Angular tools you always wished were there.
68 lines • 9.45 kB
JavaScript
import { Inject, Injectable } from '@angular/core';
import { UrlReflectionService } from '@bespunky/angular-zen/router-x';
import { UrlLocalization } from '../config/url-localization-config';
import { UrlLocalizer } from '../localizers/url-localizer';
import * as i0 from "@angular/core";
import * as i1 from "@bespunky/angular-zen/router-x";
import * as i2 from "../localizers/url-localizer";
/**
* Provides tools for localization and delocalization of the currently navigated url taking into
* account the url localization configuration provided when importing the language integration module.
*
* @export
* @class UrlLocalizationService
*/
export class UrlLocalizationService {
/**
* Creates an instance of UrlLocalizationService.
*
* @param {UrlLocalizationConfig} config The url localization configuration provided for the `UrlLocalization` token.
* @param {UrlReflectionService} urlReflection The url reflection service.
* @param {UrlLocalizer} localizer The url localizer which will actually do the localization work.
* The instance and implementation depend on the strategy configured for url localization when importing the language integration module.
*/
constructor(config, urlReflection, localizer) {
this.config = config;
this.urlReflection = urlReflection;
this.localizer = localizer;
}
/**
* Localizes the currently navigated url using the configured localization strategy and forces https if needed.
*
* @param {string} lang The langugae to localize the currently navigated url to.
* @returns {string} The localized currently navigated url.
*/
localize(lang) {
return this.replaceHttpIfRequired(this.localizer.localize(lang));
}
/**
* Delocalizes the currently navigated url using the configured localization strategy and forces https if needed.
*
* @returns {string} The delocalized currently navigated url.
*/
delocalize() {
return this.replaceHttpIfRequired(this.localizer.delocalize());
}
/**
* Generates a localized version of the currently navigate url for each of the specified languages using the configured localization strategy.
*
* @param {string[]} langs The languages for which to generate the localized urls.
* @returns {{ [lang: string]: string }[]} An array of { [lang]: url } containing an object for each language and its corresponding localized url.
*/
generateLocalizedUrls(langs) {
return langs.map(lang => ({ [lang]: this.localizer.localize(lang) }));
}
replaceHttpIfRequired(url) {
return this.config?.forceHttps ? this.urlReflection.forceHttps(url) : url;
}
}
UrlLocalizationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UrlLocalizationService, deps: [{ token: UrlLocalization }, { token: i1.UrlReflectionService }, { token: i2.UrlLocalizer }], target: i0.ɵɵFactoryTarget.Injectable });
UrlLocalizationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UrlLocalizationService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UrlLocalizationService, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [UrlLocalization]
}] }, { type: i1.UrlReflectionService }, { type: i2.UrlLocalizer }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLWxvY2FsaXphdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXplbi9sYW5ndWFnZS9zcmMvdXJsLWxvY2FsaXphdGlvbi9zZXJ2aWNlcy91cmwtbG9jYWxpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFvQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxlQUFlLEVBQXlCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0YsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSw2QkFBNkIsQ0FBQzs7OztBQUVyRjs7Ozs7O0dBTUc7QUFFSCxNQUFNLE9BQU8sc0JBQXNCO0lBRS9COzs7Ozs7O09BT0c7SUFDSCxZQUM2QyxNQUFvQyxFQUNwQyxhQUFtQyxFQUNuQyxTQUEyQjtRQUYzQixXQUFNLEdBQU4sTUFBTSxDQUE4QjtRQUNwQyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDbkMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFDcEUsQ0FBQztJQUVMOzs7OztPQUtHO0lBQ0ksUUFBUSxDQUFDLElBQVk7UUFFeEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFVBQVU7UUFFYixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0kscUJBQXFCLENBQUMsS0FBZTtRQUV4QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8scUJBQXFCLENBQUMsR0FBVztRQUVyQyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzlFLENBQUM7O29IQW5EUSxzQkFBc0Isa0JBV25CLGVBQWU7d0hBWGxCLHNCQUFzQixjQURULE1BQU07NEZBQ25CLHNCQUFzQjtrQkFEbEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQVl6QixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVXJsUmVmbGVjdGlvblNlcnZpY2UgICAgICAgICAgICAgICAgICAgfSBmcm9tICdAYmVzcHVua3kvYW5ndWxhci16ZW4vcm91dGVyLXgnO1xuaW1wb3J0IHsgVXJsTG9jYWxpemF0aW9uLCBVcmxMb2NhbGl6YXRpb25Db25maWcgfSBmcm9tICcuLi9jb25maWcvdXJsLWxvY2FsaXphdGlvbi1jb25maWcnO1xuaW1wb3J0IHsgVXJsTG9jYWxpemVyICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmcm9tICcuLi9sb2NhbGl6ZXJzL3VybC1sb2NhbGl6ZXInO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRvb2xzIGZvciBsb2NhbGl6YXRpb24gYW5kIGRlbG9jYWxpemF0aW9uIG9mIHRoZSBjdXJyZW50bHkgbmF2aWdhdGVkIHVybCB0YWtpbmcgaW50b1xuICogYWNjb3VudCB0aGUgdXJsIGxvY2FsaXphdGlvbiBjb25maWd1cmF0aW9uIHByb3ZpZGVkIHdoZW4gaW1wb3J0aW5nIHRoZSBsYW5ndWFnZSBpbnRlZ3JhdGlvbiBtb2R1bGUuXG4gKiBcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBVcmxMb2NhbGl6YXRpb25TZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVXJsTG9jYWxpemF0aW9uU2VydmljZVxue1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVXJsTG9jYWxpemF0aW9uU2VydmljZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VXJsTG9jYWxpemF0aW9uQ29uZmlnfSBjb25maWcgVGhlIHVybCBsb2NhbGl6YXRpb24gY29uZmlndXJhdGlvbiBwcm92aWRlZCBmb3IgdGhlIGBVcmxMb2NhbGl6YXRpb25gIHRva2VuLlxuICAgICAqIEBwYXJhbSB7VXJsUmVmbGVjdGlvblNlcnZpY2V9IHVybFJlZmxlY3Rpb24gVGhlIHVybCByZWZsZWN0aW9uIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIHtVcmxMb2NhbGl6ZXJ9IGxvY2FsaXplciBUaGUgdXJsIGxvY2FsaXplciB3aGljaCB3aWxsIGFjdHVhbGx5IGRvIHRoZSBsb2NhbGl6YXRpb24gd29yay5cbiAgICAgKiBUaGUgaW5zdGFuY2UgYW5kIGltcGxlbWVudGF0aW9uIGRlcGVuZCBvbiB0aGUgc3RyYXRlZ3kgY29uZmlndXJlZCBmb3IgdXJsIGxvY2FsaXphdGlvbiB3aGVuIGltcG9ydGluZyB0aGUgbGFuZ3VhZ2UgaW50ZWdyYXRpb24gbW9kdWxlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFVybExvY2FsaXphdGlvbikgcHJpdmF0ZSAgICAgICAgIGNvbmZpZyAgICAgICA6IFVybExvY2FsaXphdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGUgICAgICAgICB1cmxSZWZsZWN0aW9uOiBVcmxSZWZsZWN0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyByZWFkb25seSBsb2NhbGl6ZXIgICAgOiBVcmxMb2NhbGl6ZXJcbiAgICApIHsgfVxuICAgIFxuICAgIC8qKlxuICAgICAqIExvY2FsaXplcyB0aGUgY3VycmVudGx5IG5hdmlnYXRlZCB1cmwgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgbG9jYWxpemF0aW9uIHN0cmF0ZWd5IGFuZCBmb3JjZXMgaHR0cHMgaWYgbmVlZGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxhbmcgVGhlIGxhbmd1Z2FlIHRvIGxvY2FsaXplIHRoZSBjdXJyZW50bHkgbmF2aWdhdGVkIHVybCB0by5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbG9jYWxpemVkIGN1cnJlbnRseSBuYXZpZ2F0ZWQgdXJsLlxuICAgICAqL1xuICAgIHB1YmxpYyBsb2NhbGl6ZShsYW5nOiBzdHJpbmcpOiBzdHJpbmdcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VIdHRwSWZSZXF1aXJlZCh0aGlzLmxvY2FsaXplci5sb2NhbGl6ZShsYW5nKSk7XG4gICAgfVxuICAgIFxuICAgIC8qKlxuICAgICAqIERlbG9jYWxpemVzIHRoZSBjdXJyZW50bHkgbmF2aWdhdGVkIHVybCB1c2luZyB0aGUgY29uZmlndXJlZCBsb2NhbGl6YXRpb24gc3RyYXRlZ3kgYW5kIGZvcmNlcyBodHRwcyBpZiBuZWVkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVsb2NhbGl6ZWQgY3VycmVudGx5IG5hdmlnYXRlZCB1cmwuXG4gICAgICovXG4gICAgcHVibGljIGRlbG9jYWxpemUoKTogc3RyaW5nXG4gICAgeyAgICAgICAgXG4gICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VIdHRwSWZSZXF1aXJlZCh0aGlzLmxvY2FsaXplci5kZWxvY2FsaXplKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIGxvY2FsaXplZCB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50bHkgbmF2aWdhdGUgdXJsIGZvciBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2VzIHVzaW5nIHRoZSBjb25maWd1cmVkIGxvY2FsaXphdGlvbiBzdHJhdGVneS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBsYW5ncyBUaGUgbGFuZ3VhZ2VzIGZvciB3aGljaCB0byBnZW5lcmF0ZSB0aGUgbG9jYWxpemVkIHVybHMuXG4gICAgICogQHJldHVybnMge3sgW2xhbmc6IHN0cmluZ106IHN0cmluZyB9W119IEFuIGFycmF5IG9mIHsgW2xhbmddOiB1cmwgfSBjb250YWluaW5nIGFuIG9iamVjdCBmb3IgZWFjaCBsYW5ndWFnZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgbG9jYWxpemVkIHVybC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2VuZXJhdGVMb2NhbGl6ZWRVcmxzKGxhbmdzOiBzdHJpbmdbXSk6IHsgW2xhbmc6IHN0cmluZ106IHN0cmluZyB9W11cbiAgICB7XG4gICAgICAgIHJldHVybiBsYW5ncy5tYXAobGFuZyA9PiAoeyBbbGFuZ106IHRoaXMubG9jYWxpemVyLmxvY2FsaXplKGxhbmcpIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcGxhY2VIdHRwSWZSZXF1aXJlZCh1cmw6IHN0cmluZyk6IHN0cmluZ1xuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnPy5mb3JjZUh0dHBzID8gdGhpcy51cmxSZWZsZWN0aW9uLmZvcmNlSHR0cHModXJsKSA6IHVybDtcbiAgICB9XG59Il19