@ama-mfe/ng-utils 12.2.0-prerelease.4 → 12.2.0-prerelease.41

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.
@@ -1 +1 @@
1
- {"version":3,"file":"connect.directive.d.ts","sourceRoot":"","sources":["../../src/connect/connect.directive.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,eAAe,EAChB,MAAM,2BAA2B,CAAC;;AAEnC,qBAIa,gBAAgB;IAC3B;;OAEG;IACI,OAAO,8CAA4B;IAE1C;;OAEG;IACI,GAAG,mEAA4B;IAEtC;;OAEG;IACH,IACW,OAAO,gCAEjB;IAED,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAE5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAI1B;;yCA3BQ,gBAAgB;2CAAhB,gBAAgB;CAqD5B"}
1
+ {"version":3,"file":"connect.directive.d.ts","sourceRoot":"","sources":["../../src/connect/connect.directive.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,eAAe,EAChB,MAAM,2BAA2B,CAAC;;AAKnC,qBAIa,gBAAgB;IAC3B;;OAEG;IACI,OAAO,8CAA4B;IAE1C;;OAEG;IACI,GAAG,mEAA4B;IAEtC;;OAEG;IACH,IACW,OAAO,gCAEjB;IAED,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAE5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAI1B;;yCA3BQ,gBAAgB;2CAAhB,gBAAgB;CAoD5B"}
@@ -1,9 +1,9 @@
1
- import { isServiceMessage } from '@amadeus-it-group/microfrontends';
2
1
  import { MessagePeerService, MESSAGE_PEER_CONFIG, MESSAGE_PEER_CONNECT_OPTIONS } from '@amadeus-it-group/microfrontends-angular';
3
2
  export { MessagePeerService as ConnectionService } from '@amadeus-it-group/microfrontends-angular';
4
3
  import * as i0 from '@angular/core';
5
4
  import { Injectable, inject, signal, effect, DestroyRef, afterNextRender, input, computed, ElementRef, Renderer2, Directive, untracked, SecurityContext, Pipe, HostBinding, makeEnvironmentProviders } from '@angular/core';
6
5
  import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
6
+ import { LoggerService } from '@o3r/logger';
7
7
  import { RESIZE_MESSAGE_TYPE, NAVIGATION_MESSAGE_TYPE, THEME_MESSAGE_TYPE } from '@ama-mfe/messages';
8
8
  import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';
9
9
  import { Subject, filter, map } from 'rxjs';
@@ -78,10 +78,10 @@ class ProducerManagerService {
78
78
  }
79
79
  return handlersPresent;
80
80
  }
81
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ProducerManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
82
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ProducerManagerService, providedIn: 'root' }); }
81
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ProducerManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
82
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ProducerManagerService, providedIn: 'root' }); }
83
83
  }
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ProducerManagerService, decorators: [{
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ProducerManagerService, decorators: [{
85
85
  type: Injectable,
86
86
  args: [{
87
87
  providedIn: 'root'
@@ -93,6 +93,7 @@ class ConsumerManagerService {
93
93
  this.messageService = inject(MessagePeerService);
94
94
  this.producerManagerService = inject(ProducerManagerService);
95
95
  this.registeredConsumers = signal([]);
96
+ this.logger = inject(LoggerService);
96
97
  /** The list of registered consumers */
97
98
  this.consumers = this.registeredConsumers.asReadonly();
98
99
  this.messageService.messages$.pipe(takeUntilDestroyed()).subscribe((message) => this.consumeMessage(message));
@@ -113,9 +114,7 @@ class ConsumerManagerService {
113
114
  if (isErrorMessage(message.payload)) {
114
115
  const isHandled = await this.producerManagerService.dispatchError(message.payload);
115
116
  if (!isHandled) {
116
- // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger
117
- // eslint-disable-next-line no-console -- placeholder for implementation with logger
118
- console.warn('Error message not handled', message);
117
+ this.logger.warn('Error message not handled', message);
119
118
  }
120
119
  return;
121
120
  }
@@ -128,31 +127,21 @@ class ConsumerManagerService {
128
127
  */
129
128
  async consumeAdditionalMessage(message) {
130
129
  if (!message.payload) {
131
- // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger
132
- // eslint-disable-next-line no-console -- placeholder for implementation with logger
133
- console.warn('Cannot consume a messages with undefined payload.');
134
- return;
135
- }
136
- // not interested in service messages like 'connect' or 'disconnect'
137
- if (isServiceMessage(message.payload)) {
130
+ this.logger.warn('Cannot consume a messages with undefined payload.');
138
131
  return;
139
132
  }
140
133
  const consumers = this.consumers();
141
134
  const typeMatchingConsumers = consumers
142
135
  .filter((consumer) => consumer.type === message.payload.type);
143
136
  if (typeMatchingConsumers.length === 0) {
144
- // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger
145
- // eslint-disable-next-line no-console -- placeholder for implementation with logger
146
- console.warn(`No consumer found for message type: ${message.payload.type}`);
137
+ this.logger.warn(`No consumer found for message type: ${message.payload.type}`);
147
138
  return sendError(this.messageService, { reason: 'unknown_type', source: message.payload });
148
139
  }
149
140
  const versionMatchingConsumers = typeMatchingConsumers
150
141
  .filter((consumer) => consumer.supportedVersions[message.payload.version])
151
142
  .flat();
152
143
  if (versionMatchingConsumers.length === 0) {
153
- // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger
154
- // eslint-disable-next-line no-console -- placeholder for implementation with logger
155
- console.warn(`No consumer found for message version: ${message.payload.version}`);
144
+ this.logger.warn(`No consumer found for message version: ${message.payload.version}`);
156
145
  return sendError(this.messageService, { reason: 'version_mismatch', source: message.payload });
157
146
  }
158
147
  await Promise.all(versionMatchingConsumers
@@ -161,9 +150,7 @@ class ConsumerManagerService {
161
150
  await consumer.supportedVersions[message.payload.version](message);
162
151
  }
163
152
  catch (error) {
164
- // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger
165
- // eslint-disable-next-line no-console -- notify directly in the console the error at message consume
166
- console.error('Error while consuming message', error);
153
+ this.logger.error('Error while consuming message', error);
167
154
  sendError(this.messageService, { reason: 'internal_error', source: message.payload });
168
155
  }
169
156
  }));
@@ -186,10 +173,10 @@ class ConsumerManagerService {
186
173
  return consumers.filter((c) => c !== consumer);
187
174
  });
188
175
  }
189
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ConsumerManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
190
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ConsumerManagerService, providedIn: 'root' }); }
176
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ConsumerManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
177
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ConsumerManagerService, providedIn: 'root' }); }
191
178
  }
192
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ConsumerManagerService, decorators: [{
179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ConsumerManagerService, decorators: [{
193
180
  type: Injectable,
194
181
  args: [{
195
182
  providedIn: 'root'
@@ -252,10 +239,10 @@ class ResizeConsumerService {
252
239
  stop() {
253
240
  this.consumerManagerService.unregister(this);
254
241
  }
255
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ResizeConsumerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
256
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ResizeConsumerService, providedIn: 'root' }); }
242
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ResizeConsumerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
243
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ResizeConsumerService, providedIn: 'root' }); }
257
244
  }
258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ResizeConsumerService, decorators: [{
245
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ResizeConsumerService, decorators: [{
259
246
  type: Injectable,
260
247
  args: [{
261
248
  providedIn: 'root'
@@ -308,10 +295,10 @@ class ResizeService {
308
295
  });
309
296
  afterNextRender(() => this.resizeObserver?.observe(document.body));
310
297
  }
311
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ResizeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
312
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ResizeService, providedIn: 'root' }); }
298
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ResizeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
299
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ResizeService, providedIn: 'root' }); }
313
300
  }
314
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ResizeService, decorators: [{
301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ResizeService, decorators: [{
315
302
  type: Injectable,
316
303
  args: [{
317
304
  providedIn: 'root'
@@ -355,10 +342,10 @@ class ScalableDirective {
355
342
  }
356
343
  });
357
344
  }
358
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ScalableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
359
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.1", type: ScalableDirective, isStandalone: true, selector: "[scalable]", inputs: { connect: { classPropertyName: "connect", publicName: "connect", isSignal: true, isRequired: false, transformFunction: null }, scalable: { classPropertyName: "scalable", publicName: "scalable", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
345
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ScalableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
346
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.3", type: ScalableDirective, isStandalone: true, selector: "[scalable]", inputs: { connect: { classPropertyName: "connect", publicName: "connect", isSignal: true, isRequired: false, transformFunction: null }, scalable: { classPropertyName: "scalable", publicName: "scalable", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
360
347
  }
361
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ScalableDirective, decorators: [{
348
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ScalableDirective, decorators: [{
362
349
  type: Directive,
363
350
  args: [{
364
351
  selector: '[scalable]',
@@ -435,10 +422,10 @@ class NavigationConsumerService {
435
422
  stop() {
436
423
  this.consumerManagerService.unregister(this);
437
424
  }
438
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: NavigationConsumerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
439
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: NavigationConsumerService, providedIn: 'root' }); }
425
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: NavigationConsumerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
426
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: NavigationConsumerService, providedIn: 'root' }); }
440
427
  }
441
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: NavigationConsumerService, decorators: [{
428
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: NavigationConsumerService, decorators: [{
442
429
  type: Injectable,
443
430
  args: [{
444
431
  providedIn: 'root'
@@ -481,10 +468,10 @@ class RouteMemorizeService {
481
468
  getRoute(channelId) {
482
469
  return this.routeStack[channelId];
483
470
  }
484
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RouteMemorizeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
485
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RouteMemorizeService, providedIn: 'root' }); }
471
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: RouteMemorizeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
472
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: RouteMemorizeService, providedIn: 'root' }); }
486
473
  }
487
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RouteMemorizeService, decorators: [{
474
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: RouteMemorizeService, decorators: [{
488
475
  type: Injectable,
489
476
  args: [{
490
477
  providedIn: 'root'
@@ -537,10 +524,10 @@ class RouteMemorizeDirective {
537
524
  }
538
525
  });
539
526
  }
540
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RouteMemorizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
541
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.1", type: RouteMemorizeDirective, isStandalone: true, selector: "iframe[memorizeRoute]", inputs: { memorizeRoute: { classPropertyName: "memorizeRoute", publicName: "memorizeRoute", isSignal: true, isRequired: false, transformFunction: null }, memorizeRouteId: { classPropertyName: "memorizeRouteId", publicName: "memorizeRouteId", isSignal: true, isRequired: false, transformFunction: null }, memorizeMaxAge: { classPropertyName: "memorizeMaxAge", publicName: "memorizeMaxAge", isSignal: true, isRequired: false, transformFunction: null }, memorizeRouteMaxAge: { classPropertyName: "memorizeRouteMaxAge", publicName: "memorizeRouteMaxAge", isSignal: true, isRequired: false, transformFunction: null }, connect: { classPropertyName: "connect", publicName: "connect", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
527
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: RouteMemorizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
528
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.3", type: RouteMemorizeDirective, isStandalone: true, selector: "iframe[memorizeRoute]", inputs: { memorizeRoute: { classPropertyName: "memorizeRoute", publicName: "memorizeRoute", isSignal: true, isRequired: false, transformFunction: null }, memorizeRouteId: { classPropertyName: "memorizeRouteId", publicName: "memorizeRouteId", isSignal: true, isRequired: false, transformFunction: null }, memorizeMaxAge: { classPropertyName: "memorizeMaxAge", publicName: "memorizeMaxAge", isSignal: true, isRequired: false, transformFunction: null }, memorizeRouteMaxAge: { classPropertyName: "memorizeRouteMaxAge", publicName: "memorizeRouteMaxAge", isSignal: true, isRequired: false, transformFunction: null }, connect: { classPropertyName: "connect", publicName: "connect", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
542
529
  }
543
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RouteMemorizeDirective, decorators: [{
530
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: RouteMemorizeDirective, decorators: [{
544
531
  type: Directive,
545
532
  args: [{
546
533
  selector: 'iframe[memorizeRoute]',
@@ -559,6 +546,7 @@ class RoutingService {
559
546
  this.router = inject(Router);
560
547
  this.activatedRoute = inject(ActivatedRoute);
561
548
  this.messageService = inject((MessagePeerService));
549
+ this.logger = inject(LoggerService);
562
550
  /**
563
551
  * @inheritdoc
564
552
  */
@@ -569,9 +557,7 @@ class RoutingService {
569
557
  * @inheritdoc
570
558
  */
571
559
  handleError(message) {
572
- // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger
573
- // eslint-disable-next-line no-console -- placeholder for the implementation with a logger
574
- console.error('Error in navigation service message', message);
560
+ this.logger.error('Error in navigation service message', message);
575
561
  }
576
562
  /**
577
563
  * Handles embedded routing by listening to router events and sending navigation messages to the connected endpoints.
@@ -597,27 +583,23 @@ class RoutingService {
597
583
  }
598
584
  else {
599
585
  if (channelId === undefined) {
600
- // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger
601
- // eslint-disable-next-line no-console -- warning message as channel id not mandatory
602
- console.warn('No channelId provided for navigation message');
586
+ this.logger.warn('No channelId provided for navigation message');
603
587
  }
604
588
  else {
605
589
  try {
606
590
  this.messageService.send(messageV10, { to: [channelId] });
607
591
  }
608
592
  catch (error) {
609
- // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger
610
- // eslint-disable-next-line no-console -- send the error in the console, do not fail silently
611
- console.error('Error sending navigation message', error);
593
+ this.logger.error('Error sending navigation message', error);
612
594
  }
613
595
  }
614
596
  }
615
597
  });
616
598
  }
617
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RoutingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
618
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RoutingService, providedIn: 'root' }); }
599
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: RoutingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
600
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: RoutingService, providedIn: 'root' }); }
619
601
  }
620
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RoutingService, decorators: [{
602
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: RoutingService, decorators: [{
621
603
  type: Injectable,
622
604
  args: [{
623
605
  providedIn: 'root'
@@ -664,10 +646,10 @@ class RestoreRoute {
664
646
  return typeof url === 'string' ? moduleUrlStringyfied : this.domSanitizer.bypassSecurityTrustResourceUrl(moduleUrlStringyfied);
665
647
  }
666
648
  }
667
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RestoreRoute, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
668
- /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: RestoreRoute, isStandalone: true, name: "restoreRoute" }); }
649
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: RestoreRoute, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
650
+ /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.3", ngImport: i0, type: RestoreRoute, isStandalone: true, name: "restoreRoute" }); }
669
651
  }
670
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RestoreRoute, decorators: [{
652
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: RestoreRoute, decorators: [{
671
653
  type: Pipe,
672
654
  args: [{
673
655
  name: 'restoreRoute'
@@ -681,9 +663,10 @@ const THEME_QUERY_PARAM_NAME = 'theme';
681
663
  /**
682
664
  * Fetches a CSS document and returns the content as a string.
683
665
  * @param cssPath - The path to download the CSS.
666
+ * @param options Options and context for Style helpers
684
667
  * @returns The content of the CSS document as a string, empty string if the fetch fails.
685
668
  */
686
- async function getStyle(cssPath) {
669
+ async function getStyle(cssPath, options) {
687
670
  try {
688
671
  const myRequest = new Request(cssPath);
689
672
  const response = await fetch(myRequest);
@@ -691,9 +674,7 @@ async function getStyle(cssPath) {
691
674
  return cssText;
692
675
  }
693
676
  catch (error) {
694
- // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger
695
- // eslint-disable-next-line no-console -- display the warning instead of failing silently
696
- console.warn(`Failed to download style from: ${cssPath} with error: ${error?.toString()}`);
677
+ options?.logger?.warn(`Failed to download style from: ${cssPath} with error: ${error?.toString()}`);
697
678
  }
698
679
  return '';
699
680
  }
@@ -715,28 +696,30 @@ function applyTheme(themeValue, cleanPrevious = true) {
715
696
  /**
716
697
  * Download the application additional theme
717
698
  * @param theme Name of the theme to download from the current application
699
+ * @param options Options and context for Style helpers
718
700
  */
719
- function downloadApplicationThemeCss(theme) {
701
+ function downloadApplicationThemeCss(theme, options) {
720
702
  const cssHref = `${theme.endsWith('.css') ? theme : theme + THEME_URL_SUFFIX}`;
721
- return getStyle(cssHref);
703
+ return getStyle(cssHref, options);
722
704
  }
723
705
  /**
724
706
  * Applies the initial theme based on the URL query parameters.
725
707
  *
726
708
  * This function fetches the CSS theme specified in the URL query parameters and applies it as a stylesheet.
727
709
  * If a referrer is present, it also attempts to fetch and apply the theme from the referrer's URL.
710
+ * @param options Options and context for Style helpers
728
711
  */
729
- async function applyInitialTheme() {
712
+ async function applyInitialTheme(options) {
730
713
  const searchParams = new URLSearchParams(window.location.search);
731
714
  const theme = searchParams.get(THEME_QUERY_PARAM_NAME);
732
715
  document.adoptedStyleSheets = [];
733
716
  if (theme) {
734
717
  const themeRequest = [];
735
- themeRequest.push(downloadApplicationThemeCss(theme).then((styleToApply) => applyTheme(styleToApply, false)));
718
+ themeRequest.push(downloadApplicationThemeCss(theme, options).then((styleToApply) => applyTheme(styleToApply, false)));
736
719
  if (document.referrer) {
737
720
  const url = new URL(document.referrer);
738
721
  url.pathname += `${url.pathname.endsWith('/') ? '' : '/'}${theme}`;
739
- themeRequest.unshift(getStyle(url.toString()).then((styleToApply) => applyTheme(styleToApply, false)));
722
+ themeRequest.unshift(getStyle(url.toString(), options).then((styleToApply) => applyTheme(styleToApply, false)));
740
723
  }
741
724
  return Promise.allSettled(themeRequest);
742
725
  }
@@ -749,6 +732,7 @@ async function applyInitialTheme() {
749
732
  class ThemeProducerService {
750
733
  constructor() {
751
734
  this.messageService = inject((MessagePeerService));
735
+ this.logger = inject(LoggerService);
752
736
  /**
753
737
  * The type of messages this service handles ('theme').
754
738
  */
@@ -816,15 +800,13 @@ class ThemeProducerService {
816
800
  * @inheritdoc
817
801
  */
818
802
  handleError(message) {
819
- // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger
820
- // eslint-disable-next-line no-console -- error message should be made available with the logger
821
- console.error('Error in theme service message', message);
803
+ this.logger.error('Error in theme service message', message);
822
804
  this.revertToPreviousTheme();
823
805
  }
824
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ThemeProducerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
825
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ThemeProducerService, providedIn: 'root' }); }
806
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ThemeProducerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
807
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ThemeProducerService, providedIn: 'root' }); }
826
808
  }
827
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ThemeProducerService, decorators: [{
809
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ThemeProducerService, decorators: [{
828
810
  type: Injectable,
829
811
  args: [{
830
812
  providedIn: 'root'
@@ -857,10 +839,10 @@ class ApplyTheme {
857
839
  }
858
840
  return undefined;
859
841
  }
860
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ApplyTheme, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
861
- /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: ApplyTheme, isStandalone: true, name: "applyTheme" }); }
842
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ApplyTheme, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
843
+ /** @nocollapse */ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.3", ngImport: i0, type: ApplyTheme, isStandalone: true, name: "applyTheme" }); }
862
844
  }
863
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ApplyTheme, decorators: [{
845
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ApplyTheme, decorators: [{
864
846
  type: Pipe,
865
847
  args: [{
866
848
  name: 'applyTheme'
@@ -874,6 +856,7 @@ class ThemeConsumerService {
874
856
  constructor() {
875
857
  this.domSanitizer = inject(DomSanitizer);
876
858
  this.consumerManagerService = inject(ConsumerManagerService);
859
+ this.logger = inject(LoggerService);
877
860
  /**
878
861
  * The type of messages this service handles ('theme').
879
862
  */
@@ -892,13 +875,11 @@ class ThemeConsumerService {
892
875
  applyTheme(sanitizedCss);
893
876
  }
894
877
  try {
895
- const css = await downloadApplicationThemeCss(message.payload.name);
878
+ const css = await downloadApplicationThemeCss(message.payload.name, { logger: this.logger });
896
879
  applyTheme(css, false);
897
880
  }
898
881
  catch (e) {
899
- // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger
900
- // eslint-disable-next-line no-console -- log the error - replace this with a proper logger
901
- console.warn(`no CSS variable for the theme ${message.payload.name}`, e);
882
+ this.logger.warn(`No CSS variable for the theme ${message.payload.name}`, e);
902
883
  }
903
884
  }
904
885
  };
@@ -917,10 +898,10 @@ class ThemeConsumerService {
917
898
  stop() {
918
899
  this.consumerManagerService.unregister(this);
919
900
  }
920
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ThemeConsumerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
921
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ThemeConsumerService, providedIn: 'root' }); }
901
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ThemeConsumerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
902
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ThemeConsumerService, providedIn: 'root' }); }
922
903
  }
923
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ThemeConsumerService, decorators: [{
904
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ThemeConsumerService, decorators: [{
924
905
  type: Injectable,
925
906
  args: [{
926
907
  providedIn: 'root'
@@ -951,6 +932,7 @@ class ConnectDirective {
951
932
  const srcString = src && this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, src);
952
933
  return srcString && new URL(srcString).origin;
953
934
  });
935
+ const logger = inject(LoggerService);
954
936
  // When the origin url or the peer id changes it will remake the connection with the new updates. The old connection is closed
955
937
  effect(async () => {
956
938
  const clientOrigin = this.clientOrigin();
@@ -965,19 +947,17 @@ class ConnectDirective {
965
947
  });
966
948
  }
967
949
  catch (e) {
968
- // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger
969
- // eslint-disable-next-line no-console -- log the error - replace this with a proper logger
970
- console.error(e);
950
+ logger.error(`Fail to connect to client (connection ID: ${connectId})`, e);
971
951
  }
972
952
  }
973
953
  });
974
954
  // When the directive is destroyed clean up the connection too.
975
955
  inject(DestroyRef).onDestroy(() => this.messageService.disconnect());
976
956
  }
977
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ConnectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
978
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.1", type: ConnectDirective, isStandalone: true, selector: "iframe[connect]", inputs: { connect: { classPropertyName: "connect", publicName: "connect", isSignal: true, isRequired: true, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "src": "this.srcAttr" } }, ngImport: i0 }); }
957
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ConnectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
958
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.3", type: ConnectDirective, isStandalone: true, selector: "iframe[connect]", inputs: { connect: { classPropertyName: "connect", publicName: "connect", isSignal: true, isRequired: true, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "src": "this.srcAttr" } }, ngImport: i0 }); }
979
959
  }
980
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: ConnectDirective, decorators: [{
960
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.3", ngImport: i0, type: ConnectDirective, decorators: [{
981
961
  type: Directive,
982
962
  args: [{
983
963
  selector: 'iframe[connect]',
@@ -1 +1 @@
1
- {"version":3,"file":"ama-mfe-ng-utils.mjs","sources":["../../src/messages/available.sender.ts","../../src/messages/error.sender.ts","../../src/managers/producer.manager.service.ts","../../src/managers/consumer.manager.service.ts","../../src/managers/utils.ts","../../src/messages/error/base.ts","../../src/resize/resize.consumer.service.ts","../../src/resize/resize.producer.service.ts","../../src/resize/resize.directive.ts","../../src/navigation/navigation.consumer.service.ts","../../src/navigation/route-memorize/route-memorize.service.ts","../../src/navigation/route-memorize/route-memorize.directive.ts","../../src/navigation/navigation.producer.service.ts","../../src/navigation/restore-route.pipe.ts","../../src/theme/theme.helpers.ts","../../src/theme/theme.producer.service.ts","../../src/theme/apply-theme.pipe.ts","../../src/theme/theme.consumer.service.ts","../../src/connect/connect.directive.ts","../../src/utils.ts","../../src/connect/connect.providers.ts","../../src/ama-mfe-ng-utils.ts"],"sourcesContent":["import type {\n DeclareMessages,\n} from '@amadeus-it-group/microfrontends';\nimport type {\n BasicMessageConsumer,\n} from '../managers/interfaces';\n\n/**\n * Gets the available consumers and formats them into a {@see DeclareMessages} object.\n * @param consumers - The list of registered message consumers.\n * @returns The formatted DeclareMessages object.\n */\nexport const getAvailableConsumers = (consumers: BasicMessageConsumer[]) => {\n return {\n type: 'declare_messages',\n version: '1.0',\n messages: consumers.flatMap(({ type, supportedVersions }) => Object.keys(supportedVersions).map((version) => ({ type, version })))\n } satisfies DeclareMessages;\n};\n","import type {\n Message,\n MessagePeerType,\n} from '@amadeus-it-group/microfrontends';\nimport type {\n ERROR_MESSAGE_TYPE,\n ErrorContent,\n ErrorMessageV1_0,\n} from './error/index';\n\n/**\n * Helper function to send an error message by the given endpoint (peer)\n * @param peer The endpoint sending the message\n * @param content the content of the error message to be sent\n */\nexport const sendError = (peer: MessagePeerType<any>, content: ErrorContent) => {\n return peer.send({\n type: 'error',\n version: '1.0',\n ...content\n } satisfies ErrorMessageV1_0);\n};\n\n/**\n * Check if the given message is of type error and the error reson is present too\n * @param message the message to be checked\n */\n// eslint-disable-next-line @stylistic/max-len -- constant definition\nexport const isErrorMessage = (message: any): message is Message & { type: typeof ERROR_MESSAGE_TYPE } & ErrorContent => (message && typeof message === 'object' && message.type === 'error' && !!message.reason);\n","import type {\n Message,\n} from '@amadeus-it-group/microfrontends';\nimport {\n Injectable,\n} from '@angular/core';\nimport type {\n ErrorContent,\n} from '../messages/index';\nimport type {\n MessageProducer,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProducerManagerService {\n private readonly registeredProducers = new Set<MessageProducer>();\n\n /** Get the list of registered producers of messages. The list will contain unique elements */\n public get producers() {\n return [...this.registeredProducers];\n }\n\n /**\n * Register a producer of a message\n * @param producer The instance of the message producer\n */\n public register(producer: MessageProducer) {\n this.registeredProducers.add((producer));\n }\n\n /**\n * Unregister a producer of a message\n * @param producer The instance of the message producer\n */\n public unregister(producer: MessageProducer) {\n this.registeredProducers.delete((producer));\n }\n\n /**\n * Handles the received error message for the given message type by invoking the appropriate producer handlers.\n * @template T - The type of the message, extending from Message.\n * @param message - The error message to handle.\n * @returns - A promise that resolves to true if the error was handled by at least one handler, false otherwise.\n */\n public async dispatchError<T extends Message = Message>(message: ErrorContent<T>) {\n const handlers = this.producers\n .filter(({ types }) => (Array.isArray(types) ? types : [types]).includes(message.source.type));\n\n const handlersPresent = handlers.length > 0;\n if (handlersPresent) {\n await Promise.all(\n handlers.map((handler) => handler.handleError(message))\n );\n }\n return handlersPresent;\n }\n}\n","import {\n isServiceMessage,\n Message,\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n effect,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n getAvailableConsumers,\n} from '../messages/available.sender';\nimport {\n isErrorMessage,\n sendError,\n} from '../messages/error.sender';\nimport type {\n BasicMessageConsumer,\n} from './interfaces';\nimport {\n ProducerManagerService,\n} from './producer.manager.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConsumerManagerService {\n private readonly messageService = inject(MessagePeerService);\n private readonly producerManagerService = inject(ProducerManagerService);\n private readonly registeredConsumers = signal<BasicMessageConsumer[]>([]);\n\n /** The list of registered consumers */\n public readonly consumers = this.registeredConsumers.asReadonly();\n\n constructor() {\n this.messageService.messages$.pipe(takeUntilDestroyed()).subscribe((message) => this.consumeMessage(message));\n\n // Each time a consumer is registered/unregistered update the list of registered messages\n effect(() => {\n const declareMessages = getAvailableConsumers(this.consumers());\n\n // registering consumed messages locally for validation\n for (const message of declareMessages.messages) {\n this.messageService.registerMessage(message);\n }\n });\n }\n\n /**\n * Consume a received message\n * @param message the received message body\n */\n private async consumeMessage(message: RoutedMessage<Message>) {\n if (isErrorMessage(message.payload)) {\n const isHandled = await this.producerManagerService.dispatchError(message.payload);\n if (!isHandled) {\n // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger\n // eslint-disable-next-line no-console -- placeholder for implementation with logger\n console.warn('Error message not handled', message);\n }\n return;\n }\n\n return this.consumeAdditionalMessage(message);\n }\n\n /**\n * Call the registered message callback(s) to consume the given message\n * Handle error messages of internal communication protocol messages\n * @param message message to consume\n */\n private async consumeAdditionalMessage(message: RoutedMessage<Message>) {\n if (!message.payload) {\n // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger\n // eslint-disable-next-line no-console -- placeholder for implementation with logger\n console.warn('Cannot consume a messages with undefined payload.');\n return;\n }\n // not interested in service messages like 'connect' or 'disconnect'\n if (isServiceMessage(message.payload)) {\n return;\n }\n const consumers = this.consumers();\n const typeMatchingConsumers = consumers\n .filter((consumer) => consumer.type === message.payload.type);\n\n if (typeMatchingConsumers.length === 0) {\n // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger\n // eslint-disable-next-line no-console -- placeholder for implementation with logger\n console.warn(`No consumer found for message type: ${message.payload.type}`);\n return sendError(this.messageService, { reason: 'unknown_type', source: message.payload });\n }\n\n const versionMatchingConsumers = typeMatchingConsumers\n .filter((consumer) => consumer.supportedVersions[message.payload.version])\n .flat();\n\n if (versionMatchingConsumers.length === 0) {\n // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger\n // eslint-disable-next-line no-console -- placeholder for implementation with logger\n console.warn(`No consumer found for message version: ${message.payload.version}`);\n return sendError(this.messageService, { reason: 'version_mismatch', source: message.payload });\n }\n\n await Promise.all(\n versionMatchingConsumers\n .map(async (consumer) => {\n try {\n await consumer.supportedVersions[message.payload.version](message);\n } catch (error) {\n // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger\n // eslint-disable-next-line no-console -- notify directly in the console the error at message consume\n console.error('Error while consuming message', error);\n sendError(this.messageService, { reason: 'internal_error', source: message.payload });\n }\n })\n );\n }\n\n /**\n * Register a message consumer\n * @param consumer an instance of message consumer\n */\n public register(consumer: BasicMessageConsumer) {\n this.registeredConsumers.update((consumers) => {\n return [...new Set(consumers).add(consumer)];\n });\n }\n\n /**\n * Unregister a message consumer\n * @param consumer an instance of message consumer\n */\n public unregister(consumer: BasicMessageConsumer) {\n this.registeredConsumers.update((consumers) => {\n return consumers.filter((c) => c !== consumer);\n });\n }\n}\n","import {\n DestroyRef,\n inject,\n} from '@angular/core';\nimport type {\n MessageProducer,\n} from './interfaces';\nimport {\n ProducerManagerService,\n} from './producer.manager.service';\n\n/**\n * Method to call in the constructor of a producer\n * @note should be used in injection context\n * @param producer\n */\nexport const registerProducer = (producer: MessageProducer) => {\n const producerManagerService = inject(ProducerManagerService);\n producerManagerService.register(producer);\n\n inject(DestroyRef).onDestroy(() => {\n producerManagerService.unregister(producer);\n });\n};\n","import type {\n Message,\n} from '@amadeus-it-group/microfrontends';\n\n/** the error message type */\nexport const ERROR_MESSAGE_TYPE = 'error';\n\n/**\n * The possible reasons for an error.\n */\nexport type ErrorReason = 'unknown_type' | 'version_mismatch' | 'internal_error';\n\n/**\n * The content of an error message.\n * @template S - The type of the source message.\n */\nexport interface ErrorContent<S extends Message = Message> {\n /** The reason for the error */\n reason: ErrorReason;\n /** The source message that caused the error */\n source: S;\n}\n","import type {\n ResizeMessage,\n ResizeV1_0,\n} from '@ama-mfe/messages';\nimport {\n RESIZE_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n DestroyRef,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n ConsumerManagerService,\n MessageConsumer,\n} from '../managers/index';\n\n/**\n * This service listens for resize messages and updates the height of elements based on the received messages.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ResizeConsumerService implements MessageConsumer<ResizeMessage> {\n private readonly newHeight = signal<{ height: number; channelId: string } | undefined>(undefined);\n\n /**\n * A readonly signal that provides the new height information from the channel.\n */\n public readonly newHeightFromChannel = this.newHeight.asReadonly();\n\n /**\n * The type of messages this service handles ('resize').\n */\n public readonly type = RESIZE_MESSAGE_TYPE;\n\n /**\n * The supported versions of resize messages and their handlers.\n */\n public supportedVersions = {\n /**\n * Use the message paylod to compute a new height and emit it via the public signal\n * @param message message to consume\n */\n '1.0': (message: RoutedMessage<ResizeV1_0>) => this.newHeight.set({ height: message.payload.height, channelId: message.from })\n };\n\n private readonly consumerManagerService = inject(ConsumerManagerService);\n\n constructor() {\n this.start();\n inject(DestroyRef).onDestroy(() => this.stop());\n }\n\n /**\n * Starts the resize handler service by registering it into the consumer manager service.\n */\n public start() {\n this.consumerManagerService.register(this);\n }\n\n /**\n * Stops the resize handler service by unregistering it from the consumer manager service.\n */\n public stop() {\n this.consumerManagerService.unregister(this);\n }\n}\n","import type {\n ResizeMessage,\n ResizeV1_0,\n} from '@ama-mfe/messages';\nimport {\n RESIZE_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n afterNextRender,\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n type MessageProducer,\n registerProducer,\n} from '../managers/index';\nimport {\n type ErrorContent,\n} from '../messages/index';\n\n/**\n * `scrollHeight` is a rounded number (cf https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight)\n *\n * So we have to add a delta to ensure no scrollbar will appear on the host,\n * in case the `scrollHeight` is rounded down\n */\nexport const DELTA_RESIZE = 1;\n\n/**\n * This service observe changes in the document's body height.\n * When the height changes, it sends a resize message with the new height, to the connected peers\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ResizeService implements MessageProducer<ResizeMessage> {\n private actualHeight?: number;\n private readonly messageService = inject(MessagePeerService<ResizeMessage>);\n private resizeObserver?: ResizeObserver;\n\n /**\n * @inheritdoc\n */\n public readonly types = RESIZE_MESSAGE_TYPE;\n\n constructor() {\n registerProducer(this);\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<ResizeMessage>): void {\n // eslint-disable-next-line no-console -- error handling placeholder\n console.error('Error in resize service message', message);\n }\n\n /**\n * This method sets up a `ResizeObserver` to observe changes in the document's body height.\n * When the height changes, it sends a resize message with the new height, to the connected peers\n */\n public startResizeObserver() {\n this.resizeObserver = new ResizeObserver(() => {\n if (document.body.scrollHeight !== this.actualHeight) {\n this.actualHeight = document.body.scrollHeight;\n const messageV10 = {\n type: 'resize',\n version: '1.0',\n height: document.body.scrollHeight + DELTA_RESIZE\n } satisfies ResizeV1_0;\n // TODO: sendBest() is not implemented -- https://github.com/AmadeusITGroup/microfrontends/issues/11\n this.messageService.send(messageV10);\n }\n });\n\n afterNextRender(() => this.resizeObserver?.observe(document.body));\n }\n}\n","import {\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n Renderer2,\n} from '@angular/core';\nimport {\n ResizeConsumerService,\n} from './resize.consumer.service';\n\n/**\n * A directive that adjusts the height of an element based on resize messages from a specified channel.\n */\n@Directive({\n selector: '[scalable]',\n standalone: true\n})\nexport class ScalableDirective {\n /**\n * The connection ID for the element, used as channel id backup\n */\n public connect = input<string>();\n\n /**\n * The channel id\n */\n public scalable = input<string>();\n\n private readonly resizeHandler = inject(ResizeConsumerService);\n\n /**\n * This signal checks if the current channel requesting the resize matches the channel ID from the resize handler.\n * If they match, it returns the new height information; otherwise, it returns undefined.\n */\n private readonly newHeightFromChannel = computed(() => {\n const channelAskingResize = this.scalable() || this.connect();\n const newHeightFromChannel = this.resizeHandler.newHeightFromChannel();\n if (channelAskingResize && newHeightFromChannel?.channelId === channelAskingResize) {\n return newHeightFromChannel;\n }\n return undefined;\n });\n\n constructor() {\n const elem = inject(ElementRef);\n const renderer = inject(Renderer2);\n\n this.resizeHandler.start();\n\n /** When a new height value is received set the height of the host element (in pixels) */\n effect(() => {\n const newHeightFromChannel = this.newHeightFromChannel();\n if (newHeightFromChannel) {\n renderer.setStyle(elem.nativeElement, 'height', `${newHeightFromChannel.height}px`);\n }\n });\n }\n}\n","import {\n NAVIGATION_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n NavigationMessage,\n NavigationV1_0,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n DestroyRef,\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\nimport {\n Subject,\n} from 'rxjs';\nimport {\n ConsumerManagerService,\n type MessageConsumer,\n} from '../managers/index';\n\n/**\n * A service that handles navigation messages and routing.\n *\n * This service listens for navigation messages and updates the router state accordingly.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationConsumerService implements MessageConsumer<NavigationMessage> {\n private readonly router = inject(Router);\n private readonly activeRoute = inject(ActivatedRoute);\n private readonly requestedUrl = new Subject<{ url: string; channelId?: string }>();\n\n /**\n * An observable that emits the requested URL and optional channel ID.\n */\n public readonly requestedUrl$ = this.requestedUrl.asObservable();\n\n /**\n * The type of messages this service handles.\n */\n public readonly type = NAVIGATION_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions = {\n /**\n * Use the message paylod to compute a new url and emit it via the public subject\n * Additionally navigate to the new url\n * @param message message to consume\n */\n '1.0': (message: RoutedMessage<NavigationV1_0>) => {\n const channelId = message.from || undefined;\n this.requestedUrl.next({ url: message.payload.url, channelId });\n this.navigate(message.payload.url, channelId);\n }\n };\n\n private readonly consumerManagerService = inject(ConsumerManagerService);\n\n constructor() {\n this.start();\n inject(DestroyRef).onDestroy(() => this.stop());\n }\n\n /**\n * Parses a URL and returns an object containing the paths and query parameters.\n * @param url - The URL to parse.\n * @returns An object containing the paths and query parameters.\n */\n private parseUrl(url: string): { paths: string[]; queryParams: { [key: string]: string } } {\n const urlObject = new URL(window.origin + url);\n const paths = urlObject.pathname.split('/').filter((segment) => !!segment);\n const queryParams = Object.fromEntries(urlObject.searchParams.entries());\n return { paths, queryParams };\n }\n\n /**\n * Navigates to the specified URL with optional channel ID.\n * @param url - The URL to navigate to.\n * @param channelId - The optional channel ID for the navigation state. This is the endpoint from where the message is received\n */\n private navigate(url: string, channelId?: string) {\n const { paths, queryParams } = this.parseUrl(url);\n void this.router.navigate(paths, { relativeTo: this.activeRoute.children.at(-1), queryParams, state: { channelId }, replaceUrl: true });\n }\n\n /**\n * @inheritdoc\n */\n public start() {\n this.consumerManagerService.register(this);\n }\n\n /**\n * @inheritdoc\n */\n public stop() {\n this.consumerManagerService.unregister(this);\n }\n}\n","import {\n Injectable,\n} from '@angular/core';\n\n/**\n * This service allows routes to be memorized with an optional lifetime and provides methods to retrieve and manage these routes.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RouteMemorizeService {\n private readonly routeTimers: { [x: string]: ReturnType<typeof setTimeout> } = {};\n /** All memorized routes */\n public readonly routeStack: { [x: string]: string } = {};\n\n /**\n * Memorizes a route for a given channel ID with an optional lifetime.\n * @param channelId - The ID of the channel to memorize the route for.\n * @param url - The URL of the route to memorize.\n * @param liveTime - The optional lifetime of the memorized route in milliseconds. If provided, the route will be removed after this time.\n */\n public memorizeRoute(channelId: string, url: string, liveTime?: number): void {\n this.routeStack[channelId] = url;\n\n const timerRef = this.routeTimers[channelId];\n if (timerRef) {\n clearTimeout(timerRef);\n }\n if (liveTime && liveTime > 0) {\n this.routeTimers[channelId] = setTimeout(() => {\n delete this.routeStack[channelId];\n delete this.routeTimers[channelId];\n }, liveTime);\n }\n }\n\n /**\n * Retrieves the memorized route for a given channel ID.\n * @param channelId - The ID of the channel to retrieve the memorized route for.\n * @returns The memorized route URL or undefined if no route is memorized for the given channel ID.\n */\n public getRoute(channelId: string): string | undefined {\n return this.routeStack[channelId];\n }\n}\n","import {\n computed,\n Directive,\n effect,\n inject,\n input,\n untracked,\n} from '@angular/core';\nimport {\n toSignal,\n} from '@angular/core/rxjs-interop';\nimport {\n NavigationConsumerService,\n} from '../navigation.consumer.service';\nimport {\n RouteMemorizeService,\n} from './route-memorize.service';\n\n@Directive({\n selector: 'iframe[memorizeRoute]',\n standalone: true\n})\nexport class RouteMemorizeDirective {\n /**\n * Whether to memorize the route.\n * Default is true.\n */\n public memorizeRoute = input<boolean | undefined | ''>(true);\n\n /**\n * The ID used to memorize the route.\n */\n public memorizeRouteId = input<string>();\n\n /**\n * The maximum age for memorizing the route.\n * Default is 0.\n */\n public memorizeMaxAge = input<number>(0);\n\n /**\n * The maximum age for memorizing the route, used as a fallback.\n * Default is 0.\n */\n public memorizeRouteMaxAge = input<number>(0);\n\n /**\n * The connection ID for the iframe where the actual directive is applied.\n */\n public connect = input<string>();\n\n private readonly maxAge = computed(() => {\n return this.memorizeMaxAge() || this.memorizeRouteMaxAge();\n });\n\n constructor() {\n const memory = inject(RouteMemorizeService);\n const requestedUrlSignal = toSignal(inject(NavigationConsumerService).requestedUrl$);\n\n /**\n * This effect listens for changes in the `memorizeRoute`, `requestedUrlSignal`, and `memorizeRouteId` or `connect` inputs.\n * If `memorizeRoute` is not false and a requested URL with a matching channel ID is found, it memorizes the route using the route memory service.\n */\n effect(() => {\n const memorizeRoute = this.memorizeRoute();\n if (memorizeRoute === false) {\n return;\n }\n const requested = requestedUrlSignal();\n const id = this.memorizeRouteId() || this.connect();\n if (requested && id && requested.channelId === id) {\n memory.memorizeRoute(id, requested.url, untracked(this.maxAge));\n }\n });\n }\n}\n","import type {\n NavigationMessage,\n NavigationV1_0,\n} from '@ama-mfe/messages';\nimport {\n NAVIGATION_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n ActivatedRoute,\n NavigationEnd,\n Router,\n} from '@angular/router';\nimport {\n filter,\n map,\n} from 'rxjs';\nimport {\n type MessageProducer,\n registerProducer,\n} from '../managers/index';\nimport {\n type ErrorContent,\n} from '../messages/error';\n\n/** Options for the routing handling in case of navigation producer message */\nexport interface RoutingServiceOptions {\n /**\n * Whether to handle only sub-routes.\n * If true, the routing service will handle only sub-routes.\n * Default is false.\n */\n subRouteOnly?: boolean;\n}\n\n/**\n * A service that handles routing and message production for navigation events.\n *\n * This service listens to Angular router events and sends navigation messages\n * to a message peer service. It also handles errors related to navigation messages.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RoutingService implements MessageProducer<NavigationMessage> {\n private readonly router = inject(Router);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly messageService = inject(MessagePeerService<NavigationMessage>);\n\n /**\n * @inheritdoc\n */\n public readonly types = NAVIGATION_MESSAGE_TYPE;\n\n constructor() {\n registerProducer(this);\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<NavigationV1_0>): void {\n // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger\n // eslint-disable-next-line no-console -- placeholder for the implementation with a logger\n console.error('Error in navigation service message', message);\n }\n\n /**\n * Handles embedded routing by listening to router events and sending navigation messages to the connected endpoints.\n * It can be a parent window or another iframe\n * @note - This method has to be called in an injection context\n * @param options - Optional parameters to control the routing behavior {@see RoutingServiceOptions}.\n */\n public handleEmbeddedRouting(options?: RoutingServiceOptions): void {\n const subRouteOnly = options?.subRouteOnly ?? false;\n this.router.events.pipe(\n takeUntilDestroyed(),\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n map(({ urlAfterRedirects }) => {\n const channelId = this.router.getCurrentNavigation()?.extras?.state?.channelId;\n const currentRouteRegExp = subRouteOnly && this.activatedRoute.routeConfig?.path && new RegExp('^' + this.activatedRoute.routeConfig.path.replace(/(?=\\W)/g, '\\\\'), 'i');\n return ({ url: currentRouteRegExp ? urlAfterRedirects.replace(currentRouteRegExp, '') : urlAfterRedirects, channelId });\n })\n ).subscribe(({ url, channelId }) => {\n const messageV10 = {\n type: 'navigation',\n version: '1.0',\n url\n } satisfies NavigationV1_0;\n // TODO: sendBest() is not implemented -- https://github.com/AmadeusITGroup/microfrontends/issues/11\n if (document.referrer) {\n this.messageService.send(messageV10);\n } else {\n if (channelId === undefined) {\n // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger\n // eslint-disable-next-line no-console -- warning message as channel id not mandatory\n console.warn('No channelId provided for navigation message');\n } else {\n try {\n this.messageService.send(messageV10, { to: [channelId] });\n } catch (error) {\n // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger\n // eslint-disable-next-line no-console -- send the error in the console, do not fail silently\n console.error('Error sending navigation message', error);\n }\n }\n }\n });\n }\n}\n","import {\n inject,\n Pipe,\n PipeTransform,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n type SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n ActivatedRoute,\n} from '@angular/router';\nimport {\n RouteMemorizeService,\n} from './route-memorize/route-memorize.service';\n\n/**\n * Options for restoring a route with optional query parameters and memory channel ID.\n */\nexport interface RestoreRouteOptions {\n /**\n * Whether to propagate query parameters from the top window to the module URL.\n */\n propagateQueryParams?: boolean;\n\n /**\n * Whether to override existing query parameters in the module URL with those from the top window.\n */\n overrideQueryParams?: boolean;\n\n /**\n * The memory channel ID used to retrieve the memorized route.\n * If provided, the memorized route associated with this ID will be used.\n */\n memoryChannelId?: string;\n}\n\n/**\n * A pipe that restores a route with optional query parameters and memory channel ID.\n *\n * This pipe is used to transform a URL or SafeResourceUrl by appending query parameters\n * and adjusting the pathname based on the current active route and memorized route.\n */\n@Pipe({\n name: 'restoreRoute'\n})\nexport class RestoreRoute implements PipeTransform {\n private readonly activeRoute = inject(ActivatedRoute);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly routeMemorizeService = inject(RouteMemorizeService, { optional: true });\n\n /**\n * Transforms the given URL or SafeResourceUrl by appending query parameters and adjusting the pathname.\n * @param url - The URL or SafeResourceUrl to be transformed.\n * @param options - Optional parameters to control the transformation. {@see RestoreRouteOptions}\n * @returns - The transformed SafeResourceUrl or undefined if the input URL is invalid.\n */\n public transform(url: string, options?: Partial<RestoreRouteOptions>): string;\n public transform(url: SafeResourceUrl, options?: Partial<RestoreRouteOptions>): SafeResourceUrl;\n public transform(url: undefined, options?: Partial<RestoreRouteOptions>): undefined;\n public transform(url: string | SafeResourceUrl | undefined, options?: Partial<RestoreRouteOptions>): string | SafeResourceUrl | undefined {\n const urlString = typeof url === 'string'\n ? url\n : this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, url || null);\n\n if (!url) {\n return undefined;\n }\n\n if (urlString) {\n const moduleUrl = new URL(urlString);\n const queryParamsModule = new URLSearchParams(moduleUrl.searchParams);\n\n const channelId = options?.memoryChannelId;\n const memorizedRoute = channelId && this.routeMemorizeService?.getRoute(channelId);\n const topWindowUrl = new URL(memorizedRoute ? window.origin + memorizedRoute : window.location.href);\n const queryParamsTopWindow = new URLSearchParams(topWindowUrl.search);\n\n if (options?.propagateQueryParams) {\n for (const [key, value] of queryParamsTopWindow) {\n if (options?.overrideQueryParams || !queryParamsModule.has(key)) {\n queryParamsModule.set(key, value);\n }\n }\n }\n moduleUrl.search = queryParamsModule.toString();\n moduleUrl.pathname += topWindowUrl.pathname.split(`/${this.activeRoute.routeConfig?.path}`).pop() || '';\n moduleUrl.pathname = moduleUrl.pathname.replace(/\\/{2,}/g, '/');\n const moduleUrlStringyfied = moduleUrl.toString();\n return typeof url === 'string' ? moduleUrlStringyfied : this.domSanitizer.bypassSecurityTrustResourceUrl(moduleUrlStringyfied);\n }\n }\n}\n","/** Default suffix for an url containing a theme css file */\nexport const THEME_URL_SUFFIX = '-theme.css';\n/** Default name for the query parameter containing the theme name */\nexport const THEME_QUERY_PARAM_NAME = 'theme';\n\n/**\n * Fetches a CSS document and returns the content as a string.\n * @param cssPath - The path to download the CSS.\n * @returns The content of the CSS document as a string, empty string if the fetch fails.\n */\nexport async function getStyle(cssPath: string): Promise<string> {\n try {\n const myRequest = new Request(cssPath);\n const response = await fetch(myRequest);\n const cssText = response.ok ? await response.text() : '';\n return cssText;\n } catch (error) {\n // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger\n // eslint-disable-next-line no-console -- display the warning instead of failing silently\n console.warn(`Failed to download style from: ${cssPath} with error: ${error?.toString()}`);\n }\n return '';\n}\n\n/**\n * Applies the given CSS theme as a stylesheet.\n * @param themeValue - CSS as text containing a theme definition.\n * @param cleanPrevious - Whether to remove previously applied stylesheets if no themeValue provided. Default is true.\n */\nexport function applyTheme(themeValue?: string, cleanPrevious = true): void {\n if (themeValue !== undefined) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(themeValue);\n document.adoptedStyleSheets = cleanPrevious ? [sheet] : [...document.adoptedStyleSheets, sheet];\n } else if (cleanPrevious) { // remove the styles if the theme value comes undefined or empty string\n document.adoptedStyleSheets = [];\n }\n}\n\n/**\n * Download the application additional theme\n * @param theme Name of the theme to download from the current application\n */\nexport function downloadApplicationThemeCss(theme: string) {\n const cssHref = `${theme.endsWith('.css') ? theme : theme + THEME_URL_SUFFIX}`;\n return getStyle(cssHref);\n}\n\n/**\n * Applies the initial theme based on the URL query parameters.\n *\n * This function fetches the CSS theme specified in the URL query parameters and applies it as a stylesheet.\n * If a referrer is present, it also attempts to fetch and apply the theme from the referrer's URL.\n */\nexport async function applyInitialTheme(): Promise<PromiseSettledResult<void>[] | undefined> {\n const searchParams = new URLSearchParams(window.location.search);\n const theme = searchParams.get(THEME_QUERY_PARAM_NAME);\n document.adoptedStyleSheets = [];\n if (theme) {\n const themeRequest: Promise<void>[] = [];\n themeRequest.push(downloadApplicationThemeCss(theme).then((styleToApply) => applyTheme(styleToApply, false)));\n if (document.referrer) {\n const url = new URL(document.referrer);\n url.pathname += `${url.pathname.endsWith('/') ? '' : '/'}${theme}`;\n themeRequest.unshift(getStyle(url.toString()).then((styleToApply) => applyTheme(styleToApply, false)));\n }\n\n return Promise.allSettled(themeRequest);\n }\n return undefined;\n}\n","import type {\n ThemeMessage,\n ThemeV1_0,\n} from '@ama-mfe/messages';\nimport {\n THEME_MESSAGE_TYPE,\n ThemeStructure,\n} from '@ama-mfe/messages';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n effect,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n type MessageProducer,\n registerProducer,\n} from '../managers/index';\nimport {\n type ErrorContent,\n} from '../messages/index';\nimport {\n applyTheme,\n getStyle,\n THEME_QUERY_PARAM_NAME,\n THEME_URL_SUFFIX,\n} from './theme.helpers';\n\n/**\n * This service exposing the current theme signal\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeProducerService implements MessageProducer<ThemeMessage> {\n private readonly messageService = inject(MessagePeerService<ThemeMessage>);\n private previousTheme: ThemeStructure | undefined;\n\n private readonly currentThemeSelection;\n /** Current selected theme signal */\n public readonly currentTheme;\n\n /**\n * The type of messages this service handles ('theme').\n */\n public readonly types = THEME_MESSAGE_TYPE;\n\n constructor() {\n registerProducer(this);\n\n // get the current theme name from the url (if any) and emit a first value for the current theme\n const parentUrl = new URL(window.location.toString());\n const selectedThemeName = parentUrl.searchParams.get(THEME_QUERY_PARAM_NAME);\n this.currentThemeSelection = signal<ThemeStructure | undefined>(selectedThemeName\n ? {\n name: selectedThemeName,\n css: null\n }\n : undefined);\n this.currentTheme = this.currentThemeSelection.asReadonly();\n\n if (selectedThemeName) {\n void this.changeTheme(selectedThemeName);\n }\n\n // When the current theme changes, apply it to the current application\n effect(() => {\n const themeObj = this.currentTheme();\n if (themeObj?.css !== null) {\n applyTheme(themeObj?.css);\n }\n });\n\n /**\n * This effect listens for changes in the `currentTheme` signal. If a valid theme object with CSS is present,\n * it creates a theme message and sends it via the message service.\n */\n effect(() => {\n const themeObj = this.currentTheme();\n if (themeObj && themeObj.css !== null) {\n const messageV10 = {\n type: 'theme',\n name: themeObj.name,\n css: themeObj.css,\n version: '1.0'\n } satisfies ThemeV1_0;\n // TODO: sendBest() is not yet implemented -- https://github.com/AmadeusITGroup/microfrontends/issues/11\n this.messageService.send(messageV10);\n }\n });\n }\n\n /**\n * Changes the current theme to the specified theme name.\n * @param themeName - The name of the theme to change to.\n */\n public async changeTheme(themeName?: string): Promise<void> {\n const cssHref = themeName && `${themeName}${THEME_URL_SUFFIX}`;\n const styleObj = cssHref ? await getStyle(cssHref) : '';\n this.currentThemeSelection.update((theme) => {\n this.previousTheme = theme;\n return themeName\n ? { name: themeName, css: styleObj }\n : undefined;\n });\n }\n\n /**\n * Reverts to the previous theme.\n */\n public revertToPreviousTheme(): void {\n this.currentThemeSelection.set(this.previousTheme);\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<ThemeV1_0>): void {\n // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger\n // eslint-disable-next-line no-console -- error message should be made available with the logger\n console.error('Error in theme service message', message);\n this.revertToPreviousTheme();\n }\n}\n","import {\n inject,\n Pipe,\n PipeTransform,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n type SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n ThemeProducerService,\n} from './theme.producer.service';\n\n/**\n * A pipe that applies the current theme from a theme manager service, to a given URL or SafeResourceUrl, as query param\n */\n@Pipe({\n name: 'applyTheme'\n})\nexport class ApplyTheme implements PipeTransform {\n private readonly themeManagerService = inject(ThemeProducerService);\n private readonly domSanitizer = inject(DomSanitizer);\n\n /**\n * Transforms the given URL or SafeResourceUrl by appending the current theme value as a query parameter.\n * @param url - The URL or SafeResourceUrl to be transformed.\n * @returns The transformed SafeResourceUrl or undefined if the input URL is invalid.\n */\n public transform(url: string): string;\n public transform(url: SafeResourceUrl): SafeResourceUrl;\n public transform(url: undefined): undefined;\n public transform(url: string | SafeResourceUrl | undefined): string | SafeResourceUrl | undefined {\n if (!url) {\n return undefined;\n }\n const currentTheme = this.themeManagerService.currentTheme();\n const urlString = typeof url === 'string'\n ? url\n : this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, url);\n\n if (urlString) {\n const moduleUrl = new URL(urlString);\n if (currentTheme) {\n moduleUrl.searchParams.set('theme', currentTheme.name);\n }\n const moduleUrlStringyfied = moduleUrl.toString();\n return typeof url === 'string' ? moduleUrlStringyfied : this.domSanitizer.bypassSecurityTrustResourceUrl(moduleUrlStringyfied);\n }\n\n return undefined;\n }\n}\n","import type {\n ThemeMessage,\n ThemeV1_0,\n} from '@ama-mfe/messages';\nimport {\n THEME_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n DestroyRef,\n inject,\n Injectable,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n} from '@angular/platform-browser';\nimport {\n ConsumerManagerService,\n MessageConsumer,\n} from '../managers/index';\nimport {\n applyTheme,\n downloadApplicationThemeCss,\n} from './theme.helpers';\n\n/**\n * A service that handles theme messages and applies the received theme.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeConsumerService implements MessageConsumer<ThemeMessage> {\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly consumerManagerService = inject(ConsumerManagerService);\n /**\n * The type of messages this service handles ('theme').\n */\n public readonly type = THEME_MESSAGE_TYPE;\n\n /**\n * The supported versions of theme messages and their handlers.\n */\n public readonly supportedVersions = {\n /**\n * Use the message paylod to get the theme and apply it\n * @param message message to consume\n */\n '1.0': async (message: RoutedMessage<ThemeV1_0>) => {\n const sanitizedCss = this.domSanitizer.sanitize(SecurityContext.STYLE, message.payload.css);\n if (sanitizedCss !== null) {\n applyTheme(sanitizedCss);\n }\n try {\n const css = await downloadApplicationThemeCss(message.payload.name);\n applyTheme(css, false);\n } catch (e) {\n // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger\n // eslint-disable-next-line no-console -- log the error - replace this with a proper logger\n console.warn(`no CSS variable for the theme ${message.payload.name}`, e);\n }\n }\n };\n\n constructor() {\n this.start();\n inject(DestroyRef).onDestroy(() => this.stop());\n }\n\n /**\n * Starts the theme handler service by registering it into the consumer manager service.\n */\n public start() {\n this.consumerManagerService.register(this);\n }\n\n /**\n * Stops the theme handler service by unregistering it from the consumer manager service.\n */\n public stop() {\n this.consumerManagerService.unregister(this);\n }\n}\n","import {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n HostBinding,\n inject,\n input,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n SafeResourceUrl,\n} from '@angular/platform-browser';\n\n@Directive({\n selector: 'iframe[connect]',\n standalone: true\n})\nexport class ConnectDirective {\n /**\n * The connection ID required for the message peer service.\n */\n public connect = input.required<string>();\n\n /**\n * The sanitized source URL for the iframe.\n */\n public src = input<SafeResourceUrl>();\n\n /**\n * Binds the `src` attribute of the iframe to the sanitized source URL.\n */\n @HostBinding('src')\n public get srcAttr() {\n return this.src();\n }\n\n private readonly messageService = inject(MessagePeerService);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly elRef = inject(ElementRef);\n\n private readonly clientOrigin = computed(() => {\n const src = this.src();\n const srcString = src && this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, src);\n return srcString && new URL(srcString).origin;\n });\n\n constructor() {\n // When the origin url or the peer id changes it will remake the connection with the new updates. The old connection is closed\n effect(async () => {\n const clientOrigin = this.clientOrigin();\n const connectId = this.connect();\n const moduleWindow = (this.elRef.nativeElement as HTMLIFrameElement).contentWindow;\n\n this.messageService.disconnect();\n if (clientOrigin && moduleWindow) {\n try {\n await this.messageService.listen(connectId, {\n window: moduleWindow,\n origin: clientOrigin\n });\n } catch (e) {\n // TODO https://github.com/AmadeusITGroup/otter/issues/2887 - proper logger\n // eslint-disable-next-line no-console -- log the error - replace this with a proper logger\n console.error(e);\n }\n }\n });\n // When the directive is destroyed clean up the connection too.\n inject(DestroyRef).onDestroy(() => this.messageService.disconnect());\n }\n}\n","import type {\n Message,\n PeerConnectionOptions,\n} from '@amadeus-it-group/microfrontends';\nimport {\n ERROR_MESSAGE_TYPE,\n} from './messages';\n\n/**\n * A constant array of known message types and their versions.\n */\nexport const KNOWN_MESSAGES = [\n {\n type: ERROR_MESSAGE_TYPE,\n version: '1.0'\n }\n] as const satisfies Message[];\n\n/**\n * Returns the default options for starting a client endpoint peer connection.\n * As origin it will take the parent origin and the window will be the parent window\n */\nexport function getDefaultClientEndpointStartOptions(): PeerConnectionOptions {\n if (document.referrer) {\n return {\n origin: new URL(document.referrer).origin,\n window: window.parent\n };\n }\n return {};\n}\n","import {\n MESSAGE_PEER_CONFIG,\n MESSAGE_PEER_CONNECT_OPTIONS,\n MessagePeerConfig,\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n makeEnvironmentProviders,\n} from '@angular/core';\nimport {\n getDefaultClientEndpointStartOptions,\n KNOWN_MESSAGES,\n} from '../utils';\nimport {\n ConnectionConfig,\n ConnectionService,\n} from './connect.resources';\n\n/**\n * Provide the communication protocol connection configuration\n * @param connectionConfig The identifier of the application in the communication protocol ecosystem plus the types of messages able to exchange\n */\nexport function provideConnection(connectionConfig: ConnectionConfig) {\n const config: MessagePeerConfig = { id: connectionConfig.id, knownMessages: [...KNOWN_MESSAGES, ...(connectionConfig.knownMessages || [])] };\n return makeEnvironmentProviders([\n {\n provide: MESSAGE_PEER_CONFIG, useValue: config\n },\n {\n provide: MESSAGE_PEER_CONNECT_OPTIONS, useValue: getDefaultClientEndpointStartOptions()\n },\n {\n // in the case of the ConnectionService will extends the base service 'useExisting' should be used\n provide: MessagePeerService, useClass: ConnectionService, deps: [MESSAGE_PEER_CONFIG]\n }\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ConnectionService"],"mappings":"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"}
1
+ {"version":3,"file":"ama-mfe-ng-utils.mjs","sources":["../../src/messages/available.sender.ts","../../src/messages/error.sender.ts","../../src/managers/producer.manager.service.ts","../../src/managers/consumer.manager.service.ts","../../src/managers/utils.ts","../../src/messages/error/base.ts","../../src/resize/resize.consumer.service.ts","../../src/resize/resize.producer.service.ts","../../src/resize/resize.directive.ts","../../src/navigation/navigation.consumer.service.ts","../../src/navigation/route-memorize/route-memorize.service.ts","../../src/navigation/route-memorize/route-memorize.directive.ts","../../src/navigation/navigation.producer.service.ts","../../src/navigation/restore-route.pipe.ts","../../src/theme/theme.helpers.ts","../../src/theme/theme.producer.service.ts","../../src/theme/apply-theme.pipe.ts","../../src/theme/theme.consumer.service.ts","../../src/connect/connect.directive.ts","../../src/utils.ts","../../src/connect/connect.providers.ts","../../src/ama-mfe-ng-utils.ts"],"sourcesContent":["import type {\n DeclareMessages,\n} from '@amadeus-it-group/microfrontends';\nimport type {\n BasicMessageConsumer,\n} from '../managers/interfaces';\n\n/**\n * Gets the available consumers and formats them into a {@see DeclareMessages} object.\n * @param consumers - The list of registered message consumers.\n * @returns The formatted DeclareMessages object.\n */\nexport const getAvailableConsumers = (consumers: BasicMessageConsumer[]) => {\n return {\n type: 'declare_messages',\n version: '1.0',\n messages: consumers.flatMap(({ type, supportedVersions }) => Object.keys(supportedVersions).map((version) => ({ type, version })))\n } satisfies DeclareMessages;\n};\n","import type {\n Message,\n MessagePeerType,\n} from '@amadeus-it-group/microfrontends';\nimport type {\n ERROR_MESSAGE_TYPE,\n ErrorContent,\n ErrorMessageV1_0,\n} from './error/index';\n\n/**\n * Helper function to send an error message by the given endpoint (peer)\n * @param peer The endpoint sending the message\n * @param content the content of the error message to be sent\n */\nexport const sendError = (peer: MessagePeerType<any>, content: ErrorContent) => {\n return peer.send({\n type: 'error',\n version: '1.0',\n ...content\n } satisfies ErrorMessageV1_0);\n};\n\n/**\n * Check if the given message is of type error and the error reson is present too\n * @param message the message to be checked\n */\n// eslint-disable-next-line @stylistic/max-len -- constant definition\nexport const isErrorMessage = (message: any): message is Message & { type: typeof ERROR_MESSAGE_TYPE } & ErrorContent => (message && typeof message === 'object' && message.type === 'error' && !!message.reason);\n","import type {\n Message,\n} from '@amadeus-it-group/microfrontends';\nimport {\n Injectable,\n} from '@angular/core';\nimport type {\n ErrorContent,\n} from '../messages/index';\nimport type {\n MessageProducer,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProducerManagerService {\n private readonly registeredProducers = new Set<MessageProducer>();\n\n /** Get the list of registered producers of messages. The list will contain unique elements */\n public get producers() {\n return [...this.registeredProducers];\n }\n\n /**\n * Register a producer of a message\n * @param producer The instance of the message producer\n */\n public register(producer: MessageProducer) {\n this.registeredProducers.add((producer));\n }\n\n /**\n * Unregister a producer of a message\n * @param producer The instance of the message producer\n */\n public unregister(producer: MessageProducer) {\n this.registeredProducers.delete((producer));\n }\n\n /**\n * Handles the received error message for the given message type by invoking the appropriate producer handlers.\n * @template T - The type of the message, extending from Message.\n * @param message - The error message to handle.\n * @returns - A promise that resolves to true if the error was handled by at least one handler, false otherwise.\n */\n public async dispatchError<T extends Message = Message>(message: ErrorContent<T>) {\n const handlers = this.producers\n .filter(({ types }) => (Array.isArray(types) ? types : [types]).includes(message.source.type));\n\n const handlersPresent = handlers.length > 0;\n if (handlersPresent) {\n await Promise.all(\n handlers.map((handler) => handler.handleError(message))\n );\n }\n return handlersPresent;\n }\n}\n","import {\n Message,\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n effect,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n getAvailableConsumers,\n} from '../messages/available.sender';\nimport {\n isErrorMessage,\n sendError,\n} from '../messages/error.sender';\nimport type {\n BasicMessageConsumer,\n} from './interfaces';\nimport {\n ProducerManagerService,\n} from './producer.manager.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConsumerManagerService {\n private readonly messageService = inject(MessagePeerService);\n private readonly producerManagerService = inject(ProducerManagerService);\n private readonly registeredConsumers = signal<BasicMessageConsumer[]>([]);\n private readonly logger = inject(LoggerService);\n\n /** The list of registered consumers */\n public readonly consumers = this.registeredConsumers.asReadonly();\n\n constructor() {\n this.messageService.messages$.pipe(takeUntilDestroyed()).subscribe((message) => this.consumeMessage(message));\n\n // Each time a consumer is registered/unregistered update the list of registered messages\n effect(() => {\n const declareMessages = getAvailableConsumers(this.consumers());\n\n // registering consumed messages locally for validation\n for (const message of declareMessages.messages) {\n this.messageService.registerMessage(message);\n }\n });\n }\n\n /**\n * Consume a received message\n * @param message the received message body\n */\n private async consumeMessage(message: RoutedMessage<Message>) {\n if (isErrorMessage(message.payload)) {\n const isHandled = await this.producerManagerService.dispatchError(message.payload);\n if (!isHandled) {\n this.logger.warn('Error message not handled', message);\n }\n return;\n }\n\n return this.consumeAdditionalMessage(message);\n }\n\n /**\n * Call the registered message callback(s) to consume the given message\n * Handle error messages of internal communication protocol messages\n * @param message message to consume\n */\n private async consumeAdditionalMessage(message: RoutedMessage<Message>) {\n if (!message.payload) {\n this.logger.warn('Cannot consume a messages with undefined payload.');\n return;\n }\n\n const consumers = this.consumers();\n const typeMatchingConsumers = consumers\n .filter((consumer) => consumer.type === message.payload.type);\n\n if (typeMatchingConsumers.length === 0) {\n this.logger.warn(`No consumer found for message type: ${message.payload.type}`);\n return sendError(this.messageService, { reason: 'unknown_type', source: message.payload });\n }\n\n const versionMatchingConsumers = typeMatchingConsumers\n .filter((consumer) => consumer.supportedVersions[message.payload.version])\n .flat();\n\n if (versionMatchingConsumers.length === 0) {\n this.logger.warn(`No consumer found for message version: ${message.payload.version}`);\n return sendError(this.messageService, { reason: 'version_mismatch', source: message.payload });\n }\n\n await Promise.all(\n versionMatchingConsumers\n .map(async (consumer) => {\n try {\n await consumer.supportedVersions[message.payload.version](message);\n } catch (error) {\n this.logger.error('Error while consuming message', error);\n sendError(this.messageService, { reason: 'internal_error', source: message.payload });\n }\n })\n );\n }\n\n /**\n * Register a message consumer\n * @param consumer an instance of message consumer\n */\n public register(consumer: BasicMessageConsumer) {\n this.registeredConsumers.update((consumers) => {\n return [...new Set(consumers).add(consumer)];\n });\n }\n\n /**\n * Unregister a message consumer\n * @param consumer an instance of message consumer\n */\n public unregister(consumer: BasicMessageConsumer) {\n this.registeredConsumers.update((consumers) => {\n return consumers.filter((c) => c !== consumer);\n });\n }\n}\n","import {\n DestroyRef,\n inject,\n} from '@angular/core';\nimport type {\n MessageProducer,\n} from './interfaces';\nimport {\n ProducerManagerService,\n} from './producer.manager.service';\n\n/**\n * Method to call in the constructor of a producer\n * @note should be used in injection context\n * @param producer\n */\nexport const registerProducer = (producer: MessageProducer) => {\n const producerManagerService = inject(ProducerManagerService);\n producerManagerService.register(producer);\n\n inject(DestroyRef).onDestroy(() => {\n producerManagerService.unregister(producer);\n });\n};\n","import type {\n Message,\n} from '@amadeus-it-group/microfrontends';\n\n/** the error message type */\nexport const ERROR_MESSAGE_TYPE = 'error';\n\n/**\n * The possible reasons for an error.\n */\nexport type ErrorReason = 'unknown_type' | 'version_mismatch' | 'internal_error';\n\n/**\n * The content of an error message.\n * @template S - The type of the source message.\n */\nexport interface ErrorContent<S extends Message = Message> {\n /** The reason for the error */\n reason: ErrorReason;\n /** The source message that caused the error */\n source: S;\n}\n","import type {\n ResizeMessage,\n ResizeV1_0,\n} from '@ama-mfe/messages';\nimport {\n RESIZE_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n DestroyRef,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n ConsumerManagerService,\n MessageConsumer,\n} from '../managers/index';\n\n/**\n * This service listens for resize messages and updates the height of elements based on the received messages.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ResizeConsumerService implements MessageConsumer<ResizeMessage> {\n private readonly newHeight = signal<{ height: number; channelId: string } | undefined>(undefined);\n\n /**\n * A readonly signal that provides the new height information from the channel.\n */\n public readonly newHeightFromChannel = this.newHeight.asReadonly();\n\n /**\n * The type of messages this service handles ('resize').\n */\n public readonly type = RESIZE_MESSAGE_TYPE;\n\n /**\n * The supported versions of resize messages and their handlers.\n */\n public supportedVersions = {\n /**\n * Use the message paylod to compute a new height and emit it via the public signal\n * @param message message to consume\n */\n '1.0': (message: RoutedMessage<ResizeV1_0>) => this.newHeight.set({ height: message.payload.height, channelId: message.from })\n };\n\n private readonly consumerManagerService = inject(ConsumerManagerService);\n\n constructor() {\n this.start();\n inject(DestroyRef).onDestroy(() => this.stop());\n }\n\n /**\n * Starts the resize handler service by registering it into the consumer manager service.\n */\n public start() {\n this.consumerManagerService.register(this);\n }\n\n /**\n * Stops the resize handler service by unregistering it from the consumer manager service.\n */\n public stop() {\n this.consumerManagerService.unregister(this);\n }\n}\n","import type {\n ResizeMessage,\n ResizeV1_0,\n} from '@ama-mfe/messages';\nimport {\n RESIZE_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n afterNextRender,\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n type MessageProducer,\n registerProducer,\n} from '../managers/index';\nimport {\n type ErrorContent,\n} from '../messages/index';\n\n/**\n * `scrollHeight` is a rounded number (cf https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight)\n *\n * So we have to add a delta to ensure no scrollbar will appear on the host,\n * in case the `scrollHeight` is rounded down\n */\nexport const DELTA_RESIZE = 1;\n\n/**\n * This service observe changes in the document's body height.\n * When the height changes, it sends a resize message with the new height, to the connected peers\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ResizeService implements MessageProducer<ResizeMessage> {\n private actualHeight?: number;\n private readonly messageService = inject(MessagePeerService<ResizeMessage>);\n private resizeObserver?: ResizeObserver;\n\n /**\n * @inheritdoc\n */\n public readonly types = RESIZE_MESSAGE_TYPE;\n\n constructor() {\n registerProducer(this);\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<ResizeMessage>): void {\n // eslint-disable-next-line no-console -- error handling placeholder\n console.error('Error in resize service message', message);\n }\n\n /**\n * This method sets up a `ResizeObserver` to observe changes in the document's body height.\n * When the height changes, it sends a resize message with the new height, to the connected peers\n */\n public startResizeObserver() {\n this.resizeObserver = new ResizeObserver(() => {\n if (document.body.scrollHeight !== this.actualHeight) {\n this.actualHeight = document.body.scrollHeight;\n const messageV10 = {\n type: 'resize',\n version: '1.0',\n height: document.body.scrollHeight + DELTA_RESIZE\n } satisfies ResizeV1_0;\n // TODO: sendBest() is not implemented -- https://github.com/AmadeusITGroup/microfrontends/issues/11\n this.messageService.send(messageV10);\n }\n });\n\n afterNextRender(() => this.resizeObserver?.observe(document.body));\n }\n}\n","import {\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n Renderer2,\n} from '@angular/core';\nimport {\n ResizeConsumerService,\n} from './resize.consumer.service';\n\n/**\n * A directive that adjusts the height of an element based on resize messages from a specified channel.\n */\n@Directive({\n selector: '[scalable]',\n standalone: true\n})\nexport class ScalableDirective {\n /**\n * The connection ID for the element, used as channel id backup\n */\n public connect = input<string>();\n\n /**\n * The channel id\n */\n public scalable = input<string>();\n\n private readonly resizeHandler = inject(ResizeConsumerService);\n\n /**\n * This signal checks if the current channel requesting the resize matches the channel ID from the resize handler.\n * If they match, it returns the new height information; otherwise, it returns undefined.\n */\n private readonly newHeightFromChannel = computed(() => {\n const channelAskingResize = this.scalable() || this.connect();\n const newHeightFromChannel = this.resizeHandler.newHeightFromChannel();\n if (channelAskingResize && newHeightFromChannel?.channelId === channelAskingResize) {\n return newHeightFromChannel;\n }\n return undefined;\n });\n\n constructor() {\n const elem = inject(ElementRef);\n const renderer = inject(Renderer2);\n\n this.resizeHandler.start();\n\n /** When a new height value is received set the height of the host element (in pixels) */\n effect(() => {\n const newHeightFromChannel = this.newHeightFromChannel();\n if (newHeightFromChannel) {\n renderer.setStyle(elem.nativeElement, 'height', `${newHeightFromChannel.height}px`);\n }\n });\n }\n}\n","import {\n NAVIGATION_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n NavigationMessage,\n NavigationV1_0,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n DestroyRef,\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n ActivatedRoute,\n Router,\n} from '@angular/router';\nimport {\n Subject,\n} from 'rxjs';\nimport {\n ConsumerManagerService,\n type MessageConsumer,\n} from '../managers/index';\n\n/**\n * A service that handles navigation messages and routing.\n *\n * This service listens for navigation messages and updates the router state accordingly.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationConsumerService implements MessageConsumer<NavigationMessage> {\n private readonly router = inject(Router);\n private readonly activeRoute = inject(ActivatedRoute);\n private readonly requestedUrl = new Subject<{ url: string; channelId?: string }>();\n\n /**\n * An observable that emits the requested URL and optional channel ID.\n */\n public readonly requestedUrl$ = this.requestedUrl.asObservable();\n\n /**\n * The type of messages this service handles.\n */\n public readonly type = NAVIGATION_MESSAGE_TYPE;\n\n /**\n * @inheritdoc\n */\n public readonly supportedVersions = {\n /**\n * Use the message paylod to compute a new url and emit it via the public subject\n * Additionally navigate to the new url\n * @param message message to consume\n */\n '1.0': (message: RoutedMessage<NavigationV1_0>) => {\n const channelId = message.from || undefined;\n this.requestedUrl.next({ url: message.payload.url, channelId });\n this.navigate(message.payload.url, channelId);\n }\n };\n\n private readonly consumerManagerService = inject(ConsumerManagerService);\n\n constructor() {\n this.start();\n inject(DestroyRef).onDestroy(() => this.stop());\n }\n\n /**\n * Parses a URL and returns an object containing the paths and query parameters.\n * @param url - The URL to parse.\n * @returns An object containing the paths and query parameters.\n */\n private parseUrl(url: string): { paths: string[]; queryParams: { [key: string]: string } } {\n const urlObject = new URL(window.origin + url);\n const paths = urlObject.pathname.split('/').filter((segment) => !!segment);\n const queryParams = Object.fromEntries(urlObject.searchParams.entries());\n return { paths, queryParams };\n }\n\n /**\n * Navigates to the specified URL with optional channel ID.\n * @param url - The URL to navigate to.\n * @param channelId - The optional channel ID for the navigation state. This is the endpoint from where the message is received\n */\n private navigate(url: string, channelId?: string) {\n const { paths, queryParams } = this.parseUrl(url);\n void this.router.navigate(paths, { relativeTo: this.activeRoute.children.at(-1), queryParams, state: { channelId }, replaceUrl: true });\n }\n\n /**\n * @inheritdoc\n */\n public start() {\n this.consumerManagerService.register(this);\n }\n\n /**\n * @inheritdoc\n */\n public stop() {\n this.consumerManagerService.unregister(this);\n }\n}\n","import {\n Injectable,\n} from '@angular/core';\n\n/**\n * This service allows routes to be memorized with an optional lifetime and provides methods to retrieve and manage these routes.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RouteMemorizeService {\n private readonly routeTimers: { [x: string]: ReturnType<typeof setTimeout> } = {};\n /** All memorized routes */\n public readonly routeStack: { [x: string]: string } = {};\n\n /**\n * Memorizes a route for a given channel ID with an optional lifetime.\n * @param channelId - The ID of the channel to memorize the route for.\n * @param url - The URL of the route to memorize.\n * @param liveTime - The optional lifetime of the memorized route in milliseconds. If provided, the route will be removed after this time.\n */\n public memorizeRoute(channelId: string, url: string, liveTime?: number): void {\n this.routeStack[channelId] = url;\n\n const timerRef = this.routeTimers[channelId];\n if (timerRef) {\n clearTimeout(timerRef);\n }\n if (liveTime && liveTime > 0) {\n this.routeTimers[channelId] = setTimeout(() => {\n delete this.routeStack[channelId];\n delete this.routeTimers[channelId];\n }, liveTime);\n }\n }\n\n /**\n * Retrieves the memorized route for a given channel ID.\n * @param channelId - The ID of the channel to retrieve the memorized route for.\n * @returns The memorized route URL or undefined if no route is memorized for the given channel ID.\n */\n public getRoute(channelId: string): string | undefined {\n return this.routeStack[channelId];\n }\n}\n","import {\n computed,\n Directive,\n effect,\n inject,\n input,\n untracked,\n} from '@angular/core';\nimport {\n toSignal,\n} from '@angular/core/rxjs-interop';\nimport {\n NavigationConsumerService,\n} from '../navigation.consumer.service';\nimport {\n RouteMemorizeService,\n} from './route-memorize.service';\n\n@Directive({\n selector: 'iframe[memorizeRoute]',\n standalone: true\n})\nexport class RouteMemorizeDirective {\n /**\n * Whether to memorize the route.\n * Default is true.\n */\n public memorizeRoute = input<boolean | undefined | ''>(true);\n\n /**\n * The ID used to memorize the route.\n */\n public memorizeRouteId = input<string>();\n\n /**\n * The maximum age for memorizing the route.\n * Default is 0.\n */\n public memorizeMaxAge = input<number>(0);\n\n /**\n * The maximum age for memorizing the route, used as a fallback.\n * Default is 0.\n */\n public memorizeRouteMaxAge = input<number>(0);\n\n /**\n * The connection ID for the iframe where the actual directive is applied.\n */\n public connect = input<string>();\n\n private readonly maxAge = computed(() => {\n return this.memorizeMaxAge() || this.memorizeRouteMaxAge();\n });\n\n constructor() {\n const memory = inject(RouteMemorizeService);\n const requestedUrlSignal = toSignal(inject(NavigationConsumerService).requestedUrl$);\n\n /**\n * This effect listens for changes in the `memorizeRoute`, `requestedUrlSignal`, and `memorizeRouteId` or `connect` inputs.\n * If `memorizeRoute` is not false and a requested URL with a matching channel ID is found, it memorizes the route using the route memory service.\n */\n effect(() => {\n const memorizeRoute = this.memorizeRoute();\n if (memorizeRoute === false) {\n return;\n }\n const requested = requestedUrlSignal();\n const id = this.memorizeRouteId() || this.connect();\n if (requested && id && requested.channelId === id) {\n memory.memorizeRoute(id, requested.url, untracked(this.maxAge));\n }\n });\n }\n}\n","import type {\n NavigationMessage,\n NavigationV1_0,\n} from '@ama-mfe/messages';\nimport {\n NAVIGATION_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n inject,\n Injectable,\n} from '@angular/core';\nimport {\n takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n ActivatedRoute,\n NavigationEnd,\n Router,\n} from '@angular/router';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n filter,\n map,\n} from 'rxjs';\nimport {\n type MessageProducer,\n registerProducer,\n} from '../managers/index';\nimport {\n type ErrorContent,\n} from '../messages/error';\n\n/** Options for the routing handling in case of navigation producer message */\nexport interface RoutingServiceOptions {\n /**\n * Whether to handle only sub-routes.\n * If true, the routing service will handle only sub-routes.\n * Default is false.\n */\n subRouteOnly?: boolean;\n}\n\n/**\n * A service that handles routing and message production for navigation events.\n *\n * This service listens to Angular router events and sends navigation messages\n * to a message peer service. It also handles errors related to navigation messages.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RoutingService implements MessageProducer<NavigationMessage> {\n private readonly router = inject(Router);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly messageService = inject(MessagePeerService<NavigationMessage>);\n private readonly logger = inject(LoggerService);\n\n /**\n * @inheritdoc\n */\n public readonly types = NAVIGATION_MESSAGE_TYPE;\n\n constructor() {\n registerProducer(this);\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<NavigationV1_0>): void {\n this.logger.error('Error in navigation service message', message);\n }\n\n /**\n * Handles embedded routing by listening to router events and sending navigation messages to the connected endpoints.\n * It can be a parent window or another iframe\n * @note - This method has to be called in an injection context\n * @param options - Optional parameters to control the routing behavior {@see RoutingServiceOptions}.\n */\n public handleEmbeddedRouting(options?: RoutingServiceOptions): void {\n const subRouteOnly = options?.subRouteOnly ?? false;\n this.router.events.pipe(\n takeUntilDestroyed(),\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n map(({ urlAfterRedirects }) => {\n const channelId = this.router.getCurrentNavigation()?.extras?.state?.channelId;\n const currentRouteRegExp = subRouteOnly && this.activatedRoute.routeConfig?.path && new RegExp('^' + this.activatedRoute.routeConfig.path.replace(/(?=\\W)/g, '\\\\'), 'i');\n return ({ url: currentRouteRegExp ? urlAfterRedirects.replace(currentRouteRegExp, '') : urlAfterRedirects, channelId });\n })\n ).subscribe(({ url, channelId }) => {\n const messageV10 = {\n type: 'navigation',\n version: '1.0',\n url\n } satisfies NavigationV1_0;\n // TODO: sendBest() is not implemented -- https://github.com/AmadeusITGroup/microfrontends/issues/11\n if (document.referrer) {\n this.messageService.send(messageV10);\n } else {\n if (channelId === undefined) {\n this.logger.warn('No channelId provided for navigation message');\n } else {\n try {\n this.messageService.send(messageV10, { to: [channelId] });\n } catch (error) {\n this.logger.error('Error sending navigation message', error);\n }\n }\n }\n });\n }\n}\n","import {\n inject,\n Pipe,\n PipeTransform,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n type SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n ActivatedRoute,\n} from '@angular/router';\nimport {\n RouteMemorizeService,\n} from './route-memorize/route-memorize.service';\n\n/**\n * Options for restoring a route with optional query parameters and memory channel ID.\n */\nexport interface RestoreRouteOptions {\n /**\n * Whether to propagate query parameters from the top window to the module URL.\n */\n propagateQueryParams?: boolean;\n\n /**\n * Whether to override existing query parameters in the module URL with those from the top window.\n */\n overrideQueryParams?: boolean;\n\n /**\n * The memory channel ID used to retrieve the memorized route.\n * If provided, the memorized route associated with this ID will be used.\n */\n memoryChannelId?: string;\n}\n\n/**\n * A pipe that restores a route with optional query parameters and memory channel ID.\n *\n * This pipe is used to transform a URL or SafeResourceUrl by appending query parameters\n * and adjusting the pathname based on the current active route and memorized route.\n */\n@Pipe({\n name: 'restoreRoute'\n})\nexport class RestoreRoute implements PipeTransform {\n private readonly activeRoute = inject(ActivatedRoute);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly routeMemorizeService = inject(RouteMemorizeService, { optional: true });\n\n /**\n * Transforms the given URL or SafeResourceUrl by appending query parameters and adjusting the pathname.\n * @param url - The URL or SafeResourceUrl to be transformed.\n * @param options - Optional parameters to control the transformation. {@see RestoreRouteOptions}\n * @returns - The transformed SafeResourceUrl or undefined if the input URL is invalid.\n */\n public transform(url: string, options?: Partial<RestoreRouteOptions>): string;\n public transform(url: SafeResourceUrl, options?: Partial<RestoreRouteOptions>): SafeResourceUrl;\n public transform(url: undefined, options?: Partial<RestoreRouteOptions>): undefined;\n public transform(url: string | SafeResourceUrl | undefined, options?: Partial<RestoreRouteOptions>): string | SafeResourceUrl | undefined {\n const urlString = typeof url === 'string'\n ? url\n : this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, url || null);\n\n if (!url) {\n return undefined;\n }\n\n if (urlString) {\n const moduleUrl = new URL(urlString);\n const queryParamsModule = new URLSearchParams(moduleUrl.searchParams);\n\n const channelId = options?.memoryChannelId;\n const memorizedRoute = channelId && this.routeMemorizeService?.getRoute(channelId);\n const topWindowUrl = new URL(memorizedRoute ? window.origin + memorizedRoute : window.location.href);\n const queryParamsTopWindow = new URLSearchParams(topWindowUrl.search);\n\n if (options?.propagateQueryParams) {\n for (const [key, value] of queryParamsTopWindow) {\n if (options?.overrideQueryParams || !queryParamsModule.has(key)) {\n queryParamsModule.set(key, value);\n }\n }\n }\n moduleUrl.search = queryParamsModule.toString();\n moduleUrl.pathname += topWindowUrl.pathname.split(`/${this.activeRoute.routeConfig?.path}`).pop() || '';\n moduleUrl.pathname = moduleUrl.pathname.replace(/\\/{2,}/g, '/');\n const moduleUrlStringyfied = moduleUrl.toString();\n return typeof url === 'string' ? moduleUrlStringyfied : this.domSanitizer.bypassSecurityTrustResourceUrl(moduleUrlStringyfied);\n }\n }\n}\n","import {\n type Logger,\n} from '@o3r/logger';\n\n/** Default suffix for an url containing a theme css file */\nexport const THEME_URL_SUFFIX = '-theme.css';\n/** Default name for the query parameter containing the theme name */\nexport const THEME_QUERY_PARAM_NAME = 'theme';\n\n/** Options and context for Style helpers */\nexport interface StyleHelperOptions {\n /**\n * Logger to reporter the logs\n */\n logger?: Logger;\n}\n\n/**\n * Fetches a CSS document and returns the content as a string.\n * @param cssPath - The path to download the CSS.\n * @param options Options and context for Style helpers\n * @returns The content of the CSS document as a string, empty string if the fetch fails.\n */\nexport async function getStyle(cssPath: string, options?: StyleHelperOptions): Promise<string> {\n try {\n const myRequest = new Request(cssPath);\n const response = await fetch(myRequest);\n const cssText = response.ok ? await response.text() : '';\n return cssText;\n } catch (error) {\n options?.logger?.warn(`Failed to download style from: ${cssPath} with error: ${error?.toString()}`);\n }\n return '';\n}\n\n/**\n * Applies the given CSS theme as a stylesheet.\n * @param themeValue - CSS as text containing a theme definition.\n * @param cleanPrevious - Whether to remove previously applied stylesheets if no themeValue provided. Default is true.\n */\nexport function applyTheme(themeValue?: string, cleanPrevious = true): void {\n if (themeValue !== undefined) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(themeValue);\n document.adoptedStyleSheets = cleanPrevious ? [sheet] : [...document.adoptedStyleSheets, sheet];\n } else if (cleanPrevious) { // remove the styles if the theme value comes undefined or empty string\n document.adoptedStyleSheets = [];\n }\n}\n\n/**\n * Download the application additional theme\n * @param theme Name of the theme to download from the current application\n * @param options Options and context for Style helpers\n */\nexport function downloadApplicationThemeCss(theme: string, options?: StyleHelperOptions) {\n const cssHref = `${theme.endsWith('.css') ? theme : theme + THEME_URL_SUFFIX}`;\n return getStyle(cssHref, options);\n}\n\n/**\n * Applies the initial theme based on the URL query parameters.\n *\n * This function fetches the CSS theme specified in the URL query parameters and applies it as a stylesheet.\n * If a referrer is present, it also attempts to fetch and apply the theme from the referrer's URL.\n * @param options Options and context for Style helpers\n */\nexport async function applyInitialTheme(options?: StyleHelperOptions): Promise<PromiseSettledResult<void>[] | undefined> {\n const searchParams = new URLSearchParams(window.location.search);\n const theme = searchParams.get(THEME_QUERY_PARAM_NAME);\n document.adoptedStyleSheets = [];\n if (theme) {\n const themeRequest: Promise<void>[] = [];\n themeRequest.push(downloadApplicationThemeCss(theme, options).then((styleToApply) => applyTheme(styleToApply, false)));\n if (document.referrer) {\n const url = new URL(document.referrer);\n url.pathname += `${url.pathname.endsWith('/') ? '' : '/'}${theme}`;\n themeRequest.unshift(getStyle(url.toString(), options).then((styleToApply) => applyTheme(styleToApply, false)));\n }\n\n return Promise.allSettled(themeRequest);\n }\n return undefined;\n}\n","import type {\n ThemeMessage,\n ThemeV1_0,\n} from '@ama-mfe/messages';\nimport {\n THEME_MESSAGE_TYPE,\n ThemeStructure,\n} from '@ama-mfe/messages';\nimport {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n effect,\n inject,\n Injectable,\n signal,\n} from '@angular/core';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n type MessageProducer,\n registerProducer,\n} from '../managers/index';\nimport {\n type ErrorContent,\n} from '../messages/index';\nimport {\n applyTheme,\n getStyle,\n THEME_QUERY_PARAM_NAME,\n THEME_URL_SUFFIX,\n} from './theme.helpers';\n/**\n * This service exposing the current theme signal\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeProducerService implements MessageProducer<ThemeMessage> {\n private readonly messageService = inject(MessagePeerService<ThemeMessage>);\n private readonly logger = inject(LoggerService);\n private previousTheme: ThemeStructure | undefined;\n\n private readonly currentThemeSelection;\n /** Current selected theme signal */\n public readonly currentTheme;\n\n /**\n * The type of messages this service handles ('theme').\n */\n public readonly types = THEME_MESSAGE_TYPE;\n\n constructor() {\n registerProducer(this);\n\n // get the current theme name from the url (if any) and emit a first value for the current theme\n const parentUrl = new URL(window.location.toString());\n const selectedThemeName = parentUrl.searchParams.get(THEME_QUERY_PARAM_NAME);\n this.currentThemeSelection = signal<ThemeStructure | undefined>(selectedThemeName\n ? {\n name: selectedThemeName,\n css: null\n }\n : undefined);\n this.currentTheme = this.currentThemeSelection.asReadonly();\n\n if (selectedThemeName) {\n void this.changeTheme(selectedThemeName);\n }\n\n // When the current theme changes, apply it to the current application\n effect(() => {\n const themeObj = this.currentTheme();\n if (themeObj?.css !== null) {\n applyTheme(themeObj?.css);\n }\n });\n\n /**\n * This effect listens for changes in the `currentTheme` signal. If a valid theme object with CSS is present,\n * it creates a theme message and sends it via the message service.\n */\n effect(() => {\n const themeObj = this.currentTheme();\n if (themeObj && themeObj.css !== null) {\n const messageV10 = {\n type: 'theme',\n name: themeObj.name,\n css: themeObj.css,\n version: '1.0'\n } satisfies ThemeV1_0;\n // TODO: sendBest() is not yet implemented -- https://github.com/AmadeusITGroup/microfrontends/issues/11\n this.messageService.send(messageV10);\n }\n });\n }\n\n /**\n * Changes the current theme to the specified theme name.\n * @param themeName - The name of the theme to change to.\n */\n public async changeTheme(themeName?: string): Promise<void> {\n const cssHref = themeName && `${themeName}${THEME_URL_SUFFIX}`;\n const styleObj = cssHref ? await getStyle(cssHref) : '';\n this.currentThemeSelection.update((theme) => {\n this.previousTheme = theme;\n return themeName\n ? { name: themeName, css: styleObj }\n : undefined;\n });\n }\n\n /**\n * Reverts to the previous theme.\n */\n public revertToPreviousTheme(): void {\n this.currentThemeSelection.set(this.previousTheme);\n }\n\n /**\n * @inheritdoc\n */\n public handleError(message: ErrorContent<ThemeV1_0>): void {\n this.logger.error('Error in theme service message', message);\n this.revertToPreviousTheme();\n }\n}\n","import {\n inject,\n Pipe,\n PipeTransform,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n type SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n ThemeProducerService,\n} from './theme.producer.service';\n\n/**\n * A pipe that applies the current theme from a theme manager service, to a given URL or SafeResourceUrl, as query param\n */\n@Pipe({\n name: 'applyTheme'\n})\nexport class ApplyTheme implements PipeTransform {\n private readonly themeManagerService = inject(ThemeProducerService);\n private readonly domSanitizer = inject(DomSanitizer);\n\n /**\n * Transforms the given URL or SafeResourceUrl by appending the current theme value as a query parameter.\n * @param url - The URL or SafeResourceUrl to be transformed.\n * @returns The transformed SafeResourceUrl or undefined if the input URL is invalid.\n */\n public transform(url: string): string;\n public transform(url: SafeResourceUrl): SafeResourceUrl;\n public transform(url: undefined): undefined;\n public transform(url: string | SafeResourceUrl | undefined): string | SafeResourceUrl | undefined {\n if (!url) {\n return undefined;\n }\n const currentTheme = this.themeManagerService.currentTheme();\n const urlString = typeof url === 'string'\n ? url\n : this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, url);\n\n if (urlString) {\n const moduleUrl = new URL(urlString);\n if (currentTheme) {\n moduleUrl.searchParams.set('theme', currentTheme.name);\n }\n const moduleUrlStringyfied = moduleUrl.toString();\n return typeof url === 'string' ? moduleUrlStringyfied : this.domSanitizer.bypassSecurityTrustResourceUrl(moduleUrlStringyfied);\n }\n\n return undefined;\n }\n}\n","import type {\n ThemeMessage,\n ThemeV1_0,\n} from '@ama-mfe/messages';\nimport {\n THEME_MESSAGE_TYPE,\n} from '@ama-mfe/messages';\nimport type {\n RoutedMessage,\n} from '@amadeus-it-group/microfrontends';\nimport {\n DestroyRef,\n inject,\n Injectable,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n} from '@angular/platform-browser';\nimport {\n LoggerService,\n} from '@o3r/logger';\nimport {\n ConsumerManagerService,\n MessageConsumer,\n} from '../managers/index';\nimport {\n applyTheme,\n downloadApplicationThemeCss,\n} from './theme.helpers';\n\n/**\n * A service that handles theme messages and applies the received theme.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeConsumerService implements MessageConsumer<ThemeMessage> {\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly consumerManagerService = inject(ConsumerManagerService);\n private readonly logger = inject(LoggerService);\n /**\n * The type of messages this service handles ('theme').\n */\n public readonly type = THEME_MESSAGE_TYPE;\n\n /**\n * The supported versions of theme messages and their handlers.\n */\n public readonly supportedVersions = {\n /**\n * Use the message paylod to get the theme and apply it\n * @param message message to consume\n */\n '1.0': async (message: RoutedMessage<ThemeV1_0>) => {\n const sanitizedCss = this.domSanitizer.sanitize(SecurityContext.STYLE, message.payload.css);\n if (sanitizedCss !== null) {\n applyTheme(sanitizedCss);\n }\n try {\n const css = await downloadApplicationThemeCss(message.payload.name, { logger: this.logger });\n applyTheme(css, false);\n } catch (e) {\n this.logger.warn(`No CSS variable for the theme ${message.payload.name}`, e);\n }\n }\n };\n\n constructor() {\n this.start();\n inject(DestroyRef).onDestroy(() => this.stop());\n }\n\n /**\n * Starts the theme handler service by registering it into the consumer manager service.\n */\n public start() {\n this.consumerManagerService.register(this);\n }\n\n /**\n * Stops the theme handler service by unregistering it from the consumer manager service.\n */\n public stop() {\n this.consumerManagerService.unregister(this);\n }\n}\n","import {\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n HostBinding,\n inject,\n input,\n SecurityContext,\n} from '@angular/core';\nimport {\n DomSanitizer,\n SafeResourceUrl,\n} from '@angular/platform-browser';\nimport {\n LoggerService,\n} from '@o3r/logger';\n\n@Directive({\n selector: 'iframe[connect]',\n standalone: true\n})\nexport class ConnectDirective {\n /**\n * The connection ID required for the message peer service.\n */\n public connect = input.required<string>();\n\n /**\n * The sanitized source URL for the iframe.\n */\n public src = input<SafeResourceUrl>();\n\n /**\n * Binds the `src` attribute of the iframe to the sanitized source URL.\n */\n @HostBinding('src')\n public get srcAttr() {\n return this.src();\n }\n\n private readonly messageService = inject(MessagePeerService);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly elRef = inject(ElementRef);\n\n private readonly clientOrigin = computed(() => {\n const src = this.src();\n const srcString = src && this.domSanitizer.sanitize(SecurityContext.RESOURCE_URL, src);\n return srcString && new URL(srcString).origin;\n });\n\n constructor() {\n const logger = inject(LoggerService);\n // When the origin url or the peer id changes it will remake the connection with the new updates. The old connection is closed\n effect(async () => {\n const clientOrigin = this.clientOrigin();\n const connectId = this.connect();\n const moduleWindow = (this.elRef.nativeElement as HTMLIFrameElement).contentWindow;\n\n this.messageService.disconnect();\n if (clientOrigin && moduleWindow) {\n try {\n await this.messageService.listen(connectId, {\n window: moduleWindow,\n origin: clientOrigin\n });\n } catch (e) {\n logger.error(`Fail to connect to client (connection ID: ${connectId})`, e);\n }\n }\n });\n // When the directive is destroyed clean up the connection too.\n inject(DestroyRef).onDestroy(() => this.messageService.disconnect());\n }\n}\n","import type {\n Message,\n PeerConnectionOptions,\n} from '@amadeus-it-group/microfrontends';\nimport {\n ERROR_MESSAGE_TYPE,\n} from './messages';\n\n/**\n * A constant array of known message types and their versions.\n */\nexport const KNOWN_MESSAGES = [\n {\n type: ERROR_MESSAGE_TYPE,\n version: '1.0'\n }\n] as const satisfies Message[];\n\n/**\n * Returns the default options for starting a client endpoint peer connection.\n * As origin it will take the parent origin and the window will be the parent window\n */\nexport function getDefaultClientEndpointStartOptions(): PeerConnectionOptions {\n if (document.referrer) {\n return {\n origin: new URL(document.referrer).origin,\n window: window.parent\n };\n }\n return {};\n}\n","import {\n MESSAGE_PEER_CONFIG,\n MESSAGE_PEER_CONNECT_OPTIONS,\n MessagePeerConfig,\n MessagePeerService,\n} from '@amadeus-it-group/microfrontends-angular';\nimport {\n makeEnvironmentProviders,\n} from '@angular/core';\nimport {\n getDefaultClientEndpointStartOptions,\n KNOWN_MESSAGES,\n} from '../utils';\nimport {\n ConnectionConfig,\n ConnectionService,\n} from './connect.resources';\n\n/**\n * Provide the communication protocol connection configuration\n * @param connectionConfig The identifier of the application in the communication protocol ecosystem plus the types of messages able to exchange\n */\nexport function provideConnection(connectionConfig: ConnectionConfig) {\n const config: MessagePeerConfig = { id: connectionConfig.id, knownMessages: [...KNOWN_MESSAGES, ...(connectionConfig.knownMessages || [])] };\n return makeEnvironmentProviders([\n {\n provide: MESSAGE_PEER_CONFIG, useValue: config\n },\n {\n provide: MESSAGE_PEER_CONNECT_OPTIONS, useValue: getDefaultClientEndpointStartOptions()\n },\n {\n // in the case of the ConnectionService will extends the base service 'useExisting' should be used\n provide: MessagePeerService, useClass: ConnectionService, deps: [MESSAGE_PEER_CONFIG]\n }\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ConnectionService"],"mappings":"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"}
@@ -5,6 +5,7 @@ export declare class ConsumerManagerService {
5
5
  private readonly messageService;
6
6
  private readonly producerManagerService;
7
7
  private readonly registeredConsumers;
8
+ private readonly logger;
8
9
  /** The list of registered consumers */
9
10
  readonly consumers: import("@angular/core").Signal<BasicMessageConsumer<Message>[]>;
10
11
  constructor();
@@ -1 +1 @@
1
- {"version":3,"file":"consumer.manager.service.d.ts","sourceRoot":"","sources":["../../src/managers/consumer.manager.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EAER,MAAM,kCAAkC,CAAC;AAoB1C,OAAO,KAAK,EACV,oBAAoB,EACrB,MAAM,cAAc,CAAC;;AAKtB,qBAGa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAC7D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAkC;IACzE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsC;IAE1E,uCAAuC;IACvC,SAAgB,SAAS,kEAAyC;;IAgBlE;;;OAGG;YACW,cAAc;IAc5B;;;;OAIG;YACW,wBAAwB;IAgDtC;;;OAGG;IACI,QAAQ,CAAC,QAAQ,EAAE,oBAAoB;IAM9C;;;OAGG;IACI,UAAU,CAAC,QAAQ,EAAE,oBAAoB;yCA3GrC,sBAAsB;6CAAtB,sBAAsB;CAgHlC"}
1
+ {"version":3,"file":"consumer.manager.service.d.ts","sourceRoot":"","sources":["../../src/managers/consumer.manager.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAER,MAAM,kCAAkC,CAAC;AAuB1C,OAAO,KAAK,EACV,oBAAoB,EACrB,MAAM,cAAc,CAAC;;AAKtB,qBAGa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAC7D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAkC;IACzE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsC;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAEhD,uCAAuC;IACvC,SAAgB,SAAS,kEAAyC;;IAgBlE;;;OAGG;YACW,cAAc;IAY5B;;;;OAIG;YACW,wBAAwB;IAqCtC;;;OAGG;IACI,QAAQ,CAAC,QAAQ,EAAE,oBAAoB;IAM9C;;;OAGG;IACI,UAAU,CAAC,QAAQ,EAAE,oBAAoB;yCA/FrC,sBAAsB;6CAAtB,sBAAsB;CAoGlC"}
@@ -21,6 +21,7 @@ export declare class RoutingService implements MessageProducer<NavigationMessage
21
21
  private readonly router;
22
22
  private readonly activatedRoute;
23
23
  private readonly messageService;
24
+ private readonly logger;
24
25
  /**
25
26
  * @inheritdoc
26
27
  */
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.producer.service.d.ts","sourceRoot":"","sources":["../../src/navigation/navigation.producer.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAuB3B,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;;AAE3B,+EAA+E;AAC/E,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,qBAGa,cAAe,YAAW,eAAe,CAAC,iBAAiB,CAAC;IACvE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiD;IAEhF;;OAEG;IACH,SAAgB,KAAK,gBAA2B;;IAMhD;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,GAAG,IAAI;IAM/D;;;;;OAKG;IACI,qBAAqB,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;yCA7BxD,cAAc;6CAAd,cAAc;CAiE1B"}
1
+ {"version":3,"file":"navigation.producer.service.d.ts","sourceRoot":"","sources":["../../src/navigation/navigation.producer.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACf,MAAM,mBAAmB,CAAC;AA0B3B,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;;AAE3B,+EAA+E;AAC/E,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,qBAGa,cAAe,YAAW,eAAe,CAAC,iBAAiB,CAAC;IACvE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiD;IAChF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAEhD;;OAEG;IACH,SAAgB,KAAK,gBAA2B;;IAMhD;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,GAAG,IAAI;IAI/D;;;;;OAKG;IACI,qBAAqB,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;yCA5BxD,cAAc;6CAAd,cAAc;CA4D1B"}
package/package.json CHANGED
@@ -1,25 +1,27 @@
1
1
  {
2
2
  "name": "@ama-mfe/ng-utils",
3
- "version": "12.2.0-prerelease.4",
3
+ "version": "12.2.0-prerelease.41",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
7
  "peerDependencies": {
8
- "@ama-mfe/messages": "^12.2.0-prerelease.4",
9
- "@amadeus-it-group/microfrontends": "0.0.3",
10
- "@amadeus-it-group/microfrontends-angular": "0.0.3",
8
+ "@ama-mfe/messages": "^12.2.0-prerelease.41",
9
+ "@amadeus-it-group/microfrontends": "0.0.4",
10
+ "@amadeus-it-group/microfrontends-angular": "0.0.4",
11
11
  "@angular-devkit/core": "~19.2.0",
12
12
  "@angular-devkit/schematics": "~19.2.0",
13
13
  "@angular/common": "^19.0.0",
14
14
  "@angular/core": "^19.0.0",
15
15
  "@angular/platform-browser": "~19.2.0",
16
16
  "@angular/router": "~19.2.0",
17
- "@o3r/schematics": "^12.2.0-prerelease.4",
17
+ "@o3r/logger": "^12.2.0-prerelease.41",
18
+ "@o3r/schematics": "^12.2.0-prerelease.41",
18
19
  "rxjs": "^7.8.1"
19
20
  },
20
21
  "dependencies": {
21
- "@amadeus-it-group/microfrontends": "0.0.3",
22
- "@amadeus-it-group/microfrontends-angular": "0.0.3",
22
+ "@amadeus-it-group/microfrontends": "0.0.4",
23
+ "@amadeus-it-group/microfrontends-angular": "0.0.4",
24
+ "@o3r/logger": "^12.2.0-prerelease.41",
23
25
  "tslib": "^2.6.2"
24
26
  },
25
27
  "sideEffects": false,
@@ -46,6 +48,9 @@
46
48
  "@angular-devkit/schematics": {
47
49
  "optional": true
48
50
  },
51
+ "@o3r/logger": {
52
+ "optional": true
53
+ },
49
54
  "@o3r/schematics": {
50
55
  "optional": true
51
56
  },
@@ -8,6 +8,7 @@ import * as i0 from "@angular/core";
8
8
  export declare class ThemeConsumerService implements MessageConsumer<ThemeMessage> {
9
9
  private readonly domSanitizer;
10
10
  private readonly consumerManagerService;
11
+ private readonly logger;
11
12
  /**
12
13
  * The type of messages this service handles ('theme').
13
14
  */
@@ -1 +1 @@
1
- {"version":3,"file":"theme.consumer.service.d.ts","sourceRoot":"","sources":["../../src/theme/theme.consumer.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACV,MAAM,mBAAmB,CAAC;AAI3B,OAAO,KAAK,EACV,aAAa,EACd,MAAM,kCAAkC,CAAC;AAU1C,OAAO,EAEL,eAAe,EAChB,MAAM,mBAAmB,CAAC;;AAM3B;;GAEG;AACH,qBAGa,oBAAqB,YAAW,eAAe,CAAC,YAAY,CAAC;IACxE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAkC;IACzE;;OAEG;IACH,SAAgB,IAAI,WAAsB;IAE1C;;OAEG;IACH,SAAgB,iBAAiB;QAC/B;;;WAGG;yBACoB,aAAa,CAAC,SAAS,CAAC;MAc/C;;IAOF;;OAEG;IACI,KAAK;IAIZ;;OAEG;IACI,IAAI;yCA/CA,oBAAoB;6CAApB,oBAAoB;CAkDhC"}
1
+ {"version":3,"file":"theme.consumer.service.d.ts","sourceRoot":"","sources":["../../src/theme/theme.consumer.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACV,MAAM,mBAAmB,CAAC;AAI3B,OAAO,KAAK,EACV,aAAa,EACd,MAAM,kCAAkC,CAAC;AAa1C,OAAO,EAEL,eAAe,EAChB,MAAM,mBAAmB,CAAC;;AAM3B;;GAEG;AACH,qBAGa,oBAAqB,YAAW,eAAe,CAAC,YAAY,CAAC;IACxE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAkC;IACzE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD;;OAEG;IACH,SAAgB,IAAI,WAAsB;IAE1C;;OAEG;IACH,SAAgB,iBAAiB;QAC/B;;;WAGG;yBACoB,aAAa,CAAC,SAAS,CAAC;MAY/C;;IAOF;;OAEG;IACI,KAAK;IAIZ;;OAEG;IACI,IAAI;yCA9CA,oBAAoB;6CAApB,oBAAoB;CAiDhC"}
@@ -1,13 +1,22 @@
1
+ import { type Logger } from '@o3r/logger';
1
2
  /** Default suffix for an url containing a theme css file */
2
3
  export declare const THEME_URL_SUFFIX = "-theme.css";
3
4
  /** Default name for the query parameter containing the theme name */
4
5
  export declare const THEME_QUERY_PARAM_NAME = "theme";
6
+ /** Options and context for Style helpers */
7
+ export interface StyleHelperOptions {
8
+ /**
9
+ * Logger to reporter the logs
10
+ */
11
+ logger?: Logger;
12
+ }
5
13
  /**
6
14
  * Fetches a CSS document and returns the content as a string.
7
15
  * @param cssPath - The path to download the CSS.
16
+ * @param options Options and context for Style helpers
8
17
  * @returns The content of the CSS document as a string, empty string if the fetch fails.
9
18
  */
10
- export declare function getStyle(cssPath: string): Promise<string>;
19
+ export declare function getStyle(cssPath: string, options?: StyleHelperOptions): Promise<string>;
11
20
  /**
12
21
  * Applies the given CSS theme as a stylesheet.
13
22
  * @param themeValue - CSS as text containing a theme definition.
@@ -17,13 +26,15 @@ export declare function applyTheme(themeValue?: string, cleanPrevious?: boolean)
17
26
  /**
18
27
  * Download the application additional theme
19
28
  * @param theme Name of the theme to download from the current application
29
+ * @param options Options and context for Style helpers
20
30
  */
21
- export declare function downloadApplicationThemeCss(theme: string): Promise<string>;
31
+ export declare function downloadApplicationThemeCss(theme: string, options?: StyleHelperOptions): Promise<string>;
22
32
  /**
23
33
  * Applies the initial theme based on the URL query parameters.
24
34
  *
25
35
  * This function fetches the CSS theme specified in the URL query parameters and applies it as a stylesheet.
26
36
  * If a referrer is present, it also attempts to fetch and apply the theme from the referrer's URL.
37
+ * @param options Options and context for Style helpers
27
38
  */
28
- export declare function applyInitialTheme(): Promise<PromiseSettledResult<void>[] | undefined>;
39
+ export declare function applyInitialTheme(options?: StyleHelperOptions): Promise<PromiseSettledResult<void>[] | undefined>;
29
40
  //# sourceMappingURL=theme.helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.helpers.d.ts","sourceRoot":"","sources":["../../src/theme/theme.helpers.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY/D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa,UAAO,GAAG,IAAI,CAQ1E;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,mBAGxD;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAgB3F"}
1
+ {"version":3,"file":"theme.helpers.d.ts","sourceRoot":"","sources":["../../src/theme/theme.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EACZ,MAAM,aAAa,CAAC;AAErB,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C,4CAA4C;AAC5C,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAU7F;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa,UAAO,GAAG,IAAI,CAQ1E;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,mBAGtF;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,CAgBvH"}
@@ -8,6 +8,7 @@ import * as i0 from "@angular/core";
8
8
  */
9
9
  export declare class ThemeProducerService implements MessageProducer<ThemeMessage> {
10
10
  private readonly messageService;
11
+ private readonly logger;
11
12
  private previousTheme;
12
13
  private readonly currentThemeSelection;
13
14
  /** Current selected theme signal */
@@ -1 +1 @@
1
- {"version":3,"file":"theme.producer.service.d.ts","sourceRoot":"","sources":["../../src/theme/theme.producer.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,cAAc,EACf,MAAM,mBAAmB,CAAC;AAU3B,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;;AAQ3B;;GAEG;AACH,qBAGa,oBAAqB,YAAW,eAAe,CAAC,YAAY,CAAC;IACxE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4C;IAC3E,OAAO,CAAC,aAAa,CAA6B;IAElD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACvC,oCAAoC;IACpC,SAAgB,YAAY,6DAAC;IAE7B;;OAEG;IACH,SAAgB,KAAK,WAAsB;;IA+C3C;;;OAGG;IACU,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3D;;OAEG;IACI,qBAAqB,IAAI,IAAI;IAIpC;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI;yCAnF/C,oBAAoB;6CAApB,oBAAoB;CAyFhC"}
1
+ {"version":3,"file":"theme.producer.service.d.ts","sourceRoot":"","sources":["../../src/theme/theme.producer.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,cAAc,EACf,MAAM,mBAAmB,CAAC;AAa3B,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;;AAO3B;;GAEG;AACH,qBAGa,oBAAqB,YAAW,eAAe,CAAC,YAAY,CAAC;IACxE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4C;IAC3E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,aAAa,CAA6B;IAElD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACvC,oCAAoC;IACpC,SAAgB,YAAY,6DAAC;IAE7B;;OAEG;IACH,SAAgB,KAAK,WAAsB;;IA+C3C;;;OAGG;IACU,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3D;;OAEG;IACI,qBAAqB,IAAI,IAAI;IAIpC;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI;yCApF/C,oBAAoB;6CAApB,oBAAoB;CAwFhC"}