tanstack-query-craft
Version:
Type-safe module registry for TanStack Query with enhanced developer experience
120 lines (114 loc) • 3.49 kB
JavaScript
// core.ts
var TanstackQueryCraft = class {
constructor() {
this.modules = {};
}
register(moduleName, module) {
this.modules[moduleName] = module;
}
get(moduleName, key, options) {
const module = this.modules[moduleName];
if (!module) {
throw new Error(`Module "${moduleName}" not found`);
}
const fn = module[key];
if (!fn) {
throw new Error(`Key "${key}" not found in module "${moduleName}"`);
}
return fn(options);
}
getModuleNames() {
return Object.keys(this.modules);
}
getKeys(moduleName) {
return this.modules[moduleName];
}
};
var tanstackQueryCraft = new TanstackQueryCraft();
// utils.ts
function sanitizeKey(key) {
return key.filter(
(key2) => key2 !== void 0 && key2 !== null && key2 !== ""
);
}
// define-mutation.ts
function defineMutation(config) {
return (options) => {
const mutationKey = typeof config.mutationKey === "function" ? config.mutationKey(options) : config.mutationKey;
return {
type: "mutation",
mutationKey: sanitizeKey(mutationKey),
mutationFn: config.mutationFn
};
};
}
// define-query.ts
function defineQuery(config) {
return (options) => {
const queryKey = typeof config.queryKey === "function" ? config.queryKey(options?.variables) : config.queryKey;
return {
type: "query",
queryKey: sanitizeKey(queryKey),
queryFn: () => config.queryFn(options?.variables)
};
};
}
// define-module.ts
function defineModule(name, module) {
tanstackQueryCraft.register(name, module);
return module;
}
// helpers.ts
function invalidateQueries(queryClient) {
return {
invalidate: (moduleName, key, options) => {
const mergedOptions = {
...options,
asParent: options?.asParent ?? false
};
const config = getRegisteredQuery(moduleName, key, mergedOptions);
if (config.type === "query") {
return queryClient.invalidateQueries({
queryKey: mergedOptions.asParent ? config.queryKey.slice(0, config.queryKey.length - 1) : config.queryKey
});
}
return Promise.resolve();
},
invalidateByPrefix: (prefix) => {
return queryClient.invalidateQueries({ queryKey: prefix });
},
invalidateAll: () => {
return queryClient.invalidateQueries();
},
invalidateBulk: (queries) => {
return Promise.all(
queries.map(({ moduleName, key, options }) => {
const mergedOptions = {
...options,
asParent: options?.asParent ?? false
};
const config = getRegisteredQuery(moduleName, key, mergedOptions);
if (config.type === "query") {
return queryClient.invalidateQueries({
queryKey: mergedOptions.asParent ? config.queryKey.slice(0, config.queryKey.length - 1) : config.queryKey
});
}
return Promise.resolve();
})
);
},
queryClient
};
}
function getRegisteredQuery(moduleName, key, options) {
return tanstackQueryCraft.get(moduleName, key, options);
}
function getRegisteredModuleNames() {
return tanstackQueryCraft.getModuleNames();
}
function getModuleKeys(moduleName) {
return tanstackQueryCraft.getKeys(moduleName);
}
export { defineModule, defineMutation, defineQuery, getModuleKeys, getRegisteredModuleNames, getRegisteredQuery, invalidateQueries, sanitizeKey, tanstackQueryCraft };
//# sourceMappingURL=index.mjs.map
//# sourceMappingURL=index.mjs.map