@data-client/rest 0.9.8 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +16 -0
  2. package/dist/index.js +8 -1
  3. package/dist/index.umd.min.js +1 -1
  4. package/legacy/OptionsToFunction.js +1 -1
  5. package/legacy/RestEndpoint.js +7 -2
  6. package/legacy/RestEndpointTypeHelp.js +1 -1
  7. package/legacy/RestEndpointTypes.js +1 -1
  8. package/legacy/createResource.js +1 -1
  9. package/legacy/extractCollection.js +1 -1
  10. package/legacy/index.js +2 -1
  11. package/legacy/mapCollection.js +1 -1
  12. package/legacy/paramsToString.js +1 -1
  13. package/legacy/paramsToString.native.js +1 -1
  14. package/legacy/pathTypes.js +1 -1
  15. package/legacy/resourceExtensionTypes.js +1 -1
  16. package/legacy/resourceTypes.js +1 -1
  17. package/legacy/utiltypes.js +1 -1
  18. package/lib/OptionsToFunction.d.ts.map +1 -1
  19. package/lib/OptionsToFunction.js +1 -1
  20. package/lib/RestEndpoint.js +7 -2
  21. package/lib/RestEndpointTypeHelp.d.ts.map +1 -1
  22. package/lib/RestEndpointTypeHelp.js +1 -1
  23. package/lib/RestEndpointTypes.d.ts +29 -7
  24. package/lib/RestEndpointTypes.d.ts.map +1 -1
  25. package/lib/RestEndpointTypes.js +1 -1
  26. package/lib/createResource.js +1 -1
  27. package/lib/extractCollection.d.ts +2 -2
  28. package/lib/extractCollection.d.ts.map +1 -1
  29. package/lib/extractCollection.js +1 -1
  30. package/lib/index.d.ts +1 -0
  31. package/lib/index.d.ts.map +1 -1
  32. package/lib/index.js +2 -1
  33. package/lib/mapCollection.d.ts.map +1 -1
  34. package/lib/mapCollection.js +1 -1
  35. package/lib/paramsToString.d.ts +1 -1
  36. package/lib/paramsToString.d.ts.map +1 -1
  37. package/lib/paramsToString.js +1 -1
  38. package/lib/paramsToString.native.d.ts +1 -1
  39. package/lib/paramsToString.native.d.ts.map +1 -1
  40. package/lib/paramsToString.native.js +1 -1
  41. package/lib/pathTypes.d.ts.map +1 -1
  42. package/lib/pathTypes.js +1 -1
  43. package/lib/resourceExtensionTypes.d.ts.map +1 -1
  44. package/lib/resourceExtensionTypes.js +1 -1
  45. package/lib/resourceTypes.d.ts.map +1 -1
  46. package/lib/resourceTypes.js +1 -1
  47. package/lib/utiltypes.d.ts.map +1 -1
  48. package/lib/utiltypes.js +1 -1
  49. package/package.json +4 -2
  50. package/src/OptionsToFunction.ts +17 -15
  51. package/src/RestEndpoint.js +9 -4
  52. package/src/RestEndpointTypeHelp.ts +2 -3
  53. package/src/RestEndpointTypes.ts +173 -178
  54. package/src/__tests__/RestEndpoint.ts +54 -2
  55. package/src/createResource.ts +2 -2
  56. package/src/extractCollection.ts +13 -13
  57. package/src/index.ts +1 -0
  58. package/src/mapCollection.ts +14 -21
  59. package/src/paramsToString.native.ts +6 -1
  60. package/src/paramsToString.ts +7 -2
  61. package/src/pathTypes.ts +27 -36
  62. package/src/resourceExtensionTypes.ts +33 -48
  63. package/src/resourceTypes.ts +76 -80
  64. package/src/utiltypes.ts +3 -3
  65. package/ts4.0/RestEndpointTypes.d.ts +29 -7
  66. package/ts4.0/extractCollection.d.ts +2 -2
  67. package/ts4.0/index.d.ts +1 -0
  68. package/ts4.0/paramsToString.d.ts +1 -1
  69. package/ts4.0/paramsToString.native.d.ts +1 -1
  70. package/ts4.1/RestEndpointTypes.d.ts +29 -7
  71. package/ts4.1/extractCollection.d.ts +2 -2
  72. package/ts4.1/index.d.ts +1 -0
  73. package/ts4.1/paramsToString.d.ts +1 -1
  74. package/ts4.1/paramsToString.native.d.ts +1 -1
@@ -7,30 +7,31 @@ export type OptionsToFunction<
7
7
  O extends PartialRestGenerics,
8
8
  E extends { body?: any; path?: string; method?: string },
9
9
  F extends FetchFunction,
10
- > = 'path' extends keyof O
11
- ? RestFetch<
12
- 'searchParams' extends keyof O
13
- ? O['searchParams'] & PathArgs<Exclude<O['path'], undefined>>
14
- : PathArgs<Exclude<O['path'], undefined>>,
10
+ > =
11
+ 'path' extends keyof O ?
12
+ RestFetch<
13
+ 'searchParams' extends keyof O ?
14
+ O['searchParams'] & PathArgs<Exclude<O['path'], undefined>>
15
+ : PathArgs<Exclude<O['path'], undefined>>,
15
16
  OptionsToBodyArgument<
16
17
  'body' extends keyof O ? O : E,
17
18
  'method' extends keyof O ? O['method'] : E['method']
18
19
  >,
19
20
  O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>
20
21
  >
21
- : 'body' extends keyof O
22
- ? RestFetch<
23
- 'searchParams' extends keyof O
24
- ? O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>
25
- : PathArgs<Exclude<E['path'], undefined>>,
22
+ : 'body' extends keyof O ?
23
+ RestFetch<
24
+ 'searchParams' extends keyof O ?
25
+ O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>
26
+ : PathArgs<Exclude<E['path'], undefined>>,
26
27
  OptionsToBodyArgument<
27
28
  O,
28
29
  'method' extends keyof O ? O['method'] : E['method']
29
30
  >,
30
31
  O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>
31
32
  >
32
- : 'searchParams' extends keyof O
33
- ? RestFetch<
33
+ : 'searchParams' extends keyof O ?
34
+ RestFetch<
34
35
  O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>,
35
36
  OptionsToBodyArgument<
36
37
  E,
@@ -48,8 +49,9 @@ export type OptionsToFunction<
48
49
  export type OptionsToBodyArgument<
49
50
  O extends { body?: any },
50
51
  Method extends string | undefined,
51
- > = Method extends 'POST' | 'PUT' | 'PATCH' | 'DELETE'
52
- ? 'body' extends keyof O
53
- ? O['body']
52
+ > =
53
+ Method extends 'POST' | 'PUT' | 'PATCH' | 'DELETE' ?
54
+ 'body' extends keyof O ?
55
+ O['body']
54
56
  : any
55
57
  : undefined;
@@ -36,9 +36,9 @@ export default class RestEndpoint extends Endpoint {
36
36
  ('method' in options && !('sideEffect' in options))
37
37
  ) {
38
38
  this.sideEffect =
39
- options.method === 'GET' || options.method === undefined
40
- ? undefined
41
- : true;
39
+ options.method === 'GET' || options.method === undefined ?
40
+ undefined
41
+ : true;
42
42
  }
43
43
  if (this.method === undefined) {
44
44
  this.method = this.sideEffect ? 'POST' : 'GET';
@@ -76,11 +76,16 @@ export default class RestEndpoint extends Endpoint {
76
76
  }
77
77
  });
78
78
  if (Object.keys(searchParams).length) {
79
- return `${this.urlPrefix}${urlBase}?${paramsToString(searchParams)}`;
79
+ return `${this.urlPrefix}${urlBase}?${this.searchToString(searchParams)}`;
80
80
  }
81
81
  return `${this.urlPrefix}${urlBase}`;
82
82
  }
83
83
 
84
+ /** Encode the url searchParams */
85
+ searchToString(searchParams) {
86
+ return paramsToString(searchParams);
87
+ }
88
+
84
89
  getHeaders(headers) {
85
90
  return headers;
86
91
  }
@@ -15,6 +15,5 @@ export type EndpointUpdateFunction<
15
15
  [K in keyof Updaters]: (result: Updaters[K]) => Updaters[K];
16
16
  };
17
17
  export type ResultEntry<E extends FetchFunction & { schema: any }> =
18
- E['schema'] extends undefined | null
19
- ? ResolveType<E>
20
- : Normalize<E['schema']>;
18
+ E['schema'] extends undefined | null ? ResolveType<E>
19
+ : Normalize<E['schema']>;
@@ -29,10 +29,9 @@ export interface RestInstanceBase<
29
29
  /** @see https://dataclient.io/rest/api/RestEndpoint#body */
30
30
  readonly body?: 'body' extends keyof O ? O['body'] : any;
31
31
  /** @see https://dataclient.io/rest/api/RestEndpoint#searchParams */
32
- readonly searchParams?: 'searchParams' extends keyof O
33
- ? O['searchParams']
34
- : // unknown is identity with '&' type operator
35
- unknown;
32
+ readonly searchParams?: 'searchParams' extends keyof O ? O['searchParams']
33
+ : // unknown is identity with '&' type operator
34
+ unknown;
36
35
 
37
36
  /** Pattern to construct url based on Url Parameters
38
37
  * @see https://dataclient.io/rest/api/RestEndpoint#path
@@ -43,31 +42,53 @@ export interface RestInstanceBase<
43
42
  */
44
43
  readonly urlPrefix: string;
45
44
  readonly requestInit: RequestInit;
46
- /** @see https://dataclient.io/rest/api/RestEndpoint#method */
45
+ /** HTTP request method
46
+ * @see https://dataclient.io/rest/api/RestEndpoint#method
47
+ */
47
48
  readonly method: (O & { method: string })['method'];
48
49
  readonly signal: AbortSignal | undefined;
50
+ /** @see https://dataclient.io/rest/api/RestEndpoint#paginationField */
49
51
  readonly paginationField?: string;
50
52
 
51
53
  /* fetch lifecycles */
52
54
  /* before-fetch */
55
+ /** Builds the URL to fetch
56
+ * @see https://dataclient.io/rest/api/RestEndpoint#url
57
+ */
53
58
  url(...args: Parameters<F>): string;
54
- /** @see https://dataclient.io/rest/api/RestEndpoint#getRequestInit */
59
+ /** Encode the searchParams component of the url
60
+ * @see https://dataclient.io/rest/api/RestEndpoint#searchToString
61
+ */
62
+ searchToString(searchParams: Record<string, any>): string;
63
+ /** Prepares RequestInit used in fetch. This is sent to fetchResponse()
64
+ * @see https://dataclient.io/rest/api/RestEndpoint#getRequestInit
65
+ */
55
66
  getRequestInit(
56
67
  this: any,
57
68
  body?: RequestInit['body'] | Record<string, unknown>,
58
69
  ): Promise<RequestInit> | RequestInit;
59
- /** @see https://dataclient.io/rest/api/RestEndpoint#getHeaders */
70
+ /** Called by getRequestInit to determine HTTP Headers
71
+ * @see https://dataclient.io/rest/api/RestEndpoint#getHeaders
72
+ */
60
73
  getHeaders(headers: HeadersInit): Promise<HeadersInit> | HeadersInit;
61
74
  /* after-fetch */
62
- /** @see https://dataclient.io/rest/api/RestEndpoint#fetchResponse */
75
+ /** Performs the fetch call
76
+ * @see https://dataclient.io/rest/api/RestEndpoint#fetchResponse
77
+ */
63
78
  fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
64
- /** @see https://dataclient.io/rest/api/RestEndpoint#parseResponse */
79
+ /** Takes the Response and parses via .text() or .json()
80
+ * @see https://dataclient.io/rest/api/RestEndpoint#parseResponse
81
+ */
65
82
  parseResponse(response: Response): Promise<any>;
66
- /** @see https://dataclient.io/rest/api/RestEndpoint#process */
83
+ /** Perform any transforms with the parsed result.
84
+ * @see https://dataclient.io/rest/api/RestEndpoint#process
85
+ */
67
86
  process(value: any, ...args: Parameters<F>): ResolveType<F>;
68
87
 
69
88
  /* utilities */
70
- /** @see https://dataclient.io/rest/api/RestEndpoint#testKey */
89
+ /** Returns true if the provided (fetch) key matches this endpoint.
90
+ * @see https://dataclient.io/rest/api/RestEndpoint#testKey
91
+ */
71
92
  testKey(key: string): boolean;
72
93
 
73
94
  /* extenders */
@@ -121,14 +142,14 @@ export interface RestInstance<
121
142
  /** Endpoint to append the next page extending a list for pagination
122
143
  * @see https://dataclient.io/rest/api/RestEndpoint#getPage
123
144
  */
124
- getPage: 'paginationField' extends keyof O
125
- ? O['paginationField'] extends string
126
- ? PaginationFieldEndpoint<
127
- F & { schema: S; sideEffect: M } & O,
128
- O['paginationField']
129
- >
130
- : undefined
131
- : undefined;
145
+ getPage: 'paginationField' extends keyof O ?
146
+ O['paginationField'] extends string ?
147
+ PaginationFieldEndpoint<
148
+ F & { schema: S; sideEffect: M } & O,
149
+ O['paginationField']
150
+ >
151
+ : undefined
152
+ : undefined;
132
153
  /** Endpoint that pushes (place at end) a newly created entity to this Collection
133
154
  * @see https://dataclient.io/rest/api/RestEndpoint#push
134
155
  */
@@ -173,9 +194,8 @@ export type RestEndpointExtendOptions<
173
194
  F extends FetchFunction,
174
195
  > = RestEndpointOptions<
175
196
  OptionsToFunction<O, E, F>,
176
- 'schema' extends keyof O
177
- ? Extract<O['schema'], Schema | undefined>
178
- : E['schema']
197
+ 'schema' extends keyof O ? Extract<O['schema'], Schema | undefined>
198
+ : E['schema']
179
199
  > &
180
200
  Partial<
181
201
  Omit<
@@ -188,13 +208,14 @@ type OptionsToRestEndpoint<
188
208
  O extends PartialRestGenerics,
189
209
  E extends RestInstanceBase & { body?: any; paginationField?: string },
190
210
  F extends FetchFunction,
191
- > = 'path' extends keyof O
192
- ? RestType<
193
- 'searchParams' extends keyof O
194
- ? O['searchParams'] extends undefined
195
- ? PathArgs<Exclude<O['path'], undefined>>
196
- : O['searchParams'] & PathArgs<Exclude<O['path'], undefined>>
197
- : PathArgs<Exclude<O['path'], undefined>>,
211
+ > =
212
+ 'path' extends keyof O ?
213
+ RestType<
214
+ 'searchParams' extends keyof O ?
215
+ O['searchParams'] extends undefined ?
216
+ PathArgs<Exclude<O['path'], undefined>>
217
+ : O['searchParams'] & PathArgs<Exclude<O['path'], undefined>>
218
+ : PathArgs<Exclude<O['path'], undefined>>,
198
219
  OptionsToBodyArgument<
199
220
  'body' extends keyof O ? O : E,
200
221
  'method' extends keyof O ? O['method'] : E['method']
@@ -205,22 +226,21 @@ type OptionsToRestEndpoint<
205
226
  {
206
227
  path: Exclude<O['path'], undefined>;
207
228
  body: 'body' extends keyof O ? O['body'] : E['body'];
208
- searchParams: 'searchParams' extends keyof O
209
- ? O['searchParams']
210
- : E['searchParams'];
229
+ searchParams: 'searchParams' extends keyof O ? O['searchParams']
230
+ : E['searchParams'];
211
231
  method: 'method' extends keyof O ? O['method'] : E['method'];
212
- paginationField: 'paginationField' extends keyof O
213
- ? O['paginationField']
214
- : E['paginationField'];
232
+ paginationField: 'paginationField' extends keyof O ?
233
+ O['paginationField']
234
+ : E['paginationField'];
215
235
  }
216
236
  >
217
- : 'body' extends keyof O
218
- ? RestType<
219
- 'searchParams' extends keyof O
220
- ? O['searchParams'] extends undefined
221
- ? PathArgs<Exclude<O['path'], undefined>>
222
- : O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>
223
- : PathArgs<Exclude<E['path'], undefined>>,
237
+ : 'body' extends keyof O ?
238
+ RestType<
239
+ 'searchParams' extends keyof O ?
240
+ O['searchParams'] extends undefined ?
241
+ PathArgs<Exclude<O['path'], undefined>>
242
+ : O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>
243
+ : PathArgs<Exclude<E['path'], undefined>>,
224
244
  OptionsToBodyArgument<
225
245
  O,
226
246
  'method' extends keyof O ? O['method'] : E['method']
@@ -231,20 +251,19 @@ type OptionsToRestEndpoint<
231
251
  {
232
252
  path: E['path'];
233
253
  body: O['body'];
234
- searchParams: 'searchParams' extends keyof O
235
- ? O['searchParams']
236
- : E['searchParams'];
254
+ searchParams: 'searchParams' extends keyof O ? O['searchParams']
255
+ : E['searchParams'];
237
256
  method: 'method' extends keyof O ? O['method'] : E['method'];
238
- paginationField: 'paginationField' extends keyof O
239
- ? O['paginationField']
240
- : Extract<E['paginationField'], string>;
257
+ paginationField: 'paginationField' extends keyof O ?
258
+ O['paginationField']
259
+ : Extract<E['paginationField'], string>;
241
260
  }
242
261
  >
243
- : 'searchParams' extends keyof O
244
- ? RestType<
245
- O['searchParams'] extends undefined
246
- ? PathArgs<Exclude<O['path'], undefined>>
247
- : O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>,
262
+ : 'searchParams' extends keyof O ?
263
+ RestType<
264
+ O['searchParams'] extends undefined ?
265
+ PathArgs<Exclude<O['path'], undefined>>
266
+ : O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>,
248
267
  OptionsToBodyArgument<
249
268
  E,
250
269
  'method' extends keyof O ? O['method'] : E['method']
@@ -257,9 +276,9 @@ type OptionsToRestEndpoint<
257
276
  body: E['body'];
258
277
  searchParams: O['searchParams'];
259
278
  method: 'method' extends keyof O ? O['method'] : E['method'];
260
- paginationField: 'paginationField' extends keyof O
261
- ? O['paginationField']
262
- : Extract<E['paginationField'], string>;
279
+ paginationField: 'paginationField' extends keyof O ?
280
+ O['paginationField']
281
+ : Extract<E['paginationField'], string>;
263
282
  }
264
283
  >
265
284
  : RestInstance<
@@ -267,17 +286,15 @@ type OptionsToRestEndpoint<
267
286
  'schema' extends keyof O ? O['schema'] : E['schema'],
268
287
  'method' extends keyof O ? MethodToSide<O['method']> : E['sideEffect'],
269
288
  {
270
- path: 'path' extends keyof O
271
- ? Exclude<O['path'], undefined>
272
- : E['path'];
289
+ path: 'path' extends keyof O ? Exclude<O['path'], undefined>
290
+ : E['path'];
273
291
  body: 'body' extends keyof O ? O['body'] : E['body'];
274
- searchParams: 'searchParams' extends keyof O
275
- ? O['searchParams']
276
- : E['searchParams'];
292
+ searchParams: 'searchParams' extends keyof O ? O['searchParams']
293
+ : E['searchParams'];
277
294
  method: 'method' extends keyof O ? O['method'] : E['method'];
278
- paginationField: 'paginationField' extends keyof O
279
- ? O['paginationField']
280
- : E['paginationField'];
295
+ paginationField: 'paginationField' extends keyof O ?
296
+ O['paginationField']
297
+ : E['paginationField'];
281
298
  }
282
299
  >;
283
300
 
@@ -287,15 +304,14 @@ export type RestExtendedEndpoint<
287
304
  > = OptionsToRestEndpoint<
288
305
  O,
289
306
  E &
290
- (E extends { getPage: { paginationField: string } }
291
- ? { paginationField: E['getPage']['paginationField'] }
292
- : unknown),
307
+ (E extends { getPage: { paginationField: string } } ?
308
+ { paginationField: E['getPage']['paginationField'] }
309
+ : unknown),
293
310
  RestInstance<
294
311
  (
295
312
  ...args: Parameters<E>
296
- ) => O['process'] extends {}
297
- ? Promise<ReturnType<O['process']>>
298
- : ReturnType<E>,
313
+ ) => O['process'] extends {} ? Promise<ReturnType<O['process']>>
314
+ : ReturnType<E>,
299
315
  'schema' extends keyof O ? O['schema'] : E['schema'],
300
316
  'method' extends keyof O ? MethodToSide<O['method']> : E['sideEffect']
301
317
  >
@@ -361,11 +377,11 @@ export type AddEndpoint<
361
377
  } = { path: string; body: any },
362
378
  > = RestInstanceBase<
363
379
  RestFetch<
364
- 'searchParams' extends keyof O
365
- ? O['searchParams'] extends undefined
366
- ? PathArgs<Exclude<O['path'], undefined>>
367
- : O['searchParams'] & PathArgs<Exclude<O['path'], undefined>>
368
- : PathArgs<Exclude<O['path'], undefined>>,
380
+ 'searchParams' extends keyof O ?
381
+ O['searchParams'] extends undefined ?
382
+ PathArgs<Exclude<O['path'], undefined>>
383
+ : O['searchParams'] & PathArgs<Exclude<O['path'], undefined>>
384
+ : PathArgs<Exclude<O['path'], undefined>>,
369
385
  O['body'],
370
386
  ResolveType<F>
371
387
  >,
@@ -374,10 +390,9 @@ export type AddEndpoint<
374
390
  Omit<O, 'method'> & { method: 'POST' }
375
391
  >;
376
392
 
377
- type OptionsBodyDefault<O extends RestGenerics> = 'body' extends keyof O
378
- ? O
379
- : O['method'] extends 'POST' | 'PUT' | 'PATCH'
380
- ? O & { body: any }
393
+ type OptionsBodyDefault<O extends RestGenerics> =
394
+ 'body' extends keyof O ? O
395
+ : O['method'] extends 'POST' | 'PUT' | 'PATCH' ? O & { body: any }
381
396
  : O & { body: undefined };
382
397
 
383
398
  type OptionsToAdderBodyArgument<O extends { body?: any }> =
@@ -406,22 +421,19 @@ export interface RestEndpointOptions<
406
421
  export type RestEndpointConstructorOptions<O extends RestGenerics = any> =
407
422
  RestEndpointOptions<
408
423
  RestFetch<
409
- 'searchParams' extends keyof O
410
- ? O['searchParams'] extends undefined
411
- ? PathArgs<O['path']>
412
- : O['searchParams'] & PathArgs<O['path']>
413
- : PathArgs<O['path']>,
424
+ 'searchParams' extends keyof O ?
425
+ O['searchParams'] extends undefined ?
426
+ PathArgs<O['path']>
427
+ : O['searchParams'] & PathArgs<O['path']>
428
+ : PathArgs<O['path']>,
414
429
  OptionsToBodyArgument<
415
430
  O,
416
- 'method' extends keyof O
417
- ? O['method']
418
- : O extends { sideEffect: true }
419
- ? 'POST'
420
- : 'GET'
431
+ 'method' extends keyof O ? O['method']
432
+ : O extends { sideEffect: true } ? 'POST'
433
+ : 'GET'
421
434
  >,
422
- O['process'] extends {}
423
- ? ReturnType<O['process']>
424
- : any /*Denormalize<O['schema']>*/
435
+ O['process'] extends {} ? ReturnType<O['process']>
436
+ : any /*Denormalize<O['schema']>*/
425
437
  >,
426
438
  O['schema']
427
439
  >;
@@ -434,39 +446,35 @@ export interface RestEndpointConstructor {
434
446
  ...options
435
447
  }: RestEndpointConstructorOptions<O> & Readonly<O>): RestInstance<
436
448
  RestFetch<
437
- 'searchParams' extends keyof O
438
- ? O['searchParams'] extends undefined
439
- ? PathArgs<O['path']>
440
- : O['searchParams'] & PathArgs<O['path']>
441
- : PathArgs<O['path']>,
449
+ 'searchParams' extends keyof O ?
450
+ O['searchParams'] extends undefined ?
451
+ PathArgs<O['path']>
452
+ : O['searchParams'] & PathArgs<O['path']>
453
+ : PathArgs<O['path']>,
442
454
  OptionsToBodyArgument<
443
455
  O,
444
- 'method' extends keyof O
445
- ? O['method']
446
- : O extends { sideEffect: true }
447
- ? 'POST'
448
- : 'GET'
456
+ 'method' extends keyof O ? O['method']
457
+ : O extends { sideEffect: true } ? 'POST'
458
+ : 'GET'
449
459
  >,
450
- O['process'] extends {}
451
- ? ReturnType<O['process']>
452
- : any /*Denormalize<O['schema']>*/
460
+ O['process'] extends {} ? ReturnType<O['process']>
461
+ : any /*Denormalize<O['schema']>*/
453
462
  >,
454
463
  'schema' extends keyof O ? O['schema'] : undefined,
455
- 'sideEffect' extends keyof O
456
- ? Extract<O['sideEffect'], undefined | true>
457
- : MethodToSide<O['method']>,
458
- 'method' extends keyof O
459
- ? O
460
- : O & {
461
- method: O extends { sideEffect: true } ? 'POST' : 'GET';
462
- }
464
+ 'sideEffect' extends keyof O ? Extract<O['sideEffect'], undefined | true>
465
+ : MethodToSide<O['method']>,
466
+ 'method' extends keyof O ? O
467
+ : O & {
468
+ method: O extends { sideEffect: true } ? 'POST' : 'GET';
469
+ }
463
470
  >;
464
471
  readonly prototype: RestInstanceBase;
465
472
  }
466
473
 
467
- export type MethodToSide<M> = M extends string
468
- ? M extends 'GET'
469
- ? undefined
474
+ export type MethodToSide<M> =
475
+ M extends string ?
476
+ M extends 'GET' ?
477
+ undefined
470
478
  : true
471
479
  : undefined;
472
480
 
@@ -486,29 +494,27 @@ export type RestType<
486
494
  // eslint-disable-next-line @typescript-eslint/ban-types
487
495
  > = IfTypeScriptLooseNull<
488
496
  RestInstance<
489
- keyof UrlParams extends never
490
- ? (this: EndpointInstanceInterface, body?: Body) => Promise<R>
491
- : // even with loose null, this will only be true when all members are optional
492
- {} extends UrlParams
493
- ?
494
- | ((this: EndpointInstanceInterface, body?: Body) => Promise<R>)
495
- | ((
496
- this: EndpointInstanceInterface,
497
- params: UrlParams,
498
- body?: Body,
499
- ) => Promise<R>)
500
- : (
497
+ keyof UrlParams extends never ?
498
+ (this: EndpointInstanceInterface, body?: Body) => Promise<R>
499
+ : // even with loose null, this will only be true when all members are optional
500
+ {} extends UrlParams ?
501
+ | ((this: EndpointInstanceInterface, body?: Body) => Promise<R>)
502
+ | ((
501
503
  this: EndpointInstanceInterface,
502
504
  params: UrlParams,
503
505
  body?: Body,
504
- ) => Promise<R>,
506
+ ) => Promise<R>)
507
+ : (
508
+ this: EndpointInstanceInterface,
509
+ params: UrlParams,
510
+ body?: Body,
511
+ ) => Promise<R>,
505
512
  S,
506
513
  M,
507
514
  O
508
515
  >,
509
- Body extends {}
510
- ? RestTypeWithBody<UrlParams, S, M, Body, R, O>
511
- : RestTypeNoBody<UrlParams, S, M, R, O>
516
+ Body extends {} ? RestTypeWithBody<UrlParams, S, M, Body, R, O>
517
+ : RestTypeNoBody<UrlParams, S, M, R, O>
512
518
  >;
513
519
 
514
520
  export type RestTypeWithBody<
@@ -545,50 +551,40 @@ export type RestFetch<
545
551
  > = IfTypeScriptLooseNull<
546
552
  | ParamFetchNoBody<UrlParams, Resolve>
547
553
  | ParamFetchWithBody<UrlParams, Body, Resolve>,
548
- Body extends {}
549
- ? ParamFetchWithBody<UrlParams, Body, Resolve>
550
- : ParamFetchNoBody<UrlParams, Resolve>
554
+ Body extends {} ? ParamFetchWithBody<UrlParams, Body, Resolve>
555
+ : ParamFetchNoBody<UrlParams, Resolve>
551
556
  >;
552
557
 
553
558
  export type ParamFetchWithBody<P, B = {}, R = any> =
554
559
  // we must always allow undefined in a union and give it a type without params
555
- P extends undefined
556
- ? (this: EndpointInstanceInterface, body: B) => Promise<R>
557
- : // even with loose null, this will only be true when all members are optional
558
- {} extends P
559
- ? // this safely handles PathArgs with no members that results in a simple `unknown` type
560
- keyof P extends never
561
- ? (this: EndpointInstanceInterface, body: B) => Promise<R>
562
- :
563
- | ((
564
- this: EndpointInstanceInterface,
565
- params: P,
566
- body: B,
567
- ) => Promise<R>)
568
- | ((this: EndpointInstanceInterface, body: B) => Promise<R>)
569
- : (this: EndpointInstanceInterface, params: P, body: B) => Promise<R>;
560
+ P extends undefined ? (this: EndpointInstanceInterface, body: B) => Promise<R>
561
+ : // even with loose null, this will only be true when all members are optional
562
+ {} extends P ?
563
+ // this safely handles PathArgs with no members that results in a simple `unknown` type
564
+ keyof P extends never ?
565
+ (this: EndpointInstanceInterface, body: B) => Promise<R>
566
+ : | ((this: EndpointInstanceInterface, params: P, body: B) => Promise<R>)
567
+ | ((this: EndpointInstanceInterface, body: B) => Promise<R>)
568
+ : (this: EndpointInstanceInterface, params: P, body: B) => Promise<R>;
570
569
 
571
570
  export type ParamFetchNoBody<P, R = any> =
572
571
  // we must always allow undefined in a union and give it a type without params
573
- P extends undefined
574
- ? (this: EndpointInstanceInterface) => Promise<R>
575
- : // even with loose null, this will only be true when all members are optional
576
- {} extends P
577
- ? // this safely handles PathArgs with no members that results in a simple `unknown` type
578
- keyof P extends never
579
- ? (this: EndpointInstanceInterface) => Promise<R>
580
- :
581
- | ((this: EndpointInstanceInterface, params: P) => Promise<R>)
582
- | ((this: EndpointInstanceInterface) => Promise<R>)
583
- : (this: EndpointInstanceInterface, params: P) => Promise<R>;
572
+ P extends undefined ? (this: EndpointInstanceInterface) => Promise<R>
573
+ : // even with loose null, this will only be true when all members are optional
574
+ {} extends P ?
575
+ // this safely handles PathArgs with no members that results in a simple `unknown` type
576
+ keyof P extends never ?
577
+ (this: EndpointInstanceInterface) => Promise<R>
578
+ : | ((this: EndpointInstanceInterface, params: P) => Promise<R>)
579
+ | ((this: EndpointInstanceInterface) => Promise<R>)
580
+ : (this: EndpointInstanceInterface, params: P) => Promise<R>;
584
581
 
585
582
  type IfTypeScriptLooseNull<Y, N> = 1 | undefined extends 1 ? Y : N;
586
583
 
587
584
  export type KeyofRestEndpoint = keyof RestInstance;
588
585
 
589
- export type FromFallBack<K extends keyof E, O, E> = K extends keyof O
590
- ? O[K]
591
- : E[K];
586
+ export type FromFallBack<K extends keyof E, O, E> =
587
+ K extends keyof O ? O[K] : E[K];
592
588
 
593
589
  export type FetchMutate<
594
590
  A extends readonly any[] = // eslint-disable-next-line @typescript-eslint/ban-types
@@ -604,9 +600,8 @@ export type FetchGet<A extends readonly any[] = [any], R = any> = (
604
600
  ) => Promise<R>;
605
601
 
606
602
  export type Defaults<O, D> = {
607
- [K in keyof O | keyof D]: K extends keyof O
608
- ? Exclude<O[K], undefined>
609
- : D[Extract<K, keyof D>];
603
+ [K in keyof O | keyof D]: K extends keyof O ? Exclude<O[K], undefined>
604
+ : D[Extract<K, keyof D>];
610
605
  };
611
606
 
612
607
  export type GetEndpoint<
@@ -621,11 +616,11 @@ export type GetEndpoint<
621
616
  schema: Schema;
622
617
  },
623
618
  > = RestTypeNoBody<
624
- 'searchParams' extends keyof O
625
- ? O['searchParams'] extends undefined
626
- ? PathArgs<O['path']>
627
- : O['searchParams'] & PathArgs<O['path']>
628
- : PathArgs<O['path']>,
619
+ 'searchParams' extends keyof O ?
620
+ O['searchParams'] extends undefined ?
621
+ PathArgs<O['path']>
622
+ : O['searchParams'] & PathArgs<O['path']>
623
+ : PathArgs<O['path']>,
629
624
  O['schema'],
630
625
  undefined,
631
626
  any,
@@ -646,11 +641,11 @@ export type MutateEndpoint<
646
641
  schema: Schema;
647
642
  },
648
643
  > = RestTypeWithBody<
649
- 'searchParams' extends keyof O
650
- ? O['searchParams'] extends undefined
651
- ? PathArgs<O['path']>
652
- : O['searchParams'] & PathArgs<O['path']>
653
- : PathArgs<O['path']>,
644
+ 'searchParams' extends keyof O ?
645
+ O['searchParams'] extends undefined ?
646
+ PathArgs<O['path']>
647
+ : O['searchParams'] & PathArgs<O['path']>
648
+ : PathArgs<O['path']>,
654
649
  O['schema'],
655
650
  true,
656
651
  O['body'],