@igo2/core 19.0.0-next.21 → 19.0.0-next.23

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.
@@ -34,8 +34,8 @@ const ALTERNATE_CONFIG_FROM_DEPRECATION = new Map(Object.entries(CONFIG_DEPRECAT
34
34
  ]));
35
35
 
36
36
  const version = {
37
- lib: '19.0.0-next.21',
38
- releaseDate: 1750170617891
37
+ lib: '19.0.0-next.23',
38
+ releaseDate: 1752525140595
39
39
  };
40
40
 
41
41
  class ConfigService {
@@ -1 +1 @@
1
- {"version":3,"file":"igo2-core-config.mjs","sources":["../../../packages/core/config/src/config-deprecated.ts","../../../packages/core/config/src/version.ts","../../../packages/core/config/src/config.service.ts","../../../packages/core/config/src/config.provider.ts","../../../packages/core/config/src/config.module.ts","../../../packages/core/config/src/igo2-core-config.ts"],"sourcesContent":["import { AlternateConfigOptions, DeprecatedOptions } from './config.interface';\n\nexport const CONFIG_DEPRECATED: Record<string, DeprecatedOptions> = {\n showMenuButton: {\n alternativeKey: 'menu.button.visible',\n mayBeRemoveIn: new Date('2024-06-06')\n },\n menuButtonReverseColor: {\n alternativeKey: 'menu.button.useThemeColor',\n mayBeRemoveIn: new Date('2024-06-06')\n },\n importWithStyle: {\n alternativeKey: 'importExport.importWithStyle',\n mayBeRemoveIn: new Date('2024-06-06')\n },\n hasGeolocateButton: {\n alternativeKey: 'geolocate.button.visible',\n mayBeRemoveIn: new Date('2024-06-06')\n }\n};\n\nexport const ALTERNATE_CONFIG_FROM_DEPRECATION = new Map<\n string,\n AlternateConfigOptions\n>(\n Object.entries(CONFIG_DEPRECATED)\n .filter(([_, options]) => options.alternativeKey)\n .map(([key, options]) => [\n options.alternativeKey,\n {\n deprecatedKey: key\n } satisfies AlternateConfigOptions\n ])\n);\n","export interface Version {\n app?: string;\n lib?: string;\n releaseDateApp?: number;\n releaseDate?: number;\n}\n\nexport const version: Version = {\n lib: '19.0.0-next.21',\n releaseDate: 1750170617891\n};\n","import { HttpBackend, HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { BehaviorSubject, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport {\n ALTERNATE_CONFIG_FROM_DEPRECATION,\n CONFIG_DEPRECATED\n} from './config-deprecated';\nimport { ConfigOptions } from './config.interface';\nimport { version } from './version';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigService<T extends object = Record<string, any>> {\n private config: T | null;\n private httpClient: HttpClient;\n private configDeprecated = new Map(Object.entries(CONFIG_DEPRECATED));\n\n private _isLoaded$ = new BehaviorSubject<boolean>(null);\n isLoaded$ = this._isLoaded$.asObservable();\n\n constructor(handler: HttpBackend) {\n this.httpClient = new HttpClient(handler);\n }\n\n /**\n * Use to get the all config file (merge from environnement.ts and config.json)\n */\n public getConfigs(): any {\n Array.from(this.configDeprecated.keys()).map((deprecatedKey) => {\n const deprecatedValue = ObjectUtils.resolve(this.config, deprecatedKey);\n if (deprecatedValue !== undefined) {\n this.handleDeprecatedConfig(deprecatedKey);\n }\n });\n return this.config;\n }\n\n /**\n * Use to get the data found in config file\n */\n public getConfig<T = any>(key: string, defaultValue?: unknown): T {\n let value = ObjectUtils.resolve(this.config, key);\n\n const isDeprecated = this.configDeprecated.get(key);\n if (isDeprecated && value !== undefined) {\n this.handleDeprecatedConfig(key);\n } else if (value === undefined) {\n value = this.handleDeprecationPossibility(key);\n }\n\n return value ?? defaultValue;\n }\n\n private handleDeprecatedConfig(key: string): void {\n const options = this.configDeprecated.get(key);\n\n let message = `This config (${key}) is deprecated and will be removed shortly`;\n if (options.alternativeKey) {\n message += ` You should use this key (${options.alternativeKey}) as an alternate solution`;\n }\n\n const currentDate = new Date();\n currentDate >= options.mayBeRemoveIn\n ? console.error(message)\n : console.warn(message);\n }\n\n private handleDeprecationPossibility(key: string): any {\n const options = ALTERNATE_CONFIG_FROM_DEPRECATION.get(key);\n if (!options) {\n return;\n }\n\n return this.getConfig(options.deprecatedKey);\n }\n\n /**\n * This method loads \"[path]\" to get all config's variables\n */\n public load(options: ConfigOptions<T>): void | Promise<unknown> {\n const baseConfig = options.default;\n if (!options.path) {\n this.config = baseConfig;\n this._isLoaded$.next(true);\n return;\n }\n\n return new Promise((resolve) => {\n this.httpClient\n .get(options.path)\n .pipe(\n catchError((error: any): any => {\n console.log(`Configuration file ${options.path} could not be read`);\n this._isLoaded$.next(false);\n resolve(true);\n return throwError(error.error || 'Server error');\n })\n )\n .subscribe((configResponse: object) => {\n this.config = ObjectUtils.mergeDeep(\n ObjectUtils.mergeDeep({ version }, baseConfig),\n configResponse\n );\n this._isLoaded$.next(true);\n resolve(true);\n });\n });\n }\n}\n","import {\n EnvironmentProviders,\n InjectionToken,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer\n} from '@angular/core';\n\nimport { ConfigOptions } from './config.interface';\nimport { ConfigService } from './config.service';\n\nexport const CONFIG_OPTIONS = new InjectionToken<ConfigOptions>(\n 'configOptions'\n);\n\nexport function provideConfig(options: ConfigOptions): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: CONFIG_OPTIONS,\n useValue: options\n },\n provideAppInitializer(async () => {\n const configService = inject(ConfigService);\n const options = inject(CONFIG_OPTIONS);\n return configService.load(options);\n })\n ]);\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { provideConfig } from './config.provider';\n\n/**\n * @deprecated import the provideConfig directly\n */\n@NgModule({\n imports: [],\n declarations: [],\n exports: []\n})\nexport class IgoConfigModule {\n static forRoot(): ModuleWithProviders<IgoConfigModule> {\n return {\n ngModule: IgoConfigModule,\n providers: [provideConfig({})]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"igo2-core-config.mjs","sources":["../../../packages/core/config/src/config-deprecated.ts","../../../packages/core/config/src/version.ts","../../../packages/core/config/src/config.service.ts","../../../packages/core/config/src/config.provider.ts","../../../packages/core/config/src/config.module.ts","../../../packages/core/config/src/igo2-core-config.ts"],"sourcesContent":["import { AlternateConfigOptions, DeprecatedOptions } from './config.interface';\n\nexport const CONFIG_DEPRECATED: Record<string, DeprecatedOptions> = {\n showMenuButton: {\n alternativeKey: 'menu.button.visible',\n mayBeRemoveIn: new Date('2024-06-06')\n },\n menuButtonReverseColor: {\n alternativeKey: 'menu.button.useThemeColor',\n mayBeRemoveIn: new Date('2024-06-06')\n },\n importWithStyle: {\n alternativeKey: 'importExport.importWithStyle',\n mayBeRemoveIn: new Date('2024-06-06')\n },\n hasGeolocateButton: {\n alternativeKey: 'geolocate.button.visible',\n mayBeRemoveIn: new Date('2024-06-06')\n }\n};\n\nexport const ALTERNATE_CONFIG_FROM_DEPRECATION = new Map<\n string,\n AlternateConfigOptions\n>(\n Object.entries(CONFIG_DEPRECATED)\n .filter(([_, options]) => options.alternativeKey)\n .map(([key, options]) => [\n options.alternativeKey,\n {\n deprecatedKey: key\n } satisfies AlternateConfigOptions\n ])\n);\n","export interface Version {\n app?: string;\n lib?: string;\n releaseDateApp?: number;\n releaseDate?: number;\n}\n\nexport const version: Version = {\n lib: '19.0.0-next.23',\n releaseDate: 1752525140595\n};\n","import { HttpBackend, HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { BehaviorSubject, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport {\n ALTERNATE_CONFIG_FROM_DEPRECATION,\n CONFIG_DEPRECATED\n} from './config-deprecated';\nimport { ConfigOptions } from './config.interface';\nimport { version } from './version';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigService<T extends object = Record<string, any>> {\n private config: T | null;\n private httpClient: HttpClient;\n private configDeprecated = new Map(Object.entries(CONFIG_DEPRECATED));\n\n private _isLoaded$ = new BehaviorSubject<boolean>(null);\n isLoaded$ = this._isLoaded$.asObservable();\n\n constructor(handler: HttpBackend) {\n this.httpClient = new HttpClient(handler);\n }\n\n /**\n * Use to get the all config file (merge from environnement.ts and config.json)\n */\n public getConfigs(): any {\n Array.from(this.configDeprecated.keys()).map((deprecatedKey) => {\n const deprecatedValue = ObjectUtils.resolve(this.config, deprecatedKey);\n if (deprecatedValue !== undefined) {\n this.handleDeprecatedConfig(deprecatedKey);\n }\n });\n return this.config;\n }\n\n /**\n * Use to get the data found in config file\n */\n public getConfig<T = any>(key: string, defaultValue?: unknown): T {\n let value = ObjectUtils.resolve(this.config, key);\n\n const isDeprecated = this.configDeprecated.get(key);\n if (isDeprecated && value !== undefined) {\n this.handleDeprecatedConfig(key);\n } else if (value === undefined) {\n value = this.handleDeprecationPossibility(key);\n }\n\n return value ?? defaultValue;\n }\n\n private handleDeprecatedConfig(key: string): void {\n const options = this.configDeprecated.get(key);\n\n let message = `This config (${key}) is deprecated and will be removed shortly`;\n if (options.alternativeKey) {\n message += ` You should use this key (${options.alternativeKey}) as an alternate solution`;\n }\n\n const currentDate = new Date();\n currentDate >= options.mayBeRemoveIn\n ? console.error(message)\n : console.warn(message);\n }\n\n private handleDeprecationPossibility(key: string): any {\n const options = ALTERNATE_CONFIG_FROM_DEPRECATION.get(key);\n if (!options) {\n return;\n }\n\n return this.getConfig(options.deprecatedKey);\n }\n\n /**\n * This method loads \"[path]\" to get all config's variables\n */\n public load(options: ConfigOptions<T>): void | Promise<unknown> {\n const baseConfig = options.default;\n if (!options.path) {\n this.config = baseConfig;\n this._isLoaded$.next(true);\n return;\n }\n\n return new Promise((resolve) => {\n this.httpClient\n .get(options.path)\n .pipe(\n catchError((error: any): any => {\n console.log(`Configuration file ${options.path} could not be read`);\n this._isLoaded$.next(false);\n resolve(true);\n return throwError(error.error || 'Server error');\n })\n )\n .subscribe((configResponse: object) => {\n this.config = ObjectUtils.mergeDeep(\n ObjectUtils.mergeDeep({ version }, baseConfig),\n configResponse\n );\n this._isLoaded$.next(true);\n resolve(true);\n });\n });\n }\n}\n","import {\n EnvironmentProviders,\n InjectionToken,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer\n} from '@angular/core';\n\nimport { ConfigOptions } from './config.interface';\nimport { ConfigService } from './config.service';\n\nexport const CONFIG_OPTIONS = new InjectionToken<ConfigOptions>(\n 'configOptions'\n);\n\nexport function provideConfig(options: ConfigOptions): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: CONFIG_OPTIONS,\n useValue: options\n },\n provideAppInitializer(async () => {\n const configService = inject(ConfigService);\n const options = inject(CONFIG_OPTIONS);\n return configService.load(options);\n })\n ]);\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { provideConfig } from './config.provider';\n\n/**\n * @deprecated import the provideConfig directly\n */\n@NgModule({\n imports: [],\n declarations: [],\n exports: []\n})\nexport class IgoConfigModule {\n static forRoot(): ModuleWithProviders<IgoConfigModule> {\n return {\n ngModule: IgoConfigModule,\n providers: [provideConfig({})]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -37,10 +37,16 @@ class LanguageLoader {
37
37
  this.options = options;
38
38
  const document = inject(DOCUMENT);
39
39
  const platformId = inject(PLATFORM_ID);
40
- this.baseUrl = isPlatformServer(platformId) ? document.location.origin : '';
40
+ this.baseUrl = isPlatformServer(platformId)
41
+ ? this.getServerUrl(document)
42
+ : '';
43
+ }
44
+ getServerUrl(document) {
45
+ const origin = document.location.origin;
46
+ return origin.endsWith('/') ? origin : origin + '/';
41
47
  }
42
48
  getTranslation(lang) {
43
- const igoLocale$ = this.httpClient.get(`${this.baseUrl}/locale/libs_locale/${lang}.json`);
49
+ const igoLocale$ = this.httpClient.get(`${this.baseUrl}locale/libs_locale/${lang}.json`);
44
50
  if (!this.prefix) {
45
51
  const prefix = this.options.prefix;
46
52
  this.prefix = !prefix || Array.isArray(prefix) ? prefix : [prefix];
@@ -49,7 +55,7 @@ class LanguageLoader {
49
55
  this._isLoaded$.next(true);
50
56
  return this.options.ignoreLibsLocale ? of(undefined) : igoLocale$;
51
57
  }
52
- const appLocale$ = this.prefix.map((prefix) => this.httpClient.get(`${this.baseUrl}/${prefix}${lang}${this.suffix}`));
58
+ const appLocale$ = this.prefix.map((prefix) => this.httpClient.get(`${this.baseUrl}${prefix}${lang}${this.suffix}`));
53
59
  const locale$ = [...appLocale$];
54
60
  if (!this.options.ignoreLibsLocale) {
55
61
  locale$.unshift(igoLocale$);
@@ -1 +1 @@
1
- {"version":3,"file":"igo2-core-language.mjs","sources":["../../../packages/core/language/src/language.module.ts","../../../packages/core/language/src/shared/language.interface.ts","../../../packages/core/language/src/shared/language.loader.ts","../../../packages/core/language/src/shared/language.service.ts","../../../packages/core/language/src/shared/missing-translation.guard.ts","../../../packages/core/language/src/shared/language.provider.ts","../../../packages/core/language/src/shared/language-mock.provider.ts","../../../packages/core/language/src/igo2-core-language.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\n\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n exports: [TranslateModule]\n})\nexport class IgoLanguageModule {}\n","import { TranslateLoader } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\n\nexport interface LanguageOptions {\n prefix?: string | string[];\n ignoreLibsLocale?: boolean;\n}\n\nexport abstract class LanguageLoaderBase implements TranslateLoader {\n abstract isLoaded$: Observable<boolean>;\n abstract getTranslation(lang: string): Observable<any>;\n}\n","import { DOCUMENT, isPlatformBrowser, isPlatformServer } from '@angular/common';\nimport { HttpBackend, HttpClient } from '@angular/common/http';\nimport { PLATFORM_ID, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport {\n BehaviorSubject,\n Observable,\n first,\n forkJoin,\n map,\n of,\n switchMap,\n tap\n} from 'rxjs';\n\nimport { LanguageLoaderBase, LanguageOptions } from './language.interface';\n\nexport class LanguageLoader implements LanguageLoaderBase {\n private httpClient: HttpClient;\n\n private _isLoaded$ = new BehaviorSubject<boolean>(null);\n isLoaded$ = this._isLoaded$.asObservable();\n\n suffix = '.json';\n prefix?: string | string[];\n options: LanguageOptions;\n\n baseUrl: string;\n\n constructor(handler: HttpBackend, options: LanguageOptions) {\n this.httpClient = new HttpClient(handler);\n this.options = options;\n\n const document = inject(DOCUMENT);\n const platformId = inject(PLATFORM_ID);\n this.baseUrl = isPlatformServer(platformId) ? document.location.origin : '';\n }\n\n public getTranslation(lang: string): Observable<any> {\n const igoLocale$ = this.httpClient.get(\n `${this.baseUrl}/locale/libs_locale/${lang}.json`\n );\n if (!this.prefix) {\n const prefix = this.options.prefix;\n this.prefix = !prefix || Array.isArray(prefix) ? prefix : [prefix];\n }\n\n if (!this.prefix || this.prefix.length === 0) {\n this._isLoaded$.next(true);\n return this.options.ignoreLibsLocale ? of(undefined) : igoLocale$;\n }\n\n const appLocale$ = (this.prefix as string[]).map((prefix) =>\n this.httpClient.get(`${this.baseUrl}/${prefix}${lang}${this.suffix}`)\n );\n\n const locale$ = [...appLocale$];\n\n if (!this.options.ignoreLibsLocale) {\n locale$.unshift(igoLocale$);\n }\n\n return forkJoin(locale$).pipe(\n map((translations) => {\n return translations.reduce(\n (acc, current) => ObjectUtils.mergeDeep(acc, current),\n {}\n );\n }),\n tap(() => {\n this._isLoaded$.next(true);\n })\n );\n }\n}\n\nexport class LanguageLoaderWithAsyncConfig extends LanguageLoader {\n constructor(\n handler: HttpBackend,\n private configService: ConfigService,\n prefix?: string | string[],\n suffix = '.json'\n ) {\n super(handler, undefined);\n this.prefix = prefix;\n this.suffix = suffix;\n }\n\n public getTranslation(lang: string): Observable<any> {\n return this.configService.isLoaded$.pipe(\n first((isLoaded) => isLoaded),\n switchMap(() => {\n this.options =\n this.configService.getConfig<LanguageOptions>('language');\n\n return super.getTranslation(lang);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LanguageService {\n private language: string;\n readonly language$ = new BehaviorSubject<string>(undefined);\n\n constructor(public translate: TranslateService) {\n const defaultLang = this.translate.defaultLang;\n if (defaultLang && this.matchLanguage(defaultLang)) {\n this.language = defaultLang;\n this.language$.next(defaultLang);\n } else {\n this.setBrowserLanguage();\n }\n }\n private setBrowserLanguage() {\n this.language = this.translate.getBrowserLang();\n const lang = this.getLanguage();\n this.translate.setDefaultLang(lang);\n this.language$.next(lang);\n }\n\n public getLanguage(): string {\n return this.matchLanguage(this.language) ? this.language : 'en';\n }\n\n private matchLanguage(lang: string): boolean {\n return !!lang.match(/en|fr/);\n }\n\n public setLanguage(language: string) {\n this.language = this.matchLanguage(language) ? language : 'en';\n combineLatest([\n this.translate.use(this.language),\n this.translate.reloadLang(this.language)\n ]).subscribe(() => {\n this.language$.next(this.language);\n });\n }\n}\n","import {\n MissingTranslationHandler,\n MissingTranslationHandlerParams\n} from '@ngx-translate/core';\n\nexport class IgoMissingTranslationHandler implements MissingTranslationHandler {\n handle(params: MissingTranslationHandlerParams) {\n if (!params.translateService.langs.length) {\n const error =\n 'Translations are not yet loaded. \\\n Check that the LanguageService is injected.';\n throw new Error(error);\n }\n\n if (params.key.substr(0, 4) === 'igo.') {\n throw new Error(`The Key \"${params.key}\" is missing in locale file.`);\n } else {\n return params.key;\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { HttpBackend } from '@angular/common/http';\nimport {\n EnvironmentProviders,\n Provider,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer\n} from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport {\n DEFAULT_LANGUAGE,\n Language,\n MissingTranslationHandler,\n TranslateLoader,\n TranslateModuleConfig,\n provideTranslateService\n} from '@ngx-translate/core';\nimport { first } from 'rxjs';\nimport { catchError, timeout } from 'rxjs/operators';\n\nimport { LanguageLoaderBase, LanguageOptions } from './language.interface';\nimport {\n LanguageLoader,\n LanguageLoaderWithAsyncConfig\n} from './language.loader';\nimport { LanguageService } from './language.service';\nimport { IgoMissingTranslationHandler } from './missing-translation.guard';\n\n// 5 seconds\nconst TIMEOUT_DURATION = 5000;\n\nexport interface TranslationFeature<KindT extends TranslationFeatureKind> {\n kind: KindT;\n providers: (Provider | EnvironmentProviders)[];\n}\n\nexport enum TranslationFeatureKind {\n Translation = 0,\n DefaultLanguage = 1\n}\n\n/**\n * Make sure you only call this method in the root module of your application, most of the time called AppModule.\n */\nexport function provideTranslation(\n featureConfig: TranslationFeature<TranslationFeatureKind.Translation>\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...featureConfig.providers,\n provideAppInitializer(() => {\n const languageService = inject(LanguageService);\n return (\n languageService.translate.currentLoader as LanguageLoaderBase\n ).isLoaded$?.pipe(\n timeout(TIMEOUT_DURATION),\n first((isLoaded) => isLoaded === true),\n catchError((error) => {\n error.message += ` - Request timed out for language loader after: ${TIMEOUT_DURATION}`;\n throw error;\n })\n );\n })\n ]);\n}\n\nexport function withStaticConfig(\n options: LanguageOptions,\n defaultLanguage?: string | undefined\n): TranslationFeature<TranslationFeatureKind.Translation> {\n const loader: Provider = {\n provide: TranslateLoader,\n useFactory: (http: HttpBackend) => languageLoaderWithStatic(http, options),\n deps: [HttpBackend]\n };\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n provideTranslateService(setTranslationConfig(loader, defaultLanguage))\n ]\n };\n}\n\nexport function withAsyncConfig(\n defaultLanguage?: string | undefined\n): TranslationFeature<TranslationFeatureKind.Translation> {\n const loader: Provider = {\n provide: TranslateLoader,\n useFactory: languageLoaderWithAsync,\n deps: [HttpBackend, ConfigService]\n };\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n provideTranslateService(setTranslationConfig(loader, defaultLanguage))\n ]\n };\n}\n\n/**\n * Get the first segment of the path (e.g., '/en/alerts' => 'en')\n * @param allowedLanguages default to ['fr', 'en']\n */\nexport function withUrlDefaultLanguage(\n defaultLang?: Language,\n allowedLanguages: Language[] = ['fr', 'en']\n): TranslationFeature<TranslationFeatureKind.DefaultLanguage> {\n return {\n kind: TranslationFeatureKind.DefaultLanguage,\n providers: [\n {\n provide: DEFAULT_LANGUAGE,\n useFactory: defaultLanguageSegmentFactory(allowedLanguages, defaultLang)\n }\n ]\n };\n}\n\nfunction defaultLanguageSegmentFactory(\n allowedLanguages: Language[],\n defaultLang?: Language\n): () => string | undefined {\n return () => {\n const doc = inject(DOCUMENT);\n const url = new URL(doc.location.href);\n\n const firstSegment = url.pathname.split('/').filter(Boolean)[0];\n if (allowedLanguages.includes(firstSegment)) {\n return firstSegment;\n }\n\n return defaultLang;\n };\n}\n\nexport const setTranslationConfig = (\n loader?: Provider,\n defaultLanguage?: string\n): TranslateModuleConfig => ({\n defaultLanguage: defaultLanguage,\n loader: loader ?? DEFAULT_LANGUAGE_LOADER,\n missingTranslationHandler: {\n provide: MissingTranslationHandler,\n useClass: IgoMissingTranslationHandler\n }\n});\n\nfunction languageLoaderWithStatic(\n http: HttpBackend,\n options?: LanguageOptions\n) {\n return new LanguageLoader(http, options);\n}\n\nexport const LANGUAGE_LOADER: Provider = {\n provide: TranslateLoader,\n useFactory: languageLoaderWithAsync,\n deps: [HttpBackend, ConfigService]\n};\n\nfunction languageLoaderWithAsync(http: HttpBackend, config?: ConfigService) {\n return new LanguageLoaderWithAsyncConfig(http, config, undefined, undefined);\n}\n\nexport const DEFAULT_LANGUAGE_LOADER: Provider = {\n provide: TranslateLoader,\n useFactory: languageLoaderWithAsync,\n deps: [HttpBackend, ConfigService]\n};\n","import {\n EnvironmentProviders,\n importProvidersFrom,\n makeEnvironmentProviders\n} from '@angular/core';\n\nimport {\n TranslateFakeLoader,\n TranslateLoader,\n TranslateModule\n} from '@ngx-translate/core';\n\nexport function provideMockTranslation(): EnvironmentProviders {\n return makeEnvironmentProviders([\n importProvidersFrom(\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useClass: TranslateFakeLoader\n }\n })\n )\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"igo2-core-language.mjs","sources":["../../../packages/core/language/src/language.module.ts","../../../packages/core/language/src/shared/language.interface.ts","../../../packages/core/language/src/shared/language.loader.ts","../../../packages/core/language/src/shared/language.service.ts","../../../packages/core/language/src/shared/missing-translation.guard.ts","../../../packages/core/language/src/shared/language.provider.ts","../../../packages/core/language/src/shared/language-mock.provider.ts","../../../packages/core/language/src/igo2-core-language.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\n\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n exports: [TranslateModule]\n})\nexport class IgoLanguageModule {}\n","import { TranslateLoader } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\n\nexport interface LanguageOptions {\n prefix?: string | string[];\n ignoreLibsLocale?: boolean;\n}\n\nexport abstract class LanguageLoaderBase implements TranslateLoader {\n abstract isLoaded$: Observable<boolean>;\n abstract getTranslation(lang: string): Observable<any>;\n}\n","import { DOCUMENT, isPlatformServer } from '@angular/common';\nimport { HttpBackend, HttpClient } from '@angular/common/http';\nimport { PLATFORM_ID, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport {\n BehaviorSubject,\n Observable,\n first,\n forkJoin,\n map,\n of,\n switchMap,\n tap\n} from 'rxjs';\n\nimport { LanguageLoaderBase, LanguageOptions } from './language.interface';\n\nexport class LanguageLoader implements LanguageLoaderBase {\n private httpClient: HttpClient;\n\n private _isLoaded$ = new BehaviorSubject<boolean>(null);\n isLoaded$ = this._isLoaded$.asObservable();\n\n suffix = '.json';\n prefix?: string | string[];\n options: LanguageOptions;\n\n baseUrl: string;\n\n constructor(handler: HttpBackend, options: LanguageOptions) {\n this.httpClient = new HttpClient(handler);\n this.options = options;\n\n const document = inject(DOCUMENT);\n const platformId = inject(PLATFORM_ID);\n this.baseUrl = isPlatformServer(platformId)\n ? this.getServerUrl(document)\n : '';\n }\n\n private getServerUrl(document: Document): string {\n const origin = document.location.origin;\n return origin.endsWith('/') ? origin : origin + '/';\n }\n\n public getTranslation(lang: string): Observable<any> {\n const igoLocale$ = this.httpClient.get(\n `${this.baseUrl}locale/libs_locale/${lang}.json`\n );\n if (!this.prefix) {\n const prefix = this.options.prefix;\n this.prefix = !prefix || Array.isArray(prefix) ? prefix : [prefix];\n }\n\n if (!this.prefix || this.prefix.length === 0) {\n this._isLoaded$.next(true);\n return this.options.ignoreLibsLocale ? of(undefined) : igoLocale$;\n }\n\n const appLocale$ = (this.prefix as string[]).map((prefix) =>\n this.httpClient.get(`${this.baseUrl}${prefix}${lang}${this.suffix}`)\n );\n\n const locale$ = [...appLocale$];\n\n if (!this.options.ignoreLibsLocale) {\n locale$.unshift(igoLocale$);\n }\n\n return forkJoin(locale$).pipe(\n map((translations) => {\n return translations.reduce(\n (acc, current) => ObjectUtils.mergeDeep(acc, current),\n {}\n );\n }),\n tap(() => {\n this._isLoaded$.next(true);\n })\n );\n }\n}\n\nexport class LanguageLoaderWithAsyncConfig extends LanguageLoader {\n constructor(\n handler: HttpBackend,\n private configService: ConfigService,\n prefix?: string | string[],\n suffix = '.json'\n ) {\n super(handler, undefined);\n this.prefix = prefix;\n this.suffix = suffix;\n }\n\n public getTranslation(lang: string): Observable<any> {\n return this.configService.isLoaded$.pipe(\n first((isLoaded) => isLoaded),\n switchMap(() => {\n this.options =\n this.configService.getConfig<LanguageOptions>('language');\n\n return super.getTranslation(lang);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LanguageService {\n private language: string;\n readonly language$ = new BehaviorSubject<string>(undefined);\n\n constructor(public translate: TranslateService) {\n const defaultLang = this.translate.defaultLang;\n if (defaultLang && this.matchLanguage(defaultLang)) {\n this.language = defaultLang;\n this.language$.next(defaultLang);\n } else {\n this.setBrowserLanguage();\n }\n }\n private setBrowserLanguage() {\n this.language = this.translate.getBrowserLang();\n const lang = this.getLanguage();\n this.translate.setDefaultLang(lang);\n this.language$.next(lang);\n }\n\n public getLanguage(): string {\n return this.matchLanguage(this.language) ? this.language : 'en';\n }\n\n private matchLanguage(lang: string): boolean {\n return !!lang.match(/en|fr/);\n }\n\n public setLanguage(language: string) {\n this.language = this.matchLanguage(language) ? language : 'en';\n combineLatest([\n this.translate.use(this.language),\n this.translate.reloadLang(this.language)\n ]).subscribe(() => {\n this.language$.next(this.language);\n });\n }\n}\n","import {\n MissingTranslationHandler,\n MissingTranslationHandlerParams\n} from '@ngx-translate/core';\n\nexport class IgoMissingTranslationHandler implements MissingTranslationHandler {\n handle(params: MissingTranslationHandlerParams) {\n if (!params.translateService.langs.length) {\n const error =\n 'Translations are not yet loaded. \\\n Check that the LanguageService is injected.';\n throw new Error(error);\n }\n\n if (params.key.substr(0, 4) === 'igo.') {\n throw new Error(`The Key \"${params.key}\" is missing in locale file.`);\n } else {\n return params.key;\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { HttpBackend } from '@angular/common/http';\nimport {\n EnvironmentProviders,\n Provider,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer\n} from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport {\n DEFAULT_LANGUAGE,\n Language,\n MissingTranslationHandler,\n TranslateLoader,\n TranslateModuleConfig,\n provideTranslateService\n} from '@ngx-translate/core';\nimport { first } from 'rxjs';\nimport { catchError, timeout } from 'rxjs/operators';\n\nimport { LanguageLoaderBase, LanguageOptions } from './language.interface';\nimport {\n LanguageLoader,\n LanguageLoaderWithAsyncConfig\n} from './language.loader';\nimport { LanguageService } from './language.service';\nimport { IgoMissingTranslationHandler } from './missing-translation.guard';\n\n// 5 seconds\nconst TIMEOUT_DURATION = 5000;\n\nexport interface TranslationFeature<KindT extends TranslationFeatureKind> {\n kind: KindT;\n providers: (Provider | EnvironmentProviders)[];\n}\n\nexport enum TranslationFeatureKind {\n Translation = 0,\n DefaultLanguage = 1\n}\n\n/**\n * Make sure you only call this method in the root module of your application, most of the time called AppModule.\n */\nexport function provideTranslation(\n featureConfig: TranslationFeature<TranslationFeatureKind.Translation>\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n ...featureConfig.providers,\n provideAppInitializer(() => {\n const languageService = inject(LanguageService);\n return (\n languageService.translate.currentLoader as LanguageLoaderBase\n ).isLoaded$?.pipe(\n timeout(TIMEOUT_DURATION),\n first((isLoaded) => isLoaded === true),\n catchError((error) => {\n error.message += ` - Request timed out for language loader after: ${TIMEOUT_DURATION}`;\n throw error;\n })\n );\n })\n ]);\n}\n\nexport function withStaticConfig(\n options: LanguageOptions,\n defaultLanguage?: string | undefined\n): TranslationFeature<TranslationFeatureKind.Translation> {\n const loader: Provider = {\n provide: TranslateLoader,\n useFactory: (http: HttpBackend) => languageLoaderWithStatic(http, options),\n deps: [HttpBackend]\n };\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n provideTranslateService(setTranslationConfig(loader, defaultLanguage))\n ]\n };\n}\n\nexport function withAsyncConfig(\n defaultLanguage?: string | undefined\n): TranslationFeature<TranslationFeatureKind.Translation> {\n const loader: Provider = {\n provide: TranslateLoader,\n useFactory: languageLoaderWithAsync,\n deps: [HttpBackend, ConfigService]\n };\n return {\n kind: TranslationFeatureKind.Translation,\n providers: [\n provideTranslateService(setTranslationConfig(loader, defaultLanguage))\n ]\n };\n}\n\n/**\n * Get the first segment of the path (e.g., '/en/alerts' => 'en')\n * @param allowedLanguages default to ['fr', 'en']\n */\nexport function withUrlDefaultLanguage(\n defaultLang?: Language,\n allowedLanguages: Language[] = ['fr', 'en']\n): TranslationFeature<TranslationFeatureKind.DefaultLanguage> {\n return {\n kind: TranslationFeatureKind.DefaultLanguage,\n providers: [\n {\n provide: DEFAULT_LANGUAGE,\n useFactory: defaultLanguageSegmentFactory(allowedLanguages, defaultLang)\n }\n ]\n };\n}\n\nfunction defaultLanguageSegmentFactory(\n allowedLanguages: Language[],\n defaultLang?: Language\n): () => string | undefined {\n return () => {\n const doc = inject(DOCUMENT);\n const url = new URL(doc.location.href);\n\n const firstSegment = url.pathname.split('/').filter(Boolean)[0];\n if (allowedLanguages.includes(firstSegment)) {\n return firstSegment;\n }\n\n return defaultLang;\n };\n}\n\nexport const setTranslationConfig = (\n loader?: Provider,\n defaultLanguage?: string\n): TranslateModuleConfig => ({\n defaultLanguage: defaultLanguage,\n loader: loader ?? DEFAULT_LANGUAGE_LOADER,\n missingTranslationHandler: {\n provide: MissingTranslationHandler,\n useClass: IgoMissingTranslationHandler\n }\n});\n\nfunction languageLoaderWithStatic(\n http: HttpBackend,\n options?: LanguageOptions\n) {\n return new LanguageLoader(http, options);\n}\n\nexport const LANGUAGE_LOADER: Provider = {\n provide: TranslateLoader,\n useFactory: languageLoaderWithAsync,\n deps: [HttpBackend, ConfigService]\n};\n\nfunction languageLoaderWithAsync(http: HttpBackend, config?: ConfigService) {\n return new LanguageLoaderWithAsyncConfig(http, config, undefined, undefined);\n}\n\nexport const DEFAULT_LANGUAGE_LOADER: Provider = {\n provide: TranslateLoader,\n useFactory: languageLoaderWithAsync,\n deps: [HttpBackend, ConfigService]\n};\n","import {\n EnvironmentProviders,\n importProvidersFrom,\n makeEnvironmentProviders\n} from '@angular/core';\n\nimport {\n TranslateFakeLoader,\n TranslateLoader,\n TranslateModule\n} from '@ngx-translate/core';\n\nexport function provideMockTranslation(): EnvironmentProviders {\n return makeEnvironmentProviders([\n importProvidersFrom(\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useClass: TranslateFakeLoader\n }\n })\n )\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -1,18 +1,8 @@
1
- import { ErrorHandler, provideAppInitializer, inject, InjectionToken } from '@angular/core';
1
+ import { InjectionToken, ErrorHandler, provideAppInitializer, inject } from '@angular/core';
2
2
  import { Router } from '@angular/router';
3
- import { setUser, createErrorHandler, getClient, browserTracingIntegration, replayIntegration, init, TraceService } from '@sentry/angular';
3
+ import { createErrorHandler, getClient, init, browserTracingIntegration, TraceService, setUser } from '@sentry/angular';
4
4
 
5
- const isTracingEnabled = (options) => !!options.tracesSampleRate || !!options.tracesSampler;
6
- const isReplayEnabled = (options) => !!options.replaysSessionSampleRate || !!options.replaysOnErrorSampleRate;
7
- const identifySentryUser = (user) => {
8
- setUser(user
9
- ? {
10
- id: user.id,
11
- username: `${user.firstName} ${user.lastName}`,
12
- email: user.email
13
- }
14
- : null);
15
- };
5
+ const MONITORING_OPTIONS = new InjectionToken('monitoring.options');
16
6
 
17
7
  const createSentryErrorHandler = (options) => {
18
8
  return createErrorHandler({
@@ -25,59 +15,68 @@ const initSentry = (options, force) => {
25
15
  if (!force && client) {
26
16
  return;
27
17
  }
28
- const baseConfig = {
29
- ...options,
30
- integrations: [
31
- isTracingEnabled(options) && browserTracingIntegration(),
32
- isReplayEnabled(options) && replayIntegration()
33
- ].filter(Boolean)
34
- };
35
- init(baseConfig);
18
+ init(options);
36
19
  };
37
20
 
38
- const provideSentryMonitoring = (options) => {
21
+ const provideSentryMonitoring = (options, integrations) => {
39
22
  const isEnabled = options.enabled !== undefined ? options.enabled : true;
40
23
  if (!isEnabled) {
41
24
  return [];
42
25
  }
43
- initSentry(options);
44
- const tracingEnabled = isTracingEnabled(options);
45
- return [
26
+ const providers = [
27
+ { provide: MONITORING_OPTIONS, useValue: options },
46
28
  {
47
29
  provide: ErrorHandler,
48
30
  useFactory: () => createSentryErrorHandler(options)
49
- },
50
- tracingEnabled && {
51
- provide: TraceService,
52
- deps: [Router]
53
- },
54
- // Force instantiate TraceService to avoid require it in any constructor.
55
- tracingEnabled &&
56
- provideAppInitializer(() => {
57
- inject(TraceService);
58
- return;
59
- })
60
- ].filter(Boolean);
61
- };
62
-
63
- const MONITORING_OPTIONS = new InjectionToken('monitoring.options');
64
- function provideMonitoring(options) {
65
- if (!options) {
66
- return [];
67
- }
68
- const providers = [
69
- { provide: MONITORING_OPTIONS, useValue: options }
31
+ }
70
32
  ];
71
- switch (options.provider) {
72
- case 'sentry':
73
- providers.push(...provideSentryMonitoring(options));
74
- break;
75
- default:
76
- break;
33
+ if (integrations) {
34
+ for (const integration of integrations) {
35
+ const value = integration(options);
36
+ providers.push(...value.providers);
37
+ }
77
38
  }
39
+ initSentry(options);
78
40
  return providers;
41
+ };
42
+ var SentryIntegrationKind;
43
+ (function (SentryIntegrationKind) {
44
+ SentryIntegrationKind[SentryIntegrationKind["Tracing"] = 0] = "Tracing";
45
+ SentryIntegrationKind[SentryIntegrationKind["Replay"] = 1] = "Replay";
46
+ })(SentryIntegrationKind || (SentryIntegrationKind = {}));
47
+ function withTracingIntegration(options) {
48
+ return (sentryOptions) => {
49
+ sentryOptions.integrations = [
50
+ ...(sentryOptions.integrations ?? []),
51
+ browserTracingIntegration(options)
52
+ ];
53
+ return {
54
+ kind: SentryIntegrationKind.Tracing,
55
+ providers: [
56
+ {
57
+ provide: TraceService,
58
+ deps: [Router]
59
+ },
60
+ // Force instantiate TraceService to avoid require it in any constructor.
61
+ provideAppInitializer(() => {
62
+ inject(TraceService);
63
+ return;
64
+ })
65
+ ]
66
+ };
67
+ };
79
68
  }
80
69
 
70
+ const identifySentryUser = (user) => {
71
+ setUser(user
72
+ ? {
73
+ id: user.id,
74
+ username: `${user.firstName} ${user.lastName}`,
75
+ email: user.email
76
+ }
77
+ : null);
78
+ };
79
+
81
80
  const MOCK_SENTRY_OPTIONS = {
82
81
  provider: 'sentry',
83
82
  dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0',
@@ -89,5 +88,5 @@ const MOCK_MONITORING_OPTIONS = MOCK_SENTRY_OPTIONS;
89
88
  * Generated bundle index. Do not edit.
90
89
  */
91
90
 
92
- export { MOCK_MONITORING_OPTIONS, MOCK_SENTRY_OPTIONS, MONITORING_OPTIONS, identifySentryUser, isReplayEnabled, isTracingEnabled, provideMonitoring, provideSentryMonitoring };
91
+ export { MOCK_MONITORING_OPTIONS, MOCK_SENTRY_OPTIONS, MONITORING_OPTIONS, SentryIntegrationKind, identifySentryUser, provideSentryMonitoring, withTracingIntegration };
93
92
  //# sourceMappingURL=igo2-core-monitoring.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"igo2-core-monitoring.mjs","sources":["../../../packages/core/monitoring/src/sentry/sentry.utils.ts","../../../packages/core/monitoring/src/sentry/sentry.ts","../../../packages/core/monitoring/src/sentry/sentry.provider.ts","../../../packages/core/monitoring/src/monitoring.provider.ts","../../../packages/core/monitoring/src/__mocks__/monitoring-mock.ts","../../../packages/core/monitoring/src/igo2-core-monitoring.ts"],"sourcesContent":["import { BaseUser } from '@igo2/core/user';\n\nimport { setUser } from '@sentry/angular';\n\nimport { SentryMonitoringOptions } from './sentry.interface';\n\nexport const isTracingEnabled = (options: SentryMonitoringOptions): boolean =>\n !!options.tracesSampleRate || !!options.tracesSampler;\n\nexport const isReplayEnabled = (options: SentryMonitoringOptions): boolean =>\n !!options.replaysSessionSampleRate || !!options.replaysOnErrorSampleRate;\n\nexport const identifySentryUser = (user: BaseUser | null): void => {\n setUser(\n user\n ? {\n id: user.id,\n username: `${user.firstName} ${user.lastName}`,\n email: user.email\n }\n : null\n );\n};\n","import {\n BrowserOptions,\n SentryErrorHandler,\n browserTracingIntegration,\n createErrorHandler,\n getClient,\n init,\n replayIntegration\n} from '@sentry/angular';\n\nimport { SentryMonitoringOptions } from './sentry.interface';\nimport { isReplayEnabled, isTracingEnabled } from './sentry.utils';\n\nexport const createSentryErrorHandler = (\n options: SentryMonitoringOptions\n): SentryErrorHandler => {\n return createErrorHandler({\n logErrors: options.logErrors,\n ...(options.errorHandlerOptions ?? {})\n });\n};\n\nexport const initSentry = (\n options: SentryMonitoringOptions,\n force?: boolean\n): void => {\n const client = getClient();\n if (!force && client) {\n return;\n }\n\n const baseConfig: BrowserOptions = {\n ...options,\n integrations: [\n isTracingEnabled(options) && browserTracingIntegration(),\n isReplayEnabled(options) && replayIntegration()\n ].filter(Boolean)\n };\n\n init(baseConfig);\n};\n","import {\n ConstructorProvider,\n EnvironmentProviders,\n ErrorHandler,\n inject,\n provideAppInitializer\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { TraceService } from '@sentry/angular';\n\nimport { createSentryErrorHandler, initSentry } from './sentry';\nimport { SentryMonitoringOptions } from './sentry.interface';\nimport { isTracingEnabled } from './sentry.utils';\n\nexport const provideSentryMonitoring = (\n options: SentryMonitoringOptions\n): (EnvironmentProviders | ConstructorProvider)[] => {\n const isEnabled = options.enabled !== undefined ? options.enabled : true;\n if (!isEnabled) {\n return [];\n }\n\n initSentry(options);\n\n const tracingEnabled = isTracingEnabled(options);\n\n return [\n {\n provide: ErrorHandler,\n useFactory: () => createSentryErrorHandler(options)\n },\n tracingEnabled && {\n provide: TraceService,\n deps: [Router]\n },\n // Force instantiate TraceService to avoid require it in any constructor.\n tracingEnabled &&\n provideAppInitializer(() => {\n inject(TraceService);\n return;\n })\n ].filter(Boolean);\n};\n","import { EnvironmentProviders, InjectionToken, Provider } from '@angular/core';\n\nimport { provideSentryMonitoring } from './sentry/sentry.provider';\nimport { AnyMonitoringOptions, MonitoringOptions } from './shared';\n\nexport const MONITORING_OPTIONS = new InjectionToken<MonitoringOptions | null>(\n 'monitoring.options'\n);\n\nexport function provideMonitoring(\n options: AnyMonitoringOptions | null\n): (EnvironmentProviders | Provider)[] {\n if (!options) {\n return [];\n }\n\n const providers: (EnvironmentProviders | Provider)[] = [\n { provide: MONITORING_OPTIONS, useValue: options }\n ];\n\n switch (options.provider) {\n case 'sentry':\n providers.push(...provideSentryMonitoring(options));\n break;\n default:\n break;\n }\n\n return providers;\n}\n","import { SentryMonitoringOptions } from '../sentry';\nimport { AnyMonitoringOptions } from '../shared';\n\nexport const MOCK_SENTRY_OPTIONS: SentryMonitoringOptions = {\n provider: 'sentry',\n dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0',\n identifyUser: true\n};\n\nexport const MOCK_MONITORING_OPTIONS: AnyMonitoringOptions =\n MOCK_SENTRY_OPTIONS;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;MAMa,gBAAgB,GAAG,CAAC,OAAgC,KAC/D,CAAC,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC,OAAO,CAAC;MAE7B,eAAe,GAAG,CAAC,OAAgC,KAC9D,CAAC,CAAC,OAAO,CAAC,wBAAwB,IAAI,CAAC,CAAC,OAAO,CAAC;AAErC,MAAA,kBAAkB,GAAG,CAAC,IAAqB,KAAU;AAChE,IAAA,OAAO,CACL;AACE,UAAE;YACE,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAI,CAAA,EAAA,IAAI,CAAC,QAAQ,CAAE,CAAA;YAC9C,KAAK,EAAE,IAAI,CAAC;AACb;UACD,IAAI,CACT;AACH;;ACTO,MAAM,wBAAwB,GAAG,CACtC,OAAgC,KACV;AACtB,IAAA,OAAO,kBAAkB,CAAC;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,QAAA,IAAI,OAAO,CAAC,mBAAmB,IAAI,EAAE;AACtC,KAAA,CAAC;AACJ,CAAC;AAEM,MAAM,UAAU,GAAG,CACxB,OAAgC,EAChC,KAAe,KACP;AACR,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE;QACpB;;AAGF,IAAA,MAAM,UAAU,GAAmB;AACjC,QAAA,GAAG,OAAO;AACV,QAAA,YAAY,EAAE;AACZ,YAAA,gBAAgB,CAAC,OAAO,CAAC,IAAI,yBAAyB,EAAE;AACxD,YAAA,eAAe,CAAC,OAAO,CAAC,IAAI,iBAAiB;SAC9C,CAAC,MAAM,CAAC,OAAO;KACjB;IAED,IAAI,CAAC,UAAU,CAAC;AAClB,CAAC;;ACzBY,MAAA,uBAAuB,GAAG,CACrC,OAAgC,KACkB;AAClD,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI;IACxE,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,OAAO,EAAE;;IAGX,UAAU,CAAC,OAAO,CAAC;AAEnB,IAAA,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAEhD,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,UAAU,EAAE,MAAM,wBAAwB,CAAC,OAAO;AACnD,SAAA;AACD,QAAA,cAAc,IAAI;AAChB,YAAA,OAAO,EAAE,YAAY;YACrB,IAAI,EAAE,CAAC,MAAM;AACd,SAAA;;QAED,cAAc;YACZ,qBAAqB,CAAC,MAAK;gBACzB,MAAM,CAAC,YAAY,CAAC;gBACpB;AACF,aAAC;AACJ,KAAA,CAAC,MAAM,CAAC,OAAO,CAAC;AACnB;;MCtCa,kBAAkB,GAAG,IAAI,cAAc,CAClD,oBAAoB;AAGhB,SAAU,iBAAiB,CAC/B,OAAoC,EAAA;IAEpC,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,OAAO,EAAE;;AAGX,IAAA,MAAM,SAAS,GAAwC;AACrD,QAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO;KACjD;AAED,IAAA,QAAQ,OAAO,CAAC,QAAQ;AACtB,QAAA,KAAK,QAAQ;YACX,SAAS,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACnD;AACF,QAAA;YACE;;AAGJ,IAAA,OAAO,SAAS;AAClB;;AC1Ba,MAAA,mBAAmB,GAA4B;AAC1D,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,GAAG,EAAE,gDAAgD;AACrD,IAAA,YAAY,EAAE;;AAGT,MAAM,uBAAuB,GAClC;;ACVF;;AAEG;;;;"}
1
+ {"version":3,"file":"igo2-core-monitoring.mjs","sources":["../../../packages/core/monitoring/src/shared/monitoring.ts","../../../packages/core/monitoring/src/sentry/sentry.ts","../../../packages/core/monitoring/src/sentry/sentry.provider.ts","../../../packages/core/monitoring/src/sentry/sentry.utils.ts","../../../packages/core/monitoring/src/__mocks__/monitoring-mock.ts","../../../packages/core/monitoring/src/igo2-core-monitoring.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { MonitoringOptions } from './monitoring.interface';\n\nexport const MONITORING_OPTIONS = new InjectionToken<MonitoringOptions | null>(\n 'monitoring.options'\n);\n","import {\n SentryErrorHandler,\n createErrorHandler,\n getClient,\n init\n} from '@sentry/angular';\n\nimport { SentryMonitoringOptions } from './sentry.interface';\n\nexport const createSentryErrorHandler = (\n options: SentryMonitoringOptions\n): SentryErrorHandler => {\n return createErrorHandler({\n logErrors: options.logErrors,\n ...(options.errorHandlerOptions ?? {})\n });\n};\n\nexport const initSentry = (\n options: SentryMonitoringOptions,\n force?: boolean\n): void => {\n const client = getClient();\n if (!force && client) {\n return;\n }\n\n init(options);\n};\n","import {\n EnvironmentProviders,\n ErrorHandler,\n Provider,\n inject,\n provideAppInitializer\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { TraceService, browserTracingIntegration } from '@sentry/angular';\n\nimport { MONITORING_OPTIONS } from '../shared';\nimport { createSentryErrorHandler, initSentry } from './sentry';\nimport { SentryMonitoringOptions } from './sentry.interface';\n\nexport const provideSentryMonitoring = (\n options: SentryMonitoringOptions,\n integrations?: SentryIntegrationFactory<SentryIntegrationKind>[]\n): (Provider | EnvironmentProviders)[] => {\n const isEnabled = options.enabled !== undefined ? options.enabled : true;\n if (!isEnabled) {\n return [];\n }\n\n const providers: (Provider | EnvironmentProviders)[] = [\n { provide: MONITORING_OPTIONS, useValue: options },\n {\n provide: ErrorHandler,\n useFactory: () => createSentryErrorHandler(options)\n }\n ];\n\n if (integrations) {\n for (const integration of integrations) {\n const value = integration(options);\n providers.push(...value.providers);\n }\n }\n\n initSentry(options);\n\n return providers;\n};\n\nexport interface SentryIntegration<KindT extends SentryIntegrationKind> {\n kind: KindT;\n providers: (Provider | EnvironmentProviders)[];\n}\n\ntype SentryIntegrationFactory<KindT extends SentryIntegrationKind> = (\n sentryOptions: SentryMonitoringOptions\n) => SentryIntegration<KindT>;\n\nexport enum SentryIntegrationKind {\n Tracing = 0,\n Replay = 1\n}\n\nexport function withTracingIntegration(\n options: Parameters<typeof browserTracingIntegration>[0]\n): SentryIntegrationFactory<SentryIntegrationKind.Tracing> {\n return (sentryOptions: SentryMonitoringOptions) => {\n sentryOptions.integrations = [\n ...(sentryOptions.integrations ?? []),\n browserTracingIntegration(options)\n ];\n\n return {\n kind: SentryIntegrationKind.Tracing,\n providers: [\n {\n provide: TraceService,\n deps: [Router]\n },\n // Force instantiate TraceService to avoid require it in any constructor.\n provideAppInitializer(() => {\n inject(TraceService);\n return;\n })\n ]\n };\n };\n}\n","import { BaseUser } from '@igo2/core/user';\n\nimport { setUser } from '@sentry/angular';\n\nexport const identifySentryUser = (user: BaseUser | null): void => {\n setUser(\n user\n ? {\n id: user.id,\n username: `${user.firstName} ${user.lastName}`,\n email: user.email\n }\n : null\n );\n};\n","import { SentryMonitoringOptions } from '../sentry';\nimport { AnyMonitoringOptions } from '../shared';\n\nexport const MOCK_SENTRY_OPTIONS: SentryMonitoringOptions = {\n provider: 'sentry',\n dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0',\n identifyUser: true\n};\n\nexport const MOCK_MONITORING_OPTIONS: AnyMonitoringOptions =\n MOCK_SENTRY_OPTIONS;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;MAIa,kBAAkB,GAAG,IAAI,cAAc,CAClD,oBAAoB;;ACIf,MAAM,wBAAwB,GAAG,CACtC,OAAgC,KACV;AACtB,IAAA,OAAO,kBAAkB,CAAC;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,QAAA,IAAI,OAAO,CAAC,mBAAmB,IAAI,EAAE;AACtC,KAAA,CAAC;AACJ,CAAC;AAEM,MAAM,UAAU,GAAG,CACxB,OAAgC,EAChC,KAAe,KACP;AACR,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE;QACpB;;IAGF,IAAI,CAAC,OAAO,CAAC;AACf,CAAC;;MCbY,uBAAuB,GAAG,CACrC,OAAgC,EAChC,YAAgE,KACzB;AACvC,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI;IACxE,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,OAAO,EAAE;;AAGX,IAAA,MAAM,SAAS,GAAwC;AACrD,QAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE;AAClD,QAAA;AACE,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,UAAU,EAAE,MAAM,wBAAwB,CAAC,OAAO;AACnD;KACF;IAED,IAAI,YAAY,EAAE;AAChB,QAAA,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC;YAClC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;;;IAItC,UAAU,CAAC,OAAO,CAAC;AAEnB,IAAA,OAAO,SAAS;AAClB;IAWY;AAAZ,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,qBAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;AACZ,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,GAGhC,EAAA,CAAA,CAAA;AAEK,SAAU,sBAAsB,CACpC,OAAwD,EAAA;IAExD,OAAO,CAAC,aAAsC,KAAI;QAChD,aAAa,CAAC,YAAY,GAAG;AAC3B,YAAA,IAAI,aAAa,CAAC,YAAY,IAAI,EAAE,CAAC;YACrC,yBAAyB,CAAC,OAAO;SAClC;QAED,OAAO;YACL,IAAI,EAAE,qBAAqB,CAAC,OAAO;AACnC,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,YAAY;oBACrB,IAAI,EAAE,CAAC,MAAM;AACd,iBAAA;;gBAED,qBAAqB,CAAC,MAAK;oBACzB,MAAM,CAAC,YAAY,CAAC;oBACpB;AACF,iBAAC;AACF;SACF;AACH,KAAC;AACH;;AC9Ea,MAAA,kBAAkB,GAAG,CAAC,IAAqB,KAAU;AAChE,IAAA,OAAO,CACL;AACE,UAAE;YACE,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAI,CAAA,EAAA,IAAI,CAAC,QAAQ,CAAE,CAAA;YAC9C,KAAK,EAAE,IAAI,CAAC;AACb;UACD,IAAI,CACT;AACH;;ACXa,MAAA,mBAAmB,GAA4B;AAC1D,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,GAAG,EAAE,gDAAgD;AACrD,IAAA,YAAY,EAAE;;AAGT,MAAM,uBAAuB,GAClC;;ACVF;;AAEG;;;;"}
@@ -11,6 +11,7 @@ export declare class LanguageLoader implements LanguageLoaderBase {
11
11
  options: LanguageOptions;
12
12
  baseUrl: string;
13
13
  constructor(handler: HttpBackend, options: LanguageOptions);
14
+ private getServerUrl;
14
15
  getTranslation(lang: string): Observable<any>;
15
16
  }
16
17
  export declare class LanguageLoaderWithAsyncConfig extends LanguageLoader {
@@ -1,4 +1,3 @@
1
1
  export * from './sentry';
2
2
  export * from './shared';
3
- export * from './monitoring.provider';
4
3
  export * from './__mocks__';
@@ -1,6 +1,8 @@
1
1
  import { BrowserOptions, ErrorHandlerOptions } from '@sentry/angular';
2
+ import { Integration } from '@sentry/core';
2
3
  import { MonitoringOptions } from '../shared/monitoring.interface';
3
4
  export type SentryMonitoringOptions = BrowserOptions & MonitoringOptions & {
4
5
  provider: 'sentry';
5
6
  errorHandlerOptions?: ErrorHandlerOptions;
7
+ integrations?: Integration[];
6
8
  };
@@ -1,3 +1,15 @@
1
- import { ConstructorProvider, EnvironmentProviders } from '@angular/core';
1
+ import { EnvironmentProviders, Provider } from '@angular/core';
2
+ import { browserTracingIntegration } from '@sentry/angular';
2
3
  import { SentryMonitoringOptions } from './sentry.interface';
3
- export declare const provideSentryMonitoring: (options: SentryMonitoringOptions) => (EnvironmentProviders | ConstructorProvider)[];
4
+ export declare const provideSentryMonitoring: (options: SentryMonitoringOptions, integrations?: SentryIntegrationFactory<SentryIntegrationKind>[]) => (Provider | EnvironmentProviders)[];
5
+ export interface SentryIntegration<KindT extends SentryIntegrationKind> {
6
+ kind: KindT;
7
+ providers: (Provider | EnvironmentProviders)[];
8
+ }
9
+ type SentryIntegrationFactory<KindT extends SentryIntegrationKind> = (sentryOptions: SentryMonitoringOptions) => SentryIntegration<KindT>;
10
+ export declare enum SentryIntegrationKind {
11
+ Tracing = 0,
12
+ Replay = 1
13
+ }
14
+ export declare function withTracingIntegration(options: Parameters<typeof browserTracingIntegration>[0]): SentryIntegrationFactory<SentryIntegrationKind.Tracing>;
15
+ export {};
@@ -1,5 +1,2 @@
1
1
  import { BaseUser } from '@igo2/core/user';
2
- import { SentryMonitoringOptions } from './sentry.interface';
3
- export declare const isTracingEnabled: (options: SentryMonitoringOptions) => boolean;
4
- export declare const isReplayEnabled: (options: SentryMonitoringOptions) => boolean;
5
2
  export declare const identifySentryUser: (user: BaseUser | null) => void;
@@ -1,2 +1,3 @@
1
1
  export * from './any-monitoring.interface';
2
2
  export * from './monitoring.interface';
3
+ export * from './monitoring';
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { MonitoringOptions } from './monitoring.interface';
3
+ export declare const MONITORING_OPTIONS: InjectionToken<MonitoringOptions>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@igo2/core",
3
- "version": "19.0.0-next.21",
3
+ "version": "19.0.0-next.23",
4
4
  "description": "IGO Library",
5
5
  "author": "IGO Community",
6
6
  "keywords": [
@@ -109,7 +109,7 @@
109
109
  "@angular/core": "^19.0.0",
110
110
  "@angular/platform-browser": "^19.0.0",
111
111
  "@angular/router": "^19.0.0",
112
- "@igo2/utils": "^19.0.0-next.21",
112
+ "@igo2/utils": "^19.0.0-next.23",
113
113
  "ngx-toastr": "^19.0.0",
114
114
  "@ngx-translate/core": "^16.0.0",
115
115
  "@ngx-translate/http-loader": "^16.0.0",
@@ -1,4 +0,0 @@
1
- import { EnvironmentProviders, InjectionToken, Provider } from '@angular/core';
2
- import { AnyMonitoringOptions, MonitoringOptions } from './shared';
3
- export declare const MONITORING_OPTIONS: InjectionToken<MonitoringOptions>;
4
- export declare function provideMonitoring(options: AnyMonitoringOptions | null): (EnvironmentProviders | Provider)[];