@data-client/rest 0.15.5 → 0.15.7
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/CHANGELOG.md +64 -0
- package/dist/index.js +27 -0
- package/dist/index.umd.min.js +1 -1
- package/legacy/NetworkError.js +16 -1
- package/legacy/RestEndpoint.js +11 -1
- package/legacy/RestEndpointTypes.js +1 -1
- package/legacy/resource.js +3 -1
- package/legacy/resourceTypes.js +1 -1
- package/lib/NetworkError.d.ts +12 -0
- package/lib/NetworkError.d.ts.map +1 -1
- package/lib/NetworkError.js +16 -1
- package/lib/RestEndpoint.js +11 -1
- package/lib/RestEndpointTypes.d.ts +22 -6
- package/lib/RestEndpointTypes.d.ts.map +1 -1
- package/lib/RestEndpointTypes.js +1 -1
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js +3 -1
- package/lib/resourceTypes.d.ts +2 -0
- package/lib/resourceTypes.d.ts.map +1 -1
- package/lib/resourceTypes.js +1 -1
- package/package.json +3 -3
- package/src/NetworkError.ts +15 -0
- package/src/RestEndpoint.js +11 -0
- package/src/RestEndpointTypes.ts +36 -6
- package/src/__tests__/Resource.test.ts +75 -0
- package/src/__tests__/RestEndpoint.ts +152 -2
- package/src/__tests__/__snapshots__/RestEndpoint.ts.snap +2 -0
- package/src/__tests__/resource-construction.test.ts +536 -0
- package/src/resource.ts +2 -0
- package/src/resourceTypes.ts +2 -0
- package/ts4.0/NetworkError.d.ts +12 -0
- package/ts4.0/RestEndpointTypes.d.ts +22 -6
- package/ts4.0/resourceTypes.d.ts +2 -0
- package/ts4.1/NetworkError.d.ts +12 -0
- package/ts4.1/RestEndpointTypes.d.ts +22 -6
- package/ts4.1/resourceTypes.d.ts +2 -0
package/ts4.0/resourceTypes.d.ts
CHANGED
|
@@ -74,6 +74,7 @@ export interface Resource<O extends ResourceGenerics = {
|
|
|
74
74
|
], ParamToArgs<O['searchParams'] extends undefined ? KeysToArgs<ShortenPath<O['path']>> : O['searchParams'] & PathArgs<ShortenPath<O['path']>>>>;
|
|
75
75
|
body: 'body' extends keyof O ? O['body'] : Partial<Denormalize<O['schema']>>;
|
|
76
76
|
searchParams: O['searchParams'];
|
|
77
|
+
movePath: O['path'];
|
|
77
78
|
} & Pick<O, 'paginationField'>> : GetEndpoint<{
|
|
78
79
|
path: ShortenPath<O['path']>;
|
|
79
80
|
schema: schema.Collection<[
|
|
@@ -81,6 +82,7 @@ export interface Resource<O extends ResourceGenerics = {
|
|
|
81
82
|
], ParamToArgs<(Record<string, number | string | boolean> | undefined) & PathArgs<ShortenPath<O['path']>>>>;
|
|
82
83
|
body: 'body' extends keyof O ? O['body'] : Partial<Denormalize<O['schema']>>;
|
|
83
84
|
searchParams: Record<string, number | string | boolean> | undefined;
|
|
85
|
+
movePath: O['path'];
|
|
84
86
|
} & Pick<O, 'paginationField'>>;
|
|
85
87
|
/** Create a new item (POST)
|
|
86
88
|
*
|
package/ts4.1/NetworkError.d.ts
CHANGED
|
@@ -7,5 +7,17 @@ export default class NetworkError extends Error {
|
|
|
7
7
|
response: Response;
|
|
8
8
|
name: string;
|
|
9
9
|
constructor(response: Response);
|
|
10
|
+
/** Serialize the error for logging and debugging.
|
|
11
|
+
*
|
|
12
|
+
* Error properties are non-enumerable by default, so `JSON.stringify()`
|
|
13
|
+
* on a plain Error produces `{}`. This ensures status, message, and the
|
|
14
|
+
* request URL are always included in serialized output.
|
|
15
|
+
*/
|
|
16
|
+
toJSON(): {
|
|
17
|
+
name: string;
|
|
18
|
+
status: number;
|
|
19
|
+
message: string;
|
|
20
|
+
url: string;
|
|
21
|
+
};
|
|
10
22
|
}
|
|
11
23
|
//# sourceMappingURL=NetworkError.d.ts.map
|
|
@@ -117,6 +117,13 @@ export interface RestInstance<F extends FetchFunction = FetchFunction, S extends
|
|
|
117
117
|
remove: RemoveEndpoint<F, ExtractCollection<S>['remove'], Exclude<O, 'body' | 'method'> & {
|
|
118
118
|
body: OptionsToAdderBodyArgument<O> | OptionsToAdderBodyArgument<O>[] | FormData;
|
|
119
119
|
}>;
|
|
120
|
+
/** Move item between collections (PATCH) - removes from old, adds to new
|
|
121
|
+
* @see https://dataclient.io/rest/api/RestEndpoint#move
|
|
122
|
+
*/
|
|
123
|
+
move: MoveEndpoint<F, ExtractCollection<S>['move'], {
|
|
124
|
+
path: 'movePath' extends keyof O ? O['movePath'] & string : O['path'];
|
|
125
|
+
body: OptionsToAdderBodyArgument<O> | FormData;
|
|
126
|
+
}>;
|
|
120
127
|
}
|
|
121
128
|
export type RestEndpointExtendOptions<O extends PartialRestGenerics, E extends {
|
|
122
129
|
body?: any;
|
|
@@ -127,25 +134,25 @@ export type RestEndpointExtendOptions<O extends PartialRestGenerics, E extends {
|
|
|
127
134
|
type OptionsToRestEndpoint<O extends PartialRestGenerics, E extends RestInstanceBase & {
|
|
128
135
|
body?: any;
|
|
129
136
|
paginationField?: string;
|
|
130
|
-
}, F extends FetchFunction> = 'path' extends keyof O ? RestType<'searchParams' extends keyof O ? O['searchParams'] extends undefined ? PathArgs<Exclude<O['path'], undefined>> : O['searchParams'] & PathArgs<Exclude<O['path'], undefined>> : PathArgs<Exclude<O['path'], undefined>>, OptionsToBodyArgument<'body' extends keyof O ? O : E, 'method' extends keyof O ? O['method'] : E['method']>, 'schema' extends keyof O ? O['schema'] : E['schema'], 'sideEffect' extends keyof O ? Extract<O['sideEffect'],
|
|
137
|
+
}, F extends FetchFunction> = 'path' extends keyof O ? RestType<'searchParams' extends keyof O ? O['searchParams'] extends undefined ? PathArgs<Exclude<O['path'], undefined>> : O['searchParams'] & PathArgs<Exclude<O['path'], undefined>> : PathArgs<Exclude<O['path'], undefined>>, OptionsToBodyArgument<'body' extends keyof O ? O : E, 'method' extends keyof O ? O['method'] : E['method']>, 'schema' extends keyof O ? O['schema'] : E['schema'], 'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined> : 'method' extends keyof O ? MethodToSide<O['method']> : E['sideEffect'], O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>, {
|
|
131
138
|
path: Exclude<O['path'], undefined>;
|
|
132
139
|
body: 'body' extends keyof O ? O['body'] : E['body'];
|
|
133
140
|
searchParams: 'searchParams' extends keyof O ? O['searchParams'] : E['searchParams'];
|
|
134
141
|
method: 'method' extends keyof O ? O['method'] : E['method'];
|
|
135
142
|
paginationField: 'paginationField' extends keyof O ? O['paginationField'] : E['paginationField'];
|
|
136
|
-
}> : 'body' extends keyof O ? RestType<'searchParams' extends keyof O ? O['searchParams'] extends undefined ? PathArgs<Exclude<O['path'], undefined>> : O['searchParams'] & PathArgs<Exclude<E['path'], undefined>> : PathArgs<Exclude<E['path'], undefined>>, OptionsToBodyArgument<O, 'method' extends keyof O ? O['method'] : E['method']>, 'schema' extends keyof O ? O['schema'] : E['schema'], 'sideEffect' extends keyof O ? Extract<O['sideEffect'],
|
|
143
|
+
}> : 'body' extends keyof O ? RestType<'searchParams' extends keyof O ? O['searchParams'] extends undefined ? PathArgs<Exclude<O['path'], undefined>> : O['searchParams'] & PathArgs<Exclude<E['path'], undefined>> : PathArgs<Exclude<E['path'], undefined>>, OptionsToBodyArgument<O, 'method' extends keyof O ? O['method'] : E['method']>, 'schema' extends keyof O ? O['schema'] : E['schema'], 'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined> : 'method' extends keyof O ? MethodToSide<O['method']> : E['sideEffect'], O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>, {
|
|
137
144
|
path: E['path'];
|
|
138
145
|
body: O['body'];
|
|
139
146
|
searchParams: 'searchParams' extends keyof O ? O['searchParams'] : E['searchParams'];
|
|
140
147
|
method: 'method' extends keyof O ? O['method'] : E['method'];
|
|
141
148
|
paginationField: 'paginationField' extends keyof O ? O['paginationField'] : Extract<E['paginationField'], string>;
|
|
142
|
-
}> : 'searchParams' extends keyof O ? RestType<O['searchParams'] extends undefined ? PathArgs<Exclude<O['path'], undefined>> : O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>, OptionsToBodyArgument<E, 'method' extends keyof O ? O['method'] : E['method']>, 'schema' extends keyof O ? O['schema'] : E['schema'], 'sideEffect' extends keyof O ? Extract<O['sideEffect'],
|
|
149
|
+
}> : 'searchParams' extends keyof O ? RestType<O['searchParams'] extends undefined ? PathArgs<Exclude<O['path'], undefined>> : O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>, OptionsToBodyArgument<E, 'method' extends keyof O ? O['method'] : E['method']>, 'schema' extends keyof O ? O['schema'] : E['schema'], 'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined> : 'method' extends keyof O ? MethodToSide<O['method']> : E['sideEffect'], O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>, {
|
|
143
150
|
path: E['path'];
|
|
144
151
|
body: E['body'];
|
|
145
152
|
searchParams: O['searchParams'];
|
|
146
153
|
method: 'method' extends keyof O ? O['method'] : E['method'];
|
|
147
154
|
paginationField: 'paginationField' extends keyof O ? O['paginationField'] : Extract<E['paginationField'], string>;
|
|
148
|
-
}> : RestInstance<F, 'schema' extends keyof O ? O['schema'] : E['schema'], 'sideEffect' extends keyof O ? Extract<O['sideEffect'],
|
|
155
|
+
}> : RestInstance<F, 'schema' extends keyof O ? O['schema'] : E['schema'], 'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined> : 'method' extends keyof O ? MethodToSide<O['method']> : E['sideEffect'], {
|
|
149
156
|
path: 'path' extends keyof O ? Exclude<O['path'], undefined> : E['path'];
|
|
150
157
|
body: 'body' extends keyof O ? O['body'] : E['body'];
|
|
151
158
|
searchParams: 'searchParams' extends keyof O ? O['searchParams'] : E['searchParams'];
|
|
@@ -160,7 +167,7 @@ export type RestExtendedEndpoint<O extends PartialRestGenerics, E extends RestIn
|
|
|
160
167
|
};
|
|
161
168
|
} ? {
|
|
162
169
|
paginationField: E['getPage']['paginationField'];
|
|
163
|
-
} : unknown), RestInstance<(...args: Parameters<E>) => O['process'] extends {} ? Promise<ReturnType<O['process']>> : ReturnType<E>, 'schema' extends keyof O ? O['schema'] : E['schema'], 'method' extends keyof O ? MethodToSide<O['method']> : E['sideEffect']>> & Omit<O, KeyofRestEndpoint> & Omit<E, KeyofRestEndpoint | keyof O>;
|
|
170
|
+
} : unknown), RestInstance<(...args: Parameters<E>) => O['process'] extends {} ? Promise<ReturnType<O['process']>> : ReturnType<E>, 'schema' extends keyof O ? O['schema'] : E['schema'], 'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined> : 'method' extends keyof O ? MethodToSide<O['method']> : E['sideEffect']>> & Omit<O, KeyofRestEndpoint> & Omit<E, KeyofRestEndpoint | keyof O>;
|
|
164
171
|
export interface PartialRestGenerics {
|
|
165
172
|
/** @see https://dataclient.io/rest/api/RestEndpoint#path */
|
|
166
173
|
readonly path?: string;
|
|
@@ -244,6 +251,15 @@ export type RemoveEndpoint<F extends FetchFunction = FetchFunction, S extends Sc
|
|
|
244
251
|
}> = RestInstanceBase<RestFetch<'searchParams' extends keyof O ? O['searchParams'] extends undefined ? PathArgs<Exclude<O['path'], undefined>> : O['searchParams'] & PathArgs<Exclude<O['path'], undefined>> : PathArgs<Exclude<O['path'], undefined>>, O['body'], ResolveType<F>>, S, true, Omit<O, 'method'> & {
|
|
245
252
|
method: 'PATCH';
|
|
246
253
|
}>;
|
|
254
|
+
export type MoveEndpoint<F extends FetchFunction = FetchFunction, S extends Schema | undefined = any, O extends {
|
|
255
|
+
path: string;
|
|
256
|
+
body: any;
|
|
257
|
+
} = {
|
|
258
|
+
path: string;
|
|
259
|
+
body: any;
|
|
260
|
+
}> = RestInstanceBase<RestFetch<PathArgs<Exclude<O['path'], undefined>>, O['body'], ResolveType<F>>, S, true, Omit<O, 'method' | 'searchParams'> & {
|
|
261
|
+
method: 'PATCH';
|
|
262
|
+
}>;
|
|
247
263
|
type OptionsToAdderBodyArgument<O extends {
|
|
248
264
|
body?: any;
|
|
249
265
|
}> = 'body' extends keyof O ? O['body'] : any;
|
|
@@ -286,7 +302,7 @@ export type RestEndpointConstructorOptions<O extends RestGenerics = any> = RestE
|
|
|
286
302
|
*/
|
|
287
303
|
export interface RestEndpoint<O extends RestGenerics = any> extends RestInstance<RestFetch<'searchParams' extends keyof O ? O['searchParams'] extends undefined ? PathArgs<O['path']> : O['searchParams'] & PathArgs<O['path']> : PathArgs<O['path']>, OptionsToBodyArgument<O, 'method' extends keyof O ? O['method'] : O extends {
|
|
288
304
|
sideEffect: true;
|
|
289
|
-
} ? 'POST' : 'GET'>, O['process'] extends {} ? ReturnType<O['process']> : any>, 'schema' extends keyof O ? O['schema'] : undefined, 'sideEffect' extends keyof O ? Extract<O['sideEffect'],
|
|
305
|
+
} ? 'POST' : 'GET'>, O['process'] extends {} ? ReturnType<O['process']> : any>, 'schema' extends keyof O ? O['schema'] : undefined, 'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined> : MethodToSide<O['method']>, 'method' extends keyof O ? O : O & {
|
|
290
306
|
method: O extends {
|
|
291
307
|
sideEffect: true;
|
|
292
308
|
} ? 'POST' : 'GET';
|
package/ts4.1/resourceTypes.d.ts
CHANGED
|
@@ -74,6 +74,7 @@ export interface Resource<O extends ResourceGenerics = {
|
|
|
74
74
|
], ParamToArgs<O['searchParams'] extends undefined ? KeysToArgs<ShortenPath<O['path']>> : O['searchParams'] & PathArgs<ShortenPath<O['path']>>>>;
|
|
75
75
|
body: 'body' extends keyof O ? O['body'] : Partial<Denormalize<O['schema']>>;
|
|
76
76
|
searchParams: O['searchParams'];
|
|
77
|
+
movePath: O['path'];
|
|
77
78
|
} & Pick<O, 'paginationField'>> : GetEndpoint<{
|
|
78
79
|
path: ShortenPath<O['path']>;
|
|
79
80
|
schema: schema.Collection<[
|
|
@@ -81,6 +82,7 @@ export interface Resource<O extends ResourceGenerics = {
|
|
|
81
82
|
], ParamToArgs<(Record<string, number | string | boolean> | undefined) & PathArgs<ShortenPath<O['path']>>>>;
|
|
82
83
|
body: 'body' extends keyof O ? O['body'] : Partial<Denormalize<O['schema']>>;
|
|
83
84
|
searchParams: Record<string, number | string | boolean> | undefined;
|
|
85
|
+
movePath: O['path'];
|
|
84
86
|
} & Pick<O, 'paginationField'>>;
|
|
85
87
|
/** Create a new item (POST)
|
|
86
88
|
*
|