@spoosh/react 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -22,8 +22,9 @@ type BaseReadOptions = TagOptions & {
22
22
  *
23
23
  * @template TData - The response data type
24
24
  * @template TError - The error type
25
+ * @template TPluginResult - Plugin-provided result fields
25
26
  */
26
- type BaseReadResult<TData, TError> = {
27
+ type BaseReadResult<TData, TError, TPluginResult = Record<string, unknown>> = {
27
28
  /** True during the initial load (no data yet) */
28
29
  loading: boolean;
29
30
  /** True during any fetch operation */
@@ -32,6 +33,8 @@ type BaseReadResult<TData, TError> = {
32
33
  data: TData | undefined;
33
34
  /** Error from the last failed request */
34
35
  error: TError | undefined;
36
+ /** Plugin-provided metadata */
37
+ meta: TPluginResult;
35
38
  /** Abort the current fetch operation */
36
39
  abort: () => void;
37
40
  /** Manually trigger a refetch */
@@ -43,8 +46,9 @@ type BaseReadResult<TData, TError> = {
43
46
  * @template TData - The response data type
44
47
  * @template TError - The error type
45
48
  * @template TOptions - The trigger options type
49
+ * @template TPluginResult - Plugin-provided result fields
46
50
  */
47
- type BaseWriteResult<TData, TError, TOptions> = {
51
+ type BaseWriteResult<TData, TError, TOptions, TPluginResult = Record<string, unknown>> = {
48
52
  /** Execute the mutation with optional options */
49
53
  trigger: (options?: TOptions) => Promise<SpooshResponse<TData, TError>>;
50
54
  /** True while the mutation is in progress */
@@ -53,6 +57,8 @@ type BaseWriteResult<TData, TError, TOptions> = {
53
57
  data: TData | undefined;
54
58
  /** Error from the last failed request */
55
59
  error: TError | undefined;
60
+ /** Plugin-provided metadata */
61
+ meta: TPluginResult;
56
62
  /** Reset the state to initial values */
57
63
  reset: () => void;
58
64
  /** Abort the current mutation */
@@ -199,8 +205,9 @@ type BaseInfiniteReadOptions<TData, TItem, TRequest = AnyInfiniteRequestOptions>
199
205
  * @template TData - The response data type for each page
200
206
  * @template TError - The error type
201
207
  * @template TItem - The item type after merging all responses
208
+ * @template TPluginResult - Plugin-provided result fields
202
209
  */
203
- type BaseInfiniteReadResult<TData, TError, TItem> = {
210
+ type BaseInfiniteReadResult<TData, TError, TItem, TPluginResult = Record<string, unknown>> = {
204
211
  /** Merged items from all fetched responses */
205
212
  data: TItem[] | undefined;
206
213
  /** Array of all raw response data */
@@ -217,6 +224,8 @@ type BaseInfiniteReadResult<TData, TError, TItem> = {
217
224
  canFetchNext: boolean;
218
225
  /** Whether there's a previous page available to fetch */
219
226
  canFetchPrev: boolean;
227
+ /** Plugin-provided metadata */
228
+ meta: TPluginResult;
220
229
  /** Fetch the next page */
221
230
  fetchNext: () => Promise<void>;
222
231
  /** Fetch the previous page */
@@ -240,8 +249,8 @@ type ResolvedWriteOptions<TSchema, TPlugins extends PluginArray, TMethod, TDefau
240
249
  type UseReadFn<TDefaultError, TSchema, TPlugins extends PluginArray> = <TReadFn extends (api: ReadApiClient<TSchema, TDefaultError>) => Promise<{
241
250
  data?: unknown;
242
251
  error?: unknown;
243
- }>, TReadOpts extends BaseReadOptions & ResolvedReadOptions<TSchema, TPlugins, TReadFn, TDefaultError> = BaseReadOptions & ResolvedReadOptions<TSchema, TPlugins, TReadFn, TDefaultError>>(readFn: TReadFn, readOptions?: TReadOpts) => BaseReadResult<ExtractMethodData<TReadFn>, InferError<ExtractMethodError<TReadFn>, TDefaultError>> & ResponseInputFields<ExtractResponseQuery<TReadFn>, ExtractResponseBody<TReadFn>, ExtractResponseFormData<TReadFn>, ExtractResponseParamNames<TReadFn>> & ResolveResultTypes<MergePluginResults<TPlugins>["read"], TReadOpts>;
244
- type UseWriteFn<TDefaultError, TSchema, TPlugins extends PluginArray> = <TMethod extends (...args: never[]) => Promise<SpooshResponse<unknown, unknown>>, TWriteOpts extends (TMethod extends (options: infer O) => unknown ? O : object) & ResolvedWriteOptions<TSchema, TPlugins, TMethod, TDefaultError> = (TMethod extends (options: infer O) => unknown ? O : object) & ResolvedWriteOptions<TSchema, TPlugins, TMethod, TDefaultError>>(writeFn: (api: WriteApiClient<TSchema, TDefaultError>) => TMethod) => BaseWriteResult<ExtractMethodData<TMethod>, InferError<ExtractMethodError<TMethod>, TDefaultError>, TWriteOpts> & WriteResponseInputFields<ExtractResponseQuery<TMethod>, ExtractResponseBody<TMethod>, ExtractResponseFormData<TMethod>, ExtractResponseParamNames<TMethod>> & ResolveResultTypes<MergePluginResults<TPlugins>["write"], TWriteOpts>;
252
+ }>, TReadOpts extends BaseReadOptions & ResolvedReadOptions<TSchema, TPlugins, TReadFn, TDefaultError> = BaseReadOptions & ResolvedReadOptions<TSchema, TPlugins, TReadFn, TDefaultError>>(readFn: TReadFn, readOptions?: TReadOpts) => BaseReadResult<ExtractMethodData<TReadFn>, InferError<ExtractMethodError<TReadFn>, TDefaultError>, ResolveResultTypes<MergePluginResults<TPlugins>["read"], TReadOpts>> & ResponseInputFields<ExtractResponseQuery<TReadFn>, ExtractResponseBody<TReadFn>, ExtractResponseFormData<TReadFn>, ExtractResponseParamNames<TReadFn>>;
253
+ type UseWriteFn<TDefaultError, TSchema, TPlugins extends PluginArray> = <TMethod extends (...args: never[]) => Promise<SpooshResponse<unknown, unknown>>, TWriteOpts extends (TMethod extends (options: infer O) => unknown ? O : object) & ResolvedWriteOptions<TSchema, TPlugins, TMethod, TDefaultError> = (TMethod extends (options: infer O) => unknown ? O : object) & ResolvedWriteOptions<TSchema, TPlugins, TMethod, TDefaultError>>(writeFn: (api: WriteApiClient<TSchema, TDefaultError>) => TMethod) => BaseWriteResult<ExtractMethodData<TMethod>, InferError<ExtractMethodError<TMethod>, TDefaultError>, TWriteOpts, ResolveResultTypes<MergePluginResults<TPlugins>["write"], TWriteOpts>> & WriteResponseInputFields<ExtractResponseQuery<TMethod>, ExtractResponseBody<TMethod>, ExtractResponseFormData<TMethod>, ExtractResponseParamNames<TMethod>>;
245
254
  type InfiniteReadResolverContext<TSchema, TData, TError, TRequest> = ResolverContext<TSchema, TData, TError, TRequest extends {
246
255
  query: infer Q;
247
256
  } ? Q : never, TRequest extends {
@@ -250,7 +259,7 @@ type InfiniteReadResolverContext<TSchema, TData, TError, TRequest> = ResolverCon
250
259
  params: infer P;
251
260
  } ? P : never, never>;
252
261
  type ResolvedInfiniteReadOptions<TSchema, TPlugins extends PluginArray, TData, TError, TRequest> = _spoosh_core.ResolveTypes<MergePluginOptions<TPlugins>["infiniteRead"], InfiniteReadResolverContext<TSchema, TData, TError, TRequest>>;
253
- type UseInfiniteReadFn<TDefaultError, TSchema, TPlugins extends PluginArray> = <TData, TItem, TError = TDefaultError, TRequest extends AnyInfiniteRequestOptions = AnyInfiniteRequestOptions>(readFn: (api: InfiniteReadApiClient<TSchema, TDefaultError>) => Promise<SpooshResponse<TData, TError>>, readOptions: BaseInfiniteReadOptions<TData, TItem, TRequest> & ResolvedInfiniteReadOptions<TSchema, TPlugins, TData, TError, TRequest>) => BaseInfiniteReadResult<TData, TError, TItem> & MergePluginResults<TPlugins>["read"];
262
+ type UseInfiniteReadFn<TDefaultError, TSchema, TPlugins extends PluginArray> = <TData, TItem, TError = TDefaultError, TRequest extends AnyInfiniteRequestOptions = AnyInfiniteRequestOptions>(readFn: (api: InfiniteReadApiClient<TSchema, TDefaultError>) => Promise<SpooshResponse<TData, TError>>, readOptions: BaseInfiniteReadOptions<TData, TItem, TRequest> & ResolvedInfiniteReadOptions<TSchema, TPlugins, TData, TError, TRequest>) => BaseInfiniteReadResult<TData, TError, TItem, MergePluginResults<TPlugins>["read"]>;
254
263
  /**
255
264
  * Spoosh React hooks interface containing useRead, useWrite, and useInfiniteRead.
256
265
  *
@@ -271,7 +280,7 @@ type SpooshReactHooks<TDefaultError, TSchema, TPlugins extends PluginArray> = {
271
280
  * const { data, loading, error } = useRead((api) => api.posts.$get());
272
281
  *
273
282
  * const { data: post } = useRead(
274
- * (api) => api.posts[postId].$get(),
283
+ * (api) => api.posts(postId).$get(),
275
284
  * { enabled: !!postId }
276
285
  * );
277
286
  * ```
@@ -374,17 +383,17 @@ declare function createUseRead<TSchema, TDefaultError, TPlugins extends readonly
374
383
  error: infer E;
375
384
  }> ? E : unknown] extends [unknown] ? TDefaultError : TReadFn extends (...args: unknown[]) => Promise<{
376
385
  error: infer E;
377
- }> ? E : unknown> & ResponseInputFields<ExtractResponseQuery<TReadFn>, ExtractResponseBody<TReadFn>, ExtractResponseFormData<TReadFn>, ExtractResponseParamNames<TReadFn>> & ResolveResultTypes<((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
386
+ }> ? E : unknown, ResolveResultTypes<((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
378
387
  readResult: infer R;
379
388
  } ? R : object : object : never : never) extends infer T_1 ? T_1 extends (TPlugins[number] extends infer T_2 ? T_2 extends TPlugins[number] ? T_2 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
380
389
  readResult: infer R;
381
- } ? R : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, TReadOpts>;
390
+ } ? R : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, TReadOpts>> & ResponseInputFields<ExtractResponseQuery<TReadFn>, ExtractResponseBody<TReadFn>, ExtractResponseFormData<TReadFn>, ExtractResponseParamNames<TReadFn>>;
382
391
 
383
392
  declare function createUseWrite<TSchema, TDefaultError, TPlugins extends readonly SpooshPlugin<PluginTypeConfig>[]>(options: Omit<SpooshInstanceShape<unknown, TSchema, TDefaultError, TPlugins>, "_types">): <TMethod extends (...args: never[]) => Promise<SpooshResponse<unknown, unknown>>>(writeFn: (api: WriteApiClient<TSchema, TDefaultError>) => TMethod) => BaseWriteResult<ExtractMethodData<TMethod>, [ExtractMethodError<TMethod>] extends [unknown] ? TDefaultError : ExtractMethodError<TMethod>, ExtractMethodOptions<TMethod> & _spoosh_core.ResolveTypes<((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
384
393
  writeOptions: infer W;
385
394
  } ? W : object : object : never : never) extends infer T_1 ? T_1 extends (TPlugins[number] extends infer T_2 ? T_2 extends TPlugins[number] ? T_2 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
386
395
  writeOptions: infer W;
387
- } ? W : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, ExtractMethodData<TMethod>, [ExtractMethodError<TMethod>] extends [unknown] ? TDefaultError : ExtractMethodError<TMethod>, ExtractMethodQuery<TMethod>, ExtractMethodBody<TMethod>, ExtractResponseParamNames<TMethod> extends never ? never : Record<ExtractResponseParamNames<TMethod>, string | number>, ExtractMethodFormData<TMethod>, ExtractMethodUrlEncoded<TMethod>>>> & WriteResponseInputFields<ExtractResponseQuery<TMethod>, ExtractResponseBody<TMethod>, ExtractResponseFormData<TMethod>, ExtractResponseParamNames<TMethod>> & ResolveResultTypes<((TPlugins[number] extends infer T_3 ? T_3 extends TPlugins[number] ? T_3 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
396
+ } ? W : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, ExtractMethodData<TMethod>, [ExtractMethodError<TMethod>] extends [unknown] ? TDefaultError : ExtractMethodError<TMethod>, ExtractMethodQuery<TMethod>, ExtractMethodBody<TMethod>, ExtractResponseParamNames<TMethod> extends never ? never : Record<ExtractResponseParamNames<TMethod>, string | number>, ExtractMethodFormData<TMethod>, ExtractMethodUrlEncoded<TMethod>>>, ResolveResultTypes<((TPlugins[number] extends infer T_3 ? T_3 extends TPlugins[number] ? T_3 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
388
397
  writeResult: infer W_1;
389
398
  } ? W_1 : object : object : never : never) extends infer T_4 ? T_4 extends (TPlugins[number] extends infer T_5 ? T_5 extends TPlugins[number] ? T_5 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
390
399
  writeResult: infer W_1;
@@ -392,20 +401,16 @@ declare function createUseWrite<TSchema, TDefaultError, TPlugins extends readonl
392
401
  writeOptions: infer W;
393
402
  } ? W : object : object : never : never) extends infer T_7 ? T_7 extends (TPlugins[number] extends infer T_8 ? T_8 extends TPlugins[number] ? T_8 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
394
403
  writeOptions: infer W;
395
- } ? W : object : object : never : never) ? T_7 extends unknown ? (x: T_7) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, ExtractMethodData<TMethod>, [ExtractMethodError<TMethod>] extends [unknown] ? TDefaultError : ExtractMethodError<TMethod>, ExtractMethodQuery<TMethod>, ExtractMethodBody<TMethod>, ExtractResponseParamNames<TMethod> extends never ? never : Record<ExtractResponseParamNames<TMethod>, string | number>, ExtractMethodFormData<TMethod>, ExtractMethodUrlEncoded<TMethod>>>>;
404
+ } ? W : object : object : never : never) ? T_7 extends unknown ? (x: T_7) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, ExtractMethodData<TMethod>, [ExtractMethodError<TMethod>] extends [unknown] ? TDefaultError : ExtractMethodError<TMethod>, ExtractMethodQuery<TMethod>, ExtractMethodBody<TMethod>, ExtractResponseParamNames<TMethod> extends never ? never : Record<ExtractResponseParamNames<TMethod>, string | number>, ExtractMethodFormData<TMethod>, ExtractMethodUrlEncoded<TMethod>>>>> & WriteResponseInputFields<ExtractResponseQuery<TMethod>, ExtractResponseBody<TMethod>, ExtractResponseFormData<TMethod>, ExtractResponseParamNames<TMethod>>;
396
405
 
397
- declare function createUseInfiniteRead<TSchema, TDefaultError, TPlugins extends readonly SpooshPlugin<PluginTypeConfig>[]>(options: Omit<SpooshInstanceShape<unknown, TSchema, TDefaultError, TPlugins>, "_types">): <TData, TItem, TError = TDefaultError, TRequest extends AnyInfiniteRequestOptions = AnyInfiniteRequestOptions, TReadOpts extends BaseInfiniteReadOptions<TData, TItem, TRequest> & (((TPlugins[number] extends infer T_3 ? T_3 extends TPlugins[number] ? T_3 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
406
+ declare function createUseInfiniteRead<TSchema, TDefaultError, TPlugins extends readonly SpooshPlugin<PluginTypeConfig>[]>(options: Omit<SpooshInstanceShape<unknown, TSchema, TDefaultError, TPlugins>, "_types">): <TData, TItem, TError = TDefaultError, TRequest extends AnyInfiniteRequestOptions = AnyInfiniteRequestOptions>(readFn: (api: InfiniteReadApiClient<TSchema, TDefaultError>) => Promise<SpooshResponse<TData, TError>>, readOptions: BaseInfiniteReadOptions<TData, TItem, TRequest> & (((TPlugins[number] extends infer T_3 ? T_3 extends TPlugins[number] ? T_3 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
398
407
  infiniteReadOptions: infer I_1;
399
408
  } ? I_1 : object : object : never : never) extends infer T_4 ? T_4 extends (TPlugins[number] extends infer T_5 ? T_5 extends TPlugins[number] ? T_5 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
400
409
  infiniteReadOptions: infer I_1;
401
- } ? I_1 : object : object : never : never) ? T_4 extends unknown ? (x: T_4) => void : never : never : never) extends (x: infer I) => void ? I : never) = BaseInfiniteReadOptions<TData, TItem, TRequest> & (((TPlugins[number] extends infer T_6 ? T_6 extends TPlugins[number] ? T_6 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
402
- infiniteReadOptions: infer I_1;
403
- } ? I_1 : object : object : never : never) extends infer T_7 ? T_7 extends (TPlugins[number] extends infer T_8 ? T_8 extends TPlugins[number] ? T_8 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
404
- infiniteReadOptions: infer I_1;
405
- } ? I_1 : object : object : never : never) ? T_7 extends unknown ? (x: T_7) => void : never : never : never) extends (x: infer I) => void ? I : never)>(readFn: (api: InfiniteReadApiClient<TSchema, TDefaultError>) => Promise<SpooshResponse<TData, TError>>, readOptions: TReadOpts) => BaseInfiniteReadResult<TData, TError, TItem> & ResolveResultTypes<((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
410
+ } ? I_1 : object : object : never : never) ? T_4 extends unknown ? (x: T_4) => void : never : never : never) extends (x: infer I) => void ? I : never)) => BaseInfiniteReadResult<TData, TError, TItem, ((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
406
411
  readResult: infer R;
407
412
  } ? R : object : object : never : never) extends infer T_1 ? T_1 extends (TPlugins[number] extends infer T_2 ? T_2 extends TPlugins[number] ? T_2 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
408
413
  readResult: infer R;
409
- } ? R : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, TReadOpts>;
414
+ } ? R : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never>;
410
415
 
411
416
  export { type BaseInfiniteReadOptions, type BaseInfiniteReadResult, type BaseReadOptions, type BaseReadResult, type BaseWriteResult, type PluginHooksConfig, type SpooshReactHooks, type UseInfiniteReadResult, type UseReadResult, type UseWriteResult, createReactSpoosh, createUseInfiniteRead, createUseRead, createUseWrite };
package/dist/index.d.ts CHANGED
@@ -22,8 +22,9 @@ type BaseReadOptions = TagOptions & {
22
22
  *
23
23
  * @template TData - The response data type
24
24
  * @template TError - The error type
25
+ * @template TPluginResult - Plugin-provided result fields
25
26
  */
26
- type BaseReadResult<TData, TError> = {
27
+ type BaseReadResult<TData, TError, TPluginResult = Record<string, unknown>> = {
27
28
  /** True during the initial load (no data yet) */
28
29
  loading: boolean;
29
30
  /** True during any fetch operation */
@@ -32,6 +33,8 @@ type BaseReadResult<TData, TError> = {
32
33
  data: TData | undefined;
33
34
  /** Error from the last failed request */
34
35
  error: TError | undefined;
36
+ /** Plugin-provided metadata */
37
+ meta: TPluginResult;
35
38
  /** Abort the current fetch operation */
36
39
  abort: () => void;
37
40
  /** Manually trigger a refetch */
@@ -43,8 +46,9 @@ type BaseReadResult<TData, TError> = {
43
46
  * @template TData - The response data type
44
47
  * @template TError - The error type
45
48
  * @template TOptions - The trigger options type
49
+ * @template TPluginResult - Plugin-provided result fields
46
50
  */
47
- type BaseWriteResult<TData, TError, TOptions> = {
51
+ type BaseWriteResult<TData, TError, TOptions, TPluginResult = Record<string, unknown>> = {
48
52
  /** Execute the mutation with optional options */
49
53
  trigger: (options?: TOptions) => Promise<SpooshResponse<TData, TError>>;
50
54
  /** True while the mutation is in progress */
@@ -53,6 +57,8 @@ type BaseWriteResult<TData, TError, TOptions> = {
53
57
  data: TData | undefined;
54
58
  /** Error from the last failed request */
55
59
  error: TError | undefined;
60
+ /** Plugin-provided metadata */
61
+ meta: TPluginResult;
56
62
  /** Reset the state to initial values */
57
63
  reset: () => void;
58
64
  /** Abort the current mutation */
@@ -199,8 +205,9 @@ type BaseInfiniteReadOptions<TData, TItem, TRequest = AnyInfiniteRequestOptions>
199
205
  * @template TData - The response data type for each page
200
206
  * @template TError - The error type
201
207
  * @template TItem - The item type after merging all responses
208
+ * @template TPluginResult - Plugin-provided result fields
202
209
  */
203
- type BaseInfiniteReadResult<TData, TError, TItem> = {
210
+ type BaseInfiniteReadResult<TData, TError, TItem, TPluginResult = Record<string, unknown>> = {
204
211
  /** Merged items from all fetched responses */
205
212
  data: TItem[] | undefined;
206
213
  /** Array of all raw response data */
@@ -217,6 +224,8 @@ type BaseInfiniteReadResult<TData, TError, TItem> = {
217
224
  canFetchNext: boolean;
218
225
  /** Whether there's a previous page available to fetch */
219
226
  canFetchPrev: boolean;
227
+ /** Plugin-provided metadata */
228
+ meta: TPluginResult;
220
229
  /** Fetch the next page */
221
230
  fetchNext: () => Promise<void>;
222
231
  /** Fetch the previous page */
@@ -240,8 +249,8 @@ type ResolvedWriteOptions<TSchema, TPlugins extends PluginArray, TMethod, TDefau
240
249
  type UseReadFn<TDefaultError, TSchema, TPlugins extends PluginArray> = <TReadFn extends (api: ReadApiClient<TSchema, TDefaultError>) => Promise<{
241
250
  data?: unknown;
242
251
  error?: unknown;
243
- }>, TReadOpts extends BaseReadOptions & ResolvedReadOptions<TSchema, TPlugins, TReadFn, TDefaultError> = BaseReadOptions & ResolvedReadOptions<TSchema, TPlugins, TReadFn, TDefaultError>>(readFn: TReadFn, readOptions?: TReadOpts) => BaseReadResult<ExtractMethodData<TReadFn>, InferError<ExtractMethodError<TReadFn>, TDefaultError>> & ResponseInputFields<ExtractResponseQuery<TReadFn>, ExtractResponseBody<TReadFn>, ExtractResponseFormData<TReadFn>, ExtractResponseParamNames<TReadFn>> & ResolveResultTypes<MergePluginResults<TPlugins>["read"], TReadOpts>;
244
- type UseWriteFn<TDefaultError, TSchema, TPlugins extends PluginArray> = <TMethod extends (...args: never[]) => Promise<SpooshResponse<unknown, unknown>>, TWriteOpts extends (TMethod extends (options: infer O) => unknown ? O : object) & ResolvedWriteOptions<TSchema, TPlugins, TMethod, TDefaultError> = (TMethod extends (options: infer O) => unknown ? O : object) & ResolvedWriteOptions<TSchema, TPlugins, TMethod, TDefaultError>>(writeFn: (api: WriteApiClient<TSchema, TDefaultError>) => TMethod) => BaseWriteResult<ExtractMethodData<TMethod>, InferError<ExtractMethodError<TMethod>, TDefaultError>, TWriteOpts> & WriteResponseInputFields<ExtractResponseQuery<TMethod>, ExtractResponseBody<TMethod>, ExtractResponseFormData<TMethod>, ExtractResponseParamNames<TMethod>> & ResolveResultTypes<MergePluginResults<TPlugins>["write"], TWriteOpts>;
252
+ }>, TReadOpts extends BaseReadOptions & ResolvedReadOptions<TSchema, TPlugins, TReadFn, TDefaultError> = BaseReadOptions & ResolvedReadOptions<TSchema, TPlugins, TReadFn, TDefaultError>>(readFn: TReadFn, readOptions?: TReadOpts) => BaseReadResult<ExtractMethodData<TReadFn>, InferError<ExtractMethodError<TReadFn>, TDefaultError>, ResolveResultTypes<MergePluginResults<TPlugins>["read"], TReadOpts>> & ResponseInputFields<ExtractResponseQuery<TReadFn>, ExtractResponseBody<TReadFn>, ExtractResponseFormData<TReadFn>, ExtractResponseParamNames<TReadFn>>;
253
+ type UseWriteFn<TDefaultError, TSchema, TPlugins extends PluginArray> = <TMethod extends (...args: never[]) => Promise<SpooshResponse<unknown, unknown>>, TWriteOpts extends (TMethod extends (options: infer O) => unknown ? O : object) & ResolvedWriteOptions<TSchema, TPlugins, TMethod, TDefaultError> = (TMethod extends (options: infer O) => unknown ? O : object) & ResolvedWriteOptions<TSchema, TPlugins, TMethod, TDefaultError>>(writeFn: (api: WriteApiClient<TSchema, TDefaultError>) => TMethod) => BaseWriteResult<ExtractMethodData<TMethod>, InferError<ExtractMethodError<TMethod>, TDefaultError>, TWriteOpts, ResolveResultTypes<MergePluginResults<TPlugins>["write"], TWriteOpts>> & WriteResponseInputFields<ExtractResponseQuery<TMethod>, ExtractResponseBody<TMethod>, ExtractResponseFormData<TMethod>, ExtractResponseParamNames<TMethod>>;
245
254
  type InfiniteReadResolverContext<TSchema, TData, TError, TRequest> = ResolverContext<TSchema, TData, TError, TRequest extends {
246
255
  query: infer Q;
247
256
  } ? Q : never, TRequest extends {
@@ -250,7 +259,7 @@ type InfiniteReadResolverContext<TSchema, TData, TError, TRequest> = ResolverCon
250
259
  params: infer P;
251
260
  } ? P : never, never>;
252
261
  type ResolvedInfiniteReadOptions<TSchema, TPlugins extends PluginArray, TData, TError, TRequest> = _spoosh_core.ResolveTypes<MergePluginOptions<TPlugins>["infiniteRead"], InfiniteReadResolverContext<TSchema, TData, TError, TRequest>>;
253
- type UseInfiniteReadFn<TDefaultError, TSchema, TPlugins extends PluginArray> = <TData, TItem, TError = TDefaultError, TRequest extends AnyInfiniteRequestOptions = AnyInfiniteRequestOptions>(readFn: (api: InfiniteReadApiClient<TSchema, TDefaultError>) => Promise<SpooshResponse<TData, TError>>, readOptions: BaseInfiniteReadOptions<TData, TItem, TRequest> & ResolvedInfiniteReadOptions<TSchema, TPlugins, TData, TError, TRequest>) => BaseInfiniteReadResult<TData, TError, TItem> & MergePluginResults<TPlugins>["read"];
262
+ type UseInfiniteReadFn<TDefaultError, TSchema, TPlugins extends PluginArray> = <TData, TItem, TError = TDefaultError, TRequest extends AnyInfiniteRequestOptions = AnyInfiniteRequestOptions>(readFn: (api: InfiniteReadApiClient<TSchema, TDefaultError>) => Promise<SpooshResponse<TData, TError>>, readOptions: BaseInfiniteReadOptions<TData, TItem, TRequest> & ResolvedInfiniteReadOptions<TSchema, TPlugins, TData, TError, TRequest>) => BaseInfiniteReadResult<TData, TError, TItem, MergePluginResults<TPlugins>["read"]>;
254
263
  /**
255
264
  * Spoosh React hooks interface containing useRead, useWrite, and useInfiniteRead.
256
265
  *
@@ -271,7 +280,7 @@ type SpooshReactHooks<TDefaultError, TSchema, TPlugins extends PluginArray> = {
271
280
  * const { data, loading, error } = useRead((api) => api.posts.$get());
272
281
  *
273
282
  * const { data: post } = useRead(
274
- * (api) => api.posts[postId].$get(),
283
+ * (api) => api.posts(postId).$get(),
275
284
  * { enabled: !!postId }
276
285
  * );
277
286
  * ```
@@ -374,17 +383,17 @@ declare function createUseRead<TSchema, TDefaultError, TPlugins extends readonly
374
383
  error: infer E;
375
384
  }> ? E : unknown] extends [unknown] ? TDefaultError : TReadFn extends (...args: unknown[]) => Promise<{
376
385
  error: infer E;
377
- }> ? E : unknown> & ResponseInputFields<ExtractResponseQuery<TReadFn>, ExtractResponseBody<TReadFn>, ExtractResponseFormData<TReadFn>, ExtractResponseParamNames<TReadFn>> & ResolveResultTypes<((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
386
+ }> ? E : unknown, ResolveResultTypes<((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
378
387
  readResult: infer R;
379
388
  } ? R : object : object : never : never) extends infer T_1 ? T_1 extends (TPlugins[number] extends infer T_2 ? T_2 extends TPlugins[number] ? T_2 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
380
389
  readResult: infer R;
381
- } ? R : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, TReadOpts>;
390
+ } ? R : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, TReadOpts>> & ResponseInputFields<ExtractResponseQuery<TReadFn>, ExtractResponseBody<TReadFn>, ExtractResponseFormData<TReadFn>, ExtractResponseParamNames<TReadFn>>;
382
391
 
383
392
  declare function createUseWrite<TSchema, TDefaultError, TPlugins extends readonly SpooshPlugin<PluginTypeConfig>[]>(options: Omit<SpooshInstanceShape<unknown, TSchema, TDefaultError, TPlugins>, "_types">): <TMethod extends (...args: never[]) => Promise<SpooshResponse<unknown, unknown>>>(writeFn: (api: WriteApiClient<TSchema, TDefaultError>) => TMethod) => BaseWriteResult<ExtractMethodData<TMethod>, [ExtractMethodError<TMethod>] extends [unknown] ? TDefaultError : ExtractMethodError<TMethod>, ExtractMethodOptions<TMethod> & _spoosh_core.ResolveTypes<((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
384
393
  writeOptions: infer W;
385
394
  } ? W : object : object : never : never) extends infer T_1 ? T_1 extends (TPlugins[number] extends infer T_2 ? T_2 extends TPlugins[number] ? T_2 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
386
395
  writeOptions: infer W;
387
- } ? W : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, ExtractMethodData<TMethod>, [ExtractMethodError<TMethod>] extends [unknown] ? TDefaultError : ExtractMethodError<TMethod>, ExtractMethodQuery<TMethod>, ExtractMethodBody<TMethod>, ExtractResponseParamNames<TMethod> extends never ? never : Record<ExtractResponseParamNames<TMethod>, string | number>, ExtractMethodFormData<TMethod>, ExtractMethodUrlEncoded<TMethod>>>> & WriteResponseInputFields<ExtractResponseQuery<TMethod>, ExtractResponseBody<TMethod>, ExtractResponseFormData<TMethod>, ExtractResponseParamNames<TMethod>> & ResolveResultTypes<((TPlugins[number] extends infer T_3 ? T_3 extends TPlugins[number] ? T_3 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
396
+ } ? W : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, ExtractMethodData<TMethod>, [ExtractMethodError<TMethod>] extends [unknown] ? TDefaultError : ExtractMethodError<TMethod>, ExtractMethodQuery<TMethod>, ExtractMethodBody<TMethod>, ExtractResponseParamNames<TMethod> extends never ? never : Record<ExtractResponseParamNames<TMethod>, string | number>, ExtractMethodFormData<TMethod>, ExtractMethodUrlEncoded<TMethod>>>, ResolveResultTypes<((TPlugins[number] extends infer T_3 ? T_3 extends TPlugins[number] ? T_3 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
388
397
  writeResult: infer W_1;
389
398
  } ? W_1 : object : object : never : never) extends infer T_4 ? T_4 extends (TPlugins[number] extends infer T_5 ? T_5 extends TPlugins[number] ? T_5 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
390
399
  writeResult: infer W_1;
@@ -392,20 +401,16 @@ declare function createUseWrite<TSchema, TDefaultError, TPlugins extends readonl
392
401
  writeOptions: infer W;
393
402
  } ? W : object : object : never : never) extends infer T_7 ? T_7 extends (TPlugins[number] extends infer T_8 ? T_8 extends TPlugins[number] ? T_8 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
394
403
  writeOptions: infer W;
395
- } ? W : object : object : never : never) ? T_7 extends unknown ? (x: T_7) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, ExtractMethodData<TMethod>, [ExtractMethodError<TMethod>] extends [unknown] ? TDefaultError : ExtractMethodError<TMethod>, ExtractMethodQuery<TMethod>, ExtractMethodBody<TMethod>, ExtractResponseParamNames<TMethod> extends never ? never : Record<ExtractResponseParamNames<TMethod>, string | number>, ExtractMethodFormData<TMethod>, ExtractMethodUrlEncoded<TMethod>>>>;
404
+ } ? W : object : object : never : never) ? T_7 extends unknown ? (x: T_7) => void : never : never : never) extends (x: infer I) => void ? I : never, ResolverContext<TSchema, ExtractMethodData<TMethod>, [ExtractMethodError<TMethod>] extends [unknown] ? TDefaultError : ExtractMethodError<TMethod>, ExtractMethodQuery<TMethod>, ExtractMethodBody<TMethod>, ExtractResponseParamNames<TMethod> extends never ? never : Record<ExtractResponseParamNames<TMethod>, string | number>, ExtractMethodFormData<TMethod>, ExtractMethodUrlEncoded<TMethod>>>>> & WriteResponseInputFields<ExtractResponseQuery<TMethod>, ExtractResponseBody<TMethod>, ExtractResponseFormData<TMethod>, ExtractResponseParamNames<TMethod>>;
396
405
 
397
- declare function createUseInfiniteRead<TSchema, TDefaultError, TPlugins extends readonly SpooshPlugin<PluginTypeConfig>[]>(options: Omit<SpooshInstanceShape<unknown, TSchema, TDefaultError, TPlugins>, "_types">): <TData, TItem, TError = TDefaultError, TRequest extends AnyInfiniteRequestOptions = AnyInfiniteRequestOptions, TReadOpts extends BaseInfiniteReadOptions<TData, TItem, TRequest> & (((TPlugins[number] extends infer T_3 ? T_3 extends TPlugins[number] ? T_3 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
406
+ declare function createUseInfiniteRead<TSchema, TDefaultError, TPlugins extends readonly SpooshPlugin<PluginTypeConfig>[]>(options: Omit<SpooshInstanceShape<unknown, TSchema, TDefaultError, TPlugins>, "_types">): <TData, TItem, TError = TDefaultError, TRequest extends AnyInfiniteRequestOptions = AnyInfiniteRequestOptions>(readFn: (api: InfiniteReadApiClient<TSchema, TDefaultError>) => Promise<SpooshResponse<TData, TError>>, readOptions: BaseInfiniteReadOptions<TData, TItem, TRequest> & (((TPlugins[number] extends infer T_3 ? T_3 extends TPlugins[number] ? T_3 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
398
407
  infiniteReadOptions: infer I_1;
399
408
  } ? I_1 : object : object : never : never) extends infer T_4 ? T_4 extends (TPlugins[number] extends infer T_5 ? T_5 extends TPlugins[number] ? T_5 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
400
409
  infiniteReadOptions: infer I_1;
401
- } ? I_1 : object : object : never : never) ? T_4 extends unknown ? (x: T_4) => void : never : never : never) extends (x: infer I) => void ? I : never) = BaseInfiniteReadOptions<TData, TItem, TRequest> & (((TPlugins[number] extends infer T_6 ? T_6 extends TPlugins[number] ? T_6 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
402
- infiniteReadOptions: infer I_1;
403
- } ? I_1 : object : object : never : never) extends infer T_7 ? T_7 extends (TPlugins[number] extends infer T_8 ? T_8 extends TPlugins[number] ? T_8 extends SpooshPlugin<infer Types_1 extends PluginTypeConfig> ? Types_1 extends {
404
- infiniteReadOptions: infer I_1;
405
- } ? I_1 : object : object : never : never) ? T_7 extends unknown ? (x: T_7) => void : never : never : never) extends (x: infer I) => void ? I : never)>(readFn: (api: InfiniteReadApiClient<TSchema, TDefaultError>) => Promise<SpooshResponse<TData, TError>>, readOptions: TReadOpts) => BaseInfiniteReadResult<TData, TError, TItem> & ResolveResultTypes<((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
410
+ } ? I_1 : object : object : never : never) ? T_4 extends unknown ? (x: T_4) => void : never : never : never) extends (x: infer I) => void ? I : never)) => BaseInfiniteReadResult<TData, TError, TItem, ((TPlugins[number] extends infer T ? T extends TPlugins[number] ? T extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
406
411
  readResult: infer R;
407
412
  } ? R : object : object : never : never) extends infer T_1 ? T_1 extends (TPlugins[number] extends infer T_2 ? T_2 extends TPlugins[number] ? T_2 extends SpooshPlugin<infer Types extends PluginTypeConfig> ? Types extends {
408
413
  readResult: infer R;
409
- } ? R : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never, TReadOpts>;
414
+ } ? R : object : object : never : never) ? T_1 extends unknown ? (x: T_1) => void : never : never : never) extends (x: infer I) => void ? I : never>;
410
415
 
411
416
  export { type BaseInfiniteReadOptions, type BaseInfiniteReadResult, type BaseReadOptions, type BaseReadResult, type BaseWriteResult, type PluginHooksConfig, type SpooshReactHooks, type UseInfiniteReadResult, type UseReadResult, type UseWriteResult, createReactSpoosh, createUseInfiniteRead, createUseRead, createUseWrite };
package/dist/index.js CHANGED
@@ -197,7 +197,7 @@ function createUseRead(options) {
197
197
  const loading = requestState.isPending && !hasData;
198
198
  const fetching = requestState.isPending;
199
199
  const result = {
200
- ...pluginResultData,
200
+ meta: pluginResultData,
201
201
  ...inputField,
202
202
  data: state.data,
203
203
  error: requestState.error ?? state.error,
@@ -322,7 +322,7 @@ function createUseWrite(options) {
322
322
  const loading = requestState.isPending;
323
323
  const result = {
324
324
  trigger,
325
- ...pluginResultData,
325
+ meta: pluginResultData,
326
326
  ...inputField,
327
327
  data: state.data,
328
328
  error: requestState.error ?? state.error,
@@ -494,7 +494,10 @@ function createUseInfiniteRead(options) {
494
494
  const prevContext = controller.getContext();
495
495
  controller.update(prevContext);
496
496
  }, [JSON.stringify(pluginOpts)]);
497
+ const entry = stateManager.getCache(queryKey);
498
+ const pluginResultData = entry?.pluginResult ? Object.fromEntries(entry.pluginResult) : {};
497
499
  const result = {
500
+ meta: pluginResultData,
498
501
  data: state.data,
499
502
  allResponses: state.allResponses,
500
503
  loading,
package/dist/index.mjs CHANGED
@@ -181,7 +181,7 @@ function createUseRead(options) {
181
181
  const loading = requestState.isPending && !hasData;
182
182
  const fetching = requestState.isPending;
183
183
  const result = {
184
- ...pluginResultData,
184
+ meta: pluginResultData,
185
185
  ...inputField,
186
186
  data: state.data,
187
187
  error: requestState.error ?? state.error,
@@ -317,7 +317,7 @@ function createUseWrite(options) {
317
317
  const loading = requestState.isPending;
318
318
  const result = {
319
319
  trigger,
320
- ...pluginResultData,
320
+ meta: pluginResultData,
321
321
  ...inputField,
322
322
  data: state.data,
323
323
  error: requestState.error ?? state.error,
@@ -500,7 +500,10 @@ function createUseInfiniteRead(options) {
500
500
  const prevContext = controller.getContext();
501
501
  controller.update(prevContext);
502
502
  }, [JSON.stringify(pluginOpts)]);
503
+ const entry = stateManager.getCache(queryKey);
504
+ const pluginResultData = entry?.pluginResult ? Object.fromEntries(entry.pluginResult) : {};
503
505
  const result = {
506
+ meta: pluginResultData,
504
507
  data: state.data,
505
508
  allResponses: state.allResponses,
506
509
  loading,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spoosh/react",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "license": "MIT",
5
5
  "description": "React hooks for Spoosh API client",
6
6
  "keywords": [
@@ -33,12 +33,13 @@
33
33
  "require": "./dist/index.js"
34
34
  }
35
35
  },
36
- "dependencies": {
37
- "@spoosh/core": "0.2.1"
38
- },
39
36
  "peerDependencies": {
37
+ "@spoosh/core": ">=0.4.0",
40
38
  "react": "^18 || ^19"
41
39
  },
40
+ "devDependencies": {
41
+ "@spoosh/core": "0.4.0"
42
+ },
42
43
  "scripts": {
43
44
  "dev": "tsup --watch",
44
45
  "build": "tsup",