@amadeus-it-group/microfrontends-angular
Version:
Amadeus Micro Frontend Toolkit for Angular
1 lines • 6.58 kB
Source Map (JSON)
{"version":3,"file":"amadeus-it-group-microfrontends-angular.mjs","sources":["../../lib/src/message-peer.service.ts","../../lib/src/amadeus-it-group-microfrontends-angular.ts"],"sourcesContent":["import {\n\tMessage,\n\tMessageError,\n\tMessagePeer,\n\tMessagePeerType,\n\tPeerConnectionOptions,\n\tPeerSendOptions,\n\tRoutedMessage,\n\tServiceMessage,\n} from '@amadeus-it-group/microfrontends';\nimport { from, Observable } from 'rxjs';\nimport { inject, Injectable, InjectionToken } from '@angular/core';\n\n/**\n * Interface for the peer service that provides an observable for incoming messages\n */\nexport interface MessagePeerServiceType<M extends Message>\n\textends Omit<MessagePeerType<M>, 'messages' | 'serviceMessages' | 'errors'> {\n\t/**\n\t * Observable for incoming messages\n\t */\n\tget messages$(): Observable<RoutedMessage<M>>;\n\n\t/**\n\t * Observable for incoming service messages\n\t */\n\tget serviceMessages$(): Observable<RoutedMessage<ServiceMessage>>;\n\n\t/**\n\t * Observable for peer local errors when processing messages\n\t */\n\tget errors$(): Observable<MessageError>;\n}\n\n/**\n * Configuration for the peer service that should be provided in the DI container before using the service\n */\nexport interface MessagePeerConfig {\n\t/**\n\t * Unique peer identifier on the network\n\t */\n\tid: string;\n\t/**\n\t * List of known messages that the peer can receive\n\t */\n\tknownMessages?: Message[];\n}\n\n/**\n * Injection token for {@link MessagePeerConfig}, required for the {@link MessagePeerService} configuration.\n */\nexport const MESSAGE_PEER_CONFIG = new InjectionToken<MessagePeerConfig>('MESSAGE_PEER_CONFIG');\n\n/**\n * Injection token for {@link PeerConnectionOptions} used as default options to pass to {@link MessagePeerService#connect}.\n */\nexport const MESSAGE_PEER_CONNECT_OPTIONS = new InjectionToken<PeerConnectionOptions>(\n\t'MESSAGE_PEER_CONNECT_OPTIONS',\n);\n\n/**\n * Injection token for {@link PeerConnectionOptions} used as default options to pass to {@link MessagePeerService#listen}.\n */\nexport const MESSAGE_PEER_LISTEN_OPTIONS = new InjectionToken<PeerConnectionOptions>(\n\t'MESSAGE_PEER_LISTEN_OPTIONS',\n);\n\n/**\n * Angular service that wraps {@link MessagePeer} and provides an observable for incoming messages and errors\n * It is essentially just a wrapper around {@link MessagePeer} that integrates with Angular's DI system.\n */\n@Injectable({ providedIn: 'root' })\nexport class MessagePeerService<M extends Message> implements MessagePeerServiceType<M> {\n\treadonly #peer: MessagePeerType<M>;\n\treadonly #diConnectOptions = inject(MESSAGE_PEER_CONNECT_OPTIONS, { optional: true });\n\treadonly #diListenOptions = inject(MESSAGE_PEER_LISTEN_OPTIONS, { optional: true });\n\t/**\n\t * @inheritDoc\n\t */\n\tmessages$: Observable<RoutedMessage<M>>;\n\t/**\n\t * @inheritDoc\n\t */\n\tserviceMessages$: Observable<RoutedMessage<ServiceMessage>>;\n\t/**\n\t * @inheritDoc\n\t */\n\terrors$: Observable<MessageError>;\n\n\tconstructor() {\n\t\tconst config = inject(MESSAGE_PEER_CONFIG);\n\t\tthis.#peer = new MessagePeer<M>({\n\t\t\tid: config.id,\n\t\t\tknownMessages: config.knownMessages,\n\t\t});\n\n\t\tthis.messages$ = from(this.#peer.messages);\n\t\tthis.serviceMessages$ = from(this.#peer.serviceMessages);\n\t\tthis.errors$ = from(this.#peer.errors);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic get id(): string {\n\t\treturn this.#peer.id;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic get knownPeers(): Map<string, Message[]> {\n\t\treturn this.#peer.knownPeers;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic listen(peerId: string, options?: PeerConnectionOptions): Promise<() => void> {\n\t\treturn this.#peer.listen(\n\t\t\tpeerId,\n\t\t\tthis.#diListenOptions ? { ...this.#diListenOptions, ...options } : options,\n\t\t);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic connect(peerId: string, options?: PeerConnectionOptions): Promise<() => void> {\n\t\treturn this.#peer.connect(\n\t\t\tpeerId,\n\t\t\tthis.#diConnectOptions ? { ...this.#diConnectOptions, ...options } : options,\n\t\t);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic registerMessage(message: Message) {\n\t\tthis.#peer.registerMessage(message);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic send(message: M, options?: PeerSendOptions) {\n\t\tthis.#peer.send(message, options);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic disconnect(peerId?: string) {\n\t\tthis.#peer.disconnect(peerId);\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAgDA;;AAEG;MACU,mBAAmB,GAAG,IAAI,cAAc,CAAoB,qBAAqB;AAE9F;;AAEG;MACU,4BAA4B,GAAG,IAAI,cAAc,CAC7D,8BAA8B;AAG/B;;AAEG;MACU,2BAA2B,GAAG,IAAI,cAAc,CAC5D,6BAA6B;AAG9B;;;AAGG;MAEU,kBAAkB,CAAA;AACrB,IAAA,KAAK;IACL,iBAAiB,GAAG,MAAM,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5E,gBAAgB,GAAG,MAAM,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACnF;;AAEG;AACH,IAAA,SAAS;AACT;;AAEG;AACH,IAAA,gBAAgB;AAChB;;AAEG;AACH,IAAA,OAAO;AAEP,IAAA,WAAA,GAAA;AACC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC1C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAI;YAC/B,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,aAAa,EAAE,MAAM,CAAC,aAAa;AACnC,SAAA,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;;AAGvC;;AAEG;AACH,IAAA,IAAW,EAAE,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE;;AAGrB;;AAEG;AACH,IAAA,IAAW,UAAU,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU;;AAG7B;;AAEG;IACI,MAAM,CAAC,MAAc,EAAE,OAA+B,EAAA;AAC5D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CACvB,MAAM,EACN,IAAI,CAAC,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,CAC1E;;AAGF;;AAEG;IACI,OAAO,CAAC,MAAc,EAAE,OAA+B,EAAA;AAC7D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CACxB,MAAM,EACN,IAAI,CAAC,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,CAC5E;;AAGF;;AAEG;AACI,IAAA,eAAe,CAAC,OAAgB,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC;;AAGpC;;AAEG;IACI,IAAI,CAAC,OAAU,EAAE,OAAyB,EAAA;QAChD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;;AAGlC;;AAEG;AACI,IAAA,UAAU,CAAC,MAAe,EAAA;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;;uGAjFlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACvElC;;AAEG;;;;"}