@navios/react-query 0.5.2 → 0.6.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/CHANGELOG.md +51 -10
- package/README.md +405 -273
- package/dist/src/client/declare-client.d.mts +13 -4
- package/dist/src/client/declare-client.d.mts.map +1 -1
- package/dist/src/mutation/make-hook.d.mts +2 -2
- package/dist/src/mutation/make-hook.d.mts.map +1 -1
- package/dist/src/mutation/types.d.mts +12 -4
- package/dist/src/mutation/types.d.mts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/lib/_tsup-dts-rollup.d.mts +26 -8
- package/lib/_tsup-dts-rollup.d.ts +26 -8
- package/lib/index.js +51 -27
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +52 -28
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/declare-client.spec.mts +24 -5
- package/src/__tests__/make-mutation.spec.mts +150 -8
- package/src/client/declare-client.mts +33 -8
- package/src/mutation/make-hook.mts +96 -42
- package/src/mutation/types.mts +28 -6
|
@@ -7,6 +7,7 @@ import type { DataTag } from '@tanstack/react-query';
|
|
|
7
7
|
import type { EndpointFunctionArgs } from '@navios/builder';
|
|
8
8
|
import type { HttpMethod } from '@navios/builder';
|
|
9
9
|
import type { InfiniteData } from '@tanstack/react-query';
|
|
10
|
+
import type { MutationFunctionContext } from '@tanstack/react-query';
|
|
10
11
|
import type { NaviosZodRequest } from '@navios/builder';
|
|
11
12
|
import { NoInfer as NoInfer_2 } from '@tanstack/react-query';
|
|
12
13
|
import { ProcessResponseFunction as ProcessResponseFunction_2 } from '../index.mjs';
|
|
@@ -615,8 +616,8 @@ export { makeInfiniteQueryOptions as makeInfiniteQueryOptions_alias_2 }
|
|
|
615
616
|
* @param options - Mutation configuration including processResponse and callbacks
|
|
616
617
|
* @returns A hook function that returns mutation result with attached helpers
|
|
617
618
|
*/
|
|
618
|
-
declare function makeMutation<Config extends AnyEndpointConfig, TData = unknown, TVariables extends NaviosZodRequest<Config> = NaviosZodRequest<Config>, TResponse = z.output<Config['responseSchema']>, TContext = unknown, UseKey extends boolean = false>(endpoint: AbstractEndpoint<Config>, options: MutationParams<Config, TData, TVariables, TResponse, TContext, UseKey>): {
|
|
619
|
-
(keyParams: UseKey extends true ? UrlHasParams<Config["url"]> extends true ? UrlParams<Config["url"]> : never : never): UseMutationResult<TData, Error, NaviosZodRequest<Config
|
|
619
|
+
declare function makeMutation<Config extends AnyEndpointConfig, TData = unknown, TVariables extends NaviosZodRequest<Config> = NaviosZodRequest<Config>, TResponse = z.output<Config['responseSchema']>, TOnMutateResult = unknown, TContext = unknown, UseKey extends boolean = false>(endpoint: AbstractEndpoint<Config>, options: MutationParams<Config, TData, TVariables, TResponse, TOnMutateResult, TContext, UseKey>): {
|
|
620
|
+
(keyParams: UseKey extends true ? UrlHasParams<Config["url"]> extends true ? UrlParams<Config["url"]> : never : never): UseMutationResult<TData, Error, NaviosZodRequest<Config>, TOnMutateResult>;
|
|
620
621
|
useIsMutating(keyParams: UseKey extends true ? UrlHasParams<Config["url"]> extends true ? UrlParams<Config["url"]> : never : never): boolean;
|
|
621
622
|
mutationKey: (params: UrlHasParams<Config["url"]> extends infer T ? T extends UrlHasParams<Config["url"]> ? T extends true ? {
|
|
622
623
|
urlParams: UrlParams<Config["url"]>;
|
|
@@ -669,7 +670,7 @@ export { MutationArgs as MutationArgs_alias_2 }
|
|
|
669
670
|
/**
|
|
670
671
|
* Configuration for declaring a mutation endpoint.
|
|
671
672
|
*/
|
|
672
|
-
declare interface MutationConfig<Method extends 'POST' | 'PUT' | 'PATCH' | 'DELETE' = 'POST' | 'PUT' | 'PATCH' | 'DELETE', Url extends string = string, RequestSchema = Method extends 'DELETE' ? never : ZodObject, QuerySchema = unknown, Response extends ZodType = ZodType, ReqResult = z.output<Response>, Result = unknown, Context = unknown, UseKey extends boolean = false> {
|
|
673
|
+
declare interface MutationConfig<Method extends 'POST' | 'PUT' | 'PATCH' | 'DELETE' = 'POST' | 'PUT' | 'PATCH' | 'DELETE', Url extends string = string, RequestSchema = Method extends 'DELETE' ? never : ZodObject, QuerySchema = unknown, Response extends ZodType = ZodType, ReqResult = z.output<Response>, Result = unknown, TOnMutateResult = unknown, Context = unknown, UseKey extends boolean = false> {
|
|
673
674
|
method: Method;
|
|
674
675
|
url: Url;
|
|
675
676
|
querySchema?: QuerySchema;
|
|
@@ -677,9 +678,18 @@ declare interface MutationConfig<Method extends 'POST' | 'PUT' | 'PATCH' | 'DELE
|
|
|
677
678
|
requestSchema?: RequestSchema;
|
|
678
679
|
processResponse: ProcessResponseFunction<Result, ReqResult>;
|
|
679
680
|
useContext?: () => Context;
|
|
680
|
-
onSuccess?: (
|
|
681
|
-
|
|
681
|
+
onSuccess?: (data: Result, variables: MutationArgs<Url, RequestSchema, QuerySchema>, context: Context & MutationFunctionContext & {
|
|
682
|
+
onMutateResult: TOnMutateResult | undefined;
|
|
683
|
+
}) => void | Promise<void>;
|
|
684
|
+
onError?: (err: unknown, variables: MutationArgs<Url, RequestSchema, QuerySchema>, context: Context & MutationFunctionContext & {
|
|
685
|
+
onMutateResult: TOnMutateResult | undefined;
|
|
686
|
+
}) => void | Promise<void>;
|
|
687
|
+
onMutate?: (variables: MutationArgs<Url, RequestSchema, QuerySchema>, context: Context & MutationFunctionContext) => TOnMutateResult | Promise<TOnMutateResult>;
|
|
688
|
+
onSettled?: (data: Result | undefined, error: Error | null, variables: MutationArgs<Url, RequestSchema, QuerySchema>, context: Context & MutationFunctionContext & {
|
|
689
|
+
onMutateResult: TOnMutateResult | undefined;
|
|
690
|
+
}) => void | Promise<void>;
|
|
682
691
|
useKey?: UseKey;
|
|
692
|
+
meta?: Record<string, unknown>;
|
|
683
693
|
}
|
|
684
694
|
export { MutationConfig }
|
|
685
695
|
export { MutationConfig as MutationConfig_alias_1 }
|
|
@@ -708,15 +718,23 @@ export { mutationKeyCreator as mutationKeyCreator_alias_2 }
|
|
|
708
718
|
/**
|
|
709
719
|
* Base parameters for mutation configuration.
|
|
710
720
|
*/
|
|
711
|
-
declare interface MutationParams<Config extends AnyEndpointConfig, TData = unknown, TVariables = NaviosZodRequest<Config>, TResponse = z.output<Config['responseSchema']>, TContext = unknown, UseKey extends boolean = false> extends Omit<UseMutationOptions<TData, Error, TVariables>, 'mutationKey' | 'mutationFn' | 'onSuccess' | 'onError' | 'scope'> {
|
|
721
|
+
declare interface MutationParams<Config extends AnyEndpointConfig, TData = unknown, TVariables = NaviosZodRequest<Config>, TResponse = z.output<Config['responseSchema']>, TOnMutateResult = unknown, TContext = unknown, UseKey extends boolean = false> extends Omit<UseMutationOptions<TData, Error, TVariables>, 'mutationKey' | 'mutationFn' | 'onMutate' | 'onSuccess' | 'onError' | 'onSettled' | 'scope'> {
|
|
712
722
|
processResponse?: ProcessResponseFunction<TData, TResponse>;
|
|
713
723
|
/**
|
|
714
724
|
* React hooks that will prepare the context for the mutation onSuccess and onError
|
|
715
725
|
* callbacks. This is useful for when you want to use the context in the callbacks
|
|
716
726
|
*/
|
|
717
727
|
useContext?: () => TContext;
|
|
718
|
-
onSuccess?: (
|
|
719
|
-
|
|
728
|
+
onSuccess?: (data: TData, variables: TVariables, context: TContext & MutationFunctionContext & {
|
|
729
|
+
onMutateResult: TOnMutateResult | undefined;
|
|
730
|
+
}) => void | Promise<void>;
|
|
731
|
+
onError?: (err: unknown, variables: TVariables, context: TContext & MutationFunctionContext & {
|
|
732
|
+
onMutateResult: TOnMutateResult | undefined;
|
|
733
|
+
}) => void | Promise<void>;
|
|
734
|
+
onMutate?: (variables: TVariables, context: TContext & MutationFunctionContext) => TOnMutateResult | Promise<TOnMutateResult>;
|
|
735
|
+
onSettled?: (data: TData | undefined, error: Error | null, variables: TVariables, context: TContext & MutationFunctionContext & {
|
|
736
|
+
onMutateResult: TOnMutateResult | undefined;
|
|
737
|
+
}) => void | Promise<void>;
|
|
720
738
|
/**
|
|
721
739
|
* If true, we will create a mutation key that can be shared across the project.
|
|
722
740
|
*/
|
|
@@ -7,6 +7,7 @@ import type { DataTag } from '@tanstack/react-query';
|
|
|
7
7
|
import type { EndpointFunctionArgs } from '@navios/builder';
|
|
8
8
|
import type { HttpMethod } from '@navios/builder';
|
|
9
9
|
import type { InfiniteData } from '@tanstack/react-query';
|
|
10
|
+
import type { MutationFunctionContext } from '@tanstack/react-query';
|
|
10
11
|
import type { NaviosZodRequest } from '@navios/builder';
|
|
11
12
|
import { NoInfer as NoInfer_2 } from '@tanstack/react-query';
|
|
12
13
|
import { ProcessResponseFunction as ProcessResponseFunction_2 } from '../index.mjs';
|
|
@@ -615,8 +616,8 @@ export { makeInfiniteQueryOptions as makeInfiniteQueryOptions_alias_2 }
|
|
|
615
616
|
* @param options - Mutation configuration including processResponse and callbacks
|
|
616
617
|
* @returns A hook function that returns mutation result with attached helpers
|
|
617
618
|
*/
|
|
618
|
-
declare function makeMutation<Config extends AnyEndpointConfig, TData = unknown, TVariables extends NaviosZodRequest<Config> = NaviosZodRequest<Config>, TResponse = z.output<Config['responseSchema']>, TContext = unknown, UseKey extends boolean = false>(endpoint: AbstractEndpoint<Config>, options: MutationParams<Config, TData, TVariables, TResponse, TContext, UseKey>): {
|
|
619
|
-
(keyParams: UseKey extends true ? UrlHasParams<Config["url"]> extends true ? UrlParams<Config["url"]> : never : never): UseMutationResult<TData, Error, NaviosZodRequest<Config
|
|
619
|
+
declare function makeMutation<Config extends AnyEndpointConfig, TData = unknown, TVariables extends NaviosZodRequest<Config> = NaviosZodRequest<Config>, TResponse = z.output<Config['responseSchema']>, TOnMutateResult = unknown, TContext = unknown, UseKey extends boolean = false>(endpoint: AbstractEndpoint<Config>, options: MutationParams<Config, TData, TVariables, TResponse, TOnMutateResult, TContext, UseKey>): {
|
|
620
|
+
(keyParams: UseKey extends true ? UrlHasParams<Config["url"]> extends true ? UrlParams<Config["url"]> : never : never): UseMutationResult<TData, Error, NaviosZodRequest<Config>, TOnMutateResult>;
|
|
620
621
|
useIsMutating(keyParams: UseKey extends true ? UrlHasParams<Config["url"]> extends true ? UrlParams<Config["url"]> : never : never): boolean;
|
|
621
622
|
mutationKey: (params: UrlHasParams<Config["url"]> extends infer T ? T extends UrlHasParams<Config["url"]> ? T extends true ? {
|
|
622
623
|
urlParams: UrlParams<Config["url"]>;
|
|
@@ -669,7 +670,7 @@ export { MutationArgs as MutationArgs_alias_2 }
|
|
|
669
670
|
/**
|
|
670
671
|
* Configuration for declaring a mutation endpoint.
|
|
671
672
|
*/
|
|
672
|
-
declare interface MutationConfig<Method extends 'POST' | 'PUT' | 'PATCH' | 'DELETE' = 'POST' | 'PUT' | 'PATCH' | 'DELETE', Url extends string = string, RequestSchema = Method extends 'DELETE' ? never : ZodObject, QuerySchema = unknown, Response extends ZodType = ZodType, ReqResult = z.output<Response>, Result = unknown, Context = unknown, UseKey extends boolean = false> {
|
|
673
|
+
declare interface MutationConfig<Method extends 'POST' | 'PUT' | 'PATCH' | 'DELETE' = 'POST' | 'PUT' | 'PATCH' | 'DELETE', Url extends string = string, RequestSchema = Method extends 'DELETE' ? never : ZodObject, QuerySchema = unknown, Response extends ZodType = ZodType, ReqResult = z.output<Response>, Result = unknown, TOnMutateResult = unknown, Context = unknown, UseKey extends boolean = false> {
|
|
673
674
|
method: Method;
|
|
674
675
|
url: Url;
|
|
675
676
|
querySchema?: QuerySchema;
|
|
@@ -677,9 +678,18 @@ declare interface MutationConfig<Method extends 'POST' | 'PUT' | 'PATCH' | 'DELE
|
|
|
677
678
|
requestSchema?: RequestSchema;
|
|
678
679
|
processResponse: ProcessResponseFunction<Result, ReqResult>;
|
|
679
680
|
useContext?: () => Context;
|
|
680
|
-
onSuccess?: (
|
|
681
|
-
|
|
681
|
+
onSuccess?: (data: Result, variables: MutationArgs<Url, RequestSchema, QuerySchema>, context: Context & MutationFunctionContext & {
|
|
682
|
+
onMutateResult: TOnMutateResult | undefined;
|
|
683
|
+
}) => void | Promise<void>;
|
|
684
|
+
onError?: (err: unknown, variables: MutationArgs<Url, RequestSchema, QuerySchema>, context: Context & MutationFunctionContext & {
|
|
685
|
+
onMutateResult: TOnMutateResult | undefined;
|
|
686
|
+
}) => void | Promise<void>;
|
|
687
|
+
onMutate?: (variables: MutationArgs<Url, RequestSchema, QuerySchema>, context: Context & MutationFunctionContext) => TOnMutateResult | Promise<TOnMutateResult>;
|
|
688
|
+
onSettled?: (data: Result | undefined, error: Error | null, variables: MutationArgs<Url, RequestSchema, QuerySchema>, context: Context & MutationFunctionContext & {
|
|
689
|
+
onMutateResult: TOnMutateResult | undefined;
|
|
690
|
+
}) => void | Promise<void>;
|
|
682
691
|
useKey?: UseKey;
|
|
692
|
+
meta?: Record<string, unknown>;
|
|
683
693
|
}
|
|
684
694
|
export { MutationConfig }
|
|
685
695
|
export { MutationConfig as MutationConfig_alias_1 }
|
|
@@ -708,15 +718,23 @@ export { mutationKeyCreator as mutationKeyCreator_alias_2 }
|
|
|
708
718
|
/**
|
|
709
719
|
* Base parameters for mutation configuration.
|
|
710
720
|
*/
|
|
711
|
-
declare interface MutationParams<Config extends AnyEndpointConfig, TData = unknown, TVariables = NaviosZodRequest<Config>, TResponse = z.output<Config['responseSchema']>, TContext = unknown, UseKey extends boolean = false> extends Omit<UseMutationOptions<TData, Error, TVariables>, 'mutationKey' | 'mutationFn' | 'onSuccess' | 'onError' | 'scope'> {
|
|
721
|
+
declare interface MutationParams<Config extends AnyEndpointConfig, TData = unknown, TVariables = NaviosZodRequest<Config>, TResponse = z.output<Config['responseSchema']>, TOnMutateResult = unknown, TContext = unknown, UseKey extends boolean = false> extends Omit<UseMutationOptions<TData, Error, TVariables>, 'mutationKey' | 'mutationFn' | 'onMutate' | 'onSuccess' | 'onError' | 'onSettled' | 'scope'> {
|
|
712
722
|
processResponse?: ProcessResponseFunction<TData, TResponse>;
|
|
713
723
|
/**
|
|
714
724
|
* React hooks that will prepare the context for the mutation onSuccess and onError
|
|
715
725
|
* callbacks. This is useful for when you want to use the context in the callbacks
|
|
716
726
|
*/
|
|
717
727
|
useContext?: () => TContext;
|
|
718
|
-
onSuccess?: (
|
|
719
|
-
|
|
728
|
+
onSuccess?: (data: TData, variables: TVariables, context: TContext & MutationFunctionContext & {
|
|
729
|
+
onMutateResult: TOnMutateResult | undefined;
|
|
730
|
+
}) => void | Promise<void>;
|
|
731
|
+
onError?: (err: unknown, variables: TVariables, context: TContext & MutationFunctionContext & {
|
|
732
|
+
onMutateResult: TOnMutateResult | undefined;
|
|
733
|
+
}) => void | Promise<void>;
|
|
734
|
+
onMutate?: (variables: TVariables, context: TContext & MutationFunctionContext) => TOnMutateResult | Promise<TOnMutateResult>;
|
|
735
|
+
onSettled?: (data: TData | undefined, error: Error | null, variables: TVariables, context: TContext & MutationFunctionContext & {
|
|
736
|
+
onMutateResult: TOnMutateResult | undefined;
|
|
737
|
+
}) => void | Promise<void>;
|
|
720
738
|
/**
|
|
721
739
|
* If true, we will create a mutation key that can be shared across the project.
|
|
722
740
|
*/
|
package/lib/index.js
CHANGED
|
@@ -157,44 +157,63 @@ function makeMutation(endpoint, options) {
|
|
|
157
157
|
const mutationKey = createMutationKey(config, {
|
|
158
158
|
...options});
|
|
159
159
|
const result = (keyParams) => {
|
|
160
|
-
const queryClient = reactQuery.useQueryClient();
|
|
161
160
|
const {
|
|
162
161
|
useKey,
|
|
163
162
|
useContext,
|
|
163
|
+
onMutate,
|
|
164
164
|
onError,
|
|
165
165
|
onSuccess,
|
|
166
|
+
onSettled,
|
|
166
167
|
keyPrefix: _keyPrefix,
|
|
167
168
|
keySuffix: _keySuffix,
|
|
168
169
|
processResponse,
|
|
169
170
|
...rest
|
|
170
171
|
} = options;
|
|
171
|
-
const
|
|
172
|
-
return reactQuery.useMutation(
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
return processResponse ? processResponse(response) : response;
|
|
188
|
-
},
|
|
189
|
-
onSuccess: onSuccess ? (data, variables) => {
|
|
190
|
-
return onSuccess?.(queryClient, data, variables, context);
|
|
191
|
-
} : void 0,
|
|
192
|
-
onError: onError ? (err, variables) => {
|
|
193
|
-
return onError?.(queryClient, err, variables, context);
|
|
194
|
-
} : void 0
|
|
172
|
+
const ownContext = useContext?.() ?? {};
|
|
173
|
+
return reactQuery.useMutation({
|
|
174
|
+
...rest,
|
|
175
|
+
mutationKey: useKey ? mutationKey({
|
|
176
|
+
urlParams: keyParams
|
|
177
|
+
}) : void 0,
|
|
178
|
+
scope: useKey ? {
|
|
179
|
+
id: JSON.stringify(
|
|
180
|
+
mutationKey({
|
|
181
|
+
urlParams: keyParams
|
|
182
|
+
})
|
|
183
|
+
)
|
|
184
|
+
} : void 0,
|
|
185
|
+
async mutationFn(params) {
|
|
186
|
+
const response = await endpoint(params);
|
|
187
|
+
return processResponse ? processResponse(response) : response;
|
|
195
188
|
},
|
|
196
|
-
|
|
197
|
-
|
|
189
|
+
onSuccess: onSuccess ? (data, variables, onMutateResult, context) => {
|
|
190
|
+
return onSuccess?.(data, variables, {
|
|
191
|
+
...ownContext,
|
|
192
|
+
...context,
|
|
193
|
+
onMutateResult
|
|
194
|
+
});
|
|
195
|
+
} : void 0,
|
|
196
|
+
onError: onError ? (err, variables, onMutateResult, context) => {
|
|
197
|
+
return onError?.(err, variables, {
|
|
198
|
+
onMutateResult,
|
|
199
|
+
...ownContext,
|
|
200
|
+
...context
|
|
201
|
+
});
|
|
202
|
+
} : void 0,
|
|
203
|
+
onMutate: onMutate ? (variables, context) => {
|
|
204
|
+
return onMutate(variables, {
|
|
205
|
+
...ownContext,
|
|
206
|
+
...context
|
|
207
|
+
});
|
|
208
|
+
} : void 0,
|
|
209
|
+
onSettled: onSettled ? (data, error, variables, onMutateResult, context) => {
|
|
210
|
+
return onSettled(data, error, variables, {
|
|
211
|
+
...ownContext,
|
|
212
|
+
...context,
|
|
213
|
+
onMutateResult
|
|
214
|
+
});
|
|
215
|
+
} : void 0
|
|
216
|
+
});
|
|
198
217
|
};
|
|
199
218
|
result.useIsMutating = (keyParams) => {
|
|
200
219
|
if (!options.useKey) {
|
|
@@ -285,6 +304,7 @@ function declareClient({
|
|
|
285
304
|
// @ts-expect-error We forgot about the DELETE method in original makeMutation
|
|
286
305
|
onError: config.onError,
|
|
287
306
|
useKey: config.useKey,
|
|
307
|
+
meta: config.meta,
|
|
288
308
|
...defaults
|
|
289
309
|
});
|
|
290
310
|
useMutation2.endpoint = endpoint;
|
|
@@ -315,6 +335,10 @@ function declareClient({
|
|
|
315
335
|
onSuccess: config.onSuccess,
|
|
316
336
|
// @ts-expect-error We forgot about the DELETE method in original makeMutation
|
|
317
337
|
onError: config.onError,
|
|
338
|
+
// @ts-expect-error We forgot about the DELETE method in original makeMutation
|
|
339
|
+
onMutate: config.onMutate,
|
|
340
|
+
// @ts-expect-error We forgot about the DELETE method in original makeMutation
|
|
341
|
+
onSettled: config.onSettled,
|
|
318
342
|
useKey: config.useKey,
|
|
319
343
|
...defaults
|
|
320
344
|
});
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/query/key-creator.mts","../src/query/make-options.mts","../src/query/make-infinite-options.mts","../src/mutation/key-creator.mts","../src/mutation/make-hook.mts","../src/client/declare-client.mts"],"names":["bindUrlParams","queryOptions","result","useQuery","useSuspenseQuery","infiniteQueryOptions","useInfiniteQuery","useSuspenseInfiniteQuery","useQueryClient","useMutation","useIsMutating"],"mappings":"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","file":"index.js","sourcesContent":["import type { AnyEndpointConfig, UrlHasParams } from '@navios/builder'\nimport type { DataTag, InfiniteData } from '@tanstack/react-query'\n\nimport { bindUrlParams } from '@navios/builder'\n\nimport type { Split } from '../common/types.mjs'\nimport type { QueryKeyCreatorResult, QueryParams } from './types.mjs'\n\n/**\n * Creates a query key generator for a given endpoint configuration.\n *\n * The returned object provides methods to generate query keys that can be used\n * with TanStack Query for caching, invalidation, and data tagging.\n *\n * @param config - The endpoint configuration\n * @param options - Query parameters including processResponse and key prefix/suffix\n * @param isInfinite - Whether this is for an infinite query\n * @returns An object with methods to generate query keys\n */\nexport function createQueryKey<\n Config extends AnyEndpointConfig,\n Options extends QueryParams<Config>,\n IsInfinite extends boolean,\n Url extends Config['url'] = Config['url'],\n HasParams extends UrlHasParams<Url> = UrlHasParams<Url>,\n>(\n config: Config,\n options: Options,\n _isInfinite: IsInfinite,\n): QueryKeyCreatorResult<\n Config['querySchema'],\n Url,\n Options['processResponse'] extends (...args: any[]) => infer Result\n ? Result\n : never,\n IsInfinite,\n HasParams\n> {\n const url = config.url as Url\n const urlParts = url.split('/').filter(Boolean) as Split<Url, '/'>\n return {\n template: urlParts,\n // @ts-expect-error We have correct types in return type\n dataTag: (params) => {\n const queryParams =\n params && 'querySchema' in config && 'params' in params\n ? config.querySchema?.parse(params.params)\n : []\n return [\n ...(options.keyPrefix ?? []),\n ...urlParts.map((part) =>\n part.startsWith('$')\n ? // @ts-expect-error TS2339 We know that the urlParams are defined only if the url has params\n params.urlParams[part.slice(1)].toString()\n : part,\n ),\n ...(options.keySuffix ?? []),\n queryParams ?? [],\n ] as unknown as DataTag<\n Split<Url, '/'>,\n Options['processResponse'] extends (...args: any[]) => infer Result\n ? IsInfinite extends true\n ? InfiniteData<Result>\n : Result\n : never,\n Error\n >\n },\n // @ts-expect-error We have correct types in return type\n filterKey: (params) => {\n return [\n ...(options.keyPrefix ?? []),\n ...urlParts.map((part) =>\n part.startsWith('$')\n ? // @ts-expect-error TS2339 We know that the urlParams are defined only if the url has params\n params.urlParams[part.slice(1)].toString()\n : part,\n ),\n ...(options.keySuffix ?? []),\n ] as unknown as DataTag<\n Split<Url, '/'>,\n Options['processResponse'] extends (...args: any[]) => infer Result\n ? IsInfinite extends true\n ? InfiniteData<Result>\n : Result\n : never,\n Error\n >\n },\n\n bindToUrl: (params) => {\n return bindUrlParams<Url>(url, params ?? ({} as never))\n },\n }\n}\n\n// Legacy export for backwards compatibility\n/** @deprecated Use createQueryKey instead */\nexport const queryKeyCreator = createQueryKey\n","import type { AbstractEndpoint, AnyEndpointConfig } from '@navios/builder'\nimport type {\n DataTag,\n QueryClient,\n UseQueryOptions,\n UseSuspenseQueryOptions,\n} from '@tanstack/react-query'\n\nimport { queryOptions, useQuery, useSuspenseQuery } from '@tanstack/react-query'\n\nimport type { Split } from '../common/types.mjs'\nimport type { QueryArgs, QueryParams } from './types.mjs'\n\nimport { createQueryKey } from './key-creator.mjs'\n\n/**\n * Creates query options for a given endpoint.\n *\n * Returns a function that generates TanStack Query options when called with params.\n * The returned function also has helper methods attached (use, useSuspense, invalidate, etc.)\n *\n * @param endpoint - The navios endpoint to create query options for\n * @param options - Query configuration including processResponse\n * @param baseQuery - Optional base query options to merge\n * @returns A function that generates query options with attached helpers\n */\nexport function makeQueryOptions<\n Config extends AnyEndpointConfig,\n Options extends QueryParams<Config>,\n BaseQuery extends Omit<\n UseQueryOptions<ReturnType<Options['processResponse']>, Error, any>,\n | 'queryKey'\n | 'queryFn'\n | 'getNextPageParam'\n | 'initialPageParam'\n | 'enabled'\n | 'throwOnError'\n | 'placeholderData'\n >,\n>(\n endpoint: AbstractEndpoint<Config>,\n options: Options,\n baseQuery: BaseQuery = {} as BaseQuery,\n) {\n const config = endpoint.config\n const queryKey = createQueryKey(config, options, false)\n const processResponse = options.processResponse\n\n const result = (\n params: QueryArgs<Config['url'], Config['querySchema']>,\n ): Options['processResponse'] extends (...args: any[]) => infer Result\n ? UseSuspenseQueryOptions<\n Result,\n Error,\n BaseQuery['select'] extends (...args: any[]) => infer T ? T : Result,\n DataTag<Split<Config['url'], '/'>, Result, Error>\n >\n : never => {\n // @ts-expect-error TS2322 We know that the processResponse is defined\n return queryOptions({\n queryKey: queryKey.dataTag(params),\n queryFn: async ({ signal }): Promise<ReturnType<Options['processResponse']>> => {\n let result\n try {\n result = await endpoint({\n signal,\n ...params,\n })\n } catch (err) {\n if (options.onFail) {\n options.onFail(err)\n }\n throw err\n }\n\n return processResponse(result) as ReturnType<Options['processResponse']>\n },\n ...baseQuery,\n })\n }\n result.queryKey = queryKey\n result.use = (params: QueryArgs<Config['url'], Config['querySchema']>) => {\n return useQuery(result(params))\n }\n\n result.useSuspense = (params: QueryArgs<Config['url'], Config['querySchema']>) => {\n return useSuspenseQuery(result(params))\n }\n\n result.invalidate = (\n queryClient: QueryClient,\n params: QueryArgs<Config['url'], Config['querySchema']>,\n ) => {\n return queryClient.invalidateQueries({\n queryKey: result.queryKey.dataTag(params),\n })\n }\n\n result.invalidateAll = (\n queryClient: QueryClient,\n params: QueryArgs<Config['url'], Config['querySchema']>,\n ) => {\n return queryClient.invalidateQueries({\n queryKey: result.queryKey.filterKey(params),\n exact: false,\n })\n }\n\n return result\n}\n","import type {\n AbstractEndpoint,\n AnyEndpointConfig,\n UrlParams,\n} from '@navios/builder'\nimport type {\n InfiniteData,\n QueryClient,\n UseInfiniteQueryOptions,\n UseSuspenseInfiniteQueryOptions,\n} from '@tanstack/react-query'\nimport type { z } from 'zod/v4'\n\nimport {\n infiniteQueryOptions,\n useInfiniteQuery,\n useSuspenseInfiniteQuery,\n} from '@tanstack/react-query'\n\nimport type { InfiniteQueryOptions, QueryArgs } from './types.mjs'\n\nimport { createQueryKey } from './key-creator.mjs'\n\n/**\n * Creates infinite query options for a given endpoint.\n *\n * Returns a function that generates TanStack Query infinite options when called with params.\n * The returned function also has helper methods attached (use, useSuspense, invalidate, etc.)\n *\n * @param endpoint - The navios endpoint to create infinite query options for\n * @param options - Infinite query configuration including processResponse and pagination params\n * @param baseQuery - Optional base query options to merge\n * @returns A function that generates infinite query options with attached helpers\n */\nexport function makeInfiniteQueryOptions<\n Config extends AnyEndpointConfig,\n Options extends InfiniteQueryOptions<Config>,\n BaseQuery extends Omit<\n UseInfiniteQueryOptions<ReturnType<Options['processResponse']>, Error, any>,\n | 'queryKey'\n | 'queryFn'\n | 'getNextPageParam'\n | 'initialPageParam'\n | 'placeholderData'\n | 'throwOnError'\n >,\n>(\n endpoint: AbstractEndpoint<Config>,\n options: Options,\n baseQuery: BaseQuery = {} as BaseQuery,\n) {\n const config = endpoint.config\n const queryKey = createQueryKey(config, options, true)\n\n const processResponse = options.processResponse\n const res = (\n params: QueryArgs<Config['url'], Config['querySchema']>,\n ): Options['processResponse'] extends (...args: any[]) => infer Result\n ? UseSuspenseInfiniteQueryOptions<\n Result,\n Error,\n BaseQuery['select'] extends (...args: any[]) => infer T\n ? T\n : InfiniteData<Result>\n >\n : never => {\n // @ts-expect-error TS2322 We know that the processResponse is defined\n return infiniteQueryOptions({\n queryKey: queryKey.dataTag(params),\n queryFn: async ({ signal, pageParam }): Promise<ReturnType<Options['processResponse']>> => {\n let result\n try {\n result = await endpoint({\n signal,\n // @ts-expect-error TS2345 We bind the url params only if the url has params\n urlParams: params.urlParams as z.infer<UrlParams<Config['url']>>,\n params: {\n ...('params' in params ? params.params : {}),\n ...(pageParam as z.infer<Config['querySchema']>),\n },\n })\n } catch (err) {\n if (options.onFail) {\n options.onFail(err)\n }\n throw err\n }\n\n return processResponse(result) as ReturnType<Options['processResponse']>\n },\n getNextPageParam: options.getNextPageParam,\n getPreviousPageParam: options.getPreviousPageParam,\n initialPageParam:\n options.initialPageParam ??\n config.querySchema.parse('params' in params ? params.params : {}),\n ...baseQuery,\n })\n }\n res.queryKey = queryKey\n\n res.use = (params: QueryArgs<Config['url'], Config['querySchema']>) => {\n return useInfiniteQuery(res(params))\n }\n\n res.useSuspense = (params: QueryArgs<Config['url'], Config['querySchema']>) => {\n return useSuspenseInfiniteQuery(res(params))\n }\n\n res.invalidate = (\n queryClient: QueryClient,\n params: QueryArgs<Config['url'], Config['querySchema']>,\n ) => {\n return queryClient.invalidateQueries({\n queryKey: res.queryKey.dataTag(params),\n })\n }\n\n res.invalidateAll = (\n queryClient: QueryClient,\n params: QueryArgs<Config['url'], Config['querySchema']>,\n ) => {\n return queryClient.invalidateQueries({\n queryKey: res.queryKey.filterKey(params),\n exact: false,\n })\n }\n\n return res\n}\n","import type {\n AnyEndpointConfig,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { DataTag } from '@tanstack/react-query'\n\nimport type { QueryParams } from '../query/types.mjs'\n\nimport { createQueryKey } from '../query/key-creator.mjs'\n\n/**\n * Creates a mutation key generator for a given endpoint configuration.\n *\n * @param config - The endpoint configuration\n * @param options - Optional query parameters with a default `processResponse` function\n * @returns A function that generates mutation keys\n *\n * @example Basic usage:\n * ```typescript\n * const createMutationKey = createMutationKey(endpoint.config);\n * const mutationKey = createMutationKey({ urlParams: { id: 123 } });\n * ```\n *\n * @example Advanced usage with processResponse:\n * ```ts\n * const createMutationKey = createMutationKey(endpoint.config, {\n * processResponse: (data) => {\n * if (!data.success) {\n * throw new Error(data.message);\n * }\n * return data.data;\n * },\n * });\n * // We create a mutation that will be shared across the project for all passed userId\n * const mutationKey = createMutationKey({ urlParams: { projectId: 123, userId: 'wildcard' } });\n * ```\n */\nexport function createMutationKey<\n Config extends AnyEndpointConfig,\n Options extends QueryParams<Config>,\n Url extends Config['url'] = Config['url'],\n HasParams extends UrlHasParams<Url> = UrlHasParams<Url>,\n>(\n config: Config,\n options: Options = {\n processResponse: (data) => data,\n } as Options,\n): (\n params: HasParams extends true ? { urlParams: UrlParams<Url> } : {},\n) => Options['processResponse'] extends (...args: unknown[]) => infer Result\n ? DataTag<[Config['url']], Result, Error>\n : never {\n const queryKey = createQueryKey(config, options, false)\n\n // @ts-expect-error We have correct types in return type\n return (params) => {\n return queryKey.filterKey(params)\n }\n}\n\n// Legacy export for backwards compatibility\n/** @deprecated Use createMutationKey instead */\nexport const mutationKeyCreator = createMutationKey\n","import type {\n AbstractEndpoint,\n AnyEndpointConfig,\n NaviosZodRequest,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport type { z } from 'zod/v4'\n\nimport {\n useIsMutating,\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\n\nimport type { MutationParams } from './types.mjs'\n\nimport { createMutationKey } from './key-creator.mjs'\n\n/**\n * Creates a mutation hook for a given endpoint.\n *\n * Returns a function that when called returns a TanStack Query mutation result.\n * The returned function also has helper methods attached (mutationKey, useIsMutating).\n *\n * @param endpoint - The navios endpoint to create a mutation hook for\n * @param options - Mutation configuration including processResponse and callbacks\n * @returns A hook function that returns mutation result with attached helpers\n */\nexport function makeMutation<\n Config extends AnyEndpointConfig,\n TData = unknown,\n TVariables extends NaviosZodRequest<Config> = NaviosZodRequest<Config>,\n TResponse = z.output<Config['responseSchema']>,\n TContext = unknown,\n UseKey extends boolean = false,\n>(\n endpoint: AbstractEndpoint<Config>,\n options: MutationParams<\n Config,\n TData,\n TVariables,\n TResponse,\n TContext,\n UseKey\n >,\n) {\n const config = endpoint.config\n\n const mutationKey = createMutationKey(config, {\n ...options,\n processResponse: options.processResponse ?? ((data) => data),\n })\n const result = (\n keyParams: UseKey extends true\n ? UrlHasParams<Config['url']> extends true\n ? UrlParams<Config['url']>\n : never\n : never,\n ): UseMutationResult<TData, Error, NaviosZodRequest<Config>> => {\n const queryClient = useQueryClient()\n const {\n useKey,\n useContext,\n onError,\n onSuccess,\n keyPrefix: _keyPrefix,\n keySuffix: _keySuffix,\n processResponse,\n ...rest\n } = options\n\n const context = useContext?.() as TContext\n\n // @ts-expect-error The types match\n return useMutation(\n {\n ...rest,\n mutationKey: useKey\n ? mutationKey({\n urlParams: keyParams,\n })\n : undefined,\n scope: useKey\n ? {\n id: JSON.stringify(\n mutationKey({\n urlParams: keyParams,\n }),\n ),\n }\n : undefined,\n async mutationFn(params: TVariables) {\n const response = await endpoint(params)\n\n return (processResponse ? processResponse(response) : response) as TData\n },\n onSuccess: onSuccess\n ? (data: TData, variables: TVariables) => {\n return onSuccess?.(queryClient, data, variables, context)\n }\n : undefined,\n onError: onError\n ? (err: Error, variables: TVariables) => {\n return onError?.(queryClient, err, variables, context)\n }\n : undefined,\n },\n queryClient,\n )\n }\n result.useIsMutating = (\n keyParams: UseKey extends true\n ? UrlHasParams<Config['url']> extends true\n ? UrlParams<Config['url']>\n : never\n : never,\n ): boolean => {\n if (!options.useKey) {\n throw new Error(\n 'useIsMutating can only be used when useKey is set to true',\n )\n }\n const isMutating = useIsMutating({\n mutationKey: mutationKey({\n urlParams: keyParams,\n }),\n })\n return isMutating > 0\n }\n result.mutationKey = mutationKey\n\n return result\n}\n","import type {\n AbstractEndpoint,\n AbstractStream,\n AnyEndpointConfig,\n AnyStreamConfig,\n HttpMethod,\n} from '@navios/builder'\nimport type { InfiniteData, QueryClient } from '@tanstack/react-query'\nimport type { z, ZodObject, ZodType } from 'zod/v4'\n\nimport type { ClientOptions, ProcessResponseFunction } from '../common/types.mjs'\nimport type { MutationArgs } from '../mutation/types.mjs'\nimport type { ClientInstance } from './types.mjs'\n\nimport { makeMutation } from '../mutation/make-hook.mjs'\nimport { makeInfiniteQueryOptions } from '../query/make-infinite-options.mjs'\nimport { makeQueryOptions } from '../query/make-options.mjs'\n\n/**\n * Configuration for declaring a query endpoint.\n */\nexport interface QueryConfig<\n Method = HttpMethod,\n Url = string,\n QuerySchema = ZodObject,\n Response extends ZodType = ZodType,\n Result = z.output<Response>,\n RequestSchema = unknown,\n> {\n method: Method\n url: Url\n querySchema?: QuerySchema\n responseSchema: Response\n requestSchema?: RequestSchema\n processResponse?: (data: z.output<Response>) => Result\n}\n\n/**\n * Configuration for declaring an infinite query endpoint.\n */\nexport type InfiniteQueryConfig<\n Method = HttpMethod,\n Url = string,\n QuerySchema extends ZodObject = ZodObject,\n Response extends ZodType = ZodType,\n PageResult = z.output<Response>,\n Result = InfiniteData<PageResult>,\n RequestSchema = unknown,\n> = {\n method: Method\n url: Url\n querySchema: QuerySchema\n responseSchema: Response\n requestSchema?: RequestSchema\n processResponse?: (data: z.output<Response>) => PageResult\n select?: (data: InfiniteData<PageResult>) => Result\n getNextPageParam: (\n lastPage: PageResult,\n allPages: PageResult[],\n lastPageParam: z.infer<QuerySchema> | undefined,\n allPageParams: z.infer<QuerySchema>[] | undefined,\n ) => z.input<QuerySchema> | undefined\n getPreviousPageParam?: (\n firstPage: PageResult,\n allPages: PageResult[],\n lastPageParam: z.infer<QuerySchema> | undefined,\n allPageParams: z.infer<QuerySchema>[] | undefined,\n ) => z.input<QuerySchema>\n initialPageParam?: z.input<QuerySchema>\n}\n\n/**\n * Configuration for declaring a mutation endpoint.\n */\nexport interface MutationConfig<\n Method extends 'POST' | 'PUT' | 'PATCH' | 'DELETE' =\n | 'POST'\n | 'PUT'\n | 'PATCH'\n | 'DELETE',\n Url extends string = string,\n RequestSchema = Method extends 'DELETE' ? never : ZodObject,\n QuerySchema = unknown,\n Response extends ZodType = ZodType,\n ReqResult = z.output<Response>,\n Result = unknown,\n Context = unknown,\n UseKey extends boolean = false,\n> {\n method: Method\n url: Url\n querySchema?: QuerySchema\n responseSchema: Response\n requestSchema?: RequestSchema\n processResponse: ProcessResponseFunction<Result, ReqResult>\n useContext?: () => Context\n onSuccess?: (\n queryClient: QueryClient,\n data: NoInfer<Result>,\n variables: MutationArgs<Url, RequestSchema, QuerySchema>,\n context: Context,\n ) => void | Promise<void>\n onError?: (\n queryClient: QueryClient,\n error: Error,\n variables: MutationArgs<Url, RequestSchema, QuerySchema>,\n context: Context,\n ) => void | Promise<void>\n useKey?: UseKey\n}\n\n/**\n * Creates a client instance for making type-safe queries and mutations.\n *\n * @param options - Client configuration including the API builder and defaults\n * @returns A client instance with query, infiniteQuery, and mutation methods\n *\n * @example\n * ```typescript\n * const api = createBuilder({ baseUrl: '/api' });\n * const client = declareClient({ api });\n *\n * const getUser = client.query({\n * method: 'GET',\n * url: '/users/$id',\n * responseSchema: UserSchema,\n * });\n *\n * // In a component\n * const { data } = useSuspenseQuery(getUser({ urlParams: { id: '123' } }));\n * ```\n */\nexport function declareClient<Options extends ClientOptions>({\n api,\n defaults = {},\n}: Options): ClientInstance {\n function query(config: QueryConfig) {\n const endpoint = api.declareEndpoint({\n // @ts-expect-error we accept only specific methods\n method: config.method,\n url: config.url,\n querySchema: config.querySchema,\n requestSchema: config.requestSchema,\n responseSchema: config.responseSchema,\n })\n\n const queryOptions = makeQueryOptions(endpoint, {\n ...defaults,\n processResponse: config.processResponse ?? ((data) => data),\n })\n // @ts-expect-error We attach the endpoint to the queryOptions\n queryOptions.endpoint = endpoint\n return queryOptions\n }\n\n function queryFromEndpoint(\n endpoint: AbstractEndpoint<AnyEndpointConfig>,\n options?: {\n processResponse?: (\n data: z.output<AnyEndpointConfig['responseSchema']>,\n ) => unknown\n },\n ) {\n return makeQueryOptions(endpoint, {\n ...defaults,\n processResponse: options?.processResponse ?? ((data) => data),\n })\n }\n\n function infiniteQuery(config: InfiniteQueryConfig) {\n const endpoint = api.declareEndpoint({\n // @ts-expect-error we accept only specific methods\n method: config.method,\n url: config.url,\n querySchema: config.querySchema,\n requestSchema: config.requestSchema,\n responseSchema: config.responseSchema,\n })\n const infiniteQueryOptions = makeInfiniteQueryOptions(endpoint, {\n ...defaults,\n processResponse: config.processResponse ?? ((data) => data),\n getNextPageParam: config.getNextPageParam,\n getPreviousPageParam: config.getPreviousPageParam,\n initialPageParam: config.initialPageParam,\n })\n\n // @ts-expect-error We attach the endpoint to the infiniteQueryOptions\n infiniteQueryOptions.endpoint = endpoint\n return infiniteQueryOptions\n }\n\n function infiniteQueryFromEndpoint(\n endpoint: AbstractEndpoint<AnyEndpointConfig>,\n options: {\n processResponse?: (\n data: z.output<AnyEndpointConfig['responseSchema']>,\n ) => unknown\n getNextPageParam: (\n lastPage: z.infer<AnyEndpointConfig['responseSchema']>,\n allPages: z.infer<AnyEndpointConfig['responseSchema']>[],\n lastPageParam: z.infer<AnyEndpointConfig['querySchema']> | undefined,\n allPageParams: z.infer<AnyEndpointConfig['querySchema']>[] | undefined,\n ) => z.input<AnyEndpointConfig['querySchema']> | undefined\n getPreviousPageParam?: (\n firstPage: z.infer<AnyEndpointConfig['responseSchema']>,\n allPages: z.infer<AnyEndpointConfig['responseSchema']>[],\n lastPageParam: z.infer<AnyEndpointConfig['querySchema']> | undefined,\n allPageParams: z.infer<AnyEndpointConfig['querySchema']>[] | undefined,\n ) => z.input<AnyEndpointConfig['querySchema']>\n initialPageParam?: z.input<AnyEndpointConfig['querySchema']>\n },\n ) {\n return makeInfiniteQueryOptions(endpoint, {\n ...defaults,\n processResponse: options?.processResponse ?? ((data) => data),\n getNextPageParam: options.getNextPageParam,\n getPreviousPageParam: options?.getPreviousPageParam,\n initialPageParam: options?.initialPageParam,\n })\n }\n\n function mutation(config: MutationConfig) {\n const endpoint = api.declareEndpoint({\n // @ts-expect-error We forgot about the DELETE method in original makeMutation\n method: config.method,\n url: config.url,\n querySchema: config.querySchema,\n requestSchema: config.requestSchema,\n responseSchema: config.responseSchema,\n })\n\n const useMutation = makeMutation(endpoint, {\n processResponse: config.processResponse ?? ((data) => data),\n useContext: config.useContext,\n // @ts-expect-error We forgot about the DELETE method in original makeMutation\n onSuccess: config.onSuccess,\n // @ts-expect-error We forgot about the DELETE method in original makeMutation\n onError: config.onError,\n useKey: config.useKey,\n ...defaults,\n })\n\n // @ts-expect-error We attach the endpoint to the useMutation\n useMutation.endpoint = endpoint\n return useMutation\n }\n\n function mutationFromEndpoint(\n endpoint:\n | AbstractEndpoint<AnyEndpointConfig>\n | AbstractStream<AnyStreamConfig>,\n options?: {\n processResponse?: ProcessResponseFunction\n useContext?: () => unknown\n onSuccess?: (\n queryClient: QueryClient,\n data: unknown,\n variables: MutationArgs,\n context: unknown,\n ) => void | Promise<void>\n onError?: (\n queryClient: QueryClient,\n error: Error,\n variables: MutationArgs,\n context: unknown,\n ) => void | Promise<void>\n },\n ) {\n // @ts-expect-error endpoint types are compatible at runtime\n return makeMutation(endpoint, {\n processResponse: options?.processResponse,\n useContext: options?.useContext,\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n ...defaults,\n })\n }\n\n function multipartMutation(config: MutationConfig) {\n const endpoint = api.declareMultipart({\n // @ts-expect-error we accept only specific methods\n method: config.method,\n url: config.url,\n querySchema: config.querySchema,\n requestSchema: config.requestSchema,\n responseSchema: config.responseSchema,\n })\n\n const useMutation = makeMutation(endpoint, {\n processResponse: config.processResponse ?? ((data) => data),\n useContext: config.useContext,\n // @ts-expect-error We forgot about the DELETE method in original makeMutation\n onSuccess: config.onSuccess,\n // @ts-expect-error We forgot about the DELETE method in original makeMutation\n onError: config.onError,\n useKey: config.useKey,\n ...defaults,\n })\n\n // @ts-expect-error We attach the endpoint to the useMutation\n useMutation.endpoint = endpoint\n return useMutation\n }\n\n return {\n // @ts-expect-error We simplified types here\n query,\n // @ts-expect-error We simplified types here\n queryFromEndpoint,\n // @ts-expect-error We simplified types here\n infiniteQuery,\n // @ts-expect-error We simplified types here\n infiniteQueryFromEndpoint,\n // @ts-expect-error We simplified types here\n mutation,\n // @ts-expect-error We simplified types here\n mutationFromEndpoint,\n // @ts-expect-error We simplified types here\n multipartMutation,\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/query/key-creator.mts","../src/query/make-options.mts","../src/query/make-infinite-options.mts","../src/mutation/key-creator.mts","../src/mutation/make-hook.mts","../src/client/declare-client.mts"],"names":["bindUrlParams","queryOptions","result","useQuery","useSuspenseQuery","infiniteQueryOptions","useInfiniteQuery","useSuspenseInfiniteQuery","useMutation","useIsMutating"],"mappings":"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","file":"index.js","sourcesContent":["import type { AnyEndpointConfig, UrlHasParams } from '@navios/builder'\nimport type { DataTag, InfiniteData } from '@tanstack/react-query'\n\nimport { bindUrlParams } from '@navios/builder'\n\nimport type { Split } from '../common/types.mjs'\nimport type { QueryKeyCreatorResult, QueryParams } from './types.mjs'\n\n/**\n * Creates a query key generator for a given endpoint configuration.\n *\n * The returned object provides methods to generate query keys that can be used\n * with TanStack Query for caching, invalidation, and data tagging.\n *\n * @param config - The endpoint configuration\n * @param options - Query parameters including processResponse and key prefix/suffix\n * @param isInfinite - Whether this is for an infinite query\n * @returns An object with methods to generate query keys\n */\nexport function createQueryKey<\n Config extends AnyEndpointConfig,\n Options extends QueryParams<Config>,\n IsInfinite extends boolean,\n Url extends Config['url'] = Config['url'],\n HasParams extends UrlHasParams<Url> = UrlHasParams<Url>,\n>(\n config: Config,\n options: Options,\n _isInfinite: IsInfinite,\n): QueryKeyCreatorResult<\n Config['querySchema'],\n Url,\n Options['processResponse'] extends (...args: any[]) => infer Result\n ? Result\n : never,\n IsInfinite,\n HasParams\n> {\n const url = config.url as Url\n const urlParts = url.split('/').filter(Boolean) as Split<Url, '/'>\n return {\n template: urlParts,\n // @ts-expect-error We have correct types in return type\n dataTag: (params) => {\n const queryParams =\n params && 'querySchema' in config && 'params' in params\n ? config.querySchema?.parse(params.params)\n : []\n return [\n ...(options.keyPrefix ?? []),\n ...urlParts.map((part) =>\n part.startsWith('$')\n ? // @ts-expect-error TS2339 We know that the urlParams are defined only if the url has params\n params.urlParams[part.slice(1)].toString()\n : part,\n ),\n ...(options.keySuffix ?? []),\n queryParams ?? [],\n ] as unknown as DataTag<\n Split<Url, '/'>,\n Options['processResponse'] extends (...args: any[]) => infer Result\n ? IsInfinite extends true\n ? InfiniteData<Result>\n : Result\n : never,\n Error\n >\n },\n // @ts-expect-error We have correct types in return type\n filterKey: (params) => {\n return [\n ...(options.keyPrefix ?? []),\n ...urlParts.map((part) =>\n part.startsWith('$')\n ? // @ts-expect-error TS2339 We know that the urlParams are defined only if the url has params\n params.urlParams[part.slice(1)].toString()\n : part,\n ),\n ...(options.keySuffix ?? []),\n ] as unknown as DataTag<\n Split<Url, '/'>,\n Options['processResponse'] extends (...args: any[]) => infer Result\n ? IsInfinite extends true\n ? InfiniteData<Result>\n : Result\n : never,\n Error\n >\n },\n\n bindToUrl: (params) => {\n return bindUrlParams<Url>(url, params ?? ({} as never))\n },\n }\n}\n\n// Legacy export for backwards compatibility\n/** @deprecated Use createQueryKey instead */\nexport const queryKeyCreator = createQueryKey\n","import type { AbstractEndpoint, AnyEndpointConfig } from '@navios/builder'\nimport type {\n DataTag,\n QueryClient,\n UseQueryOptions,\n UseSuspenseQueryOptions,\n} from '@tanstack/react-query'\n\nimport { queryOptions, useQuery, useSuspenseQuery } from '@tanstack/react-query'\n\nimport type { Split } from '../common/types.mjs'\nimport type { QueryArgs, QueryParams } from './types.mjs'\n\nimport { createQueryKey } from './key-creator.mjs'\n\n/**\n * Creates query options for a given endpoint.\n *\n * Returns a function that generates TanStack Query options when called with params.\n * The returned function also has helper methods attached (use, useSuspense, invalidate, etc.)\n *\n * @param endpoint - The navios endpoint to create query options for\n * @param options - Query configuration including processResponse\n * @param baseQuery - Optional base query options to merge\n * @returns A function that generates query options with attached helpers\n */\nexport function makeQueryOptions<\n Config extends AnyEndpointConfig,\n Options extends QueryParams<Config>,\n BaseQuery extends Omit<\n UseQueryOptions<ReturnType<Options['processResponse']>, Error, any>,\n | 'queryKey'\n | 'queryFn'\n | 'getNextPageParam'\n | 'initialPageParam'\n | 'enabled'\n | 'throwOnError'\n | 'placeholderData'\n >,\n>(\n endpoint: AbstractEndpoint<Config>,\n options: Options,\n baseQuery: BaseQuery = {} as BaseQuery,\n) {\n const config = endpoint.config\n const queryKey = createQueryKey(config, options, false)\n const processResponse = options.processResponse\n\n const result = (\n params: QueryArgs<Config['url'], Config['querySchema']>,\n ): Options['processResponse'] extends (...args: any[]) => infer Result\n ? UseSuspenseQueryOptions<\n Result,\n Error,\n BaseQuery['select'] extends (...args: any[]) => infer T ? T : Result,\n DataTag<Split<Config['url'], '/'>, Result, Error>\n >\n : never => {\n // @ts-expect-error TS2322 We know that the processResponse is defined\n return queryOptions({\n queryKey: queryKey.dataTag(params),\n queryFn: async ({ signal }): Promise<ReturnType<Options['processResponse']>> => {\n let result\n try {\n result = await endpoint({\n signal,\n ...params,\n })\n } catch (err) {\n if (options.onFail) {\n options.onFail(err)\n }\n throw err\n }\n\n return processResponse(result) as ReturnType<Options['processResponse']>\n },\n ...baseQuery,\n })\n }\n result.queryKey = queryKey\n result.use = (params: QueryArgs<Config['url'], Config['querySchema']>) => {\n return useQuery(result(params))\n }\n\n result.useSuspense = (params: QueryArgs<Config['url'], Config['querySchema']>) => {\n return useSuspenseQuery(result(params))\n }\n\n result.invalidate = (\n queryClient: QueryClient,\n params: QueryArgs<Config['url'], Config['querySchema']>,\n ) => {\n return queryClient.invalidateQueries({\n queryKey: result.queryKey.dataTag(params),\n })\n }\n\n result.invalidateAll = (\n queryClient: QueryClient,\n params: QueryArgs<Config['url'], Config['querySchema']>,\n ) => {\n return queryClient.invalidateQueries({\n queryKey: result.queryKey.filterKey(params),\n exact: false,\n })\n }\n\n return result\n}\n","import type {\n AbstractEndpoint,\n AnyEndpointConfig,\n UrlParams,\n} from '@navios/builder'\nimport type {\n InfiniteData,\n QueryClient,\n UseInfiniteQueryOptions,\n UseSuspenseInfiniteQueryOptions,\n} from '@tanstack/react-query'\nimport type { z } from 'zod/v4'\n\nimport {\n infiniteQueryOptions,\n useInfiniteQuery,\n useSuspenseInfiniteQuery,\n} from '@tanstack/react-query'\n\nimport type { InfiniteQueryOptions, QueryArgs } from './types.mjs'\n\nimport { createQueryKey } from './key-creator.mjs'\n\n/**\n * Creates infinite query options for a given endpoint.\n *\n * Returns a function that generates TanStack Query infinite options when called with params.\n * The returned function also has helper methods attached (use, useSuspense, invalidate, etc.)\n *\n * @param endpoint - The navios endpoint to create infinite query options for\n * @param options - Infinite query configuration including processResponse and pagination params\n * @param baseQuery - Optional base query options to merge\n * @returns A function that generates infinite query options with attached helpers\n */\nexport function makeInfiniteQueryOptions<\n Config extends AnyEndpointConfig,\n Options extends InfiniteQueryOptions<Config>,\n BaseQuery extends Omit<\n UseInfiniteQueryOptions<ReturnType<Options['processResponse']>, Error, any>,\n | 'queryKey'\n | 'queryFn'\n | 'getNextPageParam'\n | 'initialPageParam'\n | 'placeholderData'\n | 'throwOnError'\n >,\n>(\n endpoint: AbstractEndpoint<Config>,\n options: Options,\n baseQuery: BaseQuery = {} as BaseQuery,\n) {\n const config = endpoint.config\n const queryKey = createQueryKey(config, options, true)\n\n const processResponse = options.processResponse\n const res = (\n params: QueryArgs<Config['url'], Config['querySchema']>,\n ): Options['processResponse'] extends (...args: any[]) => infer Result\n ? UseSuspenseInfiniteQueryOptions<\n Result,\n Error,\n BaseQuery['select'] extends (...args: any[]) => infer T\n ? T\n : InfiniteData<Result>\n >\n : never => {\n // @ts-expect-error TS2322 We know that the processResponse is defined\n return infiniteQueryOptions({\n queryKey: queryKey.dataTag(params),\n queryFn: async ({ signal, pageParam }): Promise<ReturnType<Options['processResponse']>> => {\n let result\n try {\n result = await endpoint({\n signal,\n // @ts-expect-error TS2345 We bind the url params only if the url has params\n urlParams: params.urlParams as z.infer<UrlParams<Config['url']>>,\n params: {\n ...('params' in params ? params.params : {}),\n ...(pageParam as z.infer<Config['querySchema']>),\n },\n })\n } catch (err) {\n if (options.onFail) {\n options.onFail(err)\n }\n throw err\n }\n\n return processResponse(result) as ReturnType<Options['processResponse']>\n },\n getNextPageParam: options.getNextPageParam,\n getPreviousPageParam: options.getPreviousPageParam,\n initialPageParam:\n options.initialPageParam ??\n config.querySchema.parse('params' in params ? params.params : {}),\n ...baseQuery,\n })\n }\n res.queryKey = queryKey\n\n res.use = (params: QueryArgs<Config['url'], Config['querySchema']>) => {\n return useInfiniteQuery(res(params))\n }\n\n res.useSuspense = (params: QueryArgs<Config['url'], Config['querySchema']>) => {\n return useSuspenseInfiniteQuery(res(params))\n }\n\n res.invalidate = (\n queryClient: QueryClient,\n params: QueryArgs<Config['url'], Config['querySchema']>,\n ) => {\n return queryClient.invalidateQueries({\n queryKey: res.queryKey.dataTag(params),\n })\n }\n\n res.invalidateAll = (\n queryClient: QueryClient,\n params: QueryArgs<Config['url'], Config['querySchema']>,\n ) => {\n return queryClient.invalidateQueries({\n queryKey: res.queryKey.filterKey(params),\n exact: false,\n })\n }\n\n return res\n}\n","import type {\n AnyEndpointConfig,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { DataTag } from '@tanstack/react-query'\n\nimport type { QueryParams } from '../query/types.mjs'\n\nimport { createQueryKey } from '../query/key-creator.mjs'\n\n/**\n * Creates a mutation key generator for a given endpoint configuration.\n *\n * @param config - The endpoint configuration\n * @param options - Optional query parameters with a default `processResponse` function\n * @returns A function that generates mutation keys\n *\n * @example Basic usage:\n * ```typescript\n * const createMutationKey = createMutationKey(endpoint.config);\n * const mutationKey = createMutationKey({ urlParams: { id: 123 } });\n * ```\n *\n * @example Advanced usage with processResponse:\n * ```ts\n * const createMutationKey = createMutationKey(endpoint.config, {\n * processResponse: (data) => {\n * if (!data.success) {\n * throw new Error(data.message);\n * }\n * return data.data;\n * },\n * });\n * // We create a mutation that will be shared across the project for all passed userId\n * const mutationKey = createMutationKey({ urlParams: { projectId: 123, userId: 'wildcard' } });\n * ```\n */\nexport function createMutationKey<\n Config extends AnyEndpointConfig,\n Options extends QueryParams<Config>,\n Url extends Config['url'] = Config['url'],\n HasParams extends UrlHasParams<Url> = UrlHasParams<Url>,\n>(\n config: Config,\n options: Options = {\n processResponse: (data) => data,\n } as Options,\n): (\n params: HasParams extends true ? { urlParams: UrlParams<Url> } : {},\n) => Options['processResponse'] extends (...args: unknown[]) => infer Result\n ? DataTag<[Config['url']], Result, Error>\n : never {\n const queryKey = createQueryKey(config, options, false)\n\n // @ts-expect-error We have correct types in return type\n return (params) => {\n return queryKey.filterKey(params)\n }\n}\n\n// Legacy export for backwards compatibility\n/** @deprecated Use createMutationKey instead */\nexport const mutationKeyCreator = createMutationKey\n","import type {\n AbstractEndpoint,\n AnyEndpointConfig,\n NaviosZodRequest,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type {\n MutationFunctionContext,\n UseMutationResult,\n} from '@tanstack/react-query'\nimport type { z } from 'zod/v4'\n\nimport { useIsMutating, useMutation } from '@tanstack/react-query'\n\nimport type { MutationParams } from './types.mjs'\n\nimport { createMutationKey } from './key-creator.mjs'\n\n/**\n * Creates a mutation hook for a given endpoint.\n *\n * Returns a function that when called returns a TanStack Query mutation result.\n * The returned function also has helper methods attached (mutationKey, useIsMutating).\n *\n * @param endpoint - The navios endpoint to create a mutation hook for\n * @param options - Mutation configuration including processResponse and callbacks\n * @returns A hook function that returns mutation result with attached helpers\n */\nexport function makeMutation<\n Config extends AnyEndpointConfig,\n TData = unknown,\n TVariables extends NaviosZodRequest<Config> = NaviosZodRequest<Config>,\n TResponse = z.output<Config['responseSchema']>,\n TOnMutateResult = unknown,\n TContext = unknown,\n UseKey extends boolean = false,\n>(\n endpoint: AbstractEndpoint<Config>,\n options: MutationParams<\n Config,\n TData,\n TVariables,\n TResponse,\n TOnMutateResult,\n TContext,\n UseKey\n >,\n) {\n const config = endpoint.config\n\n const mutationKey = createMutationKey(config, {\n ...options,\n processResponse: options.processResponse ?? ((data) => data),\n })\n const result = (\n keyParams: UseKey extends true\n ? UrlHasParams<Config['url']> extends true\n ? UrlParams<Config['url']>\n : never\n : never,\n ): UseMutationResult<\n TData,\n Error,\n NaviosZodRequest<Config>,\n TOnMutateResult\n > => {\n const {\n useKey,\n useContext,\n onMutate,\n onError,\n onSuccess,\n onSettled,\n keyPrefix: _keyPrefix,\n keySuffix: _keySuffix,\n processResponse,\n ...rest\n } = options\n\n const ownContext = (useContext?.() as TContext) ?? {}\n\n // @ts-expect-error The types match\n return useMutation({\n ...rest,\n mutationKey: useKey\n ? mutationKey({\n urlParams: keyParams,\n })\n : undefined,\n scope: useKey\n ? {\n id: JSON.stringify(\n mutationKey({\n urlParams: keyParams,\n }),\n ),\n }\n : undefined,\n async mutationFn(params: TVariables) {\n const response = await endpoint(params)\n\n return (processResponse ? processResponse(response) : response) as TData\n },\n onSuccess: onSuccess\n ? (\n data: TData,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: MutationFunctionContext,\n ) => {\n return onSuccess?.(data, variables, {\n ...ownContext,\n ...context,\n onMutateResult,\n } as TContext &\n MutationFunctionContext & {\n onMutateResult: TOnMutateResult | undefined\n })\n }\n : undefined,\n onError: onError\n ? (\n err: Error,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: MutationFunctionContext,\n ) => {\n return onError?.(err, variables, {\n onMutateResult,\n ...ownContext,\n ...context,\n } as TContext &\n MutationFunctionContext & {\n onMutateResult: TOnMutateResult | undefined\n })\n }\n : undefined,\n onMutate: onMutate\n ? (variables: TVariables, context: MutationFunctionContext) => {\n return onMutate(variables, {\n ...ownContext,\n ...context,\n } as TContext & MutationFunctionContext)\n }\n : undefined,\n onSettled: onSettled\n ? (\n data: TData | undefined,\n error: Error | null,\n variables: TVariables,\n onMutateResult: TOnMutateResult | undefined,\n context: MutationFunctionContext,\n ) => {\n return onSettled(data, error, variables, {\n ...ownContext,\n ...context,\n onMutateResult,\n } as TContext &\n MutationFunctionContext & {\n onMutateResult: TOnMutateResult | undefined\n })\n }\n : undefined,\n })\n }\n result.useIsMutating = (\n keyParams: UseKey extends true\n ? UrlHasParams<Config['url']> extends true\n ? UrlParams<Config['url']>\n : never\n : never,\n ): boolean => {\n if (!options.useKey) {\n throw new Error(\n 'useIsMutating can only be used when useKey is set to true',\n )\n }\n const isMutating = useIsMutating({\n mutationKey: mutationKey({\n urlParams: keyParams,\n }),\n })\n return isMutating > 0\n }\n result.mutationKey = mutationKey\n\n return result\n}\n","import type {\n AbstractEndpoint,\n AbstractStream,\n AnyEndpointConfig,\n AnyStreamConfig,\n HttpMethod,\n} from '@navios/builder'\nimport type {\n InfiniteData,\n MutationFunctionContext,\n QueryClient,\n} from '@tanstack/react-query'\nimport type { z, ZodObject, ZodType } from 'zod/v4'\n\nimport type {\n ClientOptions,\n ProcessResponseFunction,\n} from '../common/types.mjs'\nimport type { MutationArgs } from '../mutation/types.mjs'\nimport type { ClientInstance } from './types.mjs'\n\nimport { makeMutation } from '../mutation/make-hook.mjs'\nimport { makeInfiniteQueryOptions } from '../query/make-infinite-options.mjs'\nimport { makeQueryOptions } from '../query/make-options.mjs'\n\n/**\n * Configuration for declaring a query endpoint.\n */\nexport interface QueryConfig<\n Method = HttpMethod,\n Url = string,\n QuerySchema = ZodObject,\n Response extends ZodType = ZodType,\n Result = z.output<Response>,\n RequestSchema = unknown,\n> {\n method: Method\n url: Url\n querySchema?: QuerySchema\n responseSchema: Response\n requestSchema?: RequestSchema\n processResponse?: (data: z.output<Response>) => Result\n}\n\n/**\n * Configuration for declaring an infinite query endpoint.\n */\nexport type InfiniteQueryConfig<\n Method = HttpMethod,\n Url = string,\n QuerySchema extends ZodObject = ZodObject,\n Response extends ZodType = ZodType,\n PageResult = z.output<Response>,\n Result = InfiniteData<PageResult>,\n RequestSchema = unknown,\n> = {\n method: Method\n url: Url\n querySchema: QuerySchema\n responseSchema: Response\n requestSchema?: RequestSchema\n processResponse?: (data: z.output<Response>) => PageResult\n select?: (data: InfiniteData<PageResult>) => Result\n getNextPageParam: (\n lastPage: PageResult,\n allPages: PageResult[],\n lastPageParam: z.infer<QuerySchema> | undefined,\n allPageParams: z.infer<QuerySchema>[] | undefined,\n ) => z.input<QuerySchema> | undefined\n getPreviousPageParam?: (\n firstPage: PageResult,\n allPages: PageResult[],\n lastPageParam: z.infer<QuerySchema> | undefined,\n allPageParams: z.infer<QuerySchema>[] | undefined,\n ) => z.input<QuerySchema>\n initialPageParam?: z.input<QuerySchema>\n}\n\n/**\n * Configuration for declaring a mutation endpoint.\n */\nexport interface MutationConfig<\n Method extends 'POST' | 'PUT' | 'PATCH' | 'DELETE' =\n | 'POST'\n | 'PUT'\n | 'PATCH'\n | 'DELETE',\n Url extends string = string,\n RequestSchema = Method extends 'DELETE' ? never : ZodObject,\n QuerySchema = unknown,\n Response extends ZodType = ZodType,\n ReqResult = z.output<Response>,\n Result = unknown,\n TOnMutateResult = unknown,\n Context = unknown,\n UseKey extends boolean = false,\n> {\n method: Method\n url: Url\n querySchema?: QuerySchema\n responseSchema: Response\n requestSchema?: RequestSchema\n processResponse: ProcessResponseFunction<Result, ReqResult>\n useContext?: () => Context\n onSuccess?: (\n data: Result,\n variables: MutationArgs<Url, RequestSchema, QuerySchema>,\n context: Context &\n MutationFunctionContext & { onMutateResult: TOnMutateResult | undefined },\n ) => void | Promise<void>\n onError?: (\n err: unknown,\n variables: MutationArgs<Url, RequestSchema, QuerySchema>,\n context: Context &\n MutationFunctionContext & { onMutateResult: TOnMutateResult | undefined },\n ) => void | Promise<void>\n onMutate?: (\n variables: MutationArgs<Url, RequestSchema, QuerySchema>,\n context: Context & MutationFunctionContext,\n ) => TOnMutateResult | Promise<TOnMutateResult>\n onSettled?: (\n data: Result | undefined,\n error: Error | null,\n variables: MutationArgs<Url, RequestSchema, QuerySchema>,\n context: Context &\n MutationFunctionContext & { onMutateResult: TOnMutateResult | undefined },\n ) => void | Promise<void>\n useKey?: UseKey\n meta?: Record<string, unknown>\n}\n\n/**\n * Creates a client instance for making type-safe queries and mutations.\n *\n * @param options - Client configuration including the API builder and defaults\n * @returns A client instance with query, infiniteQuery, and mutation methods\n *\n * @example\n * ```typescript\n * const api = createBuilder({ baseUrl: '/api' });\n * const client = declareClient({ api });\n *\n * const getUser = client.query({\n * method: 'GET',\n * url: '/users/$id',\n * responseSchema: UserSchema,\n * });\n *\n * // In a component\n * const { data } = useSuspenseQuery(getUser({ urlParams: { id: '123' } }));\n * ```\n */\nexport function declareClient<Options extends ClientOptions>({\n api,\n defaults = {},\n}: Options): ClientInstance {\n function query(config: QueryConfig) {\n const endpoint = api.declareEndpoint({\n // @ts-expect-error we accept only specific methods\n method: config.method,\n url: config.url,\n querySchema: config.querySchema,\n requestSchema: config.requestSchema,\n responseSchema: config.responseSchema,\n })\n\n const queryOptions = makeQueryOptions(endpoint, {\n ...defaults,\n processResponse: config.processResponse ?? ((data) => data),\n })\n // @ts-expect-error We attach the endpoint to the queryOptions\n queryOptions.endpoint = endpoint\n return queryOptions\n }\n\n function queryFromEndpoint(\n endpoint: AbstractEndpoint<AnyEndpointConfig>,\n options?: {\n processResponse?: (\n data: z.output<AnyEndpointConfig['responseSchema']>,\n ) => unknown\n },\n ) {\n return makeQueryOptions(endpoint, {\n ...defaults,\n processResponse: options?.processResponse ?? ((data) => data),\n })\n }\n\n function infiniteQuery(config: InfiniteQueryConfig) {\n const endpoint = api.declareEndpoint({\n // @ts-expect-error we accept only specific methods\n method: config.method,\n url: config.url,\n querySchema: config.querySchema,\n requestSchema: config.requestSchema,\n responseSchema: config.responseSchema,\n })\n const infiniteQueryOptions = makeInfiniteQueryOptions(endpoint, {\n ...defaults,\n processResponse: config.processResponse ?? ((data) => data),\n getNextPageParam: config.getNextPageParam,\n getPreviousPageParam: config.getPreviousPageParam,\n initialPageParam: config.initialPageParam,\n })\n\n // @ts-expect-error We attach the endpoint to the infiniteQueryOptions\n infiniteQueryOptions.endpoint = endpoint\n return infiniteQueryOptions\n }\n\n function infiniteQueryFromEndpoint(\n endpoint: AbstractEndpoint<AnyEndpointConfig>,\n options: {\n processResponse?: (\n data: z.output<AnyEndpointConfig['responseSchema']>,\n ) => unknown\n getNextPageParam: (\n lastPage: z.infer<AnyEndpointConfig['responseSchema']>,\n allPages: z.infer<AnyEndpointConfig['responseSchema']>[],\n lastPageParam: z.infer<AnyEndpointConfig['querySchema']> | undefined,\n allPageParams: z.infer<AnyEndpointConfig['querySchema']>[] | undefined,\n ) => z.input<AnyEndpointConfig['querySchema']> | undefined\n getPreviousPageParam?: (\n firstPage: z.infer<AnyEndpointConfig['responseSchema']>,\n allPages: z.infer<AnyEndpointConfig['responseSchema']>[],\n lastPageParam: z.infer<AnyEndpointConfig['querySchema']> | undefined,\n allPageParams: z.infer<AnyEndpointConfig['querySchema']>[] | undefined,\n ) => z.input<AnyEndpointConfig['querySchema']>\n initialPageParam?: z.input<AnyEndpointConfig['querySchema']>\n },\n ) {\n return makeInfiniteQueryOptions(endpoint, {\n ...defaults,\n processResponse: options?.processResponse ?? ((data) => data),\n getNextPageParam: options.getNextPageParam,\n getPreviousPageParam: options?.getPreviousPageParam,\n initialPageParam: options?.initialPageParam,\n })\n }\n\n function mutation(config: MutationConfig) {\n const endpoint = api.declareEndpoint({\n // @ts-expect-error We forgot about the DELETE method in original makeMutation\n method: config.method,\n url: config.url,\n querySchema: config.querySchema,\n requestSchema: config.requestSchema,\n responseSchema: config.responseSchema,\n })\n\n const useMutation = makeMutation(endpoint, {\n processResponse: config.processResponse ?? ((data) => data),\n useContext: config.useContext,\n // @ts-expect-error We forgot about the DELETE method in original makeMutation\n onSuccess: config.onSuccess,\n // @ts-expect-error We forgot about the DELETE method in original makeMutation\n onError: config.onError,\n useKey: config.useKey,\n meta: config.meta,\n ...defaults,\n })\n\n // @ts-expect-error We attach the endpoint to the useMutation\n useMutation.endpoint = endpoint\n return useMutation\n }\n\n function mutationFromEndpoint(\n endpoint:\n | AbstractEndpoint<AnyEndpointConfig>\n | AbstractStream<AnyStreamConfig>,\n options?: {\n processResponse?: ProcessResponseFunction\n useContext?: () => unknown\n onSuccess?: (\n queryClient: QueryClient,\n data: unknown,\n variables: MutationArgs,\n context: unknown,\n ) => void | Promise<void>\n onError?: (\n queryClient: QueryClient,\n error: Error,\n variables: MutationArgs,\n context: unknown,\n ) => void | Promise<void>\n },\n ) {\n // @ts-expect-error endpoint types are compatible at runtime\n return makeMutation(endpoint, {\n processResponse: options?.processResponse,\n useContext: options?.useContext,\n onSuccess: options?.onSuccess,\n onError: options?.onError,\n ...defaults,\n })\n }\n\n function multipartMutation(config: MutationConfig) {\n const endpoint = api.declareMultipart({\n // @ts-expect-error we accept only specific methods\n method: config.method,\n url: config.url,\n querySchema: config.querySchema,\n requestSchema: config.requestSchema,\n responseSchema: config.responseSchema,\n })\n\n const useMutation = makeMutation(endpoint, {\n processResponse: config.processResponse ?? ((data) => data),\n useContext: config.useContext,\n // @ts-expect-error We forgot about the DELETE method in original makeMutation\n onSuccess: config.onSuccess,\n // @ts-expect-error We forgot about the DELETE method in original makeMutation\n onError: config.onError,\n // @ts-expect-error We forgot about the DELETE method in original makeMutation\n onMutate: config.onMutate,\n // @ts-expect-error We forgot about the DELETE method in original makeMutation\n onSettled: config.onSettled,\n useKey: config.useKey,\n ...defaults,\n })\n\n // @ts-expect-error We attach the endpoint to the useMutation\n useMutation.endpoint = endpoint\n return useMutation\n }\n\n return {\n // @ts-expect-error We simplified types here\n query,\n // @ts-expect-error We simplified types here\n queryFromEndpoint,\n // @ts-expect-error We simplified types here\n infiniteQuery,\n // @ts-expect-error We simplified types here\n infiniteQueryFromEndpoint,\n // @ts-expect-error We simplified types here\n mutation,\n // @ts-expect-error We simplified types here\n mutationFromEndpoint,\n // @ts-expect-error We simplified types here\n multipartMutation,\n }\n}\n"]}
|
package/lib/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { bindUrlParams } from '@navios/builder';
|
|
2
|
-
import { useQuery, useSuspenseQuery, useInfiniteQuery, useSuspenseInfiniteQuery, useIsMutating, infiniteQueryOptions,
|
|
2
|
+
import { useQuery, useSuspenseQuery, useInfiniteQuery, useSuspenseInfiniteQuery, useIsMutating, infiniteQueryOptions, useMutation, queryOptions } from '@tanstack/react-query';
|
|
3
3
|
|
|
4
4
|
// src/query/key-creator.mts
|
|
5
5
|
function createQueryKey(config, options, _isInfinite) {
|
|
@@ -155,44 +155,63 @@ function makeMutation(endpoint, options) {
|
|
|
155
155
|
const mutationKey = createMutationKey(config, {
|
|
156
156
|
...options});
|
|
157
157
|
const result = (keyParams) => {
|
|
158
|
-
const queryClient = useQueryClient();
|
|
159
158
|
const {
|
|
160
159
|
useKey,
|
|
161
160
|
useContext,
|
|
161
|
+
onMutate,
|
|
162
162
|
onError,
|
|
163
163
|
onSuccess,
|
|
164
|
+
onSettled,
|
|
164
165
|
keyPrefix: _keyPrefix,
|
|
165
166
|
keySuffix: _keySuffix,
|
|
166
167
|
processResponse,
|
|
167
168
|
...rest
|
|
168
169
|
} = options;
|
|
169
|
-
const
|
|
170
|
-
return useMutation(
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
return processResponse ? processResponse(response) : response;
|
|
186
|
-
},
|
|
187
|
-
onSuccess: onSuccess ? (data, variables) => {
|
|
188
|
-
return onSuccess?.(queryClient, data, variables, context);
|
|
189
|
-
} : void 0,
|
|
190
|
-
onError: onError ? (err, variables) => {
|
|
191
|
-
return onError?.(queryClient, err, variables, context);
|
|
192
|
-
} : void 0
|
|
170
|
+
const ownContext = useContext?.() ?? {};
|
|
171
|
+
return useMutation({
|
|
172
|
+
...rest,
|
|
173
|
+
mutationKey: useKey ? mutationKey({
|
|
174
|
+
urlParams: keyParams
|
|
175
|
+
}) : void 0,
|
|
176
|
+
scope: useKey ? {
|
|
177
|
+
id: JSON.stringify(
|
|
178
|
+
mutationKey({
|
|
179
|
+
urlParams: keyParams
|
|
180
|
+
})
|
|
181
|
+
)
|
|
182
|
+
} : void 0,
|
|
183
|
+
async mutationFn(params) {
|
|
184
|
+
const response = await endpoint(params);
|
|
185
|
+
return processResponse ? processResponse(response) : response;
|
|
193
186
|
},
|
|
194
|
-
|
|
195
|
-
|
|
187
|
+
onSuccess: onSuccess ? (data, variables, onMutateResult, context) => {
|
|
188
|
+
return onSuccess?.(data, variables, {
|
|
189
|
+
...ownContext,
|
|
190
|
+
...context,
|
|
191
|
+
onMutateResult
|
|
192
|
+
});
|
|
193
|
+
} : void 0,
|
|
194
|
+
onError: onError ? (err, variables, onMutateResult, context) => {
|
|
195
|
+
return onError?.(err, variables, {
|
|
196
|
+
onMutateResult,
|
|
197
|
+
...ownContext,
|
|
198
|
+
...context
|
|
199
|
+
});
|
|
200
|
+
} : void 0,
|
|
201
|
+
onMutate: onMutate ? (variables, context) => {
|
|
202
|
+
return onMutate(variables, {
|
|
203
|
+
...ownContext,
|
|
204
|
+
...context
|
|
205
|
+
});
|
|
206
|
+
} : void 0,
|
|
207
|
+
onSettled: onSettled ? (data, error, variables, onMutateResult, context) => {
|
|
208
|
+
return onSettled(data, error, variables, {
|
|
209
|
+
...ownContext,
|
|
210
|
+
...context,
|
|
211
|
+
onMutateResult
|
|
212
|
+
});
|
|
213
|
+
} : void 0
|
|
214
|
+
});
|
|
196
215
|
};
|
|
197
216
|
result.useIsMutating = (keyParams) => {
|
|
198
217
|
if (!options.useKey) {
|
|
@@ -283,6 +302,7 @@ function declareClient({
|
|
|
283
302
|
// @ts-expect-error We forgot about the DELETE method in original makeMutation
|
|
284
303
|
onError: config.onError,
|
|
285
304
|
useKey: config.useKey,
|
|
305
|
+
meta: config.meta,
|
|
286
306
|
...defaults
|
|
287
307
|
});
|
|
288
308
|
useMutation2.endpoint = endpoint;
|
|
@@ -313,6 +333,10 @@ function declareClient({
|
|
|
313
333
|
onSuccess: config.onSuccess,
|
|
314
334
|
// @ts-expect-error We forgot about the DELETE method in original makeMutation
|
|
315
335
|
onError: config.onError,
|
|
336
|
+
// @ts-expect-error We forgot about the DELETE method in original makeMutation
|
|
337
|
+
onMutate: config.onMutate,
|
|
338
|
+
// @ts-expect-error We forgot about the DELETE method in original makeMutation
|
|
339
|
+
onSettled: config.onSettled,
|
|
316
340
|
useKey: config.useKey,
|
|
317
341
|
...defaults
|
|
318
342
|
});
|