@igniter-js/caller 0.1.54 → 0.1.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/index.d.mts +11 -11
- package/dist/client/index.d.ts +11 -11
- package/dist/client/index.js +7 -5
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +7 -5
- package/dist/client/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/client/index.d.mts
CHANGED
|
@@ -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 {
|
package/dist/client/index.d.ts
CHANGED
|
@@ -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 {
|
package/dist/client/index.js
CHANGED
|
@@ -246,7 +246,7 @@ function createUseQuery(params) {
|
|
|
246
246
|
mergedConfig.onQueryLoading?.(false);
|
|
247
247
|
}
|
|
248
248
|
},
|
|
249
|
-
[callerKey, method, path
|
|
249
|
+
[callerKey, method, path]
|
|
250
250
|
);
|
|
251
251
|
const refetch = react.useCallback(() => {
|
|
252
252
|
void execute(lastVariablesRef.current);
|
|
@@ -623,9 +623,13 @@ function IgniterCallerProvider(props) {
|
|
|
623
623
|
},
|
|
624
624
|
[]
|
|
625
625
|
);
|
|
626
|
+
const configStateRef = react.useMemo(() => ({ current: configState }), []);
|
|
627
|
+
configStateRef.current = configState;
|
|
628
|
+
const globalConfigRef = react.useMemo(() => ({ current: globalConfig }), []);
|
|
629
|
+
globalConfigRef.current = globalConfig;
|
|
626
630
|
const getMergedConfig = react.useCallback(
|
|
627
|
-
(callerKey) => mergeConfig(
|
|
628
|
-
[
|
|
631
|
+
(callerKey) => mergeConfig(globalConfigRef.current, configStateRef.current[callerKey]),
|
|
632
|
+
[globalConfigRef, configStateRef]
|
|
629
633
|
);
|
|
630
634
|
const getConfig = react.useCallback(
|
|
631
635
|
(callerKey, key) => getMergedConfig(callerKey)[key],
|
|
@@ -648,8 +652,6 @@ function IgniterCallerProvider(props) {
|
|
|
648
652
|
}),
|
|
649
653
|
[
|
|
650
654
|
callers,
|
|
651
|
-
configState,
|
|
652
|
-
globalConfig,
|
|
653
655
|
getConfig,
|
|
654
656
|
getMergedConfig,
|
|
655
657
|
invalidate,
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/utils/cache.ts","../../src/client/utils/query-key.ts","../../src/client/utils/cookies.ts","../../src/client/builders/hooks.builder.tsx","../../src/client/builders/client.builder.ts","../../src/client/builders/provider.builder.tsx"],"names":["useState","useRef","useMemo","useCallback","useEffect","createContext","value","jsx","useContext"],"mappings":"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","file":"index.js","sourcesContent":["export class IgniterCallerClientCache {\n private static cache = new Map<\n string,\n { data: unknown; timestamp: number }\n >()\n\n static get<T>(key: string, staleTime?: number): T | undefined {\n const entry = IgniterCallerClientCache.cache.get(key)\n if (!entry) return undefined\n\n if (staleTime && Date.now() - entry.timestamp > staleTime) {\n IgniterCallerClientCache.cache.delete(key)\n return undefined\n }\n\n return entry.data as T\n }\n\n static set(key: string, data: unknown): void {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: Date.now(),\n })\n }\n\n static replacePrefix(prefix: string, data: unknown): void {\n for (const [key, entry] of IgniterCallerClientCache.cache.entries()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: entry.timestamp,\n })\n }\n }\n }\n\n static clearPrefix(prefix: string): void {\n for (const key of IgniterCallerClientCache.cache.keys()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.delete(key)\n }\n }\n }\n}\n","import type { IgniterCallerClientQuery } from '../interfaces/config'\n\nconst EMPTY_KEY = '{}'\n\nfunction stableStringify(value: unknown): string {\n if (value === null || value === undefined) return EMPTY_KEY\n if (typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) {\n return `[${value.map((item) => stableStringify(item)).join(',')}]`\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([a], [b]) => a.localeCompare(b),\n )\n\n return `{${entries\n .map(([key, val]) => `${JSON.stringify(key)}:${stableStringify(val)}`)\n .join(',')}}`\n}\n\nexport function buildQueryKey(params: {\n callerKey: string\n method: string\n path: string\n query?: IgniterCallerClientQuery\n params?: Record<string, string | number | boolean>\n}): string {\n const { callerKey, method, path, query, params: pathParams } = params\n const payload = {\n params: pathParams || {},\n query: query || {},\n }\n\n return `${callerKey}::${method.toUpperCase()}::${path}::${stableStringify(payload)}`\n}\n\nexport function buildQueryPrefix(params: {\n callerKey: string\n method: string\n path: string\n}): string {\n const { callerKey, method, path } = params\n return `${callerKey}::${method.toUpperCase()}::${path}`\n}\n","import type { IgniterCallerClientCookies } from '../interfaces/config'\n\nexport function buildCookieHeader(\n cookies?: IgniterCallerClientCookies,\n): string | undefined {\n if (!cookies || Object.keys(cookies).length === 0) return undefined\n\n return Object.entries(cookies)\n .map(([key, value]) => `${key}=${value}`)\n .join('; ')\n}\n","'use client'\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type { IgniterCallerApiResponse } from '../../types/response'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientQuery,\n} from '../interfaces/config'\nimport type { IgniterCallerClientRefetchFn } from '../interfaces/context'\nimport type {\n IgniterCallerUseMutateOptions,\n IgniterCallerUseMutateResult,\n IgniterCallerUseQueryOptions,\n IgniterCallerUseQueryResult,\n} from '../interfaces/hooks'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { buildQueryKey, buildQueryPrefix } from '../utils/query-key'\nimport { buildCookieHeader } from '../utils/cookies'\n\nexport interface IgniterCallerClientRequestInput {\n params?: Record<string, string | number | boolean>\n query?: Record<string, string | number | boolean>\n headers?: Record<string, string>\n cookies?: Record<string, string>\n body?: unknown\n}\n\nexport type IgniterCallerClientRequestFactory<TResponse> = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n) => {\n execute: () => Promise<IgniterCallerApiResponse<TResponse>>\n}\n\ninterface UseQueryParams<TResponse, TVariables> {\n callerKey: string\n method: 'GET' | 'HEAD'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n register: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n unregister: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n invalidate: (keys: string | string[], data?: unknown) => void\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\ninterface UseMutateParams<TResponse, TVariables> {\n callerKey: string\n method: 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeQueryInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const headers = {\n ...(config.headers || {}),\n ...(options?.headers || {}),\n ...(variables?.headers || {}),\n }\n const cookies = {\n ...(config.cookies || {}),\n ...(options?.cookies || {}),\n ...(variables?.cookies || {}),\n }\n const query = {\n ...(config.query || {}),\n ...(options?.query || {}),\n ...(variables?.query || {}),\n ...(options?.params || {}),\n ...(variables?.params || {}),\n }\n\n const cookieHeader = buildCookieHeader(cookies)\n if (cookieHeader && !headers.Cookie) {\n headers.Cookie = cookieHeader\n }\n\n return {\n headers,\n cookies,\n query,\n params: variables?.params || options?.params,\n }\n}\n\nfunction mergeMutateInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const merged = mergeQueryInput(config, options, variables)\n return {\n ...merged,\n body: variables?.body ?? options?.body,\n }\n}\n\nexport function createUseQuery<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n },\n>(\n params: UseQueryParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseQueryOptions<TResponse, TVariables>,\n) => IgniterCallerUseQueryResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n register,\n unregister,\n invalidate,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n options?.initialData ? 'success' : 'loading',\n )\n const [isFetching, setIsFetching] = useState(false)\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({\n data: options?.initialData ?? null,\n error: null,\n })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const stableKey = useMemo(() => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n options as IgniterCallerClientRequestInput | undefined,\n lastVariablesRef.current as IgniterCallerClientRequestInput | undefined,\n )\n\n return buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n }, [\n callerKey,\n method,\n path,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.params || {}),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.query || {}),\n ])\n\n const execute = useCallback(\n async (nextVariables?: TVariables) => {\n if (optionsRef.current?.enabled === false) return\n\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n const queryKey = buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setIsFetching(true)\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onQueryLoading?.(true)\n\n if (optionsRef.current?.staleTime) {\n const cached = IgniterCallerClientCache.get<TResponse>(\n queryKey,\n optionsRef.current.staleTime,\n )\n if (cached !== undefined) {\n setResponse({ data: cached, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(cached)\n mergedConfig.onQuerySuccess?.(cached)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n setIsFetching(false)\n return {\n data: cached,\n error: undefined,\n }\n }\n }\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onQueryError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onQuerySuccess?.(data)\n\n if (optionsRef.current?.staleTime && data !== null) {\n IgniterCallerClientCache.set(queryKey, data)\n }\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onQuerySettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onQueryError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onQuerySettled?.(null, typedError)\n } finally {\n setIsFetching(false)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n }\n },\n [callerKey, method, path, buildRequest, getMergedConfig, onError],\n )\n\n const refetch = useCallback(() => {\n void execute(lastVariablesRef.current)\n }, [execute])\n\n const invalidateQuery = useCallback(\n (data?: TResponse) => {\n const prefix = buildQueryPrefix({ callerKey, method, path })\n invalidate(prefix, data)\n },\n [callerKey, method, path, invalidate],\n )\n\n useEffect(() => {\n register(stableKey, refetch)\n return () => unregister(stableKey, refetch)\n }, [register, unregister, refetch, stableKey])\n\n const initialFetchDoneRef = useRef(false)\n\n useEffect(() => {\n if (optionsRef.current?.enabled === false) return\n if (optionsRef.current?.refetchOnMount === false && initialFetchDoneRef.current) return\n\n initialFetchDoneRef.current = true\n void execute(lastVariablesRef.current)\n }, [stableKey, execute])\n\n useEffect(() => {\n const interval = optionsRef.current?.refetchInterval\n if (!interval) return\n\n const handler = setInterval(() => {\n if (\n optionsRef.current?.refetchIntervalInBackground === false &&\n typeof document !== 'undefined' &&\n document.hidden\n ) {\n return\n }\n void execute(lastVariablesRef.current)\n }, interval)\n\n return () => clearInterval(handler)\n }, [execute])\n\n useEffect(() => {\n if (optionsRef.current?.refetchOnWindowFocus === false) return\n if (typeof window === 'undefined') return\n\n const handler = () => {\n void execute(lastVariablesRef.current)\n }\n window.addEventListener('focus', handler)\n return () => window.removeEventListener('focus', handler)\n }, [execute])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isFetching,\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n refetch,\n invalidate: invalidateQuery,\n execute,\n }\n }\n}\n\nexport function createUseMutate<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n body?: unknown\n },\n>(\n params: UseMutateParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseMutateOptions<TResponse, TVariables>,\n) => IgniterCallerUseMutateResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n 'success',\n )\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({ data: null, error: null })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const mutate = useCallback(\n async (nextVariables?: TVariables) => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeMutateInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onMutationLoading?.(true)\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onMutationError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onMutationSuccess?.(data)\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onMutationSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onMutationError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onMutationSettled?.(null, typedError)\n } finally {\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onMutationLoading?.(false)\n }\n },\n [method, path, buildRequest, getMergedConfig, onError],\n )\n\n const retry = useCallback(() => {\n void mutate(lastVariablesRef.current)\n }, [mutate])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n mutate,\n retry,\n }\n }\n}\n","import type { IgniterCallerManager } from '../../core/manager'\nimport type { IgniterCallerClientContextValue } from '../interfaces/context'\nimport type { IgniterCallerClientRequestInput } from './hooks.builder'\nimport {\n createUseMutate,\n createUseQuery,\n} from './hooks.builder'\nimport type {\n IgniterCallerClient,\n IgniterCallerClientConfigApi,\n} from '../interfaces/client'\nimport { buildQueryPrefix } from '../utils/query-key'\n\nfunction applyRequestInput(\n builder: { params: (params: Record<string, string | number | boolean>) => any; headers: (headers: Record<string, string>) => any; body: (body: unknown) => any },\n input: IgniterCallerClientRequestInput,\n) {\n if (input.query && Object.keys(input.query).length > 0) {\n builder.params(input.query)\n }\n\n if (input.headers && Object.keys(input.headers).length > 0) {\n builder.headers(input.headers)\n }\n\n if (input.body !== undefined) {\n builder.body(input.body)\n }\n}\n\nexport function createIgniterCallerClient<\n TCaller extends IgniterCallerManager<any>,\n TCallers extends Record<string, IgniterCallerManager<any>>,\n>(\n context: IgniterCallerClientContextValue<TCallers>,\n callerKey: keyof TCallers,\n): IgniterCallerClient<TCaller> {\n const caller = context.callers[callerKey] as unknown as TCaller\n\n const getMergedConfig = () => context.getMergedConfig(callerKey)\n\n const buildRequest = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n ) => {\n if (!path) {\n throw new Error(\n 'IgniterCallerClient: path is required when using hooks with Caller client.',\n )\n }\n\n const methodKey = method.toLowerCase() as\n | 'get'\n | 'post'\n | 'put'\n | 'patch'\n | 'delete'\n | 'head'\n\n const builder = (caller as any)[methodKey](path)\n applyRequestInput(builder, input)\n return builder as { execute: () => Promise<any> }\n }\n\n const invalidate = (pathOrPaths: string | string[], data?: unknown) => {\n const paths = Array.isArray(pathOrPaths) ? pathOrPaths : [pathOrPaths]\n const prefixes = paths.map((path) =>\n buildQueryPrefix({\n callerKey: String(callerKey),\n method: 'GET',\n path,\n }),\n )\n context.invalidate(prefixes, data)\n }\n\n const config: IgniterCallerClientConfigApi = {\n set: (key, value) => context.setConfig(callerKey, key, value),\n get: (key) => context.getConfig(callerKey, key),\n reset: () => context.setConfigBatch(callerKey, {}),\n }\n\n const get = (path?: string) => {\n const builder = caller.get(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'GET',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const head = (path?: string) => {\n const builder = caller.head(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'HEAD',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const post = (path?: string) => {\n const builder = caller.post(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'POST',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const put = (path?: string) => {\n const builder = caller.put(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PUT',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const patch = (path?: string) => {\n const builder = caller.patch(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PATCH',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const del = (path?: string) => {\n const builder = caller.delete(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'DELETE',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n return {\n raw: caller,\n config,\n invalidate: invalidate as any,\n get: get as any,\n post: post as any,\n put: put as any,\n patch: patch as any,\n delete: del as any,\n head: head as any,\n }\n}\n","'use client'\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type {\n IgniterCallerClientContextValue,\n IgniterCallerClientConfigs,\n IgniterCallerClientMap,\n IgniterCallerClientRefetchFn,\n} from '../interfaces/context'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientConfigKey,\n IgniterCallerClientConfigValue,\n} from '../interfaces/config'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { createIgniterCallerClient } from './client.builder'\n\nconst IgniterCallerClientContext = createContext<\n IgniterCallerClientContextValue<any> | undefined\n>(undefined)\n\nexport interface IgniterCallerProviderProps<\n TCallers extends IgniterCallerClientMap,\n> extends PropsWithChildren {\n callers: TCallers\n configs?: IgniterCallerClientConfigs<TCallers>\n hooks?: IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeConfig(\n globalConfig: IgniterCallerClientConfig,\n localConfig?: IgniterCallerClientConfig,\n): IgniterCallerClientConfig {\n return {\n ...globalConfig,\n ...localConfig,\n headers: {\n ...(globalConfig.headers || {}),\n ...(localConfig?.headers || {}),\n },\n cookies: {\n ...(globalConfig.cookies || {}),\n ...(localConfig?.cookies || {}),\n },\n query: {\n ...(globalConfig.query || {}),\n ...(localConfig?.query || {}),\n },\n }\n}\n\nexport function IgniterCallerProvider<\n TCallers extends IgniterCallerClientMap,\n>(props: IgniterCallerProviderProps<TCallers>) {\n const { callers, configs, hooks, onError, children } = props\n const [configState, setConfigState] = useState<\n IgniterCallerClientConfigs<TCallers>\n >(configs || {})\n const [listeners] = useState(\n () => new Map<string, Set<IgniterCallerClientRefetchFn>>(),\n )\n\n const globalConfig = useMemo<IgniterCallerClientConfig>(\n () => hooks || {},\n [hooks],\n )\n\n const register = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key) || new Set()\n current.add(refetch)\n listeners.set(key, current)\n },\n [listeners],\n )\n\n const unregister = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key)\n if (!current) return\n current.delete(refetch)\n if (current.size === 0) {\n listeners.delete(key)\n }\n },\n [listeners],\n )\n\n const invalidate = useCallback(\n (keys: string | string[], data?: unknown) => {\n const keysArray = Array.isArray(keys) ? keys : [keys]\n\n keysArray.forEach((prefix) => {\n if (data !== undefined) {\n IgniterCallerClientCache.replacePrefix(prefix, data)\n } else {\n IgniterCallerClientCache.clearPrefix(prefix)\n }\n\n listeners.forEach((refetchFns, registeredKey) => {\n if (registeredKey.startsWith(prefix)) {\n refetchFns.forEach((refetch) => refetch(true))\n }\n })\n })\n },\n [listeners],\n )\n\n const setConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n value: IgniterCallerClientConfigValue<TKey>,\n ) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n [key]: value,\n },\n }))\n },\n [],\n )\n\n const setConfigBatch = useCallback(\n (callerKey: keyof TCallers, config: Partial<IgniterCallerClientConfig>) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n ...config,\n },\n }))\n },\n [],\n )\n\n const getMergedConfig = useCallback(\n (callerKey: keyof TCallers) =>\n mergeConfig(globalConfig, configState[callerKey]),\n [globalConfig, configState],\n )\n\n const getConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n ) => getMergedConfig(callerKey)[key],\n [getMergedConfig],\n )\n\n const value = useMemo<IgniterCallerClientContextValue<TCallers>>(\n () => ({\n callers,\n configs: configState,\n globalConfig,\n setConfig,\n setConfigBatch,\n getConfig,\n getMergedConfig,\n register,\n unregister,\n invalidate,\n listeners,\n onError,\n }),\n [\n callers,\n configState,\n globalConfig,\n getConfig,\n getMergedConfig,\n invalidate,\n listeners,\n onError,\n register,\n setConfig,\n setConfigBatch,\n unregister,\n ],\n )\n\n return (\n <IgniterCallerClientContext.Provider value={value}>\n {children}\n </IgniterCallerClientContext.Provider>\n )\n}\n\nexport function useIgniterCallerContext<\n TCallers extends IgniterCallerClientMap,\n>() {\n const context = useContext(\n IgniterCallerClientContext,\n ) as IgniterCallerClientContextValue<TCallers> | undefined\n\n if (!context) {\n throw new Error(\n 'IgniterCallerProvider is missing. Wrap your app with <IgniterCallerProvider>.',\n )\n }\n\n return context\n}\n\nexport function useIgniterCaller<TCallers extends IgniterCallerClientMap>() {\n const context = useIgniterCallerContext<TCallers>()\n\n return <TKey extends keyof TCallers>(callerKey: TKey) =>\n createIgniterCallerClient(context, callerKey)\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/client/utils/cache.ts","../../src/client/utils/query-key.ts","../../src/client/utils/cookies.ts","../../src/client/builders/hooks.builder.tsx","../../src/client/builders/client.builder.ts","../../src/client/builders/provider.builder.tsx"],"names":["useState","useRef","useMemo","useCallback","useEffect","createContext","value","jsx","useContext"],"mappings":"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","file":"index.js","sourcesContent":["export class IgniterCallerClientCache {\n private static cache = new Map<\n string,\n { data: unknown; timestamp: number }\n >()\n\n static get<T>(key: string, staleTime?: number): T | undefined {\n const entry = IgniterCallerClientCache.cache.get(key)\n if (!entry) return undefined\n\n if (staleTime && Date.now() - entry.timestamp > staleTime) {\n IgniterCallerClientCache.cache.delete(key)\n return undefined\n }\n\n return entry.data as T\n }\n\n static set(key: string, data: unknown): void {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: Date.now(),\n })\n }\n\n static replacePrefix(prefix: string, data: unknown): void {\n for (const [key, entry] of IgniterCallerClientCache.cache.entries()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: entry.timestamp,\n })\n }\n }\n }\n\n static clearPrefix(prefix: string): void {\n for (const key of IgniterCallerClientCache.cache.keys()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.delete(key)\n }\n }\n }\n}\n","import type { IgniterCallerClientQuery } from '../interfaces/config'\n\nconst EMPTY_KEY = '{}'\n\nfunction stableStringify(value: unknown): string {\n if (value === null || value === undefined) return EMPTY_KEY\n if (typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) {\n return `[${value.map((item) => stableStringify(item)).join(',')}]`\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([a], [b]) => a.localeCompare(b),\n )\n\n return `{${entries\n .map(([key, val]) => `${JSON.stringify(key)}:${stableStringify(val)}`)\n .join(',')}}`\n}\n\nexport function buildQueryKey(params: {\n callerKey: string\n method: string\n path: string\n query?: IgniterCallerClientQuery\n params?: Record<string, string | number | boolean>\n}): string {\n const { callerKey, method, path, query, params: pathParams } = params\n const payload = {\n params: pathParams || {},\n query: query || {},\n }\n\n return `${callerKey}::${method.toUpperCase()}::${path}::${stableStringify(payload)}`\n}\n\nexport function buildQueryPrefix(params: {\n callerKey: string\n method: string\n path: string\n}): string {\n const { callerKey, method, path } = params\n return `${callerKey}::${method.toUpperCase()}::${path}`\n}\n","import type { IgniterCallerClientCookies } from '../interfaces/config'\n\nexport function buildCookieHeader(\n cookies?: IgniterCallerClientCookies,\n): string | undefined {\n if (!cookies || Object.keys(cookies).length === 0) return undefined\n\n return Object.entries(cookies)\n .map(([key, value]) => `${key}=${value}`)\n .join('; ')\n}\n","'use client'\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type { IgniterCallerApiResponse } from '../../types/response'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientQuery,\n} from '../interfaces/config'\nimport type { IgniterCallerClientRefetchFn } from '../interfaces/context'\nimport type {\n IgniterCallerUseMutateOptions,\n IgniterCallerUseMutateResult,\n IgniterCallerUseQueryOptions,\n IgniterCallerUseQueryResult,\n} from '../interfaces/hooks'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { buildQueryKey, buildQueryPrefix } from '../utils/query-key'\nimport { buildCookieHeader } from '../utils/cookies'\n\nexport interface IgniterCallerClientRequestInput {\n params?: Record<string, string | number | boolean>\n query?: Record<string, string | number | boolean>\n headers?: Record<string, string>\n cookies?: Record<string, string>\n body?: unknown\n}\n\nexport type IgniterCallerClientRequestFactory<TResponse> = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n) => {\n execute: () => Promise<IgniterCallerApiResponse<TResponse>>\n}\n\ninterface UseQueryParams<TResponse, TVariables> {\n callerKey: string\n method: 'GET' | 'HEAD'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n register: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n unregister: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n invalidate: (keys: string | string[], data?: unknown) => void\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\ninterface UseMutateParams<TResponse, TVariables> {\n callerKey: string\n method: 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeQueryInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const headers = {\n ...(config.headers || {}),\n ...(options?.headers || {}),\n ...(variables?.headers || {}),\n }\n const cookies = {\n ...(config.cookies || {}),\n ...(options?.cookies || {}),\n ...(variables?.cookies || {}),\n }\n const query = {\n ...(config.query || {}),\n ...(options?.query || {}),\n ...(variables?.query || {}),\n ...(options?.params || {}),\n ...(variables?.params || {}),\n }\n\n const cookieHeader = buildCookieHeader(cookies)\n if (cookieHeader && !headers.Cookie) {\n headers.Cookie = cookieHeader\n }\n\n return {\n headers,\n cookies,\n query,\n params: variables?.params || options?.params,\n }\n}\n\nfunction mergeMutateInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const merged = mergeQueryInput(config, options, variables)\n return {\n ...merged,\n body: variables?.body ?? options?.body,\n }\n}\n\nexport function createUseQuery<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n },\n>(\n params: UseQueryParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseQueryOptions<TResponse, TVariables>,\n) => IgniterCallerUseQueryResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n register,\n unregister,\n invalidate,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n options?.initialData ? 'success' : 'loading',\n )\n const [isFetching, setIsFetching] = useState(false)\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({\n data: options?.initialData ?? null,\n error: null,\n })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const stableKey = useMemo(() => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n options as IgniterCallerClientRequestInput | undefined,\n lastVariablesRef.current as IgniterCallerClientRequestInput | undefined,\n )\n\n return buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n }, [\n callerKey,\n method,\n path,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.params || {}),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.query || {}),\n ])\n\n const execute = useCallback(\n async (nextVariables?: TVariables) => {\n if (optionsRef.current?.enabled === false) return\n\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n const queryKey = buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setIsFetching(true)\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onQueryLoading?.(true)\n\n if (optionsRef.current?.staleTime) {\n const cached = IgniterCallerClientCache.get<TResponse>(\n queryKey,\n optionsRef.current.staleTime,\n )\n if (cached !== undefined) {\n setResponse({ data: cached, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(cached)\n mergedConfig.onQuerySuccess?.(cached)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n setIsFetching(false)\n return {\n data: cached,\n error: undefined,\n }\n }\n }\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onQueryError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onQuerySuccess?.(data)\n\n if (optionsRef.current?.staleTime && data !== null) {\n IgniterCallerClientCache.set(queryKey, data)\n }\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onQuerySettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onQueryError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onQuerySettled?.(null, typedError)\n } finally {\n setIsFetching(false)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n }\n },\n [callerKey, method, path],\n )\n\n const refetch = useCallback(() => {\n void execute(lastVariablesRef.current)\n }, [execute])\n\n const invalidateQuery = useCallback(\n (data?: TResponse) => {\n const prefix = buildQueryPrefix({ callerKey, method, path })\n invalidate(prefix, data)\n },\n [callerKey, method, path, invalidate],\n )\n\n useEffect(() => {\n register(stableKey, refetch)\n return () => unregister(stableKey, refetch)\n }, [register, unregister, refetch, stableKey])\n\n const initialFetchDoneRef = useRef(false)\n\n useEffect(() => {\n if (optionsRef.current?.enabled === false) return\n if (optionsRef.current?.refetchOnMount === false && initialFetchDoneRef.current) return\n\n initialFetchDoneRef.current = true\n void execute(lastVariablesRef.current)\n }, [stableKey, execute])\n\n useEffect(() => {\n const interval = optionsRef.current?.refetchInterval\n if (!interval) return\n\n const handler = setInterval(() => {\n if (\n optionsRef.current?.refetchIntervalInBackground === false &&\n typeof document !== 'undefined' &&\n document.hidden\n ) {\n return\n }\n void execute(lastVariablesRef.current)\n }, interval)\n\n return () => clearInterval(handler)\n }, [execute])\n\n useEffect(() => {\n if (optionsRef.current?.refetchOnWindowFocus === false) return\n if (typeof window === 'undefined') return\n\n const handler = () => {\n void execute(lastVariablesRef.current)\n }\n window.addEventListener('focus', handler)\n return () => window.removeEventListener('focus', handler)\n }, [execute])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isFetching,\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n refetch,\n invalidate: invalidateQuery,\n execute,\n }\n }\n}\n\nexport function createUseMutate<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n body?: unknown\n },\n>(\n params: UseMutateParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseMutateOptions<TResponse, TVariables>,\n) => IgniterCallerUseMutateResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n 'success',\n )\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({ data: null, error: null })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const mutate = useCallback(\n async (nextVariables?: TVariables) => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeMutateInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onMutationLoading?.(true)\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onMutationError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onMutationSuccess?.(data)\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onMutationSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onMutationError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onMutationSettled?.(null, typedError)\n } finally {\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onMutationLoading?.(false)\n }\n },\n [method, path, buildRequest, getMergedConfig, onError],\n )\n\n const retry = useCallback(() => {\n void mutate(lastVariablesRef.current)\n }, [mutate])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n mutate,\n retry,\n }\n }\n}\n","import type { IgniterCallerManager } from '../../core/manager'\nimport type { IgniterCallerClientContextValue } from '../interfaces/context'\nimport type { IgniterCallerClientRequestInput } from './hooks.builder'\nimport {\n createUseMutate,\n createUseQuery,\n} from './hooks.builder'\nimport type {\n IgniterCallerClient,\n IgniterCallerClientConfigApi,\n} from '../interfaces/client'\nimport { buildQueryPrefix } from '../utils/query-key'\n\nfunction applyRequestInput(\n builder: { params: (params: Record<string, string | number | boolean>) => any; headers: (headers: Record<string, string>) => any; body: (body: unknown) => any },\n input: IgniterCallerClientRequestInput,\n) {\n if (input.query && Object.keys(input.query).length > 0) {\n builder.params(input.query)\n }\n\n if (input.headers && Object.keys(input.headers).length > 0) {\n builder.headers(input.headers)\n }\n\n if (input.body !== undefined) {\n builder.body(input.body)\n }\n}\n\nexport function createIgniterCallerClient<\n TCaller extends IgniterCallerManager<any>,\n TCallers extends Record<string, IgniterCallerManager<any>>,\n>(\n context: IgniterCallerClientContextValue<TCallers>,\n callerKey: keyof TCallers,\n): IgniterCallerClient<TCaller> {\n const caller = context.callers[callerKey] as unknown as TCaller\n\n const getMergedConfig = () => context.getMergedConfig(callerKey)\n\n const buildRequest = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n ) => {\n if (!path) {\n throw new Error(\n 'IgniterCallerClient: path is required when using hooks with Caller client.',\n )\n }\n\n const methodKey = method.toLowerCase() as\n | 'get'\n | 'post'\n | 'put'\n | 'patch'\n | 'delete'\n | 'head'\n\n const builder = (caller as any)[methodKey](path)\n applyRequestInput(builder, input)\n return builder as { execute: () => Promise<any> }\n }\n\n const invalidate = (pathOrPaths: string | string[], data?: unknown) => {\n const paths = Array.isArray(pathOrPaths) ? pathOrPaths : [pathOrPaths]\n const prefixes = paths.map((path) =>\n buildQueryPrefix({\n callerKey: String(callerKey),\n method: 'GET',\n path,\n }),\n )\n context.invalidate(prefixes, data)\n }\n\n const config: IgniterCallerClientConfigApi = {\n set: (key, value) => context.setConfig(callerKey, key, value),\n get: (key) => context.getConfig(callerKey, key),\n reset: () => context.setConfigBatch(callerKey, {}),\n }\n\n const get = (path?: string) => {\n const builder = caller.get(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'GET',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const head = (path?: string) => {\n const builder = caller.head(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'HEAD',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const post = (path?: string) => {\n const builder = caller.post(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'POST',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const put = (path?: string) => {\n const builder = caller.put(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PUT',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const patch = (path?: string) => {\n const builder = caller.patch(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PATCH',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const del = (path?: string) => {\n const builder = caller.delete(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'DELETE',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n return {\n raw: caller,\n config,\n invalidate: invalidate as any,\n get: get as any,\n post: post as any,\n put: put as any,\n patch: patch as any,\n delete: del as any,\n head: head as any,\n }\n}\n","'use client'\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type {\n IgniterCallerClientContextValue,\n IgniterCallerClientConfigs,\n IgniterCallerClientMap,\n IgniterCallerClientRefetchFn,\n} from '../interfaces/context'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientConfigKey,\n IgniterCallerClientConfigValue,\n} from '../interfaces/config'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { createIgniterCallerClient } from './client.builder'\nimport type { IgniterCallerClient } from '../interfaces/client'\n\nconst IgniterCallerClientContext = createContext<\n IgniterCallerClientContextValue<any> | undefined\n>(undefined)\n\nexport interface IgniterCallerProviderProps<\n TCallers extends IgniterCallerClientMap,\n> extends PropsWithChildren {\n callers: TCallers\n configs?: IgniterCallerClientConfigs<TCallers>\n hooks?: IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeConfig(\n globalConfig: IgniterCallerClientConfig,\n localConfig?: IgniterCallerClientConfig,\n): IgniterCallerClientConfig {\n return {\n ...globalConfig,\n ...localConfig,\n headers: {\n ...(globalConfig.headers || {}),\n ...(localConfig?.headers || {}),\n },\n cookies: {\n ...(globalConfig.cookies || {}),\n ...(localConfig?.cookies || {}),\n },\n query: {\n ...(globalConfig.query || {}),\n ...(localConfig?.query || {}),\n },\n }\n}\n\nexport function IgniterCallerProvider<\n TCallers extends IgniterCallerClientMap,\n>(props: IgniterCallerProviderProps<TCallers>) {\n const { callers, configs, hooks, onError, children } = props\n const [configState, setConfigState] = useState<\n IgniterCallerClientConfigs<TCallers>\n >(configs || {})\n const [listeners] = useState(\n () => new Map<string, Set<IgniterCallerClientRefetchFn>>(),\n )\n\n const globalConfig = useMemo<IgniterCallerClientConfig>(\n () => hooks || {},\n [hooks],\n )\n\n const register = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key) || new Set()\n current.add(refetch)\n listeners.set(key, current)\n },\n [listeners],\n )\n\n const unregister = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key)\n if (!current) return\n current.delete(refetch)\n if (current.size === 0) {\n listeners.delete(key)\n }\n },\n [listeners],\n )\n\n const invalidate = useCallback(\n (keys: string | string[], data?: unknown) => {\n const keysArray = Array.isArray(keys) ? keys : [keys]\n\n keysArray.forEach((prefix) => {\n if (data !== undefined) {\n IgniterCallerClientCache.replacePrefix(prefix, data)\n } else {\n IgniterCallerClientCache.clearPrefix(prefix)\n }\n\n listeners.forEach((refetchFns, registeredKey) => {\n if (registeredKey.startsWith(prefix)) {\n refetchFns.forEach((refetch) => refetch(true))\n }\n })\n })\n },\n [listeners],\n )\n\n const setConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n value: IgniterCallerClientConfigValue<TKey>,\n ) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n [key]: value,\n },\n }))\n },\n [],\n )\n\n const setConfigBatch = useCallback(\n (callerKey: keyof TCallers, config: Partial<IgniterCallerClientConfig>) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n ...config,\n },\n }))\n },\n [],\n )\n\n const configStateRef = useMemo(() => ({ current: configState }), [])\n configStateRef.current = configState\n\n const globalConfigRef = useMemo(() => ({ current: globalConfig }), [])\n globalConfigRef.current = globalConfig\n\n const getMergedConfig = useCallback(\n (callerKey: keyof TCallers) =>\n mergeConfig(globalConfigRef.current, configStateRef.current[callerKey]),\n [globalConfigRef, configStateRef],\n )\n\n const getConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n ) => getMergedConfig(callerKey)[key],\n [getMergedConfig],\n )\n\n const value = useMemo<IgniterCallerClientContextValue<TCallers>>(\n () => ({\n callers,\n configs: configState,\n globalConfig,\n setConfig,\n setConfigBatch,\n getConfig,\n getMergedConfig,\n register,\n unregister,\n invalidate,\n listeners,\n onError,\n }),\n [\n callers,\n getConfig,\n getMergedConfig,\n invalidate,\n listeners,\n onError,\n register,\n setConfig,\n setConfigBatch,\n unregister,\n ],\n )\n\n return (\n <IgniterCallerClientContext.Provider value={value}>\n {children}\n </IgniterCallerClientContext.Provider>\n )\n}\n\nexport function useIgniterCallerContext<\n TCallers extends IgniterCallerClientMap,\n>() {\n const context = useContext(\n IgniterCallerClientContext,\n ) as IgniterCallerClientContextValue<TCallers> | undefined\n\n if (!context) {\n throw new Error(\n 'IgniterCallerProvider is missing. Wrap your app with <IgniterCallerProvider>.',\n )\n }\n\n return context\n}\n\nexport function useIgniterCaller<TCallers extends IgniterCallerClientMap>() {\n const context = useIgniterCallerContext<TCallers>()\n\n return <TKey extends keyof TCallers>(\n callerKey: TKey,\n ): IgniterCallerClient<TCallers[TKey]> =>\n createIgniterCallerClient<TCallers[TKey], TCallers>(context, callerKey)\n}\n"]}
|
package/dist/client/index.mjs
CHANGED
|
@@ -244,7 +244,7 @@ function createUseQuery(params) {
|
|
|
244
244
|
mergedConfig.onQueryLoading?.(false);
|
|
245
245
|
}
|
|
246
246
|
},
|
|
247
|
-
[callerKey, method, path
|
|
247
|
+
[callerKey, method, path]
|
|
248
248
|
);
|
|
249
249
|
const refetch = useCallback(() => {
|
|
250
250
|
void execute(lastVariablesRef.current);
|
|
@@ -621,9 +621,13 @@ function IgniterCallerProvider(props) {
|
|
|
621
621
|
},
|
|
622
622
|
[]
|
|
623
623
|
);
|
|
624
|
+
const configStateRef = useMemo(() => ({ current: configState }), []);
|
|
625
|
+
configStateRef.current = configState;
|
|
626
|
+
const globalConfigRef = useMemo(() => ({ current: globalConfig }), []);
|
|
627
|
+
globalConfigRef.current = globalConfig;
|
|
624
628
|
const getMergedConfig = useCallback(
|
|
625
|
-
(callerKey) => mergeConfig(
|
|
626
|
-
[
|
|
629
|
+
(callerKey) => mergeConfig(globalConfigRef.current, configStateRef.current[callerKey]),
|
|
630
|
+
[globalConfigRef, configStateRef]
|
|
627
631
|
);
|
|
628
632
|
const getConfig = useCallback(
|
|
629
633
|
(callerKey, key) => getMergedConfig(callerKey)[key],
|
|
@@ -646,8 +650,6 @@ function IgniterCallerProvider(props) {
|
|
|
646
650
|
}),
|
|
647
651
|
[
|
|
648
652
|
callers,
|
|
649
|
-
configState,
|
|
650
|
-
globalConfig,
|
|
651
653
|
getConfig,
|
|
652
654
|
getMergedConfig,
|
|
653
655
|
invalidate,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/utils/cache.ts","../../src/client/utils/query-key.ts","../../src/client/utils/cookies.ts","../../src/client/builders/hooks.builder.tsx","../../src/client/builders/client.builder.ts","../../src/client/builders/provider.builder.tsx"],"names":["useState","useMemo","useCallback","value"],"mappings":"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","file":"index.mjs","sourcesContent":["export class IgniterCallerClientCache {\n private static cache = new Map<\n string,\n { data: unknown; timestamp: number }\n >()\n\n static get<T>(key: string, staleTime?: number): T | undefined {\n const entry = IgniterCallerClientCache.cache.get(key)\n if (!entry) return undefined\n\n if (staleTime && Date.now() - entry.timestamp > staleTime) {\n IgniterCallerClientCache.cache.delete(key)\n return undefined\n }\n\n return entry.data as T\n }\n\n static set(key: string, data: unknown): void {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: Date.now(),\n })\n }\n\n static replacePrefix(prefix: string, data: unknown): void {\n for (const [key, entry] of IgniterCallerClientCache.cache.entries()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.set(key, {\n data,\n timestamp: entry.timestamp,\n })\n }\n }\n }\n\n static clearPrefix(prefix: string): void {\n for (const key of IgniterCallerClientCache.cache.keys()) {\n if (key.startsWith(prefix)) {\n IgniterCallerClientCache.cache.delete(key)\n }\n }\n }\n}\n","import type { IgniterCallerClientQuery } from '../interfaces/config'\n\nconst EMPTY_KEY = '{}'\n\nfunction stableStringify(value: unknown): string {\n if (value === null || value === undefined) return EMPTY_KEY\n if (typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) {\n return `[${value.map((item) => stableStringify(item)).join(',')}]`\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([a], [b]) => a.localeCompare(b),\n )\n\n return `{${entries\n .map(([key, val]) => `${JSON.stringify(key)}:${stableStringify(val)}`)\n .join(',')}}`\n}\n\nexport function buildQueryKey(params: {\n callerKey: string\n method: string\n path: string\n query?: IgniterCallerClientQuery\n params?: Record<string, string | number | boolean>\n}): string {\n const { callerKey, method, path, query, params: pathParams } = params\n const payload = {\n params: pathParams || {},\n query: query || {},\n }\n\n return `${callerKey}::${method.toUpperCase()}::${path}::${stableStringify(payload)}`\n}\n\nexport function buildQueryPrefix(params: {\n callerKey: string\n method: string\n path: string\n}): string {\n const { callerKey, method, path } = params\n return `${callerKey}::${method.toUpperCase()}::${path}`\n}\n","import type { IgniterCallerClientCookies } from '../interfaces/config'\n\nexport function buildCookieHeader(\n cookies?: IgniterCallerClientCookies,\n): string | undefined {\n if (!cookies || Object.keys(cookies).length === 0) return undefined\n\n return Object.entries(cookies)\n .map(([key, value]) => `${key}=${value}`)\n .join('; ')\n}\n","'use client'\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type { IgniterCallerApiResponse } from '../../types/response'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientQuery,\n} from '../interfaces/config'\nimport type { IgniterCallerClientRefetchFn } from '../interfaces/context'\nimport type {\n IgniterCallerUseMutateOptions,\n IgniterCallerUseMutateResult,\n IgniterCallerUseQueryOptions,\n IgniterCallerUseQueryResult,\n} from '../interfaces/hooks'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { buildQueryKey, buildQueryPrefix } from '../utils/query-key'\nimport { buildCookieHeader } from '../utils/cookies'\n\nexport interface IgniterCallerClientRequestInput {\n params?: Record<string, string | number | boolean>\n query?: Record<string, string | number | boolean>\n headers?: Record<string, string>\n cookies?: Record<string, string>\n body?: unknown\n}\n\nexport type IgniterCallerClientRequestFactory<TResponse> = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n) => {\n execute: () => Promise<IgniterCallerApiResponse<TResponse>>\n}\n\ninterface UseQueryParams<TResponse, TVariables> {\n callerKey: string\n method: 'GET' | 'HEAD'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n register: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n unregister: (key: string, refetch: IgniterCallerClientRefetchFn) => void\n invalidate: (keys: string | string[], data?: unknown) => void\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\ninterface UseMutateParams<TResponse, TVariables> {\n callerKey: string\n method: 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n path: string\n buildRequest: IgniterCallerClientRequestFactory<TResponse>\n getMergedConfig: () => IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeQueryInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const headers = {\n ...(config.headers || {}),\n ...(options?.headers || {}),\n ...(variables?.headers || {}),\n }\n const cookies = {\n ...(config.cookies || {}),\n ...(options?.cookies || {}),\n ...(variables?.cookies || {}),\n }\n const query = {\n ...(config.query || {}),\n ...(options?.query || {}),\n ...(variables?.query || {}),\n ...(options?.params || {}),\n ...(variables?.params || {}),\n }\n\n const cookieHeader = buildCookieHeader(cookies)\n if (cookieHeader && !headers.Cookie) {\n headers.Cookie = cookieHeader\n }\n\n return {\n headers,\n cookies,\n query,\n params: variables?.params || options?.params,\n }\n}\n\nfunction mergeMutateInput(\n config: IgniterCallerClientConfig,\n options?: IgniterCallerClientRequestInput,\n variables?: IgniterCallerClientRequestInput,\n): IgniterCallerClientRequestInput {\n const merged = mergeQueryInput(config, options, variables)\n return {\n ...merged,\n body: variables?.body ?? options?.body,\n }\n}\n\nexport function createUseQuery<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n },\n>(\n params: UseQueryParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseQueryOptions<TResponse, TVariables>,\n) => IgniterCallerUseQueryResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n register,\n unregister,\n invalidate,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n options?.initialData ? 'success' : 'loading',\n )\n const [isFetching, setIsFetching] = useState(false)\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({\n data: options?.initialData ?? null,\n error: null,\n })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const stableKey = useMemo(() => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n options as IgniterCallerClientRequestInput | undefined,\n lastVariablesRef.current as IgniterCallerClientRequestInput | undefined,\n )\n\n return buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n }, [\n callerKey,\n method,\n path,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.params || {}),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(options?.query || {}),\n ])\n\n const execute = useCallback(\n async (nextVariables?: TVariables) => {\n if (optionsRef.current?.enabled === false) return\n\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeQueryInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n const queryKey = buildQueryKey({\n callerKey,\n method,\n path,\n query: mergedInput.query,\n params: mergedInput.params,\n })\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setIsFetching(true)\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onQueryLoading?.(true)\n\n if (optionsRef.current?.staleTime) {\n const cached = IgniterCallerClientCache.get<TResponse>(\n queryKey,\n optionsRef.current.staleTime,\n )\n if (cached !== undefined) {\n setResponse({ data: cached, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(cached)\n mergedConfig.onQuerySuccess?.(cached)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n setIsFetching(false)\n return {\n data: cached,\n error: undefined,\n }\n }\n }\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onQueryError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onQuerySuccess?.(data)\n\n if (optionsRef.current?.staleTime && data !== null) {\n IgniterCallerClientCache.set(queryKey, data)\n }\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onQuerySettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onQueryError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onQuerySettled?.(null, typedError)\n } finally {\n setIsFetching(false)\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onQueryLoading?.(false)\n }\n },\n [callerKey, method, path, buildRequest, getMergedConfig, onError],\n )\n\n const refetch = useCallback(() => {\n void execute(lastVariablesRef.current)\n }, [execute])\n\n const invalidateQuery = useCallback(\n (data?: TResponse) => {\n const prefix = buildQueryPrefix({ callerKey, method, path })\n invalidate(prefix, data)\n },\n [callerKey, method, path, invalidate],\n )\n\n useEffect(() => {\n register(stableKey, refetch)\n return () => unregister(stableKey, refetch)\n }, [register, unregister, refetch, stableKey])\n\n const initialFetchDoneRef = useRef(false)\n\n useEffect(() => {\n if (optionsRef.current?.enabled === false) return\n if (optionsRef.current?.refetchOnMount === false && initialFetchDoneRef.current) return\n\n initialFetchDoneRef.current = true\n void execute(lastVariablesRef.current)\n }, [stableKey, execute])\n\n useEffect(() => {\n const interval = optionsRef.current?.refetchInterval\n if (!interval) return\n\n const handler = setInterval(() => {\n if (\n optionsRef.current?.refetchIntervalInBackground === false &&\n typeof document !== 'undefined' &&\n document.hidden\n ) {\n return\n }\n void execute(lastVariablesRef.current)\n }, interval)\n\n return () => clearInterval(handler)\n }, [execute])\n\n useEffect(() => {\n if (optionsRef.current?.refetchOnWindowFocus === false) return\n if (typeof window === 'undefined') return\n\n const handler = () => {\n void execute(lastVariablesRef.current)\n }\n window.addEventListener('focus', handler)\n return () => window.removeEventListener('focus', handler)\n }, [execute])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isFetching,\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n refetch,\n invalidate: invalidateQuery,\n execute,\n }\n }\n}\n\nexport function createUseMutate<\n TResponse,\n TVariables extends {\n params?: Record<string, string | number | boolean>\n query?: IgniterCallerClientQuery\n body?: unknown\n },\n>(\n params: UseMutateParams<TResponse, TVariables>,\n): (\n options?: IgniterCallerUseMutateOptions<TResponse, TVariables>,\n) => IgniterCallerUseMutateResult<TResponse, TVariables> {\n const {\n callerKey,\n method,\n path,\n buildRequest,\n getMergedConfig,\n onError,\n } = params\n\n return (options) => {\n const [status, setStatus] = useState<'loading' | 'error' | 'success'>(\n 'success',\n )\n const [response, setResponse] = useState<{\n data: TResponse | null\n error: IgniterError | null\n }>({ data: null, error: null })\n const [variables, setVariables] = useState<TVariables | undefined>(\n undefined,\n )\n\n const optionsRef = useRef(options)\n optionsRef.current = options\n const lastVariablesRef = useRef<TVariables | undefined>(undefined)\n\n const mutate = useCallback(\n async (nextVariables?: TVariables) => {\n const mergedConfig = getMergedConfig()\n const mergedInput = mergeMutateInput(\n mergedConfig,\n optionsRef.current as IgniterCallerClientRequestInput | undefined,\n nextVariables as IgniterCallerClientRequestInput | undefined,\n )\n\n lastVariablesRef.current = nextVariables\n setVariables(nextVariables)\n\n setStatus('loading')\n optionsRef.current?.onLoading?.(true)\n mergedConfig.onMutationLoading?.(true)\n\n try {\n const result = await buildRequest(method, path, mergedInput).execute()\n optionsRef.current?.onRequest?.(result)\n if (result.error) {\n setResponse({ data: null, error: result.error })\n setStatus('error')\n optionsRef.current?.onError?.(result.error)\n mergedConfig.onMutationError?.(result.error)\n onError?.(result.error)\n } else {\n const data = (result.data ?? null) as TResponse | null\n setResponse({ data, error: null })\n setStatus('success')\n optionsRef.current?.onSuccess?.(data as TResponse)\n mergedConfig.onMutationSuccess?.(data)\n }\n\n optionsRef.current?.onSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n mergedConfig.onMutationSettled?.(\n result.data ?? null,\n result.error ?? null,\n )\n\n return result\n } catch (error) {\n const typedError = error as IgniterError\n setResponse({ data: null, error: typedError })\n setStatus('error')\n optionsRef.current?.onError?.(typedError)\n mergedConfig.onMutationError?.(typedError)\n onError?.(typedError)\n optionsRef.current?.onSettled?.(null, typedError)\n mergedConfig.onMutationSettled?.(null, typedError)\n } finally {\n optionsRef.current?.onLoading?.(false)\n mergedConfig.onMutationLoading?.(false)\n }\n },\n [method, path, buildRequest, getMergedConfig, onError],\n )\n\n const retry = useCallback(() => {\n void mutate(lastVariablesRef.current)\n }, [mutate])\n\n return {\n data: response.data,\n error: response.error,\n variables,\n isLoading: status === 'loading',\n isSuccess: status === 'success',\n isError: status === 'error',\n status,\n mutate,\n retry,\n }\n }\n}\n","import type { IgniterCallerManager } from '../../core/manager'\nimport type { IgniterCallerClientContextValue } from '../interfaces/context'\nimport type { IgniterCallerClientRequestInput } from './hooks.builder'\nimport {\n createUseMutate,\n createUseQuery,\n} from './hooks.builder'\nimport type {\n IgniterCallerClient,\n IgniterCallerClientConfigApi,\n} from '../interfaces/client'\nimport { buildQueryPrefix } from '../utils/query-key'\n\nfunction applyRequestInput(\n builder: { params: (params: Record<string, string | number | boolean>) => any; headers: (headers: Record<string, string>) => any; body: (body: unknown) => any },\n input: IgniterCallerClientRequestInput,\n) {\n if (input.query && Object.keys(input.query).length > 0) {\n builder.params(input.query)\n }\n\n if (input.headers && Object.keys(input.headers).length > 0) {\n builder.headers(input.headers)\n }\n\n if (input.body !== undefined) {\n builder.body(input.body)\n }\n}\n\nexport function createIgniterCallerClient<\n TCaller extends IgniterCallerManager<any>,\n TCallers extends Record<string, IgniterCallerManager<any>>,\n>(\n context: IgniterCallerClientContextValue<TCallers>,\n callerKey: keyof TCallers,\n): IgniterCallerClient<TCaller> {\n const caller = context.callers[callerKey] as unknown as TCaller\n\n const getMergedConfig = () => context.getMergedConfig(callerKey)\n\n const buildRequest = (\n method: string,\n path: string,\n input: IgniterCallerClientRequestInput,\n ) => {\n if (!path) {\n throw new Error(\n 'IgniterCallerClient: path is required when using hooks with Caller client.',\n )\n }\n\n const methodKey = method.toLowerCase() as\n | 'get'\n | 'post'\n | 'put'\n | 'patch'\n | 'delete'\n | 'head'\n\n const builder = (caller as any)[methodKey](path)\n applyRequestInput(builder, input)\n return builder as { execute: () => Promise<any> }\n }\n\n const invalidate = (pathOrPaths: string | string[], data?: unknown) => {\n const paths = Array.isArray(pathOrPaths) ? pathOrPaths : [pathOrPaths]\n const prefixes = paths.map((path) =>\n buildQueryPrefix({\n callerKey: String(callerKey),\n method: 'GET',\n path,\n }),\n )\n context.invalidate(prefixes, data)\n }\n\n const config: IgniterCallerClientConfigApi = {\n set: (key, value) => context.setConfig(callerKey, key, value),\n get: (key) => context.getConfig(callerKey, key),\n reset: () => context.setConfigBatch(callerKey, {}),\n }\n\n const get = (path?: string) => {\n const builder = caller.get(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'GET',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const head = (path?: string) => {\n const builder = caller.head(path as any)\n const useQuery = createUseQuery({\n callerKey: String(callerKey),\n method: 'HEAD',\n path: path || '',\n buildRequest,\n register: context.register,\n unregister: context.unregister,\n invalidate: context.invalidate,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useQuery = useQuery\n return builder as any\n }\n\n const post = (path?: string) => {\n const builder = caller.post(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'POST',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const put = (path?: string) => {\n const builder = caller.put(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PUT',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const patch = (path?: string) => {\n const builder = caller.patch(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'PATCH',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n const del = (path?: string) => {\n const builder = caller.delete(path as any)\n const useMutate = createUseMutate({\n callerKey: String(callerKey),\n method: 'DELETE',\n path: path || '',\n buildRequest,\n getMergedConfig,\n onError: context.onError,\n })\n ;(builder as any).useMutate = useMutate\n return builder as any\n }\n\n return {\n raw: caller,\n config,\n invalidate: invalidate as any,\n get: get as any,\n post: post as any,\n put: put as any,\n patch: patch as any,\n delete: del as any,\n head: head as any,\n }\n}\n","'use client'\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport type { IgniterError } from '@igniter-js/common'\nimport type {\n IgniterCallerClientContextValue,\n IgniterCallerClientConfigs,\n IgniterCallerClientMap,\n IgniterCallerClientRefetchFn,\n} from '../interfaces/context'\nimport type {\n IgniterCallerClientConfig,\n IgniterCallerClientConfigKey,\n IgniterCallerClientConfigValue,\n} from '../interfaces/config'\nimport { IgniterCallerClientCache } from '../utils/cache'\nimport { createIgniterCallerClient } from './client.builder'\n\nconst IgniterCallerClientContext = createContext<\n IgniterCallerClientContextValue<any> | undefined\n>(undefined)\n\nexport interface IgniterCallerProviderProps<\n TCallers extends IgniterCallerClientMap,\n> extends PropsWithChildren {\n callers: TCallers\n configs?: IgniterCallerClientConfigs<TCallers>\n hooks?: IgniterCallerClientConfig\n onError?: (error: IgniterError) => void\n}\n\nfunction mergeConfig(\n globalConfig: IgniterCallerClientConfig,\n localConfig?: IgniterCallerClientConfig,\n): IgniterCallerClientConfig {\n return {\n ...globalConfig,\n ...localConfig,\n headers: {\n ...(globalConfig.headers || {}),\n ...(localConfig?.headers || {}),\n },\n cookies: {\n ...(globalConfig.cookies || {}),\n ...(localConfig?.cookies || {}),\n },\n query: {\n ...(globalConfig.query || {}),\n ...(localConfig?.query || {}),\n },\n }\n}\n\nexport function IgniterCallerProvider<\n TCallers extends IgniterCallerClientMap,\n>(props: IgniterCallerProviderProps<TCallers>) {\n const { callers, configs, hooks, onError, children } = props\n const [configState, setConfigState] = useState<\n IgniterCallerClientConfigs<TCallers>\n >(configs || {})\n const [listeners] = useState(\n () => new Map<string, Set<IgniterCallerClientRefetchFn>>(),\n )\n\n const globalConfig = useMemo<IgniterCallerClientConfig>(\n () => hooks || {},\n [hooks],\n )\n\n const register = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key) || new Set()\n current.add(refetch)\n listeners.set(key, current)\n },\n [listeners],\n )\n\n const unregister = useCallback(\n (key: string, refetch: IgniterCallerClientRefetchFn) => {\n const current = listeners.get(key)\n if (!current) return\n current.delete(refetch)\n if (current.size === 0) {\n listeners.delete(key)\n }\n },\n [listeners],\n )\n\n const invalidate = useCallback(\n (keys: string | string[], data?: unknown) => {\n const keysArray = Array.isArray(keys) ? keys : [keys]\n\n keysArray.forEach((prefix) => {\n if (data !== undefined) {\n IgniterCallerClientCache.replacePrefix(prefix, data)\n } else {\n IgniterCallerClientCache.clearPrefix(prefix)\n }\n\n listeners.forEach((refetchFns, registeredKey) => {\n if (registeredKey.startsWith(prefix)) {\n refetchFns.forEach((refetch) => refetch(true))\n }\n })\n })\n },\n [listeners],\n )\n\n const setConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n value: IgniterCallerClientConfigValue<TKey>,\n ) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n [key]: value,\n },\n }))\n },\n [],\n )\n\n const setConfigBatch = useCallback(\n (callerKey: keyof TCallers, config: Partial<IgniterCallerClientConfig>) => {\n setConfigState((prev) => ({\n ...prev,\n [callerKey]: {\n ...(prev[callerKey] || {}),\n ...config,\n },\n }))\n },\n [],\n )\n\n const getMergedConfig = useCallback(\n (callerKey: keyof TCallers) =>\n mergeConfig(globalConfig, configState[callerKey]),\n [globalConfig, configState],\n )\n\n const getConfig = useCallback(\n <TKey extends IgniterCallerClientConfigKey>(\n callerKey: keyof TCallers,\n key: TKey,\n ) => getMergedConfig(callerKey)[key],\n [getMergedConfig],\n )\n\n const value = useMemo<IgniterCallerClientContextValue<TCallers>>(\n () => ({\n callers,\n configs: configState,\n globalConfig,\n setConfig,\n setConfigBatch,\n getConfig,\n getMergedConfig,\n register,\n unregister,\n invalidate,\n listeners,\n onError,\n }),\n [\n callers,\n configState,\n globalConfig,\n getConfig,\n getMergedConfig,\n invalidate,\n listeners,\n onError,\n register,\n setConfig,\n setConfigBatch,\n unregister,\n ],\n )\n\n return (\n <IgniterCallerClientContext.Provider value={value}>\n {children}\n </IgniterCallerClientContext.Provider>\n )\n}\n\nexport function useIgniterCallerContext<\n TCallers extends IgniterCallerClientMap,\n>() {\n const context = useContext(\n IgniterCallerClientContext,\n ) as IgniterCallerClientContextValue<TCallers> | undefined\n\n if (!context) {\n throw new Error(\n 'IgniterCallerProvider is missing. Wrap your app with <IgniterCallerProvider>.',\n )\n }\n\n return context\n}\n\nexport function useIgniterCaller<TCallers extends IgniterCallerClientMap>() {\n const context = useIgniterCallerContext<TCallers>()\n\n return <TKey extends keyof TCallers>(callerKey: TKey) =>\n createIgniterCallerClient(context, callerKey)\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/client/utils/cache.ts","../../src/client/utils/query-key.ts","../../src/client/utils/cookies.ts","../../src/client/builders/hooks.builder.tsx","../../src/client/builders/client.builder.ts","../../src/client/builders/provider.builder.tsx"],"names":["useState","useMemo","useCallback","value"],"mappings":"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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],\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