@data-client/rest 0.1.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 (158) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +110 -0
  3. package/dist/index.js +561 -0
  4. package/dist/index.umd.min.js +1 -0
  5. package/dist/next.js +520 -0
  6. package/dist/package.json +1 -0
  7. package/legacy/NetworkError.js +13 -0
  8. package/legacy/OptionsToFunction.js +2 -0
  9. package/legacy/RestEndpoint.js +225 -0
  10. package/legacy/RestEndpointTypeHelp.js +2 -0
  11. package/legacy/RestHelpers.js +33 -0
  12. package/legacy/createResource.js +88 -0
  13. package/legacy/extractCollection.js +14 -0
  14. package/legacy/getArrayPath.js +19 -0
  15. package/legacy/hookifyResource.js +24 -0
  16. package/legacy/index.js +10 -0
  17. package/legacy/mapCollection.js +14 -0
  18. package/legacy/next/OptionsToFunction.js +2 -0
  19. package/legacy/next/RestEndpoint.js +225 -0
  20. package/legacy/next/createResource.js +86 -0
  21. package/legacy/next/index.js +4 -0
  22. package/legacy/next/resourceTypes.js +2 -0
  23. package/legacy/paginatedCollections.js +29 -0
  24. package/legacy/paginationUpdate.js +36 -0
  25. package/legacy/paramsToString.js +6 -0
  26. package/legacy/paramsToString.native.js +9 -0
  27. package/legacy/pathTypes.js +2 -0
  28. package/legacy/test-fixtures.js +111 -0
  29. package/legacy/utiltypes.js +2 -0
  30. package/lib/NetworkError.d.ts +11 -0
  31. package/lib/NetworkError.d.ts.map +1 -0
  32. package/lib/NetworkError.js +13 -0
  33. package/lib/OptionsToFunction.d.ts +7 -0
  34. package/lib/OptionsToFunction.d.ts.map +1 -0
  35. package/lib/OptionsToFunction.js +2 -0
  36. package/lib/RestEndpoint.d.ts +548 -0
  37. package/lib/RestEndpoint.js +229 -0
  38. package/lib/RestEndpointTypeHelp.d.ts +10 -0
  39. package/lib/RestEndpointTypeHelp.d.ts.map +1 -0
  40. package/lib/RestEndpointTypeHelp.js +2 -0
  41. package/lib/RestHelpers.d.ts +7 -0
  42. package/lib/RestHelpers.d.ts.map +1 -0
  43. package/lib/RestHelpers.js +33 -0
  44. package/lib/createResource.d.ts +66 -0
  45. package/lib/createResource.d.ts.map +1 -0
  46. package/lib/createResource.js +104 -0
  47. package/lib/extractCollection.d.ts +11 -0
  48. package/lib/extractCollection.d.ts.map +1 -0
  49. package/lib/extractCollection.js +16 -0
  50. package/lib/getArrayPath.d.ts +3 -0
  51. package/lib/getArrayPath.d.ts.map +1 -0
  52. package/lib/getArrayPath.js +19 -0
  53. package/lib/hookifyResource.d.ts +14 -0
  54. package/lib/hookifyResource.d.ts.map +1 -0
  55. package/lib/hookifyResource.js +24 -0
  56. package/lib/index.d.ts +12 -0
  57. package/lib/index.d.ts.map +1 -0
  58. package/lib/index.js +10 -0
  59. package/lib/mapCollection.d.ts +16 -0
  60. package/lib/mapCollection.d.ts.map +1 -0
  61. package/lib/mapCollection.js +16 -0
  62. package/lib/next/OptionsToFunction.d.ts +7 -0
  63. package/lib/next/OptionsToFunction.d.ts.map +1 -0
  64. package/lib/next/OptionsToFunction.js +2 -0
  65. package/lib/next/RestEndpoint.d.ts +542 -0
  66. package/lib/next/RestEndpoint.js +229 -0
  67. package/lib/next/createResource.d.ts +86 -0
  68. package/lib/next/createResource.d.ts.map +1 -0
  69. package/lib/next/createResource.js +100 -0
  70. package/lib/next/index.d.ts +6 -0
  71. package/lib/next/index.d.ts.map +1 -0
  72. package/lib/next/index.js +4 -0
  73. package/lib/next/resourceTypes.d.ts +31 -0
  74. package/lib/next/resourceTypes.d.ts.map +1 -0
  75. package/lib/next/resourceTypes.js +2 -0
  76. package/lib/paginatedCollections.d.ts +3 -0
  77. package/lib/paginatedCollections.d.ts.map +1 -0
  78. package/lib/paginatedCollections.js +29 -0
  79. package/lib/paginationUpdate.d.ts +8 -0
  80. package/lib/paginationUpdate.d.ts.map +1 -0
  81. package/lib/paginationUpdate.js +40 -0
  82. package/lib/paramsToString.d.ts +2 -0
  83. package/lib/paramsToString.d.ts.map +1 -0
  84. package/lib/paramsToString.js +6 -0
  85. package/lib/paramsToString.native.d.ts +2 -0
  86. package/lib/paramsToString.native.d.ts.map +1 -0
  87. package/lib/paramsToString.native.js +9 -0
  88. package/lib/pathTypes.d.ts +20 -0
  89. package/lib/pathTypes.d.ts.map +1 -0
  90. package/lib/pathTypes.js +2 -0
  91. package/lib/test-fixtures.d.ts +141 -0
  92. package/lib/test-fixtures.d.ts.map +1 -0
  93. package/lib/test-fixtures.js +111 -0
  94. package/lib/utiltypes.d.ts +21 -0
  95. package/lib/utiltypes.d.ts.map +1 -0
  96. package/lib/utiltypes.js +2 -0
  97. package/node.mjs +1 -0
  98. package/package.json +121 -0
  99. package/src/NetworkError.ts +17 -0
  100. package/src/OptionsToFunction.ts +42 -0
  101. package/src/RestEndpoint.d.ts +548 -0
  102. package/src/RestEndpoint.js +262 -0
  103. package/src/RestEndpointTypeHelp.ts +20 -0
  104. package/src/RestHelpers.ts +48 -0
  105. package/src/__tests__/Resource.test.ts +317 -0
  106. package/src/__tests__/RestEndpoint.ts +1304 -0
  107. package/src/__tests__/__snapshots__/RestEndpoint.ts.snap +18 -0
  108. package/src/__tests__/__snapshots__/createResource.test.ts.snap +5 -0
  109. package/src/__tests__/createResource.test.ts +583 -0
  110. package/src/__tests__/getArrayPath.test.ts +30 -0
  111. package/src/__tests__/hookifyResource.ts +197 -0
  112. package/src/__tests__/types.test.ts +309 -0
  113. package/src/createResource.ts +172 -0
  114. package/src/extractCollection.ts +34 -0
  115. package/src/getArrayPath.ts +20 -0
  116. package/src/hookifyResource.ts +36 -0
  117. package/src/index.ts +42 -0
  118. package/src/mapCollection.ts +54 -0
  119. package/src/next/OptionsToFunction.ts +41 -0
  120. package/src/next/RestEndpoint.d.ts +542 -0
  121. package/src/next/RestEndpoint.js +262 -0
  122. package/src/next/__tests__/RestEndpoint.ts +1333 -0
  123. package/src/next/__tests__/__snapshots__/RestEndpoint.ts.snap +18 -0
  124. package/src/next/__tests__/types.test.ts +429 -0
  125. package/src/next/createResource.ts +194 -0
  126. package/src/next/index.ts +5 -0
  127. package/src/next/resourceTypes.ts +32 -0
  128. package/src/package.json +1 -0
  129. package/src/paginatedCollections.ts +32 -0
  130. package/src/paginationUpdate.ts +49 -0
  131. package/src/paramsToString.native.ts +10 -0
  132. package/src/paramsToString.ts +7 -0
  133. package/src/pathTypes.ts +58 -0
  134. package/src/test-fixtures.ts +128 -0
  135. package/src/utiltypes.ts +25 -0
  136. package/ts4.0/NetworkError.d.ts +11 -0
  137. package/ts4.0/OptionsToFunction.d.ts +16 -0
  138. package/ts4.0/RestEndpoint.d.ts +240 -0
  139. package/ts4.0/RestEndpointTypeHelp.d.ts +10 -0
  140. package/ts4.0/RestHelpers.d.ts +7 -0
  141. package/ts4.0/createResource.d.ts +66 -0
  142. package/ts4.0/extractCollection.d.ts +11 -0
  143. package/ts4.0/getArrayPath.d.ts +3 -0
  144. package/ts4.0/hookifyResource.d.ts +19 -0
  145. package/ts4.0/index.d.ts +12 -0
  146. package/ts4.0/mapCollection.d.ts +16 -0
  147. package/ts4.0/next/OptionsToFunction.d.ts +16 -0
  148. package/ts4.0/next/RestEndpoint.d.ts +226 -0
  149. package/ts4.0/next/createResource.d.ts +94 -0
  150. package/ts4.0/next/index.d.ts +6 -0
  151. package/ts4.0/next/resourceTypes.d.ts +31 -0
  152. package/ts4.0/paginatedCollections.d.ts +3 -0
  153. package/ts4.0/paginationUpdate.d.ts +10 -0
  154. package/ts4.0/paramsToString.d.ts +2 -0
  155. package/ts4.0/paramsToString.native.d.ts +2 -0
  156. package/ts4.0/pathTypes.d.ts +20 -0
  157. package/ts4.0/test-fixtures.d.ts +141 -0
  158. package/ts4.0/utiltypes.d.ts +5 -0
@@ -0,0 +1,40 @@
1
+ import getArrayPath from './getArrayPath.js';
2
+ export default function paginationUpdate(endpoint, removeCursor) {
3
+ // infer path from schema. if schema is undefined assume array is top level
4
+ const path = getArrayPath(endpoint.schema);
5
+ if (path === false) throw new Error('schema has no array');
6
+ return (newPage, ...args) => ({
7
+ [endpoint.key(...removeCursor(...args))]: existing => {
8
+ const existingList = getIn(existing, path);
9
+ // using set so our lookups are O(1) in case this is large
10
+ const existingSet = new Set(existingList);
11
+ const addedList = getIn(newPage, path).filter(pk => !existingSet.has(pk));
12
+ const mergedResults = [...existingList, ...addedList];
13
+ return setIn(newPage, path, mergedResults);
14
+ }
15
+ });
16
+ }
17
+ const getIn = (results, path) => {
18
+ let cur = results;
19
+ for (const p of path) {
20
+ if (!cur) return [];
21
+ cur = cur[p];
22
+ }
23
+ return cur || [];
24
+ };
25
+ const setIn = (results, path, values) => {
26
+ if (path.length === 0) return values;
27
+ const newResults = {
28
+ ...results
29
+ };
30
+ let cur = newResults;
31
+ for (let i = 0; i < path.length - 1; i++) {
32
+ const p = path[i];
33
+ cur = cur[p] = {
34
+ ...cur[p]
35
+ };
36
+ }
37
+ cur[path[path.length - 1]] = values;
38
+ return newResults;
39
+ };
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRBcnJheVBhdGgiLCJwYWdpbmF0aW9uVXBkYXRlIiwiZW5kcG9pbnQiLCJyZW1vdmVDdXJzb3IiLCJwYXRoIiwic2NoZW1hIiwiRXJyb3IiLCJuZXdQYWdlIiwiYXJncyIsImtleSIsImV4aXN0aW5nIiwiZXhpc3RpbmdMaXN0IiwiZ2V0SW4iLCJleGlzdGluZ1NldCIsIlNldCIsImFkZGVkTGlzdCIsImZpbHRlciIsInBrIiwiaGFzIiwibWVyZ2VkUmVzdWx0cyIsInNldEluIiwicmVzdWx0cyIsImN1ciIsInAiLCJ2YWx1ZXMiLCJsZW5ndGgiLCJuZXdSZXN1bHRzIiwiaSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9wYWdpbmF0aW9uVXBkYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjaGVtYSB9IGZyb20gJ0BkYXRhLWNsaWVudC9lbmRwb2ludCc7XG5cbmltcG9ydCBnZXRBcnJheVBhdGggZnJvbSAnLi9nZXRBcnJheVBhdGguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYWdpbmF0aW9uVXBkYXRlPFxuICBFIGV4dGVuZHMgeyBzY2hlbWE6IFNjaGVtYTsga2V5OiBhbnkgfSAmICgoLi4uYXJnczogYW55KSA9PiBQcm9taXNlPGFueT4pLFxuICBBIGV4dGVuZHMgYW55W10sXG4+KFxuICBlbmRwb2ludDogRSxcbiAgcmVtb3ZlQ3Vyc29yOiAoLi4uYXJnczogQSkgPT4gcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8dHlwZW9mIGVuZHBvaW50Pl0sXG4pIHtcbiAgLy8gaW5mZXIgcGF0aCBmcm9tIHNjaGVtYS4gaWYgc2NoZW1hIGlzIHVuZGVmaW5lZCBhc3N1bWUgYXJyYXkgaXMgdG9wIGxldmVsXG4gIGNvbnN0IHBhdGggPSBnZXRBcnJheVBhdGgoZW5kcG9pbnQuc2NoZW1hKTtcbiAgaWYgKHBhdGggPT09IGZhbHNlKSB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSBoYXMgbm8gYXJyYXknKTtcblxuICByZXR1cm4gKG5ld1BhZ2U6IGFueSwgLi4uYXJnczogQSkgPT4gKHtcbiAgICBbZW5kcG9pbnQua2V5KC4uLihyZW1vdmVDdXJzb3IoLi4uYXJncykgYXMgYW55KSldOiAoZXhpc3Rpbmc6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmdMaXN0ID0gZ2V0SW4oZXhpc3RpbmcsIHBhdGgpO1xuICAgICAgLy8gdXNpbmcgc2V0IHNvIG91ciBsb29rdXBzIGFyZSBPKDEpIGluIGNhc2UgdGhpcyBpcyBsYXJnZVxuICAgICAgY29uc3QgZXhpc3RpbmdTZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldChleGlzdGluZ0xpc3QpO1xuICAgICAgY29uc3QgYWRkZWRMaXN0ID0gZ2V0SW4obmV3UGFnZSwgcGF0aCkuZmlsdGVyKFxuICAgICAgICAocGs6IHN0cmluZykgPT4gIWV4aXN0aW5nU2V0LmhhcyhwayksXG4gICAgICApO1xuICAgICAgY29uc3QgbWVyZ2VkUmVzdWx0czogc3RyaW5nW10gPSBbLi4uZXhpc3RpbmdMaXN0LCAuLi5hZGRlZExpc3RdO1xuICAgICAgcmV0dXJuIHNldEluKG5ld1BhZ2UsIHBhdGgsIG1lcmdlZFJlc3VsdHMpO1xuICAgIH0sXG4gIH0pO1xufVxuXG5jb25zdCBnZXRJbiA9IChyZXN1bHRzOiBhbnksIHBhdGg6IHN0cmluZ1tdKTogYW55W10gPT4ge1xuICBsZXQgY3VyID0gcmVzdWx0cztcbiAgZm9yIChjb25zdCBwIG9mIHBhdGgpIHtcbiAgICBpZiAoIWN1cikgcmV0dXJuIFtdO1xuICAgIGN1ciA9IGN1cltwXTtcbiAgfVxuICByZXR1cm4gY3VyIHx8IFtdO1xufTtcblxuY29uc3Qgc2V0SW4gPSA8VD4ocmVzdWx0czogVCwgcGF0aDogc3RyaW5nW10sIHZhbHVlczogYW55W10pOiBUID0+IHtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gdmFsdWVzIGFzIGFueTtcbiAgY29uc3QgbmV3UmVzdWx0cyA9IHsgLi4ucmVzdWx0cyB9O1xuICBsZXQgY3VyOiBhbnkgPSBuZXdSZXN1bHRzO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgY29uc3QgcCA9IHBhdGhbaV07XG4gICAgY3VyID0gY3VyW3BdID0geyAuLi5jdXJbcF0gfTtcbiAgfVxuICBjdXJbcGF0aFtwYXRoLmxlbmd0aCAtIDFdXSA9IHZhbHVlcztcbiAgcmV0dXJuIG5ld1Jlc3VsdHM7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFFQSxPQUFPQSxZQUFZLE1BQU0sbUJBQW1CO0FBRTVDLGVBQWUsU0FBU0MsZ0JBQWdCQSxDQUl0Q0MsUUFBVyxFQUNYQyxZQUF1RSxFQUN2RTtFQUNBO0VBQ0EsTUFBTUMsSUFBSSxHQUFHSixZQUFZLENBQUNFLFFBQVEsQ0FBQ0csTUFBTSxDQUFDO0VBQzFDLElBQUlELElBQUksS0FBSyxLQUFLLEVBQUUsTUFBTSxJQUFJRSxLQUFLLENBQUMscUJBQXFCLENBQUM7RUFFMUQsT0FBTyxDQUFDQyxPQUFZLEVBQUUsR0FBR0MsSUFBTyxNQUFNO0lBQ3BDLENBQUNOLFFBQVEsQ0FBQ08sR0FBRyxDQUFDLEdBQUlOLFlBQVksQ0FBQyxHQUFHSyxJQUFJLENBQVMsQ0FBQyxHQUFJRSxRQUFhLElBQUs7TUFDcEUsTUFBTUMsWUFBWSxHQUFHQyxLQUFLLENBQUNGLFFBQVEsRUFBRU4sSUFBSSxDQUFDO01BQzFDO01BQ0EsTUFBTVMsV0FBd0IsR0FBRyxJQUFJQyxHQUFHLENBQUNILFlBQVksQ0FBQztNQUN0RCxNQUFNSSxTQUFTLEdBQUdILEtBQUssQ0FBQ0wsT0FBTyxFQUFFSCxJQUFJLENBQUMsQ0FBQ1ksTUFBTSxDQUMxQ0MsRUFBVSxJQUFLLENBQUNKLFdBQVcsQ0FBQ0ssR0FBRyxDQUFDRCxFQUFFLENBQ3JDLENBQUM7TUFDRCxNQUFNRSxhQUF1QixHQUFHLENBQUMsR0FBR1IsWUFBWSxFQUFFLEdBQUdJLFNBQVMsQ0FBQztNQUMvRCxPQUFPSyxLQUFLLENBQUNiLE9BQU8sRUFBRUgsSUFBSSxFQUFFZSxhQUFhLENBQUM7SUFDNUM7RUFDRixDQUFDLENBQUM7QUFDSjtBQUVBLE1BQU1QLEtBQUssR0FBR0EsQ0FBQ1MsT0FBWSxFQUFFakIsSUFBYyxLQUFZO0VBQ3JELElBQUlrQixHQUFHLEdBQUdELE9BQU87RUFDakIsS0FBSyxNQUFNRSxDQUFDLElBQUluQixJQUFJLEVBQUU7SUFDcEIsSUFBSSxDQUFDa0IsR0FBRyxFQUFFLE9BQU8sRUFBRTtJQUNuQkEsR0FBRyxHQUFHQSxHQUFHLENBQUNDLENBQUMsQ0FBQztFQUNkO0VBQ0EsT0FBT0QsR0FBRyxJQUFJLEVBQUU7QUFDbEIsQ0FBQztBQUVELE1BQU1GLEtBQUssR0FBR0EsQ0FBSUMsT0FBVSxFQUFFakIsSUFBYyxFQUFFb0IsTUFBYSxLQUFRO0VBQ2pFLElBQUlwQixJQUFJLENBQUNxQixNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU9ELE1BQU07RUFDcEMsTUFBTUUsVUFBVSxHQUFHO0lBQUUsR0FBR0w7RUFBUSxDQUFDO0VBQ2pDLElBQUlDLEdBQVEsR0FBR0ksVUFBVTtFQUN6QixLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3ZCLElBQUksQ0FBQ3FCLE1BQU0sR0FBRyxDQUFDLEVBQUVFLENBQUMsRUFBRSxFQUFFO0lBQ3hDLE1BQU1KLENBQUMsR0FBR25CLElBQUksQ0FBQ3VCLENBQUMsQ0FBQztJQUNqQkwsR0FBRyxHQUFHQSxHQUFHLENBQUNDLENBQUMsQ0FBQyxHQUFHO01BQUUsR0FBR0QsR0FBRyxDQUFDQyxDQUFDO0lBQUUsQ0FBQztFQUM5QjtFQUNBRCxHQUFHLENBQUNsQixJQUFJLENBQUNBLElBQUksQ0FBQ3FCLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHRCxNQUFNO0VBQ25DLE9BQU9FLFVBQVU7QUFDbkIsQ0FBQyJ9
@@ -0,0 +1,2 @@
1
+ export default function paramsToString(searchParams: Readonly<Record<string, string | number | boolean>>): string;
2
+ //# sourceMappingURL=paramsToString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paramsToString.d.ts","sourceRoot":"","sources":["../src/paramsToString.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,UAKlE"}
@@ -0,0 +1,6 @@
1
+ export default function paramsToString(searchParams) {
2
+ const params = new URLSearchParams(searchParams);
3
+ params.sort();
4
+ return params.toString();
5
+ }
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJhbXNUb1N0cmluZyIsInNlYXJjaFBhcmFtcyIsInBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsInNvcnQiLCJ0b1N0cmluZyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJhbXNUb1N0cmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJhbXNUb1N0cmluZyhcbiAgc2VhcmNoUGFyYW1zOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPj4sXG4pIHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZWFyY2hQYXJhbXMgYXMgYW55KTtcbiAgcGFyYW1zLnNvcnQoKTtcbiAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLFNBQVNBLGNBQWNBLENBQ3BDQyxZQUFpRSxFQUNqRTtFQUNBLE1BQU1DLE1BQU0sR0FBRyxJQUFJQyxlQUFlLENBQUNGLFlBQW1CLENBQUM7RUFDdkRDLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLENBQUM7RUFDYixPQUFPRixNQUFNLENBQUNHLFFBQVEsQ0FBQyxDQUFDO0FBQzFCIn0=
@@ -0,0 +1,2 @@
1
+ export default function paramsToString(searchParams: Readonly<Record<string, string | number>>): string;
2
+ //# sourceMappingURL=paramsToString.native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paramsToString.native.d.ts","sourceRoot":"","sources":["../src/paramsToString.native.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,UAQxD"}
@@ -0,0 +1,9 @@
1
+ export default function paramsToString(searchParams) {
2
+ const params = new URLSearchParams(searchParams);
3
+ try {
4
+ params.sort();
5
+ // eslint-disable-next-line no-empty
6
+ } catch {}
7
+ return params.toString();
8
+ }
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJhbXNUb1N0cmluZyIsInNlYXJjaFBhcmFtcyIsInBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsInNvcnQiLCJ0b1N0cmluZyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJhbXNUb1N0cmluZy5uYXRpdmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyYW1zVG9TdHJpbmcoXG4gIHNlYXJjaFBhcmFtczogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPj4sXG4pIHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZWFyY2hQYXJhbXMgYXMgYW55KTtcbiAgdHJ5IHtcbiAgICBwYXJhbXMuc29ydCgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICB9IGNhdGNoIHt9XG4gIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxTQUFTQSxjQUFjQSxDQUNwQ0MsWUFBdUQsRUFDdkQ7RUFDQSxNQUFNQyxNQUFNLEdBQUcsSUFBSUMsZUFBZSxDQUFDRixZQUFtQixDQUFDO0VBQ3ZELElBQUk7SUFDRkMsTUFBTSxDQUFDRSxJQUFJLENBQUMsQ0FBQztJQUNiO0VBQ0YsQ0FBQyxDQUFDLE1BQU0sQ0FBQztFQUNULE9BQU9GLE1BQU0sQ0FBQ0csUUFBUSxDQUFDLENBQUM7QUFDMUIifQ==
@@ -0,0 +1,20 @@
1
+ type OnlyOptional<S extends string> = S extends `${infer K}?` ? K : never;
2
+ type OnlyRequired<S extends string> = S extends `${string}?` ? never : S;
3
+ /** Computes the union of keys for a path string */
4
+ export type PathKeys<S extends string> = string extends S ? string : S extends `${infer A}\\:${infer B}` ? PathKeys<A> | PathKeys<B> : S extends `${infer A}\\?${infer B}` ? PathKeys<A> | PathKeys<B> : PathSplits<S>;
5
+ type PathSplits<S extends string> = S extends `${string}:${infer K}${'/' | ',' | '%' | '&'}${infer R}` ? PathSplits<`:${K}`> | PathSplits<R> : S extends `${string}:${infer K}:${infer R}` ? PathSplits<`:${K}`> | PathSplits<`:${R}`> : S extends `${string}:${infer K}` ? K : never;
6
+ /** Parameters for a given path */
7
+ export type PathArgs<S extends string> = PathKeys<S> extends never ? unknown : KeysToArgs<PathKeys<S>>;
8
+ export type KeysToArgs<Key extends string> = {
9
+ [K in Key as OnlyOptional<K>]?: string | number;
10
+ } & (OnlyRequired<Key> extends never ? unknown : {
11
+ [K in Key as OnlyRequired<K>]: string | number;
12
+ });
13
+ export type PathArgsAndSearch<S extends string> = OnlyRequired<PathKeys<S>> extends never ? Record<string, number | string | boolean> | undefined : {
14
+ [K in PathKeys<S> as OnlyRequired<K>]: string | number;
15
+ } & Record<string, number | string>;
16
+ /** Removes the last :token */
17
+ export type ShortenPath<S extends string> = string extends S ? string : S extends `${infer B}:${infer R}` ? TrimColon<`${B}:${ShortenPath<R>}`> : '';
18
+ type TrimColon<S extends string> = string extends S ? string : S extends `${infer R}:` ? R : S;
19
+ export {};
20
+ //# sourceMappingURL=pathTypes.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
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=
@@ -0,0 +1,141 @@
1
+ export declare const payload: {
2
+ id: number;
3
+ title: string;
4
+ content: string;
5
+ tags: string[];
6
+ };
7
+ export declare const createPayload: {
8
+ id: number;
9
+ title: string;
10
+ content: string;
11
+ tags: string[];
12
+ };
13
+ export declare const articlesPages: {
14
+ prevPage: string;
15
+ nextPage: string;
16
+ results: ({
17
+ id: number;
18
+ title: string;
19
+ content: string;
20
+ tags: string[];
21
+ } | {
22
+ id: number;
23
+ title: string;
24
+ content: string;
25
+ tags?: undefined;
26
+ })[];
27
+ };
28
+ export declare const users: {
29
+ id: number;
30
+ username: string;
31
+ email: string;
32
+ isAdmin: boolean;
33
+ }[];
34
+ export declare const nested: ({
35
+ id: number;
36
+ title: string;
37
+ content: string;
38
+ tags: string[];
39
+ author: {
40
+ id: number;
41
+ username: string;
42
+ email?: undefined;
43
+ };
44
+ } | {
45
+ id: number;
46
+ title: string;
47
+ content: string;
48
+ author: {
49
+ id: number;
50
+ username: string;
51
+ email: string;
52
+ };
53
+ tags?: undefined;
54
+ })[];
55
+ export declare const moreNested: ({
56
+ id: number;
57
+ title: string;
58
+ content: string;
59
+ tags: string[];
60
+ author: {
61
+ id: number;
62
+ username: string;
63
+ email?: undefined;
64
+ };
65
+ } | {
66
+ id: number;
67
+ title: string;
68
+ content: string;
69
+ author: {
70
+ id: number;
71
+ username: string;
72
+ email: string;
73
+ };
74
+ tags?: undefined;
75
+ })[];
76
+ export declare const valuesFixture: {
77
+ first: {
78
+ id: number;
79
+ title: string;
80
+ content: string;
81
+ tags: never[];
82
+ };
83
+ second: {
84
+ id: number;
85
+ name: string;
86
+ content: string;
87
+ tags: never[];
88
+ };
89
+ };
90
+ export declare const paginatedFirstPage: {
91
+ nextPage: string;
92
+ data: {
93
+ results: ({
94
+ id: number;
95
+ title: string;
96
+ content: string;
97
+ tags: string[];
98
+ author: {
99
+ id: number;
100
+ username: string;
101
+ email?: undefined;
102
+ };
103
+ } | {
104
+ id: number;
105
+ title: string;
106
+ content: string;
107
+ author: {
108
+ id: number;
109
+ username: string;
110
+ email: string;
111
+ };
112
+ tags?: undefined;
113
+ })[];
114
+ };
115
+ };
116
+ export declare const paginatedSecondPage: {
117
+ data: {
118
+ results: ({
119
+ id: number;
120
+ title: string;
121
+ content: string;
122
+ tags: string[];
123
+ author: {
124
+ id: number;
125
+ username: string;
126
+ email?: undefined;
127
+ };
128
+ } | {
129
+ id: number;
130
+ title: string;
131
+ content: string;
132
+ author: {
133
+ id: number;
134
+ username: string;
135
+ email: string;
136
+ };
137
+ tags?: undefined;
138
+ })[];
139
+ };
140
+ };
141
+ //# sourceMappingURL=test-fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-fixtures.d.ts","sourceRoot":"","sources":["../src/test-fixtures.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO;;;;;CAKnB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;CAKzB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;CA4BzB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;GAajB,CAAC;AAEF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;IAqBlB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;IAqBtB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;CAazB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;CAG9B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;CAE/B,CAAC"}
@@ -0,0 +1,111 @@
1
+ export const payload = {
2
+ id: 5,
3
+ title: 'hi ho',
4
+ content: 'whatever',
5
+ tags: ['a', 'best', 'react']
6
+ };
7
+ export const createPayload = {
8
+ id: 1,
9
+ title: 'hi ho',
10
+ content: 'whatever',
11
+ tags: ['a', 'best', 'react']
12
+ };
13
+ export const articlesPages = {
14
+ prevPage: '23asdl',
15
+ nextPage: 's3f3',
16
+ results: [{
17
+ id: 23,
18
+ title: 'the first draft',
19
+ content: 'the best things in life com efree',
20
+ tags: ['one', 'two']
21
+ }, {
22
+ id: 44,
23
+ title: 'the second book',
24
+ content: 'the best things in life com efree',
25
+ tags: ['hbh', 'wew']
26
+ }, {
27
+ id: 2,
28
+ title: 'the third novel',
29
+ content: 'the best things in life com efree',
30
+ tags: ['free', 'honey']
31
+ }, {
32
+ id: 643,
33
+ title: 'a long time ago',
34
+ content: 'the best things in life com efree'
35
+ }]
36
+ };
37
+ export const users = [{
38
+ id: 23,
39
+ username: 'bob',
40
+ email: 'bob@bob.com',
41
+ isAdmin: false
42
+ }, {
43
+ id: 7342,
44
+ username: 'lindsey',
45
+ email: 'lindsey@bob.com',
46
+ isAdmin: true
47
+ }];
48
+ export const nested = [{
49
+ id: 5,
50
+ title: 'hi ho',
51
+ content: 'whatever',
52
+ tags: ['a', 'best', 'react'],
53
+ author: {
54
+ id: 23,
55
+ username: 'bob'
56
+ }
57
+ }, {
58
+ id: 3,
59
+ title: 'the next time',
60
+ content: 'whatever',
61
+ author: {
62
+ id: 23,
63
+ username: 'charles',
64
+ email: 'bob@bob.com'
65
+ }
66
+ }];
67
+ export const moreNested = [{
68
+ id: 7,
69
+ title: 'article 7',
70
+ content: 'whatever',
71
+ tags: ['blah'],
72
+ author: {
73
+ id: 23,
74
+ username: 'bob'
75
+ }
76
+ }, {
77
+ id: 8,
78
+ title: 'article 8',
79
+ content: 'whatever',
80
+ author: {
81
+ id: 27,
82
+ username: 'zac',
83
+ email: 'zac@bob.com'
84
+ }
85
+ }];
86
+ export const valuesFixture = {
87
+ first: {
88
+ id: 1,
89
+ title: 'first thing',
90
+ content: 'blah',
91
+ tags: []
92
+ },
93
+ second: {
94
+ id: 2,
95
+ name: 'second thing',
96
+ content: 'blah',
97
+ tags: []
98
+ }
99
+ };
100
+ export const paginatedFirstPage = {
101
+ nextPage: '2',
102
+ data: {
103
+ results: nested
104
+ }
105
+ };
106
+ export const paginatedSecondPage = {
107
+ data: {
108
+ results: moreNested
109
+ }
110
+ };
111
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXlsb2FkIiwiaWQiLCJ0aXRsZSIsImNvbnRlbnQiLCJ0YWdzIiwiY3JlYXRlUGF5bG9hZCIsImFydGljbGVzUGFnZXMiLCJwcmV2UGFnZSIsIm5leHRQYWdlIiwicmVzdWx0cyIsInVzZXJzIiwidXNlcm5hbWUiLCJlbWFpbCIsImlzQWRtaW4iLCJuZXN0ZWQiLCJhdXRob3IiLCJtb3JlTmVzdGVkIiwidmFsdWVzRml4dHVyZSIsImZpcnN0Iiwic2Vjb25kIiwibmFtZSIsInBhZ2luYXRlZEZpcnN0UGFnZSIsImRhdGEiLCJwYWdpbmF0ZWRTZWNvbmRQYWdlIl0sInNvdXJjZXMiOlsiLi4vc3JjL3Rlc3QtZml4dHVyZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHBheWxvYWQgPSB7XG4gIGlkOiA1LFxuICB0aXRsZTogJ2hpIGhvJyxcbiAgY29udGVudDogJ3doYXRldmVyJyxcbiAgdGFnczogWydhJywgJ2Jlc3QnLCAncmVhY3QnXSxcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYXlsb2FkID0ge1xuICBpZDogMSxcbiAgdGl0bGU6ICdoaSBobycsXG4gIGNvbnRlbnQ6ICd3aGF0ZXZlcicsXG4gIHRhZ3M6IFsnYScsICdiZXN0JywgJ3JlYWN0J10sXG59O1xuXG5leHBvcnQgY29uc3QgYXJ0aWNsZXNQYWdlcyA9IHtcbiAgcHJldlBhZ2U6ICcyM2FzZGwnLFxuICBuZXh0UGFnZTogJ3MzZjMnLFxuICByZXN1bHRzOiBbXG4gICAge1xuICAgICAgaWQ6IDIzLFxuICAgICAgdGl0bGU6ICd0aGUgZmlyc3QgZHJhZnQnLFxuICAgICAgY29udGVudDogJ3RoZSBiZXN0IHRoaW5ncyBpbiBsaWZlIGNvbSBlZnJlZScsXG4gICAgICB0YWdzOiBbJ29uZScsICd0d28nXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiA0NCxcbiAgICAgIHRpdGxlOiAndGhlIHNlY29uZCBib29rJyxcbiAgICAgIGNvbnRlbnQ6ICd0aGUgYmVzdCB0aGluZ3MgaW4gbGlmZSBjb20gZWZyZWUnLFxuICAgICAgdGFnczogWydoYmgnLCAnd2V3J10sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMixcbiAgICAgIHRpdGxlOiAndGhlIHRoaXJkIG5vdmVsJyxcbiAgICAgIGNvbnRlbnQ6ICd0aGUgYmVzdCB0aGluZ3MgaW4gbGlmZSBjb20gZWZyZWUnLFxuICAgICAgdGFnczogWydmcmVlJywgJ2hvbmV5J10sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogNjQzLFxuICAgICAgdGl0bGU6ICdhIGxvbmcgdGltZSBhZ28nLFxuICAgICAgY29udGVudDogJ3RoZSBiZXN0IHRoaW5ncyBpbiBsaWZlIGNvbSBlZnJlZScsXG4gICAgfSxcbiAgXSxcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VycyA9IFtcbiAge1xuICAgIGlkOiAyMyxcbiAgICB1c2VybmFtZTogJ2JvYicsXG4gICAgZW1haWw6ICdib2JAYm9iLmNvbScsXG4gICAgaXNBZG1pbjogZmFsc2UsXG4gIH0sXG4gIHtcbiAgICBpZDogNzM0MixcbiAgICB1c2VybmFtZTogJ2xpbmRzZXknLFxuICAgIGVtYWlsOiAnbGluZHNleUBib2IuY29tJyxcbiAgICBpc0FkbWluOiB0cnVlLFxuICB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IG5lc3RlZCA9IFtcbiAge1xuICAgIGlkOiA1LFxuICAgIHRpdGxlOiAnaGkgaG8nLFxuICAgIGNvbnRlbnQ6ICd3aGF0ZXZlcicsXG4gICAgdGFnczogWydhJywgJ2Jlc3QnLCAncmVhY3QnXSxcbiAgICBhdXRob3I6IHtcbiAgICAgIGlkOiAyMyxcbiAgICAgIHVzZXJuYW1lOiAnYm9iJyxcbiAgICB9LFxuICB9LFxuICB7XG4gICAgaWQ6IDMsXG4gICAgdGl0bGU6ICd0aGUgbmV4dCB0aW1lJyxcbiAgICBjb250ZW50OiAnd2hhdGV2ZXInLFxuICAgIGF1dGhvcjoge1xuICAgICAgaWQ6IDIzLFxuICAgICAgdXNlcm5hbWU6ICdjaGFybGVzJyxcbiAgICAgIGVtYWlsOiAnYm9iQGJvYi5jb20nLFxuICAgIH0sXG4gIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgbW9yZU5lc3RlZCA9IFtcbiAge1xuICAgIGlkOiA3LFxuICAgIHRpdGxlOiAnYXJ0aWNsZSA3JyxcbiAgICBjb250ZW50OiAnd2hhdGV2ZXInLFxuICAgIHRhZ3M6IFsnYmxhaCddLFxuICAgIGF1dGhvcjoge1xuICAgICAgaWQ6IDIzLFxuICAgICAgdXNlcm5hbWU6ICdib2InLFxuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBpZDogOCxcbiAgICB0aXRsZTogJ2FydGljbGUgOCcsXG4gICAgY29udGVudDogJ3doYXRldmVyJyxcbiAgICBhdXRob3I6IHtcbiAgICAgIGlkOiAyNyxcbiAgICAgIHVzZXJuYW1lOiAnemFjJyxcbiAgICAgIGVtYWlsOiAnemFjQGJvYi5jb20nLFxuICAgIH0sXG4gIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgdmFsdWVzRml4dHVyZSA9IHtcbiAgZmlyc3Q6IHtcbiAgICBpZDogMSxcbiAgICB0aXRsZTogJ2ZpcnN0IHRoaW5nJyxcbiAgICBjb250ZW50OiAnYmxhaCcsXG4gICAgdGFnczogW10sXG4gIH0sXG4gIHNlY29uZDoge1xuICAgIGlkOiAyLFxuICAgIG5hbWU6ICdzZWNvbmQgdGhpbmcnLFxuICAgIGNvbnRlbnQ6ICdibGFoJyxcbiAgICB0YWdzOiBbXSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0ZWRGaXJzdFBhZ2UgPSB7XG4gIG5leHRQYWdlOiAnMicsXG4gIGRhdGE6IHsgcmVzdWx0czogbmVzdGVkIH0sXG59O1xuXG5leHBvcnQgY29uc3QgcGFnaW5hdGVkU2Vjb25kUGFnZSA9IHtcbiAgZGF0YTogeyByZXN1bHRzOiBtb3JlTmVzdGVkIH0sXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU1BLE9BQU8sR0FBRztFQUNyQkMsRUFBRSxFQUFFLENBQUM7RUFDTEMsS0FBSyxFQUFFLE9BQU87RUFDZEMsT0FBTyxFQUFFLFVBQVU7RUFDbkJD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
@@ -0,0 +1,21 @@
1
+ /** Extracts only the keys that will be required
2
+ *
3
+ * Removes optional, as well as unbounded (aka 'string')
4
+ *
5
+ * @example
6
+ ```
7
+ RequiredKeys<{
8
+ opt?: string;
9
+ bob: string;
10
+ alice: number;
11
+ [k: string]: string | number | undefined;
12
+ }> // = 'bob' | 'alice'
13
+ ```
14
+ */
15
+ export type RequiredKeys<T> = Values<OnlyRequired<T>>;
16
+ type OnlyRequired<T> = {
17
+ [K in keyof T as string extends K ? never : K]-?: {} extends Pick<T, K> ? never : K;
18
+ };
19
+ type Values<T> = T[Exclude<keyof T, number>];
20
+ export {};
21
+ //# sourceMappingURL=utiltypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utiltypes.d.ts","sourceRoot":"","sources":["../src/utiltypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtD,KAAK,YAAY,CAAC,CAAC,IAAI;KACpB,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,SAAS,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACnE,KAAK,GACL,CAAC;CACN,CAAC;AAIF,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3V0aWx0eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogRXh0cmFjdHMgb25seSB0aGUga2V5cyB0aGF0IHdpbGwgYmUgcmVxdWlyZWRcbiAqXG4gKiBSZW1vdmVzIG9wdGlvbmFsLCBhcyB3ZWxsIGFzIHVuYm91bmRlZCAoYWthICdzdHJpbmcnKVxuICpcbiAqIEBleGFtcGxlXG4gYGBgXG5SZXF1aXJlZEtleXM8e1xuICBvcHQ/OiBzdHJpbmc7XG4gIGJvYjogc3RyaW5nO1xuICBhbGljZTogbnVtYmVyO1xuICBbazogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xufT4gLy8gPSAnYm9iJyB8ICdhbGljZSdcbiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgUmVxdWlyZWRLZXlzPFQ+ID0gVmFsdWVzPE9ubHlSZXF1aXJlZDxUPj47XG5cbnR5cGUgT25seVJlcXVpcmVkPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUIGFzIHN0cmluZyBleHRlbmRzIEsgPyBuZXZlciA6IEtdLT86IHt9IGV4dGVuZHMgUGljazxULCBLPlxuICAgID8gbmV2ZXJcbiAgICA6IEs7XG59O1xuXG4vLyBleGNsdWRlIG51bWJlciBvbmx5IHJlcXVpcmVkIGZvciB0eXBlc2NyaXB0IDQuNCBhbmQgYmVsb3dcbi8vIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9wbGF5P3RzPTQuNC40I2NvZGUvQzRUd0RncGdCQWdsQzhVRGVVQkdCN1ZBdUtCbllBVGdKWUIyQTVnTnhRRGFBMWp2c2VRTG80Q3NBUG82V1ZBTDRVQXNBQ2dSSWlBQTh3NkFzQ2loSVVBRW9RQWpnRmNpQkNBQk1BMGhCQzRBUEFCVUFmQWlnQTFBSVlBYmRSQk1CNUV2WkFxTlczV2ZQbWhVV0ZKYVZsNWNHZzNEeTlOYlIwLUt5UVJLQm85S0ZJb1drTjBBRE1vVXloYlhEeENIaWhKWUFnU0hXSzBnSDRvRWdnQU53Z0NLQnc5WmdCYU9wd2tQbktKU3VyaWdBVWlBR05hTXdBYUtEMXpaSlNvQnFiV2dtV1V6c0NCTVdFRmFEdEhad1RFVXpwc3ZOTm1RSkZEcUFCaEt5alBOVmpmR0NXRGlLZ0FJVCtWaXlJRnlUM3V2MGV6MFF4eWNKa2U1aUFBXG50eXBlIFZhbHVlczxUPiA9IFRbRXhjbHVkZTxrZXlvZiBULCBudW1iZXI+XTtcbiJdLCJtYXBwaW5ncyI6IiJ9
package/node.mjs ADDED
@@ -0,0 +1 @@
1
+ export * from './dist/index.js';
package/package.json ADDED
@@ -0,0 +1,121 @@
1
+ {
2
+ "name": "@data-client/rest",
3
+ "version": "0.1.0",
4
+ "description": "Endpoints for REST APIs",
5
+ "homepage": "https://dataclient.io/rest",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+ssh://git@github.com:data-client/data-client.git",
9
+ "directory": "packages/rest"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/data-client/data-client/issues"
13
+ },
14
+ "keywords": [
15
+ "REST",
16
+ "CRUD",
17
+ "networking",
18
+ "fetch",
19
+ "data",
20
+ "cache",
21
+ "model",
22
+ "resource",
23
+ "typescript",
24
+ "path-to-regex",
25
+ "path template",
26
+ "data fetching",
27
+ "data cache",
28
+ "api",
29
+ "normalized cache",
30
+ "subject pattern",
31
+ "endpoint",
32
+ "react-native",
33
+ "ios",
34
+ "android",
35
+ "web",
36
+ "json"
37
+ ],
38
+ "sideEffects": false,
39
+ "main": "dist/index.js",
40
+ "react-native": "legacy/index.js",
41
+ "module": "legacy/index.js",
42
+ "unpkg": "dist/index.umd.min.js",
43
+ "types": "lib/index.d.ts",
44
+ "typesVersions": {
45
+ ">=4.1": {
46
+ "": [
47
+ "lib/index.d.ts"
48
+ ],
49
+ "next": [
50
+ "lib/next/index.d.ts"
51
+ ],
52
+ "*": [
53
+ "lib/index.d.ts"
54
+ ]
55
+ },
56
+ ">=4.0": {
57
+ "": [
58
+ "ts4.0/index.d.ts"
59
+ ],
60
+ "next": [
61
+ "ts4.0/next/index.d.ts"
62
+ ],
63
+ "*": [
64
+ "ts4.0/index.d.ts"
65
+ ]
66
+ }
67
+ },
68
+ "exports": {
69
+ ".": {
70
+ "module": "./lib/index.js",
71
+ "import": "./node.mjs",
72
+ "require": "./dist/index.js",
73
+ "default": "./lib/index.js"
74
+ },
75
+ "./next": {
76
+ "types": "./lib/next/index.d.ts",
77
+ "require": "./dist/next.js",
78
+ "default": "./lib/next/index.js"
79
+ },
80
+ "./package.json": "./package.json"
81
+ },
82
+ "type": "module",
83
+ "engines": {
84
+ "node": "^12.17 || ^13.7 || >=14"
85
+ },
86
+ "files": [
87
+ "src",
88
+ "dist",
89
+ "lib",
90
+ "node.mjs",
91
+ "legacy",
92
+ "ts4.0",
93
+ "LICENSE",
94
+ "README.md"
95
+ ],
96
+ "scripts": {
97
+ "build:lib": "NODE_ENV=production BROWSERSLIST_ENV='2020' yarn g:babel --out-dir lib",
98
+ "build:legacy:lib": "NODE_ENV=production BROWSERSLIST_ENV='2018' yarn g:babel --out-dir legacy",
99
+ "build:js:node": "BROWSERSLIST_ENV=node12 yarn g:rollup",
100
+ "build:js:browser": "BROWSERSLIST_ENV=legacy yarn g:rollup",
101
+ "build:bundle": "yarn g:runs build:js:\\* && echo '{\"type\":\"commonjs\"}' > dist/package.json",
102
+ "build:clean": "yarn g:clean ts4.0 index.d.ts next.d.ts",
103
+ "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",
104
+ "build": "run build:lib && run build:legacy:lib && run build:bundle",
105
+ "dev": "run build:lib -w",
106
+ "prepare": "run build:lib",
107
+ "prepack": "run prepare && run build:bundle && run build:legacy:lib"
108
+ },
109
+ "author": "Nathaniel Tucker <me@ntucker.me> (https://github.com/ntucker)",
110
+ "license": "Apache-2.0",
111
+ "dependencies": {
112
+ "@babel/runtime": "^7.17.0",
113
+ "@data-client/endpoint": "^0.1.0",
114
+ "path-to-regexp": "^6.2.1"
115
+ },
116
+ "devDependencies": {
117
+ "@anansi/browserslist-config": "^1.4.2",
118
+ "@types/node": "^20.0.0",
119
+ "@types/path-to-regexp": "^1.7.0"
120
+ }
121
+ }
@@ -0,0 +1,17 @@
1
+ /** An error with a Rest Endpoint fetch
2
+ *
3
+ * @see https://resthooks.io/rest/api/NetworkError
4
+ */
5
+ export default class NetworkError extends Error {
6
+ declare status: number;
7
+ declare response: Response;
8
+ name = 'NetworkError';
9
+
10
+ constructor(response: Response) {
11
+ super(
12
+ response.statusText || `Network response not 'ok': ${response.status}`,
13
+ );
14
+ this.status = response.status;
15
+ this.response = response;
16
+ }
17
+ }
@@ -0,0 +1,42 @@
1
+ import type { FetchFunction, ResolveType } from '@data-client/endpoint';
2
+
3
+ import { PathArgs } from './pathTypes.js';
4
+ import {
5
+ PartialRestGenerics,
6
+ RestInstance,
7
+ RestInstanceBase,
8
+ RestFetch,
9
+ } from './RestEndpoint.js';
10
+
11
+ export type OptionsToFunction<
12
+ O extends PartialRestGenerics,
13
+ E extends RestInstanceBase & { body?: any },
14
+ F extends FetchFunction,
15
+ > = 'path' extends keyof O
16
+ ? RestFetch<
17
+ 'searchParams' extends keyof O
18
+ ? O['searchParams'] & PathArgs<Exclude<O['path'], undefined>>
19
+ : PathArgs<Exclude<O['path'], undefined>>,
20
+ 'body' extends keyof O ? O['body'] : E['body'],
21
+ O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>
22
+ >
23
+ : 'body' extends keyof O
24
+ ? RestFetch<
25
+ 'searchParams' extends keyof O
26
+ ? O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>
27
+ : PathArgs<Exclude<E['path'], undefined>>,
28
+ O['body'],
29
+ O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>
30
+ >
31
+ : 'searchParams' extends keyof O
32
+ ? RestFetch<
33
+ O['searchParams'] & PathArgs<Exclude<E['path'], undefined>>,
34
+ E['body'],
35
+ O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>
36
+ >
37
+ : (
38
+ this: ThisParameterType<F>,
39
+ ...args: Parameters<F>
40
+ ) => Promise<
41
+ O['process'] extends {} ? ReturnType<O['process']> : ResolveType<F>
42
+ >;