{"version":3,"file":"ea-utilities-mediator.mjs","sources":["../../../projects/mediator/src/lib/Event.ts","../../../projects/mediator/src/lib/IRequestHandler.ts","../../../projects/mediator/src/lib/Mediator.ts","../../../projects/mediator/src/lib/provider.ts","../../../projects/mediator/src/public-api.ts","../../../projects/mediator/src/ea-utilities-mediator.ts"],"sourcesContent":["\r\nexport function Event(eventName: string) {\r\n  return function (constructor: Function) {\r\n    constructor.prototype.EVENT_TYPE = eventName;\r\n  };\r\n}\r\n","import { IRequest } from './IRequest';\r\n\r\n\r\nexport abstract class IRequestHandler<TCommand extends IRequest, IResponse = void> {\r\n  public initialize?(event: TCommand): void;\r\n  public abstract handle(event: TCommand): IResponse | Promise<IResponse>;\r\n}\r\n","import { Injectable, inject, Injector } from '@angular/core';\r\nimport { IRequest } from './IRequest';\r\nimport { IRequestHandler } from './IRequestHandler';\r\n\r\nexport type MediatorOptions = {\r\n  onError?: <T extends IRequest>(error: unknown, event: T) => void\r\n};\r\n\r\n@Injectable()\r\nexport class Mediator {\r\n\r\n  private injector = inject(Injector);\r\n\r\n  public async dispatch<T extends IRequest, IResponse = void>(event: T, options?: MediatorOptions): Promise<IResponse[]> {\r\n    const handlers = this.injector.get((<any>event).EVENT_TYPE) as unknown as IRequestHandler<T, IResponse>[];\r\n\r\n    let tasks: Array<Promise<IResponse> | IResponse> = [];\r\n\r\n    handlers\r\n      .forEach(handler => {\r\n        try {\r\n          handler.initialize && handler.initialize(event);\r\n          tasks.push(handler.handle(event));\r\n        } catch (error) {\r\n          options?.onError\r\n            ? options?.onError?.(error, event)\r\n            : console.error(error);\r\n        }\r\n      });\r\n\r\n    return await Promise.all(tasks);\r\n  }\r\n\r\n  public dispatchSync<T extends IRequest, IResponse = void>(event: T, options?: MediatorOptions): IResponse[] {\r\n    const handlers = this.injector.get((<any>event).EVENT_TYPE) as unknown as IRequestHandler<T, IResponse>[];\r\n\r\n    let tasks: Array<IResponse> = [];\r\n\r\n    handlers\r\n      .forEach(handler => {\r\n        try {\r\n          handler.initialize && handler.initialize(event);\r\n          tasks.push(handler.handle(event) as IResponse);\r\n        } catch (error) {\r\n          options?.onError\r\n            ? options?.onError?.(error, event)\r\n            : console.error(error);\r\n        }\r\n      });\r\n\r\n    return tasks;\r\n  }\r\n}\r\n","import { Type, EnvironmentProviders, makeEnvironmentProviders, Provider } from \"@angular/core\";\r\nimport { Mediator } from \"./Mediator\";\r\n\r\ntype Constructor<T> = new (...args: any[]) => T;\r\n\r\nfunction createInstance(ctor: Constructor<any>) {\r\n    return new ctor([] as any[]);\r\n}\r\n\r\nexport type resolverType = { eventType: Constructor<any>; handlers: Type<any>[]; };\r\n\r\nexport const provideMediator = (resolvers: resolverType[]): EnvironmentProviders => {\r\n    return makeEnvironmentProviders([\r\n        Mediator,\r\n        ...resolvers\r\n            .flatMap(r =>\r\n                r.handlers.map(x => ({\r\n                    provide: createInstance(r.eventType).EVENT_TYPE,\r\n                    useClass: x,\r\n                    multi: true\r\n                } as Provider))\r\n            )\r\n    ])\r\n}\r\n","/*\r\n * Public API Surface of mediator\r\n */\r\n\r\nexport * from './lib/Event';\r\nexport * from './lib/IRequest';\r\nexport * from './lib/IRequestHandler';\r\nexport * from './lib/Mediator';\r\nexport * from './lib/provider';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AACM,SAAU,KAAK,CAAC,SAAiB,EAAA;AACrC,IAAA,OAAO,UAAU,WAAqB,EAAA;AACpC,QAAA,WAAW,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS;AAC9C,KAAC;AACH;;MCFsB,eAAe,CAAA;AAGpC;;MCGY,QAAQ,CAAA;AAEX,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE5B,IAAA,MAAM,QAAQ,CAAuC,KAAQ,EAAE,OAAyB,EAAA;AAC7F,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAO,KAAM,CAAC,UAAU,CAA+C;QAEzG,IAAI,KAAK,GAA0C,EAAE;QAErD;aACG,OAAO,CAAC,OAAO,IAAG;AACjB,YAAA,IAAI;gBACF,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;YACjC,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,EAAE;sBACL,OAAO,EAAE,OAAO,GAAG,KAAK,EAAE,KAAK;AACjC,sBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;;AAE5B,SAAC,CAAC;AAEJ,QAAA,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;IAG1B,YAAY,CAAuC,KAAQ,EAAE,OAAyB,EAAA;AAC3F,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAO,KAAM,CAAC,UAAU,CAA+C;QAEzG,IAAI,KAAK,GAAqB,EAAE;QAEhC;aACG,OAAO,CAAC,OAAO,IAAG;AACjB,YAAA,IAAI;gBACF,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAc,CAAC;;YAC9C,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,EAAE;sBACL,OAAO,EAAE,OAAO,GAAG,KAAK,EAAE,KAAK;AACjC,sBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;;AAE5B,SAAC,CAAC;AAEJ,QAAA,OAAO,KAAK;;uGAzCH,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAR,QAAQ,EAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBADpB;;;ACHD,SAAS,cAAc,CAAC,IAAsB,EAAA;AAC1C,IAAA,OAAO,IAAI,IAAI,CAAC,EAAW,CAAC;AAChC;AAIa,MAAA,eAAe,GAAG,CAAC,SAAyB,KAA0B;AAC/E,IAAA,OAAO,wBAAwB,CAAC;QAC5B,QAAQ;AACR,QAAA,GAAG;AACE,aAAA,OAAO,CAAC,CAAC,IACN,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK;YACjB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU;AAC/C,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,KAAK,EAAE;AACG,SAAA,CAAA,CAAC;AAE1B,KAAA,CAAC;AACN;;ACvBA;;AAEG;;ACFH;;AAEG;;;;"}