DigitalData.UserManager/DigitalData.UserManager.NgWebUI/ClientApp/.angular/cache/17.3.0/babel-webpack/28eb585f604f09aebb96f3a44e7eb4957bd01f072ecf11364afe0af8de64a708.json

1 line
243 KiB
JSON

{"ast":null,"code":"import { Observable } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nclass Key {\n token;\n stringKey;\n constructor(token) {\n this.token = token;\n this.stringKey = this.generateStringKey();\n }\n static from(token) {\n return new Key(token);\n }\n toString() {\n return this.stringKey;\n }\n generateStringKey() {\n if (typeof this.token !== 'string') {\n return this.token.toString().split(' ')[1] || '';\n } else {\n return this.token;\n }\n }\n}\nclass NotFoundKey extends Key {\n constructor(token) {\n super(token);\n }\n getError() {\n if (typeof this.token === 'string') {\n return 'Key not found for the token: ' + this.token;\n } else {\n return 'Key not found for the token: ' + this.token.toString();\n }\n }\n}\nclass KeyRegister {\n records = new Map();\n getKey(token) {\n const key = this.records.get(token);\n if (!key) {\n return new NotFoundKey(token);\n }\n return key;\n }\n getKeyAndTryRegister(token, provider) {\n if (!this.has(token)) {\n this.set(token, provider);\n }\n return this.getKey(token);\n }\n has(token) {\n return this.records.has(token);\n }\n set(token, _provider) {\n this.records.set(token, Key.from(token));\n }\n clear() {\n this.records.clear();\n }\n}\nclass ProviderManager {\n providers = new Map();\n get(key) {\n const recordFactory = this.providers.get(key);\n if (!recordFactory) {\n throw new Error(`There is no provider for ${key.toString()}.`);\n }\n return recordFactory;\n }\n has(key) {\n return this.providers.has(key);\n }\n set(key, recordFactory) {\n this.providers.set(key, recordFactory);\n }\n clear() {\n this.providers.clear();\n }\n}\nclass Dependency {\n serviceToken;\n constructor(serviceToken) {\n this.serviceToken = serviceToken;\n }\n getToken() {\n if (typeof this.serviceToken === 'object') {\n return this.serviceToken.inject;\n } else {\n return this.serviceToken;\n }\n }\n isOptional() {\n if (typeof this.serviceToken !== 'string' && typeof this.serviceToken === 'object' && this.serviceToken.optional !== undefined) {\n return this.serviceToken.optional;\n }\n return false;\n }\n /**\n * @deprecated\n */\n isCollection() {\n if (typeof this.serviceToken !== 'string' && typeof this.serviceToken === 'object' && this.serviceToken.collection) {\n return this.serviceToken.collection;\n }\n return false;\n }\n}\nclass RecordFactory {\n provider;\n constructor(provider) {\n this.provider = provider;\n }\n getDeps() {\n return (this.provider.services || []).map(service => new Dependency(service));\n }\n}\nclass ClassRecordFactory extends RecordFactory {\n constructor(provider) {\n super(provider);\n }\n create(depsInstances) {\n return new this.provider(...depsInstances);\n }\n}\nclass ValueRecordFactory extends RecordFactory {\n constructor(provider) {\n super(provider);\n }\n getDeps() {\n return [];\n }\n create(_depsInstances) {\n return this.provider;\n }\n}\nclass FactoryRecordFactory extends RecordFactory {\n constructor(provider) {\n super(provider);\n }\n getDeps() {\n return (this.provider.deps || []).map(service => new Dependency(service));\n }\n create(depsInstances) {\n return this.provider.create(...depsInstances);\n }\n}\nclass CollectionRecordFactory {}\nclass ClassCollectionRecordFactory extends CollectionRecordFactory {\n providers = [];\n getDeps() {\n return this.providers.map(provider => {\n return (provider.services || []).map(service => {\n return new Dependency(service);\n });\n });\n }\n create(setOfDeps) {\n return setOfDeps.map((deps, index) => {\n return new this.providers[index](...deps);\n });\n }\n addProvider(provider) {\n this.providers.push(provider);\n }\n}\nclass FactoryCollectionRecordFactory extends CollectionRecordFactory {\n providers = [];\n getDeps() {\n return this.providers.map(provider => {\n return (provider.deps || []).map(service => new Dependency(service));\n });\n }\n create(setOfDeps) {\n return setOfDeps.map((deps, index) => {\n return this.providers[index].create(...deps);\n });\n }\n addProvider(provider) {\n this.providers.push(provider);\n }\n}\nclass ValueCollectionRecordFactory extends CollectionRecordFactory {\n providers = [];\n getDeps() {\n return [];\n }\n create(_setOfDeps) {\n return [...this.providers];\n }\n addProvider(provider) {\n this.providers.push(provider);\n }\n}\nclass ContainerProvider {\n keyRegister;\n providerManager = new ProviderManager();\n collectionProviders = new Map();\n constructor(keyRegister) {\n this.keyRegister = keyRegister;\n }\n provide(token, provider) {\n if (provider === undefined) {\n return this.provide(token, token);\n } else {\n return this.provideClass(token, provider);\n }\n }\n provideClass(token, provider) {\n return this.addProvider(token, provider, provider => new ClassRecordFactory(provider));\n }\n provideValue(token, provider) {\n return this.addProvider(token, provider, provider => new ValueRecordFactory(provider));\n }\n provideFactory(token, provider) {\n return this.addProvider(token, provider, provider => new FactoryRecordFactory(provider));\n }\n provideCollection(token, provider) {\n return this.addCollectionProvider(token, provider, () => new ClassCollectionRecordFactory());\n }\n provideFactoryCollection(token, provider) {\n return this.addCollectionProvider(token, provider, () => new FactoryCollectionRecordFactory());\n }\n provideValueCollection(token, provider) {\n return this.addCollectionProvider(token, provider, () => new ValueCollectionRecordFactory());\n }\n clear() {\n this.providerManager.clear();\n this.collectionProviders.clear();\n }\n getRecordFactory(key) {\n return this.providerManager.get(key);\n }\n getCollectionRecordFactory(key) {\n return this.collectionProviders.get(key);\n }\n addProvider(token, provider, provideMethod) {\n const key = this.keyRegister.getKeyAndTryRegister(token, provider);\n this.providerManager.set(key, provideMethod(provider));\n }\n addCollectionProvider(token, provider, createFactory) {\n const key = this.keyRegister.getKeyAndTryRegister(token, provider);\n if (this.collectionProviders.has(key)) {\n const multiFactory = this.collectionProviders.get(key);\n if (multiFactory) {\n multiFactory.addProvider(provider);\n }\n } else {\n const multiFactory = createFactory();\n multiFactory.addProvider(provider);\n this.collectionProviders.set(key, multiFactory);\n }\n }\n}\nclass RecordManager {\n records = new Map();\n get(key) {\n return this.records.get(key);\n }\n has(key) {\n return this.records.has(key);\n }\n set(key, record) {\n this.records.set(key, record);\n }\n clear() {\n this.records.clear();\n }\n}\nclass ContainerRecord {\n keyRegister;\n containerProvider;\n recordManager = new RecordManager();\n collectionRecords = new Map();\n constructor(keyRegister, containerProvider) {\n this.keyRegister = keyRegister;\n this.containerProvider = containerProvider;\n }\n resolve(token) {\n return this.innerResolve(token);\n }\n resolveCollection(token) {\n return this.innerResolveCollection(token);\n }\n clear() {\n this.recordManager.clear();\n this.collectionRecords.clear();\n }\n resolveDependencies(provider) {\n const deps = provider.getDeps();\n return deps.map(dep => {\n if (dep.isCollection()) {\n return this.innerResolveCollection(dep.getToken(), dep.isOptional());\n } else {\n return this.resolveDependency(dep);\n }\n });\n }\n resolveDependency(dep) {\n return this.innerResolve(dep.getToken(), dep.isOptional());\n }\n innerResolve(token, isOptional) {\n const key = this.keyRegister.getKey(token);\n if (key instanceof NotFoundKey) {\n if (isOptional) {\n return null;\n } else {\n throw new Error(key.getError());\n }\n }\n if (!this.recordManager.has(key)) {\n const recordFactory = this.containerProvider.getRecordFactory(key);\n const depsInstances = this.resolveDependencies(recordFactory);\n const instance = recordFactory.create(depsInstances);\n this.recordManager.set(key, instance);\n }\n return this.recordManager.get(key);\n }\n innerResolveCollection(token, isOptional = false) {\n const key = this.keyRegister.getKey(token);\n if (key instanceof NotFoundKey) {\n if (isOptional) {\n return null;\n } else {\n throw new Error(key.getError());\n }\n }\n if (!this.collectionRecords.has(key)) {\n const multiFactory = this.containerProvider.getCollectionRecordFactory(key);\n if (multiFactory) {\n const arrayOfDeps = multiFactory.getDeps().map(deps => {\n return deps.map(dep => {\n if (dep.isCollection()) {\n return this.innerResolveCollection(dep.getToken(), dep.isOptional());\n } else {\n return this.resolveDependency(dep);\n }\n });\n });\n const instances = multiFactory.create(arrayOfDeps);\n this.collectionRecords.set(key, instances);\n }\n }\n return this.collectionRecords.get(key);\n }\n}\nclass ContainerFacade {\n keyRegister = new KeyRegister();\n containerProvider = new ContainerProvider(this.keyRegister);\n containerRecord = new ContainerRecord(this.keyRegister, this.containerProvider);\n resolve(token) {\n return this.containerRecord.resolve(token);\n }\n resolveCollection(token) {\n return this.containerRecord.resolveCollection(token);\n }\n provide(token, provider) {\n this.containerProvider.provide(token, provider);\n return this;\n }\n provideClass(token, provider) {\n this.containerProvider.provideClass(token, provider);\n return this;\n }\n provideValue(token, provider) {\n this.containerProvider.provideValue(token, provider);\n return this;\n }\n provideFactory(token, provider) {\n this.containerProvider.provideFactory(token, provider);\n return this;\n }\n provideCollection(token, provider) {\n this.containerProvider.provideCollection(token, provider);\n return this;\n }\n provideFactoryCollection(token, provider) {\n this.containerProvider.provideFactoryCollection(token, provider);\n return this;\n }\n provideValueCollection(token, provider) {\n this.containerProvider.provideValueCollection(token, provider);\n return this;\n }\n clear() {\n this.keyRegister.clear();\n this.containerProvider.clear();\n this.containerRecord.clear();\n }\n clearOnlyRecords() {\n this.containerRecord.clear();\n }\n}\nfunction createContainer() {\n return new ContainerFacade();\n}\nclass HermesSubscription {\n subscriber;\n closed = false;\n constructor(subscriber, isClosed) {\n this.subscriber = subscriber;\n if (isClosed !== undefined && isClosed !== null) {\n this.closed = isClosed;\n }\n }\n unsubscribe() {\n if (this.closed) {\n return;\n }\n this.closed = true;\n this.subscriber.unsubscribe();\n }\n getFinalize() {\n return this.subscriber.getFinalize();\n }\n}\nclass HermesSubscriber {\n observer;\n // eslint-disable-next-line\n finalize = () => {};\n completed = false;\n closed = false;\n constructor(config) {\n this.observer = config;\n }\n next(value) {\n if (this.isCompleted()) {\n return;\n }\n if (this.observer && this.observer.next) {\n this.observer.next(value);\n }\n }\n error(error) {\n if (this.completed) {\n return;\n }\n if (this.observer && this.observer.error) {\n this.observer.error(error);\n }\n this.unsubscribe();\n }\n complete() {\n if (this.completed) {\n return;\n }\n this.completed = true;\n if (this.observer && this.observer.complete) {\n this.observer.complete();\n }\n this.unsubscribe();\n }\n unsubscribe() {\n if (this.closed) {\n return;\n }\n this.closed = true;\n this.completed = true;\n this.finalize();\n }\n setFinalize(finalize) {\n if (finalize && typeof finalize === 'function') {\n this.finalize = finalize;\n } else {}\n }\n getFinalize() {\n return this.finalize;\n }\n isCompleted() {\n return this.completed;\n }\n isClosed() {\n return this.closed;\n }\n getObserver() {\n return this.observer;\n }\n}\nclass HermesObservable {\n generatorFn;\n source;\n // private operator: HermesObservable<T>;\n // eslint-disable-next-line\n generatorFinalize;\n constructor(generator) {\n this.generatorFn = generator;\n }\n pipe(...operations) {\n this.source = this;\n for (const operation of operations) {\n this.source = this.innerPipe(operation, this.source);\n }\n return this.source;\n }\n subscribe(arg) {\n let subscriber;\n if (arg instanceof HermesSubscriber) {\n subscriber = arg;\n } else if (arg !== null && this.isObserver(arg)) {\n const {\n next,\n error,\n complete\n } = arg;\n subscriber = this.createSubscriber(next, error, complete);\n } else {\n subscriber = this.createSubscriber(arguments[0], arguments[1], arguments[2]);\n }\n if (this.generatorFn) {\n this.generatorFinalize = this.generatorFn(subscriber);\n subscriber.setFinalize(this.generatorFinalize);\n }\n return this.getSubscription(subscriber);\n }\n createSubscriber(next, error, complete) {\n return new HermesSubscriber({\n next,\n error,\n complete\n });\n }\n getSubscription(subscriber) {\n return new HermesSubscription(subscriber);\n }\n innerPipe(operation, stream$) {\n return (input => {\n return operation(input);\n })(stream$);\n }\n isObserver(observer) {\n return typeof observer === 'object';\n }\n}\nfunction hermesEmptySubscription() {\n return new HermesSubscription(new HermesSubscriber({}), true);\n}\nclass HermesSubject extends HermesObservable {\n /**\n * After error\n */\n thrownError = null;\n /**\n * After complete\n */\n isCompleted = false;\n /**\n * After unsubscribe\n */\n isClosed = false;\n subscribers = [];\n constructor() {\n super();\n }\n next(value) {\n this.verifyNotClosed();\n if (this.isCompleted || this.thrownError !== null) {\n return;\n }\n for (const subs of this.subscribers) {\n subs.next(value);\n }\n }\n error(error) {\n this.verifyNotClosed();\n if (this.isCompleted) {\n return;\n }\n this.thrownError = error;\n for (const subs of this.subscribers) {\n subs.error(error);\n }\n this.subscribers.length = 0;\n }\n complete() {\n this.verifyNotClosed();\n if (this.isCompleted) {\n return;\n }\n this.isCompleted = true;\n for (const subs of this.subscribers) {\n subs.complete();\n }\n this.subscribers.length = 0;\n }\n subscribe(arg) {\n this.verifyNotClosed();\n let subscriber;\n if (arg instanceof HermesSubscriber) {\n subscriber = arg;\n } else {\n subscriber = this.createSubscriber(arguments[0], arguments[1], arguments[2]);\n }\n if (this.thrownError !== null) {\n subscriber.error(this.thrownError);\n return hermesEmptySubscription();\n } else if (this.isCompleted) {\n subscriber.complete();\n return hermesEmptySubscription();\n } else {\n this.subscribers.push(subscriber);\n return this.getSubscription(subscriber);\n }\n }\n unsubscribe() {\n this.isCompleted = true;\n this.isClosed = true;\n this.subscribers.length = 0;\n }\n toObservable() {\n return new HermesObservable(observer => {\n const subscription = this.subscribe(v => observer.next(v), error => observer.error(error), () => observer.complete());\n return () => subscription.unsubscribe();\n });\n }\n verifyNotClosed() {\n if (this.isClosed) {\n throw new Error('Observable already closed');\n }\n }\n}\nclass DomainEventStream extends HermesSubject {\n // constructor(private readonly eventStore: DomainEventStore) {\n constructor() {\n super();\n }\n}\nclass RandomStringGenerator {\n static index = 0;\n static generate() {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15) + `${RandomStringGenerator.index++}`;\n }\n}\nclass Message {\n aggregateId;\n messageType;\n messageId;\n constructor(aggregateId, messageType, messageId = RandomStringGenerator.generate()) {\n this.aggregateId = aggregateId;\n this.messageType = messageType;\n this.messageId = messageId;\n }\n getMessageType() {\n return this.messageType;\n }\n getAggregateId() {\n return this.aggregateId;\n }\n getMessageId() {\n return this.messageId;\n }\n toString() {\n return this.messageType;\n }\n equalsByType(message) {\n return this.getMessageType() === message.getMessageType();\n }\n equals(message) {\n return this.getMessageType() === message.getMessageType() && this.messageId === message.messageId;\n }\n ofMessageType(arg) {\n if (Array.isArray(arg)) {\n const found = arg.find(messageType => this.isMessageType(messageType));\n return !!found;\n } else {\n return this.isMessageType(arg);\n }\n }\n isMessageType(messageType) {\n return this.getMessageType() === messageType;\n }\n}\nclass DomainEvent extends Message {\n payload;\n constructor(aggregateId, payload, messageType) {\n super(aggregateId, messageType);\n this.payload = payload;\n }\n isSameType(event) {\n return this.constructor.name === event.constructor.name;\n }\n getPayload() {\n return this.payload;\n }\n}\nfunction hermesOf(...args) {\n return new HermesObservable(observer => {\n args.forEach(value => {\n observer.next(value);\n });\n observer.complete();\n });\n}\nfunction hermesEmpty() {\n return new HermesObservable(observer => {\n observer.complete();\n });\n}\nfunction hermesTake(valuesNumber) {\n return source => {\n if (valuesNumber === 0) {\n return hermesEmpty();\n }\n return new HermesObservable(observer => {\n let index = 0;\n const subscriber = new HermesSubscriber({\n next: () => {},\n error: e => observer.error(e),\n complete: () => observer.complete()\n });\n subscriber.observer.next = function (v) {\n if (index < valuesNumber) {\n observer.next(v);\n index++;\n if (index === valuesNumber) {\n subscriber.complete();\n }\n }\n };\n const subscription = source.subscribe(subscriber);\n return subscription.getFinalize();\n });\n };\n}\nfunction subscriberForOperator(observer, next, complete) {\n const nextFn = next ? next : v => {\n observer.next(v);\n },\n completeFn = complete ? complete : () => {\n observer.complete();\n };\n return new HermesSubscriber({\n next: nextFn,\n error: e => observer.error(e),\n complete: completeFn\n });\n}\nfunction subscriberFromObserver(observer) {\n return new HermesSubscriber({\n next: v => observer.next(v),\n error: e => observer.error(e),\n complete: () => observer.complete()\n });\n}\nfunction hermesFilter(operation) {\n return source => {\n return new HermesObservable(observer => {\n const subscriber = subscriberForOperator(observer, value => {\n if (operation(value)) {\n observer.next(value);\n }\n });\n return source.subscribe(subscriber).getFinalize();\n });\n };\n}\nclass DomainEventStore {\n domainEvents = [];\n domainEvents$ = new HermesSubject();\n next(event) {\n this.domainEvents.push(event);\n this.domainEvents$.next(event);\n }\n findEventByType(eventType) {\n const events = this.getEvents();\n return events.reverse().find(event => {\n return event.constructor.name === eventType;\n });\n }\n /**\n * First tries to find event in the history,\n * then method waits for future occurrences of the event.\n */\n waitForEvent(eventType) {\n // find in a history\n const event = this.findEventByType(eventType);\n if (event) {\n return hermesOf(event);\n }\n // wait for future occurrence\n return this.waitForNextEventOccurrence(eventType);\n }\n waitForNextEventOccurrence(arg) {\n let eventType;\n if (arg instanceof DomainEvent) {\n eventType = arg.constructor.name;\n } else if (typeof arg === 'string') {\n eventType = arg;\n } else {\n return new HermesObservable(observer => {\n observer.error(new Error('Unsupported argument type.'));\n });\n // return throwError(new Error('Unsupported argument type.'));\n }\n return this.domainEvents$.toObservable().pipe(hermesFilter(event => event.constructor.name === eventType), hermesTake(1));\n }\n getEvents() {\n return this.domainEvents;\n }\n}\nclass CommandStream extends HermesSubject {\n constructor() {\n super();\n }\n}\nclass CommandBus extends HermesObservable {\n commandsStream;\n constructor(commandsStream) {\n super();\n this.commandsStream = commandsStream;\n }\n static services = [CommandStream];\n subscribe() {\n return this.commandsStream.toObservable().subscribe(arguments[0], arguments[1], arguments[2]);\n }\n ofCommandHandler(...handlers) {\n return this.commandsStream.toObservable().pipe(hermesFilter(command => {\n return handlers.some(handler => {\n return handler.forCommand(command);\n });\n }));\n }\n ofCreateAggregateHandler(...handlers) {\n return this.commandsStream.toObservable().pipe(hermesFilter(command => {\n return handlers.some(handler => {\n return handler.forCommand(command);\n });\n }));\n }\n ofNullHandler(handlers, aggregateCommandHandlers) {\n return this.commandsStream.toObservable().pipe(hermesFilter(command => {\n if (!handlers && !aggregateCommandHandlers) {\n return true;\n }\n let foundHandlerForCommand = true;\n if (handlers) {\n foundHandlerForCommand = !handlers.some(handler => {\n return handler.forCommand(command);\n });\n }\n if (aggregateCommandHandlers) {\n foundHandlerForCommand = foundHandlerForCommand && !aggregateCommandHandlers.some(handler => {\n return handler.forCommand(command);\n });\n }\n return foundHandlerForCommand;\n }));\n }\n}\nclass Optional {\n value;\n constructor(value) {\n if (Optional.isValueEmpty(value)) {\n this.value = null;\n } else {\n this.value = value;\n }\n return this;\n }\n static empty() {\n return new Optional(null);\n }\n static of(value) {\n return new Optional(value);\n }\n static isValueEmpty(value) {\n return typeof value === 'undefined' || value === null;\n }\n isEmpty() {\n return Optional.isValueEmpty(this.value);\n }\n isPresent() {\n return !this.isEmpty();\n }\n filter(filterer) {\n if (this.isPresent() && filterer(this.value)) {\n return this;\n }\n return Optional.empty();\n }\n forEach(callback) {\n if (this.isPresent()) {\n callback(this.value);\n }\n }\n map(mapper) {\n if (this.isPresent()) {\n return new Optional(mapper(this.value));\n }\n return Optional.empty();\n }\n /**\n * @deprecated\n */\n getValueOrNullOrThrowError() {\n return this.value;\n }\n getOrThrow() {\n if (this.isEmpty()) {\n throw new Error('Called getOrThrow on an empty Optional');\n }\n return this.value;\n }\n getOrElse(other) {\n if (this.isPresent()) {\n return this.value;\n }\n return other();\n }\n ifPresent(method) {\n if (this.isPresent()) {\n method(this.value);\n }\n }\n ifEmpty(method) {\n if (this.isEmpty()) {\n method();\n }\n }\n orElse(other) {\n if (this.isPresent()) {\n return this;\n }\n return other();\n }\n}\nclass AggregateFactoryArchive {\n map = new Map();\n constructor() {}\n add(key, factory) {\n this.map.set(key, factory);\n }\n get(key) {\n return Optional.of(this.map.get(key));\n }\n has(key) {\n return this.map.has(key);\n }\n}\nclass AggregateRepositoryArchive {\n map = new Map();\n constructor() {}\n add(key, repository) {\n this.map.set(key, repository);\n }\n get(key) {\n return Optional.of(this.map.get(key));\n }\n has(key) {\n return this.map.has(key);\n }\n}\nclass AggregateDefinitionInitializer {\n aggregateFactoryArchive = CoreContainer.resolve(AggregateFactoryArchive);\n aggregateRepositoryArchive = CoreContainer.resolve(AggregateRepositoryArchive);\n constructor() {}\n register(definedAggregate) {\n if (definedAggregate) {\n const set = new Set();\n const filteredDefinitions = [];\n definedAggregate.filter(def => {\n if (!set.has(def.key)) {\n set.add(def.key);\n filteredDefinitions.push(def);\n }\n });\n filteredDefinitions.forEach(def => {\n const factory = CoreContainer.resolve(def.factory),\n repository = CoreContainer.resolve(def.repository);\n if (!this.aggregateFactoryArchive.has(def.key)) {\n this.aggregateFactoryArchive.add(def.key, factory);\n }\n if (!this.aggregateRepositoryArchive.has(def.key)) {\n this.aggregateRepositoryArchive.add(def.key, repository);\n }\n });\n // console.log('Registered aggregate definition:' + filteredDefinitions.length);\n // console.log('Registered aggregate definition:', filteredDefinitions);\n }\n }\n}\nfunction hermesTakeUntil(notifier) {\n return source => {\n return new HermesObservable(observer => {\n const subscriber = subscriberFromObserver(observer);\n const notifierSubscriber = new HermesSubscriber({\n next: () => subscriber.complete()\n });\n notifier.subscribe(notifierSubscriber);\n const subscription = source.subscribe(subscriber);\n return subscription.getFinalize();\n });\n };\n}\nfunction toRxJsObservable(source$) {\n return new Observable(observer => {\n const subscription = source$.subscribe(value => observer.next(value), error => observer.error(error), () => observer.complete());\n return () => subscription.unsubscribe();\n });\n}\nclass Reactive {\n hermesUnsubscribe$ = new HermesSubject();\n constructor() {}\n onDestroy() {\n this.hermesUnsubscribe();\n }\n takeUntil() {\n return takeUntil(toRxJsObservable(this.hermesUnsubscribe$));\n }\n hermesUnsubscribe() {\n this.hermesUnsubscribe$.next();\n this.hermesUnsubscribe$.complete();\n }\n hermesTakeUntil() {\n return hermesTakeUntil(this.hermesUnsubscribe$);\n }\n isNotStopped() {\n return !this.hermesUnsubscribe$.isCompleted;\n }\n}\nclass CommandHandlerInitializer extends Reactive {\n commandBus = CoreContainer.resolve(CommandBus);\n constructor() {\n super();\n }\n register(commandHandlers) {\n if (commandHandlers) {\n const set = new Set();\n const filteredHandlers = [];\n commandHandlers.filter(handler => {\n if (!set.has(handler.commandHandler)) {\n set.add(handler.commandHandler);\n filteredHandlers.push(handler);\n }\n });\n filteredHandlers.forEach(handler => {\n this.commandBus.ofCommandHandler(handler).pipe(this.hermesTakeUntil()).subscribe(command => {\n handler.handleCommand(command);\n });\n });\n }\n }\n registerAggregateCommandHandlers(aggregateCommandHandlers) {\n if (aggregateCommandHandlers) {\n const set = new Set();\n const filteredHandlers = [];\n aggregateCommandHandlers.filter(handler => {\n if (!set.has(handler.createAggregateCommandHandler)) {\n set.add(handler.createAggregateCommandHandler);\n filteredHandlers.push(handler);\n }\n });\n filteredHandlers.forEach(handler => {\n this.commandBus.ofCreateAggregateHandler(handler).pipe(this.hermesTakeUntil()).subscribe(command => {\n handler.handleCommand(command);\n });\n });\n }\n }\n}\nclass DomainEventBus extends HermesObservable {\n eventStream;\n constructor(eventStream) {\n super();\n this.eventStream = eventStream;\n }\n static services = [DomainEventStream];\n subscribe() {\n return this.eventStream.toObservable().subscribe(arguments[0], arguments[1], arguments[2]);\n }\n ofEvents(events) {\n return this.eventStream.toObservable().pipe(hermesFilter(domainEvent => {\n return events.some(event => {\n const eventInstance = this.createEventInstance(event);\n return eventInstance.equalsByType(domainEvent);\n });\n }));\n }\n ofEventHandlers(handlers) {\n return this.eventStream.toObservable().pipe(hermesFilter(event => {\n return handlers.some(handler => handler.forEvents([event]));\n }));\n }\n createEventInstance(event) {\n const args = [],\n argumentLength = event.constructor.length;\n args.fill(undefined, 0, argumentLength);\n if (args.length === 0) {\n return new event();\n } else if (args.length === 1) {\n return new event(args[0]);\n } else if (args.length === 2) {\n return new event(args[0], args[1]);\n } else if (args.length === 3) {\n return new event(args[0], args[1], args[2]);\n } else if (args.length === 4) {\n return new event(args[0], args[1], args[2], args[3]);\n } else if (args.length === 5) {\n return new event(args[0], args[1], args[2], args[3], args[4]);\n } else {\n throw new Error('DomainEventBus constructor out of arguments');\n }\n }\n}\nclass DomainEventHandlerInitializer extends Reactive {\n domainEventBus;\n unsub$ = new HermesSubject();\n constructor(domainEventBus) {\n super();\n this.domainEventBus = domainEventBus;\n }\n static services = [DomainEventBus];\n init(eventHandlers) {\n if (eventHandlers) {\n const set = new Set();\n const filteredHandlers = [];\n eventHandlers.filter(handler => {\n if (!set.has(handler.domainEventHandler)) {\n set.add(handler.domainEventHandler);\n filteredHandlers.push(handler);\n }\n });\n filteredHandlers.forEach(handler => {\n this.domainEventBus.ofEventHandlers([handler]).pipe(hermesTakeUntil(this.unsub$), this.hermesTakeUntil()).subscribe(event => {\n handler.handleEvent(event);\n });\n });\n // console.log('Registered event handlers:', filteredHandlers.length)\n // console.log('Registered event handlers:', filteredHandlers)\n }\n }\n reinit(eventHandlers) {\n this.stop();\n this.init(eventHandlers);\n }\n stop() {\n this.unsub$.next();\n this.unsub$.complete();\n this.unsub$ = new HermesSubject();\n }\n}\nconst COMMAND_LOGGER_ENABLED = 'GUI - COMMAND_LOGGER_ENABLED';\nconst EVENT_LOGGER_ENABLED = 'GUI - EVENT_LOGGER_ENABLED';\nclass Logger {\n domainName;\n setDomain(domainName) {\n this.domainName = domainName;\n }\n log(message) {\n if (this.shouldPrint(message)) {\n this.print(message);\n }\n }\n shouldPrint(message) {\n if (!this.domainName) {\n return true;\n }\n const log = message.toString();\n return log.includes(this.domainName);\n }\n}\nclass CommandLogger extends Logger {}\nclass ConsoleCommandLogger extends CommandLogger {\n enabled = false;\n unsubscribe$ = new HermesSubject();\n commandBus = CoreContainer.resolve(CommandBus);\n constructor() {\n super();\n this.commandBus.pipe(hermesFilter(() => this.enabled), hermesTakeUntil(this.unsubscribe$)).subscribe(command => {\n this.log(command);\n });\n }\n onDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n start() {\n this.enabled = true;\n }\n stop() {\n this.enabled = false;\n }\n print(command) {\n // eslint-disable-next-line no-console\n console.log(command.toString(), command);\n }\n}\nclass NoopCommandLogger extends CommandLogger {\n start() {}\n stop() {}\n print(_command) {}\n}\nclass DomainEventLogger extends Logger {\n constructor() {\n super();\n }\n}\nclass NoopEventLogger extends DomainEventLogger {\n constructor() {\n super();\n }\n start() {}\n stop() {}\n print(_event) {}\n}\nclass AggregateStoreRegister {\n stores = [];\n register(store) {\n this.stores.push(store);\n }\n captureAggregatesSnapshot(aggregateId) {\n if (!aggregateId) {\n return {};\n }\n const aggregates = {};\n this.stores.forEach(store => {\n const aggregate = store.findById(aggregateId);\n if (aggregate) {\n const aggregateName = aggregate.constructor.name;\n aggregates[aggregateName] = aggregate;\n }\n });\n return this.cloneAggregates(aggregates);\n }\n cloneAggregates(aggregates) {\n // return JSON.parse(JSON.stringify(aggregates));\n return aggregates;\n }\n}\nclass ConsoleEventLogger extends DomainEventLogger {\n enabled = false;\n unsubscribe$ = new HermesSubject();\n eventBus = CoreContainer.resolve(DomainEventBus);\n aggregateStoreRegister = CoreContainer.resolve(AggregateStoreRegister);\n constructor() {\n super();\n this.eventBus.pipe(hermesFilter(() => this.enabled), hermesTakeUntil(this.unsubscribe$)).subscribe(domainEvent => {\n this.log(domainEvent);\n });\n }\n onDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n start() {\n this.enabled = true;\n }\n stop() {\n this.enabled = false;\n }\n print(domainEvent) {\n const aggregateId = domainEvent.getAggregateId(),\n aggregates = this.aggregateStoreRegister.captureAggregatesSnapshot(aggregateId);\n // eslint-disable-next-line no-console\n console.log(domainEvent.toString(), domainEvent, aggregates);\n }\n}\nconst aggregateDefinitionToken = 'Hermes - aggregateDefinitionToken';\nconst DOMAIN_EVENT_HANDLERS = 'HERMES - DOMAIN_EVENT_HANDLERS_TOKEN';\n\n/**\n * ngc for grid package for some reasons doesn't allow to use injection token\n */\nconst CREATE_AGGREGATE_COMMAND_HANDLERS = 'HERMES - CREATE_AGGREGATE_COMMAND_HANDLERS';\nconst COMMAND_HANDLERS = 'HERMES - COMMAND_HANDLERS_TOKEN';\nclass HermesRunner extends Reactive {\n aggregateDefinitionInitializer;\n commandHandlerInitializer;\n domainEventHandlerInitializer;\n commandBus;\n definedAggregate;\n eventHandlers;\n aggregateCommandHandlers;\n commandHandlers;\n started = false;\n constructor(aggregateDefinitionInitializer, commandHandlerInitializer, domainEventHandlerInitializer, commandBus, definedAggregate, eventHandlers, aggregateCommandHandlers, commandHandlers) {\n super();\n this.aggregateDefinitionInitializer = aggregateDefinitionInitializer;\n this.commandHandlerInitializer = commandHandlerInitializer;\n this.domainEventHandlerInitializer = domainEventHandlerInitializer;\n this.commandBus = commandBus;\n this.definedAggregate = definedAggregate;\n this.eventHandlers = eventHandlers;\n this.aggregateCommandHandlers = aggregateCommandHandlers;\n this.commandHandlers = commandHandlers;\n if (this.eventHandlers === null) {\n this.eventHandlers = [];\n }\n if (this.aggregateCommandHandlers === null) {\n this.aggregateCommandHandlers = [];\n }\n if (this.commandHandlers === null) {\n this.commandHandlers = [];\n }\n }\n static services = [AggregateDefinitionInitializer, CommandHandlerInitializer, DomainEventHandlerInitializer, CommandBus, {\n inject: aggregateDefinitionToken,\n collection: true\n }, {\n inject: DOMAIN_EVENT_HANDLERS,\n collection: true,\n optional: true\n }, {\n inject: CREATE_AGGREGATE_COMMAND_HANDLERS,\n collection: true,\n optional: true\n }, {\n inject: COMMAND_HANDLERS,\n collection: true,\n optional: true\n }];\n run() {\n if (this.started) {\n return;\n }\n this.checkNullCommand(this.commandHandlers, this.aggregateCommandHandlers);\n this.checkCommandHandlerIsCollection(this.commandHandlers);\n this.checkDomainEventHandlerIsCollection(this.eventHandlers);\n this.aggregateDefinitionInitializer.register(this.definedAggregate);\n this.commandHandlerInitializer.register(this.commandHandlers);\n this.commandHandlerInitializer.registerAggregateCommandHandlers(this.aggregateCommandHandlers);\n this.domainEventHandlerInitializer.init(this.eventHandlers);\n this.started = true;\n }\n destroy() {\n this.commandHandlerInitializer.onDestroy();\n this.domainEventHandlerInitializer.onDestroy();\n }\n checkNullCommand(commandHandlers, aggregateCommandHandlers) {\n this.commandBus.ofNullHandler(commandHandlers, aggregateCommandHandlers).pipe(this.hermesTakeUntil()).subscribe(command => {\n // eslint-disable-next-line no-console\n console.error(`Command ${command.toString()} was not intercepted by any CommandHandler.`);\n });\n }\n checkCommandHandlerIsCollection(commandHandlers) {\n if (commandHandlers && !Array.isArray(commandHandlers)) {\n // eslint-disable-next-line no-console\n console.warn('You might provided commandHandler without specifying \"multi: true\".');\n }\n }\n checkDomainEventHandlerIsCollection(eventHandlers) {\n if (eventHandlers && !Array.isArray(eventHandlers)) {\n // eslint-disable-next-line no-console\n console.warn('You might provided eventHandler without specifying \"multi: true\".');\n }\n }\n}\nfunction commandLoggerFactory(enabled, consoleCommandLogger, noopCommandLogger) {\n if (enabled) {\n return consoleCommandLogger;\n } else {\n return noopCommandLogger;\n }\n}\nfunction eventLoggerFactory(enabled, consoleEventLogger, noopEventLogger) {\n if (enabled) {\n return consoleEventLogger;\n } else {\n return noopEventLogger;\n }\n}\nfunction runHermes() {\n CoreContainer.resolve(HermesRunner).run();\n}\nclass CommandDispatcher {\n commandStream = CoreContainer.resolve(CommandStream);\n dispatch(command) {\n this.commandStream.next(command);\n }\n}\nclass DomainEventPublisher {\n eventStream;\n constructor(eventStream) {\n this.eventStream = eventStream;\n }\n static services = [DomainEventStream];\n publish(args) {\n if (Array.isArray(args)) {\n for (const arg of args) {\n this.publishEvent(arg);\n }\n } else {\n this.publishEvent(args);\n }\n }\n publishFromAggregate(aggregate) {\n const events = [...aggregate.getEvents()];\n events.forEach(aggregateEvent => {\n this.publish(aggregateEvent.toDomainEvent());\n });\n }\n publishEvent(event) {\n if (!event) {\n // eslint-disable-next-line no-console\n console.error(`${event} is not defined`);\n }\n if (!(event instanceof DomainEvent)) {\n // throw new Error(`${event} is not a DomainEvent`);\n // eslint-disable-next-line no-console\n console.error(`${event} is not a DomainEvent`);\n }\n this.eventStream.next(event);\n }\n}\nconst CoreContainer = createContainer();\nCoreContainer.provideValue(EVENT_LOGGER_ENABLED, true);\nCoreContainer.provideValue(COMMAND_LOGGER_ENABLED, true);\nCoreContainer.provide(ConsoleCommandLogger);\nCoreContainer.provide(NoopCommandLogger);\nCoreContainer.provide(NoopEventLogger);\nCoreContainer.provide(ConsoleEventLogger);\nCoreContainer.provide(DomainEventBus);\nCoreContainer.provide(AggregateStoreRegister);\nCoreContainer.provideFactory(CommandLogger, {\n create: commandLoggerFactory,\n deps: [COMMAND_LOGGER_ENABLED, ConsoleCommandLogger, NoopCommandLogger]\n});\nCoreContainer.provideFactory(DomainEventLogger, {\n create: eventLoggerFactory,\n deps: [EVENT_LOGGER_ENABLED, ConsoleEventLogger, NoopEventLogger]\n});\nCoreContainer.provide(AggregateFactoryArchive, AggregateFactoryArchive);\nCoreContainer.provide(DomainEventPublisher);\nCoreContainer.provide(AggregateRepositoryArchive);\nCoreContainer.provide(DomainEventStream, DomainEventStream);\nCoreContainer.provide(DomainEventStore, DomainEventStore);\nCoreContainer.provide(CommandBus, CommandBus);\nCoreContainer.provide(CommandStream);\nCoreContainer.provide(CommandDispatcher);\nCoreContainer.provide(AggregateDefinitionInitializer, AggregateDefinitionInitializer);\nCoreContainer.provide(CommandHandlerInitializer, CommandHandlerInitializer);\nCoreContainer.provide(DomainEventHandlerInitializer, DomainEventHandlerInitializer);\nCoreContainer.provide(HermesRunner);\nconst resetCoreContainer = () => {\n CoreContainer.clearOnlyRecords();\n};\nclass Command extends Message {}\nconst MessageType = Function;\nconst CommandType = MessageType;\nclass AggregateFactory {}\nclass AggregateEvent {\n aggregateId;\n type;\n constructor(aggregateId, type) {\n this.aggregateId = aggregateId;\n this.type = type;\n }\n getAggregateId() {\n return this.aggregateId;\n }\n getType() {\n return this.type;\n }\n equals(event) {\n return this.equalsByType(event) && this.getAggregateId().equals(event.getAggregateId());\n }\n equalsByType(event) {\n return this.getType() === event.getType();\n }\n}\nconst AggregateEventType = MessageType;\nclass AggregateRepository {}\nclass AggregateStore {}\nclass AggregateRoot {\n type;\n aggregateId;\n events;\n constructor(aggregateId, type) {\n this.type = type;\n this.aggregateId = aggregateId;\n this.events = [];\n }\n getId() {\n return this.aggregateId;\n }\n getType() {\n return this.type;\n }\n getEvents() {\n return this.events;\n }\n addEvent(args) {\n if (Array.isArray(args)) {\n for (const event of args) {\n this.events.push(event);\n }\n } else {\n this.events.push(args);\n }\n }\n clearEvents() {\n this.events.length = 0;\n }\n equals(aggregate) {\n return aggregate.getId().toString() === this.getId().toString();\n }\n}\nclass HermesId {\n uid;\n constructor(uid) {\n this.uid = uid;\n }\n getId() {\n return this.uid;\n }\n equals(hermesId) {\n return this.uid === hermesId.getId();\n }\n}\nclass AggregateId extends HermesId {\n constructor(uid) {\n super(uid);\n }\n toString() {\n return super.getId();\n }\n}\nconst DomainEventType = MessageType;\nclass ReactiveService extends Reactive {\n constructor() {\n super();\n }\n onDestroy() {\n this.hermesUnsubscribe();\n }\n}\nclass KeyMap {\n keys = new Map();\n values = new WeakMap();\n find(key) {\n const internalKey = this.getInternalKey(key);\n if (internalKey !== undefined) {\n return Optional.of(this.values.get(internalKey));\n } else {\n return Optional.empty();\n }\n }\n has(key) {\n const internalKey = this.getInternalKey(key);\n return this.values.has(internalKey);\n }\n set(key, value) {\n this.keys.set(key.toString(), key);\n this.values.set(key, value);\n }\n size() {\n return this.keys.size;\n }\n remove(key) {\n if (this.hasInternalKey(key)) {\n this.keys.delete(key.toString());\n this.values.delete(key);\n }\n }\n removeAll() {\n this.keys.forEach(value => {\n this.values.delete(value);\n });\n this.keys.clear();\n }\n getInternalKey(key) {\n return this.keys.get(key.toString());\n }\n hasInternalKey(key) {\n return this.keys.has(key.toString());\n }\n}\nfunction hermesMap(convert) {\n return source => {\n return new HermesObservable(observer => {\n let index = 0;\n const subscriber = subscriberForOperator(observer, value => {\n observer.next(convert(value, index++));\n });\n return source.subscribe(subscriber).getFinalize();\n });\n };\n}\nfunction hermesDistinctUntilChanged(compareFn) {\n const compare = compareFn ? compareFn : defaultCompareFn;\n return source => {\n return new HermesObservable(observer => {\n let previousValue = null;\n const subscriber = subscriberForOperator(observer, value => {\n if (previousValue === null || !compare(previousValue, value)) {\n previousValue = value;\n observer.next(value);\n }\n });\n return source.subscribe(subscriber).getFinalize();\n });\n };\n}\nfunction defaultCompareFn(a, b) {\n return a === b;\n}\nclass HermesBehaviorSubject extends HermesSubject {\n lastValue;\n constructor(defaultValue) {\n super();\n this.lastValue = defaultValue;\n }\n next(value) {\n this.lastValue = value;\n super.next(value);\n }\n subscribe() {\n const subscription = super.subscribe(arguments[0], arguments[1], arguments[2]);\n super.next(this.lastValue);\n return subscription;\n }\n}\nclass HermesReplaySubject extends HermesSubject {\n bufferSize;\n values = [];\n constructor(bufferSize = 1) {\n super();\n this.bufferSize = bufferSize;\n }\n pipe(...operations) {\n return super.pipe(...operations);\n }\n next(value) {\n this.values.push(value);\n if (this.bufferSize < this.values.length) {\n this.values.shift();\n }\n super.next(value);\n }\n subscribe() {\n let subscriber;\n if (arguments[0] instanceof HermesSubscriber) {\n subscriber = arguments[0];\n } else {\n subscriber = this.createSubscriber(arguments[0], arguments[1], arguments[2]);\n }\n const subscription = super.subscribe(subscriber);\n for (const value of this.values) {\n subscriber.next(value);\n }\n return subscription;\n }\n}\nclass HermesArchiveSubject extends HermesSubject {\n constructor() {\n super();\n }\n static of(value) {\n if (value !== undefined) {\n return new HermesBehaviorSubject(value);\n } else {\n return new HermesReplaySubject(1);\n }\n }\n}\nclass HermesSingleSubscriber extends HermesSubscriber {\n next(value) {\n if (this.isCompleted()) {\n return;\n }\n const observer = this.getObserver();\n if (observer && observer.next) {\n observer.next(value);\n this.complete();\n }\n }\n}\nclass HermesSingle extends HermesObservable {\n createSubscriber(next, error, complete) {\n return new HermesSingleSubscriber({\n next,\n error,\n complete\n });\n }\n}\nfunction singleFromObservable(source) {\n return new HermesSingle(observer => {\n const subscriber = new HermesSubscriber({\n next: value => observer.next(value),\n error: error => observer.error(error),\n complete: () => {}\n });\n const subscription = source.subscribe(subscriber);\n return subscription.getFinalize();\n });\n}\nclass KeyArchive extends ReactiveService {\n archive = new KeyMap();\n archive$;\n defaultValue = Optional.empty();\n constructor(defaultValue) {\n super();\n this.archive$ = HermesArchiveSubject.of();\n if (defaultValue !== undefined && defaultValue !== null) {\n this.defaultValue = Optional.of(defaultValue);\n }\n }\n on(key) {\n this.tryToInitDefault(key);\n return this.archive$.toObservable().pipe(hermesFilter(() => this.isNotStopped()), hermesMap(map => {\n return map.find(key);\n }), hermesFilter(value => value.isPresent()), hermesMap(value => value.getValueOrNullOrThrowError()), hermesDistinctUntilChanged(this.equals), this.hermesTakeUntil());\n }\n once(key) {\n return singleFromObservable(this.on(key));\n }\n find(key) {\n this.tryToInitDefault(key);\n return this.archive.find(key);\n }\n next(key, value) {\n this.archive.set(key, value);\n this.archive$.next(this.archive);\n }\n equals(a, b) {\n return a === b;\n }\n createDefaultValue(defaultValue) {\n return defaultValue;\n }\n tryToInitDefault(key) {\n this.defaultValue.ifPresent(value => {\n if (!this.archive.has(key)) {\n this.next(key, value);\n }\n });\n }\n}\nclass AggregateArchive extends KeyArchive {\n constructor(defaultValue) {\n super(defaultValue);\n }\n}\nclass EventDrivenRepository extends AggregateArchive {\n constructor(defaultValues) {\n super(defaultValues);\n }\n handle(event) {\n this.next(event.getAggregateId(), event.getPayload());\n }\n}\n\n/**\n * @deprecated\n */\nclass ReadModelEntity {\n entityId;\n constructor(gui) {\n this.entityId = gui;\n }\n getId() {\n return this.entityId;\n }\n}\n\n/**\n * @deprecated\n */\nclass ReadModelEntityId {\n uid;\n constructor(uid) {\n this.uid = uid;\n }\n toString() {\n return this.uid;\n }\n getId() {\n return this.uid;\n }\n equals(entityId) {\n return this.uid === entityId.getId();\n }\n}\n\n/**\n * @deprecated\n */\nclass ReadModelRoot {\n rootId;\n constructor(gui) {\n this.rootId = gui;\n }\n getId() {\n return this.rootId;\n }\n}\n\n/**\n * @deprecated\n */\nclass ReadModelRootId {\n uid;\n constructor(uid) {\n this.uid = uid;\n }\n toString() {\n return this.uid;\n }\n getId() {\n return this.uid;\n }\n equals(entityId) {\n return this.uid === entityId.getId();\n }\n}\n\n/**\n * @deprecated\n */\nclass ReadModelRootRepository extends Reactive {\n domainEventBus = CoreContainer.resolve(DomainEventBus);\n constructor() {\n super();\n this.domainEventBus.ofEvents(this.forEvents()).pipe(this.hermesTakeUntil()).subscribe(event => {\n try {\n this.subscribe(event);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n }\n });\n }\n}\n\n/**\n * @deprecated\n */\nclass ReadModelStore {}\nclass EventRepository extends ReactiveService {\n domainEventBus = CoreContainer.resolve(DomainEventBus);\n constructor() {\n super();\n }\n onEvent(aggregateId, eventType) {\n return this.domainEventBus.ofEvents([eventType]).pipe(hermesFilter(event => event.getAggregateId().toString() === aggregateId.toString()));\n }\n}\nclass Entity {\n entityId;\n constructor(id) {\n this.entityId = id;\n }\n getId() {\n return this.entityId;\n }\n equals(entity) {\n return this.entityId.equals(entity.getId());\n }\n}\nclass EntityId extends HermesId {}\nfunction ValueObject(_target) {}\nfunction DomainObject(_target) {}\nfunction ReadModelObject(_target) {}\nclass FeatureModule {}\nfunction hermesNever() {\n return new HermesObservable(() => {});\n}\nfunction hermesInterval(interval) {\n let counter = 0;\n return new HermesObservable(observer => {\n const id = setInterval(() => {\n observer.next(counter++);\n }, interval);\n return () => {\n clearInterval(id);\n observer.complete();\n };\n });\n}\nfunction hermesTimer(time) {\n return new HermesObservable(observer => {\n const id = setTimeout(() => {\n observer.next(0);\n }, time);\n return () => {\n clearTimeout(id);\n observer.complete();\n };\n });\n}\nfunction hermesFromEvent(element, type) {\n return new HermesObservable(observer => {\n const listener = event => {\n observer.next(event);\n };\n element.addEventListener(type, listener);\n return () => {\n element.removeEventListener(type, listener);\n };\n });\n}\nfunction hermesThrowError(error) {\n return new HermesObservable(observer => {\n observer.error(error);\n });\n}\nfunction hermesSkip(valuesNumber) {\n return source => {\n return new HermesObservable(observer => {\n let index = 0;\n const subscriber = subscriberForOperator(observer, value => {\n if (index >= valuesNumber) {\n observer.next(value);\n }\n index++;\n });\n return source.subscribe(subscriber).getFinalize();\n });\n };\n}\nfunction hermesSwitchMap(operation) {\n return source => {\n return new HermesObservable(observer => {\n let isOuterCompleted = false;\n let innerSubscriber = null;\n const tryToComplete = function () {\n if (isOuterCompleted && !innerSubscriber) {\n observer.complete();\n }\n };\n const outerSubscriber = subscriberForOperator(observer, v => {\n if (innerSubscriber) {\n innerSubscriber.unsubscribe();\n }\n const subscriber = new HermesSubscriber({\n next: v2 => observer.next(v2),\n error: e => observer.error(e),\n complete: () => {\n innerSubscriber = null;\n tryToComplete();\n }\n });\n innerSubscriber = subscriber;\n const innerSubscription = operation(v).subscribe(subscriber);\n return innerSubscription.getFinalize();\n }, () => {\n isOuterCompleted = true;\n tryToComplete();\n });\n return source.subscribe(outerSubscriber).getFinalize();\n });\n };\n}\nfunction hermesTap(operation) {\n return source => {\n return new HermesObservable(observer => {\n const subscriber = subscriberForOperator(observer, value => {\n operation(value);\n observer.next(value);\n });\n return source.subscribe(subscriber).getFinalize();\n });\n };\n}\nfunction hermesToArray() {\n return source => {\n return new HermesObservable(observer => {\n const values = [];\n const subscriber = subscriberForOperator(observer, value => {\n values.push(value);\n }, () => {\n if (values.length > 0) {\n observer.next(values);\n }\n observer.complete();\n });\n return source.subscribe(subscriber).getFinalize();\n });\n };\n}\nfunction fromRxJsObservable(source$) {\n return new HermesObservable(observer => {\n const subscription = source$.subscribe(value => observer.next(value), error => observer.error(error), () => observer.complete());\n return () => subscription.unsubscribe();\n });\n}\nclass Archive {\n archive$;\n constructor(value) {\n this.archive$ = HermesArchiveSubject.of(value);\n }\n on() {\n return this.archive$.toObservable().pipe(hermesDistinctUntilChanged(this.compare));\n }\n next(value) {\n this.archive$.next(value);\n }\n compare(one, two) {\n return one === two;\n }\n}\nclass RandomIdGenerator {\n static index = 0;\n static generate() {\n RandomIdGenerator.index++;\n return RandomIdGenerator.index;\n }\n}\nclass PersistAnemia {\n readModelRootId;\n constructor(uid) {\n this.readModelRootId = uid;\n }\n getReadModelRootId() {\n return this.readModelRootId;\n }\n getId() {\n return this.getReadModelRootId().toString();\n }\n}\nclass PersistStateStore {\n state = new Map();\n set(anemia) {\n this.state.set(anemia.getId(), anemia);\n }\n setMany(anemias) {\n anemias.forEach(anemia => {\n this.set(anemia);\n });\n }\n get(aggregateId) {\n return Optional.of(this.state.get(aggregateId.toString()));\n }\n getAll() {\n return Array.from(this.state.values());\n }\n clear() {\n this.state.clear();\n }\n}\nclass PersistReadModelStore extends ReadModelStore {\n stateStore;\n constructor(stateStore) {\n super();\n this.stateStore = stateStore;\n }\n getById(aggregateId) {\n return this.getValue(aggregateId);\n }\n getAll() {\n return this.getAllValues();\n }\n getAllValues() {\n return this.stateStore.getAll().map(anemia => this.toReadModel(anemia));\n }\n getValue(aggregateId) {\n const optAnemia = this.stateStore.get(aggregateId);\n return optAnemia.map(this.toReadModel);\n }\n}\nclass PersistAggregateStore extends AggregateStore {\n stateStore;\n aggregateStoreRegister = CoreContainer.resolve(AggregateStoreRegister);\n constructor(stateStore) {\n super();\n this.stateStore = stateStore;\n this.aggregateStoreRegister.register(this);\n }\n save(aggregate) {\n this.saveValue(aggregate);\n }\n findById(aggregateId) {\n return this.getValue(aggregateId);\n }\n saveValue(aggregate) {\n const anemia = this.toAnemia(aggregate);\n this.stateStore.set(anemia);\n }\n getValue(aggregateId) {\n const optAnemia = this.stateStore.get(aggregateId);\n return optAnemia.map(this.fromAnemia);\n }\n}\nclass InMemoryAggregateStore extends AggregateStore {\n inMemoryStore;\n aggregateStoreRegister = CoreContainer.resolve(AggregateStoreRegister);\n constructor(inMemoryStore) {\n super();\n this.inMemoryStore = inMemoryStore;\n this.aggregateStoreRegister.register(this);\n }\n save(arg) {\n if (Array.isArray(arg)) {\n arg.forEach(aggregate => {\n this.inMemoryStore.set(aggregate);\n });\n } else {\n const aggregate = arg;\n this.inMemoryStore.set(aggregate);\n }\n }\n findById(aggregateId) {\n const optAggregate = this.inMemoryStore.get(aggregateId);\n optAggregate.ifPresent(a => a.clearEvents());\n return optAggregate;\n }\n remove(aggregateId) {\n this.inMemoryStore.delete(aggregateId);\n }\n}\nclass InMemoryReadModelStore extends ReadModelStore {\n inMemoryStore;\n constructor(inMemoryStore) {\n super();\n this.inMemoryStore = inMemoryStore;\n }\n getById(aggregateId) {\n return this.getValue(aggregateId);\n }\n getValue(aggregateId) {\n const optAggregate = this.inMemoryStore.get(aggregateId);\n return optAggregate.map(this.toReadModel.bind(this));\n }\n}\nclass InMemoryStore {\n state = new Map();\n set(aggregate) {\n this.state.set(aggregate.getId().toString(), aggregate);\n }\n setMany(aggregates) {\n aggregates.forEach(aggregate => {\n this.set(aggregate);\n });\n }\n get(aggregateId) {\n return Optional.of(this.state.get(aggregateId.toString()));\n }\n getAll() {\n return Array.from(this.state.values()).map(v => Optional.of(v));\n }\n has(aggregateId) {\n return this.state.has(aggregateId.toString());\n }\n delete(aggregateId) {\n this.state.delete(aggregateId.toString());\n }\n clear() {\n this.state.clear();\n }\n}\nfunction assertDomainEvents(actualEvents, expectedEvents) {\n expect(actualEvents.length).toEqual(expectedEvents.length);\n for (const actualEvent of actualEvents) {\n const expectedEvent = expectedEvents.find(event => {\n return event.equalsByType(actualEvent);\n });\n expect(expectedEvent).toBeDefined();\n expect(actualEvent.equalsByType(expectedEvent)).toBeTruthy();\n // expect(actualEvent.aggregateId).toEqual(expectedEvent.aggregateId, 'Events aggregateId should be the same');\n expect(actualEvent.getPayload()).toEqual(expectedEvent.getPayload(), 'Events payload should be the same');\n }\n}\nfunction assertAggregateEvents(actualEvents, expectedEvents) {\n expect(actualEvents.length).toEqual(expectedEvents.length, 'Aggregate events');\n for (const actualEvent of actualEvents) {\n const expectedEvent = expectedEvents.find(event => {\n return event.equals(actualEvent);\n });\n expect(expectedEvent).toBeDefined();\n }\n}\nfunction testEventRepositoryIsEmptyOnStart(createStream, desc) {\n it('should be no ' + desc + ' events on start', () => {\n expect.assertions(3);\n // given\n const nextFn = jest.fn(),\n errorFn = jest.fn(),\n completeFn = jest.fn();\n // when\n createStream().subscribe(() => nextFn(), err => errorFn(err), () => completeFn());\n // then\n expect(nextFn).not.toHaveBeenCalled();\n expect(errorFn).not.toHaveBeenCalled();\n expect(completeFn).not.toHaveBeenCalled();\n });\n}\nfunction onDefaultValuesWarehouseTest(createStream, defaultValue, desc) {\n it('should have default value ' + desc, () => {\n expect.assertions(4);\n // given\n const nextFn = jest.fn(),\n errorFn = jest.fn(),\n completeFn = jest.fn();\n // when\n createStream().subscribe(value => nextFn(value), err => errorFn(err), () => completeFn());\n // then\n expect(nextFn).toHaveBeenCalledWith(defaultValue);\n expect(nextFn).toHaveBeenCalledTimes(1);\n expect(errorFn).not.toHaveBeenCalled();\n expect(completeFn).not.toHaveBeenCalled();\n });\n}\nfunction onceDefaultValuesWarehouseTest(createStream, defaultValue, desc) {\n it('should have default value ' + desc, () => {\n expect.assertions(4);\n // given\n const nextFn = jest.fn(),\n errorFn = jest.fn(),\n completeFn = jest.fn();\n // when\n createStream().subscribe(value => nextFn(value), err => errorFn(err), () => completeFn());\n // then\n expect(nextFn).toHaveBeenCalledWith(defaultValue);\n expect(nextFn).toHaveBeenCalledTimes(1);\n expect(errorFn).not.toHaveBeenCalled();\n expect(completeFn).toHaveBeenCalledTimes(1);\n });\n}\nfunction onWarehouseEmpty(createStream, desc) {\n it('should be empty ' + desc, () => {\n expect.assertions(3);\n // given\n const nextFn = jest.fn(),\n errorFn = jest.fn(),\n completeFn = jest.fn();\n // when\n createStream().subscribe(value => nextFn(value), err => errorFn(err), () => completeFn());\n // then\n expect(nextFn).not.toHaveBeenCalled();\n expect(errorFn).not.toHaveBeenCalled();\n expect(completeFn).not.toHaveBeenCalled();\n });\n}\nfunction findDefaultValuesWarehouseTest(createValue, defaultValue, desc) {\n it('should find default value' + desc, function () {\n expect.assertions(1);\n expect(createValue()).toEqual(Optional.of(defaultValue));\n });\n}\nfunction commandInterceptedByHandlerTest(dispatch, handlerType) {\n it('should trigger command handler', () => {\n expect.assertions(1);\n // given\n const handler = CoreContainer.resolve(handlerType),\n handlerSpy = jest.spyOn(handler, 'handle');\n // when\n dispatch();\n // then\n expect(handlerSpy).toHaveBeenCalled();\n });\n}\nfunction commandPublishEventTest(dispatch, eventType) {\n it('should dispatch event', () => {\n expect.assertions(1);\n // given\n CoreContainer.resolve(DomainEventBus).subscribe(event => {\n // then\n if (event instanceof eventType) {\n expect(event instanceof eventType).toEqual(true);\n }\n });\n // when\n dispatch();\n });\n}\nfunction commandTriggersHandlerAndPublishEventTest(dispatch, handlerType, eventType) {\n commandInterceptedByHandlerTest(dispatch, handlerType);\n commandPublishEventTest(dispatch, eventType);\n}\nclass CreateAggregateCommand extends Command {\n constructor(aggregateId, type) {\n super(aggregateId, type);\n }\n}\nconst hermesApi = 'hermesApi';\nfunction initHermesApi() {\n const cl = CoreContainer.resolve(CommandLogger),\n del = CoreContainer.resolve(DomainEventLogger);\n const api = () => {\n return {\n set loggers(enabled) {\n if (enabled) {\n // api.commandLogger.start(); TO FIX\n // api.eventLogger.start();\n } else {\n // api.commandLogger.stop(); // TO FIX\n // api.eventLogger.stop();\n }\n },\n set domain(domainName) {\n if (domainName) {\n cl.setDomain(domainName);\n del.setDomain(domainName);\n }\n }\n };\n };\n window[hermesApi] = api();\n window[hermesApi].loggers = false;\n}\nfunction enableHermesLoggers(domainName, windowObject) {\n const winRef = windowObject ? windowObject : window;\n if (domainName) {\n winRef[hermesApi].domain = domainName;\n }\n winRef[hermesApi].loggers = true;\n}\nfunction disableHermesLoggers(windowObject) {\n const winRef = windowObject ? windowObject : window;\n delete winRef[hermesApi].domain;\n winRef[hermesApi].loggers = false;\n}\nfunction createAggregateCommandHandlerFactory(createAggregateCommandHandler, aggregateName) {\n return new CreateAggregateCommandHandlerImpl(createAggregateCommandHandler, aggregateName);\n}\nclass CreateAggregateCommandHandlerImpl {\n createAggregateCommandHandler;\n aggregateType;\n aggregateFactoryArchive = CoreContainer.resolve(AggregateFactoryArchive);\n aggregateRepositoryArchive = CoreContainer.resolve(AggregateRepositoryArchive);\n domainEventPublisher = CoreContainer.resolve(DomainEventPublisher);\n commandType;\n constructor(createAggregateCommandHandler, aggregateType) {\n this.createAggregateCommandHandler = createAggregateCommandHandler;\n this.aggregateType = aggregateType;\n this.commandType = this.createCommandInstance().getMessageType();\n }\n handleCommand(command) {\n const aggregateId = command.getAggregateId();\n const optFactory = this.aggregateFactoryArchive.get(this.aggregateType);\n optFactory.ifPresent(factory => {\n const aggregate = factory.create(aggregateId);\n const type = aggregate.getType(),\n createCommandConstructor = aggregate.createEvent();\n const createCommand = new createCommandConstructor(aggregateId, type);\n aggregate.addEvent(createCommand);\n const optRepository = this.aggregateRepositoryArchive.get(this.aggregateType);\n optRepository.ifPresent(repo => {\n repo.save(aggregate);\n this.domainEventPublisher.publishFromAggregate(aggregate);\n });\n });\n }\n forCommand(command) {\n return this.commandType === command.getMessageType();\n }\n createCommandInstance() {\n const args = [],\n argumentLength = this.createAggregateCommandHandler.forCommand().constructor.length;\n args.fill(undefined, 0, argumentLength);\n if (args.length === 0) {\n return new (this.createAggregateCommandHandler.forCommand())();\n } else if (args.length === 1) {\n return new (this.createAggregateCommandHandler.forCommand())(args[0]);\n } else if (args.length === 2) {\n return new (this.createAggregateCommandHandler.forCommand())(args[0], args[1]);\n } else if (args.length === 3) {\n return new (this.createAggregateCommandHandler.forCommand())(args[0], args[1], args[2]);\n } else if (args.length === 4) {\n return new (this.createAggregateCommandHandler.forCommand())(args[0], args[1], args[2], args[3]);\n } else if (args.length === 5) {\n return new (this.createAggregateCommandHandler.forCommand())(args[0], args[1], args[2], args[3], args[4]);\n } else {\n throw new Error('CreateAggregateCommandHandlerImpl constructor out of arguments');\n }\n }\n}\nfunction commandHandlerFactory(commandHandler, aggregateName) {\n return new CommandHandlerImpl(commandHandler, aggregateName);\n}\nclass CommandHandlerImpl {\n commandHandler;\n aggregateType;\n aggregateRepositoryArchive = CoreContainer.resolve(AggregateRepositoryArchive);\n domainEventPublisher = CoreContainer.resolve(DomainEventPublisher);\n commandType;\n constructor(commandHandler, aggregateType) {\n this.commandHandler = commandHandler;\n this.aggregateType = aggregateType;\n this.commandType = this.createCommandInstance().getMessageType();\n }\n publishDomainEvents(aggregate, command) {\n if (this.commandHandler.publish) {\n this.commandHandler.publish(aggregate, command);\n } else {\n this.domainEventPublisher.publishFromAggregate(aggregate);\n }\n }\n handleCommand(command) {\n const aggregateId = command.getAggregateId();\n const optRepository = this.aggregateRepositoryArchive.get(this.aggregateType);\n optRepository.ifPresent(repo => {\n const optAggregate = repo.findById(aggregateId);\n optAggregate.ifPresent(aggregate => {\n this.commandHandler.handle(aggregate, command);\n this.publishDomainEvents(aggregate, command);\n });\n });\n }\n forCommand(command) {\n return this.commandType === command.getMessageType();\n }\n createCommandInstance() {\n const args = [],\n argumentLength = this.commandHandler.forCommand().constructor.length;\n args.fill(undefined, 0, argumentLength);\n if (args.length === 0) {\n return new (this.commandHandler.forCommand())();\n } else if (args.length === 1) {\n return new (this.commandHandler.forCommand())(args[0]);\n } else if (args.length === 2) {\n return new (this.commandHandler.forCommand())(args[0], args[1]);\n } else if (args.length === 3) {\n return new (this.commandHandler.forCommand())(args[0], args[1], args[2]);\n } else if (args.length === 4) {\n return new (this.commandHandler.forCommand())(args[0], args[1], args[2], args[3]);\n } else if (args.length === 5) {\n return new (this.commandHandler.forCommand())(args[0], args[1], args[2], args[3], args[4]);\n } else {\n throw new Error('CommandHandlerImpl constructor out of arguments');\n }\n }\n}\nfunction domainEventHandlerFactoryAsFactory(domainEventHandlerType) {\n return CoreContainer.resolve(domainEventHandlerType);\n}\nfunction domainEventHandlerFactory(domainEventHandler) {\n return new DomainEventHandlerImpl(domainEventHandler, [domainEventHandler.forEvent()]);\n}\nfunction multiDomainEventHandlerFactory(domainEventHandler) {\n return new DomainEventHandlerImpl(domainEventHandler, domainEventHandler.forEvents());\n}\nclass DomainEventHandlerImpl {\n domainEventHandler;\n events;\n eventTypes;\n constructor(domainEventHandler, events) {\n this.domainEventHandler = domainEventHandler;\n this.events = events;\n this.eventTypes = this.createDomainEventTypes();\n }\n handleEvent(event) {\n this.domainEventHandler.handle(event);\n }\n forEvents(events) {\n return events.some(event => {\n return this.eventTypes.some(type => {\n return type === event.getMessageType();\n });\n });\n }\n createDomainEventTypes() {\n const types = [];\n for (const event of this.events) {\n const instance = this.createDomainEventInstance(event);\n types.push(instance.getMessageType());\n }\n return types;\n }\n createDomainEventInstance(eventType) {\n const args = [],\n argumentLength = eventType.constructor.length;\n args.fill(undefined, 0, argumentLength);\n if (args.length === 0) {\n return new eventType();\n } else if (args.length === 1) {\n return new eventType(args[0]);\n } else if (args.length === 2) {\n return new eventType(args[0], args[1]);\n } else if (args.length === 3) {\n return new eventType(args[0], args[1], args[2]);\n } else if (args.length === 4) {\n return new eventType(args[0], args[1], args[2], args[3]);\n } else if (args.length === 5) {\n return new eventType(args[0], args[1], args[2], args[3], args[4]);\n } else {\n throw new Error('DomainEventHandler constructor out of arguments');\n }\n }\n}\nclass DomainInitializer {\n api;\n domain;\n container = CoreContainer;\n initialized = false;\n constructor(api, domain) {\n this.api = api;\n this.domain = domain;\n }\n init() {\n if (this.initialized) {\n return;\n }\n this.defineAggregate();\n this.registerApiProviders();\n this.registerDomainProviders();\n this.registerCommandHandlers();\n this.registerEventHandlers();\n this.registerMultiEventHandlers();\n this.initialized = true;\n }\n defineAggregate() {\n const definition = this.domain.defineAggregate();\n if (definition) {\n this.container.provide(definition.factory);\n this.container.provide(definition.repository);\n this.container.provideValue(definition.aggregateKey, definition.aggregateKey);\n this.container.provideValueCollection(aggregateDefinitionToken, {\n key: definition.aggregateKey,\n factory: definition.factory,\n repository: definition.repository\n });\n this.container.provide(definition.createCommandHandler);\n this.container.provideFactoryCollection(CREATE_AGGREGATE_COMMAND_HANDLERS, {\n create: createAggregateCommandHandlerFactory,\n deps: [definition.createCommandHandler, definition.aggregateKey]\n });\n }\n }\n registerApiProviders() {\n this.api.registerProviders(this.container);\n }\n registerDomainProviders() {\n this.domain.registerProviders(this.container);\n }\n registerCommandHandlers() {\n this.domain.registerCommandHandlers().forEach(ch => {\n this.container.provide(ch);\n this.container.provideFactoryCollection(COMMAND_HANDLERS, {\n create: commandHandlerFactory,\n deps: [ch, this.domain.registerKey(this.container)]\n });\n });\n }\n registerEventHandlers() {\n this.domain.registerDomainEventHandler().forEach(eh => {\n this.container.provide(eh);\n this.container.provideFactoryCollection(DOMAIN_EVENT_HANDLERS, {\n create: domainEventHandlerFactory,\n deps: [eh]\n });\n });\n }\n registerMultiEventHandlers() {\n this.domain.registerMultiDomainEventHandler().forEach(eh => {\n this.container.provide(eh);\n this.container.provideFactoryCollection(DOMAIN_EVENT_HANDLERS, {\n create: multiDomainEventHandlerFactory,\n deps: [eh]\n });\n });\n }\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AggregateArchive, AggregateEvent, AggregateEventType, AggregateFactory, AggregateId, AggregateRepository, AggregateRoot, AggregateStore, AggregateStoreRegister, Archive, COMMAND_LOGGER_ENABLED, Command, CommandDispatcher, CommandLogger, CommandType, CoreContainer, CreateAggregateCommand, DomainEvent, DomainEventBus, DomainEventPublisher, DomainEventType, DomainInitializer, DomainObject, EVENT_LOGGER_ENABLED, Entity, EntityId, EventDrivenRepository, EventRepository, FeatureModule, HermesArchiveSubject, HermesBehaviorSubject, HermesId, HermesObservable, HermesReplaySubject, HermesRunner, HermesSingle, HermesSubject, HermesSubscription, InMemoryAggregateStore, InMemoryReadModelStore, InMemoryStore, KeyMap, Optional, PersistAggregateStore, PersistAnemia, PersistReadModelStore, PersistStateStore, RandomIdGenerator, RandomStringGenerator, Reactive, ReactiveService, ReadModelEntity, ReadModelEntityId, ReadModelObject, ReadModelRoot, ReadModelRootId, ReadModelRootRepository, ReadModelStore, ValueObject, assertAggregateEvents, assertDomainEvents, commandInterceptedByHandlerTest, commandPublishEventTest, commandTriggersHandlerAndPublishEventTest, createContainer, disableHermesLoggers, enableHermesLoggers, findDefaultValuesWarehouseTest, fromRxJsObservable, hermesDistinctUntilChanged, hermesEmpty, hermesFilter, hermesFromEvent, hermesInterval, hermesMap, hermesNever, hermesOf, hermesSkip, hermesSwitchMap, hermesTake, hermesTakeUntil, hermesTap, hermesThrowError, hermesTimer, hermesToArray, initHermesApi, onDefaultValuesWarehouseTest, onWarehouseEmpty, onceDefaultValuesWarehouseTest, resetCoreContainer, runHermes, singleFromObservable, testEventRepositoryIsEmptyOnStart, toRxJsObservable };","map":{"version":3,"names":["Observable","takeUntil","Key","token","stringKey","constructor","generateStringKey","from","toString","split","NotFoundKey","getError","KeyRegister","records","Map","getKey","key","get","getKeyAndTryRegister","provider","has","set","_provider","clear","ProviderManager","providers","recordFactory","Error","Dependency","serviceToken","getToken","inject","isOptional","optional","undefined","isCollection","collection","RecordFactory","getDeps","services","map","service","ClassRecordFactory","create","depsInstances","ValueRecordFactory","_depsInstances","FactoryRecordFactory","deps","CollectionRecordFactory","ClassCollectionRecordFactory","setOfDeps","index","addProvider","push","FactoryCollectionRecordFactory","ValueCollectionRecordFactory","_setOfDeps","ContainerProvider","keyRegister","providerManager","collectionProviders","provide","provideClass","provideValue","provideFactory","provideCollection","addCollectionProvider","provideFactoryCollection","provideValueCollection","getRecordFactory","getCollectionRecordFactory","provideMethod","createFactory","multiFactory","RecordManager","record","ContainerRecord","containerProvider","recordManager","collectionRecords","resolve","innerResolve","resolveCollection","innerResolveCollection","resolveDependencies","dep","resolveDependency","instance","arrayOfDeps","instances","ContainerFacade","containerRecord","clearOnlyRecords","createContainer","HermesSubscription","subscriber","closed","isClosed","unsubscribe","getFinalize","HermesSubscriber","observer","finalize","completed","config","next","value","isCompleted","error","complete","setFinalize","getObserver","HermesObservable","generatorFn","source","generatorFinalize","generator","pipe","operations","operation","innerPipe","subscribe","arg","isObserver","createSubscriber","arguments","getSubscription","stream$","input","hermesEmptySubscription","HermesSubject","thrownError","subscribers","verifyNotClosed","subs","length","toObservable","subscription","v","DomainEventStream","RandomStringGenerator","generate","Math","random","substring","Message","aggregateId","messageType","messageId","getMessageType","getAggregateId","getMessageId","equalsByType","message","equals","ofMessageType","Array","isArray","found","find","isMessageType","DomainEvent","payload","isSameType","event","name","getPayload","hermesOf","args","forEach","hermesEmpty","hermesTake","valuesNumber","e","subscriberForOperator","nextFn","completeFn","subscriberFromObserver","hermesFilter","DomainEventStore","domainEvents","domainEvents$","findEventByType","eventType","events","getEvents","reverse","waitForEvent","waitForNextEventOccurrence","CommandStream","CommandBus","commandsStream","ofCommandHandler","handlers","command","some","handler","forCommand","ofCreateAggregateHandler","ofNullHandler","aggregateCommandHandlers","foundHandlerForCommand","Optional","isValueEmpty","empty","of","isEmpty","isPresent","filter","filterer","callback","mapper","getValueOrNullOrThrowError","getOrThrow","getOrElse","other","ifPresent","method","ifEmpty","orElse","AggregateFactoryArchive","add","factory","AggregateRepositoryArchive","repository","AggregateDefinitionInitializer","aggregateFactoryArchive","CoreContainer","aggregateRepositoryArchive","register","definedAggregate","Set","filteredDefinitions","def","hermesTakeUntil","notifier","notifierSubscriber","toRxJsObservable","source$","Reactive","hermesUnsubscribe$","onDestroy","hermesUnsubscribe","isNotStopped","CommandHandlerInitializer","commandBus","commandHandlers","filteredHandlers","commandHandler","handleCommand","registerAggregateCommandHandlers","createAggregateCommandHandler","DomainEventBus","eventStream","ofEvents","domainEvent","eventInstance","createEventInstance","ofEventHandlers","forEvents","argumentLength","fill","DomainEventHandlerInitializer","domainEventBus","unsub$","init","eventHandlers","domainEventHandler","handleEvent","reinit","stop","COMMAND_LOGGER_ENABLED","EVENT_LOGGER_ENABLED","Logger","domainName","setDomain","log","shouldPrint","print","includes","CommandLogger","ConsoleCommandLogger","enabled","unsubscribe$","start","console","NoopCommandLogger","_command","DomainEventLogger","NoopEventLogger","_event","AggregateStoreRegister","stores","store","captureAggregatesSnapshot","aggregates","aggregate","findById","aggregateName","cloneAggregates","ConsoleEventLogger","eventBus","aggregateStoreRegister","aggregateDefinitionToken","DOMAIN_EVENT_HANDLERS","CREATE_AGGREGATE_COMMAND_HANDLERS","COMMAND_HANDLERS","HermesRunner","aggregateDefinitionInitializer","commandHandlerInitializer","domainEventHandlerInitializer","started","run","checkNullCommand","checkCommandHandlerIsCollection","checkDomainEventHandlerIsCollection","destroy","warn","commandLoggerFactory","consoleCommandLogger","noopCommandLogger","eventLoggerFactory","consoleEventLogger","noopEventLogger","runHermes","CommandDispatcher","commandStream","dispatch","DomainEventPublisher","publish","publishEvent","publishFromAggregate","aggregateEvent","toDomainEvent","resetCoreContainer","Command","MessageType","Function","CommandType","AggregateFactory","AggregateEvent","type","getType","AggregateEventType","AggregateRepository","AggregateStore","AggregateRoot","getId","addEvent","clearEvents","HermesId","uid","hermesId","AggregateId","DomainEventType","ReactiveService","KeyMap","keys","values","WeakMap","internalKey","getInternalKey","size","remove","hasInternalKey","delete","removeAll","hermesMap","convert","hermesDistinctUntilChanged","compareFn","compare","defaultCompareFn","previousValue","a","b","HermesBehaviorSubject","lastValue","defaultValue","HermesReplaySubject","bufferSize","shift","HermesArchiveSubject","HermesSingleSubscriber","HermesSingle","singleFromObservable","KeyArchive","archive","archive$","on","tryToInitDefault","once","createDefaultValue","AggregateArchive","EventDrivenRepository","defaultValues","handle","ReadModelEntity","entityId","gui","ReadModelEntityId","ReadModelRoot","rootId","ReadModelRootId","ReadModelRootRepository","ReadModelStore","EventRepository","onEvent","Entity","id","entity","EntityId","ValueObject","_target","DomainObject","ReadModelObject","FeatureModule","hermesNever","hermesInterval","interval","counter","setInterval","clearInterval","hermesTimer","time","setTimeout","clearTimeout","hermesFromEvent","element","listener","addEventListener","removeEventListener","hermesThrowError","hermesSkip","hermesSwitchMap","isOuterCompleted","innerSubscriber","tryToComplete","outerSubscriber","v2","innerSubscription","hermesTap","hermesToArray","fromRxJsObservable","Archive","one","two","RandomIdGenerator","PersistAnemia","readModelRootId","getReadModelRootId","PersistStateStore","state","anemia","setMany","anemias","getAll","PersistReadModelStore","stateStore","getById","getValue","getAllValues","toReadModel","optAnemia","PersistAggregateStore","save","saveValue","toAnemia","fromAnemia","InMemoryAggregateStore","inMemoryStore","optAggregate","InMemoryReadModelStore","bind","InMemoryStore","assertDomainEvents","actualEvents","expectedEvents","expect","toEqual","actualEvent","expectedEvent","toBeDefined","toBeTruthy","assertAggregateEvents","testEventRepositoryIsEmptyOnStart","createStream","desc","it","assertions","jest","fn","errorFn","err","not","toHaveBeenCalled","onDefaultValuesWarehouseTest","toHaveBeenCalledWith","toHaveBeenCalledTimes","onceDefaultValuesWarehouseTest","onWarehouseEmpty","findDefaultValuesWarehouseTest","createValue","commandInterceptedByHandlerTest","handlerType","handlerSpy","spyOn","commandPublishEventTest","commandTriggersHandlerAndPublishEventTest","CreateAggregateCommand","hermesApi","initHermesApi","cl","del","api","loggers","domain","window","enableHermesLoggers","windowObject","winRef","disableHermesLoggers","createAggregateCommandHandlerFactory","CreateAggregateCommandHandlerImpl","aggregateType","domainEventPublisher","commandType","createCommandInstance","optFactory","createCommandConstructor","createEvent","createCommand","optRepository","repo","commandHandlerFactory","CommandHandlerImpl","publishDomainEvents","domainEventHandlerFactoryAsFactory","domainEventHandlerType","domainEventHandlerFactory","DomainEventHandlerImpl","forEvent","multiDomainEventHandlerFactory","eventTypes","createDomainEventTypes","types","createDomainEventInstance","DomainInitializer","container","initialized","defineAggregate","registerApiProviders","registerDomainProviders","registerCommandHandlers","registerEventHandlers","registerMultiEventHandlers","definition","aggregateKey","createCommandHandler","registerProviders","ch","registerKey","registerDomainEventHandler","eh","registerMultiDomainEventHandler"],"sources":["E:/TekH/Visual Studio/WebUserManager/DigitalData.UserManager.NgWebUI/ClientApp/node_modules/@generic-ui/hermes/fesm2022/generic-ui-hermes.mjs"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nclass Key {\n token;\n stringKey;\n constructor(token) {\n this.token = token;\n this.stringKey = this.generateStringKey();\n }\n static from(token) {\n return new Key(token);\n }\n toString() {\n return this.stringKey;\n }\n generateStringKey() {\n if (typeof this.token !== 'string') {\n return this.token.toString().split(' ')[1] || '';\n }\n else {\n return this.token;\n }\n }\n}\n\nclass NotFoundKey extends Key {\n constructor(token) {\n super(token);\n }\n getError() {\n if (typeof this.token === 'string') {\n return 'Key not found for the token: ' + this.token;\n }\n else {\n return 'Key not found for the token: ' + this.token.toString();\n }\n }\n}\n\nclass KeyRegister {\n records = new Map();\n getKey(token) {\n const key = this.records.get(token);\n if (!key) {\n return new NotFoundKey(token);\n }\n return key;\n }\n getKeyAndTryRegister(token, provider) {\n if (!this.has(token)) {\n this.set(token, provider);\n }\n return this.getKey(token);\n }\n has(token) {\n return this.records.has(token);\n }\n set(token, _provider) {\n this.records.set(token, Key.from(token));\n }\n clear() {\n this.records.clear();\n }\n}\n\nclass ProviderManager {\n providers = new Map();\n get(key) {\n const recordFactory = this.providers.get(key);\n if (!recordFactory) {\n throw new Error(`There is no provider for ${key.toString()}.`);\n }\n return recordFactory;\n }\n has(key) {\n return this.providers.has(key);\n }\n set(key, recordFactory) {\n this.providers.set(key, recordFactory);\n }\n clear() {\n this.providers.clear();\n }\n}\n\nclass Dependency {\n serviceToken;\n constructor(serviceToken) {\n this.serviceToken = serviceToken;\n }\n getToken() {\n if (typeof this.serviceToken === 'object') {\n return this.serviceToken.inject;\n }\n else {\n return this.serviceToken;\n }\n }\n isOptional() {\n if (typeof this.serviceToken !== 'string' &&\n typeof this.serviceToken === 'object' &&\n this.serviceToken.optional !== undefined) {\n return this.serviceToken.optional;\n }\n return false;\n }\n /**\n * @deprecated\n */\n isCollection() {\n if (typeof this.serviceToken !== 'string' &&\n typeof this.serviceToken === 'object' &&\n this.serviceToken.collection) {\n return this.serviceToken.collection;\n }\n return false;\n }\n}\n\nclass RecordFactory {\n provider;\n constructor(provider) {\n this.provider = provider;\n }\n getDeps() {\n return (this.provider.services || []).map((service) => new Dependency(service));\n }\n}\n\nclass ClassRecordFactory extends RecordFactory {\n constructor(provider) {\n super(provider);\n }\n create(depsInstances) {\n return new this.provider(...depsInstances);\n }\n}\n\nclass ValueRecordFactory extends RecordFactory {\n constructor(provider) {\n super(provider);\n }\n getDeps() {\n return [];\n }\n create(_depsInstances) {\n return this.provider;\n }\n}\n\nclass FactoryRecordFactory extends RecordFactory {\n constructor(provider) {\n super(provider);\n }\n getDeps() {\n return (this.provider.deps || [])\n .map((service) => new Dependency(service));\n }\n create(depsInstances) {\n return this.provider.create(...depsInstances);\n }\n}\n\nclass CollectionRecordFactory {\n}\n\nclass ClassCollectionRecordFactory extends CollectionRecordFactory {\n providers = [];\n getDeps() {\n return this.providers\n .map((provider) => {\n return (provider.services || [])\n .map((service) => {\n return new Dependency(service);\n });\n });\n }\n create(setOfDeps) {\n return setOfDeps\n .map((deps, index) => {\n return new this.providers[index](...deps);\n });\n }\n addProvider(provider) {\n this.providers.push(provider);\n }\n}\n\nclass FactoryCollectionRecordFactory extends CollectionRecordFactory {\n providers = [];\n getDeps() {\n return this.providers\n .map((provider) => {\n return (provider.deps || [])\n .map((service) => new Dependency(service));\n });\n }\n create(setOfDeps) {\n return setOfDeps\n .map((deps, index) => {\n return this.providers[index].create(...deps);\n });\n }\n addProvider(provider) {\n this.providers.push(provider);\n }\n}\n\nclass ValueCollectionRecordFactory extends CollectionRecordFactory {\n providers = [];\n getDeps() {\n return [];\n }\n create(_setOfDeps) {\n return [...this.providers];\n }\n addProvider(provider) {\n this.providers.push(provider);\n }\n}\n\nclass ContainerProvider {\n keyRegister;\n providerManager = new ProviderManager();\n collectionProviders = new Map();\n constructor(keyRegister) {\n this.keyRegister = keyRegister;\n }\n provide(token, provider) {\n if (provider === undefined) {\n return this.provide(token, token);\n }\n else {\n return this.provideClass(token, provider);\n }\n }\n provideClass(token, provider) {\n return this.addProvider(token, provider, (provider) => new ClassRecordFactory(provider));\n }\n provideValue(token, provider) {\n return this.addProvider(token, provider, (provider) => new ValueRecordFactory(provider));\n }\n provideFactory(token, provider) {\n return this.addProvider(token, provider, (provider) => new FactoryRecordFactory(provider));\n }\n provideCollection(token, provider) {\n return this.addCollectionProvider(token, provider, () => new ClassCollectionRecordFactory());\n }\n provideFactoryCollection(token, provider) {\n return this.addCollectionProvider(token, provider, () => new FactoryCollectionRecordFactory());\n }\n provideValueCollection(token, provider) {\n return this.addCollectionProvider(token, provider, () => new ValueCollectionRecordFactory());\n }\n clear() {\n this.providerManager.clear();\n this.collectionProviders.clear();\n }\n getRecordFactory(key) {\n return this.providerManager.get(key);\n }\n getCollectionRecordFactory(key) {\n return this.collectionProviders.get(key);\n }\n addProvider(token, provider, provideMethod) {\n const key = this.keyRegister.getKeyAndTryRegister(token, provider);\n this.providerManager.set(key, provideMethod(provider));\n }\n addCollectionProvider(token, provider, createFactory) {\n const key = this.keyRegister.getKeyAndTryRegister(token, provider);\n if (this.collectionProviders.has(key)) {\n const multiFactory = this.collectionProviders.get(key);\n if (multiFactory) {\n multiFactory.addProvider(provider);\n }\n }\n else {\n const multiFactory = createFactory();\n multiFactory.addProvider(provider);\n this.collectionProviders.set(key, multiFactory);\n }\n }\n}\n\nclass RecordManager {\n records = new Map();\n get(key) {\n return this.records.get(key);\n }\n has(key) {\n return this.records.has(key);\n }\n set(key, record) {\n this.records.set(key, record);\n }\n clear() {\n this.records.clear();\n }\n}\n\nclass ContainerRecord {\n keyRegister;\n containerProvider;\n recordManager = new RecordManager();\n collectionRecords = new Map();\n constructor(keyRegister, containerProvider) {\n this.keyRegister = keyRegister;\n this.containerProvider = containerProvider;\n }\n resolve(token) {\n return this.innerResolve(token);\n }\n resolveCollection(token) {\n return this.innerResolveCollection(token);\n }\n clear() {\n this.recordManager.clear();\n this.collectionRecords.clear();\n }\n resolveDependencies(provider) {\n const deps = provider.getDeps();\n return deps.map((dep) => {\n if (dep.isCollection()) {\n return this.innerResolveCollection(dep.getToken(), dep.isOptional());\n }\n else {\n return this.resolveDependency(dep);\n }\n });\n }\n resolveDependency(dep) {\n return this.innerResolve(dep.getToken(), dep.isOptional());\n }\n innerResolve(token, isOptional) {\n const key = this.keyRegister.getKey(token);\n if (key instanceof NotFoundKey) {\n if (isOptional) {\n return null;\n }\n else {\n throw new Error(key.getError());\n }\n }\n if (!this.recordManager.has(key)) {\n const recordFactory = this.containerProvider.getRecordFactory(key);\n const depsInstances = this.resolveDependencies(recordFactory);\n const instance = recordFactory.create(depsInstances);\n this.recordManager.set(key, instance);\n }\n return this.recordManager.get(key);\n }\n innerResolveCollection(token, isOptional = false) {\n const key = this.keyRegister.getKey(token);\n if (key instanceof NotFoundKey) {\n if (isOptional) {\n return null;\n }\n else {\n throw new Error(key.getError());\n }\n }\n if (!this.collectionRecords.has(key)) {\n const multiFactory = this.containerProvider.getCollectionRecordFactory(key);\n if (multiFactory) {\n const arrayOfDeps = multiFactory.getDeps()\n .map((deps) => {\n return deps.map((dep) => {\n if (dep.isCollection()) {\n return this.innerResolveCollection(dep.getToken(), dep.isOptional());\n }\n else {\n return this.resolveDependency(dep);\n }\n });\n });\n const instances = multiFactory.create(arrayOfDeps);\n this.collectionRecords.set(key, instances);\n }\n }\n return this.collectionRecords.get(key);\n }\n}\n\nclass ContainerFacade {\n keyRegister = new KeyRegister();\n containerProvider = new ContainerProvider(this.keyRegister);\n containerRecord = new ContainerRecord(this.keyRegister, this.containerProvider);\n resolve(token) {\n return this.containerRecord.resolve(token);\n }\n resolveCollection(token) {\n return this.containerRecord.resolveCollection(token);\n }\n provide(token, provider) {\n this.containerProvider.provide(token, provider);\n return this;\n }\n provideClass(token, provider) {\n this.containerProvider.provideClass(token, provider);\n return this;\n }\n provideValue(token, provider) {\n this.containerProvider.provideValue(token, provider);\n return this;\n }\n provideFactory(token, provider) {\n this.containerProvider.provideFactory(token, provider);\n return this;\n }\n provideCollection(token, provider) {\n this.containerProvider.provideCollection(token, provider);\n return this;\n }\n provideFactoryCollection(token, provider) {\n this.containerProvider.provideFactoryCollection(token, provider);\n return this;\n }\n provideValueCollection(token, provider) {\n this.containerProvider.provideValueCollection(token, provider);\n return this;\n }\n clear() {\n this.keyRegister.clear();\n this.containerProvider.clear();\n this.containerRecord.clear();\n }\n clearOnlyRecords() {\n this.containerRecord.clear();\n }\n}\n\nfunction createContainer() {\n return new ContainerFacade();\n}\n\nclass HermesSubscription {\n subscriber;\n closed = false;\n constructor(subscriber, isClosed) {\n this.subscriber = subscriber;\n if (isClosed !== undefined && isClosed !== null) {\n this.closed = isClosed;\n }\n }\n unsubscribe() {\n if (this.closed) {\n return;\n }\n this.closed = true;\n this.subscriber.unsubscribe();\n }\n getFinalize() {\n return this.subscriber.getFinalize();\n }\n}\n\nclass HermesSubscriber {\n observer;\n // eslint-disable-next-line\n finalize = () => {\n };\n completed = false;\n closed = false;\n constructor(config) {\n this.observer = config;\n }\n next(value) {\n if (this.isCompleted()) {\n return;\n }\n if (this.observer && this.observer.next) {\n this.observer.next(value);\n }\n }\n error(error) {\n if (this.completed) {\n return;\n }\n if (this.observer && this.observer.error) {\n this.observer.error(error);\n }\n this.unsubscribe();\n }\n complete() {\n if (this.completed) {\n return;\n }\n this.completed = true;\n if (this.observer && this.observer.complete) {\n this.observer.complete();\n }\n this.unsubscribe();\n }\n unsubscribe() {\n if (this.closed) {\n return;\n }\n this.closed = true;\n this.completed = true;\n this.finalize();\n }\n setFinalize(finalize) {\n if (finalize && typeof finalize === 'function') {\n this.finalize = finalize;\n }\n else {\n }\n }\n getFinalize() {\n return this.finalize;\n }\n isCompleted() {\n return this.completed;\n }\n isClosed() {\n return this.closed;\n }\n getObserver() {\n return this.observer;\n }\n}\n\nclass HermesObservable {\n generatorFn;\n source;\n // private operator: HermesObservable<T>;\n // eslint-disable-next-line\n generatorFinalize;\n constructor(generator) {\n this.generatorFn = generator;\n }\n pipe(...operations) {\n this.source = this;\n for (const operation of operations) {\n this.source = this.innerPipe(operation, this.source);\n }\n return this.source;\n }\n subscribe(arg) {\n let subscriber;\n if (arg instanceof HermesSubscriber) {\n subscriber = arg;\n }\n else if (arg !== null && this.isObserver(arg)) {\n const { next, error, complete } = arg;\n subscriber = this.createSubscriber(next, error, complete);\n }\n else {\n subscriber = this.createSubscriber(arguments[0], arguments[1], arguments[2]);\n }\n if (this.generatorFn) {\n this.generatorFinalize = this.generatorFn(subscriber);\n subscriber.setFinalize(this.generatorFinalize);\n }\n return this.getSubscription(subscriber);\n }\n createSubscriber(next, error, complete) {\n return new HermesSubscriber({\n next,\n error,\n complete\n });\n }\n getSubscription(subscriber) {\n return new HermesSubscription(subscriber);\n }\n innerPipe(operation, stream$) {\n return ((input) => {\n return operation(input);\n })(stream$);\n }\n isObserver(observer) {\n return typeof observer === 'object';\n }\n}\n\nfunction hermesEmptySubscription() {\n return new HermesSubscription(new HermesSubscriber({}), true);\n}\n\nclass HermesSubject extends HermesObservable {\n /**\n * After error\n */\n thrownError = null;\n /**\n * After complete\n */\n isCompleted = false;\n /**\n * After unsubscribe\n */\n isClosed = false;\n subscribers = [];\n constructor() {\n super();\n }\n next(value) {\n this.verifyNotClosed();\n if (this.isCompleted || this.thrownError !== null) {\n return;\n }\n for (const subs of this.subscribers) {\n subs.next(value);\n }\n }\n error(error) {\n this.verifyNotClosed();\n if (this.isCompleted) {\n return;\n }\n this.thrownError = error;\n for (const subs of this.subscribers) {\n subs.error(error);\n }\n this.subscribers.length = 0;\n }\n complete() {\n this.verifyNotClosed();\n if (this.isCompleted) {\n return;\n }\n this.isCompleted = true;\n for (const subs of this.subscribers) {\n subs.complete();\n }\n this.subscribers.length = 0;\n }\n subscribe(arg) {\n this.verifyNotClosed();\n let subscriber;\n if (arg instanceof HermesSubscriber) {\n subscriber = arg;\n }\n else {\n subscriber = this.createSubscriber(arguments[0], arguments[1], arguments[2]);\n }\n if (this.thrownError !== null) {\n subscriber.error(this.thrownError);\n return hermesEmptySubscription();\n }\n else if (this.isCompleted) {\n subscriber.complete();\n return hermesEmptySubscription();\n }\n else {\n this.subscribers.push(subscriber);\n return this.getSubscription(subscriber);\n }\n }\n unsubscribe() {\n this.isCompleted = true;\n this.isClosed = true;\n this.subscribers.length = 0;\n }\n toObservable() {\n return new HermesObservable((observer) => {\n const subscription = this.subscribe((v) => observer.next(v), (error) => observer.error(error), () => observer.complete());\n return () => subscription.unsubscribe();\n });\n }\n verifyNotClosed() {\n if (this.isClosed) {\n throw new Error('Observable already closed');\n }\n }\n}\n\nclass DomainEventStream extends HermesSubject {\n // constructor(private readonly eventStore: DomainEventStore) {\n constructor() {\n super();\n }\n}\n\nclass RandomStringGenerator {\n static index = 0;\n static generate() {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15) + `${RandomStringGenerator.index++}`;\n }\n}\n\nclass Message {\n aggregateId;\n messageType;\n messageId;\n constructor(aggregateId, messageType, messageId = RandomStringGenerator.generate()) {\n this.aggregateId = aggregateId;\n this.messageType = messageType;\n this.messageId = messageId;\n }\n getMessageType() {\n return this.messageType;\n }\n getAggregateId() {\n return this.aggregateId;\n }\n getMessageId() {\n return this.messageId;\n }\n toString() {\n return this.messageType;\n }\n equalsByType(message) {\n return this.getMessageType() === message.getMessageType();\n }\n equals(message) {\n return (this.getMessageType() === message.getMessageType()) && (this.messageId === message.messageId);\n }\n ofMessageType(arg) {\n if (Array.isArray(arg)) {\n const found = arg.find((messageType) => this.isMessageType(messageType));\n return !!found;\n }\n else {\n return this.isMessageType(arg);\n }\n }\n isMessageType(messageType) {\n return this.getMessageType() === messageType;\n }\n}\n\nclass DomainEvent extends Message {\n payload;\n constructor(aggregateId, payload, messageType) {\n super(aggregateId, messageType);\n this.payload = payload;\n }\n isSameType(event) {\n return this.constructor.name === event.constructor.name;\n }\n getPayload() {\n return this.payload;\n }\n}\n\nfunction hermesOf(...args) {\n return new HermesObservable(observer => {\n args.forEach(value => {\n observer.next(value);\n });\n observer.complete();\n });\n}\n\nfunction hermesEmpty() {\n return new HermesObservable((observer) => {\n observer.complete();\n });\n}\n\nfunction hermesTake(valuesNumber) {\n return (source) => {\n if (valuesNumber === 0) {\n return hermesEmpty();\n }\n return new HermesObservable(observer => {\n let index = 0;\n const subscriber = new HermesSubscriber({\n next: () => {\n },\n error: (e) => observer.error(e),\n complete: () => observer.complete()\n });\n subscriber.observer.next = function (v) {\n if (index < valuesNumber) {\n observer.next(v);\n index++;\n if (index === valuesNumber) {\n subscriber.complete();\n }\n }\n };\n const subscription = source.subscribe(subscriber);\n return subscription.getFinalize();\n });\n };\n}\n\nfunction subscriberForOperator(observer, next, complete) {\n const nextFn = next ? next : (v) => {\n observer.next(v);\n }, completeFn = complete ? complete : () => {\n observer.complete();\n };\n return new HermesSubscriber({\n next: nextFn,\n error: (e) => observer.error(e),\n complete: completeFn\n });\n}\nfunction subscriberFromObserver(observer) {\n return new HermesSubscriber({\n next: (v) => observer.next(v),\n error: (e) => observer.error(e),\n complete: () => observer.complete()\n });\n}\n\nfunction hermesFilter(operation) {\n return (source) => {\n return new HermesObservable(observer => {\n const subscriber = subscriberForOperator(observer, (value) => {\n if (operation(value)) {\n observer.next(value);\n }\n });\n return source.subscribe(subscriber).getFinalize();\n });\n };\n}\n\nclass DomainEventStore {\n domainEvents = [];\n domainEvents$ = new HermesSubject();\n next(event) {\n this.domainEvents.push(event);\n this.domainEvents$.next(event);\n }\n findEventByType(eventType) {\n const events = this.getEvents();\n return events.reverse()\n .find((event) => {\n return event.constructor.name === eventType;\n });\n }\n /**\n * First tries to find event in the history,\n * then method waits for future occurrences of the event.\n */\n waitForEvent(eventType) {\n // find in a history\n const event = this.findEventByType(eventType);\n if (event) {\n return hermesOf(event);\n }\n // wait for future occurrence\n return this.waitForNextEventOccurrence(eventType);\n }\n waitForNextEventOccurrence(arg) {\n let eventType;\n if (arg instanceof DomainEvent) {\n eventType = arg.constructor.name;\n }\n else if (typeof arg === 'string') {\n eventType = arg;\n }\n else {\n return new HermesObservable((observer) => {\n observer.error(new Error('Unsupported argument type.'));\n });\n // return throwError(new Error('Unsupported argument type.'));\n }\n return this.domainEvents$\n .toObservable()\n .pipe(hermesFilter((event) => event.constructor.name === eventType), hermesTake(1));\n }\n getEvents() {\n return this.domainEvents;\n }\n}\n\nclass CommandStream extends HermesSubject {\n constructor() {\n super();\n }\n}\n\nclass CommandBus extends HermesObservable {\n commandsStream;\n constructor(commandsStream) {\n super();\n this.commandsStream = commandsStream;\n }\n static services = [CommandStream];\n subscribe() {\n return this.commandsStream.toObservable().subscribe(arguments[0], arguments[1], arguments[2]);\n }\n ofCommandHandler(...handlers) {\n return this\n .commandsStream\n .toObservable()\n .pipe(hermesFilter((command) => {\n return handlers.some((handler) => {\n return handler.forCommand(command);\n });\n }));\n }\n ofCreateAggregateHandler(...handlers) {\n return this\n .commandsStream\n .toObservable()\n .pipe(hermesFilter((command) => {\n return handlers.some((handler) => {\n return handler.forCommand(command);\n });\n }));\n }\n ofNullHandler(handlers, aggregateCommandHandlers) {\n return this\n .commandsStream\n .toObservable()\n .pipe(hermesFilter((command) => {\n if (!handlers && !aggregateCommandHandlers) {\n return true;\n }\n let foundHandlerForCommand = true;\n if (handlers) {\n foundHandlerForCommand =\n !handlers.some((handler) => {\n return handler.forCommand(command);\n });\n }\n if (aggregateCommandHandlers) {\n foundHandlerForCommand = foundHandlerForCommand &&\n !aggregateCommandHandlers.some((handler) => {\n return handler.forCommand(command);\n });\n }\n return foundHandlerForCommand;\n }));\n }\n}\n\nclass Optional {\n value;\n constructor(value) {\n if (Optional.isValueEmpty(value)) {\n this.value = null;\n }\n else {\n this.value = value;\n }\n return this;\n }\n static empty() {\n return new Optional(null);\n }\n static of(value) {\n return new Optional(value);\n }\n static isValueEmpty(value) {\n return typeof value === 'undefined' || value === null;\n }\n isEmpty() {\n return Optional.isValueEmpty(this.value);\n }\n isPresent() {\n return !this.isEmpty();\n }\n filter(filterer) {\n if (this.isPresent() && filterer(this.value)) {\n return this;\n }\n return Optional.empty();\n }\n forEach(callback) {\n if (this.isPresent()) {\n callback(this.value);\n }\n }\n map(mapper) {\n if (this.isPresent()) {\n return new Optional(mapper(this.value));\n }\n return Optional.empty();\n }\n /**\n * @deprecated\n */\n getValueOrNullOrThrowError() {\n return this.value;\n }\n getOrThrow() {\n if (this.isEmpty()) {\n throw new Error('Called getOrThrow on an empty Optional');\n }\n return this.value;\n }\n getOrElse(other) {\n if (this.isPresent()) {\n return this.value;\n }\n return other();\n }\n ifPresent(method) {\n if (this.isPresent()) {\n method(this.value);\n }\n }\n ifEmpty(method) {\n if (this.isEmpty()) {\n method();\n }\n }\n orElse(other) {\n if (this.isPresent()) {\n return this;\n }\n return other();\n }\n}\n\nclass AggregateFactoryArchive {\n map = new Map();\n constructor() {\n }\n add(key, factory) {\n this.map.set(key, factory);\n }\n get(key) {\n return Optional.of(this.map.get(key));\n }\n has(key) {\n return this.map.has(key);\n }\n}\nclass AggregateRepositoryArchive {\n map = new Map();\n constructor() {\n }\n add(key, repository) {\n this.map.set(key, repository);\n }\n get(key) {\n return Optional.of(this.map.get(key));\n }\n has(key) {\n return this.map.has(key);\n }\n}\n\nclass AggregateDefinitionInitializer {\n aggregateFactoryArchive = CoreContainer.resolve(AggregateFactoryArchive);\n aggregateRepositoryArchive = CoreContainer.resolve(AggregateRepositoryArchive);\n constructor() {\n }\n register(definedAggregate) {\n if (definedAggregate) {\n const set = new Set();\n const filteredDefinitions = [];\n definedAggregate.filter((def) => {\n if (!set.has(def.key)) {\n set.add(def.key);\n filteredDefinitions.push(def);\n }\n });\n filteredDefinitions.forEach((def) => {\n const factory = CoreContainer.resolve(def.factory), repository = CoreContainer.resolve(def.repository);\n if (!this.aggregateFactoryArchive.has(def.key)) {\n this.aggregateFactoryArchive.add(def.key, factory);\n }\n if (!this.aggregateRepositoryArchive.has(def.key)) {\n this.aggregateRepositoryArchive.add(def.key, repository);\n }\n });\n // console.log('Registered aggregate definition:' + filteredDefinitions.length);\n // console.log('Registered aggregate definition:', filteredDefinitions);\n }\n }\n}\n\nfunction hermesTakeUntil(notifier) {\n return (source) => {\n return new HermesObservable(observer => {\n const subscriber = subscriberFromObserver(observer);\n const notifierSubscriber = new HermesSubscriber({\n next: () => subscriber.complete()\n });\n notifier.subscribe(notifierSubscriber);\n const subscription = source.subscribe(subscriber);\n return subscription.getFinalize();\n });\n };\n}\n\nfunction toRxJsObservable(source$) {\n return new Observable((observer) => {\n const subscription = source$.subscribe((value) => observer.next(value), (error) => observer.error(error), () => observer.complete());\n return () => subscription.unsubscribe();\n });\n}\n\nclass Reactive {\n hermesUnsubscribe$ = new HermesSubject();\n constructor() {\n }\n onDestroy() {\n this.hermesUnsubscribe();\n }\n takeUntil() {\n return takeUntil(toRxJsObservable(this.hermesUnsubscribe$));\n }\n hermesUnsubscribe() {\n this.hermesUnsubscribe$.next();\n this.hermesUnsubscribe$.complete();\n }\n hermesTakeUntil() {\n return hermesTakeUntil(this.hermesUnsubscribe$);\n }\n isNotStopped() {\n return !this.hermesUnsubscribe$.isCompleted;\n }\n}\n\nclass CommandHandlerInitializer extends Reactive {\n commandBus = CoreContainer.resolve(CommandBus);\n constructor() {\n super();\n }\n register(commandHandlers) {\n if (commandHandlers) {\n const set = new Set();\n const filteredHandlers = [];\n commandHandlers.filter((handler) => {\n if (!set.has(handler.commandHandler)) {\n set.add(handler.commandHandler);\n filteredHandlers.push(handler);\n }\n });\n filteredHandlers.forEach((handler) => {\n this.commandBus\n .ofCommandHandler(handler)\n .pipe(this.hermesTakeUntil())\n .subscribe((command) => {\n handler.handleCommand(command);\n });\n });\n }\n }\n registerAggregateCommandHandlers(aggregateCommandHandlers) {\n if (aggregateCommandHandlers) {\n const set = new Set();\n const filteredHandlers = [];\n aggregateCommandHandlers.filter((handler) => {\n if (!set.has(handler.createAggregateCommandHandler)) {\n set.add(handler.createAggregateCommandHandler);\n filteredHandlers.push(handler);\n }\n });\n filteredHandlers.forEach((handler) => {\n this.commandBus\n .ofCreateAggregateHandler(handler)\n .pipe(this.hermesTakeUntil())\n .subscribe((command) => {\n handler.handleCommand(command);\n });\n });\n }\n }\n}\n\nclass DomainEventBus extends HermesObservable {\n eventStream;\n constructor(eventStream) {\n super();\n this.eventStream = eventStream;\n }\n static services = [DomainEventStream];\n subscribe() {\n return this.eventStream.toObservable().subscribe(arguments[0], arguments[1], arguments[2]);\n }\n ofEvents(events) {\n return this\n .eventStream\n .toObservable()\n .pipe(hermesFilter((domainEvent) => {\n return events.some((event) => {\n const eventInstance = this.createEventInstance(event);\n return eventInstance.equalsByType(domainEvent);\n });\n }));\n }\n ofEventHandlers(handlers) {\n return this\n .eventStream\n .toObservable()\n .pipe(hermesFilter((event) => {\n return handlers.some((handler) => handler.forEvents([event]));\n }));\n }\n createEventInstance(event) {\n const args = [], argumentLength = event.constructor.length;\n args.fill(undefined, 0, argumentLength);\n if (args.length === 0) {\n return (new event());\n }\n else if (args.length === 1) {\n return (new event(args[0]));\n }\n else if (args.length === 2) {\n return (new event(args[0], args[1]));\n }\n else if (args.length === 3) {\n return (new event(args[0], args[1], args[2]));\n }\n else if (args.length === 4) {\n return (new event(args[0], args[1], args[2], args[3]));\n }\n else if (args.length === 5) {\n return (new event(args[0], args[1], args[2], args[3], args[4]));\n }\n else {\n throw new Error('DomainEventBus constructor out of arguments');\n }\n }\n}\n\nclass DomainEventHandlerInitializer extends Reactive {\n domainEventBus;\n unsub$ = new HermesSubject();\n constructor(domainEventBus) {\n super();\n this.domainEventBus = domainEventBus;\n }\n static services = [DomainEventBus];\n init(eventHandlers) {\n if (eventHandlers) {\n const set = new Set();\n const filteredHandlers = [];\n eventHandlers.filter((handler) => {\n if (!set.has(handler.domainEventHandler)) {\n set.add(handler.domainEventHandler);\n filteredHandlers.push(handler);\n }\n });\n filteredHandlers.forEach((handler) => {\n this.domainEventBus\n .ofEventHandlers([handler])\n .pipe(hermesTakeUntil(this.unsub$), this.hermesTakeUntil())\n .subscribe((event) => {\n handler.handleEvent(event);\n });\n });\n // console.log('Registered event handlers:', filteredHandlers.length)\n // console.log('Registered event handlers:', filteredHandlers)\n }\n }\n reinit(eventHandlers) {\n this.stop();\n this.init(eventHandlers);\n }\n stop() {\n this.unsub$.next();\n this.unsub$.complete();\n this.unsub$ = new HermesSubject();\n }\n}\n\nconst COMMAND_LOGGER_ENABLED = 'GUI - COMMAND_LOGGER_ENABLED';\nconst EVENT_LOGGER_ENABLED = 'GUI - EVENT_LOGGER_ENABLED';\n\nclass Logger {\n domainName;\n setDomain(domainName) {\n this.domainName = domainName;\n }\n log(message) {\n if (this.shouldPrint(message)) {\n this.print(message);\n }\n }\n shouldPrint(message) {\n if (!this.domainName) {\n return true;\n }\n const log = message.toString();\n return log.includes(this.domainName);\n }\n}\n\nclass CommandLogger extends Logger {\n}\n\nclass ConsoleCommandLogger extends CommandLogger {\n enabled = false;\n unsubscribe$ = new HermesSubject();\n commandBus = CoreContainer.resolve(CommandBus);\n constructor() {\n super();\n this.commandBus\n .pipe(hermesFilter(() => this.enabled), hermesTakeUntil(this.unsubscribe$))\n .subscribe((command) => {\n this.log(command);\n });\n }\n onDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n start() {\n this.enabled = true;\n }\n stop() {\n this.enabled = false;\n }\n print(command) {\n // eslint-disable-next-line no-console\n console.log(command.toString(), command);\n }\n}\n\nclass NoopCommandLogger extends CommandLogger {\n start() {\n }\n stop() {\n }\n print(_command) {\n }\n}\n\nclass DomainEventLogger extends Logger {\n constructor() {\n super();\n }\n}\n\nclass NoopEventLogger extends DomainEventLogger {\n constructor() {\n super();\n }\n start() {\n }\n stop() {\n }\n print(_event) {\n }\n}\n\nclass AggregateStoreRegister {\n stores = [];\n register(store) {\n this.stores.push(store);\n }\n captureAggregatesSnapshot(aggregateId) {\n if (!aggregateId) {\n return {};\n }\n const aggregates = {};\n this.stores.forEach((store) => {\n const aggregate = store.findById(aggregateId);\n if (aggregate) {\n const aggregateName = aggregate.constructor.name;\n aggregates[aggregateName] = aggregate;\n }\n });\n return this.cloneAggregates(aggregates);\n }\n cloneAggregates(aggregates) {\n // return JSON.parse(JSON.stringify(aggregates));\n return aggregates;\n }\n}\n\nclass ConsoleEventLogger extends DomainEventLogger {\n enabled = false;\n unsubscribe$ = new HermesSubject();\n eventBus = CoreContainer.resolve(DomainEventBus);\n aggregateStoreRegister = CoreContainer.resolve(AggregateStoreRegister);\n constructor() {\n super();\n this.eventBus\n .pipe(hermesFilter(() => this.enabled), hermesTakeUntil(this.unsubscribe$))\n .subscribe((domainEvent) => {\n this.log(domainEvent);\n });\n }\n onDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n start() {\n this.enabled = true;\n }\n stop() {\n this.enabled = false;\n }\n print(domainEvent) {\n const aggregateId = domainEvent.getAggregateId(), aggregates = this.aggregateStoreRegister.captureAggregatesSnapshot(aggregateId);\n // eslint-disable-next-line no-console\n console.log(domainEvent.toString(), domainEvent, aggregates);\n }\n}\n\nconst aggregateDefinitionToken = 'Hermes - aggregateDefinitionToken';\n\nconst DOMAIN_EVENT_HANDLERS = 'HERMES - DOMAIN_EVENT_HANDLERS_TOKEN';\n\n/**\n * ngc for grid package for some reasons doesn't allow to use injection token\n */\nconst CREATE_AGGREGATE_COMMAND_HANDLERS = 'HERMES - CREATE_AGGREGATE_COMMAND_HANDLERS';\n\nconst COMMAND_HANDLERS = 'HERMES - COMMAND_HANDLERS_TOKEN';\n\nclass HermesRunner extends Reactive {\n aggregateDefinitionInitializer;\n commandHandlerInitializer;\n domainEventHandlerInitializer;\n commandBus;\n definedAggregate;\n eventHandlers;\n aggregateCommandHandlers;\n commandHandlers;\n started = false;\n constructor(aggregateDefinitionInitializer, commandHandlerInitializer, domainEventHandlerInitializer, commandBus, definedAggregate, eventHandlers, aggregateCommandHandlers, commandHandlers) {\n super();\n this.aggregateDefinitionInitializer = aggregateDefinitionInitializer;\n this.commandHandlerInitializer = commandHandlerInitializer;\n this.domainEventHandlerInitializer = domainEventHandlerInitializer;\n this.commandBus = commandBus;\n this.definedAggregate = definedAggregate;\n this.eventHandlers = eventHandlers;\n this.aggregateCommandHandlers = aggregateCommandHandlers;\n this.commandHandlers = commandHandlers;\n if (this.eventHandlers === null) {\n this.eventHandlers = [];\n }\n if (this.aggregateCommandHandlers === null) {\n this.aggregateCommandHandlers = [];\n }\n if (this.commandHandlers === null) {\n this.commandHandlers = [];\n }\n }\n static services = [\n AggregateDefinitionInitializer,\n CommandHandlerInitializer,\n DomainEventHandlerInitializer,\n CommandBus,\n { inject: aggregateDefinitionToken, collection: true },\n { inject: DOMAIN_EVENT_HANDLERS, collection: true, optional: true },\n { inject: CREATE_AGGREGATE_COMMAND_HANDLERS, collection: true, optional: true },\n { inject: COMMAND_HANDLERS, collection: true, optional: true }\n ];\n run() {\n if (this.started) {\n return;\n }\n this.checkNullCommand(this.commandHandlers, this.aggregateCommandHandlers);\n this.checkCommandHandlerIsCollection(this.commandHandlers);\n this.checkDomainEventHandlerIsCollection(this.eventHandlers);\n this.aggregateDefinitionInitializer.register(this.definedAggregate);\n this.commandHandlerInitializer.register(this.commandHandlers);\n this.commandHandlerInitializer.registerAggregateCommandHandlers(this.aggregateCommandHandlers);\n this.domainEventHandlerInitializer.init(this.eventHandlers);\n this.started = true;\n }\n destroy() {\n this.commandHandlerInitializer.onDestroy();\n this.domainEventHandlerInitializer.onDestroy();\n }\n checkNullCommand(commandHandlers, aggregateCommandHandlers) {\n this.commandBus\n .ofNullHandler(commandHandlers, aggregateCommandHandlers)\n .pipe(this.hermesTakeUntil())\n .subscribe((command) => {\n // eslint-disable-next-line no-console\n console.error(`Command ${command.toString()} was not intercepted by any CommandHandler.`);\n });\n }\n checkCommandHandlerIsCollection(commandHandlers) {\n if (commandHandlers && !Array.isArray(commandHandlers)) {\n // eslint-disable-next-line no-console\n console.warn('You might provided commandHandler without specifying \"multi: true\".');\n }\n }\n checkDomainEventHandlerIsCollection(eventHandlers) {\n if (eventHandlers && !Array.isArray(eventHandlers)) {\n // eslint-disable-next-line no-console\n console.warn('You might provided eventHandler without specifying \"multi: true\".');\n }\n }\n}\n\nfunction commandLoggerFactory(enabled, consoleCommandLogger, noopCommandLogger) {\n if (enabled) {\n return consoleCommandLogger;\n }\n else {\n return noopCommandLogger;\n }\n}\nfunction eventLoggerFactory(enabled, consoleEventLogger, noopEventLogger) {\n if (enabled) {\n return consoleEventLogger;\n }\n else {\n return noopEventLogger;\n }\n}\nfunction runHermes() {\n CoreContainer.resolve(HermesRunner).run();\n}\n\nclass CommandDispatcher {\n commandStream = CoreContainer.resolve(CommandStream);\n dispatch(command) {\n this.commandStream.next(command);\n }\n}\n\nclass DomainEventPublisher {\n eventStream;\n constructor(eventStream) {\n this.eventStream = eventStream;\n }\n static services = [DomainEventStream];\n publish(args) {\n if (Array.isArray(args)) {\n for (const arg of args) {\n this.publishEvent(arg);\n }\n }\n else {\n this.publishEvent(args);\n }\n }\n publishFromAggregate(aggregate) {\n const events = [...aggregate.getEvents()];\n events.forEach((aggregateEvent) => {\n this.publish(aggregateEvent.toDomainEvent());\n });\n }\n publishEvent(event) {\n if (!event) {\n // eslint-disable-next-line no-console\n console.error(`${event} is not defined`);\n }\n if (!(event instanceof DomainEvent)) {\n // throw new Error(`${event} is not a DomainEvent`);\n // eslint-disable-next-line no-console\n console.error(`${event} is not a DomainEvent`);\n }\n this.eventStream.next(event);\n }\n}\n\nconst CoreContainer = createContainer();\nCoreContainer.provideValue(EVENT_LOGGER_ENABLED, true);\nCoreContainer.provideValue(COMMAND_LOGGER_ENABLED, true);\nCoreContainer.provide(ConsoleCommandLogger);\nCoreContainer.provide(NoopCommandLogger);\nCoreContainer.provide(NoopEventLogger);\nCoreContainer.provide(ConsoleEventLogger);\nCoreContainer.provide(DomainEventBus);\nCoreContainer.provide(AggregateStoreRegister);\nCoreContainer.provideFactory(CommandLogger, { create: commandLoggerFactory, deps: [COMMAND_LOGGER_ENABLED, ConsoleCommandLogger, NoopCommandLogger] });\nCoreContainer.provideFactory(DomainEventLogger, { create: eventLoggerFactory, deps: [EVENT_LOGGER_ENABLED, ConsoleEventLogger, NoopEventLogger] });\nCoreContainer.provide(AggregateFactoryArchive, AggregateFactoryArchive);\nCoreContainer.provide(DomainEventPublisher);\nCoreContainer.provide(AggregateRepositoryArchive);\nCoreContainer.provide(DomainEventStream, DomainEventStream);\nCoreContainer.provide(DomainEventStore, DomainEventStore);\nCoreContainer.provide(CommandBus, CommandBus);\nCoreContainer.provide(CommandStream);\nCoreContainer.provide(CommandDispatcher);\nCoreContainer.provide(AggregateDefinitionInitializer, AggregateDefinitionInitializer);\nCoreContainer.provide(CommandHandlerInitializer, CommandHandlerInitializer);\nCoreContainer.provide(DomainEventHandlerInitializer, DomainEventHandlerInitializer);\nCoreContainer.provide(HermesRunner);\nconst resetCoreContainer = () => {\n CoreContainer.clearOnlyRecords();\n};\n\nclass Command extends Message {\n}\n\nconst MessageType = Function;\n\nconst CommandType = MessageType;\n\nclass AggregateFactory {\n}\n\nclass AggregateEvent {\n aggregateId;\n type;\n constructor(aggregateId, type) {\n this.aggregateId = aggregateId;\n this.type = type;\n }\n getAggregateId() {\n return this.aggregateId;\n }\n getType() {\n return this.type;\n }\n equals(event) {\n return this.equalsByType(event) &&\n this.getAggregateId().equals(event.getAggregateId());\n }\n equalsByType(event) {\n return this.getType() === event.getType();\n }\n}\n\nconst AggregateEventType = MessageType;\n\nclass AggregateRepository {\n}\n\nclass AggregateStore {\n}\n\nclass AggregateRoot {\n type;\n aggregateId;\n events;\n constructor(aggregateId, type) {\n this.type = type;\n this.aggregateId = aggregateId;\n this.events = [];\n }\n getId() {\n return this.aggregateId;\n }\n getType() {\n return this.type;\n }\n getEvents() {\n return this.events;\n }\n addEvent(args) {\n if (Array.isArray(args)) {\n for (const event of args) {\n this.events.push(event);\n }\n }\n else {\n this.events.push(args);\n }\n }\n clearEvents() {\n this.events.length = 0;\n }\n equals(aggregate) {\n return aggregate.getId().toString() === this.getId().toString();\n }\n}\n\nclass HermesId {\n uid;\n constructor(uid) {\n this.uid = uid;\n }\n getId() {\n return this.uid;\n }\n equals(hermesId) {\n return this.uid === hermesId.getId();\n }\n}\n\nclass AggregateId extends HermesId {\n constructor(uid) {\n super(uid);\n }\n toString() {\n return super.getId();\n }\n}\n\nconst DomainEventType = MessageType;\n\nclass ReactiveService extends Reactive {\n constructor() {\n super();\n }\n onDestroy() {\n this.hermesUnsubscribe();\n }\n}\n\nclass KeyMap {\n keys = new Map();\n values = new WeakMap();\n find(key) {\n const internalKey = this.getInternalKey(key);\n if (internalKey !== undefined) {\n return Optional.of(this.values.get(internalKey));\n }\n else {\n return Optional.empty();\n }\n }\n has(key) {\n const internalKey = this.getInternalKey(key);\n return this.values.has(internalKey);\n }\n set(key, value) {\n this.keys.set(key.toString(), key);\n this.values.set(key, value);\n }\n size() {\n return this.keys.size;\n }\n remove(key) {\n if (this.hasInternalKey(key)) {\n this.keys.delete(key.toString());\n this.values.delete(key);\n }\n }\n removeAll() {\n this.keys.forEach((value) => {\n this.values.delete(value);\n });\n this.keys.clear();\n }\n getInternalKey(key) {\n return this.keys.get(key.toString());\n }\n hasInternalKey(key) {\n return this.keys.has(key.toString());\n }\n}\n\nfunction hermesMap(convert) {\n return (source) => {\n return new HermesObservable((observer) => {\n let index = 0;\n const subscriber = subscriberForOperator(observer, (value) => {\n observer.next(convert(value, index++));\n });\n return source.subscribe(subscriber).getFinalize();\n });\n };\n}\n\nfunction hermesDistinctUntilChanged(compareFn) {\n const compare = compareFn ? compareFn : defaultCompareFn;\n return (source) => {\n return new HermesObservable((observer) => {\n let previousValue = null;\n const subscriber = subscriberForOperator(observer, (value) => {\n if (previousValue === null || !compare(previousValue, value)) {\n previousValue = value;\n observer.next(value);\n }\n });\n return source.subscribe(subscriber).getFinalize();\n });\n };\n}\nfunction defaultCompareFn(a, b) {\n return a === b;\n}\n\nclass HermesBehaviorSubject extends HermesSubject {\n lastValue;\n constructor(defaultValue) {\n super();\n this.lastValue = defaultValue;\n }\n next(value) {\n this.lastValue = value;\n super.next(value);\n }\n subscribe() {\n const subscription = super.subscribe(arguments[0], arguments[1], arguments[2]);\n super.next(this.lastValue);\n return subscription;\n }\n}\n\nclass HermesReplaySubject extends HermesSubject {\n bufferSize;\n values = [];\n constructor(bufferSize = 1) {\n super();\n this.bufferSize = bufferSize;\n }\n pipe(...operations) {\n return super.pipe(...operations);\n }\n next(value) {\n this.values.push(value);\n if (this.bufferSize < this.values.length) {\n this.values.shift();\n }\n super.next(value);\n }\n subscribe() {\n let subscriber;\n if (arguments[0] instanceof HermesSubscriber) {\n subscriber = arguments[0];\n }\n else {\n subscriber = this.createSubscriber(arguments[0], arguments[1], arguments[2]);\n }\n const subscription = super.subscribe(subscriber);\n for (const value of this.values) {\n subscriber.next(value);\n }\n return subscription;\n }\n}\n\nclass HermesArchiveSubject extends HermesSubject {\n constructor() {\n super();\n }\n static of(value) {\n if (value !== undefined) {\n return new HermesBehaviorSubject(value);\n }\n else {\n return new HermesReplaySubject(1);\n }\n }\n}\n\nclass HermesSingleSubscriber extends HermesSubscriber {\n next(value) {\n if (this.isCompleted()) {\n return;\n }\n const observer = this.getObserver();\n if (observer && observer.next) {\n observer.next(value);\n this.complete();\n }\n }\n}\n\nclass HermesSingle extends HermesObservable {\n createSubscriber(next, error, complete) {\n return new HermesSingleSubscriber({\n next,\n error,\n complete\n });\n }\n}\n\nfunction singleFromObservable(source) {\n return new HermesSingle((observer) => {\n const subscriber = new HermesSubscriber({\n next: (value) => observer.next(value),\n error: (error) => observer.error(error),\n complete: () => {\n }\n });\n const subscription = source.subscribe(subscriber);\n return subscription.getFinalize();\n });\n}\n\nclass KeyArchive extends ReactiveService {\n archive = new KeyMap();\n archive$;\n defaultValue = Optional.empty();\n constructor(defaultValue) {\n super();\n this.archive$ = HermesArchiveSubject.of();\n if (defaultValue !== undefined && defaultValue !== null) {\n this.defaultValue = Optional.of(defaultValue);\n }\n }\n on(key) {\n this.tryToInitDefault(key);\n return this.archive$\n .toObservable()\n .pipe(hermesFilter(() => this.isNotStopped()), hermesMap((map) => {\n return map.find(key);\n }), hermesFilter((value) => value.isPresent()), hermesMap((value) => value.getValueOrNullOrThrowError()), hermesDistinctUntilChanged(this.equals), this.hermesTakeUntil());\n }\n once(key) {\n return singleFromObservable(this.on(key));\n }\n find(key) {\n this.tryToInitDefault(key);\n return this.archive.find(key);\n }\n next(key, value) {\n this.archive.set(key, value);\n this.archive$.next(this.archive);\n }\n equals(a, b) {\n return a === b;\n }\n createDefaultValue(defaultValue) {\n return defaultValue;\n }\n tryToInitDefault(key) {\n this.defaultValue\n .ifPresent((value) => {\n if (!this.archive.has(key)) {\n this.next(key, value);\n }\n });\n }\n}\n\nclass AggregateArchive extends KeyArchive {\n constructor(defaultValue) {\n super(defaultValue);\n }\n}\n\nclass EventDrivenRepository extends AggregateArchive {\n constructor(defaultValues) {\n super(defaultValues);\n }\n handle(event) {\n this.next(event.getAggregateId(), event.getPayload());\n }\n}\n\n/**\n * @deprecated\n */\nclass ReadModelEntity {\n entityId;\n constructor(gui) {\n this.entityId = gui;\n }\n getId() {\n return this.entityId;\n }\n}\n\n/**\n * @deprecated\n */\nclass ReadModelEntityId {\n uid;\n constructor(uid) {\n this.uid = uid;\n }\n toString() {\n return this.uid;\n }\n getId() {\n return this.uid;\n }\n equals(entityId) {\n return this.uid === entityId.getId();\n }\n}\n\n/**\n * @deprecated\n */\nclass ReadModelRoot {\n rootId;\n constructor(gui) {\n this.rootId = gui;\n }\n getId() {\n return this.rootId;\n }\n}\n\n/**\n * @deprecated\n */\nclass ReadModelRootId {\n uid;\n constructor(uid) {\n this.uid = uid;\n }\n toString() {\n return this.uid;\n }\n getId() {\n return this.uid;\n }\n equals(entityId) {\n return this.uid === entityId.getId();\n }\n}\n\n/**\n * @deprecated\n */\nclass ReadModelRootRepository extends Reactive {\n domainEventBus = CoreContainer.resolve(DomainEventBus);\n constructor() {\n super();\n this.domainEventBus\n .ofEvents(this.forEvents())\n .pipe(this.hermesTakeUntil())\n .subscribe((event) => {\n try {\n this.subscribe(event);\n }\n catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n }\n });\n }\n}\n\n/**\n * @deprecated\n */\nclass ReadModelStore {\n}\n\nclass EventRepository extends ReactiveService {\n domainEventBus = CoreContainer.resolve(DomainEventBus);\n constructor() {\n super();\n }\n onEvent(aggregateId, eventType) {\n return this.domainEventBus\n .ofEvents([\n eventType\n ])\n .pipe(hermesFilter((event) => event.getAggregateId().toString() === aggregateId.toString()));\n }\n}\n\nclass Entity {\n entityId;\n constructor(id) {\n this.entityId = id;\n }\n getId() {\n return this.entityId;\n }\n equals(entity) {\n return this.entityId.equals(entity.getId());\n }\n}\n\nclass EntityId extends HermesId {\n}\n\nfunction ValueObject(_target) {\n}\nfunction DomainObject(_target) {\n}\nfunction ReadModelObject(_target) {\n}\n\nclass FeatureModule {\n}\n\nfunction hermesNever() {\n return new HermesObservable(() => {\n });\n}\n\nfunction hermesInterval(interval) {\n let counter = 0;\n return new HermesObservable((observer) => {\n const id = setInterval(() => {\n observer.next(counter++);\n }, interval);\n return () => {\n clearInterval(id);\n observer.complete();\n };\n });\n}\n\nfunction hermesTimer(time) {\n return new HermesObservable((observer) => {\n const id = setTimeout(() => {\n observer.next(0);\n }, time);\n return () => {\n clearTimeout(id);\n observer.complete();\n };\n });\n}\n\nfunction hermesFromEvent(element, type) {\n return new HermesObservable((observer) => {\n const listener = (event) => {\n observer.next(event);\n };\n element.addEventListener(type, listener);\n return () => {\n element.removeEventListener(type, listener);\n };\n });\n}\n\nfunction hermesThrowError(error) {\n return new HermesObservable(observer => {\n observer.error(error);\n });\n}\n\nfunction hermesSkip(valuesNumber) {\n return (source) => {\n return new HermesObservable(observer => {\n let index = 0;\n const subscriber = subscriberForOperator(observer, (value) => {\n if (index >= valuesNumber) {\n observer.next(value);\n }\n index++;\n });\n return source.subscribe(subscriber).getFinalize();\n });\n };\n}\n\nfunction hermesSwitchMap(operation) {\n return (source) => {\n return new HermesObservable((observer) => {\n let isOuterCompleted = false;\n let innerSubscriber = null;\n const tryToComplete = function () {\n if (isOuterCompleted && !innerSubscriber) {\n observer.complete();\n }\n };\n const outerSubscriber = subscriberForOperator(observer, (v) => {\n if (innerSubscriber) {\n innerSubscriber.unsubscribe();\n }\n const subscriber = new HermesSubscriber({\n next: (v2) => observer.next(v2),\n error: (e) => observer.error(e),\n complete: () => {\n innerSubscriber = null;\n tryToComplete();\n }\n });\n innerSubscriber = subscriber;\n const innerSubscription = operation(v).subscribe(subscriber);\n return innerSubscription.getFinalize();\n }, () => {\n isOuterCompleted = true;\n tryToComplete();\n });\n return source.subscribe(outerSubscriber).getFinalize();\n });\n };\n}\n\nfunction hermesTap(operation) {\n return (source) => {\n return new HermesObservable(observer => {\n const subscriber = subscriberForOperator(observer, (value) => {\n operation(value);\n observer.next(value);\n });\n return source.subscribe(subscriber).getFinalize();\n });\n };\n}\n\nfunction hermesToArray() {\n return (source) => {\n return new HermesObservable((observer) => {\n const values = [];\n const subscriber = subscriberForOperator(observer, (value) => {\n values.push(value);\n }, () => {\n if (values.length > 0) {\n observer.next(values);\n }\n observer.complete();\n });\n return source.subscribe(subscriber).getFinalize();\n });\n };\n}\n\nfunction fromRxJsObservable(source$) {\n return new HermesObservable((observer) => {\n const subscription = source$.subscribe((value) => observer.next(value), (error) => observer.error(error), () => observer.complete());\n return () => subscription.unsubscribe();\n });\n}\n\nclass Archive {\n archive$;\n constructor(value) {\n this.archive$ = HermesArchiveSubject.of(value);\n }\n on() {\n return this.archive$\n .toObservable()\n .pipe(hermesDistinctUntilChanged(this.compare));\n }\n next(value) {\n this.archive$.next(value);\n }\n compare(one, two) {\n return one === two;\n }\n}\n\nclass RandomIdGenerator {\n static index = 0;\n static generate() {\n RandomIdGenerator.index++;\n return RandomIdGenerator.index;\n }\n}\n\nclass PersistAnemia {\n readModelRootId;\n constructor(uid) {\n this.readModelRootId = uid;\n }\n getReadModelRootId() {\n return this.readModelRootId;\n }\n getId() {\n return this.getReadModelRootId().toString();\n }\n}\n\nclass PersistStateStore {\n state = new Map();\n set(anemia) {\n this.state.set(anemia.getId(), anemia);\n }\n setMany(anemias) {\n anemias.forEach((anemia) => {\n this.set(anemia);\n });\n }\n get(aggregateId) {\n return Optional.of(this.state.get(aggregateId.toString()));\n }\n getAll() {\n return Array.from(this.state.values());\n }\n clear() {\n this.state.clear();\n }\n}\n\nclass PersistReadModelStore extends ReadModelStore {\n stateStore;\n constructor(stateStore) {\n super();\n this.stateStore = stateStore;\n }\n getById(aggregateId) {\n return this.getValue(aggregateId);\n }\n getAll() {\n return this.getAllValues();\n }\n getAllValues() {\n return this.stateStore\n .getAll()\n .map((anemia) => this.toReadModel(anemia));\n }\n getValue(aggregateId) {\n const optAnemia = this.stateStore.get(aggregateId);\n return optAnemia.map(this.toReadModel);\n }\n}\n\nclass PersistAggregateStore extends AggregateStore {\n stateStore;\n aggregateStoreRegister = CoreContainer.resolve(AggregateStoreRegister);\n constructor(stateStore) {\n super();\n this.stateStore = stateStore;\n this.aggregateStoreRegister.register(this);\n }\n save(aggregate) {\n this.saveValue(aggregate);\n }\n findById(aggregateId) {\n return this.getValue(aggregateId);\n }\n saveValue(aggregate) {\n const anemia = this.toAnemia(aggregate);\n this.stateStore.set(anemia);\n }\n getValue(aggregateId) {\n const optAnemia = this.stateStore.get(aggregateId);\n return optAnemia.map(this.fromAnemia);\n }\n}\n\nclass InMemoryAggregateStore extends AggregateStore {\n inMemoryStore;\n aggregateStoreRegister = CoreContainer.resolve(AggregateStoreRegister);\n constructor(inMemoryStore) {\n super();\n this.inMemoryStore = inMemoryStore;\n this.aggregateStoreRegister.register(this);\n }\n save(arg) {\n if (Array.isArray(arg)) {\n arg.forEach((aggregate) => {\n this.inMemoryStore.set(aggregate);\n });\n }\n else {\n const aggregate = arg;\n this.inMemoryStore.set(aggregate);\n }\n }\n findById(aggregateId) {\n const optAggregate = this.inMemoryStore.get(aggregateId);\n optAggregate.ifPresent((a) => a.clearEvents());\n return optAggregate;\n }\n remove(aggregateId) {\n this.inMemoryStore.delete(aggregateId);\n }\n}\n\nclass InMemoryReadModelStore extends ReadModelStore {\n inMemoryStore;\n constructor(inMemoryStore) {\n super();\n this.inMemoryStore = inMemoryStore;\n }\n getById(aggregateId) {\n return this.getValue(aggregateId);\n }\n getValue(aggregateId) {\n const optAggregate = this.inMemoryStore.get(aggregateId);\n return optAggregate.map(this.toReadModel.bind(this));\n }\n}\n\nclass InMemoryStore {\n state = new Map();\n set(aggregate) {\n this.state.set(aggregate.getId().toString(), aggregate);\n }\n setMany(aggregates) {\n aggregates.forEach((aggregate) => {\n this.set(aggregate);\n });\n }\n get(aggregateId) {\n return Optional.of(this.state.get(aggregateId.toString()));\n }\n getAll() {\n return Array.from(this.state.values()).map(v => Optional.of(v));\n }\n has(aggregateId) {\n return this.state.has(aggregateId.toString());\n }\n delete(aggregateId) {\n this.state.delete(aggregateId.toString());\n }\n clear() {\n this.state.clear();\n }\n}\n\nfunction assertDomainEvents(actualEvents, expectedEvents) {\n expect(actualEvents.length).toEqual(expectedEvents.length);\n for (const actualEvent of actualEvents) {\n const expectedEvent = expectedEvents.find((event) => {\n return event.equalsByType(actualEvent);\n });\n expect(expectedEvent).toBeDefined();\n expect(actualEvent.equalsByType(expectedEvent)).toBeTruthy();\n // expect(actualEvent.aggregateId).toEqual(expectedEvent.aggregateId, 'Events aggregateId should be the same');\n expect(actualEvent.getPayload()).toEqual(expectedEvent.getPayload(), 'Events payload should be the same');\n }\n}\nfunction assertAggregateEvents(actualEvents, expectedEvents) {\n expect(actualEvents.length).toEqual(expectedEvents.length, 'Aggregate events');\n for (const actualEvent of actualEvents) {\n const expectedEvent = expectedEvents.find((event) => {\n return event.equals(actualEvent);\n });\n expect(expectedEvent).toBeDefined();\n }\n}\nfunction testEventRepositoryIsEmptyOnStart(createStream, desc) {\n it('should be no ' + desc + ' events on start', () => {\n expect.assertions(3);\n // given\n const nextFn = jest.fn(), errorFn = jest.fn(), completeFn = jest.fn();\n // when\n createStream()\n .subscribe(() => nextFn(), (err) => errorFn(err), () => completeFn());\n // then\n expect(nextFn).not.toHaveBeenCalled();\n expect(errorFn).not.toHaveBeenCalled();\n expect(completeFn).not.toHaveBeenCalled();\n });\n}\nfunction onDefaultValuesWarehouseTest(createStream, defaultValue, desc) {\n it('should have default value ' + desc, () => {\n expect.assertions(4);\n // given\n const nextFn = jest.fn(), errorFn = jest.fn(), completeFn = jest.fn();\n // when\n createStream()\n .subscribe((value) => nextFn(value), (err) => errorFn(err), () => completeFn());\n // then\n expect(nextFn).toHaveBeenCalledWith(defaultValue);\n expect(nextFn).toHaveBeenCalledTimes(1);\n expect(errorFn).not.toHaveBeenCalled();\n expect(completeFn).not.toHaveBeenCalled();\n });\n}\nfunction onceDefaultValuesWarehouseTest(createStream, defaultValue, desc) {\n it('should have default value ' + desc, () => {\n expect.assertions(4);\n // given\n const nextFn = jest.fn(), errorFn = jest.fn(), completeFn = jest.fn();\n // when\n createStream()\n .subscribe((value) => nextFn(value), (err) => errorFn(err), () => completeFn());\n // then\n expect(nextFn).toHaveBeenCalledWith(defaultValue);\n expect(nextFn).toHaveBeenCalledTimes(1);\n expect(errorFn).not.toHaveBeenCalled();\n expect(completeFn).toHaveBeenCalledTimes(1);\n });\n}\nfunction onWarehouseEmpty(createStream, desc) {\n it('should be empty ' + desc, () => {\n expect.assertions(3);\n // given\n const nextFn = jest.fn(), errorFn = jest.fn(), completeFn = jest.fn();\n // when\n createStream()\n .subscribe((value) => nextFn(value), (err) => errorFn(err), () => completeFn());\n // then\n expect(nextFn).not.toHaveBeenCalled();\n expect(errorFn).not.toHaveBeenCalled();\n expect(completeFn).not.toHaveBeenCalled();\n });\n}\nfunction findDefaultValuesWarehouseTest(createValue, defaultValue, desc) {\n it('should find default value' + desc, function () {\n expect.assertions(1);\n expect(createValue()).toEqual(Optional.of(defaultValue));\n });\n}\nfunction commandInterceptedByHandlerTest(dispatch, handlerType) {\n it('should trigger command handler', () => {\n expect.assertions(1);\n // given\n const handler = CoreContainer.resolve(handlerType), handlerSpy = jest.spyOn(handler, 'handle');\n // when\n dispatch();\n // then\n expect(handlerSpy).toHaveBeenCalled();\n });\n}\nfunction commandPublishEventTest(dispatch, eventType) {\n it('should dispatch event', () => {\n expect.assertions(1);\n // given\n CoreContainer.resolve(DomainEventBus)\n .subscribe((event) => {\n // then\n if (event instanceof eventType) {\n expect(event instanceof eventType).toEqual(true);\n }\n });\n // when\n dispatch();\n });\n}\nfunction commandTriggersHandlerAndPublishEventTest(dispatch, handlerType, eventType) {\n commandInterceptedByHandlerTest(dispatch, handlerType);\n commandPublishEventTest(dispatch, eventType);\n}\n\nclass CreateAggregateCommand extends Command {\n constructor(aggregateId, type) {\n super(aggregateId, type);\n }\n}\n\nconst hermesApi = 'hermesApi';\nfunction initHermesApi() {\n const cl = CoreContainer.resolve(CommandLogger), del = CoreContainer.resolve(DomainEventLogger);\n const api = () => {\n return {\n set loggers(enabled) {\n if (enabled) {\n // api.commandLogger.start(); TO FIX\n // api.eventLogger.start();\n }\n else {\n // api.commandLogger.stop(); // TO FIX\n // api.eventLogger.stop();\n }\n },\n set domain(domainName) {\n if (domainName) {\n cl.setDomain(domainName);\n del.setDomain(domainName);\n }\n }\n };\n };\n window[hermesApi] = api();\n window[hermesApi].loggers = false;\n}\n\nfunction enableHermesLoggers(domainName, windowObject) {\n const winRef = windowObject ? windowObject : window;\n if (domainName) {\n winRef[hermesApi].domain = domainName;\n }\n winRef[hermesApi].loggers = true;\n}\nfunction disableHermesLoggers(windowObject) {\n const winRef = windowObject ? windowObject : window;\n delete winRef[hermesApi].domain;\n winRef[hermesApi].loggers = false;\n}\n\nfunction createAggregateCommandHandlerFactory(createAggregateCommandHandler, aggregateName) {\n return new CreateAggregateCommandHandlerImpl(createAggregateCommandHandler, aggregateName);\n}\nclass CreateAggregateCommandHandlerImpl {\n createAggregateCommandHandler;\n aggregateType;\n aggregateFactoryArchive = CoreContainer.resolve(AggregateFactoryArchive);\n aggregateRepositoryArchive = CoreContainer.resolve(AggregateRepositoryArchive);\n domainEventPublisher = CoreContainer.resolve(DomainEventPublisher);\n commandType;\n constructor(createAggregateCommandHandler, aggregateType) {\n this.createAggregateCommandHandler = createAggregateCommandHandler;\n this.aggregateType = aggregateType;\n this.commandType = this.createCommandInstance().getMessageType();\n }\n handleCommand(command) {\n const aggregateId = command.getAggregateId();\n const optFactory = this.aggregateFactoryArchive.get(this.aggregateType);\n optFactory.ifPresent((factory) => {\n const aggregate = factory.create(aggregateId);\n const type = aggregate.getType(), createCommandConstructor = aggregate.createEvent();\n const createCommand = new createCommandConstructor(aggregateId, type);\n aggregate.addEvent(createCommand);\n const optRepository = this.aggregateRepositoryArchive.get(this.aggregateType);\n optRepository.ifPresent((repo) => {\n repo.save(aggregate);\n this.domainEventPublisher.publishFromAggregate(aggregate);\n });\n });\n }\n forCommand(command) {\n return this.commandType === command.getMessageType();\n }\n createCommandInstance() {\n const args = [], argumentLength = this.createAggregateCommandHandler.forCommand().constructor.length;\n args.fill(undefined, 0, argumentLength);\n if (args.length === 0) {\n return (new (this.createAggregateCommandHandler.forCommand())());\n }\n else if (args.length === 1) {\n return (new (this.createAggregateCommandHandler.forCommand())(args[0]));\n }\n else if (args.length === 2) {\n return (new (this.createAggregateCommandHandler.forCommand())(args[0], args[1]));\n }\n else if (args.length === 3) {\n return (new (this.createAggregateCommandHandler.forCommand())(args[0], args[1], args[2]));\n }\n else if (args.length === 4) {\n return (new (this.createAggregateCommandHandler.forCommand())(args[0], args[1], args[2], args[3]));\n }\n else if (args.length === 5) {\n return (new (this.createAggregateCommandHandler.forCommand())(args[0], args[1], args[2], args[3], args[4]));\n }\n else {\n throw new Error('CreateAggregateCommandHandlerImpl constructor out of arguments');\n }\n }\n}\n\nfunction commandHandlerFactory(commandHandler, aggregateName) {\n return new CommandHandlerImpl(commandHandler, aggregateName);\n}\nclass CommandHandlerImpl {\n commandHandler;\n aggregateType;\n aggregateRepositoryArchive = CoreContainer.resolve(AggregateRepositoryArchive);\n domainEventPublisher = CoreContainer.resolve(DomainEventPublisher);\n commandType;\n constructor(commandHandler, aggregateType) {\n this.commandHandler = commandHandler;\n this.aggregateType = aggregateType;\n this.commandType = this.createCommandInstance().getMessageType();\n }\n publishDomainEvents(aggregate, command) {\n if (this.commandHandler.publish) {\n this.commandHandler.publish(aggregate, command);\n }\n else {\n this.domainEventPublisher.publishFromAggregate(aggregate);\n }\n }\n handleCommand(command) {\n const aggregateId = command.getAggregateId();\n const optRepository = this.aggregateRepositoryArchive.get(this.aggregateType);\n optRepository.ifPresent((repo) => {\n const optAggregate = repo.findById(aggregateId);\n optAggregate.ifPresent((aggregate) => {\n this.commandHandler.handle(aggregate, command);\n this.publishDomainEvents(aggregate, command);\n });\n });\n }\n forCommand(command) {\n return this.commandType === command.getMessageType();\n }\n createCommandInstance() {\n const args = [], argumentLength = this.commandHandler.forCommand().constructor.length;\n args.fill(undefined, 0, argumentLength);\n if (args.length === 0) {\n return (new (this.commandHandler.forCommand())());\n }\n else if (args.length === 1) {\n return (new (this.commandHandler.forCommand())(args[0]));\n }\n else if (args.length === 2) {\n return (new (this.commandHandler.forCommand())(args[0], args[1]));\n }\n else if (args.length === 3) {\n return (new (this.commandHandler.forCommand())(args[0], args[1], args[2]));\n }\n else if (args.length === 4) {\n return (new (this.commandHandler.forCommand())(args[0], args[1], args[2], args[3]));\n }\n else if (args.length === 5) {\n return (new (this.commandHandler.forCommand())(args[0], args[1], args[2], args[3], args[4]));\n }\n else {\n throw new Error('CommandHandlerImpl constructor out of arguments');\n }\n }\n}\n\nfunction domainEventHandlerFactoryAsFactory(domainEventHandlerType) {\n return CoreContainer.resolve(domainEventHandlerType);\n}\nfunction domainEventHandlerFactory(domainEventHandler) {\n return new DomainEventHandlerImpl(domainEventHandler, [domainEventHandler.forEvent()]);\n}\nfunction multiDomainEventHandlerFactory(domainEventHandler) {\n return new DomainEventHandlerImpl(domainEventHandler, domainEventHandler.forEvents());\n}\nclass DomainEventHandlerImpl {\n domainEventHandler;\n events;\n eventTypes;\n constructor(domainEventHandler, events) {\n this.domainEventHandler = domainEventHandler;\n this.events = events;\n this.eventTypes = this.createDomainEventTypes();\n }\n handleEvent(event) {\n this.domainEventHandler.handle(event);\n }\n forEvents(events) {\n return events.some((event) => {\n return this.eventTypes.some((type) => {\n return type === event.getMessageType();\n });\n });\n }\n createDomainEventTypes() {\n const types = [];\n for (const event of this.events) {\n const instance = this.createDomainEventInstance(event);\n types.push(instance.getMessageType());\n }\n return types;\n }\n createDomainEventInstance(eventType) {\n const args = [], argumentLength = eventType.constructor.length;\n args.fill(undefined, 0, argumentLength);\n if (args.length === 0) {\n return (new eventType());\n }\n else if (args.length === 1) {\n return (new eventType(args[0]));\n }\n else if (args.length === 2) {\n return (new eventType(args[0], args[1]));\n }\n else if (args.length === 3) {\n return (new eventType(args[0], args[1], args[2]));\n }\n else if (args.length === 4) {\n return (new eventType(args[0], args[1], args[2], args[3]));\n }\n else if (args.length === 5) {\n return (new eventType(args[0], args[1], args[2], args[3], args[4]));\n }\n else {\n throw new Error('DomainEventHandler constructor out of arguments');\n }\n }\n}\n\nclass DomainInitializer {\n api;\n domain;\n container = CoreContainer;\n initialized = false;\n constructor(api, domain) {\n this.api = api;\n this.domain = domain;\n }\n init() {\n if (this.initialized) {\n return;\n }\n this.defineAggregate();\n this.registerApiProviders();\n this.registerDomainProviders();\n this.registerCommandHandlers();\n this.registerEventHandlers();\n this.registerMultiEventHandlers();\n this.initialized = true;\n }\n defineAggregate() {\n const definition = this.domain.defineAggregate();\n if (definition) {\n this.container.provide(definition.factory);\n this.container.provide(definition.repository);\n this.container.provideValue(definition.aggregateKey, definition.aggregateKey);\n this.container.provideValueCollection(aggregateDefinitionToken, {\n key: definition.aggregateKey,\n factory: definition.factory,\n repository: definition.repository\n });\n this.container.provide(definition.createCommandHandler);\n this.container.provideFactoryCollection(CREATE_AGGREGATE_COMMAND_HANDLERS, {\n create: createAggregateCommandHandlerFactory,\n deps: [\n definition.createCommandHandler,\n definition.aggregateKey\n ]\n });\n }\n }\n registerApiProviders() {\n this.api.registerProviders(this.container);\n }\n registerDomainProviders() {\n this.domain.registerProviders(this.container);\n }\n registerCommandHandlers() {\n this.domain\n .registerCommandHandlers()\n .forEach((ch) => {\n this.container.provide(ch);\n this.container.provideFactoryCollection(COMMAND_HANDLERS, {\n create: commandHandlerFactory,\n deps: [\n ch,\n this.domain.registerKey(this.container)\n ]\n });\n });\n }\n registerEventHandlers() {\n this.domain\n .registerDomainEventHandler()\n .forEach((eh) => {\n this.container.provide(eh);\n this.container.provideFactoryCollection(DOMAIN_EVENT_HANDLERS, {\n create: domainEventHandlerFactory,\n deps: [\n eh\n ]\n });\n });\n }\n registerMultiEventHandlers() {\n this.domain\n .registerMultiDomainEventHandler()\n .forEach((eh) => {\n this.container.provide(eh);\n this.container.provideFactoryCollection(DOMAIN_EVENT_HANDLERS, {\n create: multiDomainEventHandlerFactory,\n deps: [\n eh\n ]\n });\n });\n }\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AggregateArchive, AggregateEvent, AggregateEventType, AggregateFactory, AggregateId, AggregateRepository, AggregateRoot, AggregateStore, AggregateStoreRegister, Archive, COMMAND_LOGGER_ENABLED, Command, CommandDispatcher, CommandLogger, CommandType, CoreContainer, CreateAggregateCommand, DomainEvent, DomainEventBus, DomainEventPublisher, DomainEventType, DomainInitializer, DomainObject, EVENT_LOGGER_ENABLED, Entity, EntityId, EventDrivenRepository, EventRepository, FeatureModule, HermesArchiveSubject, HermesBehaviorSubject, HermesId, HermesObservable, HermesReplaySubject, HermesRunner, HermesSingle, HermesSubject, HermesSubscription, InMemoryAggregateStore, InMemoryReadModelStore, InMemoryStore, KeyMap, Optional, PersistAggregateStore, PersistAnemia, PersistReadModelStore, PersistStateStore, RandomIdGenerator, RandomStringGenerator, Reactive, ReactiveService, ReadModelEntity, ReadModelEntityId, ReadModelObject, ReadModelRoot, ReadModelRootId, ReadModelRootRepository, ReadModelStore, ValueObject, assertAggregateEvents, assertDomainEvents, commandInterceptedByHandlerTest, commandPublishEventTest, commandTriggersHandlerAndPublishEventTest, createContainer, disableHermesLoggers, enableHermesLoggers, findDefaultValuesWarehouseTest, fromRxJsObservable, hermesDistinctUntilChanged, hermesEmpty, hermesFilter, hermesFromEvent, hermesInterval, hermesMap, hermesNever, hermesOf, hermesSkip, hermesSwitchMap, hermesTake, hermesTakeUntil, hermesTap, hermesThrowError, hermesTimer, hermesToArray, initHermesApi, onDefaultValuesWarehouseTest, onWarehouseEmpty, onceDefaultValuesWarehouseTest, resetCoreContainer, runHermes, singleFromObservable, testEventRepositoryIsEmptyOnStart, toRxJsObservable };\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}