@actdim/msgmesh 0.9.0
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/LICENSE +8 -0
- package/README.md +1 -0
- package/dist/msgBusCore.d.ts +114 -0
- package/dist/msgBusCore.d.ts.map +1 -0
- package/dist/msgBusCore.es.js +8 -0
- package/dist/msgBusCore.es.js.map +1 -0
- package/dist/msgBusFactory.d.ts +3 -0
- package/dist/msgBusFactory.d.ts.map +1 -0
- package/dist/msgBusFactory.es.js +238 -0
- package/dist/msgBusFactory.es.js.map +1 -0
- package/package.json +83 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Copyright (c) 2025 Pavel Borodaev
|
|
2
|
+
|
|
3
|
+
This software is publicly accessible but proprietary.
|
|
4
|
+
|
|
5
|
+
Permission is granted to use and reference this package for personal or internal purposes only.
|
|
6
|
+
You may not modify, redistribute, decompile, or create derivative works from this software, in whole or in part, without prior written permission from the author.
|
|
7
|
+
|
|
8
|
+
This software is provided "as is", without warranty of any kind.
|
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# @actdim/msgmesh
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { IsTuple, MaybePromise, Overwrite, Skip } from '@actdim/utico/typeCore';
|
|
2
|
+
export declare const $CG_IN = "in";
|
|
3
|
+
export declare const $CG_OUT = "out";
|
|
4
|
+
export declare const $CG_ERROR = "error";
|
|
5
|
+
export declare const $C_ERROR = "error";
|
|
6
|
+
export type InParam = {
|
|
7
|
+
[$CG_IN]: any;
|
|
8
|
+
};
|
|
9
|
+
export type OutParam = {
|
|
10
|
+
[$CG_OUT]: any;
|
|
11
|
+
};
|
|
12
|
+
export type ErrorPayload = {
|
|
13
|
+
error: any;
|
|
14
|
+
source?: any;
|
|
15
|
+
handled?: boolean;
|
|
16
|
+
};
|
|
17
|
+
export type ErrorParam<T extends ErrorPayload = ErrorPayload> = {
|
|
18
|
+
[$CG_ERROR]: T;
|
|
19
|
+
};
|
|
20
|
+
export type SystemChannelGroup = `${keyof InParam | keyof OutParam | keyof OutParam}`;
|
|
21
|
+
export type MsgChannelStruct = Partial<{
|
|
22
|
+
[group: string]: any;
|
|
23
|
+
} & InParam & OutParam & ErrorParam>;
|
|
24
|
+
export type MsgBusStruct = {
|
|
25
|
+
[channel: string]: MsgChannelStruct;
|
|
26
|
+
};
|
|
27
|
+
export type MsgBusStructBase = {
|
|
28
|
+
[$C_ERROR]: {
|
|
29
|
+
[$CG_IN]: ErrorPayload;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export type MsgBusStructFactory<TStruct extends TStructBase, TStructBase extends MsgBusStruct = MsgBusStruct> = {
|
|
33
|
+
[C in keyof TStruct]: TStruct[C] & ErrorParam;
|
|
34
|
+
};
|
|
35
|
+
export type InStruct<TStruct extends MsgBusStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends InParam ? TStruct[TChannel]["in"] : undefined;
|
|
36
|
+
export type OutStruct<TStruct extends MsgBusStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends OutParam ? TStruct[TChannel][keyof OutParam] : undefined;
|
|
37
|
+
export type MsgChannelConfig<TChannel> = {
|
|
38
|
+
replayCount?: number;
|
|
39
|
+
initialValues?: {
|
|
40
|
+
[TGroup in keyof TChannel]: TChannel[TGroup];
|
|
41
|
+
};
|
|
42
|
+
persistent?: boolean;
|
|
43
|
+
secure?: boolean;
|
|
44
|
+
federated?: boolean;
|
|
45
|
+
autoDeleteTimeout?: number;
|
|
46
|
+
noAck?: boolean;
|
|
47
|
+
maxConcurrentConsumers?: number;
|
|
48
|
+
};
|
|
49
|
+
export type MsgDispatchConfig = {
|
|
50
|
+
priority?: number;
|
|
51
|
+
fetchCount?: number;
|
|
52
|
+
};
|
|
53
|
+
export type MsgBusConfig<TStruct extends MsgBusStruct> = {
|
|
54
|
+
[TChannel in keyof TStruct]?: MsgChannelConfig<TStruct[TChannel]>;
|
|
55
|
+
};
|
|
56
|
+
export type MsgAddress<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel]> = {
|
|
57
|
+
channel: TChannel;
|
|
58
|
+
group?: TGroup;
|
|
59
|
+
topic?: string;
|
|
60
|
+
version?: string;
|
|
61
|
+
};
|
|
62
|
+
export type Msg<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel]> = {
|
|
63
|
+
address: MsgAddress<TStruct, TChannel, TGroup>;
|
|
64
|
+
payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];
|
|
65
|
+
requestId?: string;
|
|
66
|
+
traceId?: string;
|
|
67
|
+
id: string;
|
|
68
|
+
timestamp: number;
|
|
69
|
+
priority?: number;
|
|
70
|
+
persistent?: boolean;
|
|
71
|
+
};
|
|
72
|
+
export type MsgBusSubscriberParams<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel]> = MsgAddress<TStruct, TChannel, TGroup> & {
|
|
73
|
+
channelSelector?: string | ((channel: string) => boolean);
|
|
74
|
+
callback?: (msg: Msg<TStruct, TChannel, TGroup>) => void;
|
|
75
|
+
config?: MsgDispatchConfig;
|
|
76
|
+
filter?: (msg: Msg<TStruct, TChannel, TGroup>) => boolean;
|
|
77
|
+
signal?: AbortSignal;
|
|
78
|
+
};
|
|
79
|
+
export type MsgBusSubscriber<TStruct extends MsgBusStruct> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgBusSubscriberParams<TStruct, TChannel, TGroup>) => void;
|
|
80
|
+
export type MsgBusStreamer<TStruct extends MsgBusStruct> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgBusSubscriberParams<TStruct, TChannel, TGroup>) => AsyncIterableIterator<Msg<TStruct, TChannel, TGroup>>;
|
|
81
|
+
export type MsgBusAsyncSubscriberParams<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel]> = Skip<MsgBusSubscriberParams<TStruct, TChannel, TGroup>, "callback" | "filter">;
|
|
82
|
+
export type MsgBusAsyncSubscriber<TStruct extends MsgBusStruct> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgBusAsyncSubscriberParams<TStruct, TChannel, TGroup>) => Promise<Msg<TStruct, TChannel, TGroup>>;
|
|
83
|
+
export type MsgBusProviderParams<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel]> = Overwrite<MsgBusSubscriberParams<TStruct, TChannel, TGroup>, {
|
|
84
|
+
callback?: (msg: Msg<TStruct, TChannel, TGroup>) => MaybePromise<OutStruct<TStruct, TChannel>>;
|
|
85
|
+
}>;
|
|
86
|
+
export type MsgBusProvider<TStruct extends MsgBusStruct> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgBusProviderParams<TStruct, TChannel, TGroup>) => void;
|
|
87
|
+
export type MsgBusBinder<TStruct extends MsgBusStruct> = <TSourceChannel extends keyof TStruct, TTargetChannel extends keyof TStruct, TSourceGroup extends keyof TStruct[TSourceChannel] = typeof $CG_IN, TTargetGroup extends keyof TStruct[TTargetChannel] = typeof $CG_IN>(source: MsgBusSubscriberParams<TStruct, TSourceChannel, TSourceGroup>, target: MsgAddress<TStruct, TTargetChannel, TTargetGroup>) => void;
|
|
88
|
+
export type MsgBusDispatcherParams<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel]> = Overwrite<MsgBusSubscriberParams<TStruct, TChannel, TGroup>, {
|
|
89
|
+
payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];
|
|
90
|
+
payloadFn?: IsTuple<TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup]> extends true ? (fn: (...args: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup]) => void) => void : never;
|
|
91
|
+
traceId?: string;
|
|
92
|
+
priority?: number;
|
|
93
|
+
persistent?: boolean;
|
|
94
|
+
callback?: (msg: Msg<TStruct, TChannel, typeof $CG_OUT>) => void;
|
|
95
|
+
}>;
|
|
96
|
+
export type MsgBusAsyncDispatcherParams<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel]> = Skip<MsgBusDispatcherParams<TStruct, TChannel, TGroup>, "callback">;
|
|
97
|
+
export type MsgBusDispatcher<TStruct extends MsgBusStruct> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgBusDispatcherParams<TStruct, TChannel, TGroup>) => void;
|
|
98
|
+
export type MsgBusAsyncDispatcher<TStruct extends MsgBusStruct> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgBusAsyncDispatcherParams<TStruct, TChannel, TGroup>) => Promise<Msg<TStruct, TChannel, typeof $CG_OUT>>;
|
|
99
|
+
export type MsgChannelStructNormalized<TStruct extends MsgChannelStruct> = {
|
|
100
|
+
[G in keyof TStruct]: Awaited<TStruct[G]>;
|
|
101
|
+
};
|
|
102
|
+
export type MsgBusStructNormalized<TStruct extends MsgBusStruct> = {
|
|
103
|
+
[C in keyof TStruct]: MsgChannelStructNormalized<TStruct[C]>;
|
|
104
|
+
};
|
|
105
|
+
export type MsgBus<TStruct extends MsgBusStruct> = {
|
|
106
|
+
readonly config: MsgBusConfig<MsgBusStructNormalized<TStruct>>;
|
|
107
|
+
readonly on: MsgBusSubscriber<MsgBusStructNormalized<TStruct>>;
|
|
108
|
+
readonly onceAsync: MsgBusAsyncSubscriber<MsgBusStructNormalized<TStruct>>;
|
|
109
|
+
readonly stream: MsgBusStreamer<MsgBusStructNormalized<TStruct>>;
|
|
110
|
+
readonly provide: MsgBusProvider<MsgBusStructNormalized<TStruct>>;
|
|
111
|
+
readonly dispatch: MsgBusDispatcher<MsgBusStructNormalized<TStruct>>;
|
|
112
|
+
readonly dispatchAsync: MsgBusAsyncDispatcher<MsgBusStructNormalized<TStruct>>;
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=msgBusCore.d.ts.map
|
|
@@ -0,0 +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;CACnC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAE5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,YAAY,IAAI;KACpD,QAAQ,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,UAAU,CAClB,OAAO,SAAS,YAAY,GAAG,YAAY,EAC3C,QAAQ,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,EAC9C,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAChE;IACA,OAAO,EAAE,QAAQ,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAGF,MAAM,MAAM,GAAG,CACX,OAAO,SAAS,YAAY,GAAG,YAAY,EAC3C,QAAQ,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,EAC9C,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAChE;IACA,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,SAAS,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IAG7F,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAIF,MAAM,MAAM,sBAAsB,CAC9B,OAAO,SAAS,YAAY,GAAG,YAAY,EAC3C,QAAQ,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,EAC9C,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAChE,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG;IACxC,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;IAE1D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IACzD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC;IAC1D,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB,CAAC;AAGF,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,YAAY,IAAI,CACzD,QAAQ,SAAS,MAAM,OAAO,EAC9B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,MAAM,EAEtD,MAAM,EAAE,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,KACxD,IAAI,CAAC;AAGV,MAAM,MAAM,cAAc,CAAC,OAAO,SAAS,YAAY,IAAI,CACvD,QAAQ,SAAS,MAAM,OAAO,EAC9B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,MAAM,EAEtD,MAAM,EAAE,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,KACxD,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3D,MAAM,MAAM,2BAA2B,CACnC,OAAO,SAAS,YAAY,GAAG,YAAY,EAC3C,QAAQ,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,EAC9C,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAChE,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;AAGnF,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,YAAY,IAAI,CAC9D,QAAQ,SAAS,MAAM,OAAO,EAC9B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,MAAM,EAEtD,MAAM,EAAE,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,KAC7D,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAE7C,MAAM,MAAM,oBAAoB,CAC5B,OAAO,SAAS,YAAY,GAAG,YAAY,EAC3C,QAAQ,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,EAC9C,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAChE,SAAS,CACT,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EACjD;IAEI,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;CAClG,CACJ,CAAC;AAGF,MAAM,MAAM,cAAc,CAAC,OAAO,SAAS,YAAY,IAAI,CACvD,QAAQ,SAAS,MAAM,OAAO,EAC9B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,MAAM,EAEtD,MAAM,EAAE,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,KACtD,IAAI,CAAC;AAGV,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,YAAY,IAAI,CACrD,cAAc,SAAS,MAAM,OAAO,EACpC,cAAc,SAAS,MAAM,OAAO,EACpC,YAAY,SAAS,MAAM,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,MAAM,EAClE,YAAY,SAAS,MAAM,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,MAAM,EAElE,MAAM,EAAE,sBAAsB,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,CAAC,EACrE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,CAAC,KACxD,IAAI,CAAC;AAEV,MAAM,MAAM,sBAAsB,CAC9B,OAAO,SAAS,YAAY,GAAG,YAAY,EAC3C,QAAQ,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,EAC9C,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAChE,SAAS,CACT,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EACjD;IACI,OAAO,CAAC,EAAE,MAAM,SAAS,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7F,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,SAAS,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI,GAC9G,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,SAAS,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,IAAI,GACnH,KAAK,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,OAAO,CAAC,KAAK,IAAI,CAAC;CACpE,CACJ,CAAC;AAEF,MAAM,MAAM,2BAA2B,CACnC,OAAO,SAAS,YAAY,GAAG,YAAY,EAC3C,QAAQ,SAAS,MAAM,OAAO,GAAG,MAAM,OAAO,EAC9C,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAChE,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;AAGxE,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,YAAY,IAAI,CACzD,QAAQ,SAAS,MAAM,OAAO,EAC9B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,MAAM,EAEtD,MAAM,EAAE,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,KACxD,IAAI,CAAC;AAGV,MAAM,MAAM,qBAAqB,CAAC,OAAO,SAAS,YAAY,IAAI,CAC9D,QAAQ,SAAS,MAAM,OAAO,EAC9B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,MAAM,EAEtD,MAAM,EAAE,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,KAC7D,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC;AAErD,MAAM,MAAM,0BAA0B,CAAC,OAAO,SAAS,gBAAgB,IAAI;KACtE,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,YAAY,IAAI;KAC9D,CAAC,IAAI,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/D,CAAC;AAGF,MAAM,MAAM,MAAM,CAAC,OAAO,SAAS,YAAY,IAAI;IAC/C,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;IAE/D,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;IAE3E,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;IAEjE,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;IAGlE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;IACrE,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;CAClF,CAAC"}
|
|
@@ -0,0 +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;"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { MsgBus, MsgBusStruct, MsgBusConfig, MsgBusStructNormalized, MsgBusStructBase } from './msgBusCore';
|
|
2
|
+
export declare function createMsgBus<TStruct extends MsgBusStruct & MsgBusStructBase>(config?: MsgBusConfig<MsgBusStructNormalized<TStruct>>): MsgBus<TStruct>;
|
|
3
|
+
//# sourceMappingURL=msgBusFactory.d.ts.map
|
|
@@ -0,0 +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,mBAgSnI"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { $CG_OUT as C, $CG_ERROR as q, $CG_IN as g, $C_ERROR as A } from "./msgBusCore.es.js";
|
|
2
|
+
import { v4 as $ } from "uuid";
|
|
3
|
+
import { Subject as L } from "rxjs";
|
|
4
|
+
import { filter as M, take as _ } from "rxjs/operators";
|
|
5
|
+
const j = (r) => {
|
|
6
|
+
if (r == null)
|
|
7
|
+
return (i) => i == r;
|
|
8
|
+
if (r.startsWith("/") && r.endsWith("/")) {
|
|
9
|
+
r = r.substring(1, r.length - 1);
|
|
10
|
+
const i = new RegExp(r);
|
|
11
|
+
return (l) => i.test(l);
|
|
12
|
+
} else
|
|
13
|
+
return (i) => r === i;
|
|
14
|
+
}, B = ":";
|
|
15
|
+
function W(r) {
|
|
16
|
+
const i = "msgbus";
|
|
17
|
+
function l() {
|
|
18
|
+
return Date.now();
|
|
19
|
+
}
|
|
20
|
+
function E(e) {
|
|
21
|
+
return {
|
|
22
|
+
address: e.address,
|
|
23
|
+
requestId: e.requestId,
|
|
24
|
+
traceId: e.traceId,
|
|
25
|
+
id: e.id,
|
|
26
|
+
timestamp: e.timestamp,
|
|
27
|
+
priority: e.priority,
|
|
28
|
+
persistent: e.persistent
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function h(e, n) {
|
|
32
|
+
const t = {
|
|
33
|
+
error: n,
|
|
34
|
+
source: E(e)
|
|
35
|
+
};
|
|
36
|
+
let o;
|
|
37
|
+
o = {
|
|
38
|
+
address: {
|
|
39
|
+
channel: e.address.channel,
|
|
40
|
+
group: q,
|
|
41
|
+
topic: i
|
|
42
|
+
},
|
|
43
|
+
payload: t
|
|
44
|
+
}, f(o), o = {
|
|
45
|
+
address: {
|
|
46
|
+
channel: A,
|
|
47
|
+
group: g,
|
|
48
|
+
topic: i
|
|
49
|
+
},
|
|
50
|
+
payload: t
|
|
51
|
+
}, f(o);
|
|
52
|
+
}
|
|
53
|
+
const p = /* @__PURE__ */ new Map();
|
|
54
|
+
function k(e, n) {
|
|
55
|
+
return `${e}${B}${n}`;
|
|
56
|
+
}
|
|
57
|
+
function b(e, n) {
|
|
58
|
+
const t = k(e, n);
|
|
59
|
+
return p.has(t) || p.set(t, new L()), p.get(t);
|
|
60
|
+
}
|
|
61
|
+
function a(e) {
|
|
62
|
+
var v, w;
|
|
63
|
+
const n = String(e.channel), t = e.group == null ? g : String(e.group), o = b(n, t), c = j(e.topic), d = M(
|
|
64
|
+
(s) => (
|
|
65
|
+
// msg.address.channel === channel &&
|
|
66
|
+
// msg.address.group === group &&
|
|
67
|
+
c(s.address.topic) && (!e.filter || e.filter(s))
|
|
68
|
+
)
|
|
69
|
+
);
|
|
70
|
+
let u;
|
|
71
|
+
(v = e.config) != null && v.fetchCount ? u = o.pipe(d, _(e.config.fetchCount)) : u = o.pipe(d);
|
|
72
|
+
const S = u.subscribe({
|
|
73
|
+
next: (s) => {
|
|
74
|
+
try {
|
|
75
|
+
return e.callback(s);
|
|
76
|
+
} catch (O) {
|
|
77
|
+
h(s, O);
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
error: (s) => {
|
|
81
|
+
h(
|
|
82
|
+
{
|
|
83
|
+
address: {
|
|
84
|
+
channel: n,
|
|
85
|
+
group: t,
|
|
86
|
+
topic: e.topic
|
|
87
|
+
},
|
|
88
|
+
id: void 0,
|
|
89
|
+
// not a real message
|
|
90
|
+
timestamp: l()
|
|
91
|
+
},
|
|
92
|
+
s
|
|
93
|
+
);
|
|
94
|
+
},
|
|
95
|
+
complete: () => {
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
(w = e.signal) == null || w.addEventListener("abort", () => {
|
|
99
|
+
console.log(
|
|
100
|
+
`Listening aborted for channel: ${n}, group: ${t}, topic: ${e.topic}. Reason: ${e.signal.reason}`
|
|
101
|
+
), S.unsubscribe();
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
function f(e) {
|
|
105
|
+
const n = {
|
|
106
|
+
...e,
|
|
107
|
+
id: $(),
|
|
108
|
+
timestamp: l()
|
|
109
|
+
};
|
|
110
|
+
n.traceId == null && (n.traceId = $());
|
|
111
|
+
const t = String(n.address.channel);
|
|
112
|
+
n.address.group == null && (n.address.group = g);
|
|
113
|
+
const o = String(n.address.group);
|
|
114
|
+
return b(t, o).next(n), n;
|
|
115
|
+
}
|
|
116
|
+
function P(e) {
|
|
117
|
+
a(e);
|
|
118
|
+
}
|
|
119
|
+
function R(e) {
|
|
120
|
+
return new Promise((n, t) => {
|
|
121
|
+
var o;
|
|
122
|
+
try {
|
|
123
|
+
(o = e.signal) == null || o.addEventListener("abort", () => {
|
|
124
|
+
t(new Error("Cancelled", { cause: e.signal.reason }));
|
|
125
|
+
});
|
|
126
|
+
const c = {
|
|
127
|
+
...e,
|
|
128
|
+
config: {
|
|
129
|
+
...e.config,
|
|
130
|
+
fetchCount: 1
|
|
131
|
+
},
|
|
132
|
+
callback: (d) => {
|
|
133
|
+
n(d);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
a(c);
|
|
137
|
+
} catch (c) {
|
|
138
|
+
t(c);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
function I(e) {
|
|
143
|
+
const n = {
|
|
144
|
+
...e,
|
|
145
|
+
callback: async (t) => {
|
|
146
|
+
try {
|
|
147
|
+
const o = {
|
|
148
|
+
address: {
|
|
149
|
+
channel: t.address.channel,
|
|
150
|
+
group: C,
|
|
151
|
+
topic: t.address.topic
|
|
152
|
+
},
|
|
153
|
+
traceId: t.traceId,
|
|
154
|
+
requestId: t.id,
|
|
155
|
+
persistent: t.persistent,
|
|
156
|
+
priority: t.priority
|
|
157
|
+
}, c = await Promise.resolve(e.callback(t));
|
|
158
|
+
o.payload = c, f(o);
|
|
159
|
+
} catch (o) {
|
|
160
|
+
h(t, o);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
a(n);
|
|
165
|
+
}
|
|
166
|
+
function y(e) {
|
|
167
|
+
let n;
|
|
168
|
+
if (e.callback) {
|
|
169
|
+
const o = {
|
|
170
|
+
channel: e.channel,
|
|
171
|
+
group: C,
|
|
172
|
+
topic: e.topic,
|
|
173
|
+
config: {
|
|
174
|
+
...e.config,
|
|
175
|
+
fetchCount: 1
|
|
176
|
+
},
|
|
177
|
+
callback: (c) => {
|
|
178
|
+
e.callback(c);
|
|
179
|
+
},
|
|
180
|
+
filter: (c) => c.requestId === n.id && (!e.filter || e.filter(c))
|
|
181
|
+
// TODO: match topic?
|
|
182
|
+
};
|
|
183
|
+
a(o);
|
|
184
|
+
}
|
|
185
|
+
let t;
|
|
186
|
+
e.payloadFn ? e.payloadFn((o) => {
|
|
187
|
+
t = o;
|
|
188
|
+
}) : t = e.payload, n = f({
|
|
189
|
+
address: {
|
|
190
|
+
channel: e.channel,
|
|
191
|
+
group: e.group,
|
|
192
|
+
topic: e.topic
|
|
193
|
+
},
|
|
194
|
+
payload: t,
|
|
195
|
+
traceId: e.traceId,
|
|
196
|
+
persistent: e.persistent,
|
|
197
|
+
priority: e.priority
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
async function x(e) {
|
|
201
|
+
return new Promise((n, t) => {
|
|
202
|
+
var o;
|
|
203
|
+
try {
|
|
204
|
+
(o = e.signal) == null || o.addEventListener("abort", () => {
|
|
205
|
+
t(new Error("Cancelled", { cause: e.signal.reason }));
|
|
206
|
+
});
|
|
207
|
+
const c = {
|
|
208
|
+
...e,
|
|
209
|
+
callback: (d) => {
|
|
210
|
+
try {
|
|
211
|
+
n(d);
|
|
212
|
+
} catch (u) {
|
|
213
|
+
t(u);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
y(c);
|
|
218
|
+
} catch (c) {
|
|
219
|
+
t(c);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
config: r,
|
|
225
|
+
on: (e) => P(e),
|
|
226
|
+
onceAsync: (e) => R(e),
|
|
227
|
+
stream: (e) => {
|
|
228
|
+
throw new Error("Not implemented");
|
|
229
|
+
},
|
|
230
|
+
provide: (e) => I(e),
|
|
231
|
+
dispatch: (e) => y(e),
|
|
232
|
+
dispatchAsync: (e) => x(e)
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
export {
|
|
236
|
+
W as createMsgBus
|
|
237
|
+
};
|
|
238
|
+
//# sourceMappingURL=msgBusFactory.es.js.map
|
|
@@ -0,0 +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","_a","takeOp","sub","_b","msgData","uuid","on","onceAsync","res","rej","subParams","e","provide","msgIn","msgOut","$CG_OUT","payload","dispatch","args","dispatchAsync","dispatchParams"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@actdim/msgmesh",
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"description": "@actdim/msgmesh",
|
|
5
|
+
"author": "Pavel Borodaev",
|
|
6
|
+
"license": "Proprietary",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/actdim/msgmesh.git"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/actdim/msgmesh/issues"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/actdim/msgmesh/#readme",
|
|
16
|
+
"keywords": [
|
|
17
|
+
"typescript",
|
|
18
|
+
"msg-bus",
|
|
19
|
+
"service-bus",
|
|
20
|
+
"messaging",
|
|
21
|
+
"utility",
|
|
22
|
+
"utils",
|
|
23
|
+
"IOC",
|
|
24
|
+
"DI"
|
|
25
|
+
],
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"docs",
|
|
29
|
+
"README.md",
|
|
30
|
+
"LICENSE"
|
|
31
|
+
],
|
|
32
|
+
"files(src)": [
|
|
33
|
+
"src",
|
|
34
|
+
"docs",
|
|
35
|
+
"README.md",
|
|
36
|
+
"LICENSE"
|
|
37
|
+
],
|
|
38
|
+
"exports": {
|
|
39
|
+
"./*": {
|
|
40
|
+
"import": "./dist/*.es.js",
|
|
41
|
+
"types": "./dist/*.d.ts"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"typesVersions": {
|
|
45
|
+
"*": {
|
|
46
|
+
"*": [
|
|
47
|
+
"dist/*.d.ts"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"sideEffects": false,
|
|
52
|
+
"sideEffects?": [],
|
|
53
|
+
"scripts": {
|
|
54
|
+
"build": "tsc && vite build",
|
|
55
|
+
"test": "npx vitest",
|
|
56
|
+
"wtest": "npx vitest --watch",
|
|
57
|
+
"dtest": "node --inspect-brk node_modules/vitest/vitest.mjs run --poolOptions.threads.singleThread",
|
|
58
|
+
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0"
|
|
59
|
+
},
|
|
60
|
+
"peerDependencies": {
|
|
61
|
+
"rxjs": "^7.8.1",
|
|
62
|
+
"uuid": "^9.0.1"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@types/node": "^20.11.30",
|
|
66
|
+
"@types/uuid": "^9.0.7",
|
|
67
|
+
"@typescript-eslint/eslint-plugin": "^6.10.0",
|
|
68
|
+
"@typescript-eslint/parser": "^6.10.0",
|
|
69
|
+
"@vitejs/plugin-react-swc": "^3.5.0",
|
|
70
|
+
"eslint": "^8.53.0",
|
|
71
|
+
"eslint-import-resolver-typescript": "^4.3.4",
|
|
72
|
+
"path": "^0.12.7",
|
|
73
|
+
"tslib": "^2.8.1",
|
|
74
|
+
"typescript": "^5.8.3",
|
|
75
|
+
"vite": "^5.4.18",
|
|
76
|
+
"vite-plugin-dts": "^4.5.3",
|
|
77
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
78
|
+
"vitest": "^3.1.2"
|
|
79
|
+
},
|
|
80
|
+
"dependencies": {
|
|
81
|
+
"@actdim/utico": "^0.9.0"
|
|
82
|
+
}
|
|
83
|
+
}
|