{"version":3,"sources":["src/common/EventSource.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,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;gBAE5B,QAAQ,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC;IAIzC,OAAO,UAAW,MAAM,KAAG,IAAI,CAsBrC;IAEM,MAAM,4BAA6B,MAAM,KAAK,IAAI,KAAG,WAAW,CAStE;IAEM,cAAc,aAAc,cAAc,CAAC,MAAM,CAAC,KAAG,WAAW,CAEtE;IAEM,UAAU,QAAO,OAAO,CAE9B;IAEM,OAAO,QAAO,IAAI,CAGxB;IAED,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\";\r\nimport { createNoDashGuid } from \"./Guid\";\r\nimport { IDetachable } from \"./IDetachable\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\nimport { IEventListener, IEventSource } from \"./IEventSource\";\r\nimport { PlatformEvent } from \"./PlatformEvent\";\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\r\n    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: () => {\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(listener.onEvent);\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"]}