UNPKG

tanstack-query-craft

Version:

Type-safe module registry for TanStack Query with enhanced developer experience

120 lines (114 loc) 3.49 kB
// 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