{"_id":"@canmi/seam-query","_rev":"4-0e9e29d4a8b3403e5ec8a20c1bcfe950","name":"@canmi/seam-query","dist-tags":{"latest":"0.5.38"},"versions":{"0.5.10":{"name":"@canmi/seam-query","version":"0.5.10","license":"MIT","_id":"@canmi/seam-query@0.5.10","maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"dist":{"shasum":"40e4a70707e429f1629e3fb33f2f5e2dd3569328","tarball":"https://registry.npmjs.org/@canmi/seam-query/-/seam-query-0.5.10.tgz","fileCount":5,"integrity":"sha512-+FbDT4xA17dH6jfwCILE8C34phShgNHJh6VYO33RLuPnepHzWwCa0blcm0M0Dc5tyqGhbVDCD9CGkmmmunbt4Q==","signatures":[{"sig":"MEUCIQCVeJB/7eyCKKMjtqhNEnTWdvT1Z6b9ZMfx63/J9OXbMAIgevdDEygxiF50Sk3NWRPKS11zqa5+8j5TmnfoH/pMcn8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14101},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e7b80153466d2e30f3d48575a623c19c54a33d86","scripts":{"test":"vitest run","build":"tsdown"},"_npmUser":{"name":"canmi","email":"t@canmi.icu"},"_npmVersion":"11.10.1","directories":{},"_nodeVersion":"25.7.0","dependencies":{"@tanstack/query-core":"^5.80.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.3","vitest":"^4.0.18","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/seam-query_0.5.10_1772723826118_0.6929201751012384","host":"s3://npm-registry-packages-npm-production"}},"0.5.27":{"name":"@canmi/seam-query","version":"0.5.27","license":"MIT","_id":"@canmi/seam-query@0.5.27","maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"dist":{"shasum":"902f267f3a7b5f98d27244730df6c73de762138e","tarball":"https://registry.npmjs.org/@canmi/seam-query/-/seam-query-0.5.27.tgz","fileCount":6,"integrity":"sha512-ovSxGzDup81f3BiYMtKccLkQHYRAp7awwR+whaN5wmzMe/12hyaY/hLHfwZLZmhSohVV5Dy7BbLzbmN5Ew/LFQ==","signatures":[{"sig":"MEYCIQCRWr/rL/8E/SgQoZ2jKiNQhdTUinyVENWnRlEldAihLQIhAKGukh4KeZyzjQcTXOwpt9zwTqmDnApPBQUcu1/xHZ+B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17023},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"839277de0749659b65c5b609a4a6a6919dfd73b3","scripts":{"test":"vitest run","build":"tsdown"},"_npmUser":{"name":"canmi","email":"t@canmi.icu"},"_npmVersion":"11.10.1","description":"UI-agnostic TanStack Query integration core for SeamJS. Provides query/mutation option factories and SSR hydration utilities without depending on any UI framework.","directories":{},"_nodeVersion":"25.7.0","dependencies":{"@tanstack/query-core":"^5.80.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.3","vitest":"^4.0.18","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/seam-query_0.5.27_1773023091700_0.20136220460318044","host":"s3://npm-registry-packages-npm-production"}},"0.5.31":{"name":"@canmi/seam-query","version":"0.5.31","license":"MIT","_id":"@canmi/seam-query@0.5.31","maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"dist":{"shasum":"27b970d429791e091cb0e1831ebdf8b183c2bff3","tarball":"https://registry.npmjs.org/@canmi/seam-query/-/seam-query-0.5.31.tgz","fileCount":6,"integrity":"sha512-XeUdoZ2mT7bFFenjTKFI5cY9ixdJH0F8rwdfQEFiywOkjia8j1CoYF2bxMQ6pHjR/rIJQDHKXwbWS1YkbE4Uig==","signatures":[{"sig":"MEUCIGNejDzixBasoeuy9sz4rRy5cdbFeKlo9zL01o0k83hBAiEA6R/dqi3oYS2SjGG6n78d4MDhsOBSsmUS/nhbNCjL/X0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17023},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ff754819c953803f0abd339f665b20a11c9db01f","scripts":{"test":"vitest run","build":"tsdown"},"_npmUser":{"name":"canmi","email":"t@canmi.icu"},"_npmVersion":"11.10.1","description":"UI-agnostic TanStack Query integration core for SeamJS. Provides query/mutation option factories and SSR hydration utilities without depending on any UI framework.","directories":{},"_nodeVersion":"25.7.0","dependencies":{"@tanstack/query-core":"^5.80.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.3","vitest":"^4.0.18","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/seam-query_0.5.31_1773114513877_0.5414825536736538","host":"s3://npm-registry-packages-npm-production"}},"0.5.38":{"name":"@canmi/seam-query","version":"0.5.38","license":"MIT","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsdown","test":"vitest run"},"dependencies":{"@tanstack/query-core":"5"},"devDependencies":{"tsdown":"0.21","typescript":"6","vitest":"4"},"gitHead":"baed9724d9970829be89599297fcb11023a8aa05","_id":"@canmi/seam-query@0.5.38","description":"UI-agnostic TanStack Query integration core for SeamJS. Provides query/mutation option factories and SSR hydration utilities without depending on any UI framework.","_nodeVersion":"25.8.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-lwokTQ/dPT8rYd5ZIvv172/mL96QayQcE7EIHUy/Hsj8td6dZlruCbsmSiOLzwsbtG+tf5cep4xVo8iY0NJbEQ==","shasum":"52d69afb9f6531844637bee3a88924564d2bb99c","tarball":"https://registry.npmjs.org/@canmi/seam-query/-/seam-query-0.5.38.tgz","fileCount":6,"unpackedSize":22527,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICrsAEHj+/LepU6MG+XSK6UPHr1LjolLge9olMLLGFX+AiEAgl4MlRxnScC65e1QGSGRHNQ3Of8TEhthFw9oIbj1mm0="}]},"_npmUser":{"name":"canmi","email":"t@canmi.icu"},"directories":{},"maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/seam-query_0.5.38_1774684426102_0.5810657147889049"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-05T15:17:05.953Z","modified":"2026-03-28T07:53:46.380Z","0.5.10":"2026-03-05T15:17:06.268Z","0.5.27":"2026-03-09T02:24:51.838Z","0.5.31":"2026-03-10T03:48:34.021Z","0.5.38":"2026-03-28T07:53:46.256Z"},"license":"MIT","description":"UI-agnostic TanStack Query integration core for SeamJS. Provides query/mutation option factories and SSR hydration utilities without depending on any UI framework.","maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"readme":"# @canmi/seam-query\n\nUI-agnostic TanStack Query integration core for SeamJS. Provides query/mutation option factories and SSR hydration utilities without depending on any UI framework.\n\n## Structure\n\n- `src/index.ts` — Public API exports\n- `src/query-options.ts` — `createSeamQueryOptions` and `resolveStaleTime` factories\n- `src/mutation-options.ts` — `createSeamMutationOptions` and `invalidateFromConfig` factories\n- `src/hydrate.ts` — `hydrateFromSeamData` for SSR hydration from server-injected data\n- `src/types.ts` — Shared type definitions\n\n## Key Exports\n\n| Export                      | Purpose                                                                                                     |\n| --------------------------- | ----------------------------------------------------------------------------------------------------------- |\n| `createSeamQueryOptions`    | Build TanStack Query options from a Seam procedure                                                          |\n| `resolveStaleTime`          | Resolve stale time from procedure cache config                                                              |\n| `createSeamMutationOptions` | Build TanStack Mutation options with automatic invalidation                                                 |\n| `invalidateFromConfig`      | Invalidate related queries after a mutation based on config                                                 |\n| `hydrateFromSeamData`       | Populate QueryClient from server-injected `__loaders` data; also stores `__derived` for first-render access |\n| `getHydratedDerived`        | Retrieve `__derived` values stored during `hydrateFromSeamData`                                             |\n\n### Types\n\n| Type                   | Purpose                                                                    |\n| ---------------------- | -------------------------------------------------------------------------- |\n| `ProcedureConfigEntry` | Procedure metadata: `kind`, optional `cache` (ttl), optional `invalidates` |\n| `ProcedureConfigMap`   | `Record<string, ProcedureConfigEntry>` — full procedure registry           |\n| `SeamQueryConfig`      | Global config: `staleTime`, `gcTime`                                       |\n| `ProcedureMetaBase`    | Generic procedure type map: `Record<string, { kind, input, output }>`      |\n| `RpcFn`                | RPC call signature: `(procedure: string, input?) => Promise<unknown>`      |\n\n## How Hydration Works\n\nDuring SSR, the server injects a `__loaders` object into the Seam data script tag. Each entry maps a loader key to `{ procedure, input }` metadata, with the corresponding data stored alongside it:\n\n```json\n{\n\t\"__loaders\": {\n\t\t\"repos\": { \"procedure\": \"listRepos\", \"input\": { \"org\": \"acme\" } }\n\t},\n\t\"repos\": [{ \"name\": \"app\" }, { \"name\": \"lib\" }]\n}\n```\n\nOn the client, `hydrateFromSeamData(queryClient, seamData)` iterates over `__loaders` and calls `queryClient.setQueryData([procedure, input], data[key])` for each entry, pre-populating the QueryClient cache so queries resolve instantly without refetching.\n\n`hydrateFromSeamData` also stores `__derived` from the seam data in a module-level cache. `getHydratedDerived()` returns this cache for first-render access by `useSeamDerive`.\n\n## Development\n\n- Build: `just build-ts`\n- Test: `just test-ts`\n\n## Notes\n\n- Depends on `@tanstack/query-core` ^5.80.0\n- No React or any other UI framework dependency — use `@canmi/seam-query-react` for React hooks\n","readmeFilename":"README.md"}