@o3r/components 10.3.0-prerelease.9 → 10.4.0-prerelease.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/devkit/components-devkit.interface.d.ts +9 -1
  2. package/devkit/components-devkit.interface.d.ts.map +1 -1
  3. package/devkit/components-devtools.message.service.d.ts +5 -2
  4. package/devkit/components-devtools.message.service.d.ts.map +1 -1
  5. package/devkit/components-devtools.module.d.ts +2 -1
  6. package/devkit/components-devtools.module.d.ts.map +1 -1
  7. package/esm2022/devkit/components-devkit.interface.mjs +2 -1
  8. package/esm2022/devkit/components-devtools.message.service.mjs +14 -6
  9. package/esm2022/devkit/components-devtools.module.mjs +11 -7
  10. package/esm2022/rules-engine/placeholder.action-handler.mjs +18 -14
  11. package/esm2022/rules-engine/placeholder.rules-engine.effect.mjs +3 -3
  12. package/esm2022/rules-engine/placeholder.rules-engine.module.mjs +4 -4
  13. package/esm2022/stores/placeholder-request/placeholder-request.module.mjs +4 -4
  14. package/esm2022/stores/placeholder-template/placeholder-template.actions.mjs +3 -1
  15. package/esm2022/stores/placeholder-template/placeholder-template.module.mjs +4 -4
  16. package/esm2022/stores/placeholder-template/placeholder-template.reducer.mjs +10 -2
  17. package/esm2022/stores/placeholder-template/placeholder-template.selectors.mjs +2 -1
  18. package/esm2022/stores/placeholder-template/placeholder-template.state.mjs +1 -1
  19. package/esm2022/tools/component-replacement/c11n.directive.mjs +3 -3
  20. package/esm2022/tools/component-replacement/c11n.mock.module.mjs +10 -10
  21. package/esm2022/tools/component-replacement/c11n.module.mjs +4 -4
  22. package/esm2022/tools/component-replacement/c11n.service.mjs +3 -3
  23. package/esm2022/tools/pipes/capitalize/capitalize.module.mjs +4 -4
  24. package/esm2022/tools/pipes/capitalize/capitalize.pipe.mjs +6 -6
  25. package/esm2022/tools/pipes/duration/duration.module.mjs +4 -4
  26. package/esm2022/tools/pipes/duration/duration.pipe.mjs +6 -6
  27. package/esm2022/tools/pipes/keep-white-space/keep-white-space.module.mjs +4 -4
  28. package/esm2022/tools/pipes/keep-white-space/keep-white-space.pipe.mjs +6 -6
  29. package/esm2022/tools/pipes/replace-with-bold/replace-with-bold.module.mjs +4 -4
  30. package/esm2022/tools/pipes/replace-with-bold/replace-with-bold.pipe.mjs +6 -6
  31. package/esm2022/tools/placeholder/placeholder.component.mjs +11 -13
  32. package/esm2022/tools/placeholder/placeholder.module.mjs +5 -5
  33. package/fesm2022/o3r-components-rules-engine.mjs +23 -19
  34. package/fesm2022/o3r-components-rules-engine.mjs.map +1 -1
  35. package/fesm2022/o3r-components.mjs +445 -427
  36. package/fesm2022/o3r-components.mjs.map +1 -1
  37. package/package.json +14 -14
  38. package/rules-engine/placeholder.action-handler.d.ts +7 -6
  39. package/rules-engine/placeholder.action-handler.d.ts.map +1 -1
  40. package/schemas/placeholder-template.schema.json +1 -1
  41. package/stores/placeholder-template/placeholder-template.actions.d.ts +6 -1
  42. package/stores/placeholder-template/placeholder-template.actions.d.ts.map +1 -1
  43. package/stores/placeholder-template/placeholder-template.reducer.d.ts.map +1 -1
  44. package/stores/placeholder-template/placeholder-template.selectors.d.ts +1 -0
  45. package/stores/placeholder-template/placeholder-template.selectors.d.ts.map +1 -1
  46. package/stores/placeholder-template/placeholder-template.state.d.ts +3 -0
  47. package/stores/placeholder-template/placeholder-template.state.d.ts.map +1 -1
  48. package/tools/placeholder/placeholder.component.d.ts +5 -3
  49. package/tools/placeholder/placeholder.component.d.ts.map +1 -1
@@ -1,15 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, Injectable, Optional, NgModule } from '@angular/core';
2
+ import { Injectable, Optional, NgModule } from '@angular/core';
3
3
  import * as i1$1 from '@ngrx/effects';
4
4
  import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
5
5
  import { selectPlaceholderTemplateEntities, selectPlaceholderRequestEntities, deletePlaceholderTemplateEntity, setPlaceholderTemplateEntity, updatePlaceholderRequestEntity, setPlaceholderRequestEntityFromUrl, selectPlaceholderRequestEntityUsage, failPlaceholderRequestEntity, cancelPlaceholderRequest, PlaceholderRequestStoreModule, PlaceholderTemplateStoreModule } from '@o3r/components';
6
- import * as i2 from '@o3r/logger';
7
- import { Subscription, Subject, map, distinctUntilChanged, of, combineLatest, withLatestFrom, firstValueFrom, EMPTY } from 'rxjs';
8
6
  import * as i1 from '@ngrx/store';
9
7
  import { select } from '@ngrx/store';
10
- import * as i3 from '@o3r/localization';
11
8
  import * as i4 from '@o3r/dynamic-content';
12
9
  import { DynamicContentService } from '@o3r/dynamic-content';
10
+ import * as i3 from '@o3r/localization';
11
+ import * as i2 from '@o3r/logger';
12
+ import { Subscription, Subject, map, startWith, distinctUntilChanged, of, combineLatest, withLatestFrom, firstValueFrom, EMPTY } from 'rxjs';
13
13
  import { fromApiEffectSwitchMapById } from '@o3r/core';
14
14
  import { map as map$1, distinctUntilChanged as distinctUntilChanged$1, switchMap, take } from 'rxjs/operators';
15
15
  import { JSONPath } from 'jsonpath-plus';
@@ -22,14 +22,18 @@ const RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE = 'UPDATE_PLACEHOLDER';
22
22
  * Service to handle async PlaceholderTemplate actions
23
23
  */
24
24
  class PlaceholderRulesEngineActionHandler {
25
- constructor(store, logger, translateService) {
25
+ constructor(store, logger, injector, translateService) {
26
26
  this.logger = logger;
27
+ this.injector = injector;
27
28
  this.subscription = new Subscription();
28
29
  this.placeholdersActions$ = new Subject();
29
30
  /** @inheritdoc */
30
31
  this.supportingActions = [RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE];
31
- const lang$ = translateService ? translateService.getTranslateService().onLangChange.pipe(map(({ lang }) => lang), distinctUntilChanged()) : of(null);
32
- const filteredActions$ = combineLatest([lang$, this.placeholdersActions$.pipe(distinctUntilChanged((prev, next) => JSON.stringify(prev) === JSON.stringify(next)))]).pipe(withLatestFrom(combineLatest([store.pipe(select(selectPlaceholderTemplateEntities)), store.pipe(select(selectPlaceholderRequestEntities))])), map(([langAndTemplatesUrls, storedPlaceholdersAndRequests]) => {
32
+ const lang$ = translateService ? translateService.getTranslateService().onLangChange.pipe(map(({ lang }) => lang), startWith(translateService.getCurrentLanguage()), distinctUntilChanged()) : of(null);
33
+ const filteredActions$ = combineLatest([
34
+ lang$,
35
+ this.placeholdersActions$.pipe(distinctUntilChanged((prev, next) => JSON.stringify(prev) === JSON.stringify(next)))
36
+ ]).pipe(withLatestFrom(combineLatest([store.pipe(select(selectPlaceholderTemplateEntities)), store.pipe(select(selectPlaceholderRequestEntities))])), map(([langAndTemplatesUrls, storedPlaceholdersAndRequests]) => {
33
37
  const [lang, placeholderActions] = langAndTemplatesUrls;
34
38
  const storedPlaceholders = storedPlaceholdersAndRequests[0] || {};
35
39
  const storedPlaceholderRequests = storedPlaceholdersAndRequests[1] || {};
@@ -134,7 +138,7 @@ class PlaceholderRulesEngineActionHandler {
134
138
  * @param url
135
139
  */
136
140
  async retrieveTemplate(url) {
137
- const resolvedUrl$ = inject(DynamicContentService, { optional: true })?.getContentPathStream(url) || of(url);
141
+ const resolvedUrl$ = this.injector.get(DynamicContentService, null, { optional: true })?.getContentPathStream(url) || of(url);
138
142
  const fullUrl = await firstValueFrom(resolvedUrl$);
139
143
  return fetch(fullUrl).then((response) => response.json());
140
144
  }
@@ -151,12 +155,12 @@ class PlaceholderRulesEngineActionHandler {
151
155
  ngOnDestroy() {
152
156
  this.subscription.unsubscribe();
153
157
  }
154
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: PlaceholderRulesEngineActionHandler, deps: [{ token: i1.Store }, { token: i2.LoggerService }, { token: i3.LocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
155
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: PlaceholderRulesEngineActionHandler }); }
158
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PlaceholderRulesEngineActionHandler, deps: [{ token: i1.Store }, { token: i2.LoggerService }, { token: i0.Injector }, { token: i3.LocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
159
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PlaceholderRulesEngineActionHandler }); }
156
160
  }
157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: PlaceholderRulesEngineActionHandler, decorators: [{
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PlaceholderRulesEngineActionHandler, decorators: [{
158
162
  type: Injectable
159
- }], ctorParameters: () => [{ type: i1.Store }, { type: i2.LoggerService }, { type: i3.LocalizationService, decorators: [{
163
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2.LoggerService }, { type: i0.Injector }, { type: i3.LocalizationService, decorators: [{
160
164
  type: Optional
161
165
  }] }] });
162
166
 
@@ -266,10 +270,10 @@ class PlaceholderTemplateResponseEffect {
266
270
  unknownTypeFound
267
271
  }))) : of({ renderedTemplate: template, unknownTypeFound });
268
272
  }
269
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: PlaceholderTemplateResponseEffect, deps: [{ token: i1$1.Actions }, { token: i1.Store }, { token: i3$1.RulesEngineRunnerService, optional: true }, { token: i4.DynamicContentService, optional: true }, { token: i3.LocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
270
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: PlaceholderTemplateResponseEffect }); }
273
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PlaceholderTemplateResponseEffect, deps: [{ token: i1$1.Actions }, { token: i1.Store }, { token: i3$1.RulesEngineRunnerService, optional: true }, { token: i4.DynamicContentService, optional: true }, { token: i3.LocalizationService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
274
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PlaceholderTemplateResponseEffect }); }
271
275
  }
272
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: PlaceholderTemplateResponseEffect, decorators: [{
276
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PlaceholderTemplateResponseEffect, decorators: [{
273
277
  type: Injectable
274
278
  }], ctorParameters: () => [{ type: i1$1.Actions }, { type: i1.Store }, { type: i3$1.RulesEngineRunnerService, decorators: [{
275
279
  type: Optional
@@ -280,16 +284,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
280
284
  }] }] });
281
285
 
282
286
  class PlaceholderRulesEngineActionModule {
283
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: PlaceholderRulesEngineActionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
284
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: PlaceholderRulesEngineActionModule, imports: [i1$1.EffectsFeatureModule, PlaceholderRequestStoreModule,
287
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PlaceholderRulesEngineActionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
288
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.6", ngImport: i0, type: PlaceholderRulesEngineActionModule, imports: [i1$1.EffectsFeatureModule, PlaceholderRequestStoreModule,
285
289
  PlaceholderTemplateStoreModule] }); }
286
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: PlaceholderRulesEngineActionModule, providers: [
290
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PlaceholderRulesEngineActionModule, providers: [
287
291
  PlaceholderRulesEngineActionHandler
288
292
  ], imports: [EffectsModule.forFeature([PlaceholderTemplateResponseEffect]),
289
293
  PlaceholderRequestStoreModule,
290
294
  PlaceholderTemplateStoreModule] }); }
291
295
  }
292
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: PlaceholderRulesEngineActionModule, decorators: [{
296
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PlaceholderRulesEngineActionModule, decorators: [{
293
297
  type: NgModule,
294
298
  args: [{
295
299
  imports: [
@@ -1 +1 @@
1
- {"version":3,"file":"o3r-components-rules-engine.mjs","sources":["../../src/rules-engine/placeholder.interfaces.ts","../../src/rules-engine/placeholder.action-handler.ts","../../src/rules-engine/placeholder.rules-engine.effect.ts","../../src/rules-engine/placeholder.rules-engine.module.ts","../../src/rules-engine/o3r-components-rules-engine.ts"],"sourcesContent":["import type { RulesEngineAction } from '@o3r/core';\n\n/** ActionUpdatePlaceholderBlock */\nexport const RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE = 'UPDATE_PLACEHOLDER';\n\n/**\n * Content of action that updates a placeholder\n */\nexport interface ActionUpdatePlaceholderBlock extends RulesEngineAction {\n actionType: typeof RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE;\n placeholderId: string;\n value: string;\n priority?: number;\n}\n","import { inject, Injectable, OnDestroy, Optional } from '@angular/core';\nimport type { RulesEngineActionHandler } from '@o3r/core';\nimport { LoggerService } from '@o3r/logger';\nimport { combineLatest, distinctUntilChanged, firstValueFrom, map, of, Subject, Subscription, withLatestFrom } from 'rxjs';\nimport {\n deletePlaceholderTemplateEntity,\n PlaceholderRequestReply,\n PlaceholderTemplateStore,\n selectPlaceholderRequestEntities,\n selectPlaceholderTemplateEntities,\n setPlaceholderRequestEntityFromUrl,\n setPlaceholderTemplateEntity,\n updatePlaceholderRequestEntity\n} from '@o3r/components';\nimport { select, Store } from '@ngrx/store';\nimport { LocalizationService } from '@o3r/localization';\nimport { ActionUpdatePlaceholderBlock, RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE } from './placeholder.interfaces';\nimport { DynamicContentService } from '@o3r/dynamic-content';\n\n/**\n * Service to handle async PlaceholderTemplate actions\n */\n@Injectable()\nexport class PlaceholderRulesEngineActionHandler implements OnDestroy, RulesEngineActionHandler<ActionUpdatePlaceholderBlock> {\n\n protected subscription = new Subscription();\n\n protected placeholdersActions$: Subject<{ placeholderId: string; templateUrl: string; priority: number }[]> = new Subject();\n\n /** @inheritdoc */\n public readonly supportingActions = [RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE] as const;\n\n constructor(store: Store<PlaceholderTemplateStore>, private readonly logger: LoggerService, @Optional() translateService?: LocalizationService) {\n\n const lang$ = translateService ? translateService.getTranslateService().onLangChange.pipe(\n map(({ lang }) => lang),\n distinctUntilChanged()\n ) : of(null);\n\n const filteredActions$ = combineLatest([lang$, this.placeholdersActions$.pipe(\n distinctUntilChanged((prev, next) => JSON.stringify(prev) === JSON.stringify(next)))]).pipe(\n withLatestFrom(\n combineLatest([store.pipe(select(selectPlaceholderTemplateEntities)), store.pipe(select(selectPlaceholderRequestEntities))])\n ),\n map(([langAndTemplatesUrls, storedPlaceholdersAndRequests]) => {\n const [lang, placeholderActions] = langAndTemplatesUrls;\n const storedPlaceholders = storedPlaceholdersAndRequests[0] || {};\n const storedPlaceholderRequests = storedPlaceholdersAndRequests[1] || {};\n const placeholderNewRequests: { rawUrl: string; resolvedUrl: string }[] = [];\n // Stores all raw Urls used from the current engine execution\n const usedUrls: Record<string, boolean> = {};\n // Get all Urls that needs to be resolved from current rules engine output\n const placeholdersTemplates = placeholderActions.reduce((acc, placeholderAction) => {\n const placeholdersTemplateUrl = {\n rawUrl: placeholderAction.templateUrl,\n priority: placeholderAction.priority\n };\n if (acc[placeholderAction.placeholderId]) {\n acc[placeholderAction.placeholderId].push(placeholdersTemplateUrl);\n } else {\n acc[placeholderAction.placeholderId] = [placeholdersTemplateUrl];\n }\n const resolvedUrl = this.resolveUrlWithLang(placeholderAction.templateUrl, lang);\n // Filters duplicates and resolved urls that are already in the store\n if (!usedUrls[placeholderAction.templateUrl] && (!storedPlaceholderRequests[placeholderAction.templateUrl]\n || storedPlaceholderRequests[placeholderAction.templateUrl]!.resolvedUrl !== resolvedUrl)) {\n placeholderNewRequests.push({\n rawUrl: placeholderAction.templateUrl,\n resolvedUrl: this.resolveUrlWithLang(placeholderAction.templateUrl, lang)\n });\n }\n usedUrls[placeholderAction.templateUrl] = true;\n return acc;\n }, {} as { [key: string]: { rawUrl: string; priority: number }[] });\n // Urls not used anymore and not already disabled\n const placeholderRequestsToDisable: string[] = [];\n // Urls used that were disabled\n const placeholderRequestsToEnable: string[] = [];\n Object.keys(storedPlaceholderRequests).forEach((storedPlaceholderRequestRawUrl) => {\n const usedFromEngineIteration = usedUrls[storedPlaceholderRequestRawUrl];\n const usedFromStore = (storedPlaceholderRequests && storedPlaceholderRequests[storedPlaceholderRequestRawUrl]) ? storedPlaceholderRequests[storedPlaceholderRequestRawUrl]!.used : false;\n if (!usedFromEngineIteration && usedFromStore) {\n placeholderRequestsToDisable.push(storedPlaceholderRequestRawUrl);\n } else if (usedFromEngineIteration && !usedFromStore) {\n placeholderRequestsToEnable.push(storedPlaceholderRequestRawUrl);\n }\n });\n // Placeholder that are no longer filled by the current engine execution output will be cleared\n const placeholdersTemplatesToBeCleanedUp = Object.keys(storedPlaceholders)\n .filter(placeholderId => !placeholdersTemplates[placeholderId]);\n\n const placeholdersTemplatesToBeSet = Object.keys(placeholdersTemplates).reduce((changedPlaceholderTemplates, placeholderTemplateId) => {\n // Caching if the placeholder template already exists with the same urls\n if (!storedPlaceholders[placeholderTemplateId] ||\n !(JSON.stringify(storedPlaceholders[placeholderTemplateId]!.urlsWithPriority) === JSON.stringify(placeholdersTemplates[placeholderTemplateId]))) {\n changedPlaceholderTemplates.push({\n id: placeholderTemplateId,\n urlsWithPriority: placeholdersTemplates[placeholderTemplateId]\n });\n }\n return changedPlaceholderTemplates;\n }, [] as { id: string; urlsWithPriority: { rawUrl: string; priority: number }[] }[]);\n return {\n placeholdersTemplatesToBeCleanedUp,\n placeholderRequestsToDisable,\n placeholderRequestsToEnable,\n placeholdersTemplatesToBeSet,\n placeholderNewRequests\n };\n })\n );\n this.subscription.add(filteredActions$.subscribe((placeholdersUpdates) => {\n placeholdersUpdates.placeholdersTemplatesToBeCleanedUp.forEach(placeholderId =>\n store.dispatch(deletePlaceholderTemplateEntity({\n id: placeholderId\n }))\n );\n placeholdersUpdates.placeholdersTemplatesToBeSet.forEach(placeholdersTemplateToBeSet => {\n store.dispatch(setPlaceholderTemplateEntity({ entity: placeholdersTemplateToBeSet }));\n });\n placeholdersUpdates.placeholderRequestsToDisable.forEach(placeholderRequestToDisable => {\n store.dispatch(updatePlaceholderRequestEntity({ entity: { id: placeholderRequestToDisable, used: false } }));\n });\n placeholdersUpdates.placeholderRequestsToEnable.forEach(placeholderRequestToEnable => {\n store.dispatch(updatePlaceholderRequestEntity({ entity: { id: placeholderRequestToEnable, used: true } }));\n });\n placeholdersUpdates.placeholderNewRequests.forEach(placeholderNewRequest => {\n store.dispatch(setPlaceholderRequestEntityFromUrl({\n resolvedUrl: placeholderNewRequest.resolvedUrl,\n id: placeholderNewRequest.rawUrl,\n call: this.retrieveTemplate(placeholderNewRequest.resolvedUrl)\n }));\n });\n }));\n }\n\n /**\n * Localize the url, replacing the language marker\n * @param url\n * @param language\n */\n protected resolveUrlWithLang(url: string, language: string | null): string {\n if (!language && url.includes('[LANGUAGE]')) {\n this.logger.warn(`Missing language when trying to resolve ${url}`);\n }\n return language ? url.replace(/\\[LANGUAGE]/g, language) : url;\n }\n\n /**\n * Retrieve template as json from a given url\n * @param url\n */\n protected async retrieveTemplate(url: string): Promise<PlaceholderRequestReply> {\n const resolvedUrl$ = inject(DynamicContentService, { optional: true })?.getContentPathStream(url) || of(url);\n const fullUrl = await firstValueFrom(resolvedUrl$);\n return fetch(fullUrl).then((response) => response.json());\n }\n\n /** @inheritdoc */\n public executeActions(actions: ActionUpdatePlaceholderBlock[]) {\n const templates = actions.map((action) => ({\n placeholderId: action.placeholderId,\n templateUrl: action.value,\n priority: action.priority || 0\n }));\n\n this.placeholdersActions$.next(templates);\n }\n\n /** @inheritdoc */\n public ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n}\n","import {Injectable, Optional} from '@angular/core';\nimport {Actions, createEffect, ofType} from '@ngrx/effects';\nimport {\n cancelPlaceholderRequest,\n failPlaceholderRequestEntity,\n PlaceholderRequestStore,\n PlaceholderVariable,\n selectPlaceholderRequestEntityUsage,\n setPlaceholderRequestEntityFromUrl,\n updatePlaceholderRequestEntity\n} from '@o3r/components';\nimport {fromApiEffectSwitchMapById} from '@o3r/core';\nimport {DynamicContentService} from '@o3r/dynamic-content';\nimport {LocalizationService} from '@o3r/localization';\nimport {RulesEngineRunnerService} from '@o3r/rules-engine';\nimport {combineLatest, EMPTY, Observable, of} from 'rxjs';\nimport {distinctUntilChanged, map, switchMap, take} from 'rxjs/operators';\nimport {Store} from '@ngrx/store';\nimport { JSONPath } from 'jsonpath-plus';\n\n/**\n * Service to handle async PlaceholderTemplate actions\n */\n@Injectable()\nexport class PlaceholderTemplateResponseEffect {\n /**\n * Set the PlaceholderRequest entity with the reply content, dispatch failPlaceholderRequestEntity if it catches a failure\n * Handles the rendering of the HTML content from the template and creates the combine latest from facts list if needed\n * Disables unused templates refresh if used is false in the store\n */\n public setPlaceholderRequestEntityFromUrl$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setPlaceholderRequestEntityFromUrl),\n fromApiEffectSwitchMapById(\n (templateResponse, action) => {\n const facts = templateResponse.vars ? Object.entries(templateResponse.vars).filter(([, variable]) => variable.type === 'fact') : [];\n const factsStreamsList = this.rulesEngineService ? facts.map(([varName, fact]) =>\n this.rulesEngineService!.engine.retrieveOrCreateFactStream(fact.value).pipe(\n map((factValue) => ({\n varName,\n factName: fact.value,\n // eslint-disable-next-line new-cap\n factValue: (fact.path && factValue) ? JSONPath({ wrap: false, json: factValue, path: fact.path }) : factValue\n })),\n distinctUntilChanged((previous, current) => previous.factValue === current.factValue)\n )) : [];\n\n const factsStreamsList$ = factsStreamsList.length ? combineLatest(factsStreamsList) : of([]);\n return combineLatest([factsStreamsList$, this.store.select(selectPlaceholderRequestEntityUsage(action.id)).pipe(distinctUntilChanged())]).pipe(\n switchMap(([factsUsedInTemplate, placeholderRequestUsage]) => {\n if (!placeholderRequestUsage) {\n return EMPTY;\n }\n return this.getRenderedHTML$(templateResponse.template, templateResponse.vars, factsUsedInTemplate).pipe(\n map(({renderedTemplate, unknownTypeFound}) =>\n // Update instead of set because used already set by the update from url action\n updatePlaceholderRequestEntity({\n entity: {\n ...templateResponse,\n resolvedUrl: action.resolvedUrl,\n id: action.id,\n renderedTemplate,\n unknownTypeFound\n },\n requestId: action.requestId\n })\n )\n );\n }));\n },\n (error, action) => of(failPlaceholderRequestEntity({ids: [action.id], error, requestId: action.requestId})),\n (requestIdPayload, action) => cancelPlaceholderRequest({...requestIdPayload, id: action.id})\n )\n )\n );\n\n constructor(\n private readonly actions$: Actions,\n private readonly store: Store<PlaceholderRequestStore>,\n @Optional() private readonly rulesEngineService: RulesEngineRunnerService | null,\n @Optional() private readonly dynamicContentService: DynamicContentService | null,\n @Optional() private readonly translationService: LocalizationService | null) {\n }\n\n /**\n * Renders the html template, replacing facts and urls and localizationKeys\n * @param template\n * @param vars\n * @param facts\n */\n private getRenderedHTML$(template?: string, vars?: Record<string, PlaceholderVariable>, facts?: { varName: string; factName: string; factValue: any }[]) {\n let unknownTypeFound = false;\n const factMap = (facts || []).reduce((mapping: { [key: string]: any }, fact) => {\n mapping[fact.factName] = fact.factValue;\n return mapping;\n }, {});\n const factMapFromVars = (facts || []).reduce((mapping: { [key: string]: any }, fact) => {\n mapping[fact.varName] = fact.factValue;\n return mapping;\n }, {});\n const replacements$: Observable<{ ejsVar: RegExp; value: string } | null>[] = [];\n if (vars && template) {\n for (const varName in vars) {\n if (Object.prototype.hasOwnProperty.call(vars, varName)) {\n const ejsVar = new RegExp(`<%=\\\\s*${varName}\\\\s*%>`, 'g');\n switch (vars[varName].type) {\n case 'relativeUrl': {\n replacements$.push(\n this.dynamicContentService?.getMediaPathStream(vars[varName].value).pipe(\n take(1),\n map((value: string) => ({ejsVar, value}))\n ) || of({ ejsVar, value: vars[varName].value })\n );\n break;\n }\n case 'fullUrl': {\n template = template.replace(ejsVar, vars[varName].value);\n break;\n }\n case 'fact': {\n template = template.replace(ejsVar, factMap[vars[varName].value] ?? '');\n break;\n }\n case 'localisation': {\n const linkedVars = (vars[varName].vars || []).reduce((acc: { [key: string]: any }, parameter) => {\n const paramName = vars[parameter].value;\n acc[paramName] = factMap[paramName];\n return acc;\n }, {});\n const linkedParams = (Object.entries(vars[varName].parameters || {})).reduce((acc: { [key: string]: any }, [paramKey, paramValue]) => {\n acc[paramKey] = factMapFromVars[paramValue];\n return acc;\n }, linkedVars);\n replacements$.push(\n this.translationService ?\n this.translationService.translate(vars[varName].value, linkedParams).pipe(\n map((value) => (value ? { ejsVar, value } : null))\n ) :\n of(null)\n );\n break;\n }\n default : {\n unknownTypeFound = true;\n break;\n }\n }\n }\n }\n }\n return replacements$.length > 0 && !!template ?\n combineLatest(replacements$).pipe(\n map((replacements) => ({\n renderedTemplate: replacements.reduce(\n (acc, replacement) =>\n replacement ? acc.replace(replacement.ejsVar, replacement.value) : acc,\n template\n ),\n unknownTypeFound\n }))\n ) : of({renderedTemplate: template, unknownTypeFound});\n }\n}\n","import { NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { PlaceholderRequestStoreModule, PlaceholderTemplateStoreModule } from '@o3r/components';\nimport { PlaceholderRulesEngineActionHandler } from './placeholder.action-handler';\nimport { PlaceholderTemplateResponseEffect } from './placeholder.rules-engine.effect';\n\n@NgModule({\n imports: [\n EffectsModule.forFeature([PlaceholderTemplateResponseEffect]),\n PlaceholderRequestStoreModule,\n PlaceholderTemplateStoreModule\n ],\n providers: [\n PlaceholderRulesEngineActionHandler\n ]\n})\nexport class PlaceholderRulesEngineActionModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["map","distinctUntilChanged","i1","i2","i3","i5"],"mappings":"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"}
1
+ {"version":3,"file":"o3r-components-rules-engine.mjs","sources":["../../src/rules-engine/placeholder.interfaces.ts","../../src/rules-engine/placeholder.action-handler.ts","../../src/rules-engine/placeholder.rules-engine.effect.ts","../../src/rules-engine/placeholder.rules-engine.module.ts","../../src/rules-engine/o3r-components-rules-engine.ts"],"sourcesContent":["import type { RulesEngineAction } from '@o3r/core';\n\n/** ActionUpdatePlaceholderBlock */\nexport const RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE = 'UPDATE_PLACEHOLDER';\n\n/**\n * Content of action that updates a placeholder\n */\nexport interface ActionUpdatePlaceholderBlock extends RulesEngineAction {\n actionType: typeof RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE;\n placeholderId: string;\n value: string;\n priority?: number;\n}\n","import { Injectable, Injector, OnDestroy, Optional } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport type { RulesEngineActionHandler } from '@o3r/core';\nimport {\n deletePlaceholderTemplateEntity,\n PlaceholderRequestReply,\n PlaceholderTemplateStore,\n selectPlaceholderRequestEntities,\n selectPlaceholderTemplateEntities,\n setPlaceholderRequestEntityFromUrl,\n setPlaceholderTemplateEntity,\n updatePlaceholderRequestEntity\n} from '@o3r/components';\nimport { DynamicContentService } from '@o3r/dynamic-content';\nimport { LocalizationService } from '@o3r/localization';\nimport { LoggerService } from '@o3r/logger';\nimport { combineLatest, distinctUntilChanged, firstValueFrom, map, of, startWith, Subject, Subscription, withLatestFrom } from 'rxjs';\nimport { ActionUpdatePlaceholderBlock, RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE } from './placeholder.interfaces';\n\n/**\n * Service to handle async PlaceholderTemplate actions\n */\n@Injectable()\nexport class PlaceholderRulesEngineActionHandler implements OnDestroy, RulesEngineActionHandler<ActionUpdatePlaceholderBlock> {\n\n protected subscription = new Subscription();\n\n protected placeholdersActions$: Subject<{ placeholderId: string; templateUrl: string; priority: number }[]> = new Subject();\n\n /** @inheritdoc */\n public readonly supportingActions = [RULES_ENGINE_PLACEHOLDER_UPDATE_ACTION_TYPE] as const;\n\n constructor(\n store: Store<PlaceholderTemplateStore>,\n private readonly logger: LoggerService,\n private readonly injector: Injector,\n @Optional() translateService?: LocalizationService\n ) {\n const lang$ = translateService ? translateService.getTranslateService().onLangChange.pipe(\n map(({ lang }) => lang),\n startWith(translateService.getCurrentLanguage()),\n distinctUntilChanged()\n ) : of(null);\n\n const filteredActions$ = combineLatest([\n lang$,\n this.placeholdersActions$.pipe(\n distinctUntilChanged((prev, next) => JSON.stringify(prev) === JSON.stringify(next))\n )\n ]).pipe(\n withLatestFrom(\n combineLatest([store.pipe(select(selectPlaceholderTemplateEntities)), store.pipe(select(selectPlaceholderRequestEntities))])\n ),\n map(([langAndTemplatesUrls, storedPlaceholdersAndRequests]) => {\n const [lang, placeholderActions] = langAndTemplatesUrls;\n const storedPlaceholders = storedPlaceholdersAndRequests[0] || {};\n const storedPlaceholderRequests = storedPlaceholdersAndRequests[1] || {};\n const placeholderNewRequests: { rawUrl: string; resolvedUrl: string }[] = [];\n // Stores all raw Urls used from the current engine execution\n const usedUrls: Record<string, boolean> = {};\n // Get all Urls that needs to be resolved from current rules engine output\n const placeholdersTemplates = placeholderActions.reduce((acc, placeholderAction) => {\n const placeholdersTemplateUrl = {\n rawUrl: placeholderAction.templateUrl,\n priority: placeholderAction.priority\n };\n if (acc[placeholderAction.placeholderId]) {\n acc[placeholderAction.placeholderId].push(placeholdersTemplateUrl);\n } else {\n acc[placeholderAction.placeholderId] = [placeholdersTemplateUrl];\n }\n const resolvedUrl = this.resolveUrlWithLang(placeholderAction.templateUrl, lang);\n // Filters duplicates and resolved urls that are already in the store\n if (!usedUrls[placeholderAction.templateUrl] && (!storedPlaceholderRequests[placeholderAction.templateUrl]\n || storedPlaceholderRequests[placeholderAction.templateUrl]!.resolvedUrl !== resolvedUrl)) {\n placeholderNewRequests.push({\n rawUrl: placeholderAction.templateUrl,\n resolvedUrl: this.resolveUrlWithLang(placeholderAction.templateUrl, lang)\n });\n }\n usedUrls[placeholderAction.templateUrl] = true;\n return acc;\n }, {} as { [key: string]: { rawUrl: string; priority: number }[] });\n // Urls not used anymore and not already disabled\n const placeholderRequestsToDisable: string[] = [];\n // Urls used that were disabled\n const placeholderRequestsToEnable: string[] = [];\n Object.keys(storedPlaceholderRequests).forEach((storedPlaceholderRequestRawUrl) => {\n const usedFromEngineIteration = usedUrls[storedPlaceholderRequestRawUrl];\n const usedFromStore = (storedPlaceholderRequests && storedPlaceholderRequests[storedPlaceholderRequestRawUrl]) ? storedPlaceholderRequests[storedPlaceholderRequestRawUrl]!.used : false;\n if (!usedFromEngineIteration && usedFromStore) {\n placeholderRequestsToDisable.push(storedPlaceholderRequestRawUrl);\n } else if (usedFromEngineIteration && !usedFromStore) {\n placeholderRequestsToEnable.push(storedPlaceholderRequestRawUrl);\n }\n });\n // Placeholder that are no longer filled by the current engine execution output will be cleared\n const placeholdersTemplatesToBeCleanedUp = Object.keys(storedPlaceholders)\n .filter(placeholderId => !placeholdersTemplates[placeholderId]);\n\n const placeholdersTemplatesToBeSet = Object.keys(placeholdersTemplates).reduce((changedPlaceholderTemplates, placeholderTemplateId) => {\n // Caching if the placeholder template already exists with the same urls\n if (!storedPlaceholders[placeholderTemplateId] ||\n !(JSON.stringify(storedPlaceholders[placeholderTemplateId]!.urlsWithPriority) === JSON.stringify(placeholdersTemplates[placeholderTemplateId]))) {\n changedPlaceholderTemplates.push({\n id: placeholderTemplateId,\n urlsWithPriority: placeholdersTemplates[placeholderTemplateId]\n });\n }\n return changedPlaceholderTemplates;\n }, [] as { id: string; urlsWithPriority: { rawUrl: string; priority: number }[] }[]);\n return {\n placeholdersTemplatesToBeCleanedUp,\n placeholderRequestsToDisable,\n placeholderRequestsToEnable,\n placeholdersTemplatesToBeSet,\n placeholderNewRequests\n };\n })\n );\n this.subscription.add(filteredActions$.subscribe((placeholdersUpdates) => {\n placeholdersUpdates.placeholdersTemplatesToBeCleanedUp.forEach(placeholderId =>\n store.dispatch(deletePlaceholderTemplateEntity({\n id: placeholderId\n }))\n );\n placeholdersUpdates.placeholdersTemplatesToBeSet.forEach(placeholdersTemplateToBeSet => {\n store.dispatch(setPlaceholderTemplateEntity({ entity: placeholdersTemplateToBeSet }));\n });\n placeholdersUpdates.placeholderRequestsToDisable.forEach(placeholderRequestToDisable => {\n store.dispatch(updatePlaceholderRequestEntity({ entity: { id: placeholderRequestToDisable, used: false } }));\n });\n placeholdersUpdates.placeholderRequestsToEnable.forEach(placeholderRequestToEnable => {\n store.dispatch(updatePlaceholderRequestEntity({ entity: { id: placeholderRequestToEnable, used: true } }));\n });\n placeholdersUpdates.placeholderNewRequests.forEach(placeholderNewRequest => {\n store.dispatch(setPlaceholderRequestEntityFromUrl({\n resolvedUrl: placeholderNewRequest.resolvedUrl,\n id: placeholderNewRequest.rawUrl,\n call: this.retrieveTemplate(placeholderNewRequest.resolvedUrl)\n }));\n });\n }));\n }\n\n /**\n * Localize the url, replacing the language marker\n * @param url\n * @param language\n */\n protected resolveUrlWithLang(url: string, language: string | null): string {\n if (!language && url.includes('[LANGUAGE]')) {\n this.logger.warn(`Missing language when trying to resolve ${url}`);\n }\n return language ? url.replace(/\\[LANGUAGE]/g, language) : url;\n }\n\n /**\n * Retrieve template as json from a given url\n * @param url\n */\n protected async retrieveTemplate(url: string): Promise<PlaceholderRequestReply> {\n const resolvedUrl$ = this.injector.get(DynamicContentService, null, { optional: true })?.getContentPathStream(url) || of(url);\n const fullUrl = await firstValueFrom(resolvedUrl$);\n return fetch(fullUrl).then((response) => response.json());\n }\n\n /** @inheritdoc */\n public executeActions(actions: ActionUpdatePlaceholderBlock[]) {\n const templates = actions.map((action) => ({\n placeholderId: action.placeholderId,\n templateUrl: action.value,\n priority: action.priority || 0\n }));\n\n this.placeholdersActions$.next(templates);\n }\n\n /** @inheritdoc */\n public ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n}\n","import {Injectable, Optional} from '@angular/core';\nimport {Actions, createEffect, ofType} from '@ngrx/effects';\nimport {\n cancelPlaceholderRequest,\n failPlaceholderRequestEntity,\n PlaceholderRequestStore,\n PlaceholderVariable,\n selectPlaceholderRequestEntityUsage,\n setPlaceholderRequestEntityFromUrl,\n updatePlaceholderRequestEntity\n} from '@o3r/components';\nimport {fromApiEffectSwitchMapById} from '@o3r/core';\nimport {DynamicContentService} from '@o3r/dynamic-content';\nimport {LocalizationService} from '@o3r/localization';\nimport {RulesEngineRunnerService} from '@o3r/rules-engine';\nimport {combineLatest, EMPTY, Observable, of} from 'rxjs';\nimport {distinctUntilChanged, map, switchMap, take} from 'rxjs/operators';\nimport {Store} from '@ngrx/store';\nimport { JSONPath } from 'jsonpath-plus';\n\n/**\n * Service to handle async PlaceholderTemplate actions\n */\n@Injectable()\nexport class PlaceholderTemplateResponseEffect {\n /**\n * Set the PlaceholderRequest entity with the reply content, dispatch failPlaceholderRequestEntity if it catches a failure\n * Handles the rendering of the HTML content from the template and creates the combine latest from facts list if needed\n * Disables unused templates refresh if used is false in the store\n */\n public setPlaceholderRequestEntityFromUrl$ = createEffect(() =>\n this.actions$.pipe(\n ofType(setPlaceholderRequestEntityFromUrl),\n fromApiEffectSwitchMapById(\n (templateResponse, action) => {\n const facts = templateResponse.vars ? Object.entries(templateResponse.vars).filter(([, variable]) => variable.type === 'fact') : [];\n const factsStreamsList = this.rulesEngineService ? facts.map(([varName, fact]) =>\n this.rulesEngineService!.engine.retrieveOrCreateFactStream(fact.value).pipe(\n map((factValue) => ({\n varName,\n factName: fact.value,\n // eslint-disable-next-line new-cap\n factValue: (fact.path && factValue) ? JSONPath({ wrap: false, json: factValue, path: fact.path }) : factValue\n })),\n distinctUntilChanged((previous, current) => previous.factValue === current.factValue)\n )) : [];\n\n const factsStreamsList$ = factsStreamsList.length ? combineLatest(factsStreamsList) : of([]);\n return combineLatest([factsStreamsList$, this.store.select(selectPlaceholderRequestEntityUsage(action.id)).pipe(distinctUntilChanged())]).pipe(\n switchMap(([factsUsedInTemplate, placeholderRequestUsage]) => {\n if (!placeholderRequestUsage) {\n return EMPTY;\n }\n return this.getRenderedHTML$(templateResponse.template, templateResponse.vars, factsUsedInTemplate).pipe(\n map(({renderedTemplate, unknownTypeFound}) =>\n // Update instead of set because used already set by the update from url action\n updatePlaceholderRequestEntity({\n entity: {\n ...templateResponse,\n resolvedUrl: action.resolvedUrl,\n id: action.id,\n renderedTemplate,\n unknownTypeFound\n },\n requestId: action.requestId\n })\n )\n );\n }));\n },\n (error, action) => of(failPlaceholderRequestEntity({ids: [action.id], error, requestId: action.requestId})),\n (requestIdPayload, action) => cancelPlaceholderRequest({...requestIdPayload, id: action.id})\n )\n )\n );\n\n constructor(\n private readonly actions$: Actions,\n private readonly store: Store<PlaceholderRequestStore>,\n @Optional() private readonly rulesEngineService: RulesEngineRunnerService | null,\n @Optional() private readonly dynamicContentService: DynamicContentService | null,\n @Optional() private readonly translationService: LocalizationService | null) {\n }\n\n /**\n * Renders the html template, replacing facts and urls and localizationKeys\n * @param template\n * @param vars\n * @param facts\n */\n private getRenderedHTML$(template?: string, vars?: Record<string, PlaceholderVariable>, facts?: { varName: string; factName: string; factValue: any }[]) {\n let unknownTypeFound = false;\n const factMap = (facts || []).reduce((mapping: { [key: string]: any }, fact) => {\n mapping[fact.factName] = fact.factValue;\n return mapping;\n }, {});\n const factMapFromVars = (facts || []).reduce((mapping: { [key: string]: any }, fact) => {\n mapping[fact.varName] = fact.factValue;\n return mapping;\n }, {});\n const replacements$: Observable<{ ejsVar: RegExp; value: string } | null>[] = [];\n if (vars && template) {\n for (const varName in vars) {\n if (Object.prototype.hasOwnProperty.call(vars, varName)) {\n const ejsVar = new RegExp(`<%=\\\\s*${varName}\\\\s*%>`, 'g');\n switch (vars[varName].type) {\n case 'relativeUrl': {\n replacements$.push(\n this.dynamicContentService?.getMediaPathStream(vars[varName].value).pipe(\n take(1),\n map((value: string) => ({ejsVar, value}))\n ) || of({ ejsVar, value: vars[varName].value })\n );\n break;\n }\n case 'fullUrl': {\n template = template.replace(ejsVar, vars[varName].value);\n break;\n }\n case 'fact': {\n template = template.replace(ejsVar, factMap[vars[varName].value] ?? '');\n break;\n }\n case 'localisation': {\n const linkedVars = (vars[varName].vars || []).reduce((acc: { [key: string]: any }, parameter) => {\n const paramName = vars[parameter].value;\n acc[paramName] = factMap[paramName];\n return acc;\n }, {});\n const linkedParams = (Object.entries(vars[varName].parameters || {})).reduce((acc: { [key: string]: any }, [paramKey, paramValue]) => {\n acc[paramKey] = factMapFromVars[paramValue];\n return acc;\n }, linkedVars);\n replacements$.push(\n this.translationService ?\n this.translationService.translate(vars[varName].value, linkedParams).pipe(\n map((value) => (value ? { ejsVar, value } : null))\n ) :\n of(null)\n );\n break;\n }\n default : {\n unknownTypeFound = true;\n break;\n }\n }\n }\n }\n }\n return replacements$.length > 0 && !!template ?\n combineLatest(replacements$).pipe(\n map((replacements) => ({\n renderedTemplate: replacements.reduce(\n (acc, replacement) =>\n replacement ? acc.replace(replacement.ejsVar, replacement.value) : acc,\n template\n ),\n unknownTypeFound\n }))\n ) : of({renderedTemplate: template, unknownTypeFound});\n }\n}\n","import { NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { PlaceholderRequestStoreModule, PlaceholderTemplateStoreModule } from '@o3r/components';\nimport { PlaceholderRulesEngineActionHandler } from './placeholder.action-handler';\nimport { PlaceholderTemplateResponseEffect } from './placeholder.rules-engine.effect';\n\n@NgModule({\n imports: [\n EffectsModule.forFeature([PlaceholderTemplateResponseEffect]),\n PlaceholderRequestStoreModule,\n PlaceholderTemplateStoreModule\n ],\n providers: [\n PlaceholderRulesEngineActionHandler\n ]\n})\nexport class PlaceholderRulesEngineActionModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["map","distinctUntilChanged","i1","i2","i3","i5"],"mappings":"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"}