{"version":3,"sources":["src/common/EventSource.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,qBAAa,WAAW,CAAC,MAAM,SAAS,aAAa,CAAE,YAAW,YAAY,CAAC,MAAM,CAAC;IAClF,OAAO,CAAC,kBAAkB,CAAkD;IAC5E,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,mBAAmB,CAA0B;gBAElC,QAAQ,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC;IAIhD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAwB5B,MAAM,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW;IAW7D,cAAc,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,WAAW;IAI7D,qBAAqB,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,WAAW;IAQpE,UAAU,IAAI,OAAO;IAIrB,OAAO,IAAI,IAAI;IAKtB,IAAW,QAAQ,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAE/C;CACJ","file":"EventSource.d.ts","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ObjectDisposedError } from \"./Error.js\";\r\nimport { createNoDashGuid } from \"./Guid.js\";\r\nimport { IDetachable } from \"./IDetachable.js\";\r\nimport { IStringDictionary } from \"./IDictionary.js\";\r\nimport { IEventListener } from \"./IEventListener.js\";\r\nimport { IEventSource } from \"./IEventSource.js\";\r\nimport { PlatformEvent } from \"./PlatformEvent.js\";\r\n\r\nexport class EventSource<TEvent extends PlatformEvent> implements IEventSource<TEvent> {\r\n    private privEventListeners: IStringDictionary<(event: TEvent) => void> = {};\r\n    private privMetadata: IStringDictionary<string>;\r\n    private privIsDisposed: boolean = false;\r\n    private privConsoleListener: IDetachable = undefined;\r\n\r\n    public constructor(metadata?: IStringDictionary<string>) {\r\n        this.privMetadata = metadata;\r\n    }\r\n\r\n    public onEvent(event: TEvent): void {\r\n        if (this.isDisposed()) {\r\n            throw (new ObjectDisposedError(\"EventSource\"));\r\n        }\r\n\r\n        if (this.metadata) {\r\n            for (const paramName in this.metadata) {\r\n                if (paramName) {\r\n                    if (event.metadata) {\r\n                        if (!event.metadata[paramName]) {\r\n                            event.metadata[paramName] = this.metadata[paramName];\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        for (const eventId in this.privEventListeners) {\r\n            if (eventId && this.privEventListeners[eventId]) {\r\n                this.privEventListeners[eventId](event);\r\n            }\r\n        }\r\n    }\r\n\r\n    public attach(onEventCallback: (event: TEvent) => void): IDetachable {\r\n        const id = createNoDashGuid();\r\n        this.privEventListeners[id] = onEventCallback;\r\n        return {\r\n            detach: (): Promise<void> => {\r\n                delete this.privEventListeners[id];\r\n                return Promise.resolve();\r\n            },\r\n        };\r\n    }\r\n\r\n    public attachListener(listener: IEventListener<TEvent>): IDetachable {\r\n        return this.attach((e: TEvent): void => listener.onEvent(e));\r\n    }\r\n\r\n    public attachConsoleListener(listener: IEventListener<TEvent>): IDetachable {\r\n        if (!!this.privConsoleListener) {\r\n            void this.privConsoleListener.detach(); // Detach implementation for eventListeners is synchronous\r\n        }\r\n        this.privConsoleListener = this.attach((e: TEvent): void => listener.onEvent(e));\r\n        return this.privConsoleListener;\r\n    }\r\n\r\n    public isDisposed(): boolean {\r\n        return this.privIsDisposed;\r\n    }\r\n\r\n    public dispose(): void {\r\n        this.privEventListeners = null;\r\n        this.privIsDisposed = true;\r\n    }\r\n\r\n    public get metadata(): IStringDictionary<string> {\r\n        return this.privMetadata;\r\n    }\r\n}\r\n"]}