@data-client/rest 0.10.0 → 0.11.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/README.md +4 -3
- package/dist/index.js +5 -6
- package/dist/index.umd.min.js +1 -1
- package/legacy/NetworkError.js +1 -1
- package/legacy/OptionsToFunction.js +1 -1
- package/legacy/RestEndpoint.js +1 -1
- package/legacy/RestEndpointTypeHelp.js +1 -1
- package/legacy/RestEndpointTypes.js +1 -1
- package/legacy/RestHelpers.js +1 -1
- package/legacy/createResource.js +7 -8
- package/legacy/extractCollection.js +1 -1
- package/legacy/extractObject.js +1 -1
- package/legacy/hookifyResource.js +1 -1
- package/legacy/index.js +1 -1
- package/legacy/mapCollection.js +1 -1
- package/legacy/next/index.js +1 -1
- package/legacy/paginatedCollections.js +1 -1
- package/legacy/paramsToString.js +1 -1
- package/legacy/paramsToString.native.js +1 -1
- package/legacy/pathTypes.js +1 -1
- package/legacy/resourceExtendable.js +1 -1
- package/legacy/resourceExtensionTypes.js +1 -1
- package/legacy/resourceTypes.js +1 -1
- package/legacy/test-fixtures.js +1 -1
- package/legacy/utiltypes.js +1 -1
- package/lib/NetworkError.js +1 -1
- package/lib/OptionsToFunction.js +1 -1
- package/lib/RestEndpoint.js +1 -1
- package/lib/RestEndpointTypeHelp.js +1 -1
- package/lib/RestEndpointTypes.d.ts +3 -1
- package/lib/RestEndpointTypes.d.ts.map +1 -1
- package/lib/RestEndpointTypes.js +1 -1
- package/lib/RestHelpers.js +1 -1
- package/lib/createResource.d.ts.map +1 -1
- package/lib/createResource.js +7 -8
- package/lib/extractCollection.js +1 -1
- package/lib/extractObject.js +1 -1
- package/lib/hookifyResource.js +1 -1
- package/lib/index.js +1 -1
- package/lib/mapCollection.js +1 -1
- package/lib/next/index.js +1 -1
- package/lib/paginatedCollections.js +1 -1
- package/lib/paramsToString.js +1 -1
- package/lib/paramsToString.native.js +1 -1
- package/lib/pathTypes.js +1 -1
- package/lib/resourceExtendable.js +1 -1
- package/lib/resourceExtensionTypes.js +1 -1
- package/lib/resourceTypes.d.ts +4 -8
- package/lib/resourceTypes.d.ts.map +1 -1
- package/lib/resourceTypes.js +1 -1
- package/lib/test-fixtures.js +1 -1
- package/lib/utiltypes.js +1 -1
- package/package.json +2 -2
- package/src/RestEndpointTypes.ts +10 -20
- package/src/__tests__/createResource.test.ts +42 -2
- package/src/createResource.ts +7 -12
- package/src/resourceTypes.ts +16 -15
- package/ts4.0/RestEndpointTypes.d.ts +9 -1
- package/ts4.0/resourceTypes.d.ts +4 -8
- package/ts4.1/RestEndpointTypes.d.ts +9 -1
- package/ts4.1/resourceTypes.d.ts +4 -8
package/lib/test-fixtures.js
CHANGED
|
@@ -108,4 +108,4 @@ export const paginatedSecondPage = {
|
|
|
108
108
|
results: moreNested
|
|
109
109
|
}
|
|
110
110
|
};
|
|
111
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
111
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXlsb2FkIiwiaWQiLCJ0aXRsZSIsImNvbnRlbnQiLCJ0YWdzIiwiY3JlYXRlUGF5bG9hZCIsImFydGljbGVzUGFnZXMiLCJwcmV2UGFnZSIsIm5leHRQYWdlIiwicmVzdWx0cyIsInVzZXJzIiwidXNlcm5hbWUiLCJlbWFpbCIsImlzQWRtaW4iLCJuZXN0ZWQiLCJhdXRob3IiLCJtb3JlTmVzdGVkIiwidmFsdWVzRml4dHVyZSIsImZpcnN0Iiwic2Vjb25kIiwibmFtZSIsInBhZ2luYXRlZEZpcnN0UGFnZSIsImRhdGEiLCJwYWdpbmF0ZWRTZWNvbmRQYWdlIl0sInNvdXJjZXMiOlsiLi4vc3JjL3Rlc3QtZml4dHVyZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHBheWxvYWQgPSB7XG4gIGlkOiA1LFxuICB0aXRsZTogJ2hpIGhvJyxcbiAgY29udGVudDogJ3doYXRldmVyJyxcbiAgdGFnczogWydhJywgJ2Jlc3QnLCAncmVhY3QnXSxcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYXlsb2FkID0ge1xuICBpZDogMSxcbiAgdGl0bGU6ICdoaSBobycsXG4gIGNvbnRlbnQ6ICd3aGF0ZXZlcicsXG4gIHRhZ3M6IFsnYScsICdiZXN0JywgJ3JlYWN0J10sXG59O1xuXG5leHBvcnQgY29uc3QgYXJ0aWNsZXNQYWdlcyA9IHtcbiAgcHJldlBhZ2U6ICcyM2FzZGwnLFxuICBuZXh0UGFnZTogJ3MzZjMnLFxuICByZXN1bHRzOiBbXG4gICAge1xuICAgICAgaWQ6IDIzLFxuICAgICAgdGl0bGU6ICd0aGUgZmlyc3QgZHJhZnQnLFxuICAgICAgY29udGVudDogJ3RoZSBiZXN0IHRoaW5ncyBpbiBsaWZlIGNvbSBlZnJlZScsXG4gICAgICB0YWdzOiBbJ29uZScsICd0d28nXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA0NCxcbiAgICAgIHRpdGxlOiAndGhlIHNlY29uZCBib29rJyxcbiAgICAgIGNvbnRlbnQ6ICd0aGUgYmVzdCB0aGluZ3MgaW4gbGlmZSBjb20gZWZyZWUnLFxuICAgICAgdGFnczogWydoYmgnLCAnd2V3J10sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMixcbiAgICAgIHRpdGxlOiAndGhlIHRoaXJkIG5vdmVsJyxcbiAgICAgIGNvbnRlbnQ6ICd0aGUgYmVzdCB0aGluZ3MgaW4gbGlmZSBjb20gZWZyZWUnLFxuICAgICAgdGFnczogWydmcmVlJywgJ2hvbmV5J10sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogNjQzLFxuICAgICAgdGl0bGU6ICdhIGxvbmcgdGltZSBhZ28nLFxuICAgICAgY29udGVudDogJ3RoZSBiZXN0IHRoaW5ncyBpbiBsaWZlIGNvbSBlZnJlZScsXG4gICAgfSxcbiAgXSxcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VycyA9IFtcbiAge1xuICAgIGlkOiAyMyxcbiAgICB1c2VybmFtZTogJ2JvYicsXG4gICAgZW1haWw6ICdib2JAYm9iLmNvbScsXG4gICAgaXNBZG1pbjogZmFsc2UsXG4gIH0sXG4gIHtcbiAgICBpZDogNzM0MixcbiAgICB1c2VybmFtZTogJ2xpbmRzZXknLFxuICAgIGVtYWlsOiAnbGluZHNleUBib2IuY29tJyxcbiAgICBpc0FkbWluOiB0cnVlLFxuICB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IG5lc3RlZCA9IFtcbiAge1xuICAgIGlkOiA1LFxuICAgIHRpdGxlOiAnaGkgaG8nLFxuICAgIGNvbnRlbnQ6ICd3aGF0ZXZlcicsXG4gICAgdGFnczogWydhJywgJ2Jlc3QnLCAncmVhY3QnXSxcbiAgICBhdXRob3I6IHtcbiAgICAgIGlkOiAyMyxcbiAgICAgIHVzZXJuYW1lOiAnYm9iJyxcbiAgICB9LFxuICB9LFxuICB7XG4gICAgaWQ6IDMsXG4gICAgdGl0bGU6ICd0aGUgbmV4dCB0aW1lJyxcbiAgICBjb250ZW50OiAnd2hhdGV2ZXInLFxuICAgIGF1dGhvcjoge1xuICAgICAgaWQ6IDIzLFxuICAgICAgdXNlcm5hbWU6ICdjaGFybGVzJyxcbiAgICAgIGVtYWlsOiAnYm9iQGJvYi5jb20nLFxuICAgIH0sXG4gIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgbW9yZU5lc3RlZCA9IFtcbiAge1xuICAgIGlkOiA3LFxuICAgIHRpdGxlOiAnYXJ0aWNsZSA3JyxcbiAgICBjb250ZW50OiAnd2hhdGV2ZXInLFxuICAgIHRhZ3M6IFsnYmxhaCddLFxuICAgIGF1dGhvcjoge1xuICAgICAgaWQ6IDIzLFxuICAgICAgdXNlcm5hbWU6ICdib2InLFxuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBpZDogOCxcbiAgICB0aXRsZTogJ2FydGljbGUgOCcsXG4gICAgY29udGVudDogJ3doYXRldmVyJyxcbiAgICBhdXRob3I6IHtcbiAgICAgIGlkOiAyNyxcbiAgICAgIHVzZXJuYW1lOiAnemFjJyxcbiAgICAgIGVtYWlsOiAnemFjQGJvYi5jb20nLFxuICAgIH0sXG4gIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgdmFsdWVzRml4dHVyZSA9IHtcbiAgZmlyc3Q6IHtcbiAgICBpZDogMSxcbiAgICB0aXRsZTogJ2ZpcnN0IHRoaW5nJyxcbiAgICBjb250ZW50OiAnYmxhaCcsXG4gICAgdGFnczogW10sXG4gIH0sXG4gIHNlY29uZDoge1xuICAgIGlkOiAyLFxuICAgIG5hbWU6ICdzZWNvbmQgdGhpbmcnLFxuICAgIGNvbnRlbnQ6ICdibGFoJyxcbiAgICB0YWdzOiBbXSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0ZWRGaXJzdFBhZ2UgPSB7XG4gIG5leHRQYWdlOiAnMicsXG4gIGRhdGE6IHsgcmVzdWx0czogbmVzdGVkIH0sXG59O1xuXG5leHBvcnQgY29uc3QgcGFnaW5hdGVkU2Vjb25kUGFnZSA9IHtcbiAgZGF0YTogeyByZXN1bHRzOiBtb3JlTmVzdGVkIH0sXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU1BLE9BQU8sR0FBRztFQUNyQkMsRUFBRSxFQUFFLENBQUM7RUFDTEMsS0FBSyxFQUFFLE9BQU87RUFDZEMsT0FBTyxFQUFFLFVBQVU7RUFDbkJD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
|
package/lib/utiltypes.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3V0aWx0eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogRXh0cmFjdHMgb25seSB0aGUga2V5cyB0aGF0IHdpbGwgYmUgcmVxdWlyZWRcbiAqXG4gKiBSZW1vdmVzIG9wdGlvbmFsLCBhcyB3ZWxsIGFzIHVuYm91bmRlZCAoYWthICdzdHJpbmcnKVxuICpcbiAqIEBleGFtcGxlXG4gYGBgXG5SZXF1aXJlZEtleXM8e1xuICBvcHQ/OiBzdHJpbmc7XG4gIGJvYjogc3RyaW5nO1xuICBhbGljZTogbnVtYmVyO1xuICBbazogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xufT4gLy8gPSAnYm9iJyB8ICdhbGljZSdcbiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgUmVxdWlyZWRLZXlzPFQ+ID0gVmFsdWVzPE9ubHlSZXF1aXJlZDxUPj47XG5cbnR5cGUgT25seVJlcXVpcmVkPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUIGFzIHN0cmluZyBleHRlbmRzIEsgPyBuZXZlciA6IEtdLT86IHt9IGV4dGVuZHMgUGljazxULCBLPiA/
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3V0aWx0eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogRXh0cmFjdHMgb25seSB0aGUga2V5cyB0aGF0IHdpbGwgYmUgcmVxdWlyZWRcbiAqXG4gKiBSZW1vdmVzIG9wdGlvbmFsLCBhcyB3ZWxsIGFzIHVuYm91bmRlZCAoYWthICdzdHJpbmcnKVxuICpcbiAqIEBleGFtcGxlXG4gYGBgXG5SZXF1aXJlZEtleXM8e1xuICBvcHQ/OiBzdHJpbmc7XG4gIGJvYjogc3RyaW5nO1xuICBhbGljZTogbnVtYmVyO1xuICBbazogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xufT4gLy8gPSAnYm9iJyB8ICdhbGljZSdcbiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgUmVxdWlyZWRLZXlzPFQ+ID0gVmFsdWVzPE9ubHlSZXF1aXJlZDxUPj47XG5cbnR5cGUgT25seVJlcXVpcmVkPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUIGFzIHN0cmluZyBleHRlbmRzIEsgPyBuZXZlciA6IEtdLT86IHt9IGV4dGVuZHMgUGljazxULCBLPiA/XG4gICAgbmV2ZXJcbiAgOiBLO1xufTtcblxuLy8gZXhjbHVkZSBudW1iZXIgb25seSByZXF1aXJlZCBmb3IgdHlwZXNjcmlwdCA0LjQgYW5kIGJlbG93XG4vLyBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvcGxheT90cz00LjQuNCNjb2RlL0M0VHdEZ3BnQkFnbEM4VURlVUJHQjdWQXVLQm5ZQVRnSllCMkE1Z054UURhQTFqdnNlUUxvNENzQVBvNldWQUw0VUFzQUNnUklpQUE4dzZBc0NpaElVQUVvUUFqZ0ZjaUJDQUJNQTBoQkM0QVBBQlVBZkFpZ0ExQUlZQWJkUkJNQjVFdlpBcU5XM1dmUG1oVVdGSmFWbDVjR2czRHk5TmJSMC1LeVFSS0JvOUtGSW9Xa04wQURNb1V5aGJYRHhDSGloSllBZ1NIV0swZ0g0b0VnZ0FOd2dDS0J3OVpnQmFPcHdrUG5LSlN1cmlnQVVpQUdOYU13QWFLRDF6WkpTb0JxYldnbVdVenNDQk1XRUZhRHRIWndURVV6cHN2Tk5tUUpGRHFBQmhLeWpQTlZqZkdDV0RpS2dBSVQrVml5SUZ5VDN1djBlejBReHljSmtlNWlBQVxudHlwZSBWYWx1ZXM8VD4gPSBUW0V4Y2x1ZGU8a2V5b2YgVCwgbnVtYmVyPl07XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@data-client/rest",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Endpoints for REST APIs",
|
|
5
5
|
"homepage": "https://dataclient.io/rest",
|
|
6
6
|
"repository": {
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
"license": "Apache-2.0",
|
|
127
127
|
"dependencies": {
|
|
128
128
|
"@babel/runtime": "^7.17.0",
|
|
129
|
-
"@data-client/endpoint": "^0.
|
|
129
|
+
"@data-client/endpoint": "^0.11.0",
|
|
130
130
|
"path-to-regexp": "^6.2.1"
|
|
131
131
|
},
|
|
132
132
|
"devDependencies": {
|
package/src/RestEndpointTypes.ts
CHANGED
|
@@ -493,26 +493,7 @@ export type RestType<
|
|
|
493
493
|
} = { path: string; paginationField: string },
|
|
494
494
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
495
495
|
> = IfTypeScriptLooseNull<
|
|
496
|
-
RestInstance<
|
|
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
|
-
| ((
|
|
503
|
-
this: EndpointInstanceInterface,
|
|
504
|
-
params: UrlParams,
|
|
505
|
-
body?: Body,
|
|
506
|
-
) => Promise<R>)
|
|
507
|
-
: (
|
|
508
|
-
this: EndpointInstanceInterface,
|
|
509
|
-
params: UrlParams,
|
|
510
|
-
body?: Body,
|
|
511
|
-
) => Promise<R>,
|
|
512
|
-
S,
|
|
513
|
-
M,
|
|
514
|
-
O
|
|
515
|
-
>,
|
|
496
|
+
RestInstance<RestFetch<UrlParams, Body, R>, S, M, O>,
|
|
516
497
|
Body extends {} ? RestTypeWithBody<UrlParams, S, M, Body, R, O>
|
|
517
498
|
: RestTypeNoBody<UrlParams, S, M, R, O>
|
|
518
499
|
>;
|
|
@@ -579,6 +560,15 @@ export type ParamFetchNoBody<P, R = any> =
|
|
|
579
560
|
| ((this: EndpointInstanceInterface) => Promise<R>)
|
|
580
561
|
: (this: EndpointInstanceInterface, params: P) => Promise<R>;
|
|
581
562
|
|
|
563
|
+
// same algorithm, but for Args (aka readonly any[])
|
|
564
|
+
export type ParamToArgs<P> =
|
|
565
|
+
P extends undefined ? []
|
|
566
|
+
: {} extends P ?
|
|
567
|
+
keyof P extends never ?
|
|
568
|
+
[]
|
|
569
|
+
: [] | [P]
|
|
570
|
+
: [P];
|
|
571
|
+
|
|
582
572
|
type IfTypeScriptLooseNull<Y, N> = 1 | undefined extends 1 ? Y : N;
|
|
583
573
|
|
|
584
574
|
export type KeyofRestEndpoint = keyof RestInstance;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Entity, schema } from '@data-client/endpoint';
|
|
1
|
+
import { Entity, schema, SchemaArgs } from '@data-client/endpoint';
|
|
2
2
|
import {
|
|
3
3
|
CacheProvider,
|
|
4
4
|
useCache,
|
|
5
5
|
useController,
|
|
6
6
|
Controller,
|
|
7
7
|
useSuspense,
|
|
8
|
+
useQuery,
|
|
8
9
|
} from '@data-client/react';
|
|
9
10
|
import { makeRenderDataClient } from '@data-client/test';
|
|
10
11
|
import { act } from '@testing-library/react-hooks';
|
|
@@ -205,6 +206,9 @@ describe('createResource()', () => {
|
|
|
205
206
|
expect(user.username).toBe('newbob');
|
|
206
207
|
expect(user).toBeInstanceOf(User);
|
|
207
208
|
expect(user.isAdmin).toBe(false);
|
|
209
|
+
|
|
210
|
+
// check types
|
|
211
|
+
() => controller.getResponse(UserResource.current, controller.getState());
|
|
208
212
|
});
|
|
209
213
|
|
|
210
214
|
it('can override endpoint options', async () => {
|
|
@@ -837,7 +841,7 @@ describe('createResource()', () => {
|
|
|
837
841
|
}
|
|
838
842
|
const FeedUnion = new schema.Union(
|
|
839
843
|
{ post: FeedPost, link: FeedLink },
|
|
840
|
-
'type'
|
|
844
|
+
'type',
|
|
841
845
|
);
|
|
842
846
|
const FeedResource = createResource({
|
|
843
847
|
path: 'http\\://test.com/feed/:id',
|
|
@@ -1094,4 +1098,40 @@ describe('createResource()', () => {
|
|
|
1094
1098
|
// this is set in our override
|
|
1095
1099
|
expect(result.current[0].isAdmin).toBe(true);
|
|
1096
1100
|
});
|
|
1101
|
+
|
|
1102
|
+
it('searchParams are used in Queries based on getList.schema', () => {
|
|
1103
|
+
class Todo extends Entity {
|
|
1104
|
+
id = '';
|
|
1105
|
+
readonly userId: number = 0;
|
|
1106
|
+
readonly title: string = '';
|
|
1107
|
+
readonly completed: boolean = false;
|
|
1108
|
+
|
|
1109
|
+
static key = 'Todo';
|
|
1110
|
+
|
|
1111
|
+
pk() {
|
|
1112
|
+
return this.id;
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
const TodoResource = createResource({
|
|
1117
|
+
path: '/todos/:id',
|
|
1118
|
+
schema: Todo,
|
|
1119
|
+
optimistic: true,
|
|
1120
|
+
searchParams: {} as { userId?: string | number } | undefined,
|
|
1121
|
+
});
|
|
1122
|
+
|
|
1123
|
+
const queryRemainingTodos = new schema.Query(
|
|
1124
|
+
TodoResource.getList.schema,
|
|
1125
|
+
entries => entries && entries.filter(todo => !todo.completed).length,
|
|
1126
|
+
);
|
|
1127
|
+
|
|
1128
|
+
() => useQuery(queryRemainingTodos, { userId: 1 });
|
|
1129
|
+
() => useQuery(queryRemainingTodos);
|
|
1130
|
+
// @ts-expect-error
|
|
1131
|
+
() => useQuery(queryRemainingTodos, { user: 1 });
|
|
1132
|
+
// @ts-expect-error
|
|
1133
|
+
() => useQuery(queryRemainingTodos, 5);
|
|
1134
|
+
// @ts-expect-error
|
|
1135
|
+
() => useQuery(queryRemainingTodos, { userId: 1 }, 5);
|
|
1136
|
+
});
|
|
1097
1137
|
});
|
package/src/createResource.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
SnapshotInterface,
|
|
4
|
-
schema,
|
|
5
|
-
} from '@data-client/endpoint';
|
|
1
|
+
import { schema } from '@data-client/endpoint';
|
|
2
|
+
import type { SnapshotInterface, Queryable } from '@data-client/endpoint';
|
|
6
3
|
|
|
7
|
-
import { ResourcePath } from './pathTypes.js';
|
|
8
4
|
import {
|
|
9
5
|
ResourceGenerics,
|
|
10
6
|
ResourceOptions,
|
|
@@ -52,8 +48,9 @@ export default function createResource<O extends ResourceGenerics>({
|
|
|
52
48
|
}) as any;
|
|
53
49
|
if (optimistic) {
|
|
54
50
|
(extraMutateOptions as any).getOptimisticResponse = optimisticUpdate;
|
|
51
|
+
// TODO: Check that schema is a queryable, otherwise this doesn't make sense
|
|
55
52
|
(extraPartialOptions as any).getOptimisticResponse = optimisticPartial(
|
|
56
|
-
|
|
53
|
+
schema as any,
|
|
57
54
|
);
|
|
58
55
|
}
|
|
59
56
|
const getList = new Endpoint({
|
|
@@ -141,12 +138,10 @@ function optimisticUpdate(snap: SnapshotInterface, params: any, body: any) {
|
|
|
141
138
|
...ensurePojo(body),
|
|
142
139
|
};
|
|
143
140
|
}
|
|
144
|
-
function optimisticPartial(
|
|
145
|
-
getEndpoint: GetEndpoint<{ path: ResourcePath; schema: any }>,
|
|
146
|
-
) {
|
|
141
|
+
function optimisticPartial(schema: Queryable) {
|
|
147
142
|
return function (snap: SnapshotInterface, params: any, body: any) {
|
|
148
|
-
const
|
|
149
|
-
if (!data) throw
|
|
143
|
+
const data = snap.get(schema, params);
|
|
144
|
+
if (!data) throw snap.abort;
|
|
150
145
|
return {
|
|
151
146
|
...params,
|
|
152
147
|
...data,
|
package/src/resourceTypes.ts
CHANGED
|
@@ -2,11 +2,17 @@ import type { Collection, schema } from '@data-client/endpoint';
|
|
|
2
2
|
import type { Schema } from '@data-client/endpoint';
|
|
3
3
|
import type { Denormalize } from '@data-client/endpoint';
|
|
4
4
|
|
|
5
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
KeysToArgs,
|
|
7
|
+
PathArgs,
|
|
8
|
+
ResourcePath,
|
|
9
|
+
ShortenPath,
|
|
10
|
+
} from './pathTypes.js';
|
|
6
11
|
import { Extendable } from './resourceExtendable.js';
|
|
7
12
|
import RestEndpoint, {
|
|
8
13
|
GetEndpoint,
|
|
9
14
|
MutateEndpoint,
|
|
15
|
+
ParamToArgs,
|
|
10
16
|
RestInstanceBase,
|
|
11
17
|
RestTypeNoBody,
|
|
12
18
|
} from './RestEndpoint.js';
|
|
@@ -74,13 +80,11 @@ export interface Resource<
|
|
|
74
80
|
path: ShortenPath<O['path']>;
|
|
75
81
|
schema: schema.Collection<
|
|
76
82
|
[O['schema']],
|
|
77
|
-
|
|
78
|
-
'searchParams' extends
|
|
79
|
-
O['
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
: PathArgs<ShortenPath<O['path']>>,
|
|
83
|
-
]
|
|
83
|
+
ParamToArgs<
|
|
84
|
+
O['searchParams'] extends undefined ?
|
|
85
|
+
KeysToArgs<ShortenPath<O['path']>>
|
|
86
|
+
: O['searchParams'] & PathArgs<ShortenPath<O['path']>>
|
|
87
|
+
>
|
|
84
88
|
>;
|
|
85
89
|
body: 'body' extends keyof O ? O['body']
|
|
86
90
|
: Partial<Denormalize<O['schema']>>;
|
|
@@ -92,13 +96,10 @@ export interface Resource<
|
|
|
92
96
|
path: ShortenPath<O['path']>;
|
|
93
97
|
schema: schema.Collection<
|
|
94
98
|
[O['schema']],
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
O['
|
|
98
|
-
|
|
99
|
-
: O['searchParams'] & PathArgs<ShortenPath<O['path']>>
|
|
100
|
-
: PathArgs<ShortenPath<O['path']>>,
|
|
101
|
-
]
|
|
99
|
+
ParamToArgs<
|
|
100
|
+
(Record<string, number | string | boolean> | undefined) &
|
|
101
|
+
PathArgs<ShortenPath<O['path']>>
|
|
102
|
+
>
|
|
102
103
|
>;
|
|
103
104
|
body: 'body' extends keyof O ? O['body']
|
|
104
105
|
: Partial<Denormalize<O['schema']>>;
|
|
@@ -243,7 +243,7 @@ export type RestType<UrlParams = any, Body = any, S extends Schema | undefined =
|
|
|
243
243
|
} = {
|
|
244
244
|
path: string;
|
|
245
245
|
paginationField: string;
|
|
246
|
-
}> = IfTypeScriptLooseNull<RestInstance<
|
|
246
|
+
}> = IfTypeScriptLooseNull<RestInstance<RestFetch<UrlParams, Body, R>, S, M, O>, Body extends {} ? RestTypeWithBody<UrlParams, S, M, Body, R, O> : RestTypeNoBody<UrlParams, S, M, R, O>>;
|
|
247
247
|
export type RestTypeWithBody<UrlParams = any, S extends Schema | undefined = Schema | undefined, M extends true | undefined = true | undefined, Body = any, R = any, O extends {
|
|
248
248
|
path: string;
|
|
249
249
|
body?: any;
|
|
@@ -264,6 +264,14 @@ export type RestTypeNoBody<UrlParams = any, S extends Schema | undefined = Schem
|
|
|
264
264
|
export type RestFetch<UrlParams, Body = {}, Resolve = any> = IfTypeScriptLooseNull<ParamFetchNoBody<UrlParams, Resolve> | ParamFetchWithBody<UrlParams, Body, Resolve>, Body extends {} ? ParamFetchWithBody<UrlParams, Body, Resolve> : ParamFetchNoBody<UrlParams, Resolve>>;
|
|
265
265
|
export type ParamFetchWithBody<P, B = {}, R = any> = P extends undefined ? (this: EndpointInstanceInterface, body: B) => Promise<R> : {} extends P ? keyof P extends never ? (this: EndpointInstanceInterface, body: B) => Promise<R> : ((this: EndpointInstanceInterface, params: P, body: B) => Promise<R>) | ((this: EndpointInstanceInterface, body: B) => Promise<R>) : (this: EndpointInstanceInterface, params: P, body: B) => Promise<R>;
|
|
266
266
|
export type ParamFetchNoBody<P, R = any> = P extends undefined ? (this: EndpointInstanceInterface) => Promise<R> : {} extends P ? keyof P extends never ? (this: EndpointInstanceInterface) => Promise<R> : ((this: EndpointInstanceInterface, params: P) => Promise<R>) | ((this: EndpointInstanceInterface) => Promise<R>) : (this: EndpointInstanceInterface, params: P) => Promise<R>;
|
|
267
|
+
export type ParamToArgs<P> = P extends undefined ? [
|
|
268
|
+
] : {} extends P ? keyof P extends never ? [
|
|
269
|
+
] : [
|
|
270
|
+
] | [
|
|
271
|
+
P
|
|
272
|
+
] : [
|
|
273
|
+
P
|
|
274
|
+
];
|
|
267
275
|
type IfTypeScriptLooseNull<Y, N> = 1 | undefined extends 1 ? Y : N;
|
|
268
276
|
export type KeyofRestEndpoint = keyof RestInstance;
|
|
269
277
|
export type FromFallBack<K extends keyof E, O, E> = K extends keyof O ? O[K] : E[K];
|
package/ts4.0/resourceTypes.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Collection, schema } from '@data-client/endpoint';
|
|
2
2
|
import type { Schema } from '@data-client/endpoint';
|
|
3
3
|
import type { Denormalize } from '@data-client/endpoint';
|
|
4
|
-
import type { PathArgs, ResourcePath, ShortenPath } from './pathTypes.js';
|
|
4
|
+
import type { KeysToArgs, PathArgs, ResourcePath, ShortenPath } from './pathTypes.js';
|
|
5
5
|
import { Extendable } from './resourceExtendable.js';
|
|
6
|
-
import RestEndpoint, { GetEndpoint, MutateEndpoint, RestInstanceBase, RestTypeNoBody } from './RestEndpoint.js';
|
|
6
|
+
import RestEndpoint, { GetEndpoint, MutateEndpoint, ParamToArgs, RestInstanceBase, RestTypeNoBody } from './RestEndpoint.js';
|
|
7
7
|
/** The typed (generic) options for a Resource */
|
|
8
8
|
export interface ResourceGenerics {
|
|
9
9
|
/** @see https://dataclient.io/rest/api/createResource#path */
|
|
@@ -68,18 +68,14 @@ export interface Resource<O extends ResourceGenerics = {
|
|
|
68
68
|
path: ShortenPath<O['path']>;
|
|
69
69
|
schema: schema.Collection<[
|
|
70
70
|
O['schema']
|
|
71
|
-
], [
|
|
72
|
-
'searchParams' extends keyof O ? O['searchParams'] extends undefined ? PathArgs<ShortenPath<O['path']>> : O['searchParams'] & PathArgs<ShortenPath<O['path']>> : PathArgs<ShortenPath<O['path']>>
|
|
73
|
-
]>;
|
|
71
|
+
], ParamToArgs<O['searchParams'] extends undefined ? KeysToArgs<ShortenPath<O['path']>> : O['searchParams'] & PathArgs<ShortenPath<O['path']>>>>;
|
|
74
72
|
body: 'body' extends keyof O ? O['body'] : Partial<Denormalize<O['schema']>>;
|
|
75
73
|
searchParams: O['searchParams'];
|
|
76
74
|
} & Pick<O, 'paginationField'>> : GetEndpoint<{
|
|
77
75
|
path: ShortenPath<O['path']>;
|
|
78
76
|
schema: schema.Collection<[
|
|
79
77
|
O['schema']
|
|
80
|
-
], [
|
|
81
|
-
'searchParams' extends keyof O ? O['searchParams'] extends undefined ? PathArgs<ShortenPath<O['path']>> : O['searchParams'] & PathArgs<ShortenPath<O['path']>> : PathArgs<ShortenPath<O['path']>>
|
|
82
|
-
]>;
|
|
78
|
+
], ParamToArgs<(Record<string, number | string | boolean> | undefined) & PathArgs<ShortenPath<O['path']>>>>;
|
|
83
79
|
body: 'body' extends keyof O ? O['body'] : Partial<Denormalize<O['schema']>>;
|
|
84
80
|
searchParams: Record<string, number | string | boolean> | undefined;
|
|
85
81
|
} & Pick<O, 'paginationField'>>;
|
|
@@ -243,7 +243,7 @@ export type RestType<UrlParams = any, Body = any, S extends Schema | undefined =
|
|
|
243
243
|
} = {
|
|
244
244
|
path: string;
|
|
245
245
|
paginationField: string;
|
|
246
|
-
}> = IfTypeScriptLooseNull<RestInstance<
|
|
246
|
+
}> = IfTypeScriptLooseNull<RestInstance<RestFetch<UrlParams, Body, R>, S, M, O>, Body extends {} ? RestTypeWithBody<UrlParams, S, M, Body, R, O> : RestTypeNoBody<UrlParams, S, M, R, O>>;
|
|
247
247
|
export type RestTypeWithBody<UrlParams = any, S extends Schema | undefined = Schema | undefined, M extends true | undefined = true | undefined, Body = any, R = any, O extends {
|
|
248
248
|
path: string;
|
|
249
249
|
body?: any;
|
|
@@ -264,6 +264,14 @@ export type RestTypeNoBody<UrlParams = any, S extends Schema | undefined = Schem
|
|
|
264
264
|
export type RestFetch<UrlParams, Body = {}, Resolve = any> = IfTypeScriptLooseNull<ParamFetchNoBody<UrlParams, Resolve> | ParamFetchWithBody<UrlParams, Body, Resolve>, Body extends {} ? ParamFetchWithBody<UrlParams, Body, Resolve> : ParamFetchNoBody<UrlParams, Resolve>>;
|
|
265
265
|
export type ParamFetchWithBody<P, B = {}, R = any> = P extends undefined ? (this: EndpointInstanceInterface, body: B) => Promise<R> : {} extends P ? keyof P extends never ? (this: EndpointInstanceInterface, body: B) => Promise<R> : ((this: EndpointInstanceInterface, params: P, body: B) => Promise<R>) | ((this: EndpointInstanceInterface, body: B) => Promise<R>) : (this: EndpointInstanceInterface, params: P, body: B) => Promise<R>;
|
|
266
266
|
export type ParamFetchNoBody<P, R = any> = P extends undefined ? (this: EndpointInstanceInterface) => Promise<R> : {} extends P ? keyof P extends never ? (this: EndpointInstanceInterface) => Promise<R> : ((this: EndpointInstanceInterface, params: P) => Promise<R>) | ((this: EndpointInstanceInterface) => Promise<R>) : (this: EndpointInstanceInterface, params: P) => Promise<R>;
|
|
267
|
+
export type ParamToArgs<P> = P extends undefined ? [
|
|
268
|
+
] : {} extends P ? keyof P extends never ? [
|
|
269
|
+
] : [
|
|
270
|
+
] | [
|
|
271
|
+
P
|
|
272
|
+
] : [
|
|
273
|
+
P
|
|
274
|
+
];
|
|
267
275
|
type IfTypeScriptLooseNull<Y, N> = 1 | undefined extends 1 ? Y : N;
|
|
268
276
|
export type KeyofRestEndpoint = keyof RestInstance;
|
|
269
277
|
export type FromFallBack<K extends keyof E, O, E> = K extends keyof O ? O[K] : E[K];
|
package/ts4.1/resourceTypes.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Collection, schema } from '@data-client/endpoint';
|
|
2
2
|
import type { Schema } from '@data-client/endpoint';
|
|
3
3
|
import type { Denormalize } from '@data-client/endpoint';
|
|
4
|
-
import type { PathArgs, ResourcePath, ShortenPath } from './pathTypes.js';
|
|
4
|
+
import type { KeysToArgs, PathArgs, ResourcePath, ShortenPath } from './pathTypes.js';
|
|
5
5
|
import { Extendable } from './resourceExtendable.js';
|
|
6
|
-
import RestEndpoint, { GetEndpoint, MutateEndpoint, RestInstanceBase, RestTypeNoBody } from './RestEndpoint.js';
|
|
6
|
+
import RestEndpoint, { GetEndpoint, MutateEndpoint, ParamToArgs, RestInstanceBase, RestTypeNoBody } from './RestEndpoint.js';
|
|
7
7
|
/** The typed (generic) options for a Resource */
|
|
8
8
|
export interface ResourceGenerics {
|
|
9
9
|
/** @see https://dataclient.io/rest/api/createResource#path */
|
|
@@ -68,18 +68,14 @@ export interface Resource<O extends ResourceGenerics = {
|
|
|
68
68
|
path: ShortenPath<O['path']>;
|
|
69
69
|
schema: schema.Collection<[
|
|
70
70
|
O['schema']
|
|
71
|
-
], [
|
|
72
|
-
'searchParams' extends keyof O ? O['searchParams'] extends undefined ? PathArgs<ShortenPath<O['path']>> : O['searchParams'] & PathArgs<ShortenPath<O['path']>> : PathArgs<ShortenPath<O['path']>>
|
|
73
|
-
]>;
|
|
71
|
+
], ParamToArgs<O['searchParams'] extends undefined ? KeysToArgs<ShortenPath<O['path']>> : O['searchParams'] & PathArgs<ShortenPath<O['path']>>>>;
|
|
74
72
|
body: 'body' extends keyof O ? O['body'] : Partial<Denormalize<O['schema']>>;
|
|
75
73
|
searchParams: O['searchParams'];
|
|
76
74
|
} & Pick<O, 'paginationField'>> : GetEndpoint<{
|
|
77
75
|
path: ShortenPath<O['path']>;
|
|
78
76
|
schema: schema.Collection<[
|
|
79
77
|
O['schema']
|
|
80
|
-
], [
|
|
81
|
-
'searchParams' extends keyof O ? O['searchParams'] extends undefined ? PathArgs<ShortenPath<O['path']>> : O['searchParams'] & PathArgs<ShortenPath<O['path']>> : PathArgs<ShortenPath<O['path']>>
|
|
82
|
-
]>;
|
|
78
|
+
], ParamToArgs<(Record<string, number | string | boolean> | undefined) & PathArgs<ShortenPath<O['path']>>>>;
|
|
83
79
|
body: 'body' extends keyof O ? O['body'] : Partial<Denormalize<O['schema']>>;
|
|
84
80
|
searchParams: Record<string, number | string | boolean> | undefined;
|
|
85
81
|
} & Pick<O, 'paginationField'>>;
|