{"_id":"@cioky/ripple-query-remult","_rev":"2-b0d307abf82bd52d56e499d169bfaec0","name":"@cioky/ripple-query-remult","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@cioky/ripple-query-remult","version":"0.1.0","keywords":["ripple","remult","query","livequery"],"license":"MIT","_id":"@cioky/ripple-query-remult@0.1.0","maintainers":[{"name":"cioky","email":"vgromania3@gmail.com"}],"homepage":"https://github.com/Opaius/vike-ripple","bugs":{"url":"https://github.com/Opaius/vike-ripple/issues"},"dist":{"shasum":"99f8be774ce30a5e1a3832665fdca56bb2318f77","tarball":"https://registry.npmjs.org/@cioky/ripple-query-remult/-/ripple-query-remult-0.1.0.tgz","fileCount":3,"integrity":"sha512-KdqLq8t71D3nugvmkUYam5XPv+DMNj4zIrlS2CxWhN6NlfLReqk+Mph+C2kYvKWo8kHTEHmIxWkRfOIZFuV85A==","signatures":[{"sig":"MEUCIQCMLNbrikwIS5oYXHfEhFAH2G1AvTnydr251sqrFukYpgIgSJCusLqOsRGg8hvuYz0ldZRSgP9z4Cxe17Uuk7GZYN8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7751},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"4010f9128c110f140151fee62c79d7cd34a23bb7","_npmUser":{"name":"cioky","email":"vgromania3@gmail.com"},"repository":{"url":"git+https://github.com/Opaius/vike-ripple.git","type":"git"},"_npmVersion":"11.16.0","description":"Remult adapter for @cioky/ripple-query — auto-key derivation, LiveQuery invalidation","directories":{},"_nodeVersion":"26.1.0","_hasShrinkwrap":false,"peerDependencies":{"remult":">=0.26.0","remult-partykit":">=0.0.1","@cioky/ripple-query":"0.1.x"},"_npmOperationalInternal":{"tmp":"tmp/ripple-query-remult_0.1.0_1782405917572_0.47636110967098055","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@cioky/ripple-query-remult","version":"0.2.1","description":"Remult adapter for @cioky/ripple-query — useQuery, mutation, typed invalidation registry, LiveQuery, Infinite Query","type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"},"./use-query":{"types":"./use-query.ts","default":"./use-query.ts"},"./use-live-query":{"types":"./use-live-query.ts","default":"./use-live-query.ts"},"./use-infinite-query":{"types":"./use-infinite-query.ts","default":"./use-infinite-query.ts"}},"repository":{"type":"git","url":"git+https://github.com/Opaius/vike-ripple.git"},"homepage":"https://github.com/Opaius/vike-ripple","bugs":{"url":"https://github.com/Opaius/vike-ripple/issues"},"keywords":["ripple","remult","query","livequery"],"license":"MIT","peerDependencies":{"@cioky/ripple-query":"0.2.x","remult":">=0.26.0","remult-partykit":">=0.0.1"},"gitHead":"62dfb2defd957d554449d8aff58f89b59b715ec7","_id":"@cioky/ripple-query-remult@0.2.1","_nodeVersion":"26.1.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-ShxzYjNrk4Ml+UYF5jGNpxsIMQMhuj3QToWxBncUIpPjWACRmJTZY91dZIEnUQ1MousCD58PLsIECXJ4+314OA==","shasum":"1a7daa9f74f6f1761efebd7724b0b2a9aeed9d0c","tarball":"https://registry.npmjs.org/@cioky/ripple-query-remult/-/ripple-query-remult-0.2.1.tgz","fileCount":9,"unpackedSize":25188,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAiqo+U3kRsc65jw3PbYwnKRqwTABQ0/b9Ofnji/e2QcAiEAq04VLxUDIZiyUZAnxoEExlcek3+uMm7AsB7PLz01seg="}]},"_npmUser":{"name":"cioky","email":"vgromania3@gmail.com"},"directories":{},"maintainers":[{"name":"cioky","email":"vgromania3@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ripple-query-remult_0.2.1_1782514102488_0.029180289366482537"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-25T16:45:17.456Z","modified":"2026-06-26T22:48:22.737Z","0.1.0":"2026-06-25T16:45:17.709Z","0.2.1":"2026-06-26T22:48:22.619Z"},"bugs":{"url":"https://github.com/Opaius/vike-ripple/issues"},"license":"MIT","homepage":"https://github.com/Opaius/vike-ripple","keywords":["ripple","remult","query","livequery"],"repository":{"type":"git","url":"git+https://github.com/Opaius/vike-ripple.git"},"description":"Remult adapter for @cioky/ripple-query — useQuery, mutation, typed invalidation registry, LiveQuery, Infinite Query","maintainers":[{"name":"cioky","email":"vgromania3@gmail.com"}],"readme":"# @cioky/ripple-query-remult\n\nRemult adapter for `@cioky/ripple-query` — `useQuery`, `mutation`, typed invalidation registry, LiveQuery, and Infinite Query.\n\n```\nbun add @cioky/ripple-query-remult\n```\n\n## Usage\n\n```tsx\nimport { remult } from 'remult'\nimport { useQuery, mutation } from '@cioky/ripple-query-remult/use-query'\nimport { Task } from '~/entities/task'\n\nexport function Page() @{\n  const repo = remult.repo(Task)\n  const q = useQuery(repo, 'find', { orderBy: { createdAt: 'desc' } })\n  const { mutate: add } = mutation(repo, 'insert')\n\n  async function handleSubmit() {\n    await add({ title })\n  }\n\n  <>\n    @if (q.data.value === undefined) {\n      <p>Loading...</p>\n    } @else {\n      @for (let task of q.data.value) {\n        <div>{task.title}</div>\n      }\n    }\n    <button onClick={handleSubmit}>Add</button>\n  </>\n}\n```\n\n## API\n\n### `useQuery(repo, method, params?, options?)`\n\nReturns `{ data: Tracked<T[]>, isLoading: Tracked<boolean>, error: Tracked<Error | undefined>, invalidate: () => void }`.\n\nQueries auto-invalidate via the registry — mutations with matching entity key trigger automatic refetch.\n\n| Param | Type | Description |\n|-------|------|-------------|\n| `repo` | `Repository<T>` | A Remult repo, e.g. `remult.repo(Task)` |\n| `method` | `'find'` | Query method |\n| `params` | `Record<string, unknown>` | Query params (where, orderBy, limit) |\n| `options.key` | `string` | Custom registry key (defaults to entity name) |\n| `options.liveQuery` | `boolean` | Subscribe to entity SSE channel for realtime invalidation |\n\n### `mutation(repo, method, options?)`\n\nReturns `{ mutate: (...args) => Promise<T>, isLoading: Tracked<boolean>, error: Tracked<Error | undefined> }`.\n\nAuto-invalidates queries with the entity's key on success.\n\n| Param | Type | Description |\n|-------|------|-------------|\n| `invalidates` | `string \\| string[]` | Query keys to invalidate (defaults to entity name) |\n\n```tsx\nconst { mutate: save } = mutation(repo, 'insert')\nconst { mutate: update } = mutation(repo, 'update', { invalidates: ['Task', 'User'] })\n```\n\n### `registerInvalidator(key, fn)`\n\nRegister a custom invalidation callback. Returns cleanup function.\n\n### `triggerInvalidators(key)`\n\nManually trigger all registered invalidators for a key. Useful for external invalidation (e.g. websocket).\n\n### `useLiveQuery(repo, params?, options?)`\n\nReturns `{ data: Tracked<T[]>, isLoading: Tracked<boolean>, error: Tracked<Error | undefined> }`. SSE-driven real-time updates.\n\n### `useInfiniteQuery(repo, options?)`\n\nReturns `{ data: Tracked<T[]>, isLoading: Tracked<boolean>, error: Tracked<Error | undefined>, hasNextPage: Tracked<boolean>, isFetchingNextPage: Tracked<boolean>, fetchNextPage: () => Promise<void>, invalidate: () => void }`.\n\n## SSR\n\nUse `q.data.value` in `@if` and `@for` blocks — SSR-safe, no pending read errors. Avoid reading Trackeds at component root scope (guards, `&[]` destructure) during SSR.\n\n## Peer Dependencies\n\n- `@cioky/ripple-query` >= 0.2.x\n- `remult` >= 0.26.0\n- `remult-partykit` >= 0.0.1\n","readmeFilename":"README.md"}