{"_id":"@blujosi/orpc-db-collection","_rev":"19-6db7874373a64355f1da512861e41a2f","name":"@blujosi/orpc-db-collection","dist-tags":{"latest":"0.1.16"},"versions":{"0.1.3":{"name":"@blujosi/orpc-db-collection","version":"0.1.3","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.3","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"48ea679cb234c03dc08397cd0f7493b93b9084b9","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.3.tgz","fileCount":15,"integrity":"sha512-l4LarxSCIdiNTyYIMdXt/GciHxE6nOix0aE/MomHTaSzvKWgcCH/98HPttMNpRUAhgwR+OrNtk6VyooENTx10Q==","signatures":[{"sig":"MEUCIEtLZKR1O4hQrt00ybyAJiZuDQfFNO0l6+R0M9n2i+srAiEAg1it+pU7MAT280H7Ys0BxR/e5hBBWTGmxwJqefAqXlc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100434},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac6d2cda34c244a654a509b47edcabf1ed2954ed","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.18.3","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.7.2","@orpc/server":"^1.9.4","@tanstack/db":"^0.4.8","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^0.0.1","@tanstack/db":"^0.1.24","@tanstack/store":"^0.7.5"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.3_1760439657862_0.11251346682625418","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@blujosi/orpc-db-collection","version":"0.1.4","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.4","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"c4cdf2ef392eb9588215716c9a3b984fd51e6f0e","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.4.tgz","fileCount":15,"integrity":"sha512-JJxAw8QVvG+TTgRVaIS2HUXenY8KAtTfyF8UfzZVqT3Jw2sjbLI79rvvDn7Ms1Zq/Yd1m//JLGrTTHmPvMsEdA==","signatures":[{"sig":"MEUCIQCpxtzX+4l9o5Q+/xB7wbjgw6lwz+xNRVGytyfFRZahWQIgDGEFbKhB5iKkYKD3FDZTmTSHS/w1yYfVDL1LIi6sNX0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100434},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac6d2cda34c244a654a509b47edcabf1ed2954ed","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.18.3","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.7.2","@orpc/server":"^1.9.4","@tanstack/db":"^0.4.8","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^0.0.1","@tanstack/db":"^0.1.24","@tanstack/store":"^0.7.5"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.4_1760440454495_0.8023641641781776","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@blujosi/orpc-db-collection","version":"0.1.5","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.5","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"724dd5ff58f3b063898da3142bdd6f36485a05cd","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.5.tgz","fileCount":15,"integrity":"sha512-ENG4S8jBd+rIkabltnpRuu5oDian2WUFN8tSwFCWyZUN0fBpLH7ivlv6KlQ0Kytovf1uvj31SkS7EGL1ok7Gyw==","signatures":[{"sig":"MEUCIBbocoDc76CTPSJ6UemJdwRf+0SUrwOg2aE1uYktlPNzAiEAyP4hEiPK86PnixToDb+gRli7T497iCwZwZJL+3GYhyk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100435},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac6d2cda34c244a654a509b47edcabf1ed2954ed","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.18.3","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.8.1","@orpc/server":"^1.9.4","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^0.0.1","@tanstack/db":"^0.1.24","@tanstack/store":"^0.7.5"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.5_1760796074675_0.07157437456638371","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@blujosi/orpc-db-collection","version":"0.1.6","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.6","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"4f6945e4174b963e0258ecb6281ae8b3b538b9b1","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.6.tgz","fileCount":15,"integrity":"sha512-B8zHNQI7ZbPfrAJbiVb7zVMq/6F4VlX/tssLG7jMNPPvEpvFbo93e26wrPyRI7s7E5q+ndpaKhfSlIZbK3uhqA==","signatures":[{"sig":"MEYCIQCCn3E18qq45CKy2/IvmixxwMbvkYwiSlw7Mp2b4iSAyQIhAJ51zMYBLwR0dGVmsVLriDSV2TYcMuNd3XondFi0eHTw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102446},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac6d2cda34c244a654a509b47edcabf1ed2954ed","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.18.3","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.8.1","@orpc/server":"^1.9.4","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^0.0.1","@tanstack/db":"^0.1.24","@tanstack/store":"^0.7.5"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.6_1761034418992_0.7581614830183074","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@blujosi/orpc-db-collection","version":"0.1.7","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.7","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"2d65892afd30c43b89b48658a30f497d565e0427","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.7.tgz","fileCount":15,"integrity":"sha512-ad5D9u+5YOljayj8g5c1zUrLfNBNSuvmsnHWynwizefhKPyWP63uKgtVHHD2BR4XzTCxGG1txBcvFUZmsOynig==","signatures":[{"sig":"MEUCIQDOuDUTRWsUv3DY4vXWtC4ECkZLBvNAr4es6GggZUUzWQIgOfHNJQKNmYmscjKjMUFy2xiSX9HhaADiwbMiX4R/w8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102538},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac6d2cda34c244a654a509b47edcabf1ed2954ed","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.18.3","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.8.1","@orpc/server":"^1.9.4","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^0.0.1","@tanstack/db":"^0.1.24","@tanstack/store":"^0.7.5"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.7_1761034609839_0.1210322693167829","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@blujosi/orpc-db-collection","version":"0.1.8","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.8","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"b52ff47ab538f8f7957c76f520007ce4b71e23e9","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.8.tgz","fileCount":15,"integrity":"sha512-pXLXwL8DejsFQfaPHi3hFmISD1WWXfCkhDhepC9m4RosJKO2uCTr7tT+jB0Cn492bffdzYCz9kHlJBhmg1YnLQ==","signatures":[{"sig":"MEUCIHTuna+bOiAGAhbgsQTtEEe0IPlEGhW/aDvLhRe3G9R7AiEAs80XccxUm8ebYB+c1RG2slSlBnCJfC9zxIAPlf/oIHA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102694},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac6d2cda34c244a654a509b47edcabf1ed2954ed","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.18.3","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.8.1","@orpc/server":"^1.9.4","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^0.0.1","@tanstack/db":"^0.1.24","@tanstack/store":"^0.7.5"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.8_1761037235192_0.6516131271668164","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@blujosi/orpc-db-collection","version":"0.1.9","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.9","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"6ed3d3617fa30be3bf05afddeff28d4edfbaee8e","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.9.tgz","fileCount":15,"integrity":"sha512-wmMrVX+JGD6Elxh5f0H7gx15VksWr8XrUP5zZGujZxK4OYx230D+LNKQhWMH08smAe2StUDmD7qmXXISEn28Wg==","signatures":[{"sig":"MEUCIQCJFvx4OlKuFd3Su8m+T6KXyz3ydKxbWhH4xHgUqRFBVwIgIAdpr5VMXdSaqu6DHgJEiphZidc7wKoB83fwZhoVDGY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102942},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac6d2cda34c244a654a509b47edcabf1ed2954ed","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.18.3","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.8.1","@orpc/server":"^1.9.4","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^0.0.1","@tanstack/db":"^0.1.24","@tanstack/store":"^0.7.5"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.9_1761044388030_0.4097077527048303","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@blujosi/orpc-db-collection","version":"0.1.10","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.10","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"0422af0143cd63a65eb54a7359add43b9da2bbe2","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.10.tgz","fileCount":15,"integrity":"sha512-3eQHsIgiq/Wc0wR0qymAvzGkbK9h+n6DOIWullb7bkSV7+o5fZTA/5Ka14s2DOpTHIc/VJrWrj4YHoULKXEWwQ==","signatures":[{"sig":"MEUCIGJbp1PWJxbAJLXPgNuCo8t74PuecLJ1avLy4+eDpvJnAiEA0YtjkBE2LrVHK1UhXOYm+/BS7RJsyh3rBCuNfp1o2f4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2578879},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac6d2cda34c244a654a509b47edcabf1ed2954ed","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.18.3","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.8.1","@orpc/server":"^1.9.4","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^0.0.1","@tanstack/db":"^0.1.24","@tanstack/store":"^0.7.5"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.10_1761055597417_0.021485208749247642","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@blujosi/orpc-db-collection","version":"0.1.11","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.11","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"f31be68c816832966a21521dfbf4721e45391f4b","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.11.tgz","fileCount":15,"integrity":"sha512-wCqqPi5PDGBU0FravcZcI4EGDMxm5Y3beCTSQwWGpjXmDR0TgZ6wZua3ylQexv2yNWfOGr5HXJmQpy/1Qnk6vA==","signatures":[{"sig":"MEUCIHqOeRKi/G0bM6i5e4AqkRKimaLarYFtoQn2ZsTbMkE/AiEAtIiLqXrMbU25n0u000ojoU7cNiyiy5IgOLbwxnnZwIs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2578879},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac6d2cda34c244a654a509b47edcabf1ed2954ed","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.18.3","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.8.1","@orpc/server":"^1.9.4","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^0.0.1","@tanstack/db":"^0.1.24","@tanstack/store":"^0.7.5"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.11_1761118688881_0.378491840293119","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@blujosi/orpc-db-collection","version":"0.1.12","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.12","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"2f2a7c1e0d77f5b6384579900e0b4200d9270615","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.12.tgz","fileCount":15,"integrity":"sha512-cxpLiA46MxvykdfiSdKWOaSmx/kSpI4aih3DIRoA+VlbF+01yTcbVcIMDUr8GF90AXw5wnBpVKo4SY0N6oDLhg==","signatures":[{"sig":"MEQCIFqEV5AaQtHpOB8pWh0CJiUZIYsjRQRNaNSYwF28imb5AiAMdjxqCq4Iygxq62BuBXnCe2N6NtGsvcXHwte7eXMOYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2580607},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac6d2cda34c244a654a509b47edcabf1ed2954ed","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.18.3","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.8.1","@orpc/server":"^1.9.4","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^0.0.1","@tanstack/db":"^0.1.24","@tanstack/store":"^0.7.5"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.12_1761120507248_0.8972164373587892","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@blujosi/orpc-db-collection","version":"0.1.13","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.13","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"937d954ce5981adaefdb8a0a5289b99a926eedb7","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.13.tgz","fileCount":15,"integrity":"sha512-kBoNAB180uTqaKwOk1hzsPzZTgvjBBjwx+Lr18CDhnLCoGydiUuqFUXcnA/yph/wwvbOW4ZeEQaZX4E2PXjXDw==","signatures":[{"sig":"MEUCIQCxRRqwXQjBzNMUumnURy5rZcRReXsATuWYMJ3T+T6RkgIgPQh9vyeht/MHeP9T22eHltGUdCalpPQBeKqvcdfykEg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2580609},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac6d2cda34c244a654a509b47edcabf1ed2954ed","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.19.0","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.9.1","@orpc/server":"^1.10.0","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^1.10.0","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.13_1761121302326_0.7978517107693066","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@blujosi/orpc-db-collection","version":"0.1.14","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.14","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"8f237672e4a635ff0b4cb760ec7d9f3e77c877d4","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.14.tgz","fileCount":15,"integrity":"sha512-A9FG+oxFkv2RLU9QxxTmw9wSaMe9Bq35dnaG+WcV3uwlpCAFWwh+XfZYYWFN22YPMSutFZqOnHKTnw0Wq0gxvQ==","signatures":[{"sig":"MEUCIFEa2YUjXVnfNh90OP16uzAftg/tUqzfXx0yCBZxKcSDAiEA2fQ0KiAiEZnYk1tECZ4ejCtogoQKvZr31n+rBU5lxOk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2580557},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac6d2cda34c244a654a509b47edcabf1ed2954ed","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.19.0","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.9.1","@orpc/server":"^1.10.0","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^1.10.0","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.14_1761129220644_0.36134614543210297","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@blujosi/orpc-db-collection","version":"0.1.15","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","_id":"@blujosi/orpc-db-collection@0.1.15","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"homepage":"https://github.com/joshua1/rpc-db-collection#readme","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"dist":{"shasum":"367194c1bfcee6876b9700deea3814d8f8f3e4bb","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.15.tgz","fileCount":15,"integrity":"sha512-uFq0aAOKVMXbBftNiPr5MxYLHR3IDWSxmR0dBLqxaG0LAHgMmqSBAzV7oSlph9MJQVoxuUgP0ZjDcnaz1iKdiQ==","signatures":[{"sig":"MEUCIF5qciKV3FBlDDzAUy4wXHB1/AcZclIAdl8LrnUwyoIoAiEAoHx1UJgVgXGRDlfMfJzIDaRaXiHlhAci6UvFIC0CScU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2580593},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"cd33b4e160a3b63b941ce5eb04818b76d4c76342","scripts":{"test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"repository":{"url":"git+https://github.com/joshua1/rpc-db-collection.git","type":"git"},"_npmVersion":"11.6.1","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","directories":{},"_nodeVersion":"24.10.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.19.0","devDependencies":{"zod":"^4.1.12","tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.9.1","@orpc/server":"^1.10.0","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"peerDependencies":{"@orpc/server":"^1.10.0","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/orpc-db-collection_0.1.15_1761129703250_0.5164649328516693","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@blujosi/orpc-db-collection","type":"module","version":"0.1.16","description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"scripts":{"build":"tsup","prepublishOnly":"npm run build","typecheck":"tsc --noEmit","test":"vitest run"},"keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"author":{"name":"Joshua O"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/joshua1/rpc-db-collection.git"},"publishConfig":{"access":"public"},"packageManager":"pnpm@10.19.0","devDependencies":{"@orpc/server":"^1.10.0","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0","@types/node":"^24.9.1","tsup":"^8.5.0","typescript":"^5.9.3","vitest":"^3.2.4","zod":"^4.1.12"},"peerDependencies":{"@orpc/server":"^1.10.0","@tanstack/db":"^0.4.11","@tanstack/store":"^0.8.0"},"gitHead":"cd33b4e160a3b63b941ce5eb04818b76d4c76342","_id":"@blujosi/orpc-db-collection@0.1.16","bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"homepage":"https://github.com/joshua1/rpc-db-collection#readme","_nodeVersion":"24.10.0","_npmVersion":"11.6.1","dist":{"integrity":"sha512-zOJ7vK6iKcDZxSAklN1fMVGZniLjhmoeMQC1TQGkmGAR14Yzab8gWJob2Y1BhXng/jZTZU26I6yhmWowJK/y3A==","shasum":"9d0d1bb466cd21fb4ead6cf578707d2681ff16a2","tarball":"https://registry.npmjs.org/@blujosi/orpc-db-collection/-/orpc-db-collection-0.1.16.tgz","fileCount":15,"unpackedSize":2580577,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIH4LBtWxk+Mm5Y0ITPW7MwKcmus+WUDTTdabgLAO/s7tAiEAwBxxh6H6FxeIdlH+fGKysF75rb2D7EAR0DaCxzRAUg8="}]},"_npmUser":{"name":"blujosi","email":"joshua.oguche@outlook.com"},"directories":{},"maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/orpc-db-collection_0.1.16_1761131979726_0.49054424512607864"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-14T11:00:57.709Z","modified":"2025-10-22T11:19:40.210Z","0.1.0":"2025-10-11T13:06:48.561Z","0.1.1":"2025-10-11T16:22:21.414Z","0.1.2":"2025-10-14T07:33:56.038Z","0.1.3":"2025-10-14T11:00:58.088Z","0.1.4":"2025-10-14T11:14:14.692Z","0.1.5":"2025-10-18T14:01:14.860Z","0.1.6":"2025-10-21T08:13:39.174Z","0.1.7":"2025-10-21T08:16:50.049Z","0.1.8":"2025-10-21T09:00:35.382Z","0.1.9":"2025-10-21T10:59:48.201Z","0.1.10":"2025-10-21T14:06:37.680Z","0.1.11":"2025-10-22T07:38:09.099Z","0.1.12":"2025-10-22T08:08:27.523Z","0.1.13":"2025-10-22T08:21:42.601Z","0.1.14":"2025-10-22T10:33:40.846Z","0.1.15":"2025-10-22T10:41:43.484Z","0.1.16":"2025-10-22T11:19:40.016Z"},"bugs":{"url":"https://github.com/joshua1/rpc-db-collection/issues"},"author":{"name":"Joshua O"},"license":"MIT","homepage":"https://github.com/joshua1/rpc-db-collection#readme","keywords":["orpc","tanstack","db","collection","real-time","sync","svelte","react","vue","solid"],"repository":{"type":"git","url":"git+https://github.com/joshua1/rpc-db-collection.git"},"description":"oRPC collection for TanStack DB - Framework agnostic real-time data synchronization","maintainers":[{"name":"blujosi","email":"joshua.oguche@outlook.com"}],"readme":"# oRPC TanStack DB Collection\n\n[![npm version](https://img.shields.io/npm/v/orpc-db-collection.svg)](https://www.npmjs.com/package/orpc-db-collection)\n[![license](https://img.shields.io/npm/l/orpc-db-collection.svg)](https://github.com/joshua1/rpc-db-collection/blob/main/LICENSE)\n[![GitHub stars](https://img.shields.io/github/stars/joshua1/rpc-db-collection.svg?style=social)](https://github.com/joshua1/rpc-db-collection/stargazers)\n\n**oRPC TanStack DB Collection** is a powerful, framework-agnostic integration that combines [oRPC](https://orpc.dev/) with [TanStack DB](https://tanstack.com/db) to provide a seamless, type-safe, real-time data synchronization solution for modern web applications.\n\n## Key Features\n\n- **Framework Agnostic**: Works seamlessly with React, Svelte, Vue, Solid, Angular, and vanilla JavaScript\n- **Full Type Safety**: Leverages oRPC's powerful type inference for end-to-end type safety\n- **Real-time Synchronization**: Server-Sent Events (SSE) for instant updates across clients\n- **Optimistic UI Updates**: Immediate UI feedback with background synchronization\n- **Offline-First**: Optional localStorage persistence with stale-while-revalidate strategy\n- **Full Backend Control**: Unlike solutions like ElectricSQL, you maintain complete ownership of your backend\n- **Easy Integration**: Simple API that works with your existing oRPC routers\n- **Backward Compatible**: Includes aliases for tRPC migration (`TrpcItem`, `TrpcSync`, `trpcCollectionOptions`)\n\n## How It Works\n\nThis package provides a bridge between your oRPC routers and TanStack DB collections. It handles:\n\n1. **Initial Data Loading**: Fetches initial data from your oRPC `list` handler\n2. **Real-time Updates**: Subscribes to server events via SSE for instant synchronization\n3. **CRUD Operations**: Provides optimized create, update, and delete operations\n4. **Conflict Resolution**: Handles event deduplication and race conditions\n\n## Installation\n\n### Core Package\n\n```bash\nnpm install orpc-db-collection @tanstack/db @tanstack/store @orpc/server\n# or\npnpm add orpc-db-collection @tanstack/db @tanstack/store @orpc/server\n# or\nyarn add orpc-db-collection @tanstack/db @tanstack/store @orpc/server\n```\n\n### Framework-Specific Packages\n\nChoose the package for your framework:\n\n**Svelte:**\n\n```bash\npnpm add @tanstack/svelte-db\n```\n\n**React:**\n\n```bash\npnpm add @tanstack/react-db\n```\n\n**Vue:**\n\n```bash\npnpm add @tanstack/vue-db\n```\n\n**Solid:**\n\n```bash\npnpm add @tanstack/solid-db\n```\n\n**Angular:**\n\n```bash\npnpm add @tanstack/angular-db\n```\n\n## Basic Usage\n\n### 1. Define Your oRPC Router\n\nFirst, create an oRPC router that follows the required structure:\n\n```typescript\n// src/lib/orpc/todos.ts\nimport { authedHandler } from '@/lib/orpc'\nimport { z } from 'zod'\nimport { eq, gt } from 'drizzle-orm'\nimport {\n  todosTable,\n  eventsTable,\n  selectTodoSchema,\n  createTodoSchema,\n  updateTodoSchema,\n} from '@/db/schema'\nimport { OrpcSync } from 'orpc-db-collection/server'\n\ntype Todo = z.infer<typeof selectTodoSchema>\nconst todoRouterSync = new OrpcSync<Todo>()\n\n// Helper function for SSE event tracking\nfunction tracked<T>(id: string, data: T): { id: string; data: T } {\n  return { id, data }\n}\n\nexport const todosRouter = {\n  list: authedHandler.input(z.void()).handler(async ({ context }) => {\n    return context.db\n      .select()\n      .from(todosTable)\n      .where(eq(todosTable.userId, context.session.user.id))\n  }),\n\n  create: authedHandler\n    .input(createTodoSchema)\n    .handler(async ({ context, input }) => {\n      const [newTodo] = await context.db\n        .insert(todosTable)\n        .values({ ...input, userId: context.session.user.id })\n        .returning()\n\n      const eventId = await todoRouterSync.registerEvent({\n        currentUserId: context.session.user.id,\n        event: { action: 'insert', data: newTodo },\n        saveEvent: (event) => saveEventToDb(context.db, event),\n      })\n\n      return { item: newTodo, eventId }\n    }),\n\n  update: authedHandler\n    .input(z.object({ id: z.number(), data: updateTodoSchema }))\n    .handler(async ({ context, input }) => {\n      const [updatedTodo] = await context.db\n        .update(todosTable)\n        .set(input.data)\n        .where(eq(todosTable.id, input.id))\n        .returning()\n\n      const eventId = await todoRouterSync.registerEvent({\n        currentUserId: context.session.user.id,\n        event: { action: 'update', data: updatedTodo },\n        saveEvent: (event) => saveEventToDb(context.db, event),\n      })\n\n      return { item: updatedTodo, eventId }\n    }),\n\n  delete: authedHandler\n    .input(z.object({ id: z.number() }))\n    .handler(async ({ context, input }) => {\n      const [deletedTodo] = await context.db\n        .delete(todosTable)\n        .where(eq(todosTable.id, input.id))\n        .returning()\n\n      const eventId = await todoRouterSync.registerEvent({\n        currentUserId: context.session.user.id,\n        event: { action: 'delete', data: deletedTodo },\n        saveEvent: (event) => saveEventToDb(context.db, event),\n      })\n\n      return { item: deletedTodo, eventId }\n    }),\n\n  listen: authedHandler\n    .input(z.object({ lastEventId: z.number().optional() }))\n    .handler(async function* ({ context, input }) {\n      const userId = context.session.user.id\n\n      const eventStream = todoRouterSync.listen({\n        userId,\n        fetchLastEvents: async (lastEventId) => {\n          const events = await context.db\n            .select()\n            .from(eventsTable)\n            .where(\n              eq(eventsTable.userId, userId),\n              gt(eventsTable.id, lastEventId)\n            )\n            .orderBy(eventsTable.id)\n\n          return events.map((event) => ({\n            id: event.id,\n            action: event.action as 'insert' | 'update' | 'delete',\n            data: event.data as Todo,\n            userId: event.userId,\n          }))\n        },\n      })\n\n      for await (const event of eventStream) {\n        yield tracked(event.id.toString(), event)\n      }\n    }),\n}\n```\n\n**Key Differences from tRPC:**\n\n- oRPC uses plain objects instead of `router()` wrapper\n- Handlers use `.handler()` instead of `.query()` and `.mutation()`\n- Context parameter is `context` instead of `ctx`\n- Subscriptions use async generators with `tracked()` for SSE event IDs\n- Direct handler calls: `orpc.todos.list()` instead of `orpc.todos.list.query()`\n\n### 2. Create the Collection\n\n```typescript\n// src/lib/collections.ts\nimport { createCollection } from '@tanstack/db'\nimport { orpc } from '@/lib/orpc-client'\nimport { orpcCollectionOptions } from 'orpc-db-collection'\n\nexport const todosCollection = createCollection(\n  orpcCollectionOptions({\n    tableName: 'todos', // Required: Name of the database table\n    orpcRouter: orpc.todos,\n    rowUpdateMode: 'partial', // or 'full'\n    localStorage: true, // Enable offline support\n    whereFilter: () => true, // Optional: Filter function for list queries\n  })\n)\n```\n\n### 3. Use in Your Components\n\n#### Svelte 5 Example\n\n```svelte\n<!-- src/routes/todos/+page.svelte -->\n<script lang=\"ts\">\n  import { useLiveQuery } from '@tanstack/svelte-db'\n  import { todosCollection } from '$lib/collections'\n\n  const { data: todos } = useLiveQuery((q) =>\n    q.from({ todos: todosCollection }).orderBy('createdAt', 'desc')\n  )\n\n  function toggleTodo(todo) {\n    todosCollection.update(todo.id, { completed: !todo.completed })\n  }\n</script>\n\n<div>\n  {#each $todos as todo (todo.id)}\n    <div>\n      <input\n        type=\"checkbox\"\n        checked={todo.completed}\n        onchange={() => toggleTodo(todo)}\n      />\n      {todo.title}\n    </div>\n  {/each}\n</div>\n```\n\n#### React Example\n\n```typescript\n// src/routes/todos.tsx\nimport { useLiveQuery } from '@tanstack/react-db'\nimport { todosCollection } from '@/lib/collections'\n\nfunction TodosPage() {\n  const { data: todos } = useLiveQuery((q) =>\n    q.from({ todos: todosCollection }).orderBy('createdAt', 'desc')\n  )\n\n  return (\n    <div>\n      {todos.map((todo) => (\n        <TodoItem key={todo.id} todo={todo} />\n      ))}\n    </div>\n  )\n}\n\nfunction TodoItem({ todo }) {\n  return (\n    <div>\n      <input\n        type=\"checkbox\"\n        checked={todo.completed}\n        onChange={() =>\n          todosCollection.update(todo.id, { completed: !todo.completed })\n        }\n      />\n      {todo.title}\n    </div>\n  )\n}\n```\n\n## Local Storage Persistence\n\nThe library supports local storage persistence to provide offline capabilities and faster initial load times. When enabled, your collection data will be automatically saved to and restored from localStorage, with a **stale-while-revalidate** mechanism: the up-to-date data will be fetched in the background and replace your cache when available.\n\n### Benefits of Local Storage Persistence\n\n1. **Offline Support**: Your application can continue to function when the network is unavailable\n2. **Faster Load Times**: Data is immediately available from localStorage while the initial sync happens in the background\n3. **Reduced Server Load**: Fewer initial data fetches on page reload\n\n### How to Enable Local Storage\n\nTo enable local storage persistence, configure the `orpcCollectionOptions` with the `localStorage` option:\n\n```typescript\nimport { orpcCollectionOptions } from 'orpc-db-collection'\nimport { createCollection } from '@tanstack/db'\nimport { orpc } from '@/lib/orpc-client'\n\nconst todosCollection = createCollection(\n  orpcCollectionOptions({\n    tableName: 'todos', // Required: Name of the database table\n    orpcRouter: orpc.todos,\n    rowUpdateMode: 'partial', // or 'full'\n    localStorage: true, // Enable local storage persistence (default: true)\n    whereFilter: () => true, // Optional: Filter function for list queries\n  })\n)\n```\n\n### Configure Serializer (Optional)\n\nBy default, the library uses JSON for serialization when storing data in localStorage. You can customize this by providing your own serializer:\n\n```typescript\nimport { orpcCollectionOptions, jsonSerializer } from 'orpc-db-collection'\n\n// Use default JSON serializer (default)\nconst collectionConfig = orpcCollectionOptions({\n  tableName: 'todos',\n  orpcRouter: orpc.todos,\n  serializer: jsonSerializer, // optional, this is the default\n})\n\n// Or use a custom serializer for complex types\nconst customSerializer = {\n  parse: (text: string) => JSON.parse(text),\n  stringify: (value: any) => JSON.stringify(value),\n}\n\nconst collectionConfigWithCustom = orpcCollectionOptions({\n  tableName: 'todos',\n  orpcRouter: orpc.todos,\n  serializer: customSerializer,\n})\n```\n\n## Collection Options\n\nThe `orpcCollectionOptions` function accepts:\n\n```typescript\ninterface OrpcCollectionConfig<TItem extends OrpcItem> {\n  tableName: string // Required: Name of the database table\n  orpcRouter: RequiredOrpcRouter<TItem>\n  rowUpdateMode?: 'partial' | 'full' // default: 'partial'\n  localStorage?: boolean // default: true\n  whereFilter?: () => boolean // Optional: Filter function for list queries\n  loggerConfig?: {\n    enabled?: boolean\n    level?: 'debug' | 'info' | 'error' | 'none'\n  }\n  serializer?: {\n    parse: <T>(text: string) => T\n    stringify: <T>(value: T) => string\n  }\n  // Plus all standard TanStack DB CollectionConfig options\n}\n\ninterface RequiredOrpcRouter<TItem extends OrpcItem> {\n  list: (input: {\n    tableName: string\n    whereFilter?: () => boolean\n  }) => Promise<TItem[]>\n  create: (\n    input: Omit<TItem, 'id'> & {\n      tableName: string\n    }\n  ) => Promise<OrpcMutationResponse<TItem>>\n  update: (input: {\n    tableName: string\n    id: TItem['id']\n    data: Partial<TItem>\n  }) => Promise<OrpcMutationResponse<TItem>>\n  delete: (input: {\n    id: TItem['id']\n    tableName: string\n  }) => Promise<OrpcMutationResponse<TItem>>\n  listen: {\n    subscribe: (\n      input: { lastEventId: number | null },\n      callbacks: {\n        onData: (event: OrpcSyncEvent<TItem>) => void\n        onError?: (error: Error) => void\n      }\n    ) => { unsubscribe: () => void }\n  }\n}\n\ninterface OrpcMutationResponse<TItem> {\n  item: TItem\n  eventId: number\n}\n```\n\n### Backward Compatibility\n\nFor migration from tRPC, the following aliases are available:\n\n```typescript\nimport {\n  trpcCollectionOptions, // alias for orpcCollectionOptions\n  TrpcItem, // alias for OrpcItem\n  TrpcSync, // alias for OrpcSync\n  TrpcSyncEvent, // alias for OrpcSyncEvent\n} from 'orpc-db-collection'\n```\n\n## Real-time Synchronization\n\nThe package handles real-time synchronization through:\n\n1. **Server-Sent Events (SSE)**: Efficient unidirectional updates from server to clients\n2. **Event Deduplication**: Prevents duplicate processing of the same event\n3. **Race Condition Handling**: Buffers events during initial sync to maintain consistency\n4. **Optimistic Updates**: Immediate UI feedback while waiting for server confirmation\n\n## Example Project\n\nCheck out the [example project](https://github.com/joshua1/rpc-db-collection/tree/main/example) for a complete working implementation using **Svelte 5 + oRPC**. It demonstrates:\n\n- Database schema with Drizzle ORM\n- Complete oRPC router implementation with SSE subscriptions\n- Collection setup and usage with TanStack Svelte DB\n- Svelte 5 components with runes\n- Authentication with Better Auth\n- Vite plugin for oRPC API endpoints\n- Real-time synchronization across multiple clients\n\n## Migration Guide\n\n### From tRPC to oRPC\n\nIf you're migrating from the tRPC version of this library:\n\n1. **Update package name**: `trpc-db-collection` → `orpc-db-collection`\n2. **Update imports**:\n\n   ```typescript\n   // Before\n   import { trpcCollectionOptions, TrpcSync } from 'trpc-db-collection'\n\n   // After\n   import { orpcCollectionOptions, OrpcSync } from 'orpc-db-collection'\n   // Or use backward-compatible aliases\n   import { trpcCollectionOptions, TrpcSync } from 'orpc-db-collection'\n   ```\n\n3. **Update router structure**:\n\n   ```typescript\n   // Before (tRPC)\n   export const todosRouter = router({\n     list: authedProcedure.query(async ({ ctx }) => {\n       /* ... */\n     }),\n     create: authedProcedure.input(schema).mutation(async ({ ctx, input }) => {\n       /* ... */\n     }),\n   })\n\n   // After (oRPC)\n   export const todosRouter = {\n     list: authedHandler.input(z.void()).handler(async ({ context }) => {\n       /* ... */\n     }),\n     create: authedHandler.input(schema).handler(async ({ context, input }) => {\n       /* ... */\n     }),\n   }\n   ```\n\n4. **Update client calls**:\n\n   ```typescript\n   // Before (tRPC)\n   await trpc.todos.list.query()\n   await trpc.todos.create.mutate({ title: 'New todo' })\n\n   // After (oRPC)\n   await orpc.todos.list()\n   await orpc.todos.create({ title: 'New todo' })\n   ```\n\n5. **Update subscriptions**:\n\n   ```typescript\n   // Before (tRPC)\n   listen: authedProcedure.subscription(({ ctx }) => {\n     return todoRouterSync.eventsSubscription({\n       /* ... */\n     })\n   })\n\n   // After (oRPC)\n   listen: authedHandler\n     .input(z.object({ lastEventId: z.number().optional() }))\n     .handler(async function* ({ context, input }) {\n       const eventStream = todoRouterSync.listen({\n         /* ... */\n       })\n       for await (const event of eventStream) {\n         yield tracked(event.id.toString(), event)\n       }\n     })\n   ```\n\n### From ElectricSQL\n\nIf you're migrating from ElectricSQL, this package provides a similar real-time experience but with:\n\n- **Full backend control** (no vendor lock-in)\n- **Complete type safety** (thanks to oRPC)\n- **Simpler architecture** (no separate sync service)\n- **Framework flexibility** (works with React, Svelte, Vue, Solid, Angular)\n\n### From Traditional REST APIs\n\nIf you're using traditional REST APIs with manual state management:\n\n1. Replace REST endpoints with oRPC handlers\n2. Replace manual state management with TanStack DB collections\n3. Replace polling with SSE subscriptions for real-time updates\n4. Use `useLiveQuery` from your framework's TanStack DB adapter\n\n## Performance Considerations\n\n### HTTP/2 Recommendation\n\nFor optimal performance with multiple collections, use HTTP/2 to avoid browser connection limits. The example project includes Caddy configuration for this.\n\n### Connection Management\n\nThe package automatically handles connection cleanup and reconnection logic.\n\n## Contributing\n\nContributions are welcome! Please open issues for bugs or feature requests, and submit pull requests for improvements.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Related Resources\n\n- [TanStack DB Documentation](https://tanstack.com/db/latest/docs/overview)\n- [oRPC Documentation](https://orpc.dev/)\n- [Svelte 5 Documentation](https://svelte.dev/docs/svelte/overview)\n- [Example Project Source (Svelte 5 + oRPC)](https://github.com/joshua1/rpc-db-collection/tree/main/example)\n\n## Framework-Specific Resources\n\n- **Svelte**: [TanStack Svelte DB](https://tanstack.com/db/latest/docs/framework/svelte/quick-start)\n- **React**: [TanStack React DB](https://tanstack.com/db/latest/docs/framework/react/quick-start)\n- **Vue**: [TanStack Vue DB](https://tanstack.com/db/latest/docs/framework/vue/quick-start)\n- **Solid**: [TanStack Solid DB](https://tanstack.com/db/latest/docs/framework/solid/quick-start)\n- **Angular**: [TanStack Angular DB](https://tanstack.com/db/latest/docs/framework/angular/quick-start)\n","readmeFilename":"README.md"}