{"_id":"@bnussman/query-key","_rev":"1-110aff4328ed096971f6abc813c9e784","name":"@bnussman/query-key","dist-tags":{"latest":"0.0.8"},"versions":{"0.0.7":{"name":"@bnussman/query-key","module":"dist/index.js","main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","author":{"name":"Banks Nussman"},"version":"0.0.7","repository":{"type":"git","url":"git+https://github.com/bnussman/query-key.git"},"bugs":{"url":"https://github.com/bnussman/query-key/issues"},"private":false,"scripts":{"test":"vitest run","build":"tsup"},"devDependencies":{"bun-types":"latest","tsup":"^8.0.1","vitest":"^0.34.6"},"peerDependencies":{"typescript":"^5.0.0"},"_id":"@bnussman/query-key@0.0.7","gitHead":"677d1a1f474a474585f76b46b70dee812abede1d","description":"> [!Warning] > This package is a work in progress","homepage":"https://github.com/bnussman/query-key#readme","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-XkSfTSLb/Zzm0TziQKun3Qyxx6W0hp8ia9xhmPRVYBsg68msXr5d/Ws9p5RcSIBBpG5ueauOYEt4az/3L5M19g==","shasum":"8ba7a2d0707dd86faf7714bfcc8af1829f9b2b53","tarball":"https://registry.npmjs.org/@bnussman/query-key/-/query-key-0.0.7.tgz","fileCount":6,"unpackedSize":6112,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGuMNb6PwtTywFpz7Feas1LhikYm0N5UKTTjMwQ8hC1eAiEA9R0W59RDwBbxjW0CANW4vhoKh9RFWEpvxSCR9dHivlk="}]},"_npmUser":{"name":"bnussman","email":"bnussman@gmail.com"},"directories":{},"maintainers":[{"name":"bnussman","email":"bnussman@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/query-key_0.0.7_1701208253797_0.9379864724862224"},"_hasShrinkwrap":false},"0.0.8":{"name":"@bnussman/query-key","module":"dist/index.js","main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","author":{"name":"Banks Nussman"},"version":"0.0.8","repository":{"type":"git","url":"git+https://github.com/bnussman/query-key.git"},"bugs":{"url":"https://github.com/bnussman/query-key/issues"},"private":false,"scripts":{"test":"vitest run","build":"tsup"},"devDependencies":{"bun-types":"latest","tsup":"^8.0.1","vitest":"^0.34.6"},"peerDependencies":{"typescript":"^5.0.0"},"_id":"@bnussman/query-key@0.0.8","gitHead":"39515eecc5d123bf50abfcbbb5b9d344a9a033c9","description":"A simple package to help you construct typesafe query keys for [`@tanstack/react-query`](https://tanstack.com/query) 🔑","homepage":"https://github.com/bnussman/query-key#readme","_nodeVersion":"18.19.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-2KkkKQII7Cq5Y6HHqYv39CEdZ9J+KDRcFyoKhw9Bpqx18cUPylzjnliVMETbT30wCqlt5LQnhVbPRQfCIgCrVw==","shasum":"bf07d858402c8cfd45689100bc67772d24d1f495","tarball":"https://registry.npmjs.org/@bnussman/query-key/-/query-key-0.0.8.tgz","fileCount":6,"unpackedSize":6789,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTyRcVufYOT5C2+8wKFJPjzD4HVo9g//c7imdgKRi+YgIhAO64OYR8g40Gt0VUET2reV7RpFI0REbWLs4auH0Dh7vZ"}]},"_npmUser":{"name":"bnussman","email":"bnussman@gmail.com"},"directories":{},"maintainers":[{"name":"bnussman","email":"bnussman@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/query-key_0.0.8_1705118307605_0.2198180166127761"},"_hasShrinkwrap":false}},"time":{"created":"2023-11-28T21:50:53.685Z","0.0.7":"2023-11-28T21:50:53.982Z","modified":"2024-01-13T03:58:27.913Z","0.0.8":"2024-01-13T03:58:27.749Z"},"maintainers":[{"name":"bnussman","email":"bnussman@gmail.com"}],"description":"A simple package to help you construct typesafe query keys for [`@tanstack/react-query`](https://tanstack.com/query) 🔑","homepage":"https://github.com/bnussman/query-key#readme","repository":{"type":"git","url":"git+https://github.com/bnussman/query-key.git"},"author":{"name":"Banks Nussman"},"bugs":{"url":"https://github.com/bnussman/query-key/issues"},"readme":"# @bnussman/query-key\n\nA simple package to help you construct typesafe query keys for [`@tanstack/react-query`](https://tanstack.com/query) 🔑\n\nThis package is inspired by and is similar to [`@lukemorales/query-key-factory`](https://github.com/lukemorales/query-key-factory), but allows you to nest queries.\n\n## 🚀 Main Features\n- Generates typesafe query keys based on an object's shape\n- Tightly couples queryKey and queryFn based on [this](https://twitter.com/TkDodo/status/1724082589068075450) reccomendation\n- Allows infinite nesting\n\n## Usage\n\n```typescript\nimport { getQueryKeys } from '@bnussman/query-key';\nimport { useQuery } from '@tanstack/react-query';\n\nconst queries = getQueryKeys({\n  users: {\n    paginated: (params: Params = {}, filter: Filter = {}) => ({\n      queryFn: () => getUsers(params, filter),\n      queryKey: [params, filter]\n    }),\n    user: (id: string) => ({\n      queryFn: () => getUser(id)\n    }),\n    all: {\n      queryFn: getAllUsers\n    }\n  },\n});\n\nconst useUsersQuery = (params: Params, filter: Filter) => \n  useQuery<Page<User>, APIError[]>(queries.users.paginated(params, filter));\n\nconst useUserQuery = (id: string, enabled = true) => \n  useQuery<User, APIError[]>({\n    ...queries.users.user(id),\n    enabled,\n  });\n\nconst useAllUsersQuery = (params: Params, filter: Filter) => \n  useQuery<User[], APIError[]>(queries.users.all);\n\nconst useUserMutation = (id: string) => {\n  const queryClient = useQueryClient();\n\n  return useMutation<User, APIError[], Partial<User>>({\n    mutationFn: (data) => updateUser(id, data),\n    onSuccess: (user) => {\n      queryClient.setQueryData(queries.users.user(id).queryKey, user);\n      queryClient.invalidateQueries(queries.users.paginated.queryKey);\n      queryClient.invalidateQueries(queries.users.all.queryKey);\n    },\n  });\n};\n```\n","readmeFilename":"README.md"}