@navios/react-query 0.3.0 → 0.4.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.
Files changed (41) hide show
  1. package/README.md +13 -7
  2. package/dist/src/declare-client.d.mts +4 -4
  3. package/dist/src/declare-client.d.mts.map +1 -1
  4. package/dist/src/make-mutation.d.mts +1 -1
  5. package/dist/src/make-mutation.d.mts.map +1 -1
  6. package/dist/src/types/client-endpoint-helper.d.mts +1 -1
  7. package/dist/src/types/client-endpoint-helper.d.mts.map +1 -1
  8. package/dist/src/types/client-instance.d.mts +15 -15
  9. package/dist/src/types/client-instance.d.mts.map +1 -1
  10. package/dist/src/types/mutation-args.d.mts +3 -3
  11. package/dist/src/types/mutation-args.d.mts.map +1 -1
  12. package/dist/src/types/query-args.d.mts +3 -3
  13. package/dist/src/types/query-args.d.mts.map +1 -1
  14. package/dist/src/types/query-helpers.d.mts +2 -2
  15. package/dist/src/types/query-helpers.d.mts.map +1 -1
  16. package/dist/src/types.d.mts +4 -4
  17. package/dist/src/types.d.mts.map +1 -1
  18. package/dist/src/utils/query-key-creator.d.mts +3 -3
  19. package/dist/src/utils/query-key-creator.d.mts.map +1 -1
  20. package/dist/tsconfig.tsbuildinfo +1 -1
  21. package/lib/_tsup-dts-rollup.d.mts +30 -30
  22. package/lib/_tsup-dts-rollup.d.ts +30 -30
  23. package/lib/index.js.map +1 -1
  24. package/lib/index.mjs.map +1 -1
  25. package/package.json +8 -8
  26. package/src/__tests__/client-type-check.spec.mts +1 -1
  27. package/src/__tests__/declare-client.spec.mts +1 -1
  28. package/src/__tests__/make-mutation.spec.mts +1 -1
  29. package/src/__tests__/makeDataTag.spec.mts +1 -1
  30. package/src/__tests__/makeInfiniteQueryOptions.spec.mts +1 -1
  31. package/src/__tests__/makeQueryOptions.spec.mts +1 -1
  32. package/src/declare-client.mts +4 -4
  33. package/src/make-infinite-query-options.mts +1 -1
  34. package/src/make-mutation.mts +1 -1
  35. package/src/types/client-endpoint-helper.mts +1 -1
  36. package/src/types/client-instance.mts +13 -15
  37. package/src/types/mutation-args.mts +3 -3
  38. package/src/types/query-args.mts +3 -3
  39. package/src/types/query-helpers.mts +2 -2
  40. package/src/types.mts +5 -5
  41. package/src/utils/query-key-creator.mts +3 -7
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/query-key-creator.mts","../src/utils/mutation-key.creator.mts","../src/make-infinite-query-options.mts","../src/make-mutation.mts","../src/make-query-options.mts","../src/declare-client.mts"],"names":["bindUrlParams","infiniteQueryOptions","useInfiniteQuery","useSuspenseInfiniteQuery","useQueryClient","useMutation","useIsMutating","queryOptions","result","useQuery","useSuspenseQuery"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n AnyEndpointConfig,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { DataTag, InfiniteData } from '@tanstack/react-query'\nimport type { AnyZodObject, z } from 'zod'\n\nimport { bindUrlParams } from '@navios/builder'\n\nimport type { BaseQueryParams } from '../types.mjs'\n\ntype Split<S extends string, D extends string> = string extends S\n ? string[]\n : S extends ''\n ? []\n : S extends `${infer T}${D}${infer U}`\n ? [T, ...Split<U, D>]\n : [S]\n\nexport type QueryKeyCreatorResult<\n QuerySchema = undefined,\n Url extends string = string,\n Result = unknown,\n IsInfinite extends boolean = false,\n HasParams extends UrlHasParams<Url> = UrlHasParams<Url>,\n> = {\n template: Split<Url, '/'>\n dataTag: (\n params: (HasParams extends true ? { urlParams: UrlParams<Url> } : {}) &\n (QuerySchema extends AnyZodObject\n ? { params: z.input<QuerySchema> }\n : {}),\n ) => DataTag<\n Split<Url, '/'>,\n IsInfinite extends true ? InfiniteData<Result> : Result,\n Error\n >\n filterKey: (\n params: HasParams extends true ? { urlParams: UrlParams<Url> } : {},\n ) => DataTag<\n Split<Url, '/'>,\n IsInfinite extends true ? InfiniteData<Result> : Result,\n Error\n >\n bindToUrl: (\n params: (HasParams extends true ? { urlParams: UrlParams<Url> } : {}) &\n (QuerySchema extends AnyZodObject\n ? { params: z.infer<QuerySchema> }\n : {}),\n ) => string\n}\n\nexport function queryKeyCreator<\n Config extends AnyEndpointConfig,\n Options extends BaseQueryParams<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 any))\n },\n }\n}\n","import type {\n AnyEndpointConfig,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { DataTag } from '@tanstack/react-query'\n\nimport type { BaseQueryParams } from '../types.mjs'\n\nimport { queryKeyCreator } from './query-key-creator.mjs'\n\n/**\n * Creates a mutation key for a given endpoint configuration and options.\n *\n * @param {config: Config } config - The endpoint object containing the configuration.\n * @param {Options} [options] - Optional query parameters with a default `processResponse` function that processes the response data.\n *\n * @returns {Object} An object containing the `mutationKey` function.\n *\n * The `mutationKey` function generates a mutation key based on the provided parameters:\n * - If the URL has parameters (`HasParams` is `true`), it expects an object with `urlParams`.\n * - The return type of the `mutationKey` function depends on the `processResponse` function in `options`.\n * If `processResponse` is defined, the return type is a `DataTag` containing the processed result and an error type.\n *\n * @example Example usage:\n * ```typescript\n * const createMutationKey = mutationKeyCreator(endpoint.config);\n * const mutationKey = createMutationKey({ urlParams: { id: 123 } });\n * ```\n *\n * @example Advanced usage:\n * ```ts\n * const createMutationKey = mutationKeyCreator(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 */\nexport function mutationKeyCreator<\n Config extends AnyEndpointConfig,\n Options extends BaseQueryParams<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: any[]) => infer Result\n ? DataTag<[Config['url']], Result, Error>\n : never {\n const queryKey = queryKeyCreator(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","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'\n\nimport {\n infiniteQueryOptions,\n useInfiniteQuery,\n useSuspenseInfiniteQuery,\n} from '@tanstack/react-query'\n\nimport type { InfiniteQueryOptions } from './types.mjs'\nimport type { ClientQueryArgs } from './types/index.mjs'\n\nimport { queryKeyCreator } from './utils/query-key-creator.mjs'\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 = queryKeyCreator(config, options, true)\n\n const processResponse = options.processResponse\n const res = (\n params: ClientQueryArgs,\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 // @ts-expect-error TS2322 We know the type\n queryKey: queryKey.dataTag(params),\n queryFn: async ({ signal, pageParam }) => {\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)\n },\n getNextPageParam: options.getNextPageParam,\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: ClientQueryArgs) => {\n return useInfiniteQuery(res(params))\n }\n\n res.useSuspense = (params: ClientQueryArgs) => {\n return useSuspenseInfiniteQuery(res(params))\n }\n\n res.invalidate = (queryClient: QueryClient, params: ClientQueryArgs) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: res.queryKey.dataTag(params),\n })\n }\n\n res.invalidateAll = (queryClient: QueryClient, params: ClientQueryArgs) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: res.queryKey.filterKey(params),\n exact: false,\n })\n }\n\n return res\n}\n","import type {\n AbstractEndpoint,\n AnyEndpointConfig,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport type { z } from 'zod'\n\nimport {\n useIsMutating,\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\n\nimport type { BaseMutationArgs, BaseMutationParams } from './types.mjs'\n\nimport { mutationKeyCreator } from './index.mjs'\n\nexport function makeMutation<\n Config extends AnyEndpointConfig,\n TData = unknown,\n TVariables extends BaseMutationArgs<Config> = BaseMutationArgs<Config>,\n TResponse = z.output<Config['responseSchema']>,\n TContext = unknown,\n UseKey extends boolean = false,\n>(\n endpoint: AbstractEndpoint<Config>,\n options: BaseMutationParams<\n Config,\n TData,\n TVariables,\n TResponse,\n TContext,\n UseKey\n >,\n) {\n const config = endpoint.config\n\n const mutationKey = mutationKeyCreator(config, options)\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, BaseMutationArgs<Config>> => {\n const queryClient = useQueryClient()\n const {\n useKey,\n useContext,\n onError,\n onSuccess,\n keyPrefix,\n 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(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 { 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 { BaseQueryArgs, BaseQueryParams } from './types.mjs'\nimport type { ClientQueryArgs } from './types/index.mjs'\n\nimport { queryKeyCreator } from './utils/query-key-creator.mjs'\n\ntype Split<S extends string, D extends string> = string extends S\n ? string[]\n : S extends ''\n ? []\n : S extends `${infer T}${D}${infer U}`\n ? [T, ...Split<U, D>]\n : [S]\n\nexport function makeQueryOptions<\n Config extends AnyEndpointConfig,\n Options extends BaseQueryParams<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 // Let's hack the url to be a string for now\n const queryKey = queryKeyCreator(config, options, false)\n const processResponse = options.processResponse\n\n const result = (\n params: BaseQueryArgs<Config>,\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 }) => {\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)\n },\n ...baseQuery,\n })\n }\n result.queryKey = queryKey\n result.use = (params: ClientQueryArgs) => {\n // @ts-expect-error We add additional function to the result\n return useQuery(result(params))\n }\n\n result.useSuspense = (params: ClientQueryArgs) => {\n // @ts-expect-error We add additional function to the result\n return useSuspenseQuery(result(params))\n }\n\n result.invalidate = (queryClient: QueryClient, params: ClientQueryArgs) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: result.queryKey.dataTag(params),\n })\n }\n\n result.invalidateAll = (\n queryClient: QueryClient,\n params: ClientQueryArgs,\n ) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: result.queryKey.filterKey(params),\n exact: false,\n })\n }\n\n return result\n}\n","import type {\n AbstractEndpoint,\n AnyEndpointConfig,\n HttpMethod,\n Util_FlatObject,\n} from '@navios/builder'\nimport type { InfiniteData, QueryClient } from '@tanstack/react-query'\nimport type { AnyZodObject, z, ZodType } from 'zod'\n\nimport type { ClientOptions, ProcessResponseFunction } from './types.mjs'\nimport type { ClientInstance, ClientMutationArgs } from './types/index.mjs'\n\nimport { makeInfiniteQueryOptions } from './make-infinite-query-options.mjs'\nimport { makeMutation } from './make-mutation.mjs'\nimport { makeQueryOptions } from './make-query-options.mjs'\n\nexport interface ClientEndpointDefinition<\n Method = HttpMethod,\n Url = string,\n QuerySchema = unknown,\n Response = ZodType,\n> {\n method: Method\n url: Url\n querySchema?: QuerySchema\n responseSchema: Response\n}\n\nexport interface ClientQueryConfig<\n Method = HttpMethod,\n Url = string,\n QuerySchema = AnyZodObject,\n Response extends ZodType = ZodType,\n Result = z.output<Response>,\n> extends ClientEndpointDefinition<Method, Url, QuerySchema, Response> {\n processResponse?: (data: z.output<Response>) => Result\n}\n\nexport type ClientInfiniteQueryConfig<\n Method = HttpMethod,\n Url = string,\n QuerySchema extends AnyZodObject = AnyZodObject,\n Response extends ZodType = ZodType,\n PageResult = z.output<Response>,\n Result = InfiniteData<PageResult>,\n> = Required<ClientEndpointDefinition<Method, Url, QuerySchema, Response>> & {\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\nexport interface ClientMutationDataConfig<\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 : AnyZodObject,\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> extends ClientEndpointDefinition<Method, Url, QuerySchema, Response> {\n requestSchema?: RequestSchema\n processResponse: ProcessResponseFunction<Result, ReqResult>\n useContext?: () => Context\n onSuccess?: (\n queryClient: QueryClient,\n data: NoInfer<Result>,\n variables: Util_FlatObject<\n ClientMutationArgs<Url, RequestSchema, QuerySchema>\n >,\n context: Context,\n ) => void | Promise<void>\n onError?: (\n queryClient: QueryClient,\n error: Error,\n variables: Util_FlatObject<\n ClientMutationArgs<Url, RequestSchema, QuerySchema>\n >,\n context: Context,\n ) => void | Promise<void>\n useKey?: UseKey\n}\n\nexport function declareClient<Options extends ClientOptions>({\n api,\n defaults = {},\n}: Options): ClientInstance {\n function query(config: ClientQueryConfig) {\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 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: ClientInfiniteQueryConfig) {\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 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: ClientMutationDataConfig) {\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: AbstractEndpoint<AnyEndpointConfig>,\n options: {\n processResponse: ProcessResponseFunction\n useContext?: () => unknown\n onSuccess?: (\n queryClient: QueryClient,\n data: unknown,\n variables: Util_FlatObject<ClientMutationArgs>,\n context: unknown,\n ) => void | Promise<void>\n onError?: (\n queryClient: QueryClient,\n error: Error,\n variables: Util_FlatObject<ClientMutationArgs>,\n context: unknown,\n ) => void | Promise<void>\n },\n ) {\n return makeMutation(endpoint, {\n processResponse: options.processResponse,\n useContext: options.useContext,\n onSuccess: options.onSuccess,\n // @ts-expect-error simplify types here\n onError: options.onError,\n ...defaults,\n })\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 }\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/query-key-creator.mts","../src/utils/mutation-key.creator.mts","../src/make-infinite-query-options.mts","../src/make-mutation.mts","../src/make-query-options.mts","../src/declare-client.mts"],"names":["bindUrlParams","infiniteQueryOptions","useInfiniteQuery","useSuspenseInfiniteQuery","useQueryClient","useMutation","useIsMutating","queryOptions","result","useQuery","useSuspenseQuery"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n AnyEndpointConfig,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { DataTag, InfiniteData } from '@tanstack/react-query'\nimport type { z, ZodObject } from 'zod/v4'\n\nimport { bindUrlParams } from '@navios/builder'\n\nimport type { BaseQueryParams } from '../types.mjs'\n\ntype Split<S extends string, D extends string> = string extends S\n ? string[]\n : S extends ''\n ? []\n : S extends `${infer T}${D}${infer U}`\n ? [T, ...Split<U, D>]\n : [S]\n\nexport type QueryKeyCreatorResult<\n QuerySchema = undefined,\n Url extends string = string,\n Result = unknown,\n IsInfinite extends boolean = false,\n HasParams extends UrlHasParams<Url> = UrlHasParams<Url>,\n> = {\n template: Split<Url, '/'>\n dataTag: (\n params: (HasParams extends true ? { urlParams: UrlParams<Url> } : {}) &\n (QuerySchema extends ZodObject ? { params: z.input<QuerySchema> } : {}),\n ) => DataTag<\n Split<Url, '/'>,\n IsInfinite extends true ? InfiniteData<Result> : Result,\n Error\n >\n filterKey: (\n params: HasParams extends true ? { urlParams: UrlParams<Url> } : {},\n ) => DataTag<\n Split<Url, '/'>,\n IsInfinite extends true ? InfiniteData<Result> : Result,\n Error\n >\n bindToUrl: (\n params: (HasParams extends true ? { urlParams: UrlParams<Url> } : {}) &\n (QuerySchema extends ZodObject ? { params: z.infer<QuerySchema> } : {}),\n ) => string\n}\n\nexport function queryKeyCreator<\n Config extends AnyEndpointConfig,\n Options extends BaseQueryParams<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 any))\n },\n }\n}\n","import type {\n AnyEndpointConfig,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { DataTag } from '@tanstack/react-query'\n\nimport type { BaseQueryParams } from '../types.mjs'\n\nimport { queryKeyCreator } from './query-key-creator.mjs'\n\n/**\n * Creates a mutation key for a given endpoint configuration and options.\n *\n * @param {config: Config } config - The endpoint object containing the configuration.\n * @param {Options} [options] - Optional query parameters with a default `processResponse` function that processes the response data.\n *\n * @returns {Object} An object containing the `mutationKey` function.\n *\n * The `mutationKey` function generates a mutation key based on the provided parameters:\n * - If the URL has parameters (`HasParams` is `true`), it expects an object with `urlParams`.\n * - The return type of the `mutationKey` function depends on the `processResponse` function in `options`.\n * If `processResponse` is defined, the return type is a `DataTag` containing the processed result and an error type.\n *\n * @example Example usage:\n * ```typescript\n * const createMutationKey = mutationKeyCreator(endpoint.config);\n * const mutationKey = createMutationKey({ urlParams: { id: 123 } });\n * ```\n *\n * @example Advanced usage:\n * ```ts\n * const createMutationKey = mutationKeyCreator(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 */\nexport function mutationKeyCreator<\n Config extends AnyEndpointConfig,\n Options extends BaseQueryParams<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: any[]) => infer Result\n ? DataTag<[Config['url']], Result, Error>\n : never {\n const queryKey = queryKeyCreator(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","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 } from './types.mjs'\nimport type { ClientQueryArgs } from './types/index.mjs'\n\nimport { queryKeyCreator } from './utils/query-key-creator.mjs'\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 = queryKeyCreator(config, options, true)\n\n const processResponse = options.processResponse\n const res = (\n params: ClientQueryArgs,\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 // @ts-expect-error TS2322 We know the type\n queryKey: queryKey.dataTag(params),\n queryFn: async ({ signal, pageParam }) => {\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)\n },\n getNextPageParam: options.getNextPageParam,\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: ClientQueryArgs) => {\n return useInfiniteQuery(res(params))\n }\n\n res.useSuspense = (params: ClientQueryArgs) => {\n return useSuspenseInfiniteQuery(res(params))\n }\n\n res.invalidate = (queryClient: QueryClient, params: ClientQueryArgs) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: res.queryKey.dataTag(params),\n })\n }\n\n res.invalidateAll = (queryClient: QueryClient, params: ClientQueryArgs) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: res.queryKey.filterKey(params),\n exact: false,\n })\n }\n\n return res\n}\n","import type {\n AbstractEndpoint,\n AnyEndpointConfig,\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 { BaseMutationArgs, BaseMutationParams } from './types.mjs'\n\nimport { mutationKeyCreator } from './index.mjs'\n\nexport function makeMutation<\n Config extends AnyEndpointConfig,\n TData = unknown,\n TVariables extends BaseMutationArgs<Config> = BaseMutationArgs<Config>,\n TResponse = z.output<Config['responseSchema']>,\n TContext = unknown,\n UseKey extends boolean = false,\n>(\n endpoint: AbstractEndpoint<Config>,\n options: BaseMutationParams<\n Config,\n TData,\n TVariables,\n TResponse,\n TContext,\n UseKey\n >,\n) {\n const config = endpoint.config\n\n const mutationKey = mutationKeyCreator(config, options)\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, BaseMutationArgs<Config>> => {\n const queryClient = useQueryClient()\n const {\n useKey,\n useContext,\n onError,\n onSuccess,\n keyPrefix,\n 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(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 { 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 { BaseQueryArgs, BaseQueryParams } from './types.mjs'\nimport type { ClientQueryArgs } from './types/index.mjs'\n\nimport { queryKeyCreator } from './utils/query-key-creator.mjs'\n\ntype Split<S extends string, D extends string> = string extends S\n ? string[]\n : S extends ''\n ? []\n : S extends `${infer T}${D}${infer U}`\n ? [T, ...Split<U, D>]\n : [S]\n\nexport function makeQueryOptions<\n Config extends AnyEndpointConfig,\n Options extends BaseQueryParams<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 // Let's hack the url to be a string for now\n const queryKey = queryKeyCreator(config, options, false)\n const processResponse = options.processResponse\n\n const result = (\n params: BaseQueryArgs<Config>,\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 }) => {\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)\n },\n ...baseQuery,\n })\n }\n result.queryKey = queryKey\n result.use = (params: ClientQueryArgs) => {\n // @ts-expect-error We add additional function to the result\n return useQuery(result(params))\n }\n\n result.useSuspense = (params: ClientQueryArgs) => {\n // @ts-expect-error We add additional function to the result\n return useSuspenseQuery(result(params))\n }\n\n result.invalidate = (queryClient: QueryClient, params: ClientQueryArgs) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: result.queryKey.dataTag(params),\n })\n }\n\n result.invalidateAll = (\n queryClient: QueryClient,\n params: ClientQueryArgs,\n ) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: result.queryKey.filterKey(params),\n exact: false,\n })\n }\n\n return result\n}\n","import type {\n AbstractEndpoint,\n AnyEndpointConfig,\n HttpMethod,\n Util_FlatObject,\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 './types.mjs'\nimport type { ClientInstance, ClientMutationArgs } from './types/index.mjs'\n\nimport { makeInfiniteQueryOptions } from './make-infinite-query-options.mjs'\nimport { makeMutation } from './make-mutation.mjs'\nimport { makeQueryOptions } from './make-query-options.mjs'\n\nexport interface ClientEndpointDefinition<\n Method = HttpMethod,\n Url = string,\n QuerySchema = unknown,\n Response = ZodType,\n> {\n method: Method\n url: Url\n querySchema?: QuerySchema\n responseSchema: Response\n}\n\nexport interface ClientQueryConfig<\n Method = HttpMethod,\n Url = string,\n QuerySchema = ZodObject,\n Response extends ZodType = ZodType,\n Result = z.output<Response>,\n> extends ClientEndpointDefinition<Method, Url, QuerySchema, Response> {\n processResponse?: (data: z.output<Response>) => Result\n}\n\nexport type ClientInfiniteQueryConfig<\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> = Required<ClientEndpointDefinition<Method, Url, QuerySchema, Response>> & {\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\nexport interface ClientMutationDataConfig<\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> extends ClientEndpointDefinition<Method, Url, QuerySchema, Response> {\n requestSchema?: RequestSchema\n processResponse: ProcessResponseFunction<Result, ReqResult>\n useContext?: () => Context\n onSuccess?: (\n queryClient: QueryClient,\n data: NoInfer<Result>,\n variables: Util_FlatObject<\n ClientMutationArgs<Url, RequestSchema, QuerySchema>\n >,\n context: Context,\n ) => void | Promise<void>\n onError?: (\n queryClient: QueryClient,\n error: Error,\n variables: Util_FlatObject<\n ClientMutationArgs<Url, RequestSchema, QuerySchema>\n >,\n context: Context,\n ) => void | Promise<void>\n useKey?: UseKey\n}\n\nexport function declareClient<Options extends ClientOptions>({\n api,\n defaults = {},\n}: Options): ClientInstance {\n function query(config: ClientQueryConfig) {\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 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: ClientInfiniteQueryConfig) {\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 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: ClientMutationDataConfig) {\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: AbstractEndpoint<AnyEndpointConfig>,\n options: {\n processResponse: ProcessResponseFunction\n useContext?: () => unknown\n onSuccess?: (\n queryClient: QueryClient,\n data: unknown,\n variables: Util_FlatObject<ClientMutationArgs>,\n context: unknown,\n ) => void | Promise<void>\n onError?: (\n queryClient: QueryClient,\n error: Error,\n variables: Util_FlatObject<ClientMutationArgs>,\n context: unknown,\n ) => void | Promise<void>\n },\n ) {\n return makeMutation(endpoint, {\n processResponse: options.processResponse,\n useContext: options.useContext,\n onSuccess: options.onSuccess,\n // @ts-expect-error simplify types here\n onError: options.onError,\n ...defaults,\n })\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 }\n}\n"]}
package/lib/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/query-key-creator.mts","../src/utils/mutation-key.creator.mts","../src/make-infinite-query-options.mts","../src/make-mutation.mts","../src/make-query-options.mts","../src/declare-client.mts"],"names":["result","queryOptions","infiniteQueryOptions","useMutation"],"mappings":"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","file":"index.mjs","sourcesContent":["import type {\n AnyEndpointConfig,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { DataTag, InfiniteData } from '@tanstack/react-query'\nimport type { AnyZodObject, z } from 'zod'\n\nimport { bindUrlParams } from '@navios/builder'\n\nimport type { BaseQueryParams } from '../types.mjs'\n\ntype Split<S extends string, D extends string> = string extends S\n ? string[]\n : S extends ''\n ? []\n : S extends `${infer T}${D}${infer U}`\n ? [T, ...Split<U, D>]\n : [S]\n\nexport type QueryKeyCreatorResult<\n QuerySchema = undefined,\n Url extends string = string,\n Result = unknown,\n IsInfinite extends boolean = false,\n HasParams extends UrlHasParams<Url> = UrlHasParams<Url>,\n> = {\n template: Split<Url, '/'>\n dataTag: (\n params: (HasParams extends true ? { urlParams: UrlParams<Url> } : {}) &\n (QuerySchema extends AnyZodObject\n ? { params: z.input<QuerySchema> }\n : {}),\n ) => DataTag<\n Split<Url, '/'>,\n IsInfinite extends true ? InfiniteData<Result> : Result,\n Error\n >\n filterKey: (\n params: HasParams extends true ? { urlParams: UrlParams<Url> } : {},\n ) => DataTag<\n Split<Url, '/'>,\n IsInfinite extends true ? InfiniteData<Result> : Result,\n Error\n >\n bindToUrl: (\n params: (HasParams extends true ? { urlParams: UrlParams<Url> } : {}) &\n (QuerySchema extends AnyZodObject\n ? { params: z.infer<QuerySchema> }\n : {}),\n ) => string\n}\n\nexport function queryKeyCreator<\n Config extends AnyEndpointConfig,\n Options extends BaseQueryParams<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 any))\n },\n }\n}\n","import type {\n AnyEndpointConfig,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { DataTag } from '@tanstack/react-query'\n\nimport type { BaseQueryParams } from '../types.mjs'\n\nimport { queryKeyCreator } from './query-key-creator.mjs'\n\n/**\n * Creates a mutation key for a given endpoint configuration and options.\n *\n * @param {config: Config } config - The endpoint object containing the configuration.\n * @param {Options} [options] - Optional query parameters with a default `processResponse` function that processes the response data.\n *\n * @returns {Object} An object containing the `mutationKey` function.\n *\n * The `mutationKey` function generates a mutation key based on the provided parameters:\n * - If the URL has parameters (`HasParams` is `true`), it expects an object with `urlParams`.\n * - The return type of the `mutationKey` function depends on the `processResponse` function in `options`.\n * If `processResponse` is defined, the return type is a `DataTag` containing the processed result and an error type.\n *\n * @example Example usage:\n * ```typescript\n * const createMutationKey = mutationKeyCreator(endpoint.config);\n * const mutationKey = createMutationKey({ urlParams: { id: 123 } });\n * ```\n *\n * @example Advanced usage:\n * ```ts\n * const createMutationKey = mutationKeyCreator(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 */\nexport function mutationKeyCreator<\n Config extends AnyEndpointConfig,\n Options extends BaseQueryParams<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: any[]) => infer Result\n ? DataTag<[Config['url']], Result, Error>\n : never {\n const queryKey = queryKeyCreator(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","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'\n\nimport {\n infiniteQueryOptions,\n useInfiniteQuery,\n useSuspenseInfiniteQuery,\n} from '@tanstack/react-query'\n\nimport type { InfiniteQueryOptions } from './types.mjs'\nimport type { ClientQueryArgs } from './types/index.mjs'\n\nimport { queryKeyCreator } from './utils/query-key-creator.mjs'\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 = queryKeyCreator(config, options, true)\n\n const processResponse = options.processResponse\n const res = (\n params: ClientQueryArgs,\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 // @ts-expect-error TS2322 We know the type\n queryKey: queryKey.dataTag(params),\n queryFn: async ({ signal, pageParam }) => {\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)\n },\n getNextPageParam: options.getNextPageParam,\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: ClientQueryArgs) => {\n return useInfiniteQuery(res(params))\n }\n\n res.useSuspense = (params: ClientQueryArgs) => {\n return useSuspenseInfiniteQuery(res(params))\n }\n\n res.invalidate = (queryClient: QueryClient, params: ClientQueryArgs) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: res.queryKey.dataTag(params),\n })\n }\n\n res.invalidateAll = (queryClient: QueryClient, params: ClientQueryArgs) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: res.queryKey.filterKey(params),\n exact: false,\n })\n }\n\n return res\n}\n","import type {\n AbstractEndpoint,\n AnyEndpointConfig,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { UseMutationResult } from '@tanstack/react-query'\nimport type { z } from 'zod'\n\nimport {\n useIsMutating,\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\n\nimport type { BaseMutationArgs, BaseMutationParams } from './types.mjs'\n\nimport { mutationKeyCreator } from './index.mjs'\n\nexport function makeMutation<\n Config extends AnyEndpointConfig,\n TData = unknown,\n TVariables extends BaseMutationArgs<Config> = BaseMutationArgs<Config>,\n TResponse = z.output<Config['responseSchema']>,\n TContext = unknown,\n UseKey extends boolean = false,\n>(\n endpoint: AbstractEndpoint<Config>,\n options: BaseMutationParams<\n Config,\n TData,\n TVariables,\n TResponse,\n TContext,\n UseKey\n >,\n) {\n const config = endpoint.config\n\n const mutationKey = mutationKeyCreator(config, options)\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, BaseMutationArgs<Config>> => {\n const queryClient = useQueryClient()\n const {\n useKey,\n useContext,\n onError,\n onSuccess,\n keyPrefix,\n 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(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 { 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 { BaseQueryArgs, BaseQueryParams } from './types.mjs'\nimport type { ClientQueryArgs } from './types/index.mjs'\n\nimport { queryKeyCreator } from './utils/query-key-creator.mjs'\n\ntype Split<S extends string, D extends string> = string extends S\n ? string[]\n : S extends ''\n ? []\n : S extends `${infer T}${D}${infer U}`\n ? [T, ...Split<U, D>]\n : [S]\n\nexport function makeQueryOptions<\n Config extends AnyEndpointConfig,\n Options extends BaseQueryParams<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 // Let's hack the url to be a string for now\n const queryKey = queryKeyCreator(config, options, false)\n const processResponse = options.processResponse\n\n const result = (\n params: BaseQueryArgs<Config>,\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 }) => {\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)\n },\n ...baseQuery,\n })\n }\n result.queryKey = queryKey\n result.use = (params: ClientQueryArgs) => {\n // @ts-expect-error We add additional function to the result\n return useQuery(result(params))\n }\n\n result.useSuspense = (params: ClientQueryArgs) => {\n // @ts-expect-error We add additional function to the result\n return useSuspenseQuery(result(params))\n }\n\n result.invalidate = (queryClient: QueryClient, params: ClientQueryArgs) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: result.queryKey.dataTag(params),\n })\n }\n\n result.invalidateAll = (\n queryClient: QueryClient,\n params: ClientQueryArgs,\n ) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: result.queryKey.filterKey(params),\n exact: false,\n })\n }\n\n return result\n}\n","import type {\n AbstractEndpoint,\n AnyEndpointConfig,\n HttpMethod,\n Util_FlatObject,\n} from '@navios/builder'\nimport type { InfiniteData, QueryClient } from '@tanstack/react-query'\nimport type { AnyZodObject, z, ZodType } from 'zod'\n\nimport type { ClientOptions, ProcessResponseFunction } from './types.mjs'\nimport type { ClientInstance, ClientMutationArgs } from './types/index.mjs'\n\nimport { makeInfiniteQueryOptions } from './make-infinite-query-options.mjs'\nimport { makeMutation } from './make-mutation.mjs'\nimport { makeQueryOptions } from './make-query-options.mjs'\n\nexport interface ClientEndpointDefinition<\n Method = HttpMethod,\n Url = string,\n QuerySchema = unknown,\n Response = ZodType,\n> {\n method: Method\n url: Url\n querySchema?: QuerySchema\n responseSchema: Response\n}\n\nexport interface ClientQueryConfig<\n Method = HttpMethod,\n Url = string,\n QuerySchema = AnyZodObject,\n Response extends ZodType = ZodType,\n Result = z.output<Response>,\n> extends ClientEndpointDefinition<Method, Url, QuerySchema, Response> {\n processResponse?: (data: z.output<Response>) => Result\n}\n\nexport type ClientInfiniteQueryConfig<\n Method = HttpMethod,\n Url = string,\n QuerySchema extends AnyZodObject = AnyZodObject,\n Response extends ZodType = ZodType,\n PageResult = z.output<Response>,\n Result = InfiniteData<PageResult>,\n> = Required<ClientEndpointDefinition<Method, Url, QuerySchema, Response>> & {\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\nexport interface ClientMutationDataConfig<\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 : AnyZodObject,\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> extends ClientEndpointDefinition<Method, Url, QuerySchema, Response> {\n requestSchema?: RequestSchema\n processResponse: ProcessResponseFunction<Result, ReqResult>\n useContext?: () => Context\n onSuccess?: (\n queryClient: QueryClient,\n data: NoInfer<Result>,\n variables: Util_FlatObject<\n ClientMutationArgs<Url, RequestSchema, QuerySchema>\n >,\n context: Context,\n ) => void | Promise<void>\n onError?: (\n queryClient: QueryClient,\n error: Error,\n variables: Util_FlatObject<\n ClientMutationArgs<Url, RequestSchema, QuerySchema>\n >,\n context: Context,\n ) => void | Promise<void>\n useKey?: UseKey\n}\n\nexport function declareClient<Options extends ClientOptions>({\n api,\n defaults = {},\n}: Options): ClientInstance {\n function query(config: ClientQueryConfig) {\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 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: ClientInfiniteQueryConfig) {\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 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: ClientMutationDataConfig) {\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: AbstractEndpoint<AnyEndpointConfig>,\n options: {\n processResponse: ProcessResponseFunction\n useContext?: () => unknown\n onSuccess?: (\n queryClient: QueryClient,\n data: unknown,\n variables: Util_FlatObject<ClientMutationArgs>,\n context: unknown,\n ) => void | Promise<void>\n onError?: (\n queryClient: QueryClient,\n error: Error,\n variables: Util_FlatObject<ClientMutationArgs>,\n context: unknown,\n ) => void | Promise<void>\n },\n ) {\n return makeMutation(endpoint, {\n processResponse: options.processResponse,\n useContext: options.useContext,\n onSuccess: options.onSuccess,\n // @ts-expect-error simplify types here\n onError: options.onError,\n ...defaults,\n })\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 }\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/query-key-creator.mts","../src/utils/mutation-key.creator.mts","../src/make-infinite-query-options.mts","../src/make-mutation.mts","../src/make-query-options.mts","../src/declare-client.mts"],"names":["result","queryOptions","infiniteQueryOptions","useMutation"],"mappings":";;;;AAiDO,SAAS,eAAA,CAOd,MAAA,EACA,OAAA,EACA,UAAA,EASA;AACA,EAAA,MAAM,MAAM,MAAA,CAAO,GAAA;AACnB,EAAA,MAAM,WAAW,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,QAAA;AAAA;AAAA,IAEV,OAAA,EAAS,CAAC,MAAA,KAAW;AACnB,MAAA,MAAM,WAAA,GACJ,MAAA,IAAU,aAAA,IAAiB,MAAA,IAAU,QAAA,IAAY,MAAA,GAC7C,MAAA,CAAO,WAAA,EAAa,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,GACvC,EAAC;AACP,MAAA,OAAO;AAAA,QACL,GAAI,OAAA,CAAQ,SAAA,IAAa,EAAC;AAAA,QAC1B,GAAG,QAAA,CAAS,GAAA;AAAA,UAAI,CAAC,IAAA,KACf,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;AAAA;AAAA,YAEf,OAAO,SAAA,CAAU,IAAA,CAAK,MAAM,CAAC,CAAC,EAAE,QAAA;AAAS,cACzC;AAAA,SACN;AAAA,QACA,GAAI,OAAA,CAAQ,SAAA,IAAa,EAAC;AAAA,QAC1B,eAAe;AAAC,OAClB;AAAA,IASF,CAAA;AAAA;AAAA,IAEA,SAAA,EAAW,CAAC,MAAA,KAAW;AACrB,MAAA,OAAO;AAAA,QACL,GAAI,OAAA,CAAQ,SAAA,IAAa,EAAC;AAAA,QAC1B,GAAG,QAAA,CAAS,GAAA;AAAA,UAAI,CAAC,IAAA,KACf,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;AAAA;AAAA,YAEf,OAAO,SAAA,CAAU,IAAA,CAAK,MAAM,CAAC,CAAC,EAAE,QAAA;AAAS,cACzC;AAAA,SACN;AAAA,QACA,GAAI,OAAA,CAAQ,SAAA,IAAa;AAAC,OAC5B;AAAA,IASF,CAAA;AAAA,IAEA,SAAA,EAAW,CAAC,MAAA,KAAW;AACrB,MAAA,OAAO,aAAA,CAAmB,GAAA,EAAK,MAAA,IAAW,EAAU,CAAA;AAAA,IACtD;AAAA,GACF;AACF;;;ACjFO,SAAS,kBAAA,CAMd,QACA,OAAA,GAAmB;AAAA,EACjB,eAAA,EAAiB,CAAC,IAAA,KAAS;AAC7B,CAAA,EAKQ;AACR,EAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,MAAA,EAAQ,OAAc,CAAA;AAGvD,EAAA,OAAO,CAAC,MAAA,KAAW;AACjB,IAAA,OAAO,QAAA,CAAS,UAAU,MAAM,CAAA;AAAA,EAClC,CAAA;AACF;ACxCO,SAAS,wBAAA,CAad,QAAA,EACA,OAAA,EACA,SAAA,GAAuB,EAAC,EACxB;AACA,EAAA,MAAM,SAAS,QAAA,CAAS,MAAA;AACxB,EAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,MAAA,EAAQ,OAAa,CAAA;AAEtD,EAAA,MAAM,kBAAkB,OAAA,CAAQ,eAAA;AAChC,EAAA,MAAM,GAAA,GAAM,CACV,MAAA,KASW;AAEX,IAAA,OAAO,oBAAA,CAAqB;AAAA;AAAA,MAE1B,QAAA,EAAU,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA;AAAA,MACjC,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,WAAU,KAAM;AACxC,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI;AACF,UAAA,MAAA,GAAS,MAAM,QAAA,CAAS;AAAA,YACtB,MAAA;AAAA;AAAA,YAEA,WAAW,MAAA,CAAO,SAAA;AAAA,YAClB,MAAA,EAAQ;AAAA,cACN,GAAI,QAAA,IAAY,MAAA,GAAS,MAAA,CAAO,SAAS,EAAC;AAAA,cAC1C,GAAI;AAAA;AACN,WACD,CAAA;AAAA,QACH,SAAS,GAAA,EAAK;AACZ,UAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,YAAA,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,UACpB;AACA,UAAA,MAAM,GAAA;AAAA,QACR;AAEA,QAAA,OAAO,gBAAgB,MAAM,CAAA;AAAA,MAC/B,CAAA;AAAA,MACA,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,MAC1B,gBAAA,EACE,OAAA,CAAQ,gBAAA,IACR,MAAA,CAAO,WAAA,CAAY,KAAA,CAAM,QAAA,IAAY,MAAA,GAAS,MAAA,CAAO,MAAA,GAAS,EAAE,CAAA;AAAA,MAClE,GAAG;AAAA,KACJ,CAAA;AAAA,EACH,CAAA;AACA,EAAA,GAAA,CAAI,QAAA,GAAW,QAAA;AAEf,EAAA,GAAA,CAAI,GAAA,GAAM,CAAC,MAAA,KAA4B;AACrC,IAAA,OAAO,gBAAA,CAAiB,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,GAAA,CAAI,WAAA,GAAc,CAAC,MAAA,KAA4B;AAC7C,IAAA,OAAO,wBAAA,CAAyB,GAAA,CAAI,MAAM,CAAC,CAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,GAAA,CAAI,UAAA,GAAa,CAAC,WAAA,EAA0B,MAAA,KAA4B;AACtE,IAAA,OAAO,YAAY,iBAAA,CAAkB;AAAA;AAAA,MAEnC,QAAA,EAAU,GAAA,CAAI,QAAA,CAAS,OAAA,CAAQ,MAAM;AAAA,KACtC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,GAAA,CAAI,aAAA,GAAgB,CAAC,WAAA,EAA0B,MAAA,KAA4B;AACzE,IAAA,OAAO,YAAY,iBAAA,CAAkB;AAAA;AAAA,MAEnC,QAAA,EAAU,GAAA,CAAI,QAAA,CAAS,SAAA,CAAU,MAAM,CAAA;AAAA,MACvC,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,OAAO,GAAA;AACT;AC/FO,SAAS,YAAA,CAQd,UACA,OAAA,EAQA;AACA,EAAA,MAAM,SAAS,QAAA,CAAS,MAAA;AAExB,EAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,MAAA,EAAQ,OAAO,CAAA;AACtD,EAAA,MAAM,MAAA,GAAS,CACb,SAAA,KAK8D;AAC9D,IAAA,MAAM,cAAc,cAAA,EAAe;AACnC,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,eAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,OAAA;AAEJ,IAAA,MAAM,UAAU,UAAA,IAAa;AAG7B,IAAA,OAAO,WAAA;AAAA,MACL;AAAA,QACE,GAAG,IAAA;AAAA,QACH,WAAA,EAAa,SACT,WAAA,CAAY;AAAA,UACV,SAAA,EAAW;AAAA,SACZ,CAAA,GACD,MAAA;AAAA,QACJ,OAAO,MAAA,GACH;AAAA,UACE,IAAI,IAAA,CAAK,SAAA;AAAA,YACP,WAAA,CAAY;AAAA,cACV,SAAA,EAAW;AAAA,aACZ;AAAA;AACH,SACF,GACA,MAAA;AAAA,QACJ,MAAM,WAAW,MAAA,EAAoB;AACnC,UAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,MAAM,CAAA;AAEtC,UAAA,OAAO,gBAAgB,QAAQ,CAAA;AAAA,QACjC,CAAA;AAAA,QACA,SAAA,EAAW,SAAA,GACP,CAAC,IAAA,EAAa,SAAA,KAA0B;AACtC,UAAA,OAAO,SAAA,GAAY,WAAA,EAAa,IAAA,EAAM,SAAA,EAAW,OAAO,CAAA;AAAA,QAC1D,CAAA,GACA,MAAA;AAAA,QACJ,OAAA,EAAS,OAAA,GACL,CAAC,GAAA,EAAY,SAAA,KAA0B;AACrC,UAAA,OAAO,OAAA,GAAU,WAAA,EAAa,GAAA,EAAK,SAAA,EAAW,OAAO,CAAA;AAAA,QACvD,CAAA,GACA;AAAA,OACN;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AACA,EAAA,MAAA,CAAO,aAAA,GAAgB,CACrB,SAAA,KAKY;AACZ,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,aAAa,aAAA,CAAc;AAAA,MAC/B,aAAa,WAAA,CAAY;AAAA,QACvB,SAAA,EAAW;AAAA,OACZ;AAAA,KACF,CAAA;AACD,IAAA,OAAO,UAAA,GAAa,CAAA;AAAA,EACtB,CAAA;AACA,EAAA,MAAA,CAAO,WAAA,GAAc,WAAA;AAErB,EAAA,OAAO,MAAA;AACT;ACjGO,SAAS,gBAAA,CAcd,QAAA,EACA,OAAA,EACA,SAAA,GAAuB,EAAC,EACxB;AACA,EAAA,MAAM,SAAS,QAAA,CAAS,MAAA;AAExB,EAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,MAAA,EAAQ,OAAc,CAAA;AACvD,EAAA,MAAM,kBAAkB,OAAA,CAAQ,eAAA;AAEhC,EAAA,MAAM,MAAA,GAAS,CACb,MAAA,KAQW;AAEX,IAAA,OAAO,YAAA,CAAa;AAAA,MAClB,QAAA,EAAU,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA;AAAA,MACjC,OAAA,EAAS,OAAO,EAAE,MAAA,EAAO,KAAM;AAC7B,QAAA,IAAIA,OAAAA;AACJ,QAAA,IAAI;AACF,UAAAA,OAAAA,GAAS,MAAM,QAAA,CAAS;AAAA,YACtB,MAAA;AAAA,YACA,GAAG;AAAA,WACJ,CAAA;AAAA,QACH,SAAS,GAAA,EAAK;AACZ,UAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,YAAA,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,UACpB;AACA,UAAA,MAAM,GAAA;AAAA,QACR;AAEA,QAAA,OAAO,gBAAgBA,OAAM,CAAA;AAAA,MAC/B,CAAA;AAAA,MACA,GAAG;AAAA,KACJ,CAAA;AAAA,EACH,CAAA;AACA,EAAA,MAAA,CAAO,QAAA,GAAW,QAAA;AAClB,EAAA,MAAA,CAAO,GAAA,GAAM,CAAC,MAAA,KAA4B;AAExC,IAAA,OAAO,QAAA,CAAS,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EAChC,CAAA;AAEA,EAAA,MAAA,CAAO,WAAA,GAAc,CAAC,MAAA,KAA4B;AAEhD,IAAA,OAAO,gBAAA,CAAiB,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EACxC,CAAA;AAEA,EAAA,MAAA,CAAO,UAAA,GAAa,CAAC,WAAA,EAA0B,MAAA,KAA4B;AACzE,IAAA,OAAO,YAAY,iBAAA,CAAkB;AAAA;AAAA,MAEnC,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,MAAM;AAAA,KACzC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAA,CAAO,aAAA,GAAgB,CACrB,WAAA,EACA,MAAA,KACG;AACH,IAAA,OAAO,YAAY,iBAAA,CAAkB;AAAA;AAAA,MAEnC,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,MAAM,CAAA;AAAA,MAC1C,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,OAAO,MAAA;AACT;;;ACRO,SAAS,aAAA,CAA6C;AAAA,EAC3D,GAAA;AAAA,EACA,WAAW;AACb,CAAA,EAA4B;AAC1B,EAAA,SAAS,MAAM,MAAA,EAA2B;AACxC,IAAA,MAAM,QAAA,GAAW,IAAI,eAAA,CAAgB;AAAA;AAAA,MAEnC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,gBAAgB,MAAA,CAAO;AAAA,KACxB,CAAA;AAED,IAAA,MAAMC,aAAAA,GAAe,iBAAiB,QAAA,EAAU;AAAA,MAC9C,GAAG,QAAA;AAAA,MACH,eAAA,EAAiB,MAAA,CAAO,eAAA,KAAoB,CAAC,IAAA,KAAS,IAAA;AAAA,KACvD,CAAA;AAED,IAAAA,cAAa,QAAA,GAAW,QAAA;AACxB,IAAA,OAAOA,aAAAA;AAAA,EACT;AAEA,EAAA,SAAS,iBAAA,CACP,UACA,OAAA,EAKA;AACA,IAAA,OAAO,iBAAiB,QAAA,EAAU;AAAA,MAChC,GAAG,QAAA;AAAA,MACH,eAAA,EAAiB,OAAA,EAAS,eAAA,KAAoB,CAAC,IAAA,KAAS,IAAA;AAAA,KACzD,CAAA;AAAA,EACH;AAEA,EAAA,SAAS,cAAc,MAAA,EAAmC;AACxD,IAAA,MAAM,QAAA,GAAW,IAAI,eAAA,CAAgB;AAAA;AAAA,MAEnC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,gBAAgB,MAAA,CAAO;AAAA,KACxB,CAAA;AACD,IAAA,MAAMC,qBAAAA,GAAuB,yBAAyB,QAAA,EAAU;AAAA,MAC9D,GAAG,QAAA;AAAA,MACH,eAAA,EAAiB,MAAA,CAAO,eAAA,KAAoB,CAAC,IAAA,KAAS,IAAA,CAAA;AAAA,MACtD,kBAAkB,MAAA,CAAO,gBAAA;AAAA,MACzB,sBAAsB,MAAA,CAAO,oBAAA;AAAA,MAC7B,kBAAkB,MAAA,CAAO;AAAA,KAC1B,CAAA;AAGD,IAAAA,sBAAqB,QAAA,GAAW,QAAA;AAChC,IAAA,OAAOA,qBAAAA;AAAA,EACT;AAEA,EAAA,SAAS,yBAAA,CACP,UACA,OAAA,EAkBA;AACA,IAAA,OAAO,yBAAyB,QAAA,EAAU;AAAA,MACxC,GAAG,QAAA;AAAA,MACH,eAAA,EAAiB,OAAA,EAAS,eAAA,KAAoB,CAAC,IAAA,KAAS,IAAA,CAAA;AAAA,MACxD,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,MAC1B,sBAAsB,OAAA,EAAS,oBAAA;AAAA,MAC/B,kBAAkB,OAAA,EAAS;AAAA,KAC5B,CAAA;AAAA,EACH;AAEA,EAAA,SAAS,SAAS,MAAA,EAAkC;AAClD,IAAA,MAAM,QAAA,GAAW,IAAI,eAAA,CAAgB;AAAA;AAAA,MAEnC,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,eAAe,MAAA,CAAO,aAAA;AAAA,MACtB,gBAAgB,MAAA,CAAO;AAAA,KACxB,CAAA;AAED,IAAA,MAAMC,YAAAA,GAAc,aAAa,QAAA,EAAU;AAAA,MACzC,eAAA,EAAiB,MAAA,CAAO,eAAA,KAAoB,CAAC,IAAA,KAAS,IAAA,CAAA;AAAA,MACtD,YAAY,MAAA,CAAO,UAAA;AAAA;AAAA,MAEnB,WAAW,MAAA,CAAO,SAAA;AAAA;AAAA,MAElB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,GAAG;AAAA,KACJ,CAAA;AAGD,IAAAA,aAAY,QAAA,GAAW,QAAA;AACvB,IAAA,OAAOA,YAAAA;AAAA,EACT;AAEA,EAAA,SAAS,oBAAA,CACP,UACA,OAAA,EAgBA;AACA,IAAA,OAAO,aAAa,QAAA,EAAU;AAAA,MAC5B,iBAAiB,OAAA,CAAQ,eAAA;AAAA,MACzB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,WAAW,OAAA,CAAQ,SAAA;AAAA;AAAA,MAEnB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAEA,EAAA,OAAO;AAAA;AAAA,IAEL,KAAA;AAAA;AAAA,IAEA,iBAAA;AAAA;AAAA,IAEA,aAAA;AAAA;AAAA,IAEA,yBAAA;AAAA;AAAA,IAEA,QAAA;AAAA;AAAA,IAEA;AAAA,GACF;AACF","file":"index.mjs","sourcesContent":["import type {\n AnyEndpointConfig,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { DataTag, InfiniteData } from '@tanstack/react-query'\nimport type { z, ZodObject } from 'zod/v4'\n\nimport { bindUrlParams } from '@navios/builder'\n\nimport type { BaseQueryParams } from '../types.mjs'\n\ntype Split<S extends string, D extends string> = string extends S\n ? string[]\n : S extends ''\n ? []\n : S extends `${infer T}${D}${infer U}`\n ? [T, ...Split<U, D>]\n : [S]\n\nexport type QueryKeyCreatorResult<\n QuerySchema = undefined,\n Url extends string = string,\n Result = unknown,\n IsInfinite extends boolean = false,\n HasParams extends UrlHasParams<Url> = UrlHasParams<Url>,\n> = {\n template: Split<Url, '/'>\n dataTag: (\n params: (HasParams extends true ? { urlParams: UrlParams<Url> } : {}) &\n (QuerySchema extends ZodObject ? { params: z.input<QuerySchema> } : {}),\n ) => DataTag<\n Split<Url, '/'>,\n IsInfinite extends true ? InfiniteData<Result> : Result,\n Error\n >\n filterKey: (\n params: HasParams extends true ? { urlParams: UrlParams<Url> } : {},\n ) => DataTag<\n Split<Url, '/'>,\n IsInfinite extends true ? InfiniteData<Result> : Result,\n Error\n >\n bindToUrl: (\n params: (HasParams extends true ? { urlParams: UrlParams<Url> } : {}) &\n (QuerySchema extends ZodObject ? { params: z.infer<QuerySchema> } : {}),\n ) => string\n}\n\nexport function queryKeyCreator<\n Config extends AnyEndpointConfig,\n Options extends BaseQueryParams<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 any))\n },\n }\n}\n","import type {\n AnyEndpointConfig,\n UrlHasParams,\n UrlParams,\n} from '@navios/builder'\nimport type { DataTag } from '@tanstack/react-query'\n\nimport type { BaseQueryParams } from '../types.mjs'\n\nimport { queryKeyCreator } from './query-key-creator.mjs'\n\n/**\n * Creates a mutation key for a given endpoint configuration and options.\n *\n * @param {config: Config } config - The endpoint object containing the configuration.\n * @param {Options} [options] - Optional query parameters with a default `processResponse` function that processes the response data.\n *\n * @returns {Object} An object containing the `mutationKey` function.\n *\n * The `mutationKey` function generates a mutation key based on the provided parameters:\n * - If the URL has parameters (`HasParams` is `true`), it expects an object with `urlParams`.\n * - The return type of the `mutationKey` function depends on the `processResponse` function in `options`.\n * If `processResponse` is defined, the return type is a `DataTag` containing the processed result and an error type.\n *\n * @example Example usage:\n * ```typescript\n * const createMutationKey = mutationKeyCreator(endpoint.config);\n * const mutationKey = createMutationKey({ urlParams: { id: 123 } });\n * ```\n *\n * @example Advanced usage:\n * ```ts\n * const createMutationKey = mutationKeyCreator(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 */\nexport function mutationKeyCreator<\n Config extends AnyEndpointConfig,\n Options extends BaseQueryParams<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: any[]) => infer Result\n ? DataTag<[Config['url']], Result, Error>\n : never {\n const queryKey = queryKeyCreator(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","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 } from './types.mjs'\nimport type { ClientQueryArgs } from './types/index.mjs'\n\nimport { queryKeyCreator } from './utils/query-key-creator.mjs'\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 = queryKeyCreator(config, options, true)\n\n const processResponse = options.processResponse\n const res = (\n params: ClientQueryArgs,\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 // @ts-expect-error TS2322 We know the type\n queryKey: queryKey.dataTag(params),\n queryFn: async ({ signal, pageParam }) => {\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)\n },\n getNextPageParam: options.getNextPageParam,\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: ClientQueryArgs) => {\n return useInfiniteQuery(res(params))\n }\n\n res.useSuspense = (params: ClientQueryArgs) => {\n return useSuspenseInfiniteQuery(res(params))\n }\n\n res.invalidate = (queryClient: QueryClient, params: ClientQueryArgs) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: res.queryKey.dataTag(params),\n })\n }\n\n res.invalidateAll = (queryClient: QueryClient, params: ClientQueryArgs) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: res.queryKey.filterKey(params),\n exact: false,\n })\n }\n\n return res\n}\n","import type {\n AbstractEndpoint,\n AnyEndpointConfig,\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 { BaseMutationArgs, BaseMutationParams } from './types.mjs'\n\nimport { mutationKeyCreator } from './index.mjs'\n\nexport function makeMutation<\n Config extends AnyEndpointConfig,\n TData = unknown,\n TVariables extends BaseMutationArgs<Config> = BaseMutationArgs<Config>,\n TResponse = z.output<Config['responseSchema']>,\n TContext = unknown,\n UseKey extends boolean = false,\n>(\n endpoint: AbstractEndpoint<Config>,\n options: BaseMutationParams<\n Config,\n TData,\n TVariables,\n TResponse,\n TContext,\n UseKey\n >,\n) {\n const config = endpoint.config\n\n const mutationKey = mutationKeyCreator(config, options)\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, BaseMutationArgs<Config>> => {\n const queryClient = useQueryClient()\n const {\n useKey,\n useContext,\n onError,\n onSuccess,\n keyPrefix,\n 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(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 { 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 { BaseQueryArgs, BaseQueryParams } from './types.mjs'\nimport type { ClientQueryArgs } from './types/index.mjs'\n\nimport { queryKeyCreator } from './utils/query-key-creator.mjs'\n\ntype Split<S extends string, D extends string> = string extends S\n ? string[]\n : S extends ''\n ? []\n : S extends `${infer T}${D}${infer U}`\n ? [T, ...Split<U, D>]\n : [S]\n\nexport function makeQueryOptions<\n Config extends AnyEndpointConfig,\n Options extends BaseQueryParams<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 // Let's hack the url to be a string for now\n const queryKey = queryKeyCreator(config, options, false)\n const processResponse = options.processResponse\n\n const result = (\n params: BaseQueryArgs<Config>,\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 }) => {\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)\n },\n ...baseQuery,\n })\n }\n result.queryKey = queryKey\n result.use = (params: ClientQueryArgs) => {\n // @ts-expect-error We add additional function to the result\n return useQuery(result(params))\n }\n\n result.useSuspense = (params: ClientQueryArgs) => {\n // @ts-expect-error We add additional function to the result\n return useSuspenseQuery(result(params))\n }\n\n result.invalidate = (queryClient: QueryClient, params: ClientQueryArgs) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: result.queryKey.dataTag(params),\n })\n }\n\n result.invalidateAll = (\n queryClient: QueryClient,\n params: ClientQueryArgs,\n ) => {\n return queryClient.invalidateQueries({\n // @ts-expect-error We add additional function to the result\n queryKey: result.queryKey.filterKey(params),\n exact: false,\n })\n }\n\n return result\n}\n","import type {\n AbstractEndpoint,\n AnyEndpointConfig,\n HttpMethod,\n Util_FlatObject,\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 './types.mjs'\nimport type { ClientInstance, ClientMutationArgs } from './types/index.mjs'\n\nimport { makeInfiniteQueryOptions } from './make-infinite-query-options.mjs'\nimport { makeMutation } from './make-mutation.mjs'\nimport { makeQueryOptions } from './make-query-options.mjs'\n\nexport interface ClientEndpointDefinition<\n Method = HttpMethod,\n Url = string,\n QuerySchema = unknown,\n Response = ZodType,\n> {\n method: Method\n url: Url\n querySchema?: QuerySchema\n responseSchema: Response\n}\n\nexport interface ClientQueryConfig<\n Method = HttpMethod,\n Url = string,\n QuerySchema = ZodObject,\n Response extends ZodType = ZodType,\n Result = z.output<Response>,\n> extends ClientEndpointDefinition<Method, Url, QuerySchema, Response> {\n processResponse?: (data: z.output<Response>) => Result\n}\n\nexport type ClientInfiniteQueryConfig<\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> = Required<ClientEndpointDefinition<Method, Url, QuerySchema, Response>> & {\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\nexport interface ClientMutationDataConfig<\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> extends ClientEndpointDefinition<Method, Url, QuerySchema, Response> {\n requestSchema?: RequestSchema\n processResponse: ProcessResponseFunction<Result, ReqResult>\n useContext?: () => Context\n onSuccess?: (\n queryClient: QueryClient,\n data: NoInfer<Result>,\n variables: Util_FlatObject<\n ClientMutationArgs<Url, RequestSchema, QuerySchema>\n >,\n context: Context,\n ) => void | Promise<void>\n onError?: (\n queryClient: QueryClient,\n error: Error,\n variables: Util_FlatObject<\n ClientMutationArgs<Url, RequestSchema, QuerySchema>\n >,\n context: Context,\n ) => void | Promise<void>\n useKey?: UseKey\n}\n\nexport function declareClient<Options extends ClientOptions>({\n api,\n defaults = {},\n}: Options): ClientInstance {\n function query(config: ClientQueryConfig) {\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 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: ClientInfiniteQueryConfig) {\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 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: ClientMutationDataConfig) {\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: AbstractEndpoint<AnyEndpointConfig>,\n options: {\n processResponse: ProcessResponseFunction\n useContext?: () => unknown\n onSuccess?: (\n queryClient: QueryClient,\n data: unknown,\n variables: Util_FlatObject<ClientMutationArgs>,\n context: unknown,\n ) => void | Promise<void>\n onError?: (\n queryClient: QueryClient,\n error: Error,\n variables: Util_FlatObject<ClientMutationArgs>,\n context: unknown,\n ) => void | Promise<void>\n },\n ) {\n return makeMutation(endpoint, {\n processResponse: options.processResponse,\n useContext: options.useContext,\n onSuccess: options.onSuccess,\n // @ts-expect-error simplify types here\n onError: options.onError,\n ...defaults,\n })\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 }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navios/react-query",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "author": {
5
5
  "name": "Oleksandr Hanzha",
6
6
  "email": "alex@granted.name"
@@ -12,9 +12,9 @@
12
12
  },
13
13
  "license": "MIT",
14
14
  "peerDependencies": {
15
- "@navios/builder": "^0.2.0",
15
+ "@navios/builder": "^0.3.0",
16
16
  "@tanstack/react-query": "^5.51.21",
17
- "zod": "^3.23.8"
17
+ "zod": "^3.25.0 || ^4.0.0"
18
18
  },
19
19
  "typings": "./lib/index.d.mts",
20
20
  "main": "./lib/index.js",
@@ -32,11 +32,11 @@
32
32
  }
33
33
  },
34
34
  "devDependencies": {
35
- "@navios/builder": "^0.2.0",
36
- "@tanstack/react-query": "^5.75.7",
35
+ "@navios/builder": "^0.3.0",
36
+ "@tanstack/react-query": "^5.85.8",
37
37
  "navios": "^0.5.0",
38
- "react": "^19.1.0",
39
- "typescript": "^5.8.3",
40
- "zod": "^3.24.4"
38
+ "react": "^19.1.1",
39
+ "typescript": "^5.9.2",
40
+ "zod": "^4.1.5"
41
41
  }
42
42
  }
@@ -1,7 +1,7 @@
1
1
  import { builder } from '@navios/builder'
2
2
 
3
3
  import { describe, expect, it } from 'vitest'
4
- import { z } from 'zod'
4
+ import { z } from 'zod/v4'
5
5
 
6
6
  import { declareClient } from '../declare-client.mjs'
7
7
 
@@ -4,7 +4,7 @@ import { makeNaviosFakeAdapter } from 'navios/testing'
4
4
  import { builder } from '@navios/builder'
5
5
 
6
6
  import { describe, expect, it, vi } from 'vitest'
7
- import { z } from 'zod'
7
+ import { z } from 'zod/v4'
8
8
 
9
9
  import { declareClient } from '../declare-client.mjs'
10
10
 
@@ -4,7 +4,7 @@ import { makeNaviosFakeAdapter } from 'navios/testing'
4
4
  import { builder } from '@navios/builder'
5
5
 
6
6
  import { describe, expect, it, vi } from 'vitest'
7
- import { z } from 'zod'
7
+ import { z } from 'zod/v4'
8
8
 
9
9
  import { makeMutation } from '../make-mutation.mjs'
10
10
 
@@ -2,7 +2,7 @@ import { builder } from '@navios/builder'
2
2
 
3
3
  import { QueryClient } from '@tanstack/react-query'
4
4
  import { describe, expect, it } from 'vitest'
5
- import { z } from 'zod'
5
+ import { z } from 'zod/v4'
6
6
 
7
7
  import { makeQueryOptions } from '../make-query-options.mjs'
8
8
 
@@ -1,7 +1,7 @@
1
1
  import { builder } from '@navios/builder'
2
2
 
3
3
  import { describe, expect, it } from 'vitest'
4
- import { z } from 'zod'
4
+ import { z } from 'zod/v4'
5
5
 
6
6
  import { makeInfiniteQueryOptions } from '../make-infinite-query-options.mjs'
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { builder } from '@navios/builder'
2
2
 
3
3
  import { describe, expect, it } from 'vitest'
4
- import { z } from 'zod'
4
+ import { z } from 'zod/v4'
5
5
 
6
6
  import { makeQueryOptions } from '../make-query-options.mjs'
7
7
 
@@ -5,7 +5,7 @@ import type {
5
5
  Util_FlatObject,
6
6
  } from '@navios/builder'
7
7
  import type { InfiniteData, QueryClient } from '@tanstack/react-query'
8
- import type { AnyZodObject, z, ZodType } from 'zod'
8
+ import type { z, ZodObject, ZodType } from 'zod/v4'
9
9
 
10
10
  import type { ClientOptions, ProcessResponseFunction } from './types.mjs'
11
11
  import type { ClientInstance, ClientMutationArgs } from './types/index.mjs'
@@ -29,7 +29,7 @@ export interface ClientEndpointDefinition<
29
29
  export interface ClientQueryConfig<
30
30
  Method = HttpMethod,
31
31
  Url = string,
32
- QuerySchema = AnyZodObject,
32
+ QuerySchema = ZodObject,
33
33
  Response extends ZodType = ZodType,
34
34
  Result = z.output<Response>,
35
35
  > extends ClientEndpointDefinition<Method, Url, QuerySchema, Response> {
@@ -39,7 +39,7 @@ export interface ClientQueryConfig<
39
39
  export type ClientInfiniteQueryConfig<
40
40
  Method = HttpMethod,
41
41
  Url = string,
42
- QuerySchema extends AnyZodObject = AnyZodObject,
42
+ QuerySchema extends ZodObject = ZodObject,
43
43
  Response extends ZodType = ZodType,
44
44
  PageResult = z.output<Response>,
45
45
  Result = InfiniteData<PageResult>,
@@ -68,7 +68,7 @@ export interface ClientMutationDataConfig<
68
68
  | 'PATCH'
69
69
  | 'DELETE',
70
70
  Url extends string = string,
71
- RequestSchema = Method extends 'DELETE' ? never : AnyZodObject,
71
+ RequestSchema = Method extends 'DELETE' ? never : ZodObject,
72
72
  QuerySchema = unknown,
73
73
  Response extends ZodType = ZodType,
74
74
  ReqResult = z.output<Response>,
@@ -9,7 +9,7 @@ import type {
9
9
  UseInfiniteQueryOptions,
10
10
  UseSuspenseInfiniteQueryOptions,
11
11
  } from '@tanstack/react-query'
12
- import type { z } from 'zod'
12
+ import type { z } from 'zod/v4'
13
13
 
14
14
  import {
15
15
  infiniteQueryOptions,
@@ -5,7 +5,7 @@ import type {
5
5
  UrlParams,
6
6
  } from '@navios/builder'
7
7
  import type { UseMutationResult } from '@tanstack/react-query'
8
- import type { z } from 'zod'
8
+ import type { z } from 'zod/v4'
9
9
 
10
10
  import {
11
11
  useIsMutating,
@@ -4,7 +4,7 @@ import type {
4
4
  HttpMethod,
5
5
  Util_FlatObject,
6
6
  } from '@navios/builder'
7
- import type { z } from 'zod'
7
+ import type { z } from 'zod/v4'
8
8
 
9
9
  export type ClientEndpointHelper<
10
10
  Method extends HttpMethod = HttpMethod,