@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.
- package/dist/index.js +17 -16
- package/dist/index.umd.min.js +1 -1
- package/dist/next.js +7 -2
- package/legacy/OptionsToFunction.js +1 -1
- package/legacy/RestEndpoint.js +5 -5
- package/legacy/RestHelpers.js +4 -2
- package/legacy/createResource.js +14 -13
- package/legacy/index.js +2 -1
- package/legacy/next/index.js +4 -4
- package/legacy/pathTypes.js +1 -1
- package/legacy/resourceTypes.js +2 -0
- package/lib/OptionsToFunction.d.ts.map +1 -1
- package/lib/OptionsToFunction.js +1 -1
- package/lib/RestEndpoint.d.ts +30 -36
- package/lib/RestEndpoint.js +5 -5
- package/lib/RestHelpers.js +4 -2
- package/lib/createResource.d.ts +65 -32
- package/lib/createResource.d.ts.map +1 -1
- package/lib/createResource.js +11 -12
- package/lib/index.d.ts +3 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/next/index.d.ts +5 -5
- package/lib/next/index.d.ts.map +1 -1
- package/lib/next/index.js +4 -4
- package/lib/pathTypes.d.ts +1 -0
- package/lib/pathTypes.d.ts.map +1 -1
- package/lib/pathTypes.js +1 -1
- package/lib/{next/resourceTypes.d.ts → resourceTypes.d.ts} +12 -2
- package/lib/resourceTypes.d.ts.map +1 -0
- package/lib/resourceTypes.js +2 -0
- package/package.json +3 -3
- package/src/OptionsToFunction.ts +0 -1
- package/src/RestEndpoint.d.ts +30 -36
- package/src/RestEndpoint.js +4 -4
- package/src/RestHelpers.ts +4 -4
- package/src/__tests__/Resource.test.ts +2 -2
- package/src/__tests__/RestEndpoint.ts +38 -9
- package/src/__tests__/__snapshots__/createResource.test.ts.snap +2 -0
- package/src/__tests__/createResource.test.ts +25 -4
- package/src/__tests__/hookifyResource.ts +7 -3
- package/src/__tests__/types.test.ts +353 -212
- package/src/createResource.ts +111 -62
- package/src/index.ts +2 -2
- package/src/next/index.ts +5 -5
- package/src/pathTypes.ts +2 -0
- package/src/{next/resourceTypes.ts → resourceTypes.ts} +12 -2
- package/ts4.0/RestEndpoint.d.ts +19 -33
- package/ts4.0/createResource.d.ts +77 -32
- package/ts4.0/index.d.ts +3 -1
- package/ts4.0/next/index.d.ts +5 -5
- package/ts4.0/pathTypes.d.ts +2 -0
- package/ts4.0/{next/resourceTypes.d.ts → resourceTypes.d.ts} +12 -2
- package/legacy/next/OptionsToFunction.js +0 -2
- package/legacy/next/RestEndpoint.js +0 -225
- package/legacy/next/createResource.js +0 -86
- package/legacy/next/resourceTypes.js +0 -2
- package/lib/next/OptionsToFunction.d.ts +0 -7
- package/lib/next/OptionsToFunction.d.ts.map +0 -1
- package/lib/next/OptionsToFunction.js +0 -2
- package/lib/next/RestEndpoint.d.ts +0 -542
- package/lib/next/RestEndpoint.js +0 -229
- package/lib/next/createResource.d.ts +0 -86
- package/lib/next/createResource.d.ts.map +0 -1
- package/lib/next/createResource.js +0 -100
- package/lib/next/resourceTypes.d.ts.map +0 -1
- package/lib/next/resourceTypes.js +0 -2
- package/src/next/OptionsToFunction.ts +0 -41
- package/src/next/RestEndpoint.d.ts +0 -542
- package/src/next/RestEndpoint.js +0 -262
- package/src/next/__tests__/RestEndpoint.ts +0 -1333
- package/src/next/__tests__/__snapshots__/RestEndpoint.ts.snap +0 -18
- package/src/next/__tests__/types.test.ts +0 -429
- package/src/next/createResource.ts +0 -194
- package/ts4.0/next/OptionsToFunction.d.ts +0 -16
- package/ts4.0/next/RestEndpoint.d.ts +0 -226
- package/ts4.0/next/createResource.d.ts +0 -94
package/lib/next/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from '
|
|
2
|
-
export { default as RestEndpoint } from '
|
|
3
|
-
export { default as createResource } from '
|
|
4
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
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=
|
package/lib/pathTypes.d.ts
CHANGED
|
@@ -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
|
package/lib/pathTypes.d.ts.map
CHANGED
|
@@ -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/
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
+
}
|
package/src/OptionsToFunction.ts
CHANGED
package/src/RestEndpoint.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
-
|
|
520
|
-
}
|
|
521
|
-
S extends Schema | undefined = Schema | undefined,
|
|
504
|
+
schema: Schema;
|
|
505
|
+
},
|
|
522
506
|
> = RestTypeNoBody<
|
|
523
507
|
'searchParams' extends keyof O
|
|
524
|
-
? O['searchParams']
|
|
508
|
+
? O['searchParams'] extends undefined
|
|
509
|
+
? PathArgs<O['path']>
|
|
510
|
+
: O['searchParams'] & PathArgs<O['path']>
|
|
525
511
|
: PathArgs<O['path']>,
|
|
526
|
-
|
|
512
|
+
O['schema'],
|
|
527
513
|
undefined,
|
|
528
514
|
any,
|
|
529
515
|
O & { body: undefined }
|
|
530
516
|
>;
|
|
531
517
|
|
|
532
|
-
export type
|
|
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
|
|
536
|
-
|
|
537
|
-
}
|
|
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']
|
|
533
|
+
? O['searchParams'] extends undefined
|
|
534
|
+
? PathArgs<O['path']>
|
|
535
|
+
: O['searchParams'] & PathArgs<O['path']>
|
|
542
536
|
: PathArgs<O['path']>,
|
|
543
|
-
|
|
537
|
+
O['schema'],
|
|
544
538
|
true,
|
|
545
539
|
O['body'],
|
|
546
540
|
any,
|
package/src/RestEndpoint.js
CHANGED
|
@@ -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
|
|
package/src/RestHelpers.ts
CHANGED
|
@@ -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
|
|
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
|
|
737
|
-
|
|
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
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
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
|
|
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(
|
|
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(
|
|
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 () => {
|