@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.
Files changed (60) hide show
  1. package/README.md +1 -1
  2. package/legacy/OptionsToFunction.js +1 -1
  3. package/legacy/createResource.js +1 -1
  4. package/legacy/extractCollection.js +1 -1
  5. package/legacy/extractObject.js +2 -0
  6. package/legacy/index.js +1 -1
  7. package/lib/OptionsToFunction.d.ts +8 -3
  8. package/lib/OptionsToFunction.d.ts.map +1 -1
  9. package/lib/OptionsToFunction.js +1 -1
  10. package/lib/RestEndpoint.d.ts +120 -43
  11. package/lib/createResource.d.ts +2 -0
  12. package/lib/createResource.d.ts.map +1 -1
  13. package/lib/createResource.js +1 -1
  14. package/lib/extractCollection.d.ts +7 -4
  15. package/lib/extractCollection.d.ts.map +1 -1
  16. package/lib/extractCollection.js +1 -1
  17. package/lib/extractObject.d.ts +6 -0
  18. package/lib/extractObject.d.ts.map +1 -0
  19. package/lib/extractObject.js +2 -0
  20. package/lib/index.d.ts +1 -1
  21. package/lib/index.d.ts.map +1 -1
  22. package/lib/index.js +1 -1
  23. package/package.json +17 -5
  24. package/src/OptionsToFunction.ts +23 -9
  25. package/src/RestEndpoint.d.ts +120 -43
  26. package/src/__tests__/RestEndpoint.ts +10 -1
  27. package/src/__tests__/types.test.ts +6 -2
  28. package/src/createResource.ts +6 -0
  29. package/src/extractCollection.ts +16 -14
  30. package/src/extractObject.ts +7 -0
  31. package/src/index.ts +1 -0
  32. package/ts4.0/OptionsToFunction.d.ts +7 -4
  33. package/ts4.0/RestEndpoint.d.ts +80 -25
  34. package/ts4.0/createResource.d.ts +2 -0
  35. package/ts4.0/deleteme.d.ts +0 -0
  36. package/ts4.0/extractCollection.d.ts +7 -4
  37. package/ts4.0/extractObject.d.ts +1 -0
  38. package/ts4.0/index.d.ts +1 -1
  39. package/ts4.1/NetworkError.d.ts +11 -0
  40. package/ts4.1/OptionsToFunction.d.ts +12 -0
  41. package/ts4.1/RestEndpoint.d.ts +281 -0
  42. package/ts4.1/RestEndpointTypeHelp.d.ts +10 -0
  43. package/ts4.1/RestHelpers.d.ts +7 -0
  44. package/ts4.1/createResource.d.ts +113 -0
  45. package/ts4.1/deleteme.d.ts +0 -0
  46. package/ts4.1/extractCollection.d.ts +14 -0
  47. package/ts4.1/extractObject.d.ts +6 -0
  48. package/ts4.1/getArrayPath.d.ts +3 -0
  49. package/ts4.1/hookifyResource.d.ts +14 -0
  50. package/ts4.1/index.d.ts +14 -0
  51. package/ts4.1/mapCollection.d.ts +16 -0
  52. package/ts4.1/next/index.d.ts +6 -0
  53. package/ts4.1/paginatedCollections.d.ts +3 -0
  54. package/ts4.1/paginationUpdate.d.ts +10 -0
  55. package/ts4.1/paramsToString.d.ts +2 -0
  56. package/ts4.1/paramsToString.native.d.ts +2 -0
  57. package/ts4.1/pathTypes.d.ts +21 -0
  58. package/ts4.1/resourceTypes.d.ts +41 -0
  59. package/ts4.1/test-fixtures.d.ts +141 -0
  60. 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 schema.CollectionInterface ? S : S extends schema.Object<infer T> ? ExtractObject<T> : S extends Exclude<Schema, {
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,IACxD,CAAC,SAAS,MAAM,CAAC,mBAAmB,GAChC,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;AAEZ,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"}
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"}
@@ -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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzY2hlbWEiLCJleHRyYWN0Q29sbGVjdGlvbiIsInMiLCJtYXBwZXIiLCJ1bmRlZmluZWQiLCJBcnJheSIsImlzQXJyYXkiLCJDb2xsZWN0aW9uIiwib2JqQ29weSIsIk9iamVjdCIsImsiLCJjb2xsZWN0aW9uIl0sInNvdXJjZXMiOlsiLi4vc3JjL2V4dHJhY3RDb2xsZWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjaGVtYSwgc2NoZW1hIH0gZnJvbSAnQGRhdGEtY2xpZW50L2VuZHBvaW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXh0cmFjdENvbGxlY3Rpb248XG4gIE0gZXh0ZW5kcyA8QyBleHRlbmRzIHNjaGVtYS5Db2xsZWN0aW9uPihjb2xsZWN0aW9uOiBDKSA9PiBhbnksXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQsXG4+KHM6IFMsIG1hcHBlcjogTSk6IEV4dHJhY3RDb2xsZWN0aW9uPFM+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiBzICE9PSAnb2JqZWN0JyB8fCBzID09PSB1bmRlZmluZWQgfHwgQXJyYXkuaXNBcnJheShzKSkgcmV0dXJuO1xuICBpZiAocyBpbnN0YW5jZW9mIHNjaGVtYS5Db2xsZWN0aW9uKSB7XG4gICAgcmV0dXJuIG1hcHBlcihzIGFzIGFueSk7XG4gIH1cbiAgY29uc3Qgb2JqQ29weTogUmVjb3JkPHN0cmluZywgU2NoZW1hPiA9IHtcbiAgICAuLi4ocyBpbnN0YW5jZW9mIHNjaGVtYS5PYmplY3QgPyAocyBhcyBhbnkpLnNjaGVtYSA6IHMpLFxuICB9O1xuICBmb3IgKGNvbnN0IGsgaW4gb2JqQ29weSkge1xuICAgIGlmICghb2JqQ29weVtrXSkgY29udGludWU7XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IGV4dHJhY3RDb2xsZWN0aW9uKG9iakNvcHlba10sIG1hcHBlcik7XG4gICAgaWYgKGNvbGxlY3Rpb24pIHJldHVybiBjb2xsZWN0aW9uO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEV4dHJhY3RDb2xsZWN0aW9uPFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQ+ID1cbiAgUyBleHRlbmRzIHNjaGVtYS5Db2xsZWN0aW9uSW50ZXJmYWNlXG4gICAgPyBTXG4gICAgOiBTIGV4dGVuZHMgc2NoZW1hLk9iamVjdDxpbmZlciBUPlxuICAgID8gRXh0cmFjdE9iamVjdDxUPlxuICAgIDogUyBleHRlbmRzIEV4Y2x1ZGU8U2NoZW1hLCB7IFtLOiBzdHJpbmddOiBhbnkgfT5cbiAgICA/IG5ldmVyXG4gICAgOiBTIGV4dGVuZHMgeyBbSzogc3RyaW5nXTogU2NoZW1hIH1cbiAgICA/IEV4dHJhY3RPYmplY3Q8Uz5cbiAgICA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBFeHRyYWN0T2JqZWN0PFMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IHtcbiAgW0sgaW4ga2V5b2YgU106IFNbS10gZXh0ZW5kcyBTY2hlbWEgPyBFeHRyYWN0Q29sbGVjdGlvbjxTW0tdPiA6IG5ldmVyO1xufVtrZXlvZiBTXTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBaUJBLE1BQU0sUUFBUSx1QkFBdUI7QUFFdEQsZUFBZSxTQUFTQyxpQkFBaUJBLENBR3ZDQyxDQUFJLEVBQUVDLE1BQVMsRUFBb0M7RUFDbkQsSUFBSSxPQUFPRCxDQUFDLEtBQUssUUFBUSxJQUFJQSxDQUFDLEtBQUtFLFNBQVMsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNKLENBQUMsQ0FBQyxFQUFFO0VBQ2xFLElBQUlBLENBQUMsWUFBWUYsTUFBTSxDQUFDTyxVQUFVLEVBQUU7SUFDbEMsT0FBT0osTUFBTSxDQUFDRCxDQUFRLENBQUM7RUFDekI7RUFDQSxNQUFNTSxPQUErQixHQUFHO0lBQ3RDLElBQUlOLENBQUMsWUFBWUYsTUFBTSxDQUFDUyxNQUFNLEdBQUlQLENBQUMsQ0FBU0YsTUFBTSxHQUFHRSxDQUFDO0VBQ3hELENBQUM7RUFDRCxLQUFLLE1BQU1RLENBQUMsSUFBSUYsT0FBTyxFQUFFO0lBQ3ZCLElBQUksQ0FBQ0EsT0FBTyxDQUFDRSxDQUFDLENBQUMsRUFBRTtJQUNqQixNQUFNQyxVQUFVLEdBQUdWLGlCQUFpQixDQUFDTyxPQUFPLENBQUNFLENBQUMsQ0FBQyxFQUFFUCxNQUFNLENBQUM7SUFDeEQsSUFBSVEsVUFBVSxFQUFFLE9BQU9BLFVBQVU7RUFDbkM7QUFDRiJ9
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';
@@ -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,GACxB,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"}
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJoYXNPd24iLCJpdCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlZmF1bHQiLCJSZXN0RW5kcG9pbnQiLCJjcmVhdGVSZXNvdXJjZSIsImhvb2tpZnlSZXNvdXJjZSIsIk5ldHdvcmtFcnJvciIsInBhZ2luYXRpb25VcGRhdGUiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiT2JqZWN0Lmhhc093biA9XG4gIE9iamVjdC5oYXNPd24gfHxcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xuICB9O1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZXN0RW5kcG9pbnQgfSBmcm9tICcuL1Jlc3RFbmRwb2ludC5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEdldEVuZHBvaW50LFxuICBNdXRhdGVFbmRwb2ludCxcbiAgRGVmYXVsdHMsXG4gIFJlc3RHZW5lcmljcyxcbiAgRmV0Y2hHZXQsXG4gIEZldGNoTXV0YXRlLFxuICBSZXN0RmV0Y2gsXG4gIFJlc3RUeXBlLFxuICBSZXN0SW5zdGFuY2UsXG4gIEtleW9mUmVzdEVuZHBvaW50LFxuICBSZXN0RW5kcG9pbnRDb25zdHJ1Y3Rvck9wdGlvbnMsXG4gIEFkZEVuZHBvaW50LFxuICBQYWdpbmF0aW9uRmllbGRFbmRwb2ludCxcbn0gZnJvbSAnLi9SZXN0RW5kcG9pbnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVSZXNvdXJjZSB9IGZyb20gJy4vY3JlYXRlUmVzb3VyY2UuanMnO1xuZXhwb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJy4vY3JlYXRlUmVzb3VyY2UuanMnO1xuZXhwb3J0IHR5cGUgeyBSZXNvdXJjZU9wdGlvbnMsIFJlc291cmNlR2VuZXJpY3MgfSBmcm9tICcuL3Jlc291cmNlVHlwZXMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBob29raWZ5UmVzb3VyY2UgfSBmcm9tICcuL2hvb2tpZnlSZXNvdXJjZS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEhvb2tSZXNvdXJjZSxcbiAgSG9va2FibGVFbmRwb2ludEludGVyZmFjZSxcbn0gZnJvbSAnLi9ob29raWZ5UmVzb3VyY2UuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOZXR3b3JrRXJyb3IgfSBmcm9tICcuL05ldHdvcmtFcnJvci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhZ2luYXRpb25VcGRhdGUgfSBmcm9tICcuL3BhZ2luYXRpb25VcGRhdGUuanMnO1xuZXhwb3J0IHR5cGUgeyBPcHRpb25zVG9GdW5jdGlvbiB9IGZyb20gJy4vT3B0aW9uc1RvRnVuY3Rpb24uanMnO1xuZXhwb3J0IHR5cGUge1xuICBTaG9ydGVuUGF0aCxcbiAgUGF0aEFyZ3MsXG4gIFBhdGhLZXlzLFxuICBLZXlzVG9BcmdzLFxuICBQYXRoQXJnc0FuZFNlYXJjaCxcbn0gZnJvbSAnLi9wYXRoVHlwZXMuanMnO1xuXG5leHBvcnQgKiBmcm9tICdAZGF0YS1jbGllbnQvZW5kcG9pbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9SZXN0RW5kcG9pbnQuanMnO1xuIl0sIm1hcHBpbmdzIjoiQUFBQUEsTUFBTSxDQUFDQyxNQUFNLEdBQ1hELE1BQU0sQ0FBQ0MsTUFBTSxJQUNiLDBCQUEyQixTQUFTQSxNQUFNQSxDQUFDQyxFQUFFLEVBQUVDLEdBQUcsRUFBRTtFQUNsRCxPQUFPSCxNQUFNLENBQUNJLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUNKLEVBQUUsRUFBRUMsR0FBRyxDQUFDO0FBQ3RELENBQUM7QUFDSCxTQUFTSSxPQUFPLElBQUlDLFlBQVksUUFBUSxtQkFBbUI7QUFnQjNELFNBQVNELE9BQU8sSUFBSUUsY0FBYyxRQUFRLHFCQUFxQjtBQUcvRCxTQUFTRixPQUFPLElBQUlHLGVBQWUsUUFBUSxzQkFBc0I7QUFLakUsU0FBU0gsT0FBTyxJQUFJSSxZQUFZLFFBQVEsbUJBQW1CO0FBQzNELFNBQVNKLE9BQU8sSUFBSUssZ0JBQWdCLFFBQVEsdUJBQXVCO0FBVW5FLGNBQWMsdUJBQXVCO0FBQ3JDLGNBQWMsbUJBQW1CIn0=
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.1",
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
- ">=4.1": {
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.2",
127
+ "@data-client/endpoint": "^0.2.3",
116
128
  "path-to-regexp": "^6.2.1"
117
129
  },
118
130
  "devDependencies": {
@@ -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 RestInstanceBase & { body?: any },
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
- 'body' extends keyof O ? O['body'] : E['body'],
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
- O['body'],
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
- E['body'],
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;
@@ -8,7 +8,10 @@ import type {
8
8
  } from '@data-client/endpoint';
9
9
 
10
10
  import type { ExtractCollection } from './extractCollection.js';
11
- import { OptionsToFunction } from './OptionsToFunction.js';
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
- readonly method: string;
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
- export interface RestInstance<
91
- F extends FetchFunction = FetchFunction,
92
- S extends Schema | undefined = any,
93
- M extends true | undefined = true | undefined,
94
- O extends {
95
- path: string;
96
- body?: any;
97
- searchParams?: any;
98
- } = { path: string },
99
- > extends RestInstanceBase<F, S, M, O> {
100
- push: AddEndpoint<F, S, O>;
101
- unshift: AddEndpoint<F, S, O>;
102
- assign: AddEndpoint<F, S, O>;
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 RestInstanceBase,
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
- 'body' extends keyof O ? O['body'] : E['body'],
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
- O['body'],
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
- E['body'],
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
- readonly body?: any;
273
+ body?: any;
214
274
  /** Only used for types */
215
- readonly searchParams?: any;
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 RestInstanceBase,
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 RestInstanceBase,
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?: any;
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
- any,
324
+ O['body'],
265
325
  ResolveType<F>
266
326
  >,
267
- ExtractCollection<S>,
327
+ S,
268
328
  true,
269
- Omit<O, 'body'>
270
- > & { method: 'POST' };
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
- BodyDefault<O>,
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
- BodyDefault<O>,
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
- MethodToSide<O['method']>,
340
- OptionsBodyDefault<O>
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 & { body: undefined }
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
  });
@@ -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