nope/modules/mod-Publish-And-Subscribe-System/assembly/manual-assembly.ts
2020-09-01 17:05:06 +02:00

121 lines
3.6 KiB
TypeScript

/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2018-05-22 01:14:10
* @modify date 2020-09-01 16:57:07
* @desc [description]
*/
/** PUB SUB SYSTEM */
/** Export for Inversify */
import { nopeObserver } from '../../../lib/observables/nopeObservable';
import { IDescriptor } from '../../mod-Assembly-Builder/type/interfaces';
import { DefaultMatcher } from '../src/Pub-Sub-Matcher';
import { addObservables, autoLinkobservables, GenericObservable } from '../src/Pub-Sub-Observable';
import { BasePublisherAlternative } from '../src/Pub-Sub-Publisher';
import { BaseRegistery } from '../src/Pub-Sub-Registery';
import { AsyncWildcardSubscription, SyncWildcardSubscription } from '../src/Pub-Sub-Subscriptions';
import { BasePubSubSystem } from '../src/Pub-Sub-System';
import { BaseTopic } from '../src/Pub-Sub-Topic';
import { TopicContainer } from '../src/Pub-Sub-Topic-Container';
import { IContainsObservables, IObservable, IPublisher, IPubSubSystem, IRegistery, IShareConfig, ISharedObservables, ITopic, ITopicMatcher, IWildcardSubscription } from '../type/interfaces';
import * as T from '../type/types';
export const TYPES = T.TYPES;
export const EXPORT: Array<IDescriptor> = [
{
selector: TYPES.WildcardSubscription,
factorySelector: TYPES.WildcardSubscriptionFactory,
type: AsyncWildcardSubscription,
options: {
addition: {
name: 'whenTargetTagged',
args: ['mode', 'immediate']
}
}
},
{
selector: TYPES.WildcardSubscription,
factorySelector: TYPES.WildcardSubscriptionFactory,
type: SyncWildcardSubscription,
options: {
addition: {
name: 'whenTargetTagged',
args: ['mode', 'sync']
}
}
},
{
selector: TYPES.Publisher,
factorySelector: TYPES.PublisherFactory,
type: BasePublisherAlternative
},
{
selector: TYPES.PubSubSystem,
factorySelector: TYPES.PubSubSystemFactory,
type: BasePubSubSystem,
options: {
scope: 'inSingletonScope'
}
},
{
selector: TYPES.Registery,
factorySelector: TYPES.RegisteryFactory,
type: BaseRegistery
},
{
selector: TYPES.TopicContainer,
factorySelector: TYPES.TopicContainerFactory,
type: TopicContainer,
options: {
scope: 'inSingletonScope'
}
},
{
selector: TYPES.TopicMatcher,
factorySelector: TYPES.TopicMatcherFactory,
type: DefaultMatcher
},
{
selector: TYPES.DefaultMatcher,
factorySelector: TYPES.DefaultMatcherFactory,
type: DefaultMatcher
},
{
selector: TYPES.Topic,
factorySelector: TYPES.TopicFactory,
type: BaseTopic
},
{
selector: TYPES.Observable,
factorySelector: TYPES.ObservableFactory,
type: GenericObservable
},
];
export const REQUIREDACTIVATIONHANDLERS = [addObservables, autoLinkobservables];
export const REQUIRE = ['IDGENERATOR']
export const NAME = 'PUBSUB';
/** Export the Type */
export type PubSubSystem = IPubSubSystem;
export type Observable<T> = IObservable<T>;
export type ContainsObservables = IContainsObservables;
export type ContainsSharedObservables = ISharedObservables;
export type WildcardSubscription<T> = IWildcardSubscription<T>;
export type Subscription<T> = nopeObserver<T>;
export type Publisher<T> = IPublisher<T>;
export type Registery = IRegistery;
export type Topic<T> = ITopic<T>;
export type Matcher = ITopicMatcher;
export type ShareConfig = IShareConfig;