@data-client/rest 0.10.0 → 0.11.0

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