@igniter-js/caller 0.1.53 → 0.1.55

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 {
@@ -157,8 +157,9 @@ function createUseQuery(params) {
157
157
  callerKey,
158
158
  method,
159
159
  path,
160
- getMergedConfig,
160
+ // eslint-disable-next-line react-hooks/exhaustive-deps
161
161
  JSON.stringify(options?.params || {}),
162
+ // eslint-disable-next-line react-hooks/exhaustive-deps
162
163
  JSON.stringify(options?.query || {})
163
164
  ]);
164
165
  const execute = react.useCallback(
@@ -261,9 +262,11 @@ function createUseQuery(params) {
261
262
  register(stableKey, refetch);
262
263
  return () => unregister(stableKey, refetch);
263
264
  }, [register, unregister, refetch, stableKey]);
265
+ const initialFetchDoneRef = react.useRef(false);
264
266
  react.useEffect(() => {
265
267
  if (optionsRef.current?.enabled === false) return;
266
- if (optionsRef.current?.refetchOnMount === false) return;
268
+ if (optionsRef.current?.refetchOnMount === false && initialFetchDoneRef.current) return;
269
+ initialFetchDoneRef.current = true;
267
270
  void execute(lastVariablesRef.current);
268
271
  }, [stableKey, execute]);
269
272
  react.useEffect(() => {
@@ -620,9 +623,13 @@ function IgniterCallerProvider(props) {
620
623
  },
621
624
  []
622
625
  );
626
+ const configStateRef = react.useMemo(() => ({ current: configState }), []);
627
+ configStateRef.current = configState;
628
+ const globalConfigRef = react.useMemo(() => ({ current: globalConfig }), []);
629
+ globalConfigRef.current = globalConfig;
623
630
  const getMergedConfig = react.useCallback(
624
- (callerKey) => mergeConfig(globalConfig, configState[callerKey]),
625
- [globalConfig, configState]
631
+ (callerKey) => mergeConfig(globalConfigRef.current, configStateRef.current[callerKey]),
632
+ [globalConfigRef, configStateRef]
626
633
  );
627
634
  const getConfig = react.useCallback(
628
635
  (callerKey, key) => getMergedConfig(callerKey)[key],
@@ -645,8 +652,6 @@ function IgniterCallerProvider(props) {
645
652
  }),
646
653
  [
647
654
  callers,
648
- configState,
649
- globalConfig,
650
655
  getConfig,
651
656
  getMergedConfig,
652
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 getMergedConfig,\n JSON.stringify(options?.params || {}),\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 useEffect(() => {\n if (optionsRef.current?.enabled === false) return\n if (optionsRef.current?.refetchOnMount === false) return\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, 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'\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"]}
@@ -155,8 +155,9 @@ function createUseQuery(params) {
155
155
  callerKey,
156
156
  method,
157
157
  path,
158
- getMergedConfig,
158
+ // eslint-disable-next-line react-hooks/exhaustive-deps
159
159
  JSON.stringify(options?.params || {}),
160
+ // eslint-disable-next-line react-hooks/exhaustive-deps
160
161
  JSON.stringify(options?.query || {})
161
162
  ]);
162
163
  const execute = useCallback(
@@ -259,9 +260,11 @@ function createUseQuery(params) {
259
260
  register(stableKey, refetch);
260
261
  return () => unregister(stableKey, refetch);
261
262
  }, [register, unregister, refetch, stableKey]);
263
+ const initialFetchDoneRef = useRef(false);
262
264
  useEffect(() => {
263
265
  if (optionsRef.current?.enabled === false) return;
264
- if (optionsRef.current?.refetchOnMount === false) return;
266
+ if (optionsRef.current?.refetchOnMount === false && initialFetchDoneRef.current) return;
267
+ initialFetchDoneRef.current = true;
265
268
  void execute(lastVariablesRef.current);
266
269
  }, [stableKey, execute]);
267
270
  useEffect(() => {
@@ -618,9 +621,13 @@ function IgniterCallerProvider(props) {
618
621
  },
619
622
  []
620
623
  );
624
+ const configStateRef = useMemo(() => ({ current: configState }), []);
625
+ configStateRef.current = configState;
626
+ const globalConfigRef = useMemo(() => ({ current: globalConfig }), []);
627
+ globalConfigRef.current = globalConfig;
621
628
  const getMergedConfig = useCallback(
622
- (callerKey) => mergeConfig(globalConfig, configState[callerKey]),
623
- [globalConfig, configState]
629
+ (callerKey) => mergeConfig(globalConfigRef.current, configStateRef.current[callerKey]),
630
+ [globalConfigRef, configStateRef]
624
631
  );
625
632
  const getConfig = useCallback(
626
633
  (callerKey, key) => getMergedConfig(callerKey)[key],
@@ -643,8 +650,6 @@ function IgniterCallerProvider(props) {
643
650
  }),
644
651
  [
645
652
  callers,
646
- configState,
647
- globalConfig,
648
653
  getConfig,
649
654
  getMergedConfig,
650
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 getMergedConfig,\n JSON.stringify(options?.params || {}),\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 useEffect(() => {\n if (optionsRef.current?.enabled === false) return\n if (optionsRef.current?.refetchOnMount === false) return\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":"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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'\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.53",
3
+ "version": "0.1.55",
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",
@@ -68,25 +68,24 @@
68
68
  },
69
69
  "homepage": "https://igniterjs.com",
70
70
  "dependencies": {
71
- "@igniter-js/common": ">=0.1.0",
72
- "@igniter-js/telemetry": ">=0.1.12"
71
+ "@igniter-js/common": ">=0.1.0"
73
72
  },
74
73
  "devDependencies": {
75
74
  "@igniter-js/common": "*",
76
75
  "@igniter-js/telemetry": "*",
77
76
  "@types/node": "^22.7.5",
77
+ "@types/react": "^18.3.12",
78
+ "react": "^18.3.1",
78
79
  "tsup": "^8.3.0",
79
80
  "typescript": "^5.6.3",
80
81
  "vitest": "^2.1.4",
81
- "zod": "^4.2.1",
82
- "@types/react": "^18.3.12",
83
- "react": "^18.3.1"
82
+ "zod": "^4.2.1"
84
83
  },
85
84
  "peerDependencies": {
86
85
  "@igniter-js/common": ">=0.1.0",
87
86
  "@igniter-js/telemetry": ">=0.1.12",
88
- "zod": ">=4.2.1",
89
- "react": ">=18.0.0"
87
+ "react": ">=18.0.0",
88
+ "zod": ">=4.2.1"
90
89
  },
91
90
  "peerDependenciesMeta": {
92
91
  "zod": {