@data-client/rest 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/index.js +17 -16
  2. package/dist/index.umd.min.js +1 -1
  3. package/dist/next.js +7 -2
  4. package/legacy/OptionsToFunction.js +1 -1
  5. package/legacy/RestEndpoint.js +5 -5
  6. package/legacy/RestHelpers.js +4 -2
  7. package/legacy/createResource.js +14 -13
  8. package/legacy/index.js +2 -1
  9. package/legacy/next/index.js +4 -4
  10. package/legacy/pathTypes.js +1 -1
  11. package/legacy/resourceTypes.js +2 -0
  12. package/lib/OptionsToFunction.d.ts.map +1 -1
  13. package/lib/OptionsToFunction.js +1 -1
  14. package/lib/RestEndpoint.d.ts +30 -36
  15. package/lib/RestEndpoint.js +5 -5
  16. package/lib/RestHelpers.js +4 -2
  17. package/lib/createResource.d.ts +65 -32
  18. package/lib/createResource.d.ts.map +1 -1
  19. package/lib/createResource.js +11 -12
  20. package/lib/index.d.ts +3 -1
  21. package/lib/index.d.ts.map +1 -1
  22. package/lib/index.js +2 -1
  23. package/lib/next/index.d.ts +5 -5
  24. package/lib/next/index.d.ts.map +1 -1
  25. package/lib/next/index.js +4 -4
  26. package/lib/pathTypes.d.ts +1 -0
  27. package/lib/pathTypes.d.ts.map +1 -1
  28. package/lib/pathTypes.js +1 -1
  29. package/lib/{next/resourceTypes.d.ts → resourceTypes.d.ts} +12 -2
  30. package/lib/resourceTypes.d.ts.map +1 -0
  31. package/lib/resourceTypes.js +2 -0
  32. package/package.json +3 -3
  33. package/src/OptionsToFunction.ts +0 -1
  34. package/src/RestEndpoint.d.ts +30 -36
  35. package/src/RestEndpoint.js +4 -4
  36. package/src/RestHelpers.ts +4 -4
  37. package/src/__tests__/Resource.test.ts +2 -2
  38. package/src/__tests__/RestEndpoint.ts +38 -9
  39. package/src/__tests__/__snapshots__/createResource.test.ts.snap +2 -0
  40. package/src/__tests__/createResource.test.ts +25 -4
  41. package/src/__tests__/hookifyResource.ts +7 -3
  42. package/src/__tests__/types.test.ts +353 -212
  43. package/src/createResource.ts +111 -62
  44. package/src/index.ts +2 -2
  45. package/src/next/index.ts +5 -5
  46. package/src/pathTypes.ts +2 -0
  47. package/src/{next/resourceTypes.ts → resourceTypes.ts} +12 -2
  48. package/ts4.0/RestEndpoint.d.ts +19 -33
  49. package/ts4.0/createResource.d.ts +77 -32
  50. package/ts4.0/index.d.ts +3 -1
  51. package/ts4.0/next/index.d.ts +5 -5
  52. package/ts4.0/pathTypes.d.ts +2 -0
  53. package/ts4.0/{next/resourceTypes.d.ts → resourceTypes.d.ts} +12 -2
  54. package/legacy/next/OptionsToFunction.js +0 -2
  55. package/legacy/next/RestEndpoint.js +0 -225
  56. package/legacy/next/createResource.js +0 -86
  57. package/legacy/next/resourceTypes.js +0 -2
  58. package/lib/next/OptionsToFunction.d.ts +0 -7
  59. package/lib/next/OptionsToFunction.d.ts.map +0 -1
  60. package/lib/next/OptionsToFunction.js +0 -2
  61. package/lib/next/RestEndpoint.d.ts +0 -542
  62. package/lib/next/RestEndpoint.js +0 -229
  63. package/lib/next/createResource.d.ts +0 -86
  64. package/lib/next/createResource.d.ts.map +0 -1
  65. package/lib/next/createResource.js +0 -100
  66. package/lib/next/resourceTypes.d.ts.map +0 -1
  67. package/lib/next/resourceTypes.js +0 -2
  68. package/src/next/OptionsToFunction.ts +0 -41
  69. package/src/next/RestEndpoint.d.ts +0 -542
  70. package/src/next/RestEndpoint.js +0 -262
  71. package/src/next/__tests__/RestEndpoint.ts +0 -1333
  72. package/src/next/__tests__/__snapshots__/RestEndpoint.ts.snap +0 -18
  73. package/src/next/__tests__/types.test.ts +0 -429
  74. package/src/next/createResource.ts +0 -194
  75. package/ts4.0/next/OptionsToFunction.d.ts +0 -16
  76. package/ts4.0/next/RestEndpoint.d.ts +0 -226
  77. package/ts4.0/next/createResource.d.ts +0 -94
package/lib/next/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export * from './RestEndpoint.js';
2
- export { default as RestEndpoint } from './RestEndpoint.js';
3
- export { default as createResource } from './createResource.js';
4
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWZhdWx0IiwiUmVzdEVuZHBvaW50IiwiY3JlYXRlUmVzb3VyY2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV4dC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL1Jlc3RFbmRwb2ludC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlc3RFbmRwb2ludCB9IGZyb20gJy4vUmVzdEVuZHBvaW50LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlUmVzb3VyY2UgfSBmcm9tICcuL2NyZWF0ZVJlc291cmNlLmpzJztcbmV4cG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICcuL2NyZWF0ZVJlc291cmNlLmpzJztcbmV4cG9ydCB0eXBlIHsgUmVzb3VyY2VPcHRpb25zLCBSZXNvdXJjZUdlbmVyaWNzIH0gZnJvbSAnLi9yZXNvdXJjZVR5cGVzLmpzJztcbiJdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUI7QUFDakMsU0FBU0EsT0FBTyxJQUFJQyxZQUFZLFFBQVEsbUJBQW1CO0FBQzNELFNBQVNELE9BQU8sSUFBSUUsY0FBYyxRQUFRLHFCQUFxQiJ9
1
+ export * from '../RestEndpoint.js';
2
+ export { default as RestEndpoint } from '../RestEndpoint.js';
3
+ export { default as createResource } from '../createResource.js';
4
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWZhdWx0IiwiUmVzdEVuZHBvaW50IiwiY3JlYXRlUmVzb3VyY2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV4dC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuLi9SZXN0RW5kcG9pbnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZXN0RW5kcG9pbnQgfSBmcm9tICcuLi9SZXN0RW5kcG9pbnQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVSZXNvdXJjZSB9IGZyb20gJy4uL2NyZWF0ZVJlc291cmNlLmpzJztcbmV4cG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICcuLi9jcmVhdGVSZXNvdXJjZS5qcyc7XG5leHBvcnQgdHlwZSB7IFJlc291cmNlT3B0aW9ucywgUmVzb3VyY2VHZW5lcmljcyB9IGZyb20gJy4uL3Jlc291cmNlVHlwZXMuanMnO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQjtBQUNsQyxTQUFTQSxPQUFPLElBQUlDLFlBQVksUUFBUSxvQkFBb0I7QUFDNUQsU0FBU0QsT0FBTyxJQUFJRSxjQUFjLFFBQVEsc0JBQXNCIn0=
@@ -16,5 +16,6 @@ export type PathArgsAndSearch<S extends string> = OnlyRequired<PathKeys<S>> exte
16
16
  /** Removes the last :token */
17
17
  export type ShortenPath<S extends string> = string extends S ? string : S extends `${infer B}:${infer R}` ? TrimColon<`${B}:${ShortenPath<R>}`> : '';
18
18
  type TrimColon<S extends string> = string extends S ? string : S extends `${infer R}:` ? R : S;
19
+ export type ResourcePath = string;
19
20
  export {};
20
21
  //# sourceMappingURL=pathTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pathTypes.d.ts","sourceRoot":"","sources":["../src/pathTypes.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;AAC1E,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC;AAEzE,mDAAmD;AACnD,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GACrD,MAAM,GACN,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC,EAAE,GACnC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GACzB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC,EAAE,GACnC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GACzB,UAAU,CAAC,CAAC,CAAC,CAAC;AAElB,KAAK,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,GAC9D,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GAAG,MAAM,CAAC,EAAE,GACf,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GACnC,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,GAC3C,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GACzC,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,EAAE,GAChC,CAAC,GACD,KAAK,CAAC;AAEV,kCAAkC;AAClC,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,KAAK,GAE9D,OAAO,GACP,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5B,MAAM,MAAM,UAAU,CAAC,GAAG,SAAS,MAAM,IAAI;KAC1C,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAChD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,KAAK,GAChC,OAAO,GACP;KACG,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM;CAC/C,CAAC,CAAC;AAEP,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,IAAI,YAAY,CAC5D,QAAQ,CAAC,CAAC,CAAC,CACZ,SAAS,KAAK,GACX,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,SAAS,GACrD;KACG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM;CACvD,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAExC,8BAA8B;AAC9B,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GACxD,MAAM,GACN,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,GACjC,SAAS,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GACnC,EAAE,CAAC;AAEP,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GAC/C,MAAM,GACN,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,GACvB,CAAC,GACD,CAAC,CAAC"}
1
+ {"version":3,"file":"pathTypes.d.ts","sourceRoot":"","sources":["../src/pathTypes.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;AAC1E,KAAK,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC;AAEzE,mDAAmD;AACnD,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GACrD,MAAM,GACN,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC,EAAE,GACnC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GACzB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC,EAAE,GACnC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GACzB,UAAU,CAAC,CAAC,CAAC,CAAC;AAElB,KAAK,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,GAC9D,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GAAG,MAAM,CAAC,EAAE,GACf,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GACnC,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,GAC3C,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GACzC,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,EAAE,GAChC,CAAC,GACD,KAAK,CAAC;AAEV,kCAAkC;AAClC,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,KAAK,GAE9D,OAAO,GACP,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5B,MAAM,MAAM,UAAU,CAAC,GAAG,SAAS,MAAM,IAAI;KAC1C,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAChD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,KAAK,GAChC,OAAO,GACP;KACG,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM;CAC/C,CAAC,CAAC;AAEP,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,IAAI,YAAY,CAC5D,QAAQ,CAAC,CAAC,CAAC,CACZ,SAAS,KAAK,GACX,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,SAAS,GACrD;KACG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM;CACvD,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAExC,8BAA8B;AAC9B,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GACxD,MAAM,GACN,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,GACjC,SAAS,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GACnC,EAAE,CAAC;AAEP,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GAC/C,MAAM,GACN,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,GACvB,CAAC,GACD,CAAC,CAAC;AAEN,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC"}
package/lib/pathTypes.js CHANGED
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3BhdGhUeXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIE9ubHlPcHRpb25hbDxTIGV4dGVuZHMgc3RyaW5nPiA9IFMgZXh0ZW5kcyBgJHtpbmZlciBLfT9gID8gSyA6IG5ldmVyO1xudHlwZSBPbmx5UmVxdWlyZWQ8UyBleHRlbmRzIHN0cmluZz4gPSBTIGV4dGVuZHMgYCR7c3RyaW5nfT9gID8gbmV2ZXIgOiBTO1xuXG4vKiogQ29tcHV0ZXMgdGhlIHVuaW9uIG9mIGtleXMgZm9yIGEgcGF0aCBzdHJpbmcgKi9cbmV4cG9ydCB0eXBlIFBhdGhLZXlzPFMgZXh0ZW5kcyBzdHJpbmc+ID0gc3RyaW5nIGV4dGVuZHMgU1xuICA/IHN0cmluZ1xuICA6IFMgZXh0ZW5kcyBgJHtpbmZlciBBfVxcXFw6JHtpbmZlciBCfWBcbiAgPyBQYXRoS2V5czxBPiB8IFBhdGhLZXlzPEI+XG4gIDogUyBleHRlbmRzIGAke2luZmVyIEF9XFxcXD8ke2luZmVyIEJ9YFxuICA/IFBhdGhLZXlzPEE+IHwgUGF0aEtleXM8Qj5cbiAgOiBQYXRoU3BsaXRzPFM+O1xuXG50eXBlIFBhdGhTcGxpdHM8UyBleHRlbmRzIHN0cmluZz4gPSBTIGV4dGVuZHMgYCR7c3RyaW5nfToke2luZmVyIEt9JHtcbiAgfCAnLydcbiAgfCAnLCdcbiAgfCAnJSdcbiAgfCAnJid9JHtpbmZlciBSfWBcbiAgPyBQYXRoU3BsaXRzPGA6JHtLfWA+IHwgUGF0aFNwbGl0czxSPlxuICA6IFMgZXh0ZW5kcyBgJHtzdHJpbmd9OiR7aW5mZXIgS306JHtpbmZlciBSfWBcbiAgPyBQYXRoU3BsaXRzPGA6JHtLfWA+IHwgUGF0aFNwbGl0czxgOiR7Un1gPlxuICA6IFMgZXh0ZW5kcyBgJHtzdHJpbmd9OiR7aW5mZXIgS31gXG4gID8gS1xuICA6IG5ldmVyO1xuXG4vKiogUGFyYW1ldGVycyBmb3IgYSBnaXZlbiBwYXRoICovXG5leHBvcnQgdHlwZSBQYXRoQXJnczxTIGV4dGVuZHMgc3RyaW5nPiA9IFBhdGhLZXlzPFM+IGV4dGVuZHMgbmV2ZXJcbiAgPyAvLyB1bmtub3duIGlzIGlkZW50aXR5IGZvciBpbnRlcnNlY3Rpb24gKCcmJylcbiAgICB1bmtub3duXG4gIDogS2V5c1RvQXJnczxQYXRoS2V5czxTPj47XG5cbmV4cG9ydCB0eXBlIEtleXNUb0FyZ3M8S2V5IGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW0sgaW4gS2V5IGFzIE9ubHlPcHRpb25hbDxLPl0/OiBzdHJpbmcgfCBudW1iZXI7XG59ICYgKE9ubHlSZXF1aXJlZDxLZXk+IGV4dGVuZHMgbmV2ZXJcbiAgPyB1bmtub3duXG4gIDoge1xuICAgICAgW0sgaW4gS2V5IGFzIE9ubHlSZXF1aXJlZDxLPl06IHN0cmluZyB8IG51bWJlcjtcbiAgICB9KTtcblxuZXhwb3J0IHR5cGUgUGF0aEFyZ3NBbmRTZWFyY2g8UyBleHRlbmRzIHN0cmluZz4gPSBPbmx5UmVxdWlyZWQ8XG4gIFBhdGhLZXlzPFM+XG4+IGV4dGVuZHMgbmV2ZXJcbiAgPyBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuPiB8IHVuZGVmaW5lZFxuICA6IHtcbiAgICAgIFtLIGluIFBhdGhLZXlzPFM+IGFzIE9ubHlSZXF1aXJlZDxLPl06IHN0cmluZyB8IG51bWJlcjtcbiAgICB9ICYgUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPjtcblxuLyoqIFJlbW92ZXMgdGhlIGxhc3QgOnRva2VuICovXG5leHBvcnQgdHlwZSBTaG9ydGVuUGF0aDxTIGV4dGVuZHMgc3RyaW5nPiA9IHN0cmluZyBleHRlbmRzIFNcbiAgPyBzdHJpbmdcbiAgOiBTIGV4dGVuZHMgYCR7aW5mZXIgQn06JHtpbmZlciBSfWBcbiAgPyBUcmltQ29sb248YCR7Qn06JHtTaG9ydGVuUGF0aDxSPn1gPlxuICA6ICcnO1xuXG50eXBlIFRyaW1Db2xvbjxTIGV4dGVuZHMgc3RyaW5nPiA9IHN0cmluZyBleHRlbmRzIFNcbiAgPyBzdHJpbmdcbiAgOiBTIGV4dGVuZHMgYCR7aW5mZXIgUn06YFxuICA/IFJcbiAgOiBTO1xuIl0sIm1hcHBpbmdzIjoiIn0=
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3BhdGhUeXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIE9ubHlPcHRpb25hbDxTIGV4dGVuZHMgc3RyaW5nPiA9IFMgZXh0ZW5kcyBgJHtpbmZlciBLfT9gID8gSyA6IG5ldmVyO1xudHlwZSBPbmx5UmVxdWlyZWQ8UyBleHRlbmRzIHN0cmluZz4gPSBTIGV4dGVuZHMgYCR7c3RyaW5nfT9gID8gbmV2ZXIgOiBTO1xuXG4vKiogQ29tcHV0ZXMgdGhlIHVuaW9uIG9mIGtleXMgZm9yIGEgcGF0aCBzdHJpbmcgKi9cbmV4cG9ydCB0eXBlIFBhdGhLZXlzPFMgZXh0ZW5kcyBzdHJpbmc+ID0gc3RyaW5nIGV4dGVuZHMgU1xuICA/IHN0cmluZ1xuICA6IFMgZXh0ZW5kcyBgJHtpbmZlciBBfVxcXFw6JHtpbmZlciBCfWBcbiAgPyBQYXRoS2V5czxBPiB8IFBhdGhLZXlzPEI+XG4gIDogUyBleHRlbmRzIGAke2luZmVyIEF9XFxcXD8ke2luZmVyIEJ9YFxuICA/IFBhdGhLZXlzPEE+IHwgUGF0aEtleXM8Qj5cbiAgOiBQYXRoU3BsaXRzPFM+O1xuXG50eXBlIFBhdGhTcGxpdHM8UyBleHRlbmRzIHN0cmluZz4gPSBTIGV4dGVuZHMgYCR7c3RyaW5nfToke2luZmVyIEt9JHtcbiAgfCAnLydcbiAgfCAnLCdcbiAgfCAnJSdcbiAgfCAnJid9JHtpbmZlciBSfWBcbiAgPyBQYXRoU3BsaXRzPGA6JHtLfWA+IHwgUGF0aFNwbGl0czxSPlxuICA6IFMgZXh0ZW5kcyBgJHtzdHJpbmd9OiR7aW5mZXIgS306JHtpbmZlciBSfWBcbiAgPyBQYXRoU3BsaXRzPGA6JHtLfWA+IHwgUGF0aFNwbGl0czxgOiR7Un1gPlxuICA6IFMgZXh0ZW5kcyBgJHtzdHJpbmd9OiR7aW5mZXIgS31gXG4gID8gS1xuICA6IG5ldmVyO1xuXG4vKiogUGFyYW1ldGVycyBmb3IgYSBnaXZlbiBwYXRoICovXG5leHBvcnQgdHlwZSBQYXRoQXJnczxTIGV4dGVuZHMgc3RyaW5nPiA9IFBhdGhLZXlzPFM+IGV4dGVuZHMgbmV2ZXJcbiAgPyAvLyB1bmtub3duIGlzIGlkZW50aXR5IGZvciBpbnRlcnNlY3Rpb24gKCcmJylcbiAgICB1bmtub3duXG4gIDogS2V5c1RvQXJnczxQYXRoS2V5czxTPj47XG5cbmV4cG9ydCB0eXBlIEtleXNUb0FyZ3M8S2V5IGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW0sgaW4gS2V5IGFzIE9ubHlPcHRpb25hbDxLPl0/OiBzdHJpbmcgfCBudW1iZXI7XG59ICYgKE9ubHlSZXF1aXJlZDxLZXk+IGV4dGVuZHMgbmV2ZXJcbiAgPyB1bmtub3duXG4gIDoge1xuICAgICAgW0sgaW4gS2V5IGFzIE9ubHlSZXF1aXJlZDxLPl06IHN0cmluZyB8IG51bWJlcjtcbiAgICB9KTtcblxuZXhwb3J0IHR5cGUgUGF0aEFyZ3NBbmRTZWFyY2g8UyBleHRlbmRzIHN0cmluZz4gPSBPbmx5UmVxdWlyZWQ8XG4gIFBhdGhLZXlzPFM+XG4+IGV4dGVuZHMgbmV2ZXJcbiAgPyBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuPiB8IHVuZGVmaW5lZFxuICA6IHtcbiAgICAgIFtLIGluIFBhdGhLZXlzPFM+IGFzIE9ubHlSZXF1aXJlZDxLPl06IHN0cmluZyB8IG51bWJlcjtcbiAgICB9ICYgUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPjtcblxuLyoqIFJlbW92ZXMgdGhlIGxhc3QgOnRva2VuICovXG5leHBvcnQgdHlwZSBTaG9ydGVuUGF0aDxTIGV4dGVuZHMgc3RyaW5nPiA9IHN0cmluZyBleHRlbmRzIFNcbiAgPyBzdHJpbmdcbiAgOiBTIGV4dGVuZHMgYCR7aW5mZXIgQn06JHtpbmZlciBSfWBcbiAgPyBUcmltQ29sb248YCR7Qn06JHtTaG9ydGVuUGF0aDxSPn1gPlxuICA6ICcnO1xuXG50eXBlIFRyaW1Db2xvbjxTIGV4dGVuZHMgc3RyaW5nPiA9IHN0cmluZyBleHRlbmRzIFNcbiAgPyBzdHJpbmdcbiAgOiBTIGV4dGVuZHMgYCR7aW5mZXIgUn06YFxuICA/IFJcbiAgOiBTO1xuXG5leHBvcnQgdHlwZSBSZXNvdXJjZVBhdGggPSBzdHJpbmc7IC8vIGAke3N0cmluZ306JHtzdHJpbmd9YDsgVE9ETzogTWF5YmUgZG8gdGhpcyBpbiB0aGUgZnV0dXJlPyBTZWVtcyB0byBoYXJkIHRvIHVuZGVyc3RhbmQgZm9yIG5vd1xuIl0sIm1hcHBpbmdzIjoiIn0=
@@ -1,15 +1,26 @@
1
1
  import type { Schema } from '@data-client/endpoint';
2
+ import type { ResourcePath } from './pathTypes.js';
2
3
  import RestEndpoint from './RestEndpoint.js';
3
4
  export interface ResourceGenerics {
4
- readonly path: string;
5
+ /** @see https://resthooks.io/rest/api/createResource#path */
6
+ readonly path: ResourcePath;
7
+ /** @see https://resthooks.io/rest/api/createResource#schema */
5
8
  readonly schema: Schema;
9
+ /** @see https://resthooks.io/rest/api/createResource#paginationfield */
10
+ readonly paginationField?: string;
6
11
  /** Only used for types */
12
+ /** @see https://dataclient.io/rest/api/createResource#body */
7
13
  readonly body?: any;
8
14
  /** Only used for types */
15
+ /** @see https://resthooks.io/rest/api/createResource#searchParams */
9
16
  readonly searchParams?: any;
10
17
  }
11
18
  export interface ResourceOptions {
19
+ /** @see https://resthooks.io/rest/api/createResource#endpoint */
12
20
  Endpoint?: typeof RestEndpoint;
21
+ /** @see https://resthooks.io/rest/api/createResource#optimistic */
22
+ optimistic?: boolean;
23
+ /** @see https://resthooks.io/rest/api/createResource#urlprefix */
13
24
  urlPrefix?: string;
14
25
  requestInit?: RequestInit;
15
26
  getHeaders?(headers: HeadersInit): Promise<HeadersInit> | HeadersInit;
@@ -26,6 +37,5 @@ export interface ResourceOptions {
26
37
  readonly invalidIfStale?: boolean;
27
38
  /** Determines whether to throw or fallback to */
28
39
  errorPolicy?(error: any): 'hard' | 'soft' | undefined;
29
- optimistic?: boolean;
30
40
  }
31
41
  //# sourceMappingURL=resourceTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceTypes.d.ts","sourceRoot":"","sources":["../src/resourceTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,0BAA0B;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IACpB,0BAA0B;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC;CAC7B;AACD,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,YAAY,CAAC;IAC/B,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;IACtE,cAAc,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;IAC/D,aAAa,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpE,aAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjD,0FAA0F;IAC1F,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,2FAA2F;IAC3F,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,uDAAuD;IACvD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,iDAAiD;IACjD,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACvD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3Jlc291cmNlVHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTY2hlbWEgfSBmcm9tICdAZGF0YS1jbGllbnQvZW5kcG9pbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlUGF0aCB9IGZyb20gJy4vcGF0aFR5cGVzLmpzJztcbmltcG9ydCBSZXN0RW5kcG9pbnQgZnJvbSAnLi9SZXN0RW5kcG9pbnQuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlR2VuZXJpY3Mge1xuICAvKiogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9yZXN0L2FwaS9jcmVhdGVSZXNvdXJjZSNwYXRoICovXG4gIHJlYWRvbmx5IHBhdGg6IFJlc291cmNlUGF0aDtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vcmVzdC9hcGkvY3JlYXRlUmVzb3VyY2Ujc2NoZW1hICovXG4gIHJlYWRvbmx5IHNjaGVtYTogU2NoZW1hO1xuICAvKiogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9yZXN0L2FwaS9jcmVhdGVSZXNvdXJjZSNwYWdpbmF0aW9uZmllbGQgKi9cbiAgcmVhZG9ubHkgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nO1xuICAvKiogT25seSB1c2VkIGZvciB0eXBlcyAqL1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvY3JlYXRlUmVzb3VyY2UjYm9keSAqL1xuICByZWFkb25seSBib2R5PzogYW55O1xuICAvKiogT25seSB1c2VkIGZvciB0eXBlcyAqL1xuICAvKiogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9yZXN0L2FwaS9jcmVhdGVSZXNvdXJjZSNzZWFyY2hQYXJhbXMgKi9cbiAgcmVhZG9ubHkgc2VhcmNoUGFyYW1zPzogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZU9wdGlvbnMge1xuICAvKiogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9yZXN0L2FwaS9jcmVhdGVSZXNvdXJjZSNlbmRwb2ludCAqL1xuICBFbmRwb2ludD86IHR5cGVvZiBSZXN0RW5kcG9pbnQ7XG4gIC8qKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL3Jlc3QvYXBpL2NyZWF0ZVJlc291cmNlI29wdGltaXN0aWMgKi9cbiAgb3B0aW1pc3RpYz86IGJvb2xlYW47XG4gIC8qKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL3Jlc3QvYXBpL2NyZWF0ZVJlc291cmNlI3VybHByZWZpeCAqL1xuICB1cmxQcmVmaXg/OiBzdHJpbmc7XG4gIHJlcXVlc3RJbml0PzogUmVxdWVzdEluaXQ7XG4gIGdldEhlYWRlcnM/KGhlYWRlcnM6IEhlYWRlcnNJbml0KTogUHJvbWlzZTxIZWFkZXJzSW5pdD4gfCBIZWFkZXJzSW5pdDtcbiAgZ2V0UmVxdWVzdEluaXQ/KGJvZHk6IGFueSk6IFByb21pc2U8UmVxdWVzdEluaXQ+IHwgUmVxdWVzdEluaXQ7XG4gIGZldGNoUmVzcG9uc2U/KGlucHV0OiBSZXF1ZXN0SW5mbywgaW5pdDogUmVxdWVzdEluaXQpOiBQcm9taXNlPGFueT47XG4gIHBhcnNlUmVzcG9uc2U/KHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8YW55PjtcbiAgLyoqIERlZmF1bHQgZGF0YSBleHBpcnkgbGVuZ3RoLCB3aWxsIGZhbGwgYmFjayB0byBOZXR3b3JrTWFuYWdlciBkZWZhdWx0IGlmIG5vdCBkZWZpbmVkICovXG4gIHJlYWRvbmx5IGRhdGFFeHBpcnlMZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBEZWZhdWx0IGVycm9yIGV4cGlyeSBsZW5ndGgsIHdpbGwgZmFsbCBiYWNrIHRvIE5ldHdvcmtNYW5hZ2VyIGRlZmF1bHQgaWYgbm90IGRlZmluZWQgKi9cbiAgcmVhZG9ubHkgZXJyb3JFeHBpcnlMZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBQb2xsIHdpdGggYXQgbGVhc3QgdGhpcyBmcmVxdWVuY3kgaW4gbWlsaXNlY29uZHMgKi9cbiAgcmVhZG9ubHkgcG9sbEZyZXF1ZW5jeT86IG51bWJlcjtcbiAgLyoqIE1hcmtzIGNhY2hlZCByZXNvdXJjZXMgYXMgaW52YWxpZCBpZiB0aGV5IGFyZSBzdGFsZSAqL1xuICByZWFkb25seSBpbnZhbGlkSWZTdGFsZT86IGJvb2xlYW47XG4gIC8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdGhyb3cgb3IgZmFsbGJhY2sgdG8gKi9cbiAgZXJyb3JQb2xpY3k/KGVycm9yOiBhbnkpOiAnaGFyZCcgfCAnc29mdCcgfCB1bmRlZmluZWQ7XG59XG4iXSwibWFwcGluZ3MiOiIifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@data-client/rest",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Endpoints for REST APIs",
5
5
  "homepage": "https://dataclient.io/rest",
6
6
  "repository": {
@@ -110,7 +110,7 @@
110
110
  "license": "Apache-2.0",
111
111
  "dependencies": {
112
112
  "@babel/runtime": "^7.17.0",
113
- "@data-client/endpoint": "^0.1.0",
113
+ "@data-client/endpoint": "^0.2.1",
114
114
  "path-to-regexp": "^6.2.1"
115
115
  },
116
116
  "devDependencies": {
@@ -118,4 +118,4 @@
118
118
  "@types/node": "^20.0.0",
119
119
  "@types/path-to-regexp": "^1.7.0"
120
120
  }
121
- }
121
+ }
@@ -3,7 +3,6 @@ import type { FetchFunction, ResolveType } from '@data-client/endpoint';
3
3
  import { PathArgs } from './pathTypes.js';
4
4
  import {
5
5
  PartialRestGenerics,
6
- RestInstance,
7
6
  RestInstanceBase,
8
7
  RestFetch,
9
8
  } from './RestEndpoint.js';
@@ -47,9 +47,9 @@ export interface RestInstanceBase<
47
47
  getRequestInit(
48
48
  this: any,
49
49
  body?: RequestInit['body'] | Record<string, unknown>,
50
- ): RequestInit;
50
+ ): Promise<RequestInit> | RequestInit;
51
51
  /** @see https://resthooks.io/rest/api/RestEndpoint#getHeaders */
52
- getHeaders(headers: HeadersInit): HeadersInit;
52
+ getHeaders(headers: HeadersInit): Promise<HeadersInit> | HeadersInit;
53
53
  /* after-fetch */
54
54
  /** @see https://resthooks.io/rest/api/RestEndpoint#fetchResponse */
55
55
  fetchResponse(input: RequestInfo, init: RequestInit): Promise<Response>;
@@ -102,15 +102,6 @@ export interface RestInstance<
102
102
  assign: AddEndpoint<F, S, O>;
103
103
  }
104
104
 
105
- export type ContainsCollectionArray =
106
- | { push: any; unshift: any }
107
- | { [K: string]: ContainsCollectionArray }
108
- | { schema: { [K: string]: ContainsCollectionArray } };
109
- export type ContainsCollectionValues =
110
- | { assign: any }
111
- | { [K: string]: ContainsCollectionValues }
112
- | { schema: { [K: string]: ContainsCollectionValues } };
113
-
114
105
  export type RestEndpointExtendOptions<
115
106
  O extends PartialRestGenerics,
116
107
  E extends RestInstanceBase,
@@ -271,7 +262,7 @@ export type AddEndpoint<
271
262
  : O['searchParams'] & PathArgs<Exclude<O['path'], undefined>>
272
263
  : PathArgs<Exclude<O['path'], undefined>>,
273
264
  any,
274
- ReturnType<F>
265
+ ResolveType<F>
275
266
  >,
276
267
  ExtractCollection<S>,
277
268
  true,
@@ -496,51 +487,54 @@ export type FetchGet<A extends readonly any[] = [any], R = any> = (
496
487
  ...args: A
497
488
  ) => Promise<R>;
498
489
 
499
- export type GetEndpoint<
500
- UrlParams = any,
501
- S extends Schema | undefined = Schema | undefined,
502
- > = RestTypeNoBody<UrlParams, S, undefined>;
503
-
504
- export type MutateEndpoint<
505
- UrlParams = any,
506
- Body extends BodyInit | Record<string, any> = any,
507
- S extends Schema | undefined = Schema | undefined,
508
- > = RestTypeWithBody<UrlParams, S, true, Body>;
509
-
510
490
  export type Defaults<O, D> = {
511
491
  [K in keyof O | keyof D]: K extends keyof O
512
492
  ? Exclude<O[K], undefined>
513
493
  : D[Extract<K, keyof D>];
514
494
  };
515
495
 
516
- export type NewGetEndpoint<
496
+ export type GetEndpoint<
517
497
  O extends {
498
+ readonly path: string;
499
+ readonly schema: Schema;
500
+ /** Only used for types */
501
+ readonly searchParams?: any;
502
+ } = {
518
503
  path: string;
519
- searchParams?: any;
520
- } = { path: string },
521
- S extends Schema | undefined = Schema | undefined,
504
+ schema: Schema;
505
+ },
522
506
  > = RestTypeNoBody<
523
507
  'searchParams' extends keyof O
524
- ? O['searchParams'] & PathArgs<O['path']>
508
+ ? O['searchParams'] extends undefined
509
+ ? PathArgs<O['path']>
510
+ : O['searchParams'] & PathArgs<O['path']>
525
511
  : PathArgs<O['path']>,
526
- S,
512
+ O['schema'],
527
513
  undefined,
528
514
  any,
529
515
  O & { body: undefined }
530
516
  >;
531
517
 
532
- export type NewMutateEndpoint<
518
+ export type MutateEndpoint<
533
519
  O extends {
520
+ readonly path: string;
521
+ readonly schema: Schema;
522
+ /** Only used for types */
523
+ readonly searchParams?: any;
524
+ /** Only used for types */
525
+ readonly body?: any;
526
+ } = {
534
527
  path: string;
535
- body?: any;
536
- searchParams?: any;
537
- } = { path: string; body: any },
538
- S extends Schema | undefined = Schema | undefined,
528
+ body: any;
529
+ schema: Schema;
530
+ },
539
531
  > = RestTypeWithBody<
540
532
  'searchParams' extends keyof O
541
- ? O['searchParams'] & PathArgs<O['path']>
533
+ ? O['searchParams'] extends undefined
534
+ ? PathArgs<O['path']>
535
+ : O['searchParams'] & PathArgs<O['path']>
542
536
  : PathArgs<O['path']>,
543
- S,
537
+ O['schema'],
544
538
  true,
545
539
  O['body'],
546
540
  any,
@@ -18,13 +18,13 @@ export default class RestEndpoint extends Endpoint {
18
18
  constructor(options) {
19
19
  super(
20
20
  options.fetch ??
21
- function (...args) {
21
+ async function (...args) {
22
22
  const urlParams =
23
23
  this.#hasBody && args.length < 2 ? {} : args[0] || {};
24
24
  const body = this.#hasBody ? args[args.length - 1] : undefined;
25
25
  return this.fetchResponse(
26
26
  this.url(urlParams),
27
- this.getRequestInit(body),
27
+ await this.getRequestInit(body),
28
28
  )
29
29
  .then(response => this.parseResponse(response))
30
30
  .then(res => this.process(res, ...args));
@@ -87,7 +87,7 @@ export default class RestEndpoint extends Endpoint {
87
87
  }
88
88
 
89
89
  /** Init options for fetch - run at fetch */
90
- getRequestInit(body) {
90
+ async getRequestInit(body) {
91
91
  const bodyIsPojo = isPojo(body);
92
92
  if (bodyIsPojo) {
93
93
  body = JSON.stringify(body);
@@ -105,7 +105,7 @@ export default class RestEndpoint extends Endpoint {
105
105
  ...init.headers,
106
106
  };
107
107
  }
108
- init.headers = this.getHeaders(init.headers);
108
+ init.headers = await this.getHeaders(init.headers);
109
109
  return init;
110
110
  }
111
111
 
@@ -34,11 +34,11 @@ export function isPojo(obj: unknown): obj is Record<string, any> {
34
34
  }
35
35
 
36
36
  export function shortenPath<S extends string>(path: S): ShortenPath<S> {
37
+ const lastColonIndex = path.lastIndexOf(':');
38
+ if (lastColonIndex === -1)
39
+ throw new Error('Resource path requires at least one :parameter');
37
40
  // this is for when not specifying a specific item like create/list
38
- let shortUrlRoot: ShortenPath<S> = path.substring(
39
- 0,
40
- path.lastIndexOf(':'),
41
- ) as any;
41
+ let shortUrlRoot: ShortenPath<S> = path.substring(0, lastColonIndex) as any;
42
42
  if (shortUrlRoot[shortUrlRoot.length - 1] === '/')
43
43
  shortUrlRoot = shortUrlRoot.substring(
44
44
  0,
@@ -2,11 +2,11 @@ import { Entity, Schema } from '@data-client/endpoint';
2
2
  import { useController } from '@data-client/react';
3
3
  import { useSuspense } from '@data-client/react';
4
4
  import { CacheProvider } from '@data-client/react';
5
- import { act } from '@testing-library/react-hooks';
6
5
  import nock from 'nock';
7
6
 
8
7
  import { makeRenderRestHook } from '../../../test';
9
8
  import createResource from '../createResource';
9
+ import { ResourcePath } from '../pathTypes';
10
10
  import RestEndpoint from '../RestEndpoint';
11
11
  import {
12
12
  payload,
@@ -47,7 +47,7 @@ export class PaginatedArticle extends Entity {
47
47
  author: User,
48
48
  };
49
49
  }
50
- function createPaginatableResource<U extends string, S extends Schema>({
50
+ function createPaginatableResource<U extends ResourcePath, S extends Schema>({
51
51
  path,
52
52
  schema,
53
53
  Endpoint = RestEndpoint,
@@ -2,7 +2,6 @@ import { Entity } from '@data-client/endpoint';
2
2
  import { useController } from '@data-client/react';
3
3
  import { useSuspense } from '@data-client/react';
4
4
  import { CacheProvider } from '@data-client/react';
5
- import { act } from '@testing-library/react-hooks';
6
5
  import { Article, CoolerArticle, CoolerArticleResource } from '__tests__/new';
7
6
  import nock from 'nock';
8
7
 
@@ -733,9 +732,12 @@ describe('RestEndpoint', () => {
733
732
  }
734
733
  `);
735
734
 
736
- const newBody = getUser.extend({
737
- body: {} as { title: string },
738
- });
735
+ const newBody = getUser
736
+ .extend({
737
+ body: {} as { title: string },
738
+ dataExpiryLength: 0,
739
+ })
740
+ .extend({ dataExpiryLength: 5 });
739
741
  () => newBody({ group: 'hi', id: 'what' }, { title: 'cool' });
740
742
  // @ts-expect-error
741
743
  () => newBody({ id: 'what' }, { title: 'cool' });
@@ -746,11 +748,12 @@ describe('RestEndpoint', () => {
746
748
  // @ts-expect-error
747
749
  () => newBody({ group: 'hi', id: 'what' }, { sdfsd: 'cool' });
748
750
 
749
- const bodyNoParams = newBody
750
- .extend({
751
- path: '/',
752
- })
753
- .extend({ body: {} as { happy: string } });
751
+ const bodyNoPath = newBody.extend({
752
+ path: '/',
753
+ });
754
+ const bodyNoParams = bodyNoPath.extend({
755
+ body: {} as { happy: string },
756
+ });
754
757
  () => bodyNoParams({ happy: 'cool' });
755
758
  // @ts-expect-error
756
759
  () => bodyNoParams({ group: 'hi', id: 'what' }, { happy: 'cool' });
@@ -1015,6 +1018,28 @@ describe('RestEndpoint', () => {
1015
1018
  params.id;
1016
1019
  },
1017
1020
  });
1021
+
1022
+ const endpoint2 = new RestEndpoint({
1023
+ sideEffect: true,
1024
+ path: 'http\\://test.com/article-cooler/:id',
1025
+ body: 0 as any,
1026
+ schema: CoolerArticle,
1027
+ getOptimisticResponse(snap, params, body) {
1028
+ params.id;
1029
+ // @ts-expect-error
1030
+ params.two;
1031
+
1032
+ body.hi;
1033
+ },
1034
+ }).extend({
1035
+ getOptimisticResponse(snap, params, body) {
1036
+ params.id;
1037
+ // @ts-expect-error
1038
+ params.two;
1039
+
1040
+ body.hi;
1041
+ },
1042
+ });
1018
1043
  });
1019
1044
  });
1020
1045
 
@@ -1292,6 +1317,10 @@ describe('RestEndpoint.fetch()', () => {
1292
1317
  });
1293
1318
  expect(res).toEqual({ id, title: 'hi' });
1294
1319
  });
1320
+
1321
+ it('without Collection in schema - endpoint.push schema should be null', () => {
1322
+ expect(getArticleList2.push.schema).toBeFalsy();
1323
+ });
1295
1324
  });
1296
1325
  const proto = Object.prototype;
1297
1326
  const gpo = Object.getPrototypeOf;
@@ -3,3 +3,5 @@
3
3
  exports[`createResource() UserResource.delete should work with 1`] = `"not found"`;
4
4
 
5
5
  exports[`createResource() UserResource.delete should work with {"id": 5} 1`] = `"not found"`;
6
+
7
+ exports[`createResource() should not allow paths without at least one argument 1`] = `"Resource path requires at least one :parameter"`;
@@ -79,6 +79,28 @@ describe('createResource()', () => {
79
79
  nock.cleanAll();
80
80
  });
81
81
 
82
+ it('should not allow paths without at least one argument', () => {
83
+ class Todo extends Entity {
84
+ id = '';
85
+ userId = 0;
86
+ title = '';
87
+ completed = false;
88
+
89
+ static key = 'Todo';
90
+ pk() {
91
+ return this.id;
92
+ }
93
+ }
94
+
95
+ expect(() =>
96
+ createResource({
97
+ // TODO(see path types): @ts-expect-error
98
+ path: '/todos/',
99
+ schema: Todo,
100
+ }),
101
+ ).toThrowErrorMatchingSnapshot();
102
+ });
103
+
82
104
  it('UserResource.get should work', async () => {
83
105
  const { result, waitForNextUpdate } = renderRestHook(() => {
84
106
  return useSuspense(UserResource.get, { group: 'five', id: '5' });
@@ -187,7 +209,7 @@ describe('createResource()', () => {
187
209
  ...body,
188
210
  }));
189
211
 
190
- const { result, waitForNextUpdate } = renderRestHook(() => {
212
+ const { result } = renderRestHook(() => {
191
213
  return [
192
214
  useCache(UserResource.get, { group: 'five', id: '5' }),
193
215
  useController(),
@@ -195,8 +217,8 @@ describe('createResource()', () => {
195
217
  });
196
218
  // eslint-disable-next-line prefer-const
197
219
  let [_, controller] = result.current;
198
- await act(() => {
199
- controller.fetch(
220
+ await act(async () => {
221
+ await controller.fetch(
200
222
  UserResource.create,
201
223
  { group: 'five' },
202
224
  {
@@ -205,7 +227,6 @@ describe('createResource()', () => {
205
227
  },
206
228
  );
207
229
  });
208
- await waitForNextUpdate();
209
230
  const user = result.current[0];
210
231
  expect(user).toBeDefined();
211
232
  expect(user?.username).toBe('createduser');
@@ -150,7 +150,7 @@ describe('hookifyResource()', () => {
150
150
  const res = await result.current.fetch(result.current.endpoint, {
151
151
  id: payload.id,
152
152
  });
153
- expect(res).toEqual({ id: 5 });
153
+ expect(res).toEqual(CoolerArticle.fromJS({ id: 5 }));
154
154
  });
155
155
 
156
156
  it('useUpdate', async () => {
@@ -166,7 +166,9 @@ describe('hookifyResource()', () => {
166
166
  ...CoolerArticle.fromJS(payload),
167
167
  },
168
168
  );
169
- expect(res).toEqual(putResponseBody);
169
+ expect(res).toEqual(
170
+ result.current.endpoint.schema.fromJS(putResponseBody),
171
+ );
170
172
  });
171
173
 
172
174
  it('usePartialUpdate', async () => {
@@ -180,7 +182,9 @@ describe('hookifyResource()', () => {
180
182
  { id },
181
183
  patchPayload,
182
184
  );
183
- expect(res).toEqual(patchResponseBody);
185
+ expect(res).toEqual(
186
+ result.current.endpoint.schema.fromJS(patchResponseBody),
187
+ );
184
188
  });
185
189
 
186
190
  it('should use useFetchInit if defined (in endpoint method)', async () => {