UNPKG

@bespunky/angular-zen

Version:

The Angular tools you always wished were there.

58 lines 10.7 kB
import { UrlReflectionService } from '@bespunky/angular-zen/router-x'; import { LanguageIntegrationService } from '../../services/language-integration.service'; import { UrlLocalizer } from '../localizers/url-localizer'; import { RoutePositionUrlLocalizer } from '../localizers/route-position-url-localizer'; import { QueryParamsUrlLocalizer } from '../localizers/query-params-url-localizer'; import { NoopUrlLocalizer } from '../localizers/noop-url-localizer'; import { UrlLocalization } from './url-localization-config'; /** * The default configuration for url localization when loading the language integration module. * Uses the `NoopUrlLocalizer` as strategy and does not force https. Localization and delocalization will always return an unchanged url url. */ export const DefaultUrlLocalizationConfig = { strategy: { useClass: NoopUrlLocalizer }, forceHttps: false }; /** * Creates the appropriate DI compatible provider for the `UrlLocalizer` class, depending on the strategy specified in the url localization configuration. * If the configured strategy is a number, `RoutePositionUrlLocalizer` will be used. * If the configured strategy is a string, `QueryParamsUrlLocalizer` will be used. * If the configured strategy is a valid `UrlLocalizer` provider, the provider will be used as is. * Otherwise, `NoopUrlLocalizer` will be used. * * @export * @param {UrlLocalizationConfig} config The url localization configuration holding the strategy. * @returns {(ClassProvider | FactoryProvider)} A DI compatible provider for the `UrlLocalizer` class with the implementation appropriate for the specified strategy. */ export function provideUrlLocalizer(config) { const strategy = config?.strategy; const strategies = { // Use route position strategy for numbers number: () => ({ useFactory: (urlReflect, language) => new RoutePositionUrlLocalizer(config, urlReflect, language), deps: [UrlReflectionService, LanguageIntegrationService] }), // Use query params strategy for strings string: () => ({ useFactory: (urlReflect) => new QueryParamsUrlLocalizer(config, urlReflect), deps: [UrlReflectionService] }), // Use the user's factory or class provider object: () => strategy, // Use the noop localizer when nothing provided (in case url localization config is not present) undefined: () => ({ useClass: NoopUrlLocalizer }) }; // Create a basic provider to which the strategy will be assigned const provider = { provide: UrlLocalizer }; // Override the useClass or useFactory with the detected strategy return Object.assign(provider, strategies[typeof strategy]()); } /** * Creates the providers for the `UrlLocalization` token and the `UrlLocalizer` class. * * @export * @param {UrlLocalizationConfig} [config] (Optional) The configuration for url localization tools. Default is `DefaultUrlLocalizationConfig`. * @returns {Provider[]} The providers for the `UrlLocalization` token and the `UrlLocalizer` class. */ export function provideUrlLocalization(config) { config = Object.assign({}, DefaultUrlLocalizationConfig, config); return [ { provide: UrlLocalization, useValue: config }, provideUrlLocalizer(config) ]; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLWxvY2FsaXphdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci16ZW4vbGFuZ3VhZ2Uvc3JjL3VybC1sb2NhbGl6YXRpb24vY29uZmlnL3VybC1sb2NhbGl6YXRpb24ucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLG9CQUFvQixFQUFvQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSwwQkFBMEIsRUFBYyxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQTRCLE1BQU0sNkJBQTZCLENBQUM7QUFDckYsT0FBTyxFQUFFLHlCQUF5QixFQUFlLE1BQU0sNENBQTRDLENBQUM7QUFDcEcsT0FBTyxFQUFFLHVCQUF1QixFQUFpQixNQUFNLDBDQUEwQyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBd0IsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRixPQUFPLEVBQXlCLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5GOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUEwQjtJQUMvRCxRQUFRLEVBQUksRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUU7SUFDMUMsVUFBVSxFQUFFLEtBQUs7Q0FDcEIsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBNkI7SUFFN0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxFQUFFLFFBQVEsQ0FBQztJQUVsQyxNQUFNLFVBQVUsR0FBaUQ7UUFDN0QsMENBQTBDO1FBQzFDLE1BQU0sRUFBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBZ0MsRUFBRSxRQUFvQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsb0JBQW9CLEVBQUUsMEJBQTBCLENBQUMsRUFBRSxDQUFDO1FBQ3BPLHdDQUF3QztRQUN4QyxNQUFNLEVBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQWdDLEVBQUUsRUFBRSxDQUFDLElBQUksdUJBQXVCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztRQUN0SiwyQ0FBMkM7UUFDM0MsTUFBTSxFQUFLLEdBQUcsRUFBRSxDQUFDLFFBQVE7UUFDekIsZ0dBQWdHO1FBQ2hHLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUM7S0FDcEQsQ0FBQztJQUVGLGlFQUFpRTtJQUNqRSxNQUFNLFFBQVEsR0FBc0IsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFFOUQsaUVBQWlFO0lBQ2pFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBc0MsQ0FBQztBQUN2RyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE1BQThCO0lBRWpFLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVqRSxPQUFPO1FBQ0gsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7UUFDOUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO0tBQzlCLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xhc3NQcm92aWRlciwgRmFjdG9yeVByb3ZpZGVyLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBVcmxSZWZsZWN0aW9uU2VydmljZSAgICAgICAgICAgICAgICAgICB9IGZyb20gJ0BiZXNwdW5reS9hbmd1bGFyLXplbi9yb3V0ZXIteCc7XG5pbXBvcnQgeyBMYW5ndWFnZUludGVncmF0aW9uU2VydmljZSAgICAgICAgICAgICB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xhbmd1YWdlLWludGVncmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXJsTG9jYWxpemVyICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmcm9tICcuLi9sb2NhbGl6ZXJzL3VybC1sb2NhbGl6ZXInO1xuaW1wb3J0IHsgUm91dGVQb3NpdGlvblVybExvY2FsaXplciAgICAgICAgICAgICAgfSBmcm9tICcuLi9sb2NhbGl6ZXJzL3JvdXRlLXBvc2l0aW9uLXVybC1sb2NhbGl6ZXInO1xuaW1wb3J0IHsgUXVlcnlQYXJhbXNVcmxMb2NhbGl6ZXIgICAgICAgICAgICAgICAgfSBmcm9tICcuLi9sb2NhbGl6ZXJzL3F1ZXJ5LXBhcmFtcy11cmwtbG9jYWxpemVyJztcbmltcG9ydCB7IE5vb3BVcmxMb2NhbGl6ZXIgICAgICAgICAgICAgICAgICAgICAgIH0gZnJvbSAnLi4vbG9jYWxpemVycy9ub29wLXVybC1sb2NhbGl6ZXInO1xuaW1wb3J0IHsgVXJsTG9jYWxpemF0aW9uQ29uZmlnLCBVcmxMb2NhbGl6YXRpb24gfSBmcm9tICcuL3VybC1sb2NhbGl6YXRpb24tY29uZmlnJztcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB1cmwgbG9jYWxpemF0aW9uIHdoZW4gbG9hZGluZyB0aGUgbGFuZ3VhZ2UgaW50ZWdyYXRpb24gbW9kdWxlLlxuICogVXNlcyB0aGUgYE5vb3BVcmxMb2NhbGl6ZXJgIGFzIHN0cmF0ZWd5IGFuZCBkb2VzIG5vdCBmb3JjZSBodHRwcy4gTG9jYWxpemF0aW9uIGFuZCBkZWxvY2FsaXphdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gYW4gdW5jaGFuZ2VkIHVybCB1cmwuXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0VXJsTG9jYWxpemF0aW9uQ29uZmlnOiBVcmxMb2NhbGl6YXRpb25Db25maWcgPSB7XG4gICAgc3RyYXRlZ3kgIDogeyB1c2VDbGFzczogTm9vcFVybExvY2FsaXplciB9LFxuICAgIGZvcmNlSHR0cHM6IGZhbHNlXG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGFwcHJvcHJpYXRlIERJIGNvbXBhdGlibGUgcHJvdmlkZXIgZm9yIHRoZSBgVXJsTG9jYWxpemVyYCBjbGFzcywgZGVwZW5kaW5nIG9uIHRoZSBzdHJhdGVneSBzcGVjaWZpZWQgaW4gdGhlIHVybCBsb2NhbGl6YXRpb24gY29uZmlndXJhdGlvbi4gIFxuICogSWYgdGhlIGNvbmZpZ3VyZWQgc3RyYXRlZ3kgaXMgYSBudW1iZXIsIGBSb3V0ZVBvc2l0aW9uVXJsTG9jYWxpemVyYCB3aWxsIGJlIHVzZWQuICBcbiAqIElmIHRoZSBjb25maWd1cmVkIHN0cmF0ZWd5IGlzIGEgc3RyaW5nLCBgUXVlcnlQYXJhbXNVcmxMb2NhbGl6ZXJgIHdpbGwgYmUgdXNlZC4gIFxuICogSWYgdGhlIGNvbmZpZ3VyZWQgc3RyYXRlZ3kgaXMgYSB2YWxpZCBgVXJsTG9jYWxpemVyYCBwcm92aWRlciwgdGhlIHByb3ZpZGVyIHdpbGwgYmUgdXNlZCBhcyBpcy4gIFxuICogT3RoZXJ3aXNlLCBgTm9vcFVybExvY2FsaXplcmAgd2lsbCBiZSB1c2VkLlxuICogXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1VybExvY2FsaXphdGlvbkNvbmZpZ30gY29uZmlnIFRoZSB1cmwgbG9jYWxpemF0aW9uIGNvbmZpZ3VyYXRpb24gaG9sZGluZyB0aGUgc3RyYXRlZ3kuXG4gKiBAcmV0dXJucyB7KENsYXNzUHJvdmlkZXIgfCBGYWN0b3J5UHJvdmlkZXIpfSBBIERJIGNvbXBhdGlibGUgcHJvdmlkZXIgZm9yIHRoZSBgVXJsTG9jYWxpemVyYCBjbGFzcyB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdGhlIHNwZWNpZmllZCBzdHJhdGVneS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVVcmxMb2NhbGl6ZXIoY29uZmlnOiBVcmxMb2NhbGl6YXRpb25Db25maWcpOiBDbGFzc1Byb3ZpZGVyIHwgRmFjdG9yeVByb3ZpZGVyXG57XG4gICAgY29uc3Qgc3RyYXRlZ3kgPSBjb25maWc/LnN0cmF0ZWd5O1xuXG4gICAgY29uc3Qgc3RyYXRlZ2llczogeyBbdHlwZTogc3RyaW5nXTogKCkgPT4gUGFydGlhbDxQcm92aWRlcj47IH0gPSB7XG4gICAgICAgIC8vIFVzZSByb3V0ZSBwb3NpdGlvbiBzdHJhdGVneSBmb3IgbnVtYmVyc1xuICAgICAgICBudW1iZXIgICA6ICgpID0+ICh7IHVzZUZhY3Rvcnk6ICh1cmxSZWZsZWN0OiBVcmxSZWZsZWN0aW9uU2VydmljZSwgbGFuZ3VhZ2U6IExhbmd1YWdlSW50ZWdyYXRpb25TZXJ2aWNlKSA9PiBuZXcgUm91dGVQb3NpdGlvblVybExvY2FsaXplcihjb25maWcsIHVybFJlZmxlY3QsIGxhbmd1YWdlKSwgZGVwczogW1VybFJlZmxlY3Rpb25TZXJ2aWNlLCBMYW5ndWFnZUludGVncmF0aW9uU2VydmljZV0gfSksXG4gICAgICAgIC8vIFVzZSBxdWVyeSBwYXJhbXMgc3RyYXRlZ3kgZm9yIHN0cmluZ3NcbiAgICAgICAgc3RyaW5nICAgOiAoKSA9PiAoeyB1c2VGYWN0b3J5OiAodXJsUmVmbGVjdDogVXJsUmVmbGVjdGlvblNlcnZpY2UpID0+IG5ldyBRdWVyeVBhcmFtc1VybExvY2FsaXplcihjb25maWcsIHVybFJlZmxlY3QpLCBkZXBzOiBbVXJsUmVmbGVjdGlvblNlcnZpY2VdIH0pLFxuICAgICAgICAvLyBVc2UgdGhlIHVzZXIncyBmYWN0b3J5IG9yIGNsYXNzIHByb3ZpZGVyXG4gICAgICAgIG9iamVjdCAgIDogKCkgPT4gc3RyYXRlZ3ksXG4gICAgICAgIC8vIFVzZSB0aGUgbm9vcCBsb2NhbGl6ZXIgd2hlbiBub3RoaW5nIHByb3ZpZGVkIChpbiBjYXNlIHVybCBsb2NhbGl6YXRpb24gY29uZmlnIGlzIG5vdCBwcmVzZW50KVxuICAgICAgICB1bmRlZmluZWQ6ICgpID0+ICh7IHVzZUNsYXNzOiBOb29wVXJsTG9jYWxpemVyIH0pXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSBhIGJhc2ljIHByb3ZpZGVyIHRvIHdoaWNoIHRoZSBzdHJhdGVneSB3aWxsIGJlIGFzc2lnbmVkXG4gICAgY29uc3QgcHJvdmlkZXI6IFBhcnRpYWw8UHJvdmlkZXI+ID0geyBwcm92aWRlOiBVcmxMb2NhbGl6ZXIgfTtcblxuICAgIC8vIE92ZXJyaWRlIHRoZSB1c2VDbGFzcyBvciB1c2VGYWN0b3J5IHdpdGggdGhlIGRldGVjdGVkIHN0cmF0ZWd5XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvdmlkZXIsIHN0cmF0ZWdpZXNbdHlwZW9mIHN0cmF0ZWd5XSgpKSBhcyAoQ2xhc3NQcm92aWRlciB8IEZhY3RvcnlQcm92aWRlcik7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgcHJvdmlkZXJzIGZvciB0aGUgYFVybExvY2FsaXphdGlvbmAgdG9rZW4gYW5kIHRoZSBgVXJsTG9jYWxpemVyYCBjbGFzcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1VybExvY2FsaXphdGlvbkNvbmZpZ30gW2NvbmZpZ10gKE9wdGlvbmFsKSBUaGUgY29uZmlndXJhdGlvbiBmb3IgdXJsIGxvY2FsaXphdGlvbiB0b29scy4gRGVmYXVsdCBpcyBgRGVmYXVsdFVybExvY2FsaXphdGlvbkNvbmZpZ2AuXG4gKiBAcmV0dXJucyB7UHJvdmlkZXJbXX0gVGhlIHByb3ZpZGVycyBmb3IgdGhlIGBVcmxMb2NhbGl6YXRpb25gIHRva2VuIGFuZCB0aGUgYFVybExvY2FsaXplcmAgY2xhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVXJsTG9jYWxpemF0aW9uKGNvbmZpZz86IFVybExvY2FsaXphdGlvbkNvbmZpZyk6IFByb3ZpZGVyW11cbntcbiAgICBjb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0VXJsTG9jYWxpemF0aW9uQ29uZmlnLCBjb25maWcpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgeyBwcm92aWRlOiBVcmxMb2NhbGl6YXRpb24sIHVzZVZhbHVlOiBjb25maWcgfSxcbiAgICAgICAgcHJvdmlkZVVybExvY2FsaXplcihjb25maWcpXG4gICAgXTtcbn1cbiJdfQ==