UNPKG

@data-client/rest

Version:

Quickly define typed REST resources and endpoints

24 lines 3.93 kB
/** Turns a collection of Endpoints (Resource) into a collection of hooks. * This is useful for Endpoints that need hooks to prepare their fetch requests. * * @see https://dataclient.io/rest/api/hookifyResource */ export default function hookifyResource(resource, useRequestInit) { const usingResource = {}; Object.keys(resource).forEach(key => { const endpoint = resource[key]; if (endpoint.extend !== undefined) usingResource[`use${capitalizeFirstLetter(key)}`] = () => { // this is false positive due to the dynamic nature of assignment // eslint-disable-next-line react-hooks/rules-of-hooks const requestInit = useRequestInit(); return endpoint.extend({ requestInit }); }; }); return usingResource; } function capitalizeFirstLetter(s) { return s.charAt(0).toUpperCase() + s.slice(1); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJob29raWZ5UmVzb3VyY2UiLCJyZXNvdXJjZSIsInVzZVJlcXVlc3RJbml0IiwidXNpbmdSZXNvdXJjZSIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiZW5kcG9pbnQiLCJleHRlbmQiLCJ1bmRlZmluZWQiLCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIiLCJyZXF1ZXN0SW5pdCIsInMiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIl0sInNvdXJjZXMiOlsiLi4vc3JjL2hvb2tpZnlSZXNvdXJjZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbmRwb2ludEludGVyZmFjZSB9IGZyb20gJ0BkYXRhLWNsaWVudC9lbmRwb2ludCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9va2FibGVFbmRwb2ludEludGVyZmFjZSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlIHtcbiAgZXh0ZW5kKC4uLmFyZ3M6IGFueSk6IEhvb2thYmxlRW5kcG9pbnRJbnRlcmZhY2U7XG59XG5cbi8qKiBUdXJucyBhIGNvbGxlY3Rpb24gb2YgRW5kcG9pbnRzIChSZXNvdXJjZSkgaW50byBhIGNvbGxlY3Rpb24gb2YgaG9va3MuXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgRW5kcG9pbnRzIHRoYXQgbmVlZCBob29rcyB0byBwcmVwYXJlIHRoZWlyIGZldGNoIHJlcXVlc3RzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL2hvb2tpZnlSZXNvdXJjZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBob29raWZ5UmVzb3VyY2U8UiBleHRlbmRzIHt9PihcbiAgcmVzb3VyY2U6IFIsXG4gIHVzZVJlcXVlc3RJbml0OiAoKSA9PiBSZXF1ZXN0SW5pdCxcbik6IEhvb2tSZXNvdXJjZTxSPiB7XG4gIGNvbnN0IHVzaW5nUmVzb3VyY2U6IFJlY29yZDxzdHJpbmcsICgpID0+IEhvb2thYmxlRW5kcG9pbnRJbnRlcmZhY2U+ID0ge307XG4gIE9iamVjdC5rZXlzKHJlc291cmNlKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSAocmVzb3VyY2UgYXMgYW55KVtrZXldO1xuICAgIGlmIChlbmRwb2ludC5leHRlbmQgIT09IHVuZGVmaW5lZClcbiAgICAgIHVzaW5nUmVzb3VyY2VbYHVzZSR7Y2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGtleSl9YF0gPSAoKSA9PiB7XG4gICAgICAgIC8vIHRoaXMgaXMgZmFsc2UgcG9zaXRpdmUgZHVlIHRvIHRoZSBkeW5hbWljIG5hdHVyZSBvZiBhc3NpZ25tZW50XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgICAgICBjb25zdCByZXF1ZXN0SW5pdCA9IHVzZVJlcXVlc3RJbml0KCk7XG4gICAgICAgIHJldHVybiBlbmRwb2ludC5leHRlbmQoeyByZXF1ZXN0SW5pdCB9KTtcbiAgICAgIH07XG4gIH0pO1xuICByZXR1cm4gdXNpbmdSZXNvdXJjZSBhcyBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIEhvb2tSZXNvdXJjZTxSIGV4dGVuZHMge30+ID0ge1xuICBbSyBpbiBFeHRyYWN0PGtleW9mIFIsIHN0cmluZz4gYXMgYHVzZSR7Q2FwaXRhbGl6ZTxLPn1gXTogKCkgPT4gUltLXTtcbn07XG5cbmZ1bmN0aW9uIGNhcGl0YWxpemVGaXJzdExldHRlcihzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpO1xufVxuIl0sIm1hcHBpbmdzIjoiQUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxTQUFTQSxlQUFlQSxDQUNyQ0MsUUFBVyxFQUNYQyxjQUFpQyxFQUNoQjtFQUNqQixNQUFNQyxhQUE4RCxHQUFHLENBQUMsQ0FBQztFQUN6RUMsTUFBTSxDQUFDQyxJQUFJLENBQUNKLFFBQVEsQ0FBQyxDQUFDSyxPQUFPLENBQUNDLEdBQUcsSUFBSTtJQUNuQyxNQUFNQyxRQUFRLEdBQUlQLFFBQVEsQ0FBU00sR0FBRyxDQUFDO0lBQ3ZDLElBQUlDLFFBQVEsQ0FBQ0MsTUFBTSxLQUFLQyxTQUFTLEVBQy9CUCxhQUFhLENBQUMsTUFBTVEscUJBQXFCLENBQUNKLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNO01BQ3hEO01BQ0E7TUFDQSxNQUFNSyxXQUFXLEdBQUdWLGNBQWMsQ0FBQyxDQUFDO01BQ3BDLE9BQU9NLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDO1FBQUVHO01BQVksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7RUFDTCxDQUFDLENBQUM7RUFDRixPQUFPVCxhQUFhO0FBQ3RCO0FBTUEsU0FBU1EscUJBQXFCQSxDQUFDRSxDQUFTLEVBQUU7RUFDeEMsT0FBT0EsQ0FBQyxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEdBQUdGLENBQUMsQ0FBQ0csS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMvQyIsImlnbm9yZUxpc3QiOltdfQ==