{"_id":"@1apostoli/use-external-state-next","_rev":"4-2fb122267a25bee1c058227493113ea9","name":"@1apostoli/use-external-state-next","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@1apostoli/use-external-state-next","version":"0.1.0","_id":"@1apostoli/use-external-state-next@0.1.0","maintainers":[{"name":"1apostoli","email":"apostoli.geyer@geyerconsulting.com"}],"dist":{"shasum":"d898008e138e0fa337ddd6c6bc1573184598b830","tarball":"https://registry.npmjs.org/@1apostoli/use-external-state-next/-/use-external-state-next-0.1.0.tgz","fileCount":15,"integrity":"sha512-rNX3Vh/VGoLLHRn00Fu00M8kC8nNdHjfaRKytBKU8lO3fy4zkKv9DPp74QZFGdyqR1hiCqP92y4f9rygiZUffw==","signatures":[{"sig":"MEYCIQChYtsWKWpXKNKeEWeN1cR1PWBfyFfjE1PaJMjzKpXapQIhAL/YdufMCEdnMqFh0JCI4SL20J/jznzjEKaRMebxfjOl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71156},"main":"build/legacy/index.cjs","type":"module","_from":"file:1apostoli-use-external-state-next-0.1.0.tgz","types":"build/legacy/index.d.ts","module":"build/legacy/index.js","exports":{".":{"import":{"types":"./build/modern/index.d.ts","default":"./build/modern/index.js"},"require":{"types":"./build/modern/index.d.cts","default":"./build/modern/index.cjs"}},"./package.json":"./package.json"},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsup --config tsup.config.ts","clean":"rimraf build","typecheck":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"1apostoli","email":"apostoli.geyer@geyerconsulting.com"},"_resolved":"/tmp/0a53de66140e2f259c3689f2a735cf64/1apostoli-use-external-state-next-0.1.0.tgz","_integrity":"sha512-rNX3Vh/VGoLLHRn00Fu00M8kC8nNdHjfaRKytBKU8lO3fy4zkKv9DPp74QZFGdyqR1hiCqP92y4f9rygiZUffw==","_npmVersion":"10.8.2","description":"Query parameter adapter for @1apostoli/use-external-state in Next.js applications","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@1apostoli/use-external-state":"0.1.0"},"react-native":"src/index.ts","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.0.1","jsdom":"^24.0.0","@testing-library/dom":"^10.4.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"next":">=13.4.0","react":"^18 || ^19"},"_npmOperationalInternal":{"tmp":"tmp/use-external-state-next_0.1.0_1761252149624_0.9106795890205224","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@1apostoli/use-external-state-next","version":"0.1.2","_id":"@1apostoli/use-external-state-next@0.1.2","maintainers":[{"name":"1apostoli","email":"apostoli.geyer@geyerconsulting.com"}],"dist":{"shasum":"05f03a373703abec9a795fc0d17d7a1af91ffc08","tarball":"https://registry.npmjs.org/@1apostoli/use-external-state-next/-/use-external-state-next-0.1.2.tgz","fileCount":15,"integrity":"sha512-z0w78/M6pKiNoRQLcsnekrs39pNNy6J86S3Qlo01TBmYZoaQ6w/HDIBtaHuov5gbF3ubyTUKSFuaOLO5x24wBA==","signatures":[{"sig":"MEUCIBcqX0MxYA5LfZ3csC7rJcV26t3EGKp+ZNCSNNVu0CUSAiEA1mC+7lX1AB3HZLx02oQQ5IvsyClLpCG+93vE+XmADqk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79307},"main":"build/legacy/index.cjs","type":"module","_from":"file:1apostoli-use-external-state-next-0.1.2.tgz","types":"build/legacy/index.d.ts","module":"build/legacy/index.js","exports":{".":{"import":{"types":"./build/modern/index.d.ts","default":"./build/modern/index.js"},"require":{"types":"./build/modern/index.d.cts","default":"./build/modern/index.cjs"}},"./package.json":"./package.json"},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsup --config tsup.config.ts","clean":"rimraf build","typecheck":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"1apostoli","email":"apostoli.geyer@geyerconsulting.com"},"_resolved":"/tmp/280795934dbc6f4e7d440f94fba2f0c2/1apostoli-use-external-state-next-0.1.2.tgz","_integrity":"sha512-z0w78/M6pKiNoRQLcsnekrs39pNNy6J86S3Qlo01TBmYZoaQ6w/HDIBtaHuov5gbF3ubyTUKSFuaOLO5x24wBA==","_npmVersion":"10.8.2","description":"Query parameter adapter for @1apostoli/use-external-state in Next.js applications","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@1apostoli/use-external-state":"0.1.2"},"react-native":"src/index.ts","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.0.1","jsdom":"^24.0.0","@testing-library/dom":"^10.4.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"next":">=13.4.0","react":"^18 || ^19"},"_npmOperationalInternal":{"tmp":"tmp/use-external-state-next_0.1.2_1761320446871_0.13817819312752255","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@1apostoli/use-external-state-next","version":"0.1.3","_id":"@1apostoli/use-external-state-next@0.1.3","maintainers":[{"name":"1apostoli","email":"apostoli.geyer@geyerconsulting.com"}],"dist":{"shasum":"bb25bd3ac28a6d244fdd5270802f17a0389650db","tarball":"https://registry.npmjs.org/@1apostoli/use-external-state-next/-/use-external-state-next-0.1.3.tgz","fileCount":15,"integrity":"sha512-TzIpEQlmfpWhLi/Mv9oUe7ocwh8q1vBkpYAxt7kPwcYq8Bm/h6Q9AehZaHSB4h8yZLr5z4EXktIlPXfmiRYrUQ==","signatures":[{"sig":"MEUCIGViXxlyzRmJbcn4XBNXaZn3WXtT11lVsKrqgkhDoPfPAiEAhI1cGksM1M3zu4a7/se4HeH+GkLGkbeYpx/RLK69mo4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79307},"main":"build/legacy/index.cjs","type":"module","_from":"file:1apostoli-use-external-state-next-0.1.3.tgz","types":"build/legacy/index.d.ts","module":"build/legacy/index.js","exports":{".":{"import":{"types":"./build/modern/index.d.ts","default":"./build/modern/index.js"},"require":{"types":"./build/modern/index.d.cts","default":"./build/modern/index.cjs"}},"./package.json":"./package.json"},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsup --config tsup.config.ts","clean":"rimraf build","typecheck":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"1apostoli","email":"apostoli.geyer@geyerconsulting.com"},"_resolved":"/tmp/0ab817ee23fef52efda9043d8e79c590/1apostoli-use-external-state-next-0.1.3.tgz","_integrity":"sha512-TzIpEQlmfpWhLi/Mv9oUe7ocwh8q1vBkpYAxt7kPwcYq8Bm/h6Q9AehZaHSB4h8yZLr5z4EXktIlPXfmiRYrUQ==","_npmVersion":"10.8.2","description":"Query parameter adapter for @1apostoli/use-external-state in Next.js applications","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@1apostoli/use-external-state":"0.1.3"},"react-native":"src/index.ts","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.0.1","jsdom":"^24.0.0","@testing-library/dom":"^10.4.0","@testing-library/react":"^16.3.0","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"next":">=13.4.0","react":"^18 || ^19"},"_npmOperationalInternal":{"tmp":"tmp/use-external-state-next_0.1.3_1761405832582_0.0012857471321077174","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-10-23T20:42:29.514Z","modified":"2025-11-19T18:20:22.843Z","0.1.0":"2025-10-23T20:42:29.835Z","0.1.2":"2025-10-24T15:40:47.121Z","0.1.3":"2025-10-25T15:23:52.755Z"},"description":"Query parameter adapter for @1apostoli/use-external-state in Next.js applications","maintainers":[{"email":"apostoli.geyer@geyerconsulting.com","name":"webviewrpc"}],"readme":"# @1apostoli/use-external-state-next\n\nQuery parameter adapter for [`@1apostoli/use-external-state`](https://www.npmjs.com/package/@1apostoli/use-external-state) tailored to the Next.js App Router.\n\n## Installation\n\n```bash\npnpm add @1apostoli/use-external-state @1apostoli/use-external-state-next\n```\n\nPeer dependencies: `react@^18.2.0` or `^19.0.0`, `next@>=13.4.0`.\n\n## Usage\n\n```tsx\n'use client';\n\nimport { QueryParameterStore } from '@1apostoli/use-external-state-next';\nimport { useExternalState } from '@1apostoli/use-external-state';\nimport { z } from 'zod';\n\nconst searchSchema = z.object({\n  search: z.string().default(''),\n  page: z.coerce.number().min(1).default(1),\n});\n\nexport function ProductsSearch() {\n  const query = useExternalState(QueryParameterStore(), searchSchema, {\n    debounce: { wait: 300 },\n  });\n\n  return (\n    <input\n      value={query.value.search}\n      onChange={(event) => query.set.search(event.target.value)}\n    />\n  );\n}\n```\n\n`QueryParameterStore` keeps managed keys in sync with the Next.js router, merges unknown keys by default, and exposes history control (`push` or `replace`). Combine it with `options.debounce` to batch navigations, or switch to history-only updates via `QueryParameterStore({ navigation: { mode: 'history' } })` when you want to avoid triggering a refetch until you explicitly push to the router.\n","readmeFilename":"README.md"}