@pixotope/query 0.6.0 → 0.8.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/.turbo/turbo-build.log +10 -10
- package/.turbo/turbo-check-types.log +1 -1
- package/.turbo/turbo-test.log +11 -7
- package/CHANGELOG.md +13 -0
- package/dist/index.cjs +68 -71
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +50 -91
- package/dist/index.d.ts +50 -91
- package/dist/index.js +68 -71
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/factories.test.ts +65 -0
- package/src/factories.ts +48 -31
- package/src/proxyBinders.test.ts +42 -0
- package/src/proxyBinders.ts +8 -5
- package/src/useMutation.test.ts +106 -0
- package/src/useMutation.ts +87 -116
- package/src/useQuery.test.ts +77 -139
- package/src/useQuery.ts +5 -8
- package/src/useSubscription.test.ts +79 -0
- package/src/useSubscription.ts +23 -13
- package/src/useSubscriptionCore.ts +6 -3
- package/src/mock/useQuery.ts +0 -48
package/dist/index.d.cts
CHANGED
|
@@ -31,80 +31,34 @@ type UseQueryResult<TData = unknown, TError = unknown, TParams = void, TSelectDa
|
|
|
31
31
|
} & (Stateless extends true ? {} : WithData$1<TSelectData>);
|
|
32
32
|
declare const useQuery: <TData = unknown, TError = unknown, TParams = void, TSelected = TData, Stateless extends true | undefined = undefined>({ queryFn, ...options }: QueryOptions<TData, TError, TParams, TSelected, Stateless>) => UseQueryResult<TSelected, TError, TParams, TSelected, Stateless>;
|
|
33
33
|
|
|
34
|
-
type MutationFunction<TData = unknown, TParams = unknown> = (params: TParams,
|
|
35
|
-
interface MutationOptions<TData = unknown, TError = unknown, TParams = void> {
|
|
36
|
-
mutationFn: MutationFunction<TData, TParams>;
|
|
34
|
+
type MutationFunction<TData = unknown, TParams = unknown, TMetadata = unknown> = (params: TParams, meta?: TMetadata) => Promise<TData>;
|
|
35
|
+
interface MutationOptions<TData = unknown, TError = unknown, TParams = void, TMetadata = unknown> {
|
|
36
|
+
mutationFn: MutationFunction<TData, TParams, TMetadata>;
|
|
37
37
|
params?: TParams;
|
|
38
|
-
onSuccess?: (data: TData, variables: TParams) => Promise<unknown> | unknown;
|
|
39
|
-
onError?: (error: TMutationError<TError>, variables: TParams) => Promise<unknown> | unknown;
|
|
40
|
-
onSettled?: (data: TData | undefined, error: TMutationError<TError> | null, variables: TParams) => Promise<unknown> | unknown;
|
|
38
|
+
onSuccess?: (data: TData, variables: TParams, meta?: TMetadata) => Promise<unknown> | unknown;
|
|
39
|
+
onError?: (error: TMutationError<TError>, variables: TParams, meta?: TMetadata) => Promise<unknown> | unknown;
|
|
40
|
+
onSettled?: (data: TData | undefined, error: TMutationError<TError> | null, variables: TParams, meta?: TMetadata) => Promise<unknown> | unknown;
|
|
41
41
|
compareOrThrow?: (result: TData | TError) => boolean;
|
|
42
42
|
timeout?: number;
|
|
43
|
-
prepareParams?: (variables: TParams, defaults?: TParams) => TParams;
|
|
43
|
+
prepareParams?: (variables: TParams, defaults?: TParams, meta?: TMetadata) => TParams;
|
|
44
44
|
}
|
|
45
45
|
type TMutationError<TError> = TError | Error | null;
|
|
46
|
-
interface MutateOptions<TData = unknown, TError = unknown, TParams = void> {
|
|
47
|
-
onSuccess?: (data: TData, variables: TParams) => void;
|
|
48
|
-
onError?: (error: TMutationError<TError>, variables: TParams) => void;
|
|
49
|
-
onSettled?: (data: TData | undefined, error: TMutationError<TError> | null, variables: TParams) => void;
|
|
46
|
+
interface MutateOptions<TData = unknown, TError = unknown, TParams = void, TMetadata = unknown> {
|
|
47
|
+
onSuccess?: (data: TData, variables: TParams, meta?: TMetadata) => void;
|
|
48
|
+
onError?: (error: TMutationError<TError>, variables: TParams, meta?: TMetadata) => void;
|
|
49
|
+
onSettled?: (data: TData | undefined, error: TMutationError<TError> | null, variables: TParams, meta?: TMetadata) => void;
|
|
50
50
|
}
|
|
51
51
|
type MutationStatus = "idle" | "loading" | "success" | "error";
|
|
52
52
|
declare class ComparisonFailError<TPayload = unknown> extends Error {
|
|
53
53
|
readonly payload: TPayload;
|
|
54
54
|
constructor(message: string, payload: TPayload);
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
* providing extensive API to tap into the status and results of the mutation.
|
|
59
|
-
* @param mutationFn The mutation function to be called when the `mutate` function is called.
|
|
60
|
-
* `useMutation` does not care about what the function does, all it needs it a function that returns
|
|
61
|
-
* a promise.
|
|
62
|
-
* @param options Options to configure the mutation.
|
|
63
|
-
* @returns An object with the following properties:
|
|
64
|
-
* - `mutateAsync`: A function that takes in the variables and returns a promise that resolves to the
|
|
65
|
-
* result of the mutation. This function can be awaited to get the result of the mutation. Callbacks can
|
|
66
|
-
* be passed to this function to be called when the mutation is successful or when it fails. It's good idea
|
|
67
|
-
* to wrap this function in a try/catch block.
|
|
68
|
-
* - `mutate`: A function that takes in the variables and returns nothing. This function does not
|
|
69
|
-
* return a promise. Callbacks can be passed to this function to be called when the mutation is
|
|
70
|
-
* successful or when it fails.
|
|
71
|
-
* - `status`: The status of the mutation. Can be one of `idle`, `loading`, `success` or `error`.
|
|
72
|
-
* - `result`: The result of the mutation. This is undefined until the mutation is successful.
|
|
73
|
-
* - `reset`: A function that resets the mutation to the initial state.
|
|
74
|
-
* - `error`: The error object if the mutation has failed.
|
|
75
|
-
* @example
|
|
76
|
-
* ```typescript
|
|
77
|
-
* const mutationRes = useMutation({
|
|
78
|
-
* mutationFn: (variables) => {
|
|
79
|
-
* return ZMQHelper.callSomethingAsync(variables)
|
|
80
|
-
* },
|
|
81
|
-
* onSuccess: (data) => {
|
|
82
|
-
* // do something with the result
|
|
83
|
-
* },
|
|
84
|
-
* onError: (error) => {
|
|
85
|
-
* // do something with the error
|
|
86
|
-
* },
|
|
87
|
-
* onSettled: (data, error) => {
|
|
88
|
-
* // do something when the mutation is done
|
|
89
|
-
* }});
|
|
90
|
-
*
|
|
91
|
-
* // call the mutation
|
|
92
|
-
* const res = await mutationRes.mutateAsync({ foo: "bar" });
|
|
93
|
-
* // OR
|
|
94
|
-
* mutationRes.mutate({ foo: "bar" }, {
|
|
95
|
-
* onSuccess: (data) => {
|
|
96
|
-
* // do something with the result
|
|
97
|
-
* // for example show a toast message
|
|
98
|
-
* // stop local loading state
|
|
99
|
-
* });
|
|
100
|
-
* ```
|
|
101
|
-
*/
|
|
102
|
-
declare const useMutation: <TData = unknown, TError = unknown, TParams = void>(options: MutationOptions<TData, TError, TParams>) => {
|
|
103
|
-
mutateAsync: (params: TParams, overrideTargetMachine?: string) => Promise<TData>;
|
|
56
|
+
declare const useMutation: <TData = unknown, TError = unknown, TParams = void, TMetadata = unknown>(options: MutationOptions<TData, TError, TParams, TMetadata>) => {
|
|
57
|
+
mutateAsync: (params: TParams, meta?: TMetadata) => Promise<TData>;
|
|
104
58
|
status: MutationStatus;
|
|
105
59
|
result: TData | undefined;
|
|
106
|
-
mutate: (variables: TParams, options?: MutateOptions<TData, TError, TParams> & {
|
|
107
|
-
|
|
60
|
+
mutate: (variables: TParams, options?: MutateOptions<TData, TError, TParams, TMetadata> & {
|
|
61
|
+
meta?: TMetadata;
|
|
108
62
|
}) => void;
|
|
109
63
|
reset: () => void;
|
|
110
64
|
error: TMutationError<TError>;
|
|
@@ -116,36 +70,38 @@ type MutationInfo<TData, TError, TParams> = {
|
|
|
116
70
|
params: TParams;
|
|
117
71
|
};
|
|
118
72
|
type FnToParamsBase = Record<string, MutationInfo<unknown, unknown, unknown>>;
|
|
119
|
-
type TPromiseFunction<TResponse, TParams> = (args: Omit<ZMQClient.Call<TResponse, {
|
|
73
|
+
type TPromiseFunction<TResponse, TParams, TExtraParams> = (args: Omit<ZMQClient.Call<TResponse, {
|
|
120
74
|
functionName: string;
|
|
121
75
|
parameters: TParams;
|
|
122
76
|
options?: Omit<TSocketServerCallOptions, "toCallIfNoResponse">;
|
|
123
|
-
}>, "id">
|
|
124
|
-
|
|
125
|
-
|
|
77
|
+
}>, "id"> & {
|
|
78
|
+
meta?: TExtraParams;
|
|
79
|
+
}) => Promise<TResponse>;
|
|
80
|
+
declare const useCallMutationBase: <TFnToParams extends FnToParamsBase, TData = unknown, TError = unknown, TParams = unknown, TMetadata = unknown>(promiseFunc: TPromiseFunction<TData, TParams, TMetadata>, functionName: keyof TFnToParams, service: (meta?: TMetadata) => string, options?: Omit<MutationOptions<TData, TError, TParams, TMetadata>, "mutationFn">) => {
|
|
81
|
+
mutateAsync: (params: TParams, meta?: TMetadata | undefined) => Promise<TData>;
|
|
126
82
|
status: "idle" | "loading" | "success" | "error";
|
|
127
83
|
result: TData | undefined;
|
|
128
|
-
mutate: (variables: TParams, options?: (MutateOptions<TData, TError, TParams> & {
|
|
129
|
-
|
|
84
|
+
mutate: (variables: TParams, options?: (MutateOptions<TData, TError, TParams, TMetadata> & {
|
|
85
|
+
meta?: TMetadata | undefined;
|
|
130
86
|
}) | undefined) => void;
|
|
131
87
|
reset: () => void;
|
|
132
88
|
error: Error | TError | null;
|
|
133
89
|
};
|
|
134
|
-
declare function buildMutationHook<TFnToParams extends FnToParamsBase>(promiseFunc: TPromiseFunction<unknown, unknown>, genTargetService: (
|
|
135
|
-
|
|
136
|
-
}) => {
|
|
137
|
-
mutateAsync: (params: TFnToParams[TFn]["params"], overrideTargetMachine?: string) => Promise<TFnToParams[TFn]["data"]>;
|
|
90
|
+
declare function buildMutationHook<TFnToParams extends FnToParamsBase, TMetadata = unknown>(promiseFunc: TPromiseFunction<unknown, unknown, unknown>, genTargetService: (meta?: TMetadata) => string): <TFn extends keyof TFnToParams>(func: TFn, options?: Parameters<typeof useCallMutationBase<TFnToParams, TFnToParams[TFn]["data"], TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TMetadata>>[3]) => {
|
|
91
|
+
mutateAsync: (params: TFnToParams[TFn]["params"], meta?: TMetadata | undefined) => Promise<TFnToParams[TFn]["data"]>;
|
|
138
92
|
status: "idle" | "loading" | "success" | "error";
|
|
139
93
|
result: TFnToParams[TFn]["data"] | undefined;
|
|
140
|
-
mutate: (variables: TFnToParams[TFn]["params"], options?: (MutateOptions<TFnToParams[TFn]["data"], TFnToParams[TFn]["error"], TFnToParams[TFn]["params"]> & {
|
|
141
|
-
|
|
94
|
+
mutate: (variables: TFnToParams[TFn]["params"], options?: (MutateOptions<TFnToParams[TFn]["data"], TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TMetadata> & {
|
|
95
|
+
meta?: TMetadata | undefined;
|
|
142
96
|
}) | undefined) => void;
|
|
143
97
|
reset: () => void;
|
|
144
98
|
error: Error | TFnToParams[TFn]["error"] | null;
|
|
145
99
|
};
|
|
146
|
-
declare const useCallQueryBase: <TFnToParams extends FnToParamsBase, TData = unknown, TError = unknown, TParams = unknown, TSelect = TData>(promiseFunction: TPromiseFunction<TData, TParams>, functionName: keyof TFnToParams, params: TParams, service: string, options?: Omit<QueryOptions<TData, TError, TParams, TSelect>, "queryFn">
|
|
147
|
-
|
|
148
|
-
|
|
100
|
+
declare const useCallQueryBase: <TFnToParams extends FnToParamsBase, TData = unknown, TError = unknown, TParams = unknown, TSelect = TData, TMetadata = unknown>(promiseFunction: TPromiseFunction<TData, TParams, TMetadata>, functionName: keyof TFnToParams, params: TParams, service: (meta?: TMetadata) => string, options?: Omit<QueryOptions<TData, TError, TParams, TSelect>, "queryFn"> & {
|
|
101
|
+
meta?: TMetadata;
|
|
102
|
+
}) => UseQueryResult<TSelect, TError, TParams, TSelect, undefined>;
|
|
103
|
+
declare function buildQueryHook<TFnToParams extends FnToParamsBase, TMetadata = unknown>(promiseFunction: TPromiseFunction<unknown, unknown, unknown>, getTargetService: (meta?: TMetadata) => string): <TFn extends keyof TFnToParams, TSelect = TFnToParams[TFn]["data"]>(func: TFn, params: TFnToParams[TFn]["params"], options?: Parameters<typeof useCallQueryBase<TFnToParams, TFnToParams[TFn]["data"], TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TSelect, TMetadata>>[4] & {
|
|
104
|
+
meta?: TMetadata;
|
|
149
105
|
}) => UseQueryResult<TSelect, TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TSelect, undefined>;
|
|
150
106
|
|
|
151
107
|
/**
|
|
@@ -154,7 +110,7 @@ declare function buildQueryHook<TFnToParams extends FnToParamsBase>(promiseFunct
|
|
|
154
110
|
* @description useSubscriptionCore | This hook handle core subscription logic
|
|
155
111
|
* and provides a way to subscribe and unsubscribe to a topic via any callback
|
|
156
112
|
*/
|
|
157
|
-
type SubscriptionState = "idle" | "subscribed" | "subscribing";
|
|
113
|
+
type SubscriptionState = "idle" | "subscribed" | "subscribing" | "error";
|
|
158
114
|
type MessageHandler<TMessage> = (message: TMessage) => void;
|
|
159
115
|
type Connection = {
|
|
160
116
|
acknowledge: () => void;
|
|
@@ -178,8 +134,9 @@ type SubscriptionCoreOptions<TData, TMessage = TData, Stateless extends true | u
|
|
|
178
134
|
*/
|
|
179
135
|
enabled?: boolean;
|
|
180
136
|
/**
|
|
181
|
-
* @description Function that will be called
|
|
182
|
-
*
|
|
137
|
+
* @description Function that will be called before the message is processed.
|
|
138
|
+
* Returning `true` will cause the message to not be set to state and call {@link onError} if provided.
|
|
139
|
+
* Status will be set to `error`.
|
|
183
140
|
*/
|
|
184
141
|
compareOrThrow?: (data: TMessage) => boolean;
|
|
185
142
|
/**
|
|
@@ -230,32 +187,34 @@ type SubscriptionCoreReturnType<TData, Stateless extends true | undefined> = {
|
|
|
230
187
|
*/
|
|
231
188
|
declare function useSubscriptionCore<TData = unknown, TMessage = TData, Stateless extends true | undefined = undefined>(options: SubscriptionCoreOptions<TData, TMessage, Stateless>): SubscriptionCoreReturnType<TData, Stateless>;
|
|
232
189
|
|
|
233
|
-
type SubscriptionOptions<TData, TMessage = unknown, Stateless extends true | undefined = undefined> = Omit<SubscriptionCoreOptions<TData, TMessage, Stateless>, "subscriberFn"> & {
|
|
190
|
+
type SubscriptionOptions<TData, TMessage = unknown, Stateless extends true | undefined = undefined, TMetadata extends {} = {}> = Omit<SubscriptionCoreOptions<TData, TMessage, Stateless>, "subscriberFn"> & {
|
|
234
191
|
service: string;
|
|
235
192
|
topic: string;
|
|
236
193
|
maxDownwardDepth?: number;
|
|
194
|
+
} & {
|
|
195
|
+
meta?: TMetadata;
|
|
237
196
|
};
|
|
238
|
-
type TSubscriptionHandlerFunction<TMessage> = (opts: {
|
|
197
|
+
type TSubscriptionHandlerFunction<TMessage, TMetadata extends {} = {}> = (opts: {
|
|
239
198
|
service: string;
|
|
240
199
|
name: string;
|
|
241
200
|
callback: (message: TMessage) => void;
|
|
242
201
|
maxDownwardDepth?: number;
|
|
202
|
+
} & {
|
|
203
|
+
meta?: TMetadata;
|
|
243
204
|
}) => () => void;
|
|
244
|
-
declare function useSubscription<TData = unknown, TMessage = TData, Stateless extends true | undefined = undefined>(subscriptionHandler: TSubscriptionHandlerFunction<TMessage>, options: SubscriptionOptions<TData, TMessage, Stateless>): SubscriptionCoreReturnType<TData, Stateless>;
|
|
245
|
-
declare function buildServiceSubscriptionHook(subscriptionHandler: TSubscriptionHandlerFunction<unknown>, targetMachine: (machine: string | undefined) => string): <TData, TMessage = TData, Stateless extends true | undefined = undefined>(options: Omit<SubscriptionOptions<TData, TMessage, Stateless>, "service"> & {
|
|
205
|
+
declare function useSubscription<TData = unknown, TMessage = TData, Stateless extends true | undefined = undefined, TMetadata extends {} = {}>(subscriptionHandler: TSubscriptionHandlerFunction<TMessage, TMetadata>, options: SubscriptionOptions<TData, TMessage, Stateless, TMetadata>): SubscriptionCoreReturnType<TData, Stateless>;
|
|
206
|
+
declare function buildServiceSubscriptionHook<TMetadata extends {} = {}>(subscriptionHandler: TSubscriptionHandlerFunction<unknown, TMetadata>, targetMachine: (machine: string | undefined) => string): <TData, TMessage = TData, Stateless extends true | undefined = undefined>(options: Omit<SubscriptionOptions<TData, TMessage, Stateless, TMetadata>, "service"> & {
|
|
246
207
|
machine?: string;
|
|
247
208
|
}) => SubscriptionCoreReturnType<TData, Stateless>;
|
|
248
209
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
name: string;
|
|
252
|
-
callback: (message: unknown) => void;
|
|
253
|
-
maxDownwardDepth?: number;
|
|
254
|
-
}) => () => void;
|
|
210
|
+
type TProxySubscriptionHandlerParams<TMetadata extends {} = {}> = Parameters<Parameters<typeof buildServiceSubscriptionHook<TMetadata>>[0]>[0];
|
|
211
|
+
declare function bindClientSocketProxy(socketClientProxy: ZMQProxyWSClient): (args: TProxySubscriptionHandlerParams) => () => void;
|
|
255
212
|
declare function bindPromiseFunction(clientSocketProxy: ZMQProxyWSClient): (args: Omit<_pixotope_zmq_client.ZMQClient.Call<unknown, {
|
|
256
213
|
functionName: string;
|
|
257
214
|
parameters: unknown;
|
|
258
215
|
options?: Omit<_pixotope_zmq_client.TSocketServerCallOptions, "toCallIfNoResponse">;
|
|
259
|
-
}>, "id">
|
|
216
|
+
}>, "id"> & {
|
|
217
|
+
meta?: unknown;
|
|
218
|
+
}) => Promise<unknown>;
|
|
260
219
|
|
|
261
|
-
export { ComparisonFailError, type Connection, type MessageHandler, type MutateOptions, type MutationFunction, type MutationInfo, type MutationOptions, type QueryOptions, type SubscriptionCoreOptions, type SubscriptionCoreReturnType, type SubscriptionOptions, type TPromiseFunction, type TSubscriptionHandlerFunction, type UseQueryResult, bindClientSocketProxy, bindPromiseFunction, buildMutationHook, buildQueryHook, buildServiceSubscriptionHook, useMutation, useQuery, useSubscription, useSubscriptionCore };
|
|
220
|
+
export { ComparisonFailError, type Connection, type MessageHandler, type MutateOptions, type MutationFunction, type MutationInfo, type MutationOptions, type QueryOptions, type SubscriptionCoreOptions, type SubscriptionCoreReturnType, type SubscriptionOptions, type TPromiseFunction, type TProxySubscriptionHandlerParams, type TSubscriptionHandlerFunction, type UseQueryResult, bindClientSocketProxy, bindPromiseFunction, buildMutationHook, buildQueryHook, buildServiceSubscriptionHook, useMutation, useQuery, useSubscription, useSubscriptionCore };
|
package/dist/index.d.ts
CHANGED
|
@@ -31,80 +31,34 @@ type UseQueryResult<TData = unknown, TError = unknown, TParams = void, TSelectDa
|
|
|
31
31
|
} & (Stateless extends true ? {} : WithData$1<TSelectData>);
|
|
32
32
|
declare const useQuery: <TData = unknown, TError = unknown, TParams = void, TSelected = TData, Stateless extends true | undefined = undefined>({ queryFn, ...options }: QueryOptions<TData, TError, TParams, TSelected, Stateless>) => UseQueryResult<TSelected, TError, TParams, TSelected, Stateless>;
|
|
33
33
|
|
|
34
|
-
type MutationFunction<TData = unknown, TParams = unknown> = (params: TParams,
|
|
35
|
-
interface MutationOptions<TData = unknown, TError = unknown, TParams = void> {
|
|
36
|
-
mutationFn: MutationFunction<TData, TParams>;
|
|
34
|
+
type MutationFunction<TData = unknown, TParams = unknown, TMetadata = unknown> = (params: TParams, meta?: TMetadata) => Promise<TData>;
|
|
35
|
+
interface MutationOptions<TData = unknown, TError = unknown, TParams = void, TMetadata = unknown> {
|
|
36
|
+
mutationFn: MutationFunction<TData, TParams, TMetadata>;
|
|
37
37
|
params?: TParams;
|
|
38
|
-
onSuccess?: (data: TData, variables: TParams) => Promise<unknown> | unknown;
|
|
39
|
-
onError?: (error: TMutationError<TError>, variables: TParams) => Promise<unknown> | unknown;
|
|
40
|
-
onSettled?: (data: TData | undefined, error: TMutationError<TError> | null, variables: TParams) => Promise<unknown> | unknown;
|
|
38
|
+
onSuccess?: (data: TData, variables: TParams, meta?: TMetadata) => Promise<unknown> | unknown;
|
|
39
|
+
onError?: (error: TMutationError<TError>, variables: TParams, meta?: TMetadata) => Promise<unknown> | unknown;
|
|
40
|
+
onSettled?: (data: TData | undefined, error: TMutationError<TError> | null, variables: TParams, meta?: TMetadata) => Promise<unknown> | unknown;
|
|
41
41
|
compareOrThrow?: (result: TData | TError) => boolean;
|
|
42
42
|
timeout?: number;
|
|
43
|
-
prepareParams?: (variables: TParams, defaults?: TParams) => TParams;
|
|
43
|
+
prepareParams?: (variables: TParams, defaults?: TParams, meta?: TMetadata) => TParams;
|
|
44
44
|
}
|
|
45
45
|
type TMutationError<TError> = TError | Error | null;
|
|
46
|
-
interface MutateOptions<TData = unknown, TError = unknown, TParams = void> {
|
|
47
|
-
onSuccess?: (data: TData, variables: TParams) => void;
|
|
48
|
-
onError?: (error: TMutationError<TError>, variables: TParams) => void;
|
|
49
|
-
onSettled?: (data: TData | undefined, error: TMutationError<TError> | null, variables: TParams) => void;
|
|
46
|
+
interface MutateOptions<TData = unknown, TError = unknown, TParams = void, TMetadata = unknown> {
|
|
47
|
+
onSuccess?: (data: TData, variables: TParams, meta?: TMetadata) => void;
|
|
48
|
+
onError?: (error: TMutationError<TError>, variables: TParams, meta?: TMetadata) => void;
|
|
49
|
+
onSettled?: (data: TData | undefined, error: TMutationError<TError> | null, variables: TParams, meta?: TMetadata) => void;
|
|
50
50
|
}
|
|
51
51
|
type MutationStatus = "idle" | "loading" | "success" | "error";
|
|
52
52
|
declare class ComparisonFailError<TPayload = unknown> extends Error {
|
|
53
53
|
readonly payload: TPayload;
|
|
54
54
|
constructor(message: string, payload: TPayload);
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
* providing extensive API to tap into the status and results of the mutation.
|
|
59
|
-
* @param mutationFn The mutation function to be called when the `mutate` function is called.
|
|
60
|
-
* `useMutation` does not care about what the function does, all it needs it a function that returns
|
|
61
|
-
* a promise.
|
|
62
|
-
* @param options Options to configure the mutation.
|
|
63
|
-
* @returns An object with the following properties:
|
|
64
|
-
* - `mutateAsync`: A function that takes in the variables and returns a promise that resolves to the
|
|
65
|
-
* result of the mutation. This function can be awaited to get the result of the mutation. Callbacks can
|
|
66
|
-
* be passed to this function to be called when the mutation is successful or when it fails. It's good idea
|
|
67
|
-
* to wrap this function in a try/catch block.
|
|
68
|
-
* - `mutate`: A function that takes in the variables and returns nothing. This function does not
|
|
69
|
-
* return a promise. Callbacks can be passed to this function to be called when the mutation is
|
|
70
|
-
* successful or when it fails.
|
|
71
|
-
* - `status`: The status of the mutation. Can be one of `idle`, `loading`, `success` or `error`.
|
|
72
|
-
* - `result`: The result of the mutation. This is undefined until the mutation is successful.
|
|
73
|
-
* - `reset`: A function that resets the mutation to the initial state.
|
|
74
|
-
* - `error`: The error object if the mutation has failed.
|
|
75
|
-
* @example
|
|
76
|
-
* ```typescript
|
|
77
|
-
* const mutationRes = useMutation({
|
|
78
|
-
* mutationFn: (variables) => {
|
|
79
|
-
* return ZMQHelper.callSomethingAsync(variables)
|
|
80
|
-
* },
|
|
81
|
-
* onSuccess: (data) => {
|
|
82
|
-
* // do something with the result
|
|
83
|
-
* },
|
|
84
|
-
* onError: (error) => {
|
|
85
|
-
* // do something with the error
|
|
86
|
-
* },
|
|
87
|
-
* onSettled: (data, error) => {
|
|
88
|
-
* // do something when the mutation is done
|
|
89
|
-
* }});
|
|
90
|
-
*
|
|
91
|
-
* // call the mutation
|
|
92
|
-
* const res = await mutationRes.mutateAsync({ foo: "bar" });
|
|
93
|
-
* // OR
|
|
94
|
-
* mutationRes.mutate({ foo: "bar" }, {
|
|
95
|
-
* onSuccess: (data) => {
|
|
96
|
-
* // do something with the result
|
|
97
|
-
* // for example show a toast message
|
|
98
|
-
* // stop local loading state
|
|
99
|
-
* });
|
|
100
|
-
* ```
|
|
101
|
-
*/
|
|
102
|
-
declare const useMutation: <TData = unknown, TError = unknown, TParams = void>(options: MutationOptions<TData, TError, TParams>) => {
|
|
103
|
-
mutateAsync: (params: TParams, overrideTargetMachine?: string) => Promise<TData>;
|
|
56
|
+
declare const useMutation: <TData = unknown, TError = unknown, TParams = void, TMetadata = unknown>(options: MutationOptions<TData, TError, TParams, TMetadata>) => {
|
|
57
|
+
mutateAsync: (params: TParams, meta?: TMetadata) => Promise<TData>;
|
|
104
58
|
status: MutationStatus;
|
|
105
59
|
result: TData | undefined;
|
|
106
|
-
mutate: (variables: TParams, options?: MutateOptions<TData, TError, TParams> & {
|
|
107
|
-
|
|
60
|
+
mutate: (variables: TParams, options?: MutateOptions<TData, TError, TParams, TMetadata> & {
|
|
61
|
+
meta?: TMetadata;
|
|
108
62
|
}) => void;
|
|
109
63
|
reset: () => void;
|
|
110
64
|
error: TMutationError<TError>;
|
|
@@ -116,36 +70,38 @@ type MutationInfo<TData, TError, TParams> = {
|
|
|
116
70
|
params: TParams;
|
|
117
71
|
};
|
|
118
72
|
type FnToParamsBase = Record<string, MutationInfo<unknown, unknown, unknown>>;
|
|
119
|
-
type TPromiseFunction<TResponse, TParams> = (args: Omit<ZMQClient.Call<TResponse, {
|
|
73
|
+
type TPromiseFunction<TResponse, TParams, TExtraParams> = (args: Omit<ZMQClient.Call<TResponse, {
|
|
120
74
|
functionName: string;
|
|
121
75
|
parameters: TParams;
|
|
122
76
|
options?: Omit<TSocketServerCallOptions, "toCallIfNoResponse">;
|
|
123
|
-
}>, "id">
|
|
124
|
-
|
|
125
|
-
|
|
77
|
+
}>, "id"> & {
|
|
78
|
+
meta?: TExtraParams;
|
|
79
|
+
}) => Promise<TResponse>;
|
|
80
|
+
declare const useCallMutationBase: <TFnToParams extends FnToParamsBase, TData = unknown, TError = unknown, TParams = unknown, TMetadata = unknown>(promiseFunc: TPromiseFunction<TData, TParams, TMetadata>, functionName: keyof TFnToParams, service: (meta?: TMetadata) => string, options?: Omit<MutationOptions<TData, TError, TParams, TMetadata>, "mutationFn">) => {
|
|
81
|
+
mutateAsync: (params: TParams, meta?: TMetadata | undefined) => Promise<TData>;
|
|
126
82
|
status: "idle" | "loading" | "success" | "error";
|
|
127
83
|
result: TData | undefined;
|
|
128
|
-
mutate: (variables: TParams, options?: (MutateOptions<TData, TError, TParams> & {
|
|
129
|
-
|
|
84
|
+
mutate: (variables: TParams, options?: (MutateOptions<TData, TError, TParams, TMetadata> & {
|
|
85
|
+
meta?: TMetadata | undefined;
|
|
130
86
|
}) | undefined) => void;
|
|
131
87
|
reset: () => void;
|
|
132
88
|
error: Error | TError | null;
|
|
133
89
|
};
|
|
134
|
-
declare function buildMutationHook<TFnToParams extends FnToParamsBase>(promiseFunc: TPromiseFunction<unknown, unknown>, genTargetService: (
|
|
135
|
-
|
|
136
|
-
}) => {
|
|
137
|
-
mutateAsync: (params: TFnToParams[TFn]["params"], overrideTargetMachine?: string) => Promise<TFnToParams[TFn]["data"]>;
|
|
90
|
+
declare function buildMutationHook<TFnToParams extends FnToParamsBase, TMetadata = unknown>(promiseFunc: TPromiseFunction<unknown, unknown, unknown>, genTargetService: (meta?: TMetadata) => string): <TFn extends keyof TFnToParams>(func: TFn, options?: Parameters<typeof useCallMutationBase<TFnToParams, TFnToParams[TFn]["data"], TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TMetadata>>[3]) => {
|
|
91
|
+
mutateAsync: (params: TFnToParams[TFn]["params"], meta?: TMetadata | undefined) => Promise<TFnToParams[TFn]["data"]>;
|
|
138
92
|
status: "idle" | "loading" | "success" | "error";
|
|
139
93
|
result: TFnToParams[TFn]["data"] | undefined;
|
|
140
|
-
mutate: (variables: TFnToParams[TFn]["params"], options?: (MutateOptions<TFnToParams[TFn]["data"], TFnToParams[TFn]["error"], TFnToParams[TFn]["params"]> & {
|
|
141
|
-
|
|
94
|
+
mutate: (variables: TFnToParams[TFn]["params"], options?: (MutateOptions<TFnToParams[TFn]["data"], TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TMetadata> & {
|
|
95
|
+
meta?: TMetadata | undefined;
|
|
142
96
|
}) | undefined) => void;
|
|
143
97
|
reset: () => void;
|
|
144
98
|
error: Error | TFnToParams[TFn]["error"] | null;
|
|
145
99
|
};
|
|
146
|
-
declare const useCallQueryBase: <TFnToParams extends FnToParamsBase, TData = unknown, TError = unknown, TParams = unknown, TSelect = TData>(promiseFunction: TPromiseFunction<TData, TParams>, functionName: keyof TFnToParams, params: TParams, service: string, options?: Omit<QueryOptions<TData, TError, TParams, TSelect>, "queryFn">
|
|
147
|
-
|
|
148
|
-
|
|
100
|
+
declare const useCallQueryBase: <TFnToParams extends FnToParamsBase, TData = unknown, TError = unknown, TParams = unknown, TSelect = TData, TMetadata = unknown>(promiseFunction: TPromiseFunction<TData, TParams, TMetadata>, functionName: keyof TFnToParams, params: TParams, service: (meta?: TMetadata) => string, options?: Omit<QueryOptions<TData, TError, TParams, TSelect>, "queryFn"> & {
|
|
101
|
+
meta?: TMetadata;
|
|
102
|
+
}) => UseQueryResult<TSelect, TError, TParams, TSelect, undefined>;
|
|
103
|
+
declare function buildQueryHook<TFnToParams extends FnToParamsBase, TMetadata = unknown>(promiseFunction: TPromiseFunction<unknown, unknown, unknown>, getTargetService: (meta?: TMetadata) => string): <TFn extends keyof TFnToParams, TSelect = TFnToParams[TFn]["data"]>(func: TFn, params: TFnToParams[TFn]["params"], options?: Parameters<typeof useCallQueryBase<TFnToParams, TFnToParams[TFn]["data"], TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TSelect, TMetadata>>[4] & {
|
|
104
|
+
meta?: TMetadata;
|
|
149
105
|
}) => UseQueryResult<TSelect, TFnToParams[TFn]["error"], TFnToParams[TFn]["params"], TSelect, undefined>;
|
|
150
106
|
|
|
151
107
|
/**
|
|
@@ -154,7 +110,7 @@ declare function buildQueryHook<TFnToParams extends FnToParamsBase>(promiseFunct
|
|
|
154
110
|
* @description useSubscriptionCore | This hook handle core subscription logic
|
|
155
111
|
* and provides a way to subscribe and unsubscribe to a topic via any callback
|
|
156
112
|
*/
|
|
157
|
-
type SubscriptionState = "idle" | "subscribed" | "subscribing";
|
|
113
|
+
type SubscriptionState = "idle" | "subscribed" | "subscribing" | "error";
|
|
158
114
|
type MessageHandler<TMessage> = (message: TMessage) => void;
|
|
159
115
|
type Connection = {
|
|
160
116
|
acknowledge: () => void;
|
|
@@ -178,8 +134,9 @@ type SubscriptionCoreOptions<TData, TMessage = TData, Stateless extends true | u
|
|
|
178
134
|
*/
|
|
179
135
|
enabled?: boolean;
|
|
180
136
|
/**
|
|
181
|
-
* @description Function that will be called
|
|
182
|
-
*
|
|
137
|
+
* @description Function that will be called before the message is processed.
|
|
138
|
+
* Returning `true` will cause the message to not be set to state and call {@link onError} if provided.
|
|
139
|
+
* Status will be set to `error`.
|
|
183
140
|
*/
|
|
184
141
|
compareOrThrow?: (data: TMessage) => boolean;
|
|
185
142
|
/**
|
|
@@ -230,32 +187,34 @@ type SubscriptionCoreReturnType<TData, Stateless extends true | undefined> = {
|
|
|
230
187
|
*/
|
|
231
188
|
declare function useSubscriptionCore<TData = unknown, TMessage = TData, Stateless extends true | undefined = undefined>(options: SubscriptionCoreOptions<TData, TMessage, Stateless>): SubscriptionCoreReturnType<TData, Stateless>;
|
|
232
189
|
|
|
233
|
-
type SubscriptionOptions<TData, TMessage = unknown, Stateless extends true | undefined = undefined> = Omit<SubscriptionCoreOptions<TData, TMessage, Stateless>, "subscriberFn"> & {
|
|
190
|
+
type SubscriptionOptions<TData, TMessage = unknown, Stateless extends true | undefined = undefined, TMetadata extends {} = {}> = Omit<SubscriptionCoreOptions<TData, TMessage, Stateless>, "subscriberFn"> & {
|
|
234
191
|
service: string;
|
|
235
192
|
topic: string;
|
|
236
193
|
maxDownwardDepth?: number;
|
|
194
|
+
} & {
|
|
195
|
+
meta?: TMetadata;
|
|
237
196
|
};
|
|
238
|
-
type TSubscriptionHandlerFunction<TMessage> = (opts: {
|
|
197
|
+
type TSubscriptionHandlerFunction<TMessage, TMetadata extends {} = {}> = (opts: {
|
|
239
198
|
service: string;
|
|
240
199
|
name: string;
|
|
241
200
|
callback: (message: TMessage) => void;
|
|
242
201
|
maxDownwardDepth?: number;
|
|
202
|
+
} & {
|
|
203
|
+
meta?: TMetadata;
|
|
243
204
|
}) => () => void;
|
|
244
|
-
declare function useSubscription<TData = unknown, TMessage = TData, Stateless extends true | undefined = undefined>(subscriptionHandler: TSubscriptionHandlerFunction<TMessage>, options: SubscriptionOptions<TData, TMessage, Stateless>): SubscriptionCoreReturnType<TData, Stateless>;
|
|
245
|
-
declare function buildServiceSubscriptionHook(subscriptionHandler: TSubscriptionHandlerFunction<unknown>, targetMachine: (machine: string | undefined) => string): <TData, TMessage = TData, Stateless extends true | undefined = undefined>(options: Omit<SubscriptionOptions<TData, TMessage, Stateless>, "service"> & {
|
|
205
|
+
declare function useSubscription<TData = unknown, TMessage = TData, Stateless extends true | undefined = undefined, TMetadata extends {} = {}>(subscriptionHandler: TSubscriptionHandlerFunction<TMessage, TMetadata>, options: SubscriptionOptions<TData, TMessage, Stateless, TMetadata>): SubscriptionCoreReturnType<TData, Stateless>;
|
|
206
|
+
declare function buildServiceSubscriptionHook<TMetadata extends {} = {}>(subscriptionHandler: TSubscriptionHandlerFunction<unknown, TMetadata>, targetMachine: (machine: string | undefined) => string): <TData, TMessage = TData, Stateless extends true | undefined = undefined>(options: Omit<SubscriptionOptions<TData, TMessage, Stateless, TMetadata>, "service"> & {
|
|
246
207
|
machine?: string;
|
|
247
208
|
}) => SubscriptionCoreReturnType<TData, Stateless>;
|
|
248
209
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
name: string;
|
|
252
|
-
callback: (message: unknown) => void;
|
|
253
|
-
maxDownwardDepth?: number;
|
|
254
|
-
}) => () => void;
|
|
210
|
+
type TProxySubscriptionHandlerParams<TMetadata extends {} = {}> = Parameters<Parameters<typeof buildServiceSubscriptionHook<TMetadata>>[0]>[0];
|
|
211
|
+
declare function bindClientSocketProxy(socketClientProxy: ZMQProxyWSClient): (args: TProxySubscriptionHandlerParams) => () => void;
|
|
255
212
|
declare function bindPromiseFunction(clientSocketProxy: ZMQProxyWSClient): (args: Omit<_pixotope_zmq_client.ZMQClient.Call<unknown, {
|
|
256
213
|
functionName: string;
|
|
257
214
|
parameters: unknown;
|
|
258
215
|
options?: Omit<_pixotope_zmq_client.TSocketServerCallOptions, "toCallIfNoResponse">;
|
|
259
|
-
}>, "id">
|
|
216
|
+
}>, "id"> & {
|
|
217
|
+
meta?: unknown;
|
|
218
|
+
}) => Promise<unknown>;
|
|
260
219
|
|
|
261
|
-
export { ComparisonFailError, type Connection, type MessageHandler, type MutateOptions, type MutationFunction, type MutationInfo, type MutationOptions, type QueryOptions, type SubscriptionCoreOptions, type SubscriptionCoreReturnType, type SubscriptionOptions, type TPromiseFunction, type TSubscriptionHandlerFunction, type UseQueryResult, bindClientSocketProxy, bindPromiseFunction, buildMutationHook, buildQueryHook, buildServiceSubscriptionHook, useMutation, useQuery, useSubscription, useSubscriptionCore };
|
|
220
|
+
export { ComparisonFailError, type Connection, type MessageHandler, type MutateOptions, type MutationFunction, type MutationInfo, type MutationOptions, type QueryOptions, type SubscriptionCoreOptions, type SubscriptionCoreReturnType, type SubscriptionOptions, type TPromiseFunction, type TProxySubscriptionHandlerParams, type TSubscriptionHandlerFunction, type UseQueryResult, bindClientSocketProxy, bindPromiseFunction, buildMutationHook, buildQueryHook, buildServiceSubscriptionHook, useMutation, useQuery, useSubscription, useSubscriptionCore };
|