react-query-kit
Version:
🕊️ A toolkit for ReactQuery that make ReactQuery hooks more reusable and typesafe
78 lines (64 loc) • 2.05 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var createInfiniteQuery = require('./createInfiniteQuery.js');
var createMutation = require('./createMutation.js');
var createQuery = require('./createQuery.js');
var createSuspenseInfiniteQuery = require('./createSuspenseInfiniteQuery.js');
var createSuspenseQuery = require('./createSuspenseQuery.js');
const isRouterLeaf = value => {
return !!value && typeof value._routerType === 'string';
};
const buildRouter = (keys, config) => {
return Object.entries(config).reduce((acc, [key, opts]) => {
if (!isRouterLeaf(opts)) {
acc[key] = buildRouter([...keys, key], opts);
} else {
const type = opts._routerType;
const options = { ...opts,
[type === "m" ? "mutationKey" : "queryKey"]: [...keys, key]
};
if (type === "m") {
acc[key] = {
useMutation: createMutation.createMutation(options),
...createMutation.createMutation(options)
};
return acc;
}
acc[key] = type === "q" ? {
useQuery: createQuery.createQuery(options),
useSuspenseQuery: createSuspenseQuery.createSuspenseQuery(options),
...createQuery.createQuery(options)
} : {
useInfiniteQuery: createInfiniteQuery.createInfiniteQuery(options),
useSuspenseInfiniteQuery: createSuspenseInfiniteQuery.createSuspenseInfiniteQuery(options),
...createInfiniteQuery.createInfiniteQuery(options)
};
}
return acc;
}, {
getKey: () => keys
});
};
const router = (key, config) => {
return buildRouter(Array.isArray(key) ? key : [key], config);
};
function query(options) {
return { ...options,
_routerType: 'q'
};
}
function infiniteQuery(options) {
return { ...options,
_routerType: 'inf'
};
}
function mutation(options) {
return { ...options,
_routerType: 'm'
};
}
router.query = query;
router.infiniteQuery = infiniteQuery;
router.mutation = mutation;
exports.router = router;
//# sourceMappingURL=router.js.map