@actdim/msgmesh 0.9.7 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/msgBusCore.d.ts +3 -1
- package/dist/msgBusCore.d.ts.map +1 -1
- package/dist/msgBusCore.es.js.map +1 -1
- package/dist/msgBusFactory.d.ts.map +1 -1
- package/dist/msgBusFactory.es.js +110 -102
- package/dist/msgBusFactory.es.js.map +1 -1
- package/package.json +29 -25
package/dist/msgBusCore.d.ts
CHANGED
|
@@ -45,6 +45,8 @@ export type MsgChannelConfig<TChannel> = {
|
|
|
45
45
|
autoDeleteTimeout?: number;
|
|
46
46
|
noAck?: boolean;
|
|
47
47
|
maxConcurrentConsumers?: number;
|
|
48
|
+
replayBufferSize?: number;
|
|
49
|
+
replayWindowTime?: number;
|
|
48
50
|
};
|
|
49
51
|
export type MsgDispatchConfig = {
|
|
50
52
|
priority?: number;
|
|
@@ -64,7 +66,7 @@ export type Msg<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends ke
|
|
|
64
66
|
payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];
|
|
65
67
|
requestId?: string;
|
|
66
68
|
traceId?: string;
|
|
67
|
-
id
|
|
69
|
+
id?: string;
|
|
68
70
|
timestamp: number;
|
|
69
71
|
priority?: number;
|
|
70
72
|
persistent?: boolean;
|
package/dist/msgBusCore.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"msgBusCore.d.ts","sourceRoot":"","sources":["../src/msgBusCore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEhF,eAAO,MAAM,MAAM,OAAO,CAAC;AAE3B,eAAO,MAAM,OAAO,QAAQ,CAAC;AAE7B,eAAO,MAAM,SAAS,UAAU,CAAC;AAEjC,eAAO,MAAM,QAAQ,UAAU,CAAC;AAEhC,MAAM,MAAM,OAAO,GAAG;IAElB,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IAEnB,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI;IAE5D,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;CAClB,CAAC;AAGF,MAAM,MAAM,kBAAkB,GAAG,GAAG,MAAM,OAAO,GAAG,MAAM,QAAQ,GAAG,MAAM,QAAQ,EAAE,CAAC;AAetF,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC;AAQnG,MAAM,MAAM,YAAY,GAAG;IACvB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACvC,CAAC;AAGF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,CAAC,QAAQ,CAAC,EAAE;QACR,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;KAC1B,CAAC;CAIL,CAAC;AAGF,MAAM,MAAM,mBAAmB,CAC3B,OAAO,SAAS,WAAW,EAC3B,WAAW,SAAS,YAAY,GAAG,YAAY,IAC/C;KACC,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU;CAChD,CAAC;AAIF,MAAM,MAAM,QAAQ,CAAC,OAAO,SAAS,YAAY,EAAE,QAAQ,SAAS,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,OAAO,GAChH,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GACvB,SAAS,CAAC;AAOhB,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,YAAY,EAAE,QAAQ,SAAS,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,QAAQ,GAClH,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,QAAQ,CAAC,GACjC,SAAS,CAAC;AAQhB,MAAM,MAAM,gBAAgB,CAAC,QAAQ,IAAI;IAErC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE;SAAG,MAAM,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;KAAE,CAAC;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAIhB,sBAAsB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"msgBusCore.d.ts","sourceRoot":"","sources":["../src/msgBusCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"msgBusCore.es.js","sources":["../src/msgBusCore.ts"],"sourcesContent":["//##############################################################################\r\n//# Copyright (c) Pavel Borodaev 2022 #\r\n//##############################################################################\r\n// SafeBus\r\nimport { IsTuple, MaybePromise, Overwrite, Skip } from \"@actdim/utico/typeCore\";\r\n\r\nexport const $CG_IN = \"in\";\r\n\r\nexport const $CG_OUT = \"out\";\r\n\r\nexport const $CG_ERROR = \"error\";\r\n\r\nexport const $C_ERROR = \"error\";\r\n\r\nexport type InParam = {\r\n // [key in typeof $CG_IN]: any;\r\n [$CG_IN]: any;\r\n};\r\n\r\nexport type OutParam = {\r\n // [key in typeof $CG_OUT]: any;\r\n [$CG_OUT]: any;\r\n};\r\n\r\nexport type ErrorPayload = {\r\n error: any; // reason\r\n source?: any;\r\n handled?: boolean;\r\n};\r\n\r\nexport type ErrorParam<T extends ErrorPayload = ErrorPayload> = {\r\n // [key in typeof $CG_ERROR]: any;\r\n [$CG_ERROR]: T;\r\n};\r\n\r\n// ReservedChannelGroup\r\nexport type SystemChannelGroup = `${keyof InParam | keyof OutParam | keyof OutParam}`;\r\n\r\n// TODO:\r\n// Point-to-Point (P2P): direct messaging with targeted, address delivery (exactly one recipient)\r\n// Broadcast\r\n// Queue group: Load Balancing, Round-Robin, Fan-out, Fan-in\r\n// QoS\r\n// Message Filtering\r\n// Cross-tab message delivery:\r\n// https://www.sitepen.com/blog/cross-tab-synchronization-with-the-web-locks-api\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API\r\n// LocalStorage\r\n// https://github.com/GoogleChromeLabs/comlink\r\n\r\n// MsgBusChannelStruct\r\nexport type MsgChannelStruct = Partial<{ [group: string]: any } & InParam & OutParam & ErrorParam>;\r\n\r\n// type MsgChannelStruct = { [group: string]: any } & (\r\n// | InParam\r\n// | OutParam\r\n// | (InParam & OutParam)\r\n// );\r\n\r\nexport type MsgBusStruct = {\r\n [channel: string]: MsgChannelStruct;\r\n};\r\n\r\n// SystemMsgBusStruct\r\nexport type MsgBusStructBase = {\r\n [$C_ERROR]: {\r\n [$CG_IN]: ErrorPayload;\r\n };\r\n // \"*\": {\r\n // [$CG_IN]: any;\r\n // };\r\n};\r\n\r\n// MsgBusStructBuilder\r\nexport type MsgBusStructFactory<\r\n TStruct extends TStructBase,\r\n TStructBase extends MsgBusStruct = MsgBusStruct // & MsgBusStructBase\r\n> = {\r\n [C in keyof TStruct]: TStruct[C] & ErrorParam;\r\n};\r\n\r\n// export type MsgBusStruct = Record<string, MsgChannelStruct>;\r\n\r\nexport type InStruct<TStruct extends MsgBusStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends InParam\r\n ? TStruct[TChannel][\"in\"] // keyof InParam or typeof $CG_IN\r\n : undefined; // never\r\n\r\n// export type InStruct<\r\n// TStruct extends MsgBusStruct,\r\n// TChannel extends keyof TStruct\r\n// > = TStruct[TChannel] extends InParam ? TStruct[TChannel][\"in\"] : never;\r\n\r\nexport type OutStruct<TStruct extends MsgBusStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends OutParam\r\n ? TStruct[TChannel][keyof OutParam]\r\n : undefined;\r\n\r\n// export type OutStruct<\r\n// TStruct extends MsgBusStruct,\r\n// TChannel extends keyof TStruct\r\n// > = TStruct[TChannel] extends OutParam ? TStruct[TChannel][\"out\"] : never;\r\n\r\n// Options/Settings\r\nexport type MsgChannelConfig<TChannel> = {\r\n // (channel) message queue distribution and processing strategy\r\n replayCount?: number;\r\n initialValues?: { [TGroup in keyof TChannel]: TChannel[TGroup] };\r\n persistent?: boolean; // durable? (for durable queue)\r\n secure?: boolean; // encrypted\r\n federated?: boolean; // broadcasting\r\n autoDeleteTimeout?: number;\r\n noAck?: boolean; // noAutoAck\r\n // manualAck?: boolean;\r\n // prefetchCount?: number; // for manual acknowledgment\r\n // this can be used for some consumer or for all consumers of the channel\r\n maxConcurrentConsumers?: number; // Parallel? Processes? Handlers?\r\n};\r\n\r\nexport type MsgDispatchConfig = {\r\n // MsgConfig\r\n priority?: number;\r\n fetchCount?: number;\r\n};\r\n\r\nexport type MsgBusConfig<TStruct extends MsgBusStruct> = {\r\n [TChannel in keyof TStruct]?: MsgChannelConfig<TStruct[TChannel]>;\r\n}; // Record<string, MsgChannelConfig>\r\n\r\nexport type MsgAddress<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = {\r\n channel: TChannel;\r\n group?: TGroup; // typeGroup\r\n // supports wildcard matching (https://docs.nats.io/nats-concepts/subjects#wildcards)\r\n topic?: string; \r\n version?: string;\r\n};\r\n\r\n// MsgEnvelope\r\nexport type Msg<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel]\r\n> = {\r\n address: MsgAddress<TStruct, TChannel, TGroup>;\r\n payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];\r\n // status: MsgStatus;\r\n // inResponseToId\r\n requestId?: string;\r\n // correlationId\r\n traceId?: string;\r\n id: string;\r\n timestamp: number; // Date\r\n priority?: number;\r\n persistent?: boolean; // durable? (for durable queue)\r\n};\r\n\r\n// TODO: support un(subscribing) via Deferred<bool>\r\n\r\nexport type MsgBusSubscriberParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = MsgAddress<TStruct, TChannel, TGroup> & {\r\n channelSelector?: string | ((channel: string) => boolean);\r\n // topicSelector?: string | ((channel: string) => boolean);\r\n callback?: (msg: Msg<TStruct, TChannel, TGroup>) => void;\r\n config?: MsgDispatchConfig;\r\n filter?: (msg: Msg<TStruct, TChannel, TGroup>) => boolean;\r\n signal?: AbortSignal;\r\n};\r\n\r\n// MsgBusSubscriberFn\r\nexport type MsgBusSubscriber<TStruct extends MsgBusStruct> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusSubscriberParams<TStruct, TChannel, TGroup>\r\n) => void;\r\n\r\n// MsgBusAsyncSubIterator(Fn)\r\nexport type MsgBusStreamer<TStruct extends MsgBusStruct> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusSubscriberParams<TStruct, TChannel, TGroup>\r\n) => AsyncIterableIterator<Msg<TStruct, TChannel, TGroup>>; // TGroup extends undefined ? typeof $CG_IN : TGroup\r\n\r\nexport type MsgBusAsyncSubscriberParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = Skip<MsgBusSubscriberParams<TStruct, TChannel, TGroup>, \"callback\" | \"filter\">;\r\n\r\n// MsgBusAsyncSubscriberFn\r\nexport type MsgBusAsyncSubscriber<TStruct extends MsgBusStruct> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusAsyncSubscriberParams<TStruct, TChannel, TGroup>\r\n) => Promise<Msg<TStruct, TChannel, TGroup>>; // TGroup extends undefined ? typeof $CG_IN : TGroup\r\n\r\nexport type MsgBusProviderParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = Overwrite<\r\n MsgBusSubscriberParams<TStruct, TChannel, TGroup>,\r\n {\r\n // resolve\r\n callback?: (msg: Msg<TStruct, TChannel, TGroup>) => MaybePromise<OutStruct<TStruct, TChannel>>;\r\n }\r\n>;\r\n\r\n// MsgBusProviderFn\r\nexport type MsgBusProvider<TStruct extends MsgBusStruct> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusProviderParams<TStruct, TChannel, TGroup>\r\n) => void;\r\n\r\n// MsgBusBinderFn\r\nexport type MsgBusBinder<TStruct extends MsgBusStruct> = <\r\n TSourceChannel extends keyof TStruct,\r\n TTargetChannel extends keyof TStruct,\r\n TSourceGroup extends keyof TStruct[TSourceChannel] = typeof $CG_IN,\r\n TTargetGroup extends keyof TStruct[TTargetChannel] = typeof $CG_IN\r\n>(\r\n source: MsgBusSubscriberParams<TStruct, TSourceChannel, TSourceGroup>,\r\n target: MsgAddress<TStruct, TTargetChannel, TTargetGroup>\r\n) => void;\r\n\r\nexport type MsgBusDispatcherParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = Overwrite<\r\n MsgBusSubscriberParams<TStruct, TChannel, TGroup>,\r\n {\r\n payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];\r\n payloadFn?: IsTuple<TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup]> extends true\r\n ? (fn: (...args: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup]) => void) => void\r\n : never;\r\n traceId?: string;\r\n priority?: number;\r\n persistent?: boolean;\r\n callback?: (msg: Msg<TStruct, TChannel, typeof $CG_OUT>) => void;\r\n }\r\n>;\r\n\r\nexport type MsgBusAsyncDispatcherParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = Skip<MsgBusDispatcherParams<TStruct, TChannel, TGroup>, \"callback\">;\r\n\r\n// MsgBusDispatcherFn\r\nexport type MsgBusDispatcher<TStruct extends MsgBusStruct> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusDispatcherParams<TStruct, TChannel, TGroup>\r\n) => void;\r\n\r\n// MsgBusAsyncDispatcherFn\r\nexport type MsgBusAsyncDispatcher<TStruct extends MsgBusStruct> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusAsyncDispatcherParams<TStruct, TChannel, TGroup>\r\n) => Promise<Msg<TStruct, TChannel, typeof $CG_OUT>>;\r\n\r\nexport type MsgChannelStructNormalized<TStruct extends MsgChannelStruct> = {\r\n [G in keyof TStruct]: Awaited<TStruct[G]>;\r\n};\r\n\r\nexport type MsgBusStructNormalized<TStruct extends MsgBusStruct> = {\r\n [C in keyof TStruct]: MsgChannelStructNormalized<TStruct[C]>;\r\n};\r\n\r\n// export interface\r\nexport type MsgBus<TStruct extends MsgBusStruct> = {\r\n readonly config: MsgBusConfig<MsgBusStructNormalized<TStruct>>;\r\n // subscribe, listen\r\n readonly on: MsgBusSubscriber<MsgBusStructNormalized<TStruct>>;\r\n readonly onceAsync: MsgBusAsyncSubscriber<MsgBusStructNormalized<TStruct>>;\r\n // listenStream, consume, receive\r\n readonly stream: MsgBusStreamer<MsgBusStructNormalized<TStruct>>;\r\n // handle, resolve\r\n readonly provide: MsgBusProvider<MsgBusStructNormalized<TStruct>>;\r\n // link, connect\r\n // dispatch (emit/publish + subscribe)\r\n readonly dispatch: MsgBusDispatcher<MsgBusStructNormalized<TStruct>>;\r\n readonly dispatchAsync: MsgBusAsyncDispatcher<MsgBusStructNormalized<TStruct>>;\r\n};\r\n"],"names":["$CG_IN","$CG_OUT","$CG_ERROR","$C_ERROR"],"mappings":"AAMO,MAAMA,IAAS,MAETC,IAAU,OAEVC,IAAY,SAEZC,IAAW;"}
|
|
1
|
+
{"version":3,"file":"msgBusCore.es.js","sources":["D:/Src/my/actdim/public/msgmesh/src/msgBusCore.ts"],"sourcesContent":["//##############################################################################\r\n//# Copyright (c) Pavel Borodaev 2022 #\r\n//##############################################################################\r\n// SafeBus\r\nimport { IsTuple, MaybePromise, Overwrite, Skip } from \"@actdim/utico/typeCore\";\r\n\r\nexport const $CG_IN = \"in\";\r\n\r\nexport const $CG_OUT = \"out\";\r\n\r\nexport const $CG_ERROR = \"error\";\r\n\r\nexport const $C_ERROR = \"error\";\r\n\r\nexport type InParam = {\r\n // [key in typeof $CG_IN]: any;\r\n [$CG_IN]: any;\r\n};\r\n\r\nexport type OutParam = {\r\n // [key in typeof $CG_OUT]: any;\r\n [$CG_OUT]: any;\r\n};\r\n\r\nexport type ErrorPayload = {\r\n error: any; // reason\r\n source?: any;\r\n handled?: boolean;\r\n};\r\n\r\nexport type ErrorParam<T extends ErrorPayload = ErrorPayload> = {\r\n // [key in typeof $CG_ERROR]: any;\r\n [$CG_ERROR]: T;\r\n};\r\n\r\n// ReservedChannelGroup\r\nexport type SystemChannelGroup = `${keyof InParam | keyof OutParam | keyof OutParam}`;\r\n\r\n// TODO:\r\n// Point-to-Point (P2P): direct messaging with targeted, address delivery (exactly one recipient)\r\n// Broadcast\r\n// Queue group: Load Balancing, Round-Robin, Fan-out, Fan-in\r\n// QoS\r\n// Message Filtering\r\n// Cross-tab message delivery:\r\n// https://www.sitepen.com/blog/cross-tab-synchronization-with-the-web-locks-api\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API\r\n// LocalStorage\r\n// https://github.com/GoogleChromeLabs/comlink\r\n\r\n// MsgBusChannelStruct\r\nexport type MsgChannelStruct = Partial<{ [group: string]: any } & InParam & OutParam & ErrorParam>;\r\n\r\n// type MsgChannelStruct = { [group: string]: any } & (\r\n// | InParam\r\n// | OutParam\r\n// | (InParam & OutParam)\r\n// );\r\n\r\nexport type MsgBusStruct = {\r\n [channel: string]: MsgChannelStruct;\r\n};\r\n\r\n// SystemMsgBusStruct\r\nexport type MsgBusStructBase = {\r\n [$C_ERROR]: {\r\n [$CG_IN]: ErrorPayload;\r\n };\r\n // \"*\": {\r\n // [$CG_IN]: any;\r\n // };\r\n};\r\n\r\n// MsgBusStructBuilder\r\nexport type MsgBusStructFactory<\r\n TStruct extends TStructBase,\r\n TStructBase extends MsgBusStruct = MsgBusStruct // & MsgBusStructBase\r\n> = {\r\n [C in keyof TStruct]: TStruct[C] & ErrorParam;\r\n};\r\n\r\n// export type MsgBusStruct = Record<string, MsgChannelStruct>;\r\n\r\nexport type InStruct<TStruct extends MsgBusStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends InParam\r\n ? TStruct[TChannel][\"in\"] // keyof InParam or typeof $CG_IN\r\n : undefined; // never\r\n\r\n// export type InStruct<\r\n// TStruct extends MsgBusStruct,\r\n// TChannel extends keyof TStruct\r\n// > = TStruct[TChannel] extends InParam ? TStruct[TChannel][\"in\"] : never;\r\n\r\nexport type OutStruct<TStruct extends MsgBusStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends OutParam\r\n ? TStruct[TChannel][keyof OutParam]\r\n : undefined;\r\n\r\n// export type OutStruct<\r\n// TStruct extends MsgBusStruct,\r\n// TChannel extends keyof TStruct\r\n// > = TStruct[TChannel] extends OutParam ? TStruct[TChannel][\"out\"] : never;\r\n\r\n// Options/Settings\r\nexport type MsgChannelConfig<TChannel> = {\r\n // (channel) message queue distribution and processing strategy\r\n replayCount?: number;\r\n initialValues?: { [TGroup in keyof TChannel]: TChannel[TGroup] };\r\n persistent?: boolean; // durable? (for durable queue)\r\n secure?: boolean; // encrypted\r\n federated?: boolean; // broadcasting\r\n autoDeleteTimeout?: number;\r\n noAck?: boolean; // noAutoAck\r\n // manualAck?: boolean;\r\n // prefetchCount?: number; // for manual acknowledgment\r\n // this can be used for some consumer or for all consumers of the channel\r\n maxConcurrentConsumers?: number; // Parallel? Processes? Handlers?\r\n replayBufferSize?: number;\r\n replayWindowTime?: number;\r\n};\r\n\r\nexport type MsgDispatchConfig = {\r\n // MsgConfig\r\n priority?: number;\r\n fetchCount?: number;\r\n};\r\n\r\nexport type MsgBusConfig<TStruct extends MsgBusStruct> = {\r\n [TChannel in keyof TStruct]?: MsgChannelConfig<TStruct[TChannel]>;\r\n}; // Record<string, MsgChannelConfig>\r\n\r\nexport type MsgAddress<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = {\r\n channel: TChannel;\r\n group?: TGroup; // typeGroup\r\n // supports wildcard matching (https://docs.nats.io/nats-concepts/subjects#wildcards)\r\n topic?: string; \r\n version?: string;\r\n};\r\n\r\n// MsgEnvelope\r\nexport type Msg<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel]\r\n> = {\r\n address: MsgAddress<TStruct, TChannel, TGroup>;\r\n payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];\r\n // status: MsgStatus;\r\n // inResponseToId\r\n requestId?: string;\r\n // correlationId\r\n traceId?: string;\r\n id?: string;\r\n timestamp: number; // Date\r\n priority?: number;\r\n persistent?: boolean; // durable? (for durable queue)\r\n};\r\n\r\n// TODO: support un(subscribing) via Deferred<bool>\r\n\r\nexport type MsgBusSubscriberParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = MsgAddress<TStruct, TChannel, TGroup> & {\r\n channelSelector?: string | ((channel: string) => boolean);\r\n // topicSelector?: string | ((channel: string) => boolean);\r\n callback?: (msg: Msg<TStruct, TChannel, TGroup>) => void;\r\n config?: MsgDispatchConfig;\r\n filter?: (msg: Msg<TStruct, TChannel, TGroup>) => boolean;\r\n signal?: AbortSignal;\r\n};\r\n\r\n// MsgBusSubscriberFn\r\nexport type MsgBusSubscriber<TStruct extends MsgBusStruct> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusSubscriberParams<TStruct, TChannel, TGroup>\r\n) => void;\r\n\r\n// MsgBusAsyncSubIterator(Fn)\r\nexport type MsgBusStreamer<TStruct extends MsgBusStruct> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusSubscriberParams<TStruct, TChannel, TGroup>\r\n) => AsyncIterableIterator<Msg<TStruct, TChannel, TGroup>>; // TGroup extends undefined ? typeof $CG_IN : TGroup\r\n\r\nexport type MsgBusAsyncSubscriberParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = Skip<MsgBusSubscriberParams<TStruct, TChannel, TGroup>, \"callback\" | \"filter\">;\r\n\r\n// MsgBusAsyncSubscriberFn\r\nexport type MsgBusAsyncSubscriber<TStruct extends MsgBusStruct> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusAsyncSubscriberParams<TStruct, TChannel, TGroup>\r\n) => Promise<Msg<TStruct, TChannel, TGroup>>; // TGroup extends undefined ? typeof $CG_IN : TGroup\r\n\r\nexport type MsgBusProviderParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = Overwrite<\r\n MsgBusSubscriberParams<TStruct, TChannel, TGroup>,\r\n {\r\n // resolve\r\n callback?: (msg: Msg<TStruct, TChannel, TGroup>) => MaybePromise<OutStruct<TStruct, TChannel>>;\r\n }\r\n>;\r\n\r\n// MsgBusProviderFn\r\nexport type MsgBusProvider<TStruct extends MsgBusStruct> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusProviderParams<TStruct, TChannel, TGroup>\r\n) => void;\r\n\r\n// MsgBusBinderFn\r\nexport type MsgBusBinder<TStruct extends MsgBusStruct> = <\r\n TSourceChannel extends keyof TStruct,\r\n TTargetChannel extends keyof TStruct,\r\n TSourceGroup extends keyof TStruct[TSourceChannel] = typeof $CG_IN,\r\n TTargetGroup extends keyof TStruct[TTargetChannel] = typeof $CG_IN\r\n>(\r\n source: MsgBusSubscriberParams<TStruct, TSourceChannel, TSourceGroup>,\r\n target: MsgAddress<TStruct, TTargetChannel, TTargetGroup>\r\n) => void;\r\n\r\nexport type MsgBusDispatcherParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = Overwrite<\r\n MsgBusSubscriberParams<TStruct, TChannel, TGroup>,\r\n {\r\n payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];\r\n payloadFn?: IsTuple<TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup]> extends true\r\n ? (fn: (...args: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup]) => void) => void\r\n : never;\r\n traceId?: string;\r\n priority?: number;\r\n persistent?: boolean;\r\n callback?: (msg: Msg<TStruct, TChannel, typeof $CG_OUT>) => void;\r\n }\r\n>;\r\n\r\nexport type MsgBusAsyncDispatcherParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = Skip<MsgBusDispatcherParams<TStruct, TChannel, TGroup>, \"callback\">;\r\n\r\n// MsgBusDispatcherFn\r\nexport type MsgBusDispatcher<TStruct extends MsgBusStruct> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusDispatcherParams<TStruct, TChannel, TGroup>\r\n) => void;\r\n\r\n// MsgBusAsyncDispatcherFn\r\nexport type MsgBusAsyncDispatcher<TStruct extends MsgBusStruct> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusAsyncDispatcherParams<TStruct, TChannel, TGroup>\r\n) => Promise<Msg<TStruct, TChannel, typeof $CG_OUT>>;\r\n\r\nexport type MsgChannelStructNormalized<TStruct extends MsgChannelStruct> = {\r\n [G in keyof TStruct]: Awaited<TStruct[G]>;\r\n};\r\n\r\nexport type MsgBusStructNormalized<TStruct extends MsgBusStruct> = {\r\n [C in keyof TStruct]: MsgChannelStructNormalized<TStruct[C]>;\r\n};\r\n\r\n// export interface\r\nexport type MsgBus<TStruct extends MsgBusStruct> = {\r\n readonly config: MsgBusConfig<MsgBusStructNormalized<TStruct>>;\r\n // subscribe, listen\r\n readonly on: MsgBusSubscriber<MsgBusStructNormalized<TStruct>>;\r\n readonly onceAsync: MsgBusAsyncSubscriber<MsgBusStructNormalized<TStruct>>;\r\n // listenStream, consume, receive\r\n readonly stream: MsgBusStreamer<MsgBusStructNormalized<TStruct>>;\r\n // handle, resolve\r\n readonly provide: MsgBusProvider<MsgBusStructNormalized<TStruct>>;\r\n // link, connect\r\n // dispatch (emit/publish + subscribe)\r\n readonly dispatch: MsgBusDispatcher<MsgBusStructNormalized<TStruct>>;\r\n readonly dispatchAsync: MsgBusAsyncDispatcher<MsgBusStructNormalized<TStruct>>;\r\n};\r\n"],"names":["$CG_IN","$CG_OUT","$CG_ERROR","$C_ERROR"],"mappings":"AAMO,MAAMA,IAAS,MAETC,IAAU,OAEVC,IAAY,SAEZC,IAAW;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"msgBusFactory.d.ts","sourceRoot":"","sources":["../src/msgBusFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,YAAY,EAIZ,YAAY,EAMZ,sBAAsB,EAEtB,gBAAgB,EAEnB,MAAM,cAAc,CAAC;AAyBtB,wBAAgB,YAAY,CAAC,OAAO,SAAS,YAAY,GAAG,gBAAgB,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"msgBusFactory.d.ts","sourceRoot":"","sources":["../src/msgBusFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,YAAY,EAIZ,YAAY,EAMZ,sBAAsB,EAEtB,gBAAgB,EAEnB,MAAM,cAAc,CAAC;AAyBtB,wBAAgB,YAAY,CAAC,OAAO,SAAS,YAAY,GAAG,gBAAgB,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,mBAoTnI"}
|
package/dist/msgBusFactory.es.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { $CG_IN as
|
|
2
|
-
import { v4 as
|
|
3
|
-
import { Subject as
|
|
4
|
-
import { filter as
|
|
5
|
-
const
|
|
6
|
-
if (
|
|
7
|
-
return (
|
|
8
|
-
if (
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
return (d) =>
|
|
1
|
+
import { $CG_IN as y, $CG_ERROR as x, $C_ERROR as T, $CG_OUT as C } from "./msgBusCore.es.js";
|
|
2
|
+
import { v4 as b } from "uuid";
|
|
3
|
+
import { ReplaySubject as B, Subject as O } from "rxjs";
|
|
4
|
+
import { filter as W, take as q } from "rxjs/operators";
|
|
5
|
+
const A = (c) => {
|
|
6
|
+
if (c == null)
|
|
7
|
+
return (r) => r == c;
|
|
8
|
+
if (c.startsWith("/") && c.endsWith("/")) {
|
|
9
|
+
c = c.substring(1, c.length - 1);
|
|
10
|
+
const r = new RegExp(c);
|
|
11
|
+
return (d) => r.test(d);
|
|
12
12
|
} else
|
|
13
|
-
return (
|
|
14
|
-
},
|
|
15
|
-
function
|
|
16
|
-
const
|
|
13
|
+
return (r) => c === r;
|
|
14
|
+
}, L = ":";
|
|
15
|
+
function F(c) {
|
|
16
|
+
const r = "msgbus";
|
|
17
17
|
function d() {
|
|
18
18
|
return Date.now();
|
|
19
19
|
}
|
|
20
|
-
function
|
|
20
|
+
function $(e) {
|
|
21
21
|
return {
|
|
22
22
|
address: e.address,
|
|
23
23
|
requestId: e.requestId,
|
|
@@ -28,59 +28,67 @@ function K(r) {
|
|
|
28
28
|
persistent: e.persistent
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
|
-
function
|
|
31
|
+
function p(e, o) {
|
|
32
32
|
const t = {
|
|
33
|
-
error:
|
|
34
|
-
source:
|
|
33
|
+
error: o,
|
|
34
|
+
source: $(e)
|
|
35
35
|
};
|
|
36
|
-
let
|
|
37
|
-
|
|
36
|
+
let n;
|
|
37
|
+
n = {
|
|
38
38
|
address: {
|
|
39
39
|
channel: e.address.channel,
|
|
40
|
-
group:
|
|
41
|
-
topic:
|
|
40
|
+
group: x,
|
|
41
|
+
topic: r
|
|
42
42
|
},
|
|
43
43
|
payload: t
|
|
44
|
-
},
|
|
44
|
+
}, a(n), n = {
|
|
45
45
|
address: {
|
|
46
|
-
channel:
|
|
47
|
-
group:
|
|
48
|
-
topic:
|
|
46
|
+
channel: T,
|
|
47
|
+
group: y,
|
|
48
|
+
topic: r
|
|
49
49
|
},
|
|
50
50
|
payload: t
|
|
51
|
-
},
|
|
51
|
+
}, a(n);
|
|
52
52
|
}
|
|
53
|
-
const
|
|
54
|
-
function
|
|
55
|
-
return `${e}${
|
|
53
|
+
const l = /* @__PURE__ */ new Map();
|
|
54
|
+
function E(e, o) {
|
|
55
|
+
return `${e}${L}${o}`;
|
|
56
56
|
}
|
|
57
|
-
function
|
|
58
|
-
const t =
|
|
59
|
-
|
|
57
|
+
function g(e, o) {
|
|
58
|
+
const t = E(e, o);
|
|
59
|
+
if (!l.has(t)) {
|
|
60
|
+
let n = null;
|
|
61
|
+
const i = c[e];
|
|
62
|
+
i && (i.replayBufferSize != null || i.replayWindowTime != null) && (n = new B(i.replayBufferSize == null ? 1 / 0 : i.replayBufferSize, i.replayWindowTime == null ? 1 / 0 : i.replayWindowTime)), n || (n = new O()), l.set(
|
|
63
|
+
t,
|
|
64
|
+
n
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
return l.get(t);
|
|
60
68
|
}
|
|
61
69
|
function u(e) {
|
|
62
|
-
const
|
|
70
|
+
const o = String(e.channel), t = e.group == null ? y : String(e.group), n = g(o, t), i = A(e.topic), f = W(
|
|
63
71
|
(s) => (
|
|
64
72
|
// msg.address.channel === channel &&
|
|
65
73
|
// msg.address.group === group &&
|
|
66
|
-
|
|
74
|
+
i(s.address.topic) && (!e.filter || e.filter(s))
|
|
67
75
|
)
|
|
68
76
|
);
|
|
69
|
-
let
|
|
70
|
-
e.config?.fetchCount ?
|
|
71
|
-
const
|
|
77
|
+
let h;
|
|
78
|
+
e.config?.fetchCount ? h = n.pipe(f, q(e.config.fetchCount)) : h = n.pipe(f);
|
|
79
|
+
const P = h.subscribe({
|
|
72
80
|
next: (s) => {
|
|
73
81
|
try {
|
|
74
82
|
return e.callback(s);
|
|
75
|
-
} catch (
|
|
76
|
-
|
|
83
|
+
} catch (j) {
|
|
84
|
+
p(s, j);
|
|
77
85
|
}
|
|
78
86
|
},
|
|
79
87
|
error: (s) => {
|
|
80
|
-
|
|
88
|
+
p(
|
|
81
89
|
{
|
|
82
90
|
address: {
|
|
83
|
-
channel:
|
|
91
|
+
channel: o,
|
|
84
92
|
group: t,
|
|
85
93
|
topic: e.topic
|
|
86
94
|
},
|
|
@@ -96,94 +104,92 @@ function K(r) {
|
|
|
96
104
|
});
|
|
97
105
|
e.signal?.addEventListener("abort", () => {
|
|
98
106
|
console.log(
|
|
99
|
-
`Listening aborted for channel: ${
|
|
100
|
-
),
|
|
107
|
+
`Listening aborted for channel: ${o}, group: ${t}, topic: ${e.topic}. Reason: ${e.signal.reason}`
|
|
108
|
+
), P.unsubscribe();
|
|
101
109
|
});
|
|
102
110
|
}
|
|
103
|
-
function
|
|
104
|
-
const
|
|
111
|
+
function a(e) {
|
|
112
|
+
const o = {
|
|
105
113
|
...e,
|
|
106
|
-
id: w(),
|
|
107
114
|
timestamp: d()
|
|
108
115
|
};
|
|
109
|
-
|
|
110
|
-
const t = String(
|
|
111
|
-
|
|
112
|
-
const
|
|
113
|
-
return
|
|
116
|
+
o.id == null && (o.id = b()), o.traceId == null && (o.traceId = b());
|
|
117
|
+
const t = String(o.address.channel);
|
|
118
|
+
o.address.group == null && (o.address.group = y);
|
|
119
|
+
const n = String(o.address.group);
|
|
120
|
+
return g(t, n).next(o), o;
|
|
114
121
|
}
|
|
115
|
-
function
|
|
122
|
+
function I(e) {
|
|
116
123
|
u(e);
|
|
117
124
|
}
|
|
118
|
-
function
|
|
119
|
-
return new Promise((
|
|
125
|
+
function R(e) {
|
|
126
|
+
return new Promise((o, t) => {
|
|
120
127
|
try {
|
|
121
128
|
e.signal?.addEventListener("abort", () => {
|
|
122
129
|
t(new Error("Cancelled", { cause: e.signal.reason }));
|
|
123
130
|
});
|
|
124
|
-
const
|
|
131
|
+
const n = {
|
|
125
132
|
...e,
|
|
126
133
|
config: {
|
|
127
134
|
...e.config,
|
|
128
135
|
fetchCount: 1
|
|
129
136
|
},
|
|
130
|
-
callback: (
|
|
131
|
-
|
|
137
|
+
callback: (i) => {
|
|
138
|
+
o(i);
|
|
132
139
|
}
|
|
133
140
|
};
|
|
134
|
-
u(
|
|
135
|
-
} catch (
|
|
136
|
-
t(
|
|
141
|
+
u(n);
|
|
142
|
+
} catch (n) {
|
|
143
|
+
t(n);
|
|
137
144
|
}
|
|
138
145
|
});
|
|
139
146
|
}
|
|
140
|
-
function
|
|
141
|
-
const
|
|
147
|
+
function S(e) {
|
|
148
|
+
const o = {
|
|
142
149
|
...e,
|
|
143
150
|
callback: async (t) => {
|
|
144
151
|
try {
|
|
145
|
-
const
|
|
152
|
+
const n = {
|
|
146
153
|
address: {
|
|
147
154
|
channel: t.address.channel,
|
|
148
|
-
group:
|
|
155
|
+
group: C,
|
|
149
156
|
topic: t.address.topic
|
|
150
157
|
},
|
|
151
158
|
traceId: t.traceId,
|
|
152
159
|
requestId: t.id,
|
|
153
160
|
persistent: t.persistent,
|
|
154
161
|
priority: t.priority
|
|
155
|
-
},
|
|
156
|
-
|
|
157
|
-
} catch (
|
|
158
|
-
|
|
162
|
+
}, i = await Promise.resolve(e.callback(t));
|
|
163
|
+
n.payload = i, a(n);
|
|
164
|
+
} catch (n) {
|
|
165
|
+
p(t, n);
|
|
159
166
|
}
|
|
160
167
|
}
|
|
161
168
|
};
|
|
162
|
-
u(
|
|
169
|
+
u(o);
|
|
163
170
|
}
|
|
164
|
-
function
|
|
165
|
-
|
|
171
|
+
function v(e) {
|
|
172
|
+
const o = b();
|
|
166
173
|
if (e.callback) {
|
|
167
|
-
const
|
|
174
|
+
const n = {
|
|
168
175
|
channel: e.channel,
|
|
169
|
-
group:
|
|
176
|
+
group: C,
|
|
170
177
|
topic: e.topic,
|
|
171
178
|
config: {
|
|
172
179
|
...e.config,
|
|
173
180
|
fetchCount: 1
|
|
174
181
|
},
|
|
175
|
-
callback: (
|
|
176
|
-
e.callback(
|
|
182
|
+
callback: (i) => {
|
|
183
|
+
e.callback(i);
|
|
177
184
|
},
|
|
178
|
-
filter: (
|
|
179
|
-
// TODO: match topic?
|
|
185
|
+
filter: (i) => i.requestId === o && (!e.filter || e.filter(i))
|
|
180
186
|
};
|
|
181
|
-
u(
|
|
187
|
+
u(n);
|
|
182
188
|
}
|
|
183
189
|
let t;
|
|
184
|
-
e.payloadFn ? e.payloadFn((
|
|
185
|
-
t =
|
|
186
|
-
}) : t = e.payload,
|
|
190
|
+
e.payloadFn ? e.payloadFn((n) => {
|
|
191
|
+
t = n;
|
|
192
|
+
}) : t = e.payload, a({
|
|
187
193
|
address: {
|
|
188
194
|
channel: e.channel,
|
|
189
195
|
group: e.group,
|
|
@@ -192,44 +198,46 @@ function K(r) {
|
|
|
192
198
|
payload: t,
|
|
193
199
|
traceId: e.traceId,
|
|
194
200
|
persistent: e.persistent,
|
|
195
|
-
priority: e.priority
|
|
201
|
+
priority: e.priority,
|
|
202
|
+
id: o
|
|
196
203
|
});
|
|
197
204
|
}
|
|
198
|
-
async function
|
|
199
|
-
return new Promise((
|
|
205
|
+
async function k(e) {
|
|
206
|
+
return new Promise((o, t) => {
|
|
200
207
|
try {
|
|
201
208
|
e.signal?.addEventListener("abort", () => {
|
|
202
209
|
t(new Error("Cancelled", { cause: e.signal.reason }));
|
|
203
210
|
});
|
|
204
|
-
const
|
|
211
|
+
const n = {
|
|
205
212
|
...e,
|
|
206
|
-
callback: (
|
|
213
|
+
callback: (i) => {
|
|
207
214
|
try {
|
|
208
|
-
|
|
209
|
-
} catch (
|
|
210
|
-
t(
|
|
215
|
+
o(i);
|
|
216
|
+
} catch (f) {
|
|
217
|
+
t(f);
|
|
211
218
|
}
|
|
212
219
|
}
|
|
213
220
|
};
|
|
214
|
-
|
|
215
|
-
} catch (
|
|
216
|
-
t(
|
|
221
|
+
v(n);
|
|
222
|
+
} catch (n) {
|
|
223
|
+
t(n);
|
|
217
224
|
}
|
|
218
225
|
});
|
|
219
226
|
}
|
|
220
|
-
|
|
221
|
-
config:
|
|
222
|
-
on: (e) =>
|
|
223
|
-
onceAsync: (e) =>
|
|
227
|
+
const w = {
|
|
228
|
+
config: c,
|
|
229
|
+
on: (e) => I(e),
|
|
230
|
+
onceAsync: (e) => R(e),
|
|
224
231
|
stream: (e) => {
|
|
225
232
|
throw new Error("Not implemented");
|
|
226
233
|
},
|
|
227
|
-
provide: (e) =>
|
|
228
|
-
dispatch: (e) =>
|
|
229
|
-
dispatchAsync: (e) =>
|
|
234
|
+
provide: (e) => S(e),
|
|
235
|
+
dispatch: (e) => v(e),
|
|
236
|
+
dispatchAsync: (e) => k(e)
|
|
230
237
|
};
|
|
238
|
+
return w["#subjects"] = l, w;
|
|
231
239
|
}
|
|
232
240
|
export {
|
|
233
|
-
|
|
241
|
+
F as createMsgBus
|
|
234
242
|
};
|
|
235
243
|
//# sourceMappingURL=msgBusFactory.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"msgBusFactory.es.js","sources":["../src/msgBusFactory.ts"],"sourcesContent":["import {\r\n MsgBus,\r\n MsgBusStruct,\r\n Msg,\r\n $CG_IN,\r\n $CG_OUT,\r\n MsgBusConfig,\r\n MsgBusSubscriberParams,\r\n MsgBusAsyncSubscriberParams,\r\n MsgBusProviderParams,\r\n MsgBusDispatcherParams,\r\n MsgBusAsyncDispatcherParams,\r\n MsgBusStructNormalized,\r\n $CG_ERROR,\r\n MsgBusStructBase,\r\n $C_ERROR\r\n} from \"./msgBusCore\";\r\nimport { v4 as uuid } from \"uuid\";\r\nimport { MonoTypeOperatorFunction, Observable, Subject, Subscription } from \"rxjs\";\r\nimport { filter as filterOp, take as takeOp } from \"rxjs/operators\";\r\nimport { Skip } from \"@actdim/utico/typeCore\";\r\n\r\nconst getMatchTest = (pattern: string) => {\r\n if (pattern == undefined) {\r\n // return (value: string) => true;\r\n return (value: string) => value == pattern;\r\n }\r\n if (pattern.startsWith(\"/\") && pattern.endsWith(\"/\")) {\r\n pattern = pattern.substring(1, pattern.length - 1);\r\n const regexp = new RegExp(pattern);\r\n return (value: string) => regexp.test(value);\r\n } else {\r\n return (value: string) => pattern === value;\r\n }\r\n};\r\n\r\n// see also https://www.npmjs.com/package/p-queue\r\n// https://github.com/postaljs/postal.js\r\n\r\n// createServiceBus\r\nconst groupPrefix = \":\"; // \"/\", \":\", \"::\"\r\nexport function createMsgBus<TStruct extends MsgBusStruct & MsgBusStructBase>(config?: MsgBusConfig<MsgBusStructNormalized<TStruct>>) {\r\n type TStructN = MsgBusStructNormalized<TStruct>;\r\n type MsgSrcData = Skip<Msg<TStructN>, \"id\" | \"timestamp\">;\r\n type MsgInfo = Skip<Msg<TStructN>, \"payload\">;\r\n const errTopic = \"msgbus\";\r\n\r\n function now() {\r\n return Date.now(); // new Date().getTime() or +new Date()\r\n }\r\n\r\n function getMsgInfo(msg: Msg<TStructN>) {\r\n return {\r\n address: msg.address,\r\n requestId: msg.requestId,\r\n traceId: msg.traceId,\r\n id: msg.id,\r\n timestamp: msg.timestamp,\r\n priority: msg.priority,\r\n persistent: msg.persistent\r\n } as MsgInfo;\r\n }\r\n\r\n function handleError(srcMsg: Msg<TStructN>, err: any) {\r\n const errPayload = {\r\n error: err,\r\n source: getMsgInfo(srcMsg)\r\n } as MsgSrcData[\"payload\"];\r\n let errMsg: MsgSrcData;\r\n errMsg = {\r\n address: {\r\n channel: srcMsg.address.channel,\r\n group: $CG_ERROR,\r\n topic: errTopic\r\n },\r\n payload: errPayload\r\n };\r\n publish(errMsg);\r\n errMsg = {\r\n address: {\r\n channel: $C_ERROR,\r\n group: $CG_IN,\r\n topic: errTopic\r\n },\r\n payload: errPayload\r\n };\r\n publish(errMsg);\r\n }\r\n // observables\r\n const subjects: Map<string, Subject<Msg<TStructN>>> = new Map();\r\n\r\n function createRoutingKey(channel: string, group: string) {\r\n return `${channel}${groupPrefix}${group}`;\r\n }\r\n\r\n function getOrCreateSubject(channel: string, group: string): Subject<Msg<TStructN>> {\r\n const routingKey = createRoutingKey(channel, group);\r\n // TODO: support BehaviorSubject, ReplaySubject, AsyncSubject\r\n if (!subjects.has(routingKey)) {\r\n subjects.set(routingKey, new Subject<Msg<TStructN>>());\r\n }\r\n return subjects.get(routingKey) as Subject<Msg<TStructN>>;\r\n }\r\n\r\n function subscribe(params: MsgBusSubscriberParams<TStructN>) {\r\n // TODO: use [channel, group] as key?\r\n\r\n const channel = String(params.channel);\r\n\r\n const group = params.group == undefined ? $CG_IN : String(params.group);\r\n\r\n const subject = getOrCreateSubject(channel, group);\r\n\r\n const match = getMatchTest(params.topic);\r\n\r\n const fOp: MonoTypeOperatorFunction<Msg<TStructN>> = filterOp(\r\n (msg) =>\r\n // msg.address.channel === channel &&\r\n // msg.address.group === group &&\r\n match(msg.address.topic) && (!params.filter || params.filter(msg))\r\n );\r\n\r\n let observable: Observable<Msg<TStructN>>;\r\n // groupBy?\r\n // mergeMap?\r\n // timeout, takeUntil, time?\r\n if (params.config?.fetchCount) {\r\n observable = subject.pipe(fOp, takeOp(params.config.fetchCount));\r\n } else {\r\n observable = subject.pipe(fOp);\r\n }\r\n\r\n const sub = observable.subscribe({\r\n next: (msg: Msg<TStructN>) => {\r\n try {\r\n return params.callback(msg);\r\n } catch (err) {\r\n handleError(msg, err);\r\n // throw err;\r\n }\r\n },\r\n error: (err) => {\r\n handleError(\r\n {\r\n address: {\r\n channel: channel,\r\n group: group,\r\n topic: params.topic\r\n },\r\n id: undefined, // not a real message\r\n timestamp: now()\r\n },\r\n err\r\n );\r\n },\r\n complete: () => {\r\n // cleanup\r\n }\r\n });\r\n\r\n params.signal?.addEventListener(\"abort\", () => {\r\n // TODO: publish debug (internal) message\r\n console.log(\r\n `Listening aborted for channel: ${channel}, group: ${group}, topic: ${params.topic}. Reason: ${params.signal.reason}`\r\n );\r\n sub.unsubscribe();\r\n });\r\n }\r\n\r\n function publish(msgData: MsgSrcData) {\r\n const msg: Msg<TStructN, any, any> = {\r\n ...msgData,\r\n id: uuid(),\r\n timestamp: now()\r\n };\r\n // !msg.traceId\r\n if (msg.traceId == undefined) {\r\n msg.traceId = uuid();\r\n }\r\n const channel = String(msg.address.channel);\r\n if (msg.address.group == undefined) {\r\n msg.address.group = $CG_IN;\r\n }\r\n const group = String(msg.address.group);\r\n const subject = getOrCreateSubject(channel, group);\r\n subject.next(msg);\r\n return msg;\r\n }\r\n\r\n function on(params: MsgBusSubscriberParams<TStructN>) {\r\n subscribe(params);\r\n }\r\n\r\n function onceAsync(params: MsgBusAsyncSubscriberParams<TStructN>) {\r\n return new Promise<any>((res, rej) => {\r\n try {\r\n params.signal?.addEventListener(\"abort\", () => {\r\n rej(new Error(\"Cancelled\", { cause: params.signal.reason }));\r\n });\r\n const subParams: MsgBusSubscriberParams<TStructN> = {\r\n ...params,\r\n ...{\r\n config: {\r\n ...params.config,\r\n ...{\r\n fetchCount: 1\r\n }\r\n },\r\n callback: (msg) => {\r\n // sub.unsubscribe();\r\n res(msg);\r\n }\r\n }\r\n };\r\n subscribe(subParams);\r\n } catch (e) {\r\n rej(e);\r\n }\r\n });\r\n }\r\n\r\n function provide(params: MsgBusProviderParams<TStructN>) {\r\n const subParams: MsgBusSubscriberParams<TStructN> = {\r\n ...params,\r\n ...{\r\n callback: async (msgIn) => {\r\n try {\r\n const msgOut: MsgSrcData = {\r\n address: {\r\n channel: msgIn.address.channel,\r\n group: $CG_OUT,\r\n topic: msgIn.address.topic\r\n },\r\n traceId: msgIn.traceId,\r\n requestId: msgIn.id,\r\n persistent: msgIn.persistent,\r\n priority: msgIn.priority\r\n };\r\n const payload = (await Promise.resolve(params.callback(msgIn))) as MsgSrcData[\"payload\"];\r\n msgOut.payload = payload;\r\n publish(msgOut);\r\n } catch (err) {\r\n handleError(msgIn, err);\r\n // throw err;\r\n }\r\n }\r\n }\r\n };\r\n subscribe(subParams);\r\n }\r\n\r\n function dispatch(params: MsgBusDispatcherParams<TStructN>) {\r\n let msgIn: Msg<TStructN>;\r\n if (params.callback) {\r\n const subParams: MsgBusSubscriberParams<TStructN, keyof TStructN, typeof $CG_OUT> = {\r\n channel: params.channel,\r\n group: $CG_OUT,\r\n topic: params.topic,\r\n config: {\r\n ...params.config,\r\n ...{\r\n fetchCount: 1\r\n }\r\n },\r\n callback: (msgOut) => {\r\n // sub.unsubscribe();\r\n params.callback(msgOut);\r\n },\r\n filter: (msgOut) => msgOut.requestId === msgIn.id && (!params.filter || params.filter(msgOut)) // TODO: match topic?\r\n };\r\n subscribe(subParams);\r\n }\r\n let payload: any;\r\n if (params.payloadFn) {\r\n params.payloadFn((args) => {\r\n payload = args;\r\n });\r\n } else {\r\n payload = params.payload;\r\n }\r\n msgIn = publish({\r\n address: {\r\n channel: params.channel,\r\n group: params.group,\r\n topic: params.topic\r\n },\r\n payload: payload,\r\n traceId: params.traceId,\r\n persistent: params.persistent,\r\n priority: params.priority\r\n });\r\n }\r\n\r\n async function dispatchAsync(params: MsgBusAsyncDispatcherParams<TStructN>): Promise<any> {\r\n return new Promise((res, rej) => {\r\n try {\r\n params.signal?.addEventListener(\"abort\", () => {\r\n rej(new Error(\"Cancelled\", { cause: params.signal.reason }));\r\n });\r\n const dispatchParams: MsgBusDispatcherParams<TStructN> = {\r\n ...params,\r\n callback: (msg) => {\r\n try {\r\n res(msg);\r\n } catch (err) {\r\n rej(err);\r\n }\r\n }\r\n };\r\n dispatch(dispatchParams);\r\n } catch (err) {\r\n rej(err);\r\n }\r\n });\r\n }\r\n\r\n const msgBus: MsgBus<TStruct> = {\r\n config: config,\r\n on: (params) => on(params as MsgBusSubscriberParams<TStructN>),\r\n onceAsync: (params) => onceAsync(params as MsgBusAsyncSubscriberParams<TStructN>),\r\n stream: (params) => {\r\n throw new Error(\"Not implemented\");\r\n },\r\n provide: (params) => provide(params as MsgBusProviderParams<TStructN>),\r\n dispatch: (params) => dispatch(params as MsgBusDispatcherParams<TStructN>),\r\n dispatchAsync: (params) => dispatchAsync(params as MsgBusAsyncDispatcherParams<TStructN>)\r\n };\r\n\r\n return msgBus;\r\n}\r\n\r\n// class MessageBus<TStruct extends MsgBusStruct>\r\n// implements IMsgBus<TStruct>\r\n// {\r\n// constructor() {}\r\n// // ...\r\n// }\r\n"],"names":["getMatchTest","pattern","value","regexp","groupPrefix","createMsgBus","config","errTopic","now","getMsgInfo","msg","handleError","srcMsg","err","errPayload","errMsg","$CG_ERROR","publish","$C_ERROR","$CG_IN","subjects","createRoutingKey","channel","group","getOrCreateSubject","routingKey","Subject","subscribe","params","subject","match","fOp","filterOp","observable","takeOp","sub","msgData","uuid","on","onceAsync","res","rej","subParams","e","provide","msgIn","msgOut","$CG_OUT","payload","dispatch","args","dispatchAsync","dispatchParams"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"msgBusFactory.es.js","sources":["D:/Src/my/actdim/public/msgmesh/src/msgBusFactory.ts"],"sourcesContent":["import {\r\n MsgBus,\r\n MsgBusStruct,\r\n Msg,\r\n $CG_IN,\r\n $CG_OUT,\r\n MsgBusConfig,\r\n MsgBusSubscriberParams,\r\n MsgBusAsyncSubscriberParams,\r\n MsgBusProviderParams,\r\n MsgBusDispatcherParams,\r\n MsgBusAsyncDispatcherParams,\r\n MsgBusStructNormalized,\r\n $CG_ERROR,\r\n MsgBusStructBase,\r\n $C_ERROR\r\n} from \"./msgBusCore\";\r\nimport { v4 as uuid } from \"uuid\";\r\nimport { MonoTypeOperatorFunction, Observable, Subject, ReplaySubject } from \"rxjs\";\r\nimport { filter, filter as filterOp, take as takeOp } from \"rxjs/operators\";\r\nimport { Skip } from \"@actdim/utico/typeCore\";\r\n\r\nconst getMatchTest = (pattern: string) => {\r\n if (pattern == undefined) {\r\n // return (value: string) => true;\r\n return (value: string) => value == pattern;\r\n }\r\n if (pattern.startsWith(\"/\") && pattern.endsWith(\"/\")) {\r\n pattern = pattern.substring(1, pattern.length - 1);\r\n const regexp = new RegExp(pattern);\r\n return (value: string) => regexp.test(value);\r\n } else {\r\n return (value: string) => pattern === value;\r\n }\r\n};\r\n\r\n// see also https://www.npmjs.com/package/p-queue\r\n// https://github.com/postaljs/postal.js\r\n\r\n// createServiceBus\r\nconst groupPrefix = \":\"; // \"/\", \":\", \"::\"\r\nexport function createMsgBus<TStruct extends MsgBusStruct & MsgBusStructBase>(config?: MsgBusConfig<MsgBusStructNormalized<TStruct>>) {\r\n type TStructN = MsgBusStructNormalized<TStruct>;\r\n type MsgSrcData = Skip<Msg<TStructN>, \"timestamp\">;\r\n type MsgInfo = Skip<Msg<TStructN>, \"payload\">;\r\n const errTopic = \"msgbus\";\r\n\r\n function now() {\r\n return Date.now(); // new Date().getTime() or +new Date()\r\n }\r\n\r\n function getMsgInfo(msg: Msg<TStructN>) {\r\n return {\r\n address: msg.address,\r\n requestId: msg.requestId,\r\n traceId: msg.traceId,\r\n id: msg.id,\r\n timestamp: msg.timestamp,\r\n priority: msg.priority,\r\n persistent: msg.persistent\r\n } as MsgInfo;\r\n }\r\n\r\n function handleError(srcMsg: Msg<TStructN>, err: any) {\r\n const errPayload = {\r\n error: err,\r\n source: getMsgInfo(srcMsg)\r\n } as MsgSrcData[\"payload\"];\r\n let errMsg: MsgSrcData;\r\n errMsg = {\r\n address: {\r\n channel: srcMsg.address.channel,\r\n group: $CG_ERROR,\r\n topic: errTopic\r\n },\r\n payload: errPayload\r\n };\r\n publish(errMsg);\r\n errMsg = {\r\n address: {\r\n channel: $C_ERROR,\r\n group: $CG_IN,\r\n topic: errTopic\r\n },\r\n payload: errPayload\r\n };\r\n publish(errMsg);\r\n }\r\n // observables\r\n const subjects: Map<string, Subject<Msg<TStructN>>> = new Map();\r\n\r\n function createRoutingKey(channel: string, group: string) {\r\n return `${channel}${groupPrefix}${group}`;\r\n }\r\n\r\n function getOrCreateSubject(channel: string, group: string): Subject<Msg<TStructN>> {\r\n const routingKey = createRoutingKey(channel, group);\r\n // TODO: support BehaviorSubject\r\n if (!subjects.has(routingKey)) {\r\n let subject: Subject<Msg<TStructN>> = null;\r\n const channelConfig = config[channel];\r\n if (channelConfig) { \r\n if (channelConfig.replayBufferSize != undefined || channelConfig.replayWindowTime != undefined) {\r\n subject = new ReplaySubject<Msg<TStructN>>(channelConfig.replayBufferSize == undefined ? Infinity : channelConfig.replayBufferSize, channelConfig.replayWindowTime == undefined ? Infinity : channelConfig.replayWindowTime);\r\n }\r\n }\r\n if (!subject) {\r\n subject = new Subject<Msg<TStructN>>();\r\n }\r\n subjects.set(routingKey,\r\n subject\r\n );\r\n }\r\n return subjects.get(routingKey);\r\n }\r\n\r\n function subscribe(params: MsgBusSubscriberParams<TStructN>) {\r\n // TODO: use [channel, group] as key?\r\n\r\n const channel = String(params.channel);\r\n\r\n const group = params.group == undefined ? $CG_IN : String(params.group);\r\n\r\n const subject = getOrCreateSubject(channel, group);\r\n\r\n const match = getMatchTest(params.topic);\r\n\r\n const fOp: MonoTypeOperatorFunction<Msg<TStructN>> = filterOp(\r\n (msg) =>\r\n // msg.address.channel === channel &&\r\n // msg.address.group === group &&\r\n match(msg.address.topic) && (!params.filter || params.filter(msg))\r\n );\r\n\r\n let observable: Observable<Msg<TStructN>>;\r\n // groupBy?\r\n // mergeMap?\r\n // timeout, takeUntil, time?\r\n if (params.config?.fetchCount) {\r\n observable = subject.pipe(fOp, takeOp(params.config.fetchCount));\r\n } else {\r\n observable = subject.pipe(fOp);\r\n }\r\n\r\n const sub = observable.subscribe({\r\n next: (msg: Msg<TStructN>) => {\r\n try {\r\n return params.callback(msg);\r\n } catch (err) {\r\n handleError(msg, err);\r\n // throw err;\r\n }\r\n },\r\n error: (err) => {\r\n handleError(\r\n {\r\n address: {\r\n channel: channel,\r\n group: group,\r\n topic: params.topic\r\n },\r\n id: undefined, // not a real message\r\n timestamp: now()\r\n },\r\n err\r\n );\r\n },\r\n complete: () => {\r\n // cleanup\r\n }\r\n });\r\n\r\n params.signal?.addEventListener(\"abort\", () => {\r\n // TODO: publish debug (internal) message\r\n console.log(\r\n `Listening aborted for channel: ${channel}, group: ${group}, topic: ${params.topic}. Reason: ${params.signal.reason}`\r\n );\r\n sub.unsubscribe();\r\n });\r\n }\r\n\r\n function publish(msgData: MsgSrcData) {\r\n const msg: Msg<TStructN, any, any> = {\r\n ...msgData,\r\n timestamp: now()\r\n };\r\n if (msg.id == undefined) {\r\n msg.id = uuid();\r\n }\r\n // !msg.traceId\r\n if (msg.traceId == undefined) {\r\n msg.traceId = uuid();\r\n }\r\n const channel = String(msg.address.channel);\r\n if (msg.address.group == undefined) {\r\n msg.address.group = $CG_IN;\r\n }\r\n const group = String(msg.address.group);\r\n const subject = getOrCreateSubject(channel, group);\r\n subject.next(msg);\r\n return msg;\r\n }\r\n\r\n function on(params: MsgBusSubscriberParams<TStructN>) {\r\n subscribe(params);\r\n }\r\n\r\n function onceAsync(params: MsgBusAsyncSubscriberParams<TStructN>) {\r\n return new Promise<any>((res, rej) => {\r\n try {\r\n params.signal?.addEventListener(\"abort\", () => {\r\n rej(new Error(\"Cancelled\", { cause: params.signal.reason }));\r\n });\r\n const subParams: MsgBusSubscriberParams<TStructN> = {\r\n ...params,\r\n ...{\r\n config: {\r\n ...params.config,\r\n ...{\r\n fetchCount: 1\r\n }\r\n },\r\n callback: (msg) => {\r\n // sub.unsubscribe();\r\n res(msg);\r\n }\r\n }\r\n };\r\n subscribe(subParams);\r\n } catch (e) {\r\n rej(e);\r\n }\r\n });\r\n }\r\n\r\n function provide(params: MsgBusProviderParams<TStructN>) {\r\n const subParams: MsgBusSubscriberParams<TStructN> = {\r\n ...params,\r\n ...{\r\n callback: async (msgIn) => {\r\n try {\r\n const msgOut: MsgSrcData = {\r\n address: {\r\n channel: msgIn.address.channel,\r\n group: $CG_OUT,\r\n topic: msgIn.address.topic\r\n },\r\n traceId: msgIn.traceId,\r\n requestId: msgIn.id,\r\n persistent: msgIn.persistent,\r\n priority: msgIn.priority\r\n };\r\n const payload = (await Promise.resolve(params.callback(msgIn))) as MsgSrcData[\"payload\"];\r\n msgOut.payload = payload;\r\n publish(msgOut);\r\n } catch (err) {\r\n handleError(msgIn, err);\r\n // throw err;\r\n }\r\n }\r\n }\r\n };\r\n subscribe(subParams);\r\n }\r\n\r\n function dispatch(params: MsgBusDispatcherParams<TStructN>) {\r\n let msgIn: Msg<TStructN>;\r\n const msgId = uuid();\r\n if (params.callback) {\r\n const subParams: MsgBusSubscriberParams<TStructN, keyof TStructN, typeof $CG_OUT> = {\r\n channel: params.channel,\r\n group: $CG_OUT,\r\n topic: params.topic,\r\n config: {\r\n ...params.config,\r\n ...{\r\n fetchCount: 1\r\n }\r\n },\r\n callback: (msgOut) => {\r\n // sub.unsubscribe();\r\n params.callback(msgOut);\r\n },\r\n filter: (msgOut) => {\r\n return msgOut.requestId === msgId && (!params.filter || params.filter(msgOut)) // TODO: match topic?\r\n }\r\n };\r\n subscribe(subParams);\r\n }\r\n let payload: any;\r\n if (params.payloadFn) {\r\n params.payloadFn((args) => {\r\n payload = args;\r\n });\r\n } else {\r\n payload = params.payload;\r\n }\r\n msgIn = publish({\r\n address: {\r\n channel: params.channel,\r\n group: params.group,\r\n topic: params.topic\r\n },\r\n payload: payload,\r\n traceId: params.traceId,\r\n persistent: params.persistent,\r\n priority: params.priority,\r\n id: msgId\r\n });\r\n }\r\n\r\n async function dispatchAsync(params: MsgBusAsyncDispatcherParams<TStructN>): Promise<any> {\r\n return new Promise((res, rej) => {\r\n try {\r\n params.signal?.addEventListener(\"abort\", () => {\r\n rej(new Error(\"Cancelled\", { cause: params.signal.reason }));\r\n });\r\n const dispatchParams: MsgBusDispatcherParams<TStructN> = {\r\n ...params,\r\n callback: (msg) => {\r\n try {\r\n res(msg);\r\n } catch (err) {\r\n rej(err);\r\n }\r\n }\r\n };\r\n dispatch(dispatchParams);\r\n } catch (err) {\r\n rej(err);\r\n }\r\n });\r\n }\r\n\r\n const msgBus: MsgBus<TStruct> = {\r\n config: config,\r\n on: (params) => on(params as MsgBusSubscriberParams<TStructN>),\r\n onceAsync: (params) => onceAsync(params as MsgBusAsyncSubscriberParams<TStructN>),\r\n stream: (params) => {\r\n throw new Error(\"Not implemented\");\r\n },\r\n provide: (params) => provide(params as MsgBusProviderParams<TStructN>),\r\n dispatch: (params) => dispatch(params as MsgBusDispatcherParams<TStructN>),\r\n dispatchAsync: (params) => dispatchAsync(params as MsgBusAsyncDispatcherParams<TStructN>),\r\n };\r\n\r\n msgBus[\"#subjects\"] = subjects;\r\n\r\n return msgBus;\r\n}\r\n\r\n// class MessageBus<TStruct extends MsgBusStruct>\r\n// implements IMsgBus<TStruct>\r\n// {\r\n// constructor() {}\r\n// // ...\r\n// }\r\n"],"names":["getMatchTest","pattern","value","regexp","groupPrefix","createMsgBus","config","errTopic","now","getMsgInfo","msg","handleError","srcMsg","err","errPayload","errMsg","$CG_ERROR","publish","$C_ERROR","$CG_IN","subjects","createRoutingKey","channel","group","getOrCreateSubject","routingKey","subject","channelConfig","ReplaySubject","Subject","subscribe","params","match","fOp","filterOp","observable","takeOp","sub","msgData","uuid","on","onceAsync","res","rej","subParams","e","provide","msgIn","msgOut","$CG_OUT","payload","dispatch","msgId","args","dispatchAsync","dispatchParams","msgBus"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actdim/msgmesh",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "A type-safe, modular message mesh for scalable async communication in TypeScript",
|
|
5
5
|
"author": "Pavel Borodaev",
|
|
6
6
|
"license": "Proprietary",
|
|
@@ -49,48 +49,52 @@
|
|
|
49
49
|
},
|
|
50
50
|
"sideEffects": false,
|
|
51
51
|
"sideEffects?": [],
|
|
52
|
+
"packageManager": "pnpm@10.21.0",
|
|
52
53
|
"scripts": {
|
|
53
|
-
"test": "npx vitest",
|
|
54
|
-
"
|
|
55
|
-
"
|
|
54
|
+
"test": "npx vitest --config=vitest.node.config.ts --no-cache",
|
|
55
|
+
"test:w": "npx vitest --config=vitest.node.config.ts --watch",
|
|
56
|
+
"test:v8": "npx vite",
|
|
56
57
|
"lint": "eslint . -f visualstudio --ext .ts,.tsx --report-unused-disable-directives --max-warnings 0",
|
|
57
|
-
"online": "vite --host",
|
|
58
58
|
"build": "tsc -b && vite build",
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"ncu": "ncu",
|
|
59
|
+
"pnpm:u": "pnpm update",
|
|
60
|
+
"pnpm:ou": "pnpm outdated",
|
|
61
|
+
"ncu:l": "ncu",
|
|
62
62
|
"ncu:u": "ncu -u",
|
|
63
63
|
"ncu:ud": "ncu -u --dev",
|
|
64
64
|
"nvm:la": "nvm list available",
|
|
65
|
-
"nvm:il": "nvm install lts"
|
|
65
|
+
"nvm:il": "nvm install lts",
|
|
66
|
+
"format": "prettier --write .",
|
|
67
|
+
"format:check": "prettier --check ."
|
|
66
68
|
},
|
|
67
69
|
"peerDependencies": {
|
|
68
|
-
"@actdim/utico": "^0.
|
|
70
|
+
"@actdim/utico": "^1.0.0",
|
|
69
71
|
"rxjs": "^7.8.2",
|
|
72
|
+
"dexie": "^4.2.0",
|
|
73
|
+
"moment": "^2.30.1",
|
|
70
74
|
"uuid": "^13.0.0"
|
|
71
75
|
},
|
|
72
76
|
"devDependencies": {
|
|
73
|
-
"@
|
|
74
|
-
"@types/
|
|
75
|
-
"@types/
|
|
76
|
-
"@typescript-eslint/eslint-plugin": "^8.46.
|
|
77
|
-
"@typescript-eslint/parser": "^8.46.
|
|
78
|
-
"
|
|
77
|
+
"@types/chai": "^5.2.3",
|
|
78
|
+
"@types/mocha": "^10.0.10",
|
|
79
|
+
"@types/node": "^24.10.0",
|
|
80
|
+
"@typescript-eslint/eslint-plugin": "^8.46.3",
|
|
81
|
+
"@typescript-eslint/parser": "^8.46.3",
|
|
82
|
+
"chai": "^6.2.0",
|
|
83
|
+
"eslint": "^9.39.1",
|
|
79
84
|
"eslint-config-prettier": "^10.1.8",
|
|
80
|
-
"eslint-formatter-visualstudio": "^
|
|
81
|
-
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
85
|
+
"eslint-formatter-visualstudio": "^9.0.1",
|
|
82
86
|
"eslint-plugin-prettier": "^5.5.4",
|
|
83
|
-
"globals": "^16.
|
|
84
|
-
"
|
|
87
|
+
"globals": "^16.5.0",
|
|
88
|
+
"mocha": "^11.7.5",
|
|
89
|
+
"npm-check-updates": "^19.1.2",
|
|
85
90
|
"prettier": "^3.6.2",
|
|
86
|
-
"prettier-plugin-classnames": "^0.8.
|
|
91
|
+
"prettier-plugin-classnames": "^0.8.5",
|
|
87
92
|
"shx": "^0.4.0",
|
|
88
|
-
"ts-node": "^10.9.2",
|
|
89
93
|
"typescript": "^5.9.3",
|
|
90
|
-
"typescript-eslint": "^8.46.
|
|
91
|
-
"vite": "^7.
|
|
94
|
+
"typescript-eslint": "^8.46.3",
|
|
95
|
+
"vite": "^7.2.2",
|
|
92
96
|
"vite-plugin-dts": "^4.5.4",
|
|
93
97
|
"vite-tsconfig-paths": "^5.1.4",
|
|
94
|
-
"vitest": "^
|
|
98
|
+
"vitest": "^4.0.8"
|
|
95
99
|
}
|
|
96
100
|
}
|