@data-client/rest 0.3.1 → 0.4.1
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 +1 -1
- package/legacy/OptionsToFunction.js +1 -1
- package/legacy/createResource.js +1 -1
- package/legacy/extractCollection.js +1 -1
- package/legacy/extractObject.js +2 -0
- package/legacy/index.js +1 -1
- package/lib/OptionsToFunction.d.ts +8 -3
- package/lib/OptionsToFunction.d.ts.map +1 -1
- package/lib/OptionsToFunction.js +1 -1
- package/lib/RestEndpoint.d.ts +120 -43
- package/lib/createResource.d.ts +2 -0
- package/lib/createResource.d.ts.map +1 -1
- package/lib/createResource.js +1 -1
- package/lib/extractCollection.d.ts +7 -4
- package/lib/extractCollection.d.ts.map +1 -1
- package/lib/extractCollection.js +1 -1
- package/lib/extractObject.d.ts +6 -0
- package/lib/extractObject.d.ts.map +1 -0
- package/lib/extractObject.js +2 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/package.json +17 -5
- package/src/OptionsToFunction.ts +23 -9
- package/src/RestEndpoint.d.ts +120 -43
- package/src/__tests__/RestEndpoint.ts +10 -1
- package/src/__tests__/types.test.ts +6 -2
- package/src/createResource.ts +6 -0
- package/src/extractCollection.ts +16 -14
- package/src/extractObject.ts +7 -0
- package/src/index.ts +1 -0
- package/ts4.0/OptionsToFunction.d.ts +7 -4
- package/ts4.0/RestEndpoint.d.ts +80 -25
- package/ts4.0/createResource.d.ts +2 -0
- package/ts4.0/deleteme.d.ts +0 -0
- package/ts4.0/extractCollection.d.ts +7 -4
- package/ts4.0/extractObject.d.ts +1 -0
- package/ts4.0/index.d.ts +1 -1
- package/ts4.1/NetworkError.d.ts +11 -0
- package/ts4.1/OptionsToFunction.d.ts +12 -0
- package/ts4.1/RestEndpoint.d.ts +281 -0
- package/ts4.1/RestEndpointTypeHelp.d.ts +10 -0
- package/ts4.1/RestHelpers.d.ts +7 -0
- package/ts4.1/createResource.d.ts +113 -0
- package/ts4.1/deleteme.d.ts +0 -0
- package/ts4.1/extractCollection.d.ts +14 -0
- package/ts4.1/extractObject.d.ts +6 -0
- package/ts4.1/getArrayPath.d.ts +3 -0
- package/ts4.1/hookifyResource.d.ts +14 -0
- package/ts4.1/index.d.ts +14 -0
- package/ts4.1/mapCollection.d.ts +16 -0
- package/ts4.1/next/index.d.ts +6 -0
- package/ts4.1/paginatedCollections.d.ts +3 -0
- package/ts4.1/paginationUpdate.d.ts +10 -0
- package/ts4.1/paramsToString.d.ts +2 -0
- package/ts4.1/paramsToString.native.d.ts +2 -0
- package/ts4.1/pathTypes.d.ts +21 -0
- package/ts4.1/resourceTypes.d.ts +41 -0
- package/ts4.1/test-fixtures.d.ts +141 -0
- package/ts4.1/utiltypes.d.ts +21 -0
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { Schema, schema } from '@data-client/endpoint';
|
|
2
|
+
import { ExtractObject } from './extractObject.js';
|
|
2
3
|
export default function extractCollection<M extends <C extends schema.Collection>(collection: C) => any, S extends Schema | undefined>(s: S, mapper: M): ExtractCollection<S> | undefined;
|
|
3
|
-
export type ExtractCollection<S extends Schema | undefined> = S extends
|
|
4
|
+
export type ExtractCollection<S extends Schema | undefined> = S extends {
|
|
5
|
+
push: any;
|
|
6
|
+
unshift: any;
|
|
7
|
+
assign: any;
|
|
8
|
+
schema: Schema;
|
|
9
|
+
} ? S : S extends schema.Object<infer T> ? ExtractObject<T> : S extends Exclude<Schema, {
|
|
4
10
|
[K: string]: any;
|
|
5
11
|
}> ? never : S extends {
|
|
6
12
|
[K: string]: Schema;
|
|
7
13
|
} ? ExtractObject<S> : never;
|
|
8
|
-
export type ExtractObject<S extends Record<string, any>> = {
|
|
9
|
-
[K in keyof S]: S[K] extends Schema ? ExtractCollection<S[K]> : never;
|
|
10
|
-
}[keyof S];
|
|
11
14
|
//# sourceMappingURL=extractCollection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractCollection.d.ts","sourceRoot":"","sources":["../src/extractCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,CAAC,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,KAAK,GAAG,EAC7D,CAAC,SAAS,MAAM,GAAG,SAAS,EAC5B,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,SAAS,CAanD;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"extractCollection.d.ts","sourceRoot":"","sources":["../src/extractCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACvC,CAAC,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,KAAK,GAAG,EAC7D,CAAC,SAAS,MAAM,GAAG,SAAS,EAC5B,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,SAAS,CAanD;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,SAAS,IAAI,CAAC,SAAS;IACtE,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,GAAG,CAAC;IACb,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,GACG,CAAC,GACD,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAChC,aAAa,CAAC,CAAC,CAAC,GAChB,CAAC,SAAS,OAAO,CAAC,MAAM,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC,GAC/C,KAAK,GACL,CAAC,SAAS;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACjC,aAAa,CAAC,CAAC,CAAC,GAChB,KAAK,CAAC"}
|
package/lib/extractCollection.js
CHANGED
|
@@ -13,4 +13,4 @@ export default function extractCollection(s, mapper) {
|
|
|
13
13
|
if (collection) return collection;
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzY2hlbWEiLCJleHRyYWN0Q29sbGVjdGlvbiIsInMiLCJtYXBwZXIiLCJ1bmRlZmluZWQiLCJBcnJheSIsImlzQXJyYXkiLCJDb2xsZWN0aW9uIiwib2JqQ29weSIsIk9iamVjdCIsImsiLCJjb2xsZWN0aW9uIl0sInNvdXJjZXMiOlsiLi4vc3JjL2V4dHJhY3RDb2xsZWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjaGVtYSwgc2NoZW1hIH0gZnJvbSAnQGRhdGEtY2xpZW50L2VuZHBvaW50JztcblxuaW1wb3J0IHsgRXh0cmFjdE9iamVjdCB9IGZyb20gJy4vZXh0cmFjdE9iamVjdC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4dHJhY3RDb2xsZWN0aW9uPFxuICBNIGV4dGVuZHMgPEMgZXh0ZW5kcyBzY2hlbWEuQ29sbGVjdGlvbj4oY29sbGVjdGlvbjogQykgPT4gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkLFxuPihzOiBTLCBtYXBwZXI6IE0pOiBFeHRyYWN0Q29sbGVjdGlvbjxTPiB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgcyAhPT0gJ29iamVjdCcgfHwgcyA9PT0gdW5kZWZpbmVkIHx8IEFycmF5LmlzQXJyYXkocykpIHJldHVybjtcbiAgaWYgKHMgaW5zdGFuY2VvZiBzY2hlbWEuQ29sbGVjdGlvbikge1xuICAgIHJldHVybiBtYXBwZXIocyBhcyBhbnkpO1xuICB9XG4gIGNvbnN0IG9iakNvcHk6IFJlY29yZDxzdHJpbmcsIFNjaGVtYT4gPSB7XG4gICAgLi4uKHMgaW5zdGFuY2VvZiBzY2hlbWEuT2JqZWN0ID8gKHMgYXMgYW55KS5zY2hlbWEgOiBzKSxcbiAgfTtcbiAgZm9yIChjb25zdCBrIGluIG9iakNvcHkpIHtcbiAgICBpZiAoIW9iakNvcHlba10pIGNvbnRpbnVlO1xuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBleHRyYWN0Q29sbGVjdGlvbihvYmpDb3B5W2tdLCBtYXBwZXIpO1xuICAgIGlmIChjb2xsZWN0aW9uKSByZXR1cm4gY29sbGVjdGlvbjtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBFeHRyYWN0Q29sbGVjdGlvbjxTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkPiA9IFMgZXh0ZW5kcyB7XG4gIHB1c2g6IGFueTtcbiAgdW5zaGlmdDogYW55O1xuICBhc3NpZ246IGFueTtcbiAgc2NoZW1hOiBTY2hlbWE7XG59XG4gID8gU1xuICA6IFMgZXh0ZW5kcyBzY2hlbWEuT2JqZWN0PGluZmVyIFQ+XG4gID8gRXh0cmFjdE9iamVjdDxUPlxuICA6IFMgZXh0ZW5kcyBFeGNsdWRlPFNjaGVtYSwgeyBbSzogc3RyaW5nXTogYW55IH0+XG4gID8gbmV2ZXJcbiAgOiBTIGV4dGVuZHMgeyBbSzogc3RyaW5nXTogU2NoZW1hIH1cbiAgPyBFeHRyYWN0T2JqZWN0PFM+XG4gIDogbmV2ZXI7XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQWlCQSxNQUFNLFFBQVEsdUJBQXVCO0FBSXRELGVBQWUsU0FBU0MsaUJBQWlCQSxDQUd2Q0MsQ0FBSSxFQUFFQyxNQUFTLEVBQW9DO0VBQ25ELElBQUksT0FBT0QsQ0FBQyxLQUFLLFFBQVEsSUFBSUEsQ0FBQyxLQUFLRSxTQUFTLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSixDQUFDLENBQUMsRUFBRTtFQUNsRSxJQUFJQSxDQUFDLFlBQVlGLE1BQU0sQ0FBQ08sVUFBVSxFQUFFO0lBQ2xDLE9BQU9KLE1BQU0sQ0FBQ0QsQ0FBUSxDQUFDO0VBQ3pCO0VBQ0EsTUFBTU0sT0FBK0IsR0FBRztJQUN0QyxJQUFJTixDQUFDLFlBQVlGLE1BQU0sQ0FBQ1MsTUFBTSxHQUFJUCxDQUFDLENBQVNGLE1BQU0sR0FBR0UsQ0FBQztFQUN4RCxDQUFDO0VBQ0QsS0FBSyxNQUFNUSxDQUFDLElBQUlGLE9BQU8sRUFBRTtJQUN2QixJQUFJLENBQUNBLE9BQU8sQ0FBQ0UsQ0FBQyxDQUFDLEVBQUU7SUFDakIsTUFBTUMsVUFBVSxHQUFHVixpQkFBaUIsQ0FBQ08sT0FBTyxDQUFDRSxDQUFDLENBQUMsRUFBRVAsTUFBTSxDQUFDO0lBQ3hELElBQUlRLFVBQVUsRUFBRSxPQUFPQSxVQUFVO0VBQ25DO0FBQ0YifQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Schema } from '@data-client/endpoint';
|
|
2
|
+
import { ExtractCollection } from './extractCollection.js';
|
|
3
|
+
export type ExtractObject<S extends Record<string, any>> = {
|
|
4
|
+
[K in keyof S]: S[K] extends Schema ? ExtractCollection<S[K]> : never;
|
|
5
|
+
}[keyof S];
|
|
6
|
+
//# sourceMappingURL=extractObject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractObject.d.ts","sourceRoot":"","sources":["../src/extractObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI;KACxD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;CACtE,CAAC,MAAM,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2V4dHJhY3RPYmplY3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSAnQGRhdGEtY2xpZW50L2VuZHBvaW50JztcblxuaW1wb3J0IHsgRXh0cmFjdENvbGxlY3Rpb24gfSBmcm9tICcuL2V4dHJhY3RDb2xsZWN0aW9uLmpzJztcblxuZXhwb3J0IHR5cGUgRXh0cmFjdE9iamVjdDxTIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4gPSB7XG4gIFtLIGluIGtleW9mIFNdOiBTW0tdIGV4dGVuZHMgU2NoZW1hID8gRXh0cmFjdENvbGxlY3Rpb248U1tLXT4gOiBuZXZlcjtcbn1ba2V5b2YgU107XG4iXSwibWFwcGluZ3MiOiIifQ==
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { default as RestEndpoint } from './RestEndpoint.js';
|
|
2
|
-
export type { GetEndpoint, MutateEndpoint, Defaults, RestGenerics, FetchGet, FetchMutate, RestFetch, RestType, RestInstance, KeyofRestEndpoint, RestEndpointConstructorOptions, AddEndpoint, PaginationFieldEndpoint, } from './RestEndpoint.js';
|
|
2
|
+
export type { GetEndpoint, MutateEndpoint, Defaults, RestGenerics, FetchGet, FetchMutate, RestFetch, RestType, RestInstance, KeyofRestEndpoint, RestEndpointConstructorOptions, AddEndpoint, PaginationFieldEndpoint, PaginationEndpoint, } from './RestEndpoint.js';
|
|
3
3
|
export { default as createResource } from './createResource.js';
|
|
4
4
|
export type { Resource } from './createResource.js';
|
|
5
5
|
export type { ResourceOptions, ResourceGenerics } from './resourceTypes.js';
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EACV,WAAW,EACX,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,8BAA8B,EAC9B,WAAW,EACX,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EACV,WAAW,EACX,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,8BAA8B,EAC9B,WAAW,EACX,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,YAAY,EACV,YAAY,EACZ,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EACV,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -8,4 +8,4 @@ export { default as NetworkError } from './NetworkError.js';
|
|
|
8
8
|
export { default as paginationUpdate } from './paginationUpdate.js';
|
|
9
9
|
export * from '@data-client/endpoint';
|
|
10
10
|
export * from './RestEndpoint.js';
|
|
11
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJoYXNPd24iLCJpdCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlZmF1bHQiLCJSZXN0RW5kcG9pbnQiLCJjcmVhdGVSZXNvdXJjZSIsImhvb2tpZnlSZXNvdXJjZSIsIk5ldHdvcmtFcnJvciIsInBhZ2luYXRpb25VcGRhdGUiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiT2JqZWN0Lmhhc093biA9XG4gIE9iamVjdC5oYXNPd24gfHxcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xuICB9O1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZXN0RW5kcG9pbnQgfSBmcm9tICcuL1Jlc3RFbmRwb2ludC5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEdldEVuZHBvaW50LFxuICBNdXRhdGVFbmRwb2ludCxcbiAgRGVmYXVsdHMsXG4gIFJlc3RHZW5lcmljcyxcbiAgRmV0Y2hHZXQsXG4gIEZldGNoTXV0YXRlLFxuICBSZXN0RmV0Y2gsXG4gIFJlc3RUeXBlLFxuICBSZXN0SW5zdGFuY2UsXG4gIEtleW9mUmVzdEVuZHBvaW50LFxuICBSZXN0RW5kcG9pbnRDb25zdHJ1Y3Rvck9wdGlvbnMsXG4gIEFkZEVuZHBvaW50LFxuICBQYWdpbmF0aW9uRmllbGRFbmRwb2ludCxcbiAgUGFnaW5hdGlvbkVuZHBvaW50LFxufSBmcm9tICcuL1Jlc3RFbmRwb2ludC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVJlc291cmNlIH0gZnJvbSAnLi9jcmVhdGVSZXNvdXJjZS5qcyc7XG5leHBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnLi9jcmVhdGVSZXNvdXJjZS5qcyc7XG5leHBvcnQgdHlwZSB7IFJlc291cmNlT3B0aW9ucywgUmVzb3VyY2VHZW5lcmljcyB9IGZyb20gJy4vcmVzb3VyY2VUeXBlcy5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhvb2tpZnlSZXNvdXJjZSB9IGZyb20gJy4vaG9va2lmeVJlc291cmNlLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgSG9va1Jlc291cmNlLFxuICBIb29rYWJsZUVuZHBvaW50SW50ZXJmYWNlLFxufSBmcm9tICcuL2hvb2tpZnlSZXNvdXJjZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5ldHdvcmtFcnJvciB9IGZyb20gJy4vTmV0d29ya0Vycm9yLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFnaW5hdGlvblVwZGF0ZSB9IGZyb20gJy4vcGFnaW5hdGlvblVwZGF0ZS5qcyc7XG5leHBvcnQgdHlwZSB7IE9wdGlvbnNUb0Z1bmN0aW9uIH0gZnJvbSAnLi9PcHRpb25zVG9GdW5jdGlvbi5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFNob3J0ZW5QYXRoLFxuICBQYXRoQXJncyxcbiAgUGF0aEtleXMsXG4gIEtleXNUb0FyZ3MsXG4gIFBhdGhBcmdzQW5kU2VhcmNoLFxufSBmcm9tICcuL3BhdGhUeXBlcy5qcyc7XG5cbmV4cG9ydCAqIGZyb20gJ0BkYXRhLWNsaWVudC9lbmRwb2ludCc7XG5leHBvcnQgKiBmcm9tICcuL1Jlc3RFbmRwb2ludC5qcyc7XG4iXSwibWFwcGluZ3MiOiJBQUFBQSxNQUFNLENBQUNDLE1BQU0sR0FDWEQsTUFBTSxDQUFDQyxNQUFNLElBQ2IsMEJBQTJCLFNBQVNBLE1BQU1BLENBQUNDLEVBQUUsRUFBRUMsR0FBRyxFQUFFO0VBQ2xELE9BQU9ILE1BQU0sQ0FBQ0ksU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ0osRUFBRSxFQUFFQyxHQUFHLENBQUM7QUFDdEQsQ0FBQztBQUNILFNBQVNJLE9BQU8sSUFBSUMsWUFBWSxRQUFRLG1CQUFtQjtBQWlCM0QsU0FBU0QsT0FBTyxJQUFJRSxjQUFjLFFBQVEscUJBQXFCO0FBRy9ELFNBQVNGLE9BQU8sSUFBSUcsZUFBZSxRQUFRLHNCQUFzQjtBQUtqRSxTQUFTSCxPQUFPLElBQUlJLFlBQVksUUFBUSxtQkFBbUI7QUFDM0QsU0FBU0osT0FBTyxJQUFJSyxnQkFBZ0IsUUFBUSx1QkFBdUI7QUFVbkUsY0FBYyx1QkFBdUI7QUFDckMsY0FBYyxtQkFBbUIifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@data-client/rest",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Endpoints for REST APIs",
|
|
5
5
|
"homepage": "https://dataclient.io/rest",
|
|
6
6
|
"repository": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"unpkg": "dist/index.umd.min.js",
|
|
45
45
|
"types": "lib/index.d.ts",
|
|
46
46
|
"typesVersions": {
|
|
47
|
-
">=
|
|
47
|
+
">=5.0": {
|
|
48
48
|
"": [
|
|
49
49
|
"lib/index.d.ts"
|
|
50
50
|
],
|
|
@@ -55,6 +55,17 @@
|
|
|
55
55
|
"lib/index.d.ts"
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
|
+
">=4.1": {
|
|
59
|
+
"": [
|
|
60
|
+
"ts4.1/index.d.ts"
|
|
61
|
+
],
|
|
62
|
+
"next": [
|
|
63
|
+
"ts4.1/next/index.d.ts"
|
|
64
|
+
],
|
|
65
|
+
"*": [
|
|
66
|
+
"ts4.1/index.d.ts"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
58
69
|
">=4.0": {
|
|
59
70
|
"": [
|
|
60
71
|
"ts4.0/index.d.ts"
|
|
@@ -92,6 +103,7 @@
|
|
|
92
103
|
"node.mjs",
|
|
93
104
|
"legacy",
|
|
94
105
|
"ts4.0",
|
|
106
|
+
"ts4.1",
|
|
95
107
|
"LICENSE",
|
|
96
108
|
"README.md"
|
|
97
109
|
],
|
|
@@ -101,8 +113,8 @@
|
|
|
101
113
|
"build:js:node": "BROWSERSLIST_ENV=node12 yarn g:rollup",
|
|
102
114
|
"build:js:browser": "BROWSERSLIST_ENV=legacy yarn g:rollup",
|
|
103
115
|
"build:bundle": "yarn g:runs build:js:\\* && echo '{\"type\":\"commonjs\"}' > dist/package.json",
|
|
104
|
-
"build:clean": "yarn g:clean ts4.0 index.d.ts next.d.ts",
|
|
105
|
-
"build:legacy-types": "yarn g:downtypes lib ts4.0 --to=4.0 && yarn g:copy --up 1 ./src-4.0-types/**/*.d.ts ./ts4.0",
|
|
116
|
+
"build:clean": "yarn g:clean ts4.0 ts4.1 index.d.ts next.d.ts",
|
|
117
|
+
"build:legacy-types": "yarn g:downtypes lib ts4.0 --to=4.0 && yarn g:downtypes lib ts4.1 --to=4.1 && yarn g:copy --up 1 ./src-4.1-types/**/*.d.ts ./ts4.0/ && yarn g:copy --up 1 ./src-4.1-types/**/*.d.ts ./ts4.1 && yarn g:copy --up 1 ./src-4.0-types/**/*.d.ts ./ts4.0",
|
|
106
118
|
"build": "run build:lib && run build:legacy:lib && run build:bundle",
|
|
107
119
|
"dev": "run build:lib -w",
|
|
108
120
|
"prepare": "run build:lib",
|
|
@@ -112,7 +124,7 @@
|
|
|
112
124
|
"license": "Apache-2.0",
|
|
113
125
|
"dependencies": {
|
|
114
126
|
"@babel/runtime": "^7.17.0",
|
|
115
|
-
"@data-client/endpoint": "^0.2.
|
|
127
|
+
"@data-client/endpoint": "^0.2.3",
|
|
116
128
|
"path-to-regexp": "^6.2.1"
|
|
117
129
|
},
|
|
118
130
|
"devDependencies": {
|
package/src/OptionsToFunction.ts
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
import type { FetchFunction, ResolveType } from '@data-client/endpoint';
|
|
2
2
|
|
|
3
3
|
import { PathArgs } from './pathTypes.js';
|
|
4
|
-
import {
|
|
5
|
-
PartialRestGenerics,
|
|
6
|
-
RestInstanceBase,
|
|
7
|
-
RestFetch,
|
|
8
|
-
} from './RestEndpoint.js';
|
|
4
|
+
import { PartialRestGenerics, RestFetch } from './RestEndpoint.js';
|
|
9
5
|
|
|
10
6
|
export type OptionsToFunction<
|
|
11
7
|
O extends PartialRestGenerics,
|
|
12
|
-
E extends
|
|
8
|
+
E extends { body?: any; path?: string; method?: string },
|
|
13
9
|
F extends FetchFunction,
|
|
14
10
|
> = 'path' extends keyof O
|
|
15
11
|
? RestFetch<
|
|
16
12
|
'searchParams' extends keyof O
|
|
17
13
|
? O['searchParams'] & PathArgs<Exclude<O['path'], undefined>>
|
|
18
14
|
: PathArgs<Exclude<O['path'], undefined>>,
|
|
19
|
-
|
|
15
|
+
OptionsToBodyArgument<
|
|
16
|
+
'body' extends keyof O ? O : E,
|
|
17
|
+
'method' extends keyof O ? O['method'] : E['method']
|
|
18
|
+
>,
|
|
20
19
|
O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>
|
|
21
20
|
>
|
|
22
21
|
: 'body' extends keyof O
|
|
@@ -24,13 +23,19 @@ export type OptionsToFunction<
|
|
|
24
23
|
'searchParams' extends keyof O
|
|
25
24
|
? O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>
|
|
26
25
|
: PathArgs<Exclude<E['path'], undefined>>,
|
|
27
|
-
|
|
26
|
+
OptionsToBodyArgument<
|
|
27
|
+
O,
|
|
28
|
+
'method' extends keyof O ? O['method'] : E['method']
|
|
29
|
+
>,
|
|
28
30
|
O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>
|
|
29
31
|
>
|
|
30
32
|
: 'searchParams' extends keyof O
|
|
31
33
|
? RestFetch<
|
|
32
34
|
O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>,
|
|
33
|
-
|
|
35
|
+
OptionsToBodyArgument<
|
|
36
|
+
E,
|
|
37
|
+
'method' extends keyof O ? O['method'] : E['method']
|
|
38
|
+
>,
|
|
34
39
|
O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>
|
|
35
40
|
>
|
|
36
41
|
: (
|
|
@@ -39,3 +44,12 @@ export type OptionsToFunction<
|
|
|
39
44
|
) => Promise<
|
|
40
45
|
O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>
|
|
41
46
|
>;
|
|
47
|
+
|
|
48
|
+
export type OptionsToBodyArgument<
|
|
49
|
+
O extends { body?: any },
|
|
50
|
+
Method extends string | undefined,
|
|
51
|
+
> = Method extends 'POST' | 'PUT' | 'PATCH' | 'DELETE'
|
|
52
|
+
? 'body' extends keyof O
|
|
53
|
+
? O['body']
|
|
54
|
+
: any
|
|
55
|
+
: undefined;
|
package/src/RestEndpoint.d.ts
CHANGED
|
@@ -8,7 +8,10 @@ import type {
|
|
|
8
8
|
} from '@data-client/endpoint';
|
|
9
9
|
|
|
10
10
|
import type { ExtractCollection } from './extractCollection.js';
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
OptionsToBodyArgument,
|
|
13
|
+
OptionsToFunction,
|
|
14
|
+
} from './OptionsToFunction.js';
|
|
12
15
|
import { PathArgs } from './pathTypes.js';
|
|
13
16
|
import { EndpointUpdateFunction } from './RestEndpointTypeHelp.js';
|
|
14
17
|
|
|
@@ -20,9 +23,12 @@ export interface RestInstanceBase<
|
|
|
20
23
|
path: string;
|
|
21
24
|
body?: any;
|
|
22
25
|
searchParams?: any;
|
|
26
|
+
method?: string;
|
|
23
27
|
} = { path: string },
|
|
24
28
|
> extends EndpointInstanceInterface<F, S, M> {
|
|
29
|
+
/** @see https://resthooks.io/rest/api/RestEndpoint#body */
|
|
25
30
|
readonly body?: 'body' extends keyof O ? O['body'] : any;
|
|
31
|
+
/** @see https://resthooks.io/rest/api/RestEndpoint#searchParams */
|
|
26
32
|
readonly searchParams?: 'searchParams' extends keyof O
|
|
27
33
|
? O['searchParams']
|
|
28
34
|
: // unknown is identity with '&' type operator
|
|
@@ -37,7 +43,8 @@ export interface RestInstanceBase<
|
|
|
37
43
|
*/
|
|
38
44
|
readonly urlPrefix: string;
|
|
39
45
|
readonly requestInit: RequestInit;
|
|
40
|
-
|
|
46
|
+
/** @see https://resthooks.io/rest/api/RestEndpoint#method */
|
|
47
|
+
readonly method: (O & { method: string })['method'];
|
|
41
48
|
readonly signal: AbortSignal | undefined;
|
|
42
49
|
|
|
43
50
|
/* fetch lifecycles */
|
|
@@ -67,10 +74,29 @@ export interface RestInstanceBase<
|
|
|
67
74
|
// this is just a hack to handle when no members of PartialRestGenerics are present
|
|
68
75
|
// Note: Using overloading (like paginated did) struggles because typescript does not have a clear way of distinguishing one
|
|
69
76
|
// should be used from the other (due to same problem with every member being partial)
|
|
77
|
+
/** Creates a child endpoint that inherits from this while overriding provided `options`.
|
|
78
|
+
* @see https://dataclient.io/rest/api/RestEndpoint#extend
|
|
79
|
+
*/
|
|
70
80
|
extend<E extends RestInstanceBase, O extends PartialRestGenerics | {}>(
|
|
71
81
|
this: E,
|
|
72
82
|
options: Readonly<RestEndpointExtendOptions<O, E, F> & O>,
|
|
73
83
|
): RestExtendedEndpoint<O, E>;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface RestInstance<
|
|
87
|
+
F extends FetchFunction = FetchFunction,
|
|
88
|
+
S extends Schema | undefined = any,
|
|
89
|
+
M extends true | undefined = true | undefined,
|
|
90
|
+
O extends {
|
|
91
|
+
path: string;
|
|
92
|
+
body?: any;
|
|
93
|
+
searchParams?: any;
|
|
94
|
+
method?: string;
|
|
95
|
+
} = { path: string },
|
|
96
|
+
> extends RestInstanceBase<F, S, M, O> {
|
|
97
|
+
/** Endpoint to append the next page extending a list for pagination
|
|
98
|
+
* @see https://dataclient.io/rest/api/RestEndpoint#paginated
|
|
99
|
+
*/
|
|
74
100
|
paginated<
|
|
75
101
|
E extends RestInstanceBase<FetchFunction, any, undefined>,
|
|
76
102
|
A extends any[],
|
|
@@ -85,26 +111,47 @@ export interface RestInstanceBase<
|
|
|
85
111
|
this: E,
|
|
86
112
|
cursorField: C,
|
|
87
113
|
): PaginationFieldEndpoint<E, C>;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
114
|
+
/** Endpoint that pushes (place at end) a newly created entity to this Collection
|
|
115
|
+
* @see https://dataclient.io/rest/api/RestEndpoint#push
|
|
116
|
+
*/
|
|
117
|
+
push: AddEndpoint<
|
|
118
|
+
F,
|
|
119
|
+
ExtractCollection<S>['push'],
|
|
120
|
+
Exclude<O, 'body' | 'method'> & {
|
|
121
|
+
body:
|
|
122
|
+
| OptionsToAdderBodyArgument<O>
|
|
123
|
+
| OptionsToAdderBodyArgument<O>[]
|
|
124
|
+
| FormData;
|
|
125
|
+
}
|
|
126
|
+
>;
|
|
127
|
+
/** Endpoint that unshifts (place at start) a newly created entity to this Collection
|
|
128
|
+
* @see https://dataclient.io/rest/api/RestEndpoint#unshift
|
|
129
|
+
*/
|
|
130
|
+
unshift: AddEndpoint<
|
|
131
|
+
F,
|
|
132
|
+
ExtractCollection<S>['unshift'],
|
|
133
|
+
Exclude<O, 'body' | 'method'> & {
|
|
134
|
+
body:
|
|
135
|
+
| OptionsToAdderBodyArgument<O>
|
|
136
|
+
| OptionsToAdderBodyArgument<O>[]
|
|
137
|
+
| FormData;
|
|
138
|
+
}
|
|
139
|
+
>;
|
|
140
|
+
/** Endpoint that assigns newly created entities to their respective keys in this Collection
|
|
141
|
+
* @see https://dataclient.io/rest/api/RestEndpoint#assign
|
|
142
|
+
*/
|
|
143
|
+
assign: AddEndpoint<
|
|
144
|
+
F,
|
|
145
|
+
ExtractCollection<S>,
|
|
146
|
+
Exclude<O, 'body' | 'method'> & {
|
|
147
|
+
body: Record<string, OptionsToAdderBodyArgument<O>> | FormData;
|
|
148
|
+
}
|
|
149
|
+
>;
|
|
103
150
|
}
|
|
104
151
|
|
|
105
152
|
export type RestEndpointExtendOptions<
|
|
106
153
|
O extends PartialRestGenerics,
|
|
107
|
-
E extends
|
|
154
|
+
E extends { body?: any; path?: string; schema?: Schema; method?: string },
|
|
108
155
|
F extends FetchFunction,
|
|
109
156
|
> = RestEndpointOptions<
|
|
110
157
|
OptionsToFunction<O, E, F>,
|
|
@@ -125,7 +172,10 @@ type OptionsToRestEndpoint<
|
|
|
125
172
|
? PathArgs<Exclude<O['path'], undefined>>
|
|
126
173
|
: O['searchParams'] & PathArgs<Exclude<O['path'], undefined>>
|
|
127
174
|
: PathArgs<Exclude<O['path'], undefined>>,
|
|
128
|
-
|
|
175
|
+
OptionsToBodyArgument<
|
|
176
|
+
'body' extends keyof O ? O : E,
|
|
177
|
+
'method' extends keyof O ? O['method'] : E['method']
|
|
178
|
+
>,
|
|
129
179
|
'schema' extends keyof O ? O['schema'] : E['schema'],
|
|
130
180
|
'method' extends keyof O ? MethodToSide<O['method']> : E['sideEffect'],
|
|
131
181
|
O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>,
|
|
@@ -135,6 +185,7 @@ type OptionsToRestEndpoint<
|
|
|
135
185
|
searchParams: 'searchParams' extends keyof O
|
|
136
186
|
? O['searchParams']
|
|
137
187
|
: E['searchParams'];
|
|
188
|
+
method: 'method' extends keyof O ? O['method'] : E['method'];
|
|
138
189
|
}
|
|
139
190
|
>
|
|
140
191
|
: 'body' extends keyof O
|
|
@@ -144,7 +195,10 @@ type OptionsToRestEndpoint<
|
|
|
144
195
|
? PathArgs<Exclude<O['path'], undefined>>
|
|
145
196
|
: O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>
|
|
146
197
|
: PathArgs<Exclude<E['path'], undefined>>,
|
|
147
|
-
|
|
198
|
+
OptionsToBodyArgument<
|
|
199
|
+
O,
|
|
200
|
+
'method' extends keyof O ? O['method'] : E['method']
|
|
201
|
+
>,
|
|
148
202
|
'schema' extends keyof O ? O['schema'] : E['schema'],
|
|
149
203
|
'method' extends keyof O ? MethodToSide<O['method']> : E['sideEffect'],
|
|
150
204
|
O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>,
|
|
@@ -154,6 +208,7 @@ type OptionsToRestEndpoint<
|
|
|
154
208
|
searchParams: 'searchParams' extends keyof O
|
|
155
209
|
? O['searchParams']
|
|
156
210
|
: E['searchParams'];
|
|
211
|
+
method: 'method' extends keyof O ? O['method'] : E['method'];
|
|
157
212
|
}
|
|
158
213
|
>
|
|
159
214
|
: 'searchParams' extends keyof O
|
|
@@ -161,7 +216,10 @@ type OptionsToRestEndpoint<
|
|
|
161
216
|
O['searchParams'] extends undefined
|
|
162
217
|
? PathArgs<Exclude<O['path'], undefined>>
|
|
163
218
|
: O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>,
|
|
164
|
-
|
|
219
|
+
OptionsToBodyArgument<
|
|
220
|
+
E,
|
|
221
|
+
'method' extends keyof O ? O['method'] : E['method']
|
|
222
|
+
>,
|
|
165
223
|
'schema' extends keyof O ? O['schema'] : E['schema'],
|
|
166
224
|
'method' extends keyof O ? MethodToSide<O['method']> : E['sideEffect'],
|
|
167
225
|
O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>,
|
|
@@ -169,6 +227,7 @@ type OptionsToRestEndpoint<
|
|
|
169
227
|
path: E['path'];
|
|
170
228
|
body: E['body'];
|
|
171
229
|
searchParams: O['searchParams'];
|
|
230
|
+
method: 'method' extends keyof O ? O['method'] : E['method'];
|
|
172
231
|
}
|
|
173
232
|
>
|
|
174
233
|
: RestInstance<
|
|
@@ -183,6 +242,7 @@ type OptionsToRestEndpoint<
|
|
|
183
242
|
searchParams: 'searchParams' extends keyof O
|
|
184
243
|
? O['searchParams']
|
|
185
244
|
: E['searchParams'];
|
|
245
|
+
method: 'method' extends keyof O ? O['method'] : E['method'];
|
|
186
246
|
}
|
|
187
247
|
>;
|
|
188
248
|
|
|
@@ -210,9 +270,9 @@ export interface PartialRestGenerics {
|
|
|
210
270
|
readonly schema?: Schema | undefined;
|
|
211
271
|
readonly method?: string;
|
|
212
272
|
/** Only used for types */
|
|
213
|
-
|
|
273
|
+
body?: any;
|
|
214
274
|
/** Only used for types */
|
|
215
|
-
|
|
275
|
+
searchParams?: any;
|
|
216
276
|
/** @see https://resthooks.io/rest/api/RestEndpoint#process */
|
|
217
277
|
process?(value: any, ...args: any): any;
|
|
218
278
|
}
|
|
@@ -221,7 +281,7 @@ export interface RestGenerics extends PartialRestGenerics {
|
|
|
221
281
|
}
|
|
222
282
|
|
|
223
283
|
export type PaginationEndpoint<
|
|
224
|
-
E extends
|
|
284
|
+
E extends FetchFunction & RestGenerics & { sideEffect?: true | undefined },
|
|
225
285
|
A extends any[],
|
|
226
286
|
> = RestInstance<
|
|
227
287
|
ParamFetchNoBody<A[0], ResolveType<E>>,
|
|
@@ -232,7 +292,7 @@ export type PaginationEndpoint<
|
|
|
232
292
|
}
|
|
233
293
|
>;
|
|
234
294
|
export type PaginationFieldEndpoint<
|
|
235
|
-
E extends
|
|
295
|
+
E extends FetchFunction & RestGenerics & { sideEffect?: true | undefined },
|
|
236
296
|
C extends string,
|
|
237
297
|
> = RestInstance<
|
|
238
298
|
ParamFetchNoBody<
|
|
@@ -251,9 +311,9 @@ export type AddEndpoint<
|
|
|
251
311
|
S extends Schema | undefined = any,
|
|
252
312
|
O extends {
|
|
253
313
|
path: string;
|
|
254
|
-
body
|
|
314
|
+
body: any;
|
|
255
315
|
searchParams?: any;
|
|
256
|
-
} = { path: string },
|
|
316
|
+
} = { path: string; body: any },
|
|
257
317
|
> = RestInstanceBase<
|
|
258
318
|
RestFetch<
|
|
259
319
|
'searchParams' extends keyof O
|
|
@@ -261,19 +321,13 @@ export type AddEndpoint<
|
|
|
261
321
|
? PathArgs<Exclude<O['path'], undefined>>
|
|
262
322
|
: O['searchParams'] & PathArgs<Exclude<O['path'], undefined>>
|
|
263
323
|
: PathArgs<Exclude<O['path'], undefined>>,
|
|
264
|
-
|
|
324
|
+
O['body'],
|
|
265
325
|
ResolveType<F>
|
|
266
326
|
>,
|
|
267
|
-
|
|
327
|
+
S,
|
|
268
328
|
true,
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
export type BodyDefault<O extends RestGenerics> = 'body' extends keyof O
|
|
273
|
-
? O['body']
|
|
274
|
-
: O['method'] extends 'POST' | 'PUT' | 'PATCH'
|
|
275
|
-
? Record<string, unknown> | FormData
|
|
276
|
-
: undefined;
|
|
329
|
+
O & { method: 'POST' }
|
|
330
|
+
>;
|
|
277
331
|
|
|
278
332
|
type OptionsBodyDefault<O extends RestGenerics> = 'body' extends keyof O
|
|
279
333
|
? O
|
|
@@ -281,6 +335,9 @@ type OptionsBodyDefault<O extends RestGenerics> = 'body' extends keyof O
|
|
|
281
335
|
? O & { body: any }
|
|
282
336
|
: O & { body: undefined };
|
|
283
337
|
|
|
338
|
+
type OptionsToAdderBodyArgument<O extends { body?: any }> =
|
|
339
|
+
'body' extends keyof O ? O['body'] : any;
|
|
340
|
+
|
|
284
341
|
export interface RestEndpointOptions<
|
|
285
342
|
F extends FetchFunction = FetchFunction,
|
|
286
343
|
S extends Schema | undefined = undefined,
|
|
@@ -309,7 +366,14 @@ export type RestEndpointConstructorOptions<O extends RestGenerics = any> =
|
|
|
309
366
|
? PathArgs<O['path']>
|
|
310
367
|
: O['searchParams'] & PathArgs<O['path']>
|
|
311
368
|
: PathArgs<O['path']>,
|
|
312
|
-
|
|
369
|
+
OptionsToBodyArgument<
|
|
370
|
+
O,
|
|
371
|
+
'method' extends keyof O
|
|
372
|
+
? O['method']
|
|
373
|
+
: O extends { sideEffect: true }
|
|
374
|
+
? 'POST'
|
|
375
|
+
: 'GET'
|
|
376
|
+
>,
|
|
313
377
|
O['process'] extends {}
|
|
314
378
|
? ReturnType<O['process']>
|
|
315
379
|
: any /*Denormalize<O['schema']>*/
|
|
@@ -330,14 +394,27 @@ export interface RestEndpointConstructor {
|
|
|
330
394
|
? PathArgs<O['path']>
|
|
331
395
|
: O['searchParams'] & PathArgs<O['path']>
|
|
332
396
|
: PathArgs<O['path']>,
|
|
333
|
-
|
|
397
|
+
OptionsToBodyArgument<
|
|
398
|
+
O,
|
|
399
|
+
'method' extends keyof O
|
|
400
|
+
? O['method']
|
|
401
|
+
: O extends { sideEffect: true }
|
|
402
|
+
? 'POST'
|
|
403
|
+
: 'GET'
|
|
404
|
+
>,
|
|
334
405
|
O['process'] extends {}
|
|
335
406
|
? ReturnType<O['process']>
|
|
336
407
|
: any /*Denormalize<O['schema']>*/
|
|
337
408
|
>,
|
|
338
409
|
'schema' extends keyof O ? O['schema'] : undefined,
|
|
339
|
-
|
|
340
|
-
|
|
410
|
+
'sideEffect' extends keyof O
|
|
411
|
+
? Extract<O['sideEffect'], undefined | true>
|
|
412
|
+
: MethodToSide<O['method']>,
|
|
413
|
+
'method' extends keyof O
|
|
414
|
+
? O
|
|
415
|
+
: O & {
|
|
416
|
+
method: O extends { sideEffect: true } ? 'POST' : 'GET';
|
|
417
|
+
}
|
|
341
418
|
>;
|
|
342
419
|
readonly prototype: RestInstanceBase;
|
|
343
420
|
}
|
|
@@ -512,7 +589,7 @@ export type GetEndpoint<
|
|
|
512
589
|
O['schema'],
|
|
513
590
|
undefined,
|
|
514
591
|
any,
|
|
515
|
-
O & {
|
|
592
|
+
O & { method: 'GET' }
|
|
516
593
|
>;
|
|
517
594
|
|
|
518
595
|
export type MutateEndpoint<
|
|
@@ -538,5 +615,5 @@ export type MutateEndpoint<
|
|
|
538
615
|
true,
|
|
539
616
|
O['body'],
|
|
540
617
|
any,
|
|
541
|
-
O
|
|
618
|
+
O & { body: any; method: 'POST' | 'PUT' | 'PATCH' | 'DELETE' }
|
|
542
619
|
>;
|
|
@@ -164,6 +164,7 @@ describe('RestEndpoint', () => {
|
|
|
164
164
|
const epbody = new RestEndpoint({
|
|
165
165
|
path: '/users/:id?/:group?',
|
|
166
166
|
body: { title: '' },
|
|
167
|
+
method: 'POST',
|
|
167
168
|
});
|
|
168
169
|
() => ep();
|
|
169
170
|
() => ep({ id: 5 });
|
|
@@ -483,6 +484,11 @@ describe('RestEndpoint', () => {
|
|
|
483
484
|
body: 5,
|
|
484
485
|
path: 'http\\://test.com/charmer/:charm',
|
|
485
486
|
});
|
|
487
|
+
() => {
|
|
488
|
+
// test type widening
|
|
489
|
+
const second = updateUser.extend({ body: { body: '' } });
|
|
490
|
+
second({ charm: 5 }, { body: 'hi' });
|
|
491
|
+
};
|
|
486
492
|
const response = await updateUser(
|
|
487
493
|
{ charm: 5 },
|
|
488
494
|
// @ts-expect-error
|
|
@@ -736,6 +742,7 @@ describe('RestEndpoint', () => {
|
|
|
736
742
|
.extend({
|
|
737
743
|
body: {} as { title: string },
|
|
738
744
|
dataExpiryLength: 0,
|
|
745
|
+
method: 'POST',
|
|
739
746
|
})
|
|
740
747
|
.extend({ dataExpiryLength: 5 });
|
|
741
748
|
() => newBody({ group: 'hi', id: 'what' }, { title: 'cool' });
|
|
@@ -864,10 +871,12 @@ describe('RestEndpoint', () => {
|
|
|
864
871
|
const endpoint = new RestEndpoint({
|
|
865
872
|
sideEffect: true,
|
|
866
873
|
path: 'http\\://test.com/article-cooler',
|
|
867
|
-
body: 0 as any,
|
|
868
874
|
schema: CoolerArticle,
|
|
869
875
|
}).extend({ name: 'createarticle' });
|
|
876
|
+
const a: true = endpoint.sideEffect;
|
|
877
|
+
const b: 'POST' = endpoint.method;
|
|
870
878
|
expect(endpoint.method).toBe('POST');
|
|
879
|
+
expect(endpoint.sideEffect).toBe(true);
|
|
871
880
|
const article = await endpoint(payload);
|
|
872
881
|
expect(article).toMatchInlineSnapshot(`
|
|
873
882
|
{
|
|
@@ -436,15 +436,19 @@ it('should handle more open ended type definitions', () => {
|
|
|
436
436
|
});
|
|
437
437
|
|
|
438
438
|
unknownParams({ hi: 5 });
|
|
439
|
+
unknownParams();
|
|
440
|
+
// @ts-expect-error
|
|
441
|
+
unknownParams(5);
|
|
439
442
|
|
|
440
443
|
const explicit: GetEndpoint<{
|
|
441
444
|
path: `${string}:${string}`;
|
|
442
|
-
schema: typeof User
|
|
445
|
+
schema: schema.Collection<[typeof User]>;
|
|
443
446
|
}> = new RestEndpoint({
|
|
444
447
|
path: '' as `${string}:${string}`,
|
|
445
|
-
schema: User,
|
|
448
|
+
schema: new schema.Collection([User]),
|
|
446
449
|
});
|
|
447
450
|
explicit({ hi: 5 });
|
|
448
451
|
explicit.push.process({} as any, { hi: 5 });
|
|
452
|
+
explicit.push();
|
|
449
453
|
};
|
|
450
454
|
});
|
package/src/createResource.ts
CHANGED
|
@@ -124,11 +124,17 @@ export interface Resource<
|
|
|
124
124
|
? GetEndpoint<{
|
|
125
125
|
path: ShortenPath<O['path']>;
|
|
126
126
|
schema: schema.Collection<[O['schema']]>;
|
|
127
|
+
body: 'body' extends keyof O
|
|
128
|
+
? O['body']
|
|
129
|
+
: Partial<Denormalize<O['schema']>>;
|
|
127
130
|
searchParams: O['searchParams'];
|
|
128
131
|
}>
|
|
129
132
|
: GetEndpoint<{
|
|
130
133
|
path: ShortenPath<O['path']>;
|
|
131
134
|
schema: schema.Collection<[O['schema']]>;
|
|
135
|
+
body: 'body' extends keyof O
|
|
136
|
+
? O['body']
|
|
137
|
+
: Partial<Denormalize<O['schema']>>;
|
|
132
138
|
searchParams: Record<string, number | string | boolean> | undefined;
|
|
133
139
|
}>;
|
|
134
140
|
/** Get a list of item
|