@igniter-js/caller 0.1.54 → 0.1.56

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.
@@ -1,7 +1,7 @@
1
- import { I as IgniterCallerManager, a as IgniterCallerApiResponse, b as IgniterCallerSchemaMap, c as IgniterCallerSchemaMethod, E as EndpointInfo, G as GetPaths, d as InferResponse, T as TypedRequestBuilder, e as IgniterCallerTypedRequestBuilder, P as PostPaths, f as PutPaths, g as PatchPaths, D as DeletePaths, H as HeadPaths } from '../manager-DXmJbnQY.mjs';
2
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
2
  import { PropsWithChildren } from 'react';
4
3
  import { IgniterError } from '@igniter-js/common';
4
+ import { I as IgniterCallerManager, a as IgniterCallerApiResponse, b as IgniterCallerSchemaMap, c as IgniterCallerSchemaMethod, E as EndpointInfo, G as GetPaths, d as InferResponse, T as TypedRequestBuilder, e as IgniterCallerTypedRequestBuilder, P as PostPaths, f as PutPaths, g as PatchPaths, D as DeletePaths, H as HeadPaths } from '../manager-DXmJbnQY.mjs';
5
5
  import '@igniter-js/telemetry';
6
6
  import 'zod';
7
7
  import '../store-D2p2dqGN.mjs';
@@ -44,16 +44,6 @@ interface IgniterCallerClientContextValue<TCallers extends IgniterCallerClientMa
44
44
  listeners: IgniterCallerClientListeners;
45
45
  }
46
46
 
47
- interface IgniterCallerProviderProps<TCallers extends IgniterCallerClientMap> extends PropsWithChildren {
48
- callers: TCallers;
49
- configs?: IgniterCallerClientConfigs<TCallers>;
50
- hooks?: IgniterCallerClientConfig;
51
- onError?: (error: IgniterError) => void;
52
- }
53
- declare function IgniterCallerProvider<TCallers extends IgniterCallerClientMap>(props: IgniterCallerProviderProps<TCallers>): react_jsx_runtime.JSX.Element;
54
- declare function useIgniterCallerContext<TCallers extends IgniterCallerClientMap>(): IgniterCallerClientContextValue<TCallers>;
55
- declare function useIgniterCaller<TCallers extends IgniterCallerClientMap>(): <TKey extends keyof TCallers>(callerKey: TKey) => IgniterCallerClient<IgniterCallerManager<any>>;
56
-
57
47
  type IgniterCallerClientRequestParams<TSchemas extends IgniterCallerSchemaMap, TPath extends string, TMethod extends IgniterCallerSchemaMethod> = EndpointInfo<TSchemas, TPath, TMethod>['params'] & Record<string, string | number | boolean>;
58
48
  type IgniterCallerClientRequestBody<TSchemas extends IgniterCallerSchemaMap, TPath extends string, TMethod extends IgniterCallerSchemaMethod> = EndpointInfo<TSchemas, TPath, TMethod>['request'];
59
49
  interface IgniterCallerUseQueryOptions<TResponse, TVariables extends {
@@ -184,6 +174,16 @@ interface IgniterCallerClient<TCaller extends IgniterCallerManager<any>> {
184
174
  };
185
175
  }
186
176
 
177
+ interface IgniterCallerProviderProps<TCallers extends IgniterCallerClientMap> extends PropsWithChildren {
178
+ callers: TCallers;
179
+ configs?: IgniterCallerClientConfigs<TCallers>;
180
+ hooks?: IgniterCallerClientConfig;
181
+ onError?: (error: IgniterError) => void;
182
+ }
183
+ declare function IgniterCallerProvider<TCallers extends IgniterCallerClientMap>(props: IgniterCallerProviderProps<TCallers>): react_jsx_runtime.JSX.Element;
184
+ declare function useIgniterCallerContext<TCallers extends IgniterCallerClientMap>(): IgniterCallerClientContextValue<TCallers>;
185
+ declare function useIgniterCaller<TCallers extends IgniterCallerClientMap>(): <TKey extends keyof TCallers>(callerKey: TKey) => IgniterCallerClient<TCallers[TKey]>;
186
+
187
187
  declare function createIgniterCallerClient<TCaller extends IgniterCallerManager<any>, TCallers extends Record<string, IgniterCallerManager<any>>>(context: IgniterCallerClientContextValue<TCallers>, callerKey: keyof TCallers): IgniterCallerClient<TCaller>;
188
188
 
189
189
  declare class IgniterCallerClientCache {
@@ -1,7 +1,7 @@
1
- import { I as IgniterCallerManager, a as IgniterCallerApiResponse, b as IgniterCallerSchemaMap, c as IgniterCallerSchemaMethod, E as EndpointInfo, G as GetPaths, d as InferResponse, T as TypedRequestBuilder, e as IgniterCallerTypedRequestBuilder, P as PostPaths, f as PutPaths, g as PatchPaths, D as DeletePaths, H as HeadPaths } from '../manager-DQcuAp3y.js';
2
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
2
  import { PropsWithChildren } from 'react';
4
3
  import { IgniterError } from '@igniter-js/common';
4
+ import { I as IgniterCallerManager, a as IgniterCallerApiResponse, b as IgniterCallerSchemaMap, c as IgniterCallerSchemaMethod, E as EndpointInfo, G as GetPaths, d as InferResponse, T as TypedRequestBuilder, e as IgniterCallerTypedRequestBuilder, P as PostPaths, f as PutPaths, g as PatchPaths, D as DeletePaths, H as HeadPaths } from '../manager-DQcuAp3y.js';
5
5
  import '@igniter-js/telemetry';
6
6
  import 'zod';
7
7
  import '../store-D2p2dqGN.js';
@@ -44,16 +44,6 @@ interface IgniterCallerClientContextValue<TCallers extends IgniterCallerClientMa
44
44
  listeners: IgniterCallerClientListeners;
45
45
  }
46
46
 
47
- interface IgniterCallerProviderProps<TCallers extends IgniterCallerClientMap> extends PropsWithChildren {
48
- callers: TCallers;
49
- configs?: IgniterCallerClientConfigs<TCallers>;
50
- hooks?: IgniterCallerClientConfig;
51
- onError?: (error: IgniterError) => void;
52
- }
53
- declare function IgniterCallerProvider<TCallers extends IgniterCallerClientMap>(props: IgniterCallerProviderProps<TCallers>): react_jsx_runtime.JSX.Element;
54
- declare function useIgniterCallerContext<TCallers extends IgniterCallerClientMap>(): IgniterCallerClientContextValue<TCallers>;
55
- declare function useIgniterCaller<TCallers extends IgniterCallerClientMap>(): <TKey extends keyof TCallers>(callerKey: TKey) => IgniterCallerClient<IgniterCallerManager<any>>;
56
-
57
47
  type IgniterCallerClientRequestParams<TSchemas extends IgniterCallerSchemaMap, TPath extends string, TMethod extends IgniterCallerSchemaMethod> = EndpointInfo<TSchemas, TPath, TMethod>['params'] & Record<string, string | number | boolean>;
58
48
  type IgniterCallerClientRequestBody<TSchemas extends IgniterCallerSchemaMap, TPath extends string, TMethod extends IgniterCallerSchemaMethod> = EndpointInfo<TSchemas, TPath, TMethod>['request'];
59
49
  interface IgniterCallerUseQueryOptions<TResponse, TVariables extends {
@@ -184,6 +174,16 @@ interface IgniterCallerClient<TCaller extends IgniterCallerManager<any>> {
184
174
  };
185
175
  }
186
176
 
177
+ interface IgniterCallerProviderProps<TCallers extends IgniterCallerClientMap> extends PropsWithChildren {
178
+ callers: TCallers;
179
+ configs?: IgniterCallerClientConfigs<TCallers>;
180
+ hooks?: IgniterCallerClientConfig;
181
+ onError?: (error: IgniterError) => void;
182
+ }
183
+ declare function IgniterCallerProvider<TCallers extends IgniterCallerClientMap>(props: IgniterCallerProviderProps<TCallers>): react_jsx_runtime.JSX.Element;
184
+ declare function useIgniterCallerContext<TCallers extends IgniterCallerClientMap>(): IgniterCallerClientContextValue<TCallers>;
185
+ declare function useIgniterCaller<TCallers extends IgniterCallerClientMap>(): <TKey extends keyof TCallers>(callerKey: TKey) => IgniterCallerClient<TCallers[TKey]>;
186
+
187
187
  declare function createIgniterCallerClient<TCaller extends IgniterCallerManager<any>, TCallers extends Record<string, IgniterCallerManager<any>>>(context: IgniterCallerClientContextValue<TCallers>, callerKey: keyof TCallers): IgniterCallerClient<TCaller>;
188
188
 
189
189
  declare class IgniterCallerClientCache {
@@ -246,7 +246,7 @@ function createUseQuery(params) {
246
246
  mergedConfig.onQueryLoading?.(false);
247
247
  }
248
248
  },
249
- [callerKey, method, path, buildRequest, getMergedConfig, onError]
249
+ [callerKey, method, path]
250
250
  );
251
251
  const refetch = react.useCallback(() => {
252
252
  void execute(lastVariablesRef.current);
@@ -623,9 +623,13 @@ function IgniterCallerProvider(props) {
623
623
  },
624
624
  []
625
625
  );
626
+ const configStateRef = react.useMemo(() => ({ current: configState }), []);
627
+ configStateRef.current = configState;
628
+ const globalConfigRef = react.useMemo(() => ({ current: globalConfig }), []);
629
+ globalConfigRef.current = globalConfig;
626
630
  const getMergedConfig = react.useCallback(
627
- (callerKey) => mergeConfig(globalConfig, configState[callerKey]),
628
- [globalConfig, configState]
631
+ (callerKey) => mergeConfig(globalConfigRef.current, configStateRef.current[callerKey]),
632
+ [globalConfigRef, configStateRef]
629
633
  );
630
634
  const getConfig = react.useCallback(
631
635
  (callerKey, key) => getMergedConfig(callerKey)[key],
@@ -648,8 +652,6 @@ function IgniterCallerProvider(props) {
648
652
  }),
649
653
  [
650
654
  callers,
651
- configState,
652
- globalConfig,
653
655
  getConfig,
654
656
  getMergedConfig,
655
657
  invalidate,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/utils/cache.ts","../../src/client/utils/query-key.ts","../../src/client/utils/cookies.ts","../../src/client/builders/hooks.builder.tsx","../../src/client/builders/client.builder.ts","../../src/client/builders/provider.builder.tsx"],"names":["useState","useRef","useMemo","useCallback","useEffect","createContext","value","jsx","useContext"],"mappings":"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","file":"index.js","sourcesContent":["export class IgniterCallerClientCache {\n private static cache = new Map<\n string,\n { data: unknown; timestamp: number }\n >()\n\n static get<T>(key: string, staleTime?: number): T | undefined {\n const entry = IgniterCallerClientCache.cache.get(key)\n if (!entry) return undefined\n\n if (staleTime && Date.now() - entry.timestamp > staleTime) {\n IgniterCallerClientCache.cache.delete(key)\n return undefined\n }\n\n return entry.data as T\n }\n\n static set(key: string, data: unknown): void {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: Date.now(),\n })\n }\n\n static replacePrefix(prefix: string, data: unknown): void {\n for (const [key, entry] of IgniterCallerClientCache.cache.entries()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: entry.timestamp,\n })\n }\n }\n }\n\n static clearPrefix(prefix: string): void {\n for (const key of IgniterCallerClientCache.cache.keys()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.delete(key)\n }\n }\n }\n}\n","import type { IgniterCallerClientQuery } from '../interfaces/config'\n\nconst EMPTY_KEY = '{}'\n\nfunction stableStringify(value: unknown): string {\n if (value === null || value === undefined) return EMPTY_KEY\n if (typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) {\n return `[${value.map((item) => stableStringify(item)).join(',')}]`\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([a], [b]) => a.localeCompare(b),\n )\n\n return `{${entries\n .map(([key, val]) => `${JSON.stringify(key)}:${stableStringify(val)}`)\n .join(',')}}`\n}\n\nexport function buildQueryKey(params: {\n callerKey: string\n method: string\n path: string\n query?: IgniterCallerClientQuery\n params?: Record<string, string | number | boolean>\n}): string {\n const { callerKey, method, path, query, params: pathParams } = params\n const payload = {\n params: pathParams || {},\n query: query || {},\n }\n\n return `${callerKey}::${method.toUpperCase()}::${path}::${stableStringify(payload)}`\n}\n\nexport function buildQueryPrefix(params: {\n callerKey: string\n method: string\n path: string\n}): string {\n const { callerKey, method, path } = params\n return `${callerKey}::${method.toUpperCase()}::${path}`\n}\n","import type { IgniterCallerClientCookies } from '../interfaces/config'\n\nexport function buildCookieHeader(\n cookies?: IgniterCallerClientCookies,\n): string | undefined {\n if (!cookies || Object.keys(cookies).length === 0) return undefined\n\n return Object.entries(cookies)\n .map(([key, value]) => `${key}=${value}`)\n .join('; ')\n}\n","'use client'\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type { IgniterCallerApiResponse } from '../../types/response'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientQuery,\n} from '../interfaces/config'\nimport type { IgniterCallerClientRefetchFn } from '../interfaces/context'\nimport type {\n IgniterCallerUseMutateOptions,\n IgniterCallerUseMutateResult,\n IgniterCallerUseQueryOptions,\n IgniterCallerUseQueryResult,\n} from '../interfaces/hooks'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { buildQueryKey, buildQueryPrefix } from '../utils/query-key'\nimport { buildCookieHeader } from '../utils/cookies'\n\nexport interface IgniterCallerClientRequestInput {\n params?: Record<string, string | number | boolean>\n query?: Record<string, string | number | boolean>\n headers?: Record<string, string>\n cookies?: Record<string, string>\n body?: unknown\n}\n\nexport type IgniterCallerClientRequestFactory<TResponse> = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n) => {\n execute: () => Promise<IgniterCallerApiResponse<TResponse>>\n}\n\ninterface UseQueryParams<TResponse, TVariables> {\n callerKey: string\n method: 'GET' | 'HEAD'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n register: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n unregister: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n invalidate: (keys: string | string[], data?: unknown) => void\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\ninterface UseMutateParams<TResponse, TVariables> {\n callerKey: string\n method: 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeQueryInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const headers = {\n ...(config.headers || {}),\n ...(options?.headers || {}),\n ...(variables?.headers || {}),\n }\n const cookies = {\n ...(config.cookies || {}),\n ...(options?.cookies || {}),\n ...(variables?.cookies || {}),\n }\n const query = {\n ...(config.query || {}),\n ...(options?.query || {}),\n ...(variables?.query || {}),\n ...(options?.params || {}),\n ...(variables?.params || {}),\n }\n\n const cookieHeader = buildCookieHeader(cookies)\n if (cookieHeader && !headers.Cookie) {\n headers.Cookie = cookieHeader\n }\n\n return {\n headers,\n cookies,\n query,\n params: variables?.params || options?.params,\n }\n}\n\nfunction mergeMutateInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const merged = mergeQueryInput(config, options, variables)\n return {\n ...merged,\n body: variables?.body ?? options?.body,\n }\n}\n\nexport function createUseQuery<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n },\n>(\n params: UseQueryParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseQueryOptions<TResponse, TVariables>,\n) => IgniterCallerUseQueryResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n register,\n unregister,\n invalidate,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n options?.initialData ? 'success' : 'loading',\n )\n const [isFetching, setIsFetching] = useState(false)\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({\n data: options?.initialData ?? null,\n error: null,\n })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const stableKey = useMemo(() => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n options as IgniterCallerClientRequestInput | undefined,\n lastVariablesRef.current as IgniterCallerClientRequestInput | undefined,\n )\n\n return buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n }, [\n callerKey,\n method,\n path,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.params || {}),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.query || {}),\n ])\n\n const execute = useCallback(\n async (nextVariables?: TVariables) => {\n if (optionsRef.current?.enabled === false) return\n\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n const queryKey = buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setIsFetching(true)\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onQueryLoading?.(true)\n\n if (optionsRef.current?.staleTime) {\n const cached = IgniterCallerClientCache.get<TResponse>(\n queryKey,\n optionsRef.current.staleTime,\n )\n if (cached !== undefined) {\n setResponse({ data: cached, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(cached)\n mergedConfig.onQuerySuccess?.(cached)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n setIsFetching(false)\n return {\n data: cached,\n error: undefined,\n }\n }\n }\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onQueryError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onQuerySuccess?.(data)\n\n if (optionsRef.current?.staleTime && data !== null) {\n IgniterCallerClientCache.set(queryKey, data)\n }\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onQuerySettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onQueryError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onQuerySettled?.(null, typedError)\n } finally {\n setIsFetching(false)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n }\n },\n [callerKey, method, path, buildRequest, getMergedConfig, onError],\n )\n\n const refetch = useCallback(() => {\n void execute(lastVariablesRef.current)\n }, [execute])\n\n const invalidateQuery = useCallback(\n (data?: TResponse) => {\n const prefix = buildQueryPrefix({ callerKey, method, path })\n invalidate(prefix, data)\n },\n [callerKey, method, path, invalidate],\n )\n\n useEffect(() => {\n register(stableKey, refetch)\n return () => unregister(stableKey, refetch)\n }, [register, unregister, refetch, stableKey])\n\n const initialFetchDoneRef = useRef(false)\n\n useEffect(() => {\n if (optionsRef.current?.enabled === false) return\n if (optionsRef.current?.refetchOnMount === false && initialFetchDoneRef.current) return\n\n initialFetchDoneRef.current = true\n void execute(lastVariablesRef.current)\n }, [stableKey, execute])\n\n useEffect(() => {\n const interval = optionsRef.current?.refetchInterval\n if (!interval) return\n\n const handler = setInterval(() => {\n if (\n optionsRef.current?.refetchIntervalInBackground === false &&\n typeof document !== 'undefined' &&\n document.hidden\n ) {\n return\n }\n void execute(lastVariablesRef.current)\n }, interval)\n\n return () => clearInterval(handler)\n }, [execute])\n\n useEffect(() => {\n if (optionsRef.current?.refetchOnWindowFocus === false) return\n if (typeof window === 'undefined') return\n\n const handler = () => {\n void execute(lastVariablesRef.current)\n }\n window.addEventListener('focus', handler)\n return () => window.removeEventListener('focus', handler)\n }, [execute])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isFetching,\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n refetch,\n invalidate: invalidateQuery,\n execute,\n }\n }\n}\n\nexport function createUseMutate<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n body?: unknown\n },\n>(\n params: UseMutateParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseMutateOptions<TResponse, TVariables>,\n) => IgniterCallerUseMutateResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n 'success',\n )\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({ data: null, error: null })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const mutate = useCallback(\n async (nextVariables?: TVariables) => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeMutateInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onMutationLoading?.(true)\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onMutationError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onMutationSuccess?.(data)\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onMutationSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onMutationError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onMutationSettled?.(null, typedError)\n } finally {\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onMutationLoading?.(false)\n }\n },\n [method, path, buildRequest, getMergedConfig, onError],\n )\n\n const retry = useCallback(() => {\n void mutate(lastVariablesRef.current)\n }, [mutate])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n mutate,\n retry,\n }\n }\n}\n","import type { IgniterCallerManager } from '../../core/manager'\nimport type { IgniterCallerClientContextValue } from '../interfaces/context'\nimport type { IgniterCallerClientRequestInput } from './hooks.builder'\nimport {\n createUseMutate,\n createUseQuery,\n} from './hooks.builder'\nimport type {\n IgniterCallerClient,\n IgniterCallerClientConfigApi,\n} from '../interfaces/client'\nimport { buildQueryPrefix } from '../utils/query-key'\n\nfunction applyRequestInput(\n builder: { params: (params: Record<string, string | number | boolean>) => any; headers: (headers: Record<string, string>) => any; body: (body: unknown) => any },\n input: IgniterCallerClientRequestInput,\n) {\n if (input.query && Object.keys(input.query).length > 0) {\n builder.params(input.query)\n }\n\n if (input.headers && Object.keys(input.headers).length > 0) {\n builder.headers(input.headers)\n }\n\n if (input.body !== undefined) {\n builder.body(input.body)\n }\n}\n\nexport function createIgniterCallerClient<\n TCaller extends IgniterCallerManager<any>,\n TCallers extends Record<string, IgniterCallerManager<any>>,\n>(\n context: IgniterCallerClientContextValue<TCallers>,\n callerKey: keyof TCallers,\n): IgniterCallerClient<TCaller> {\n const caller = context.callers[callerKey] as unknown as TCaller\n\n const getMergedConfig = () => context.getMergedConfig(callerKey)\n\n const buildRequest = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n ) => {\n if (!path) {\n throw new Error(\n 'IgniterCallerClient: path is required when using hooks with Caller client.',\n )\n }\n\n const methodKey = method.toLowerCase() as\n | 'get'\n | 'post'\n | 'put'\n | 'patch'\n | 'delete'\n | 'head'\n\n const builder = (caller as any)[methodKey](path)\n applyRequestInput(builder, input)\n return builder as { execute: () => Promise<any> }\n }\n\n const invalidate = (pathOrPaths: string | string[], data?: unknown) => {\n const paths = Array.isArray(pathOrPaths) ? pathOrPaths : [pathOrPaths]\n const prefixes = paths.map((path) =>\n buildQueryPrefix({\n callerKey: String(callerKey),\n method: 'GET',\n path,\n }),\n )\n context.invalidate(prefixes, data)\n }\n\n const config: IgniterCallerClientConfigApi = {\n set: (key, value) => context.setConfig(callerKey, key, value),\n get: (key) => context.getConfig(callerKey, key),\n reset: () => context.setConfigBatch(callerKey, {}),\n }\n\n const get = (path?: string) => {\n const builder = caller.get(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'GET',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const head = (path?: string) => {\n const builder = caller.head(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'HEAD',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const post = (path?: string) => {\n const builder = caller.post(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'POST',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const put = (path?: string) => {\n const builder = caller.put(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PUT',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const patch = (path?: string) => {\n const builder = caller.patch(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PATCH',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const del = (path?: string) => {\n const builder = caller.delete(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'DELETE',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n return {\n raw: caller,\n config,\n invalidate: invalidate as any,\n get: get as any,\n post: post as any,\n put: put as any,\n patch: patch as any,\n delete: del as any,\n head: head as any,\n }\n}\n","'use client'\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type {\n IgniterCallerClientContextValue,\n IgniterCallerClientConfigs,\n IgniterCallerClientMap,\n IgniterCallerClientRefetchFn,\n} from '../interfaces/context'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientConfigKey,\n IgniterCallerClientConfigValue,\n} from '../interfaces/config'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { createIgniterCallerClient } from './client.builder'\n\nconst IgniterCallerClientContext = createContext<\n IgniterCallerClientContextValue<any> | undefined\n>(undefined)\n\nexport interface IgniterCallerProviderProps<\n TCallers extends IgniterCallerClientMap,\n> extends PropsWithChildren {\n callers: TCallers\n configs?: IgniterCallerClientConfigs<TCallers>\n hooks?: IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeConfig(\n globalConfig: IgniterCallerClientConfig,\n localConfig?: IgniterCallerClientConfig,\n): IgniterCallerClientConfig {\n return {\n ...globalConfig,\n ...localConfig,\n headers: {\n ...(globalConfig.headers || {}),\n ...(localConfig?.headers || {}),\n },\n cookies: {\n ...(globalConfig.cookies || {}),\n ...(localConfig?.cookies || {}),\n },\n query: {\n ...(globalConfig.query || {}),\n ...(localConfig?.query || {}),\n },\n }\n}\n\nexport function IgniterCallerProvider<\n TCallers extends IgniterCallerClientMap,\n>(props: IgniterCallerProviderProps<TCallers>) {\n const { callers, configs, hooks, onError, children } = props\n const [configState, setConfigState] = useState<\n IgniterCallerClientConfigs<TCallers>\n >(configs || {})\n const [listeners] = useState(\n () => new Map<string, Set<IgniterCallerClientRefetchFn>>(),\n )\n\n const globalConfig = useMemo<IgniterCallerClientConfig>(\n () => hooks || {},\n [hooks],\n )\n\n const register = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key) || new Set()\n current.add(refetch)\n listeners.set(key, current)\n },\n [listeners],\n )\n\n const unregister = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key)\n if (!current) return\n current.delete(refetch)\n if (current.size === 0) {\n listeners.delete(key)\n }\n },\n [listeners],\n )\n\n const invalidate = useCallback(\n (keys: string | string[], data?: unknown) => {\n const keysArray = Array.isArray(keys) ? keys : [keys]\n\n keysArray.forEach((prefix) => {\n if (data !== undefined) {\n IgniterCallerClientCache.replacePrefix(prefix, data)\n } else {\n IgniterCallerClientCache.clearPrefix(prefix)\n }\n\n listeners.forEach((refetchFns, registeredKey) => {\n if (registeredKey.startsWith(prefix)) {\n refetchFns.forEach((refetch) => refetch(true))\n }\n })\n })\n },\n [listeners],\n )\n\n const setConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n value: IgniterCallerClientConfigValue<TKey>,\n ) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n [key]: value,\n },\n }))\n },\n [],\n )\n\n const setConfigBatch = useCallback(\n (callerKey: keyof TCallers, config: Partial<IgniterCallerClientConfig>) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n ...config,\n },\n }))\n },\n [],\n )\n\n const getMergedConfig = useCallback(\n (callerKey: keyof TCallers) =>\n mergeConfig(globalConfig, configState[callerKey]),\n [globalConfig, configState],\n )\n\n const getConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n ) => getMergedConfig(callerKey)[key],\n [getMergedConfig],\n )\n\n const value = useMemo<IgniterCallerClientContextValue<TCallers>>(\n () => ({\n callers,\n configs: configState,\n globalConfig,\n setConfig,\n setConfigBatch,\n getConfig,\n getMergedConfig,\n register,\n unregister,\n invalidate,\n listeners,\n onError,\n }),\n [\n callers,\n configState,\n globalConfig,\n getConfig,\n getMergedConfig,\n invalidate,\n listeners,\n onError,\n register,\n setConfig,\n setConfigBatch,\n unregister,\n ],\n )\n\n return (\n <IgniterCallerClientContext.Provider value={value}>\n {children}\n </IgniterCallerClientContext.Provider>\n )\n}\n\nexport function useIgniterCallerContext<\n TCallers extends IgniterCallerClientMap,\n>() {\n const context = useContext(\n IgniterCallerClientContext,\n ) as IgniterCallerClientContextValue<TCallers> | undefined\n\n if (!context) {\n throw new Error(\n 'IgniterCallerProvider is missing. Wrap your app with <IgniterCallerProvider>.',\n )\n }\n\n return context\n}\n\nexport function useIgniterCaller<TCallers extends IgniterCallerClientMap>() {\n const context = useIgniterCallerContext<TCallers>()\n\n return <TKey extends keyof TCallers>(callerKey: TKey) =>\n createIgniterCallerClient(context, callerKey)\n}\n"]}
1
+ {"version":3,"sources":["../../src/client/utils/cache.ts","../../src/client/utils/query-key.ts","../../src/client/utils/cookies.ts","../../src/client/builders/hooks.builder.tsx","../../src/client/builders/client.builder.ts","../../src/client/builders/provider.builder.tsx"],"names":["useState","useRef","useMemo","useCallback","useEffect","createContext","value","jsx","useContext"],"mappings":"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","file":"index.js","sourcesContent":["export class IgniterCallerClientCache {\n private static cache = new Map<\n string,\n { data: unknown; timestamp: number }\n >()\n\n static get<T>(key: string, staleTime?: number): T | undefined {\n const entry = IgniterCallerClientCache.cache.get(key)\n if (!entry) return undefined\n\n if (staleTime && Date.now() - entry.timestamp > staleTime) {\n IgniterCallerClientCache.cache.delete(key)\n return undefined\n }\n\n return entry.data as T\n }\n\n static set(key: string, data: unknown): void {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: Date.now(),\n })\n }\n\n static replacePrefix(prefix: string, data: unknown): void {\n for (const [key, entry] of IgniterCallerClientCache.cache.entries()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: entry.timestamp,\n })\n }\n }\n }\n\n static clearPrefix(prefix: string): void {\n for (const key of IgniterCallerClientCache.cache.keys()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.delete(key)\n }\n }\n }\n}\n","import type { IgniterCallerClientQuery } from '../interfaces/config'\n\nconst EMPTY_KEY = '{}'\n\nfunction stableStringify(value: unknown): string {\n if (value === null || value === undefined) return EMPTY_KEY\n if (typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) {\n return `[${value.map((item) => stableStringify(item)).join(',')}]`\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([a], [b]) => a.localeCompare(b),\n )\n\n return `{${entries\n .map(([key, val]) => `${JSON.stringify(key)}:${stableStringify(val)}`)\n .join(',')}}`\n}\n\nexport function buildQueryKey(params: {\n callerKey: string\n method: string\n path: string\n query?: IgniterCallerClientQuery\n params?: Record<string, string | number | boolean>\n}): string {\n const { callerKey, method, path, query, params: pathParams } = params\n const payload = {\n params: pathParams || {},\n query: query || {},\n }\n\n return `${callerKey}::${method.toUpperCase()}::${path}::${stableStringify(payload)}`\n}\n\nexport function buildQueryPrefix(params: {\n callerKey: string\n method: string\n path: string\n}): string {\n const { callerKey, method, path } = params\n return `${callerKey}::${method.toUpperCase()}::${path}`\n}\n","import type { IgniterCallerClientCookies } from '../interfaces/config'\n\nexport function buildCookieHeader(\n cookies?: IgniterCallerClientCookies,\n): string | undefined {\n if (!cookies || Object.keys(cookies).length === 0) return undefined\n\n return Object.entries(cookies)\n .map(([key, value]) => `${key}=${value}`)\n .join('; ')\n}\n","'use client'\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type { IgniterCallerApiResponse } from '../../types/response'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientQuery,\n} from '../interfaces/config'\nimport type { IgniterCallerClientRefetchFn } from '../interfaces/context'\nimport type {\n IgniterCallerUseMutateOptions,\n IgniterCallerUseMutateResult,\n IgniterCallerUseQueryOptions,\n IgniterCallerUseQueryResult,\n} from '../interfaces/hooks'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { buildQueryKey, buildQueryPrefix } from '../utils/query-key'\nimport { buildCookieHeader } from '../utils/cookies'\n\nexport interface IgniterCallerClientRequestInput {\n params?: Record<string, string | number | boolean>\n query?: Record<string, string | number | boolean>\n headers?: Record<string, string>\n cookies?: Record<string, string>\n body?: unknown\n}\n\nexport type IgniterCallerClientRequestFactory<TResponse> = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n) => {\n execute: () => Promise<IgniterCallerApiResponse<TResponse>>\n}\n\ninterface UseQueryParams<TResponse, TVariables> {\n callerKey: string\n method: 'GET' | 'HEAD'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n register: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n unregister: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n invalidate: (keys: string | string[], data?: unknown) => void\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\ninterface UseMutateParams<TResponse, TVariables> {\n callerKey: string\n method: 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeQueryInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const headers = {\n ...(config.headers || {}),\n ...(options?.headers || {}),\n ...(variables?.headers || {}),\n }\n const cookies = {\n ...(config.cookies || {}),\n ...(options?.cookies || {}),\n ...(variables?.cookies || {}),\n }\n const query = {\n ...(config.query || {}),\n ...(options?.query || {}),\n ...(variables?.query || {}),\n ...(options?.params || {}),\n ...(variables?.params || {}),\n }\n\n const cookieHeader = buildCookieHeader(cookies)\n if (cookieHeader && !headers.Cookie) {\n headers.Cookie = cookieHeader\n }\n\n return {\n headers,\n cookies,\n query,\n params: variables?.params || options?.params,\n }\n}\n\nfunction mergeMutateInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const merged = mergeQueryInput(config, options, variables)\n return {\n ...merged,\n body: variables?.body ?? options?.body,\n }\n}\n\nexport function createUseQuery<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n },\n>(\n params: UseQueryParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseQueryOptions<TResponse, TVariables>,\n) => IgniterCallerUseQueryResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n register,\n unregister,\n invalidate,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n options?.initialData ? 'success' : 'loading',\n )\n const [isFetching, setIsFetching] = useState(false)\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({\n data: options?.initialData ?? null,\n error: null,\n })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const stableKey = useMemo(() => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n options as IgniterCallerClientRequestInput | undefined,\n lastVariablesRef.current as IgniterCallerClientRequestInput | undefined,\n )\n\n return buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n }, [\n callerKey,\n method,\n path,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.params || {}),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.query || {}),\n ])\n\n const execute = useCallback(\n async (nextVariables?: TVariables) => {\n if (optionsRef.current?.enabled === false) return\n\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n const queryKey = buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setIsFetching(true)\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onQueryLoading?.(true)\n\n if (optionsRef.current?.staleTime) {\n const cached = IgniterCallerClientCache.get<TResponse>(\n queryKey,\n optionsRef.current.staleTime,\n )\n if (cached !== undefined) {\n setResponse({ data: cached, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(cached)\n mergedConfig.onQuerySuccess?.(cached)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n setIsFetching(false)\n return {\n data: cached,\n error: undefined,\n }\n }\n }\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onQueryError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onQuerySuccess?.(data)\n\n if (optionsRef.current?.staleTime && data !== null) {\n IgniterCallerClientCache.set(queryKey, data)\n }\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onQuerySettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onQueryError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onQuerySettled?.(null, typedError)\n } finally {\n setIsFetching(false)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n }\n },\n [callerKey, method, path],\n )\n\n const refetch = useCallback(() => {\n void execute(lastVariablesRef.current)\n }, [execute])\n\n const invalidateQuery = useCallback(\n (data?: TResponse) => {\n const prefix = buildQueryPrefix({ callerKey, method, path })\n invalidate(prefix, data)\n },\n [callerKey, method, path, invalidate],\n )\n\n useEffect(() => {\n register(stableKey, refetch)\n return () => unregister(stableKey, refetch)\n }, [register, unregister, refetch, stableKey])\n\n const initialFetchDoneRef = useRef(false)\n\n useEffect(() => {\n if (optionsRef.current?.enabled === false) return\n if (optionsRef.current?.refetchOnMount === false && initialFetchDoneRef.current) return\n\n initialFetchDoneRef.current = true\n void execute(lastVariablesRef.current)\n }, [stableKey, execute])\n\n useEffect(() => {\n const interval = optionsRef.current?.refetchInterval\n if (!interval) return\n\n const handler = setInterval(() => {\n if (\n optionsRef.current?.refetchIntervalInBackground === false &&\n typeof document !== 'undefined' &&\n document.hidden\n ) {\n return\n }\n void execute(lastVariablesRef.current)\n }, interval)\n\n return () => clearInterval(handler)\n }, [execute])\n\n useEffect(() => {\n if (optionsRef.current?.refetchOnWindowFocus === false) return\n if (typeof window === 'undefined') return\n\n const handler = () => {\n void execute(lastVariablesRef.current)\n }\n window.addEventListener('focus', handler)\n return () => window.removeEventListener('focus', handler)\n }, [execute])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isFetching,\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n refetch,\n invalidate: invalidateQuery,\n execute,\n }\n }\n}\n\nexport function createUseMutate<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n body?: unknown\n },\n>(\n params: UseMutateParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseMutateOptions<TResponse, TVariables>,\n) => IgniterCallerUseMutateResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n 'success',\n )\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({ data: null, error: null })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const mutate = useCallback(\n async (nextVariables?: TVariables) => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeMutateInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onMutationLoading?.(true)\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onMutationError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onMutationSuccess?.(data)\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onMutationSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onMutationError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onMutationSettled?.(null, typedError)\n } finally {\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onMutationLoading?.(false)\n }\n },\n [method, path, buildRequest, getMergedConfig, onError],\n )\n\n const retry = useCallback(() => {\n void mutate(lastVariablesRef.current)\n }, [mutate])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n mutate,\n retry,\n }\n }\n}\n","import type { IgniterCallerManager } from '../../core/manager'\nimport type { IgniterCallerClientContextValue } from '../interfaces/context'\nimport type { IgniterCallerClientRequestInput } from './hooks.builder'\nimport {\n createUseMutate,\n createUseQuery,\n} from './hooks.builder'\nimport type {\n IgniterCallerClient,\n IgniterCallerClientConfigApi,\n} from '../interfaces/client'\nimport { buildQueryPrefix } from '../utils/query-key'\n\nfunction applyRequestInput(\n builder: { params: (params: Record<string, string | number | boolean>) => any; headers: (headers: Record<string, string>) => any; body: (body: unknown) => any },\n input: IgniterCallerClientRequestInput,\n) {\n if (input.query && Object.keys(input.query).length > 0) {\n builder.params(input.query)\n }\n\n if (input.headers && Object.keys(input.headers).length > 0) {\n builder.headers(input.headers)\n }\n\n if (input.body !== undefined) {\n builder.body(input.body)\n }\n}\n\nexport function createIgniterCallerClient<\n TCaller extends IgniterCallerManager<any>,\n TCallers extends Record<string, IgniterCallerManager<any>>,\n>(\n context: IgniterCallerClientContextValue<TCallers>,\n callerKey: keyof TCallers,\n): IgniterCallerClient<TCaller> {\n const caller = context.callers[callerKey] as unknown as TCaller\n\n const getMergedConfig = () => context.getMergedConfig(callerKey)\n\n const buildRequest = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n ) => {\n if (!path) {\n throw new Error(\n 'IgniterCallerClient: path is required when using hooks with Caller client.',\n )\n }\n\n const methodKey = method.toLowerCase() as\n | 'get'\n | 'post'\n | 'put'\n | 'patch'\n | 'delete'\n | 'head'\n\n const builder = (caller as any)[methodKey](path)\n applyRequestInput(builder, input)\n return builder as { execute: () => Promise<any> }\n }\n\n const invalidate = (pathOrPaths: string | string[], data?: unknown) => {\n const paths = Array.isArray(pathOrPaths) ? pathOrPaths : [pathOrPaths]\n const prefixes = paths.map((path) =>\n buildQueryPrefix({\n callerKey: String(callerKey),\n method: 'GET',\n path,\n }),\n )\n context.invalidate(prefixes, data)\n }\n\n const config: IgniterCallerClientConfigApi = {\n set: (key, value) => context.setConfig(callerKey, key, value),\n get: (key) => context.getConfig(callerKey, key),\n reset: () => context.setConfigBatch(callerKey, {}),\n }\n\n const get = (path?: string) => {\n const builder = caller.get(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'GET',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const head = (path?: string) => {\n const builder = caller.head(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'HEAD',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const post = (path?: string) => {\n const builder = caller.post(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'POST',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const put = (path?: string) => {\n const builder = caller.put(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PUT',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const patch = (path?: string) => {\n const builder = caller.patch(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PATCH',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const del = (path?: string) => {\n const builder = caller.delete(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'DELETE',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n return {\n raw: caller,\n config,\n invalidate: invalidate as any,\n get: get as any,\n post: post as any,\n put: put as any,\n patch: patch as any,\n delete: del as any,\n head: head as any,\n }\n}\n","'use client'\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type {\n IgniterCallerClientContextValue,\n IgniterCallerClientConfigs,\n IgniterCallerClientMap,\n IgniterCallerClientRefetchFn,\n} from '../interfaces/context'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientConfigKey,\n IgniterCallerClientConfigValue,\n} from '../interfaces/config'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { createIgniterCallerClient } from './client.builder'\nimport type { IgniterCallerClient } from '../interfaces/client'\n\nconst IgniterCallerClientContext = createContext<\n IgniterCallerClientContextValue<any> | undefined\n>(undefined)\n\nexport interface IgniterCallerProviderProps<\n TCallers extends IgniterCallerClientMap,\n> extends PropsWithChildren {\n callers: TCallers\n configs?: IgniterCallerClientConfigs<TCallers>\n hooks?: IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeConfig(\n globalConfig: IgniterCallerClientConfig,\n localConfig?: IgniterCallerClientConfig,\n): IgniterCallerClientConfig {\n return {\n ...globalConfig,\n ...localConfig,\n headers: {\n ...(globalConfig.headers || {}),\n ...(localConfig?.headers || {}),\n },\n cookies: {\n ...(globalConfig.cookies || {}),\n ...(localConfig?.cookies || {}),\n },\n query: {\n ...(globalConfig.query || {}),\n ...(localConfig?.query || {}),\n },\n }\n}\n\nexport function IgniterCallerProvider<\n TCallers extends IgniterCallerClientMap,\n>(props: IgniterCallerProviderProps<TCallers>) {\n const { callers, configs, hooks, onError, children } = props\n const [configState, setConfigState] = useState<\n IgniterCallerClientConfigs<TCallers>\n >(configs || {})\n const [listeners] = useState(\n () => new Map<string, Set<IgniterCallerClientRefetchFn>>(),\n )\n\n const globalConfig = useMemo<IgniterCallerClientConfig>(\n () => hooks || {},\n [hooks],\n )\n\n const register = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key) || new Set()\n current.add(refetch)\n listeners.set(key, current)\n },\n [listeners],\n )\n\n const unregister = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key)\n if (!current) return\n current.delete(refetch)\n if (current.size === 0) {\n listeners.delete(key)\n }\n },\n [listeners],\n )\n\n const invalidate = useCallback(\n (keys: string | string[], data?: unknown) => {\n const keysArray = Array.isArray(keys) ? keys : [keys]\n\n keysArray.forEach((prefix) => {\n if (data !== undefined) {\n IgniterCallerClientCache.replacePrefix(prefix, data)\n } else {\n IgniterCallerClientCache.clearPrefix(prefix)\n }\n\n listeners.forEach((refetchFns, registeredKey) => {\n if (registeredKey.startsWith(prefix)) {\n refetchFns.forEach((refetch) => refetch(true))\n }\n })\n })\n },\n [listeners],\n )\n\n const setConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n value: IgniterCallerClientConfigValue<TKey>,\n ) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n [key]: value,\n },\n }))\n },\n [],\n )\n\n const setConfigBatch = useCallback(\n (callerKey: keyof TCallers, config: Partial<IgniterCallerClientConfig>) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n ...config,\n },\n }))\n },\n [],\n )\n\n const configStateRef = useMemo(() => ({ current: configState }), [])\n configStateRef.current = configState\n\n const globalConfigRef = useMemo(() => ({ current: globalConfig }), [])\n globalConfigRef.current = globalConfig\n\n const getMergedConfig = useCallback(\n (callerKey: keyof TCallers) =>\n mergeConfig(globalConfigRef.current, configStateRef.current[callerKey]),\n [globalConfigRef, configStateRef],\n )\n\n const getConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n ) => getMergedConfig(callerKey)[key],\n [getMergedConfig],\n )\n\n const value = useMemo<IgniterCallerClientContextValue<TCallers>>(\n () => ({\n callers,\n configs: configState,\n globalConfig,\n setConfig,\n setConfigBatch,\n getConfig,\n getMergedConfig,\n register,\n unregister,\n invalidate,\n listeners,\n onError,\n }),\n [\n callers,\n getConfig,\n getMergedConfig,\n invalidate,\n listeners,\n onError,\n register,\n setConfig,\n setConfigBatch,\n unregister,\n ],\n )\n\n return (\n <IgniterCallerClientContext.Provider value={value}>\n {children}\n </IgniterCallerClientContext.Provider>\n )\n}\n\nexport function useIgniterCallerContext<\n TCallers extends IgniterCallerClientMap,\n>() {\n const context = useContext(\n IgniterCallerClientContext,\n ) as IgniterCallerClientContextValue<TCallers> | undefined\n\n if (!context) {\n throw new Error(\n 'IgniterCallerProvider is missing. Wrap your app with <IgniterCallerProvider>.',\n )\n }\n\n return context\n}\n\nexport function useIgniterCaller<TCallers extends IgniterCallerClientMap>() {\n const context = useIgniterCallerContext<TCallers>()\n\n return <TKey extends keyof TCallers>(\n callerKey: TKey,\n ): IgniterCallerClient<TCallers[TKey]> =>\n createIgniterCallerClient<TCallers[TKey], TCallers>(context, callerKey)\n}\n"]}
@@ -244,7 +244,7 @@ function createUseQuery(params) {
244
244
  mergedConfig.onQueryLoading?.(false);
245
245
  }
246
246
  },
247
- [callerKey, method, path, buildRequest, getMergedConfig, onError]
247
+ [callerKey, method, path]
248
248
  );
249
249
  const refetch = useCallback(() => {
250
250
  void execute(lastVariablesRef.current);
@@ -621,9 +621,13 @@ function IgniterCallerProvider(props) {
621
621
  },
622
622
  []
623
623
  );
624
+ const configStateRef = useMemo(() => ({ current: configState }), []);
625
+ configStateRef.current = configState;
626
+ const globalConfigRef = useMemo(() => ({ current: globalConfig }), []);
627
+ globalConfigRef.current = globalConfig;
624
628
  const getMergedConfig = useCallback(
625
- (callerKey) => mergeConfig(globalConfig, configState[callerKey]),
626
- [globalConfig, configState]
629
+ (callerKey) => mergeConfig(globalConfigRef.current, configStateRef.current[callerKey]),
630
+ [globalConfigRef, configStateRef]
627
631
  );
628
632
  const getConfig = useCallback(
629
633
  (callerKey, key) => getMergedConfig(callerKey)[key],
@@ -646,8 +650,6 @@ function IgniterCallerProvider(props) {
646
650
  }),
647
651
  [
648
652
  callers,
649
- configState,
650
- globalConfig,
651
653
  getConfig,
652
654
  getMergedConfig,
653
655
  invalidate,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/utils/cache.ts","../../src/client/utils/query-key.ts","../../src/client/utils/cookies.ts","../../src/client/builders/hooks.builder.tsx","../../src/client/builders/client.builder.ts","../../src/client/builders/provider.builder.tsx"],"names":["useState","useMemo","useCallback","value"],"mappings":"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","file":"index.mjs","sourcesContent":["export class IgniterCallerClientCache {\n private static cache = new Map<\n string,\n { data: unknown; timestamp: number }\n >()\n\n static get<T>(key: string, staleTime?: number): T | undefined {\n const entry = IgniterCallerClientCache.cache.get(key)\n if (!entry) return undefined\n\n if (staleTime && Date.now() - entry.timestamp > staleTime) {\n IgniterCallerClientCache.cache.delete(key)\n return undefined\n }\n\n return entry.data as T\n }\n\n static set(key: string, data: unknown): void {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: Date.now(),\n })\n }\n\n static replacePrefix(prefix: string, data: unknown): void {\n for (const [key, entry] of IgniterCallerClientCache.cache.entries()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: entry.timestamp,\n })\n }\n }\n }\n\n static clearPrefix(prefix: string): void {\n for (const key of IgniterCallerClientCache.cache.keys()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.delete(key)\n }\n }\n }\n}\n","import type { IgniterCallerClientQuery } from '../interfaces/config'\n\nconst EMPTY_KEY = '{}'\n\nfunction stableStringify(value: unknown): string {\n if (value === null || value === undefined) return EMPTY_KEY\n if (typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) {\n return `[${value.map((item) => stableStringify(item)).join(',')}]`\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([a], [b]) => a.localeCompare(b),\n )\n\n return `{${entries\n .map(([key, val]) => `${JSON.stringify(key)}:${stableStringify(val)}`)\n .join(',')}}`\n}\n\nexport function buildQueryKey(params: {\n callerKey: string\n method: string\n path: string\n query?: IgniterCallerClientQuery\n params?: Record<string, string | number | boolean>\n}): string {\n const { callerKey, method, path, query, params: pathParams } = params\n const payload = {\n params: pathParams || {},\n query: query || {},\n }\n\n return `${callerKey}::${method.toUpperCase()}::${path}::${stableStringify(payload)}`\n}\n\nexport function buildQueryPrefix(params: {\n callerKey: string\n method: string\n path: string\n}): string {\n const { callerKey, method, path } = params\n return `${callerKey}::${method.toUpperCase()}::${path}`\n}\n","import type { IgniterCallerClientCookies } from '../interfaces/config'\n\nexport function buildCookieHeader(\n cookies?: IgniterCallerClientCookies,\n): string | undefined {\n if (!cookies || Object.keys(cookies).length === 0) return undefined\n\n return Object.entries(cookies)\n .map(([key, value]) => `${key}=${value}`)\n .join('; ')\n}\n","'use client'\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type { IgniterCallerApiResponse } from '../../types/response'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientQuery,\n} from '../interfaces/config'\nimport type { IgniterCallerClientRefetchFn } from '../interfaces/context'\nimport type {\n IgniterCallerUseMutateOptions,\n IgniterCallerUseMutateResult,\n IgniterCallerUseQueryOptions,\n IgniterCallerUseQueryResult,\n} from '../interfaces/hooks'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { buildQueryKey, buildQueryPrefix } from '../utils/query-key'\nimport { buildCookieHeader } from '../utils/cookies'\n\nexport interface IgniterCallerClientRequestInput {\n params?: Record<string, string | number | boolean>\n query?: Record<string, string | number | boolean>\n headers?: Record<string, string>\n cookies?: Record<string, string>\n body?: unknown\n}\n\nexport type IgniterCallerClientRequestFactory<TResponse> = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n) => {\n execute: () => Promise<IgniterCallerApiResponse<TResponse>>\n}\n\ninterface UseQueryParams<TResponse, TVariables> {\n callerKey: string\n method: 'GET' | 'HEAD'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n register: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n unregister: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n invalidate: (keys: string | string[], data?: unknown) => void\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\ninterface UseMutateParams<TResponse, TVariables> {\n callerKey: string\n method: 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeQueryInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const headers = {\n ...(config.headers || {}),\n ...(options?.headers || {}),\n ...(variables?.headers || {}),\n }\n const cookies = {\n ...(config.cookies || {}),\n ...(options?.cookies || {}),\n ...(variables?.cookies || {}),\n }\n const query = {\n ...(config.query || {}),\n ...(options?.query || {}),\n ...(variables?.query || {}),\n ...(options?.params || {}),\n ...(variables?.params || {}),\n }\n\n const cookieHeader = buildCookieHeader(cookies)\n if (cookieHeader && !headers.Cookie) {\n headers.Cookie = cookieHeader\n }\n\n return {\n headers,\n cookies,\n query,\n params: variables?.params || options?.params,\n }\n}\n\nfunction mergeMutateInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const merged = mergeQueryInput(config, options, variables)\n return {\n ...merged,\n body: variables?.body ?? options?.body,\n }\n}\n\nexport function createUseQuery<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n },\n>(\n params: UseQueryParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseQueryOptions<TResponse, TVariables>,\n) => IgniterCallerUseQueryResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n register,\n unregister,\n invalidate,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n options?.initialData ? 'success' : 'loading',\n )\n const [isFetching, setIsFetching] = useState(false)\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({\n data: options?.initialData ?? null,\n error: null,\n })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const stableKey = useMemo(() => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n options as IgniterCallerClientRequestInput | undefined,\n lastVariablesRef.current as IgniterCallerClientRequestInput | undefined,\n )\n\n return buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n }, [\n callerKey,\n method,\n path,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.params || {}),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.query || {}),\n ])\n\n const execute = useCallback(\n async (nextVariables?: TVariables) => {\n if (optionsRef.current?.enabled === false) return\n\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n const queryKey = buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setIsFetching(true)\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onQueryLoading?.(true)\n\n if (optionsRef.current?.staleTime) {\n const cached = IgniterCallerClientCache.get<TResponse>(\n queryKey,\n optionsRef.current.staleTime,\n )\n if (cached !== undefined) {\n setResponse({ data: cached, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(cached)\n mergedConfig.onQuerySuccess?.(cached)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n setIsFetching(false)\n return {\n data: cached,\n error: undefined,\n }\n }\n }\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onQueryError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onQuerySuccess?.(data)\n\n if (optionsRef.current?.staleTime && data !== null) {\n IgniterCallerClientCache.set(queryKey, data)\n }\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onQuerySettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onQueryError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onQuerySettled?.(null, typedError)\n } finally {\n setIsFetching(false)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n }\n },\n [callerKey, method, path, buildRequest, getMergedConfig, onError],\n )\n\n const refetch = useCallback(() => {\n void execute(lastVariablesRef.current)\n }, [execute])\n\n const invalidateQuery = useCallback(\n (data?: TResponse) => {\n const prefix = buildQueryPrefix({ callerKey, method, path })\n invalidate(prefix, data)\n },\n [callerKey, method, path, invalidate],\n )\n\n useEffect(() => {\n register(stableKey, refetch)\n return () => unregister(stableKey, refetch)\n }, [register, unregister, refetch, stableKey])\n\n const initialFetchDoneRef = useRef(false)\n\n useEffect(() => {\n if (optionsRef.current?.enabled === false) return\n if (optionsRef.current?.refetchOnMount === false && initialFetchDoneRef.current) return\n\n initialFetchDoneRef.current = true\n void execute(lastVariablesRef.current)\n }, [stableKey, execute])\n\n useEffect(() => {\n const interval = optionsRef.current?.refetchInterval\n if (!interval) return\n\n const handler = setInterval(() => {\n if (\n optionsRef.current?.refetchIntervalInBackground === false &&\n typeof document !== 'undefined' &&\n document.hidden\n ) {\n return\n }\n void execute(lastVariablesRef.current)\n }, interval)\n\n return () => clearInterval(handler)\n }, [execute])\n\n useEffect(() => {\n if (optionsRef.current?.refetchOnWindowFocus === false) return\n if (typeof window === 'undefined') return\n\n const handler = () => {\n void execute(lastVariablesRef.current)\n }\n window.addEventListener('focus', handler)\n return () => window.removeEventListener('focus', handler)\n }, [execute])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isFetching,\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n refetch,\n invalidate: invalidateQuery,\n execute,\n }\n }\n}\n\nexport function createUseMutate<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n body?: unknown\n },\n>(\n params: UseMutateParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseMutateOptions<TResponse, TVariables>,\n) => IgniterCallerUseMutateResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n 'success',\n )\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({ data: null, error: null })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const mutate = useCallback(\n async (nextVariables?: TVariables) => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeMutateInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onMutationLoading?.(true)\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onMutationError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onMutationSuccess?.(data)\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onMutationSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onMutationError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onMutationSettled?.(null, typedError)\n } finally {\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onMutationLoading?.(false)\n }\n },\n [method, path, buildRequest, getMergedConfig, onError],\n )\n\n const retry = useCallback(() => {\n void mutate(lastVariablesRef.current)\n }, [mutate])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n mutate,\n retry,\n }\n }\n}\n","import type { IgniterCallerManager } from '../../core/manager'\nimport type { IgniterCallerClientContextValue } from '../interfaces/context'\nimport type { IgniterCallerClientRequestInput } from './hooks.builder'\nimport {\n createUseMutate,\n createUseQuery,\n} from './hooks.builder'\nimport type {\n IgniterCallerClient,\n IgniterCallerClientConfigApi,\n} from '../interfaces/client'\nimport { buildQueryPrefix } from '../utils/query-key'\n\nfunction applyRequestInput(\n builder: { params: (params: Record<string, string | number | boolean>) => any; headers: (headers: Record<string, string>) => any; body: (body: unknown) => any },\n input: IgniterCallerClientRequestInput,\n) {\n if (input.query && Object.keys(input.query).length > 0) {\n builder.params(input.query)\n }\n\n if (input.headers && Object.keys(input.headers).length > 0) {\n builder.headers(input.headers)\n }\n\n if (input.body !== undefined) {\n builder.body(input.body)\n }\n}\n\nexport function createIgniterCallerClient<\n TCaller extends IgniterCallerManager<any>,\n TCallers extends Record<string, IgniterCallerManager<any>>,\n>(\n context: IgniterCallerClientContextValue<TCallers>,\n callerKey: keyof TCallers,\n): IgniterCallerClient<TCaller> {\n const caller = context.callers[callerKey] as unknown as TCaller\n\n const getMergedConfig = () => context.getMergedConfig(callerKey)\n\n const buildRequest = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n ) => {\n if (!path) {\n throw new Error(\n 'IgniterCallerClient: path is required when using hooks with Caller client.',\n )\n }\n\n const methodKey = method.toLowerCase() as\n | 'get'\n | 'post'\n | 'put'\n | 'patch'\n | 'delete'\n | 'head'\n\n const builder = (caller as any)[methodKey](path)\n applyRequestInput(builder, input)\n return builder as { execute: () => Promise<any> }\n }\n\n const invalidate = (pathOrPaths: string | string[], data?: unknown) => {\n const paths = Array.isArray(pathOrPaths) ? pathOrPaths : [pathOrPaths]\n const prefixes = paths.map((path) =>\n buildQueryPrefix({\n callerKey: String(callerKey),\n method: 'GET',\n path,\n }),\n )\n context.invalidate(prefixes, data)\n }\n\n const config: IgniterCallerClientConfigApi = {\n set: (key, value) => context.setConfig(callerKey, key, value),\n get: (key) => context.getConfig(callerKey, key),\n reset: () => context.setConfigBatch(callerKey, {}),\n }\n\n const get = (path?: string) => {\n const builder = caller.get(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'GET',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const head = (path?: string) => {\n const builder = caller.head(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'HEAD',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const post = (path?: string) => {\n const builder = caller.post(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'POST',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const put = (path?: string) => {\n const builder = caller.put(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PUT',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const patch = (path?: string) => {\n const builder = caller.patch(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PATCH',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const del = (path?: string) => {\n const builder = caller.delete(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'DELETE',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n return {\n raw: caller,\n config,\n invalidate: invalidate as any,\n get: get as any,\n post: post as any,\n put: put as any,\n patch: patch as any,\n delete: del as any,\n head: head as any,\n }\n}\n","'use client'\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type {\n IgniterCallerClientContextValue,\n IgniterCallerClientConfigs,\n IgniterCallerClientMap,\n IgniterCallerClientRefetchFn,\n} from '../interfaces/context'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientConfigKey,\n IgniterCallerClientConfigValue,\n} from '../interfaces/config'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { createIgniterCallerClient } from './client.builder'\n\nconst IgniterCallerClientContext = createContext<\n IgniterCallerClientContextValue<any> | undefined\n>(undefined)\n\nexport interface IgniterCallerProviderProps<\n TCallers extends IgniterCallerClientMap,\n> extends PropsWithChildren {\n callers: TCallers\n configs?: IgniterCallerClientConfigs<TCallers>\n hooks?: IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeConfig(\n globalConfig: IgniterCallerClientConfig,\n localConfig?: IgniterCallerClientConfig,\n): IgniterCallerClientConfig {\n return {\n ...globalConfig,\n ...localConfig,\n headers: {\n ...(globalConfig.headers || {}),\n ...(localConfig?.headers || {}),\n },\n cookies: {\n ...(globalConfig.cookies || {}),\n ...(localConfig?.cookies || {}),\n },\n query: {\n ...(globalConfig.query || {}),\n ...(localConfig?.query || {}),\n },\n }\n}\n\nexport function IgniterCallerProvider<\n TCallers extends IgniterCallerClientMap,\n>(props: IgniterCallerProviderProps<TCallers>) {\n const { callers, configs, hooks, onError, children } = props\n const [configState, setConfigState] = useState<\n IgniterCallerClientConfigs<TCallers>\n >(configs || {})\n const [listeners] = useState(\n () => new Map<string, Set<IgniterCallerClientRefetchFn>>(),\n )\n\n const globalConfig = useMemo<IgniterCallerClientConfig>(\n () => hooks || {},\n [hooks],\n )\n\n const register = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key) || new Set()\n current.add(refetch)\n listeners.set(key, current)\n },\n [listeners],\n )\n\n const unregister = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key)\n if (!current) return\n current.delete(refetch)\n if (current.size === 0) {\n listeners.delete(key)\n }\n },\n [listeners],\n )\n\n const invalidate = useCallback(\n (keys: string | string[], data?: unknown) => {\n const keysArray = Array.isArray(keys) ? keys : [keys]\n\n keysArray.forEach((prefix) => {\n if (data !== undefined) {\n IgniterCallerClientCache.replacePrefix(prefix, data)\n } else {\n IgniterCallerClientCache.clearPrefix(prefix)\n }\n\n listeners.forEach((refetchFns, registeredKey) => {\n if (registeredKey.startsWith(prefix)) {\n refetchFns.forEach((refetch) => refetch(true))\n }\n })\n })\n },\n [listeners],\n )\n\n const setConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n value: IgniterCallerClientConfigValue<TKey>,\n ) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n [key]: value,\n },\n }))\n },\n [],\n )\n\n const setConfigBatch = useCallback(\n (callerKey: keyof TCallers, config: Partial<IgniterCallerClientConfig>) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n ...config,\n },\n }))\n },\n [],\n )\n\n const getMergedConfig = useCallback(\n (callerKey: keyof TCallers) =>\n mergeConfig(globalConfig, configState[callerKey]),\n [globalConfig, configState],\n )\n\n const getConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n ) => getMergedConfig(callerKey)[key],\n [getMergedConfig],\n )\n\n const value = useMemo<IgniterCallerClientContextValue<TCallers>>(\n () => ({\n callers,\n configs: configState,\n globalConfig,\n setConfig,\n setConfigBatch,\n getConfig,\n getMergedConfig,\n register,\n unregister,\n invalidate,\n listeners,\n onError,\n }),\n [\n callers,\n configState,\n globalConfig,\n getConfig,\n getMergedConfig,\n invalidate,\n listeners,\n onError,\n register,\n setConfig,\n setConfigBatch,\n unregister,\n ],\n )\n\n return (\n <IgniterCallerClientContext.Provider value={value}>\n {children}\n </IgniterCallerClientContext.Provider>\n )\n}\n\nexport function useIgniterCallerContext<\n TCallers extends IgniterCallerClientMap,\n>() {\n const context = useContext(\n IgniterCallerClientContext,\n ) as IgniterCallerClientContextValue<TCallers> | undefined\n\n if (!context) {\n throw new Error(\n 'IgniterCallerProvider is missing. Wrap your app with <IgniterCallerProvider>.',\n )\n }\n\n return context\n}\n\nexport function useIgniterCaller<TCallers extends IgniterCallerClientMap>() {\n const context = useIgniterCallerContext<TCallers>()\n\n return <TKey extends keyof TCallers>(callerKey: TKey) =>\n createIgniterCallerClient(context, callerKey)\n}\n"]}
1
+ {"version":3,"sources":["../../src/client/utils/cache.ts","../../src/client/utils/query-key.ts","../../src/client/utils/cookies.ts","../../src/client/builders/hooks.builder.tsx","../../src/client/builders/client.builder.ts","../../src/client/builders/provider.builder.tsx"],"names":["useState","useMemo","useCallback","value"],"mappings":";;;;;;AAAO,IAAM,yBAAA,GAAN,MAAM,yBAAA,CAAyB;AAAA,EAMpC,OAAO,GAAA,CAAO,GAAA,EAAa,SAAA,EAAmC;AAC5D,IAAA,MAAM,KAAA,GAAQ,yBAAA,CAAyB,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AACpD,IAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AAEnB,IAAA,IAAI,aAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA,CAAM,YAAY,SAAA,EAAW;AACzD,MAAA,yBAAA,CAAyB,KAAA,CAAM,OAAO,GAAG,CAAA;AACzC,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,EACf;AAAA,EAEA,OAAO,GAAA,CAAI,GAAA,EAAa,IAAA,EAAqB;AAC3C,IAAA,yBAAA,CAAyB,KAAA,CAAM,IAAI,GAAA,EAAK;AAAA,MACtC,IAAA;AAAA,MACA,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AAAA,EACH;AAAA,EAEA,OAAO,aAAA,CAAc,MAAA,EAAgB,IAAA,EAAqB;AACxD,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,yBAAA,CAAyB,KAAA,CAAM,SAAQ,EAAG;AACnE,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1B,QAAA,yBAAA,CAAyB,KAAA,CAAM,IAAI,GAAA,EAAK;AAAA,UACtC,IAAA;AAAA,UACA,WAAW,KAAA,CAAM;AAAA,SAClB,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,YAAY,MAAA,EAAsB;AACvC,IAAA,KAAA,MAAW,GAAA,IAAO,yBAAA,CAAyB,KAAA,CAAM,IAAA,EAAK,EAAG;AACvD,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1B,QAAA,yBAAA,CAAyB,KAAA,CAAM,OAAO,GAAG,CAAA;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AACF,CAAA;AA3Ca,yBAAA,CACI,KAAA,uBAAY,GAAA,EAGzB;AAJG,IAAM,wBAAA,GAAN;;;ACEP,IAAM,SAAA,GAAY,IAAA;AAElB,SAAS,gBAAgB,KAAA,EAAwB;AAC/C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,SAAA;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC1D,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,eAAA,CAAgB,IAAI,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,CAAE,IAAA;AAAA,IAC/D,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC;AAAA,GACjC;AAEA,EAAA,OAAO,CAAA,CAAA,EAAI,QACR,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,GAAG,MAAM,CAAA,EAAG,IAAA,CAAK,UAAU,GAAG,CAAC,IAAI,eAAA,CAAgB,GAAG,CAAC,CAAA,CAAE,CAAA,CACpE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AACd;AAEO,SAAS,cAAc,MAAA,EAMnB;AACT,EAAA,MAAM,EAAE,SAAA,EAAW,MAAA,EAAQ,MAAM,KAAA,EAAO,MAAA,EAAQ,YAAW,GAAI,MAAA;AAC/D,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,MAAA,EAAQ,cAAc,EAAC;AAAA,IACvB,KAAA,EAAO,SAAS;AAAC,GACnB;AAEA,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,MAAA,CAAO,WAAA,EAAa,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,EAAK,eAAA,CAAgB,OAAO,CAAC,CAAA,CAAA;AACpF;AAEO,SAAS,iBAAiB,MAAA,EAItB;AACT,EAAA,MAAM,EAAE,SAAA,EAAW,MAAA,EAAQ,IAAA,EAAK,GAAI,MAAA;AACpC,EAAA,OAAO,GAAG,SAAS,CAAA,EAAA,EAAK,OAAO,WAAA,EAAa,KAAK,IAAI,CAAA,CAAA;AACvD;;;ACzCO,SAAS,kBACd,OAAA,EACoB;AACpB,EAAA,IAAI,CAAC,WAAW,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,KAAW,GAAG,OAAO,MAAA;AAE1D,EAAA,OAAO,OAAO,OAAA,CAAQ,OAAO,CAAA,CAC1B,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,GAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA,CACvC,KAAK,IAAI,CAAA;AACd;;;AC+CA,SAAS,eAAA,CACP,MAAA,EACA,OAAA,EACA,SAAA,EACiC;AACjC,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,GAAI,MAAA,CAAO,OAAA,IAAW,EAAC;AAAA,IACvB,GAAI,OAAA,EAAS,OAAA,IAAW,EAAC;AAAA,IACzB,GAAI,SAAA,EAAW,OAAA,IAAW;AAAC,GAC7B;AACA,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,GAAI,MAAA,CAAO,OAAA,IAAW,EAAC;AAAA,IACvB,GAAI,OAAA,EAAS,OAAA,IAAW,EAAC;AAAA,IACzB,GAAI,SAAA,EAAW,OAAA,IAAW;AAAC,GAC7B;AACA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,GAAI,MAAA,CAAO,KAAA,IAAS,EAAC;AAAA,IACrB,GAAI,OAAA,EAAS,KAAA,IAAS,EAAC;AAAA,IACvB,GAAI,SAAA,EAAW,KAAA,IAAS,EAAC;AAAA,IACzB,GAAI,OAAA,EAAS,MAAA,IAAU,EAAC;AAAA,IACxB,GAAI,SAAA,EAAW,MAAA,IAAU;AAAC,GAC5B;AAEA,EAAA,MAAM,YAAA,GAAe,kBAAkB,OAAO,CAAA;AAC9C,EAAA,IAAI,YAAA,IAAgB,CAAC,OAAA,CAAQ,MAAA,EAAQ;AACnC,IAAA,OAAA,CAAQ,MAAA,GAAS,YAAA;AAAA,EACnB;AAEA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA,EAAQ,SAAA,EAAW,MAAA,IAAU,OAAA,EAAS;AAAA,GACxC;AACF;AAEA,SAAS,gBAAA,CACP,MAAA,EACA,OAAA,EACA,SAAA,EACiC;AACjC,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,MAAA,EAAQ,OAAA,EAAS,SAAS,CAAA;AACzD,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,IAAA,EAAM,SAAA,EAAW,IAAA,IAAQ,OAAA,EAAS;AAAA,GACpC;AACF;AAEO,SAAS,eAOd,MAAA,EAGsD;AACtD,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,GAAI,MAAA;AAEJ,EAAA,OAAO,CAAC,OAAA,KAAY;AAClB,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,QAAA;AAAA,MAC1B,OAAA,EAAS,cAAc,SAAA,GAAY;AAAA,KACrC;AACA,IAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAAA,CAG7B;AAAA,MACD,IAAA,EAAM,SAAS,WAAA,IAAe,IAAA;AAAA,MAC9B,KAAA,EAAO;AAAA,KACR,CAAA;AACD,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,QAAA;AAAA,MAChC;AAAA,KACF;AAEA,IAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,IAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AAErB,IAAA,MAAM,gBAAA,GAAmB,OAA+B,MAAS,CAAA;AAEjE,IAAA,MAAM,SAAA,GAAY,QAAQ,MAAM;AAC9B,MAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,MAAA,MAAM,WAAA,GAAc,eAAA;AAAA,QAClB,YAAA;AAAA,QACA,OAAA;AAAA,QACA,gBAAA,CAAiB;AAAA,OACnB;AAEA,MAAA,OAAO,aAAA,CAAc;AAAA,QACnB,SAAA;AAAA,QACA,MAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAO,WAAA,CAAY,KAAA;AAAA,QACnB,QAAQ,WAAA,CAAY;AAAA,OACrB,CAAA;AAAA,IACH,CAAA,EAAG;AAAA,MACD,SAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA;AAAA,MAEA,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,MAAA,IAAU,EAAE,CAAA;AAAA;AAAA,MAEpC,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,KAAA,IAAS,EAAE;AAAA,KACpC,CAAA;AAED,IAAA,MAAM,OAAA,GAAU,WAAA;AAAA,MACd,OAAO,aAAA,KAA+B;AACpC,QAAA,IAAI,UAAA,CAAW,OAAA,EAAS,OAAA,KAAY,KAAA,EAAO;AAE3C,QAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,QAAA,MAAM,WAAA,GAAc,eAAA;AAAA,UAClB,YAAA;AAAA,UACA,UAAA,CAAW,OAAA;AAAA,UACX;AAAA,SACF;AAEA,QAAA,MAAM,WAAW,aAAA,CAAc;AAAA,UAC7B,SAAA;AAAA,UACA,MAAA;AAAA,UACA,IAAA;AAAA,UACA,OAAO,WAAA,CAAY,KAAA;AAAA,UACnB,QAAQ,WAAA,CAAY;AAAA,SACrB,CAAA;AAED,QAAA,gBAAA,CAAiB,OAAA,GAAU,aAAA;AAC3B,QAAA,YAAA,CAAa,aAAa,CAAA;AAE1B,QAAA,aAAA,CAAc,IAAI,CAAA;AAClB,QAAA,SAAA,CAAU,SAAS,CAAA;AACnB,QAAA,UAAA,CAAW,OAAA,EAAS,YAAY,IAAI,CAAA;AACpC,QAAA,YAAA,CAAa,iBAAiB,IAAI,CAAA;AAElC,QAAA,IAAI,UAAA,CAAW,SAAS,SAAA,EAAW;AACjC,UAAA,MAAM,SAAS,wBAAA,CAAyB,GAAA;AAAA,YACtC,QAAA;AAAA,YACA,WAAW,OAAA,CAAQ;AAAA,WACrB;AACA,UAAA,IAAI,WAAW,MAAA,EAAW;AACxB,YAAA,WAAA,CAAY,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AACzC,YAAA,SAAA,CAAU,SAAS,CAAA;AACnB,YAAA,UAAA,CAAW,OAAA,EAAS,YAAY,MAAM,CAAA;AACtC,YAAA,YAAA,CAAa,iBAAiB,MAAM,CAAA;AACpC,YAAA,UAAA,CAAW,OAAA,EAAS,YAAY,KAAK,CAAA;AACrC,YAAA,YAAA,CAAa,iBAAiB,KAAK,CAAA;AACnC,YAAA,aAAA,CAAc,KAAK,CAAA;AACnB,YAAA,OAAO;AAAA,cACL,IAAA,EAAM,MAAA;AAAA,cACN,KAAA,EAAO;AAAA,aACT;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI;AACF,UAAA,MAAM,SAAS,MAAM,YAAA,CAAa,QAAQ,IAAA,EAAM,WAAW,EAAE,OAAA,EAAQ;AACrE,UAAA,UAAA,CAAW,OAAA,EAAS,YAAY,MAAM,CAAA;AACtC,UAAA,IAAI,OAAO,KAAA,EAAO;AAChB,YAAA,WAAA,CAAY,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA;AAC/C,YAAA,SAAA,CAAU,OAAO,CAAA;AACjB,YAAA,UAAA,CAAW,OAAA,EAAS,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA;AAC1C,YAAA,YAAA,CAAa,YAAA,GAAe,OAAO,KAAK,CAAA;AACxC,YAAA,OAAA,GAAU,OAAO,KAAK,CAAA;AAAA,UACxB,CAAA,MAAO;AACL,YAAA,MAAM,IAAA,GAAQ,OAAO,IAAA,IAAQ,IAAA;AAC7B,YAAA,WAAA,CAAY,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA;AACjC,YAAA,SAAA,CAAU,SAAS,CAAA;AACnB,YAAA,UAAA,CAAW,OAAA,EAAS,YAAY,IAAiB,CAAA;AACjD,YAAA,YAAA,CAAa,iBAAiB,IAAI,CAAA;AAElC,YAAA,IAAI,UAAA,CAAW,OAAA,EAAS,SAAA,IAAa,IAAA,KAAS,IAAA,EAAM;AAClD,cAAA,wBAAA,CAAyB,GAAA,CAAI,UAAU,IAAI,CAAA;AAAA,YAC7C;AAAA,UACF;AAEA,UAAA,UAAA,CAAW,OAAA,EAAS,SAAA;AAAA,YAClB,OAAO,IAAA,IAAQ,IAAA;AAAA,YACf,OAAO,KAAA,IAAS;AAAA,WAClB;AACA,UAAA,YAAA,CAAa,cAAA;AAAA,YACX,OAAO,IAAA,IAAQ,IAAA;AAAA,YACf,OAAO,KAAA,IAAS;AAAA,WAClB;AAEA,UAAA,OAAO,MAAA;AAAA,QACT,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,UAAA,GAAa,KAAA;AACnB,UAAA,WAAA,CAAY,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,YAAY,CAAA;AAC7C,UAAA,SAAA,CAAU,OAAO,CAAA;AACjB,UAAA,UAAA,CAAW,OAAA,EAAS,UAAU,UAAU,CAAA;AACxC,UAAA,YAAA,CAAa,eAAe,UAAU,CAAA;AACtC,UAAA,OAAA,GAAU,UAAU,CAAA;AACpB,UAAA,UAAA,CAAW,OAAA,EAAS,SAAA,GAAY,IAAA,EAAM,UAAU,CAAA;AAChD,UAAA,YAAA,CAAa,cAAA,GAAiB,MAAM,UAAU,CAAA;AAAA,QAChD,CAAA,SAAE;AACA,UAAA,aAAA,CAAc,KAAK,CAAA;AACnB,UAAA,UAAA,CAAW,OAAA,EAAS,YAAY,KAAK,CAAA;AACrC,UAAA,YAAA,CAAa,iBAAiB,KAAK,CAAA;AAAA,QACrC;AAAA,MACF,CAAA;AAAA,MACA,CAAC,SAAA,EAAW,MAAA,EAAQ,IAAI;AAAA,KAC1B;AAEA,IAAA,MAAM,OAAA,GAAU,YAAY,MAAM;AAChC,MAAA,KAAK,OAAA,CAAQ,iBAAiB,OAAO,CAAA;AAAA,IACvC,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,IAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,MACtB,CAAC,IAAA,KAAqB;AACpB,QAAA,MAAM,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AAC3D,QAAA,UAAA,CAAW,QAAQ,IAAI,CAAA;AAAA,MACzB,CAAA;AAAA,MACA,CAAC,SAAA,EAAW,MAAA,EAAQ,IAAA,EAAM,UAAU;AAAA,KACtC;AAEA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,QAAA,CAAS,WAAW,OAAO,CAAA;AAC3B,MAAA,OAAO,MAAM,UAAA,CAAW,SAAA,EAAW,OAAO,CAAA;AAAA,IAC5C,GAAG,CAAC,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,SAAS,CAAC,CAAA;AAE7C,IAAA,MAAM,mBAAA,GAAsB,OAAO,KAAK,CAAA;AAExC,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,OAAA,KAAY,KAAA,EAAO;AAC3C,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,cAAA,KAAmB,KAAA,IAAS,oBAAoB,OAAA,EAAS;AAEjF,MAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAC9B,MAAA,KAAK,OAAA,CAAQ,iBAAiB,OAAO,CAAA;AAAA,IACvC,CAAA,EAAG,CAAC,SAAA,EAAW,OAAO,CAAC,CAAA;AAEvB,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,MAAM,QAAA,GAAW,WAAW,OAAA,EAAS,eAAA;AACrC,MAAA,IAAI,CAAC,QAAA,EAAU;AAEf,MAAA,MAAM,OAAA,GAAU,YAAY,MAAM;AAChC,QAAA,IACE,UAAA,CAAW,SAAS,2BAAA,KAAgC,KAAA,IACpD,OAAO,QAAA,KAAa,WAAA,IACpB,SAAS,MAAA,EACT;AACA,UAAA;AAAA,QACF;AACA,QAAA,KAAK,OAAA,CAAQ,iBAAiB,OAAO,CAAA;AAAA,MACvC,GAAG,QAAQ,CAAA;AAEX,MAAA,OAAO,MAAM,cAAc,OAAO,CAAA;AAAA,IACpC,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,oBAAA,KAAyB,KAAA,EAAO;AACxD,MAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEnC,MAAA,MAAM,UAAU,MAAM;AACpB,QAAA,KAAK,OAAA,CAAQ,iBAAiB,OAAO,CAAA;AAAA,MACvC,CAAA;AACA,MAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,OAAO,CAAA;AACxC,MAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAA;AAAA,IAC1D,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,IAAA,OAAO;AAAA,MACL,MAAM,QAAA,CAAS,IAAA;AAAA,MACf,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,SAAA;AAAA,MACA,WAAW,MAAA,KAAW,SAAA;AAAA,MACtB,UAAA;AAAA,MACA,WAAW,MAAA,KAAW,SAAA;AAAA,MACtB,SAAS,MAAA,KAAW,OAAA;AAAA,MACpB,MAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA,EAAY,eAAA;AAAA,MACZ;AAAA,KACF;AAAA,EACF,CAAA;AACF;AAEO,SAAS,gBAQd,MAAA,EAGuD;AACvD,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,GAAI,MAAA;AAEJ,EAAA,OAAO,CAAC,OAAA,KAAY;AAClB,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,QAAA;AAAA,MAC1B;AAAA,KACF;AACA,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAAA,CAG7B,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA;AAC9B,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,QAAA;AAAA,MAChC;AAAA,KACF;AAEA,IAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,IAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AACrB,IAAA,MAAM,gBAAA,GAAmB,OAA+B,MAAS,CAAA;AAEjE,IAAA,MAAM,MAAA,GAAS,WAAA;AAAA,MACb,OAAO,aAAA,KAA+B;AACpC,QAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,QAAA,MAAM,WAAA,GAAc,gBAAA;AAAA,UAClB,YAAA;AAAA,UACA,UAAA,CAAW,OAAA;AAAA,UACX;AAAA,SACF;AAEA,QAAA,gBAAA,CAAiB,OAAA,GAAU,aAAA;AAC3B,QAAA,YAAA,CAAa,aAAa,CAAA;AAE1B,QAAA,SAAA,CAAU,SAAS,CAAA;AACnB,QAAA,UAAA,CAAW,OAAA,EAAS,YAAY,IAAI,CAAA;AACpC,QAAA,YAAA,CAAa,oBAAoB,IAAI,CAAA;AAErC,QAAA,IAAI;AACF,UAAA,MAAM,SAAS,MAAM,YAAA,CAAa,QAAQ,IAAA,EAAM,WAAW,EAAE,OAAA,EAAQ;AACrE,UAAA,UAAA,CAAW,OAAA,EAAS,YAAY,MAAM,CAAA;AACtC,UAAA,IAAI,OAAO,KAAA,EAAO;AAChB,YAAA,WAAA,CAAY,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA;AAC/C,YAAA,SAAA,CAAU,OAAO,CAAA;AACjB,YAAA,UAAA,CAAW,OAAA,EAAS,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA;AAC1C,YAAA,YAAA,CAAa,eAAA,GAAkB,OAAO,KAAK,CAAA;AAC3C,YAAA,OAAA,GAAU,OAAO,KAAK,CAAA;AAAA,UACxB,CAAA,MAAO;AACL,YAAA,MAAM,IAAA,GAAQ,OAAO,IAAA,IAAQ,IAAA;AAC7B,YAAA,WAAA,CAAY,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA;AACjC,YAAA,SAAA,CAAU,SAAS,CAAA;AACnB,YAAA,UAAA,CAAW,OAAA,EAAS,YAAY,IAAiB,CAAA;AACjD,YAAA,YAAA,CAAa,oBAAoB,IAAI,CAAA;AAAA,UACvC;AAEA,UAAA,UAAA,CAAW,OAAA,EAAS,SAAA;AAAA,YAClB,OAAO,IAAA,IAAQ,IAAA;AAAA,YACf,OAAO,KAAA,IAAS;AAAA,WAClB;AACA,UAAA,YAAA,CAAa,iBAAA;AAAA,YACX,OAAO,IAAA,IAAQ,IAAA;AAAA,YACf,OAAO,KAAA,IAAS;AAAA,WAClB;AAEA,UAAA,OAAO,MAAA;AAAA,QACT,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,UAAA,GAAa,KAAA;AACnB,UAAA,WAAA,CAAY,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,YAAY,CAAA;AAC7C,UAAA,SAAA,CAAU,OAAO,CAAA;AACjB,UAAA,UAAA,CAAW,OAAA,EAAS,UAAU,UAAU,CAAA;AACxC,UAAA,YAAA,CAAa,kBAAkB,UAAU,CAAA;AACzC,UAAA,OAAA,GAAU,UAAU,CAAA;AACpB,UAAA,UAAA,CAAW,OAAA,EAAS,SAAA,GAAY,IAAA,EAAM,UAAU,CAAA;AAChD,UAAA,YAAA,CAAa,iBAAA,GAAoB,MAAM,UAAU,CAAA;AAAA,QACnD,CAAA,SAAE;AACA,UAAA,UAAA,CAAW,OAAA,EAAS,YAAY,KAAK,CAAA;AACrC,UAAA,YAAA,CAAa,oBAAoB,KAAK,CAAA;AAAA,QACxC;AAAA,MACF,CAAA;AAAA,MACA,CAAC,MAAA,EAAQ,IAAA,EAAM,YAAA,EAAc,iBAAiB,OAAO;AAAA,KACvD;AAEA,IAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,MAAA,KAAK,MAAA,CAAO,iBAAiB,OAAO,CAAA;AAAA,IACtC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,IAAA,OAAO;AAAA,MACL,MAAM,QAAA,CAAS,IAAA;AAAA,MACf,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,SAAA;AAAA,MACA,WAAW,MAAA,KAAW,SAAA;AAAA,MACtB,WAAW,MAAA,KAAW,SAAA;AAAA,MACtB,SAAS,MAAA,KAAW,OAAA;AAAA,MACpB,MAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AACF;;;AC1bA,SAAS,iBAAA,CACP,SACA,KAAA,EACA;AACA,EAAA,IAAI,KAAA,CAAM,SAAS,MAAA,CAAO,IAAA,CAAK,MAAM,KAAK,CAAA,CAAE,SAAS,CAAA,EAAG;AACtD,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,KAAA,CAAM,WAAW,MAAA,CAAO,IAAA,CAAK,MAAM,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AAC1D,IAAA,OAAA,CAAQ,OAAA,CAAQ,MAAM,OAAO,CAAA;AAAA,EAC/B;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAW;AAC5B,IAAA,OAAA,CAAQ,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACzB;AACF;AAEO,SAAS,yBAAA,CAId,SACA,SAAA,EAC8B;AAC9B,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA;AAExC,EAAA,MAAM,eAAA,GAAkB,MAAM,OAAA,CAAQ,eAAA,CAAgB,SAAS,CAAA;AAE/D,EAAA,MAAM,YAAA,GAAe,CACnB,MAAA,EACA,IAAA,EACA,KAAA,KACG;AACH,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,OAAO,WAAA,EAAY;AAQrC,IAAA,MAAM,OAAA,GAAW,MAAA,CAAe,SAAS,CAAA,CAAE,IAAI,CAAA;AAC/C,IAAA,iBAAA,CAAkB,SAAS,KAAK,CAAA;AAChC,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,WAAA,EAAgC,IAAA,KAAmB;AACrE,IAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,GAAI,WAAA,GAAc,CAAC,WAAW,CAAA;AACrE,IAAA,MAAM,WAAW,KAAA,CAAM,GAAA;AAAA,MAAI,CAAC,SAC1B,gBAAA,CAAiB;AAAA,QACf,SAAA,EAAW,OAAO,SAAS,CAAA;AAAA,QAC3B,MAAA,EAAQ,KAAA;AAAA,QACR;AAAA,OACD;AAAA,KACH;AACA,IAAA,OAAA,CAAQ,UAAA,CAAW,UAAU,IAAI,CAAA;AAAA,EACnC,CAAA;AAEA,EAAA,MAAM,MAAA,GAAuC;AAAA,IAC3C,GAAA,EAAK,CAAC,GAAA,EAAK,KAAA,KAAU,QAAQ,SAAA,CAAU,SAAA,EAAW,KAAK,KAAK,CAAA;AAAA,IAC5D,KAAK,CAAC,GAAA,KAAQ,OAAA,CAAQ,SAAA,CAAU,WAAW,GAAG,CAAA;AAAA,IAC9C,OAAO,MAAM,OAAA,CAAQ,cAAA,CAAe,SAAA,EAAW,EAAE;AAAA,GACnD;AAEA,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,KAAkB;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,IAAW,CAAA;AACtC,IAAA,MAAM,WAAW,cAAA,CAAe;AAAA,MAC9B,SAAA,EAAW,OAAO,SAAS,CAAA;AAAA,MAC3B,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,IAAA,IAAQ,EAAA;AAAA,MACd,YAAA;AAAA,MACA,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,eAAA;AAAA,MACA,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACA,IAAC,QAAgB,QAAA,GAAW,QAAA;AAC7B,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAkB;AAC9B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,IAAW,CAAA;AACvC,IAAA,MAAM,WAAW,cAAA,CAAe;AAAA,MAC9B,SAAA,EAAW,OAAO,SAAS,CAAA;AAAA,MAC3B,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,IAAA,IAAQ,EAAA;AAAA,MACd,YAAA;AAAA,MACA,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,eAAA;AAAA,MACA,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACA,IAAC,QAAgB,QAAA,GAAW,QAAA;AAC7B,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAkB;AAC9B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,IAAW,CAAA;AACvC,IAAA,MAAM,YAAY,eAAA,CAAgB;AAAA,MAChC,SAAA,EAAW,OAAO,SAAS,CAAA;AAAA,MAC3B,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,IAAA,IAAQ,EAAA;AAAA,MACd,YAAA;AAAA,MACA,eAAA;AAAA,MACA,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACA,IAAC,QAAgB,SAAA,GAAY,SAAA;AAC9B,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,KAAkB;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,IAAW,CAAA;AACtC,IAAA,MAAM,YAAY,eAAA,CAAgB;AAAA,MAChC,SAAA,EAAW,OAAO,SAAS,CAAA;AAAA,MAC3B,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,IAAA,IAAQ,EAAA;AAAA,MACd,YAAA;AAAA,MACA,eAAA;AAAA,MACA,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACA,IAAC,QAAgB,SAAA,GAAY,SAAA;AAC9B,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KAAkB;AAC/B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,IAAW,CAAA;AACxC,IAAA,MAAM,YAAY,eAAA,CAAgB;AAAA,MAChC,SAAA,EAAW,OAAO,SAAS,CAAA;AAAA,MAC3B,MAAA,EAAQ,OAAA;AAAA,MACR,MAAM,IAAA,IAAQ,EAAA;AAAA,MACd,YAAA;AAAA,MACA,eAAA;AAAA,MACA,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACA,IAAC,QAAgB,SAAA,GAAY,SAAA;AAC9B,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,KAAkB;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,IAAW,CAAA;AACzC,IAAA,MAAM,YAAY,eAAA,CAAgB;AAAA,MAChC,SAAA,EAAW,OAAO,SAAS,CAAA;AAAA,MAC3B,MAAA,EAAQ,QAAA;AAAA,MACR,MAAM,IAAA,IAAQ,EAAA;AAAA,MACd,YAAA;AAAA,MACA,eAAA;AAAA,MACA,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AACA,IAAC,QAAgB,SAAA,GAAY,SAAA;AAC9B,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,MAAA;AAAA,IACL,MAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA,EAAQ,GAAA;AAAA,IACR;AAAA,GACF;AACF;AC9JA,IAAM,0BAAA,GAA6B,cAEjC,MAAS,CAAA;AAWX,SAAS,WAAA,CACP,cACA,WAAA,EAC2B;AAC3B,EAAA,OAAO;AAAA,IACL,GAAG,YAAA;AAAA,IACH,GAAG,WAAA;AAAA,IACH,OAAA,EAAS;AAAA,MACP,GAAI,YAAA,CAAa,OAAA,IAAW,EAAC;AAAA,MAC7B,GAAI,WAAA,EAAa,OAAA,IAAW;AAAC,KAC/B;AAAA,IACA,OAAA,EAAS;AAAA,MACP,GAAI,YAAA,CAAa,OAAA,IAAW,EAAC;AAAA,MAC7B,GAAI,WAAA,EAAa,OAAA,IAAW;AAAC,KAC/B;AAAA,IACA,KAAA,EAAO;AAAA,MACL,GAAI,YAAA,CAAa,KAAA,IAAS,EAAC;AAAA,MAC3B,GAAI,WAAA,EAAa,KAAA,IAAS;AAAC;AAC7B,GACF;AACF;AAEO,SAAS,sBAEd,KAAA,EAA6C;AAC7C,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,UAAS,GAAI,KAAA;AACvD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,IAAIA,QAAAA,CAEpC,OAAA,IAAW,EAAE,CAAA;AACf,EAAA,MAAM,CAAC,SAAS,CAAA,GAAIA,QAAAA;AAAA,IAClB,0BAAU,GAAA;AAA+C,GAC3D;AAEA,EAAA,MAAM,YAAA,GAAeC,OAAAA;AAAA,IACnB,MAAM,SAAS,EAAC;AAAA,IAChB,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,MAAM,QAAA,GAAWC,WAAAA;AAAA,IACf,CAAC,KAAa,OAAA,KAA0C;AACtD,MAAA,MAAM,UAAU,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,wBAAS,GAAA,EAAI;AAC9C,MAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AACnB,MAAA,SAAA,CAAU,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,UAAA,GAAaA,WAAAA;AAAA,IACjB,CAAC,KAAa,OAAA,KAA0C;AACtD,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AACjC,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,OAAA,CAAQ,OAAO,OAAO,CAAA;AACtB,MAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,QAAA,SAAA,CAAU,OAAO,GAAG,CAAA;AAAA,MACtB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,UAAA,GAAaA,WAAAA;AAAA,IACjB,CAAC,MAAyB,IAAA,KAAmB;AAC3C,MAAA,MAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA,GAAO,CAAC,IAAI,CAAA;AAEpD,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC5B,QAAA,IAAI,SAAS,MAAA,EAAW;AACtB,UAAA,wBAAA,CAAyB,aAAA,CAAc,QAAQ,IAAI,CAAA;AAAA,QACrD,CAAA,MAAO;AACL,UAAA,wBAAA,CAAyB,YAAY,MAAM,CAAA;AAAA,QAC7C;AAEA,QAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,UAAA,EAAY,aAAA,KAAkB;AAC/C,UAAA,IAAI,aAAA,CAAc,UAAA,CAAW,MAAM,CAAA,EAAG;AACpC,YAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,UAC/C;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,SAAA,GAAYA,WAAAA;AAAA,IAChB,CACE,SAAA,EACA,GAAA,EACAC,MAAAA,KACG;AACH,MAAA,cAAA,CAAe,CAAC,IAAA,MAAU;AAAA,QACxB,GAAG,IAAA;AAAA,QACH,CAAC,SAAS,GAAG;AAAA,UACX,GAAI,IAAA,CAAK,SAAS,CAAA,IAAK,EAAC;AAAA,UACxB,CAAC,GAAG,GAAGA;AAAA;AACT,OACF,CAAE,CAAA;AAAA,IACJ,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,cAAA,GAAiBD,WAAAA;AAAA,IACrB,CAAC,WAA2B,MAAA,KAA+C;AACzE,MAAA,cAAA,CAAe,CAAC,IAAA,MAAU;AAAA,QACxB,GAAG,IAAA;AAAA,QACH,CAAC,SAAS,GAAG;AAAA,UACX,GAAI,IAAA,CAAK,SAAS,CAAA,IAAK,EAAC;AAAA,UACxB,GAAG;AAAA;AACL,OACF,CAAE,CAAA;AAAA,IACJ,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,cAAA,GAAiBD,QAAQ,OAAO,EAAE,SAAS,WAAA,EAAY,CAAA,EAAI,EAAE,CAAA;AACnE,EAAA,cAAA,CAAe,OAAA,GAAU,WAAA;AAEzB,EAAA,MAAM,eAAA,GAAkBA,QAAQ,OAAO,EAAE,SAAS,YAAA,EAAa,CAAA,EAAI,EAAE,CAAA;AACrE,EAAA,eAAA,CAAgB,OAAA,GAAU,YAAA;AAE1B,EAAA,MAAM,eAAA,GAAkBC,WAAAA;AAAA,IACtB,CAAC,cACC,WAAA,CAAY,eAAA,CAAgB,SAAS,cAAA,CAAe,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,IACxE,CAAC,iBAAiB,cAAc;AAAA,GAClC;AAEA,EAAA,MAAM,SAAA,GAAYA,WAAAA;AAAA,IAChB,CACE,SAAA,EACA,GAAA,KACG,eAAA,CAAgB,SAAS,EAAE,GAAG,CAAA;AAAA,IACnC,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,MAAM,KAAA,GAAQD,OAAAA;AAAA,IACZ,OAAO;AAAA,MACL,OAAA;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MACT,YAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,eAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA;AAAA,MACE,OAAA;AAAA,MACA,SAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,uBACE,GAAA,CAAC,0BAAA,CAA2B,QAAA,EAA3B,EAAoC,OAClC,QAAA,EACH,CAAA;AAEJ;AAEO,SAAS,uBAAA,GAEZ;AACF,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd;AAAA,GACF;AAEA,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,gBAAA,GAA4D;AAC1E,EAAA,MAAM,UAAU,uBAAA,EAAkC;AAElD,EAAA,OAAO,CACL,SAAA,KAEA,yBAAA,CAAoD,OAAA,EAAS,SAAS,CAAA;AAC1E","file":"index.mjs","sourcesContent":["export class IgniterCallerClientCache {\n private static cache = new Map<\n string,\n { data: unknown; timestamp: number }\n >()\n\n static get<T>(key: string, staleTime?: number): T | undefined {\n const entry = IgniterCallerClientCache.cache.get(key)\n if (!entry) return undefined\n\n if (staleTime && Date.now() - entry.timestamp > staleTime) {\n IgniterCallerClientCache.cache.delete(key)\n return undefined\n }\n\n return entry.data as T\n }\n\n static set(key: string, data: unknown): void {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: Date.now(),\n })\n }\n\n static replacePrefix(prefix: string, data: unknown): void {\n for (const [key, entry] of IgniterCallerClientCache.cache.entries()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: entry.timestamp,\n })\n }\n }\n }\n\n static clearPrefix(prefix: string): void {\n for (const key of IgniterCallerClientCache.cache.keys()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.delete(key)\n }\n }\n }\n}\n","import type { IgniterCallerClientQuery } from '../interfaces/config'\n\nconst EMPTY_KEY = '{}'\n\nfunction stableStringify(value: unknown): string {\n if (value === null || value === undefined) return EMPTY_KEY\n if (typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) {\n return `[${value.map((item) => stableStringify(item)).join(',')}]`\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([a], [b]) => a.localeCompare(b),\n )\n\n return `{${entries\n .map(([key, val]) => `${JSON.stringify(key)}:${stableStringify(val)}`)\n .join(',')}}`\n}\n\nexport function buildQueryKey(params: {\n callerKey: string\n method: string\n path: string\n query?: IgniterCallerClientQuery\n params?: Record<string, string | number | boolean>\n}): string {\n const { callerKey, method, path, query, params: pathParams } = params\n const payload = {\n params: pathParams || {},\n query: query || {},\n }\n\n return `${callerKey}::${method.toUpperCase()}::${path}::${stableStringify(payload)}`\n}\n\nexport function buildQueryPrefix(params: {\n callerKey: string\n method: string\n path: string\n}): string {\n const { callerKey, method, path } = params\n return `${callerKey}::${method.toUpperCase()}::${path}`\n}\n","import type { IgniterCallerClientCookies } from '../interfaces/config'\n\nexport function buildCookieHeader(\n cookies?: IgniterCallerClientCookies,\n): string | undefined {\n if (!cookies || Object.keys(cookies).length === 0) return undefined\n\n return Object.entries(cookies)\n .map(([key, value]) => `${key}=${value}`)\n .join('; ')\n}\n","'use client'\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type { IgniterCallerApiResponse } from '../../types/response'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientQuery,\n} from '../interfaces/config'\nimport type { IgniterCallerClientRefetchFn } from '../interfaces/context'\nimport type {\n IgniterCallerUseMutateOptions,\n IgniterCallerUseMutateResult,\n IgniterCallerUseQueryOptions,\n IgniterCallerUseQueryResult,\n} from '../interfaces/hooks'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { buildQueryKey, buildQueryPrefix } from '../utils/query-key'\nimport { buildCookieHeader } from '../utils/cookies'\n\nexport interface IgniterCallerClientRequestInput {\n params?: Record<string, string | number | boolean>\n query?: Record<string, string | number | boolean>\n headers?: Record<string, string>\n cookies?: Record<string, string>\n body?: unknown\n}\n\nexport type IgniterCallerClientRequestFactory<TResponse> = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n) => {\n execute: () => Promise<IgniterCallerApiResponse<TResponse>>\n}\n\ninterface UseQueryParams<TResponse, TVariables> {\n callerKey: string\n method: 'GET' | 'HEAD'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n register: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n unregister: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n invalidate: (keys: string | string[], data?: unknown) => void\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\ninterface UseMutateParams<TResponse, TVariables> {\n callerKey: string\n method: 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeQueryInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const headers = {\n ...(config.headers || {}),\n ...(options?.headers || {}),\n ...(variables?.headers || {}),\n }\n const cookies = {\n ...(config.cookies || {}),\n ...(options?.cookies || {}),\n ...(variables?.cookies || {}),\n }\n const query = {\n ...(config.query || {}),\n ...(options?.query || {}),\n ...(variables?.query || {}),\n ...(options?.params || {}),\n ...(variables?.params || {}),\n }\n\n const cookieHeader = buildCookieHeader(cookies)\n if (cookieHeader && !headers.Cookie) {\n headers.Cookie = cookieHeader\n }\n\n return {\n headers,\n cookies,\n query,\n params: variables?.params || options?.params,\n }\n}\n\nfunction mergeMutateInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const merged = mergeQueryInput(config, options, variables)\n return {\n ...merged,\n body: variables?.body ?? options?.body,\n }\n}\n\nexport function createUseQuery<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n },\n>(\n params: UseQueryParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseQueryOptions<TResponse, TVariables>,\n) => IgniterCallerUseQueryResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n register,\n unregister,\n invalidate,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n options?.initialData ? 'success' : 'loading',\n )\n const [isFetching, setIsFetching] = useState(false)\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({\n data: options?.initialData ?? null,\n error: null,\n })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const stableKey = useMemo(() => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n options as IgniterCallerClientRequestInput | undefined,\n lastVariablesRef.current as IgniterCallerClientRequestInput | undefined,\n )\n\n return buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n }, [\n callerKey,\n method,\n path,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.params || {}),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.query || {}),\n ])\n\n const execute = useCallback(\n async (nextVariables?: TVariables) => {\n if (optionsRef.current?.enabled === false) return\n\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n const queryKey = buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setIsFetching(true)\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onQueryLoading?.(true)\n\n if (optionsRef.current?.staleTime) {\n const cached = IgniterCallerClientCache.get<TResponse>(\n queryKey,\n optionsRef.current.staleTime,\n )\n if (cached !== undefined) {\n setResponse({ data: cached, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(cached)\n mergedConfig.onQuerySuccess?.(cached)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n setIsFetching(false)\n return {\n data: cached,\n error: undefined,\n }\n }\n }\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onQueryError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onQuerySuccess?.(data)\n\n if (optionsRef.current?.staleTime && data !== null) {\n IgniterCallerClientCache.set(queryKey, data)\n }\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onQuerySettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onQueryError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onQuerySettled?.(null, typedError)\n } finally {\n setIsFetching(false)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n }\n },\n [callerKey, method, path],\n )\n\n const refetch = useCallback(() => {\n void execute(lastVariablesRef.current)\n }, [execute])\n\n const invalidateQuery = useCallback(\n (data?: TResponse) => {\n const prefix = buildQueryPrefix({ callerKey, method, path })\n invalidate(prefix, data)\n },\n [callerKey, method, path, invalidate],\n )\n\n useEffect(() => {\n register(stableKey, refetch)\n return () => unregister(stableKey, refetch)\n }, [register, unregister, refetch, stableKey])\n\n const initialFetchDoneRef = useRef(false)\n\n useEffect(() => {\n if (optionsRef.current?.enabled === false) return\n if (optionsRef.current?.refetchOnMount === false && initialFetchDoneRef.current) return\n\n initialFetchDoneRef.current = true\n void execute(lastVariablesRef.current)\n }, [stableKey, execute])\n\n useEffect(() => {\n const interval = optionsRef.current?.refetchInterval\n if (!interval) return\n\n const handler = setInterval(() => {\n if (\n optionsRef.current?.refetchIntervalInBackground === false &&\n typeof document !== 'undefined' &&\n document.hidden\n ) {\n return\n }\n void execute(lastVariablesRef.current)\n }, interval)\n\n return () => clearInterval(handler)\n }, [execute])\n\n useEffect(() => {\n if (optionsRef.current?.refetchOnWindowFocus === false) return\n if (typeof window === 'undefined') return\n\n const handler = () => {\n void execute(lastVariablesRef.current)\n }\n window.addEventListener('focus', handler)\n return () => window.removeEventListener('focus', handler)\n }, [execute])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isFetching,\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n refetch,\n invalidate: invalidateQuery,\n execute,\n }\n }\n}\n\nexport function createUseMutate<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n body?: unknown\n },\n>(\n params: UseMutateParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseMutateOptions<TResponse, TVariables>,\n) => IgniterCallerUseMutateResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n 'success',\n )\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({ data: null, error: null })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const mutate = useCallback(\n async (nextVariables?: TVariables) => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeMutateInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onMutationLoading?.(true)\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onMutationError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onMutationSuccess?.(data)\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onMutationSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onMutationError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onMutationSettled?.(null, typedError)\n } finally {\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onMutationLoading?.(false)\n }\n },\n [method, path, buildRequest, getMergedConfig, onError],\n )\n\n const retry = useCallback(() => {\n void mutate(lastVariablesRef.current)\n }, [mutate])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n mutate,\n retry,\n }\n }\n}\n","import type { IgniterCallerManager } from '../../core/manager'\nimport type { IgniterCallerClientContextValue } from '../interfaces/context'\nimport type { IgniterCallerClientRequestInput } from './hooks.builder'\nimport {\n createUseMutate,\n createUseQuery,\n} from './hooks.builder'\nimport type {\n IgniterCallerClient,\n IgniterCallerClientConfigApi,\n} from '../interfaces/client'\nimport { buildQueryPrefix } from '../utils/query-key'\n\nfunction applyRequestInput(\n builder: { params: (params: Record<string, string | number | boolean>) => any; headers: (headers: Record<string, string>) => any; body: (body: unknown) => any },\n input: IgniterCallerClientRequestInput,\n) {\n if (input.query && Object.keys(input.query).length > 0) {\n builder.params(input.query)\n }\n\n if (input.headers && Object.keys(input.headers).length > 0) {\n builder.headers(input.headers)\n }\n\n if (input.body !== undefined) {\n builder.body(input.body)\n }\n}\n\nexport function createIgniterCallerClient<\n TCaller extends IgniterCallerManager<any>,\n TCallers extends Record<string, IgniterCallerManager<any>>,\n>(\n context: IgniterCallerClientContextValue<TCallers>,\n callerKey: keyof TCallers,\n): IgniterCallerClient<TCaller> {\n const caller = context.callers[callerKey] as unknown as TCaller\n\n const getMergedConfig = () => context.getMergedConfig(callerKey)\n\n const buildRequest = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n ) => {\n if (!path) {\n throw new Error(\n 'IgniterCallerClient: path is required when using hooks with Caller client.',\n )\n }\n\n const methodKey = method.toLowerCase() as\n | 'get'\n | 'post'\n | 'put'\n | 'patch'\n | 'delete'\n | 'head'\n\n const builder = (caller as any)[methodKey](path)\n applyRequestInput(builder, input)\n return builder as { execute: () => Promise<any> }\n }\n\n const invalidate = (pathOrPaths: string | string[], data?: unknown) => {\n const paths = Array.isArray(pathOrPaths) ? pathOrPaths : [pathOrPaths]\n const prefixes = paths.map((path) =>\n buildQueryPrefix({\n callerKey: String(callerKey),\n method: 'GET',\n path,\n }),\n )\n context.invalidate(prefixes, data)\n }\n\n const config: IgniterCallerClientConfigApi = {\n set: (key, value) => context.setConfig(callerKey, key, value),\n get: (key) => context.getConfig(callerKey, key),\n reset: () => context.setConfigBatch(callerKey, {}),\n }\n\n const get = (path?: string) => {\n const builder = caller.get(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'GET',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const head = (path?: string) => {\n const builder = caller.head(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'HEAD',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const post = (path?: string) => {\n const builder = caller.post(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'POST',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const put = (path?: string) => {\n const builder = caller.put(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PUT',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const patch = (path?: string) => {\n const builder = caller.patch(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PATCH',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const del = (path?: string) => {\n const builder = caller.delete(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'DELETE',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n return {\n raw: caller,\n config,\n invalidate: invalidate as any,\n get: get as any,\n post: post as any,\n put: put as any,\n patch: patch as any,\n delete: del as any,\n head: head as any,\n }\n}\n","'use client'\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type {\n IgniterCallerClientContextValue,\n IgniterCallerClientConfigs,\n IgniterCallerClientMap,\n IgniterCallerClientRefetchFn,\n} from '../interfaces/context'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientConfigKey,\n IgniterCallerClientConfigValue,\n} from '../interfaces/config'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { createIgniterCallerClient } from './client.builder'\nimport type { IgniterCallerClient } from '../interfaces/client'\n\nconst IgniterCallerClientContext = createContext<\n IgniterCallerClientContextValue<any> | undefined\n>(undefined)\n\nexport interface IgniterCallerProviderProps<\n TCallers extends IgniterCallerClientMap,\n> extends PropsWithChildren {\n callers: TCallers\n configs?: IgniterCallerClientConfigs<TCallers>\n hooks?: IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeConfig(\n globalConfig: IgniterCallerClientConfig,\n localConfig?: IgniterCallerClientConfig,\n): IgniterCallerClientConfig {\n return {\n ...globalConfig,\n ...localConfig,\n headers: {\n ...(globalConfig.headers || {}),\n ...(localConfig?.headers || {}),\n },\n cookies: {\n ...(globalConfig.cookies || {}),\n ...(localConfig?.cookies || {}),\n },\n query: {\n ...(globalConfig.query || {}),\n ...(localConfig?.query || {}),\n },\n }\n}\n\nexport function IgniterCallerProvider<\n TCallers extends IgniterCallerClientMap,\n>(props: IgniterCallerProviderProps<TCallers>) {\n const { callers, configs, hooks, onError, children } = props\n const [configState, setConfigState] = useState<\n IgniterCallerClientConfigs<TCallers>\n >(configs || {})\n const [listeners] = useState(\n () => new Map<string, Set<IgniterCallerClientRefetchFn>>(),\n )\n\n const globalConfig = useMemo<IgniterCallerClientConfig>(\n () => hooks || {},\n [hooks],\n )\n\n const register = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key) || new Set()\n current.add(refetch)\n listeners.set(key, current)\n },\n [listeners],\n )\n\n const unregister = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key)\n if (!current) return\n current.delete(refetch)\n if (current.size === 0) {\n listeners.delete(key)\n }\n },\n [listeners],\n )\n\n const invalidate = useCallback(\n (keys: string | string[], data?: unknown) => {\n const keysArray = Array.isArray(keys) ? keys : [keys]\n\n keysArray.forEach((prefix) => {\n if (data !== undefined) {\n IgniterCallerClientCache.replacePrefix(prefix, data)\n } else {\n IgniterCallerClientCache.clearPrefix(prefix)\n }\n\n listeners.forEach((refetchFns, registeredKey) => {\n if (registeredKey.startsWith(prefix)) {\n refetchFns.forEach((refetch) => refetch(true))\n }\n })\n })\n },\n [listeners],\n )\n\n const setConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n value: IgniterCallerClientConfigValue<TKey>,\n ) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n [key]: value,\n },\n }))\n },\n [],\n )\n\n const setConfigBatch = useCallback(\n (callerKey: keyof TCallers, config: Partial<IgniterCallerClientConfig>) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n ...config,\n },\n }))\n },\n [],\n )\n\n const configStateRef = useMemo(() => ({ current: configState }), [])\n configStateRef.current = configState\n\n const globalConfigRef = useMemo(() => ({ current: globalConfig }), [])\n globalConfigRef.current = globalConfig\n\n const getMergedConfig = useCallback(\n (callerKey: keyof TCallers) =>\n mergeConfig(globalConfigRef.current, configStateRef.current[callerKey]),\n [globalConfigRef, configStateRef],\n )\n\n const getConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n ) => getMergedConfig(callerKey)[key],\n [getMergedConfig],\n )\n\n const value = useMemo<IgniterCallerClientContextValue<TCallers>>(\n () => ({\n callers,\n configs: configState,\n globalConfig,\n setConfig,\n setConfigBatch,\n getConfig,\n getMergedConfig,\n register,\n unregister,\n invalidate,\n listeners,\n onError,\n }),\n [\n callers,\n getConfig,\n getMergedConfig,\n invalidate,\n listeners,\n onError,\n register,\n setConfig,\n setConfigBatch,\n unregister,\n ],\n )\n\n return (\n <IgniterCallerClientContext.Provider value={value}>\n {children}\n </IgniterCallerClientContext.Provider>\n )\n}\n\nexport function useIgniterCallerContext<\n TCallers extends IgniterCallerClientMap,\n>() {\n const context = useContext(\n IgniterCallerClientContext,\n ) as IgniterCallerClientContextValue<TCallers> | undefined\n\n if (!context) {\n throw new Error(\n 'IgniterCallerProvider is missing. Wrap your app with <IgniterCallerProvider>.',\n )\n }\n\n return context\n}\n\nexport function useIgniterCaller<TCallers extends IgniterCallerClientMap>() {\n const context = useIgniterCallerContext<TCallers>()\n\n return <TKey extends keyof TCallers>(\n callerKey: TKey,\n ): IgniterCallerClient<TCallers[TKey]> =>\n createIgniterCallerClient<TCallers[TKey], TCallers>(context, callerKey)\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@igniter-js/caller",
3
- "version": "0.1.54",
3
+ "version": "0.1.56",
4
4
  "description": "Type-safe HTTP client for Igniter.js with interceptors, retries, caching, and StandardSchema validation",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",