{"_id":"@ddanshin/typed-query-state","_rev":"2-4a0932ba263dd04fe790eb207326afda","name":"@ddanshin/typed-query-state","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.2":{"name":"@ddanshin/typed-query-state","version":"0.1.2","license":"MIT","_id":"@ddanshin/typed-query-state@0.1.2","maintainers":[{"name":"ddanshin","email":"si1ver300594@gmail.com"}],"dist":{"shasum":"62d43cca494ab8329ac102b82682d40ad5450816","tarball":"https://registry.npmjs.org/@ddanshin/typed-query-state/-/typed-query-state-0.1.2.tgz","fileCount":25,"integrity":"sha512-3WH4s014MhF8+n4iLX8b9TgLSmfhEYJ9eI9iKUc1L01yJxdzqU2iPu98XSw72CD5F2C3xAvPXqOdLlJXkB1kpw==","signatures":[{"sig":"MEQCIH4IAq4OVbTWvbruaGx4GN/NF7y6B5Tnnz1O8tBvIxuVAiBrkrstvPAvl86NWGS91KJQjCTrlzMnh4TbCHn3q1JDFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139815},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"npm":">=11.16.0","node":">=24.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./codecs":{"types":"./dist/codecs.d.ts","import":"./dist/codecs.js","require":"./dist/codecs.cjs"},"./package.json":"./package.json"},"gitHead":"910619c7dbbb7ff819c62bd03d03ba4001aacb82","private":false,"scripts":{"lint":"node scripts/run-commands.mjs lint eslint src --max-warnings=0","test":"node scripts/run-commands.mjs test vitest run","build":"node scripts/run-commands.mjs build tsup","verify":"node scripts/run-commands.mjs verify npm run format:check ::: npm run lint ::: npm run security:check ::: npm run typecheck ::: npm run test ::: npm run build ::: npm run pack:check ::: npm run docs:check","typecheck":"node scripts/run-commands.mjs typecheck tsc --noEmit","docs:check":"node scripts/check-docs.mjs","pack:check":"node scripts/check-package.mjs","test:watch":"vitest","format:check":"prettier . --check","security:check":"node scripts/run-commands.mjs security-check node scripts/check-security-dependencies.mjs","release:check-tag":"node scripts/run-commands.mjs release-check-tag node scripts/check-release-tag.mjs"},"_npmUser":{"name":"ddanshin","email":"si1ver300594@gmail.com"},"_npmVersion":"11.16.0","description":"Type-safe URL query state for browser applications and React.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vite":"^8.2.1","jsdom":"^25.0.0","react":"^19.0.0","eslint":"^9.0.0","vitest":"^4.1.10","prettier":"^3.0.0","react-dom":"^19.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","typescript-eslint":"^8.67.0","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.0.0"},"peerDependencies":{"react":">=18.0.0 <20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/typed-query-state_0.1.2_1786567579137_0.6862194968988846","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@ddanshin/typed-query-state","version":"0.1.4","description":"Type-safe URL query state for browser applications and React.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Si1ver01/typed-query-state.git"},"type":"module","private":false,"sideEffects":false,"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js","require":"./dist/react.cjs"},"./codecs":{"types":"./dist/codecs.d.ts","import":"./dist/codecs.js","require":"./dist/codecs.cjs"},"./package.json":"./package.json"},"publishConfig":{"access":"public"},"engines":{"node":">=24.18.0","npm":">=11.16.0"},"peerDependencies":{"react":">=18.0.0 <20.0.0"},"scripts":{"build":"node scripts/run-commands.mjs build tsup","typecheck":"node scripts/run-commands.mjs typecheck tsc --noEmit","test":"node scripts/run-commands.mjs test vitest run","test:watch":"vitest","lint":"node scripts/run-commands.mjs lint eslint src --max-warnings=0","format:check":"prettier . --check","pack:check":"node scripts/check-package.mjs","docs:check":"node scripts/check-docs.mjs","security:check":"node scripts/run-commands.mjs security-check node scripts/check-security-dependencies.mjs","release:check-tag":"node scripts/run-commands.mjs release-check-tag node scripts/check-release-tag.mjs","verify":"node scripts/run-commands.mjs verify npm run format:check ::: npm run lint ::: npm run security:check ::: npm run typecheck ::: npm run test ::: npm run build ::: npm run pack:check ::: npm run docs:check"},"devDependencies":{"@testing-library/jest-dom":"^6.0.0","@testing-library/react":"^16.0.0","@types/node":"^22.0.0","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","eslint":"^9.0.0","jsdom":"^25.0.0","prettier":"^3.0.0","react":"^19.0.0","react-dom":"^19.0.0","tsup":"^8.0.0","typescript":"^5.7.0","typescript-eslint":"^8.67.0","vite":"^8.2.1","vitest":"^4.1.10"},"gitHead":"206f450746650c9edfd67703e18021927511fb7d","_id":"@ddanshin/typed-query-state@0.1.4","bugs":{"url":"https://github.com/Si1ver01/typed-query-state/issues"},"homepage":"https://github.com/Si1ver01/typed-query-state#readme","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-jvgSZvfNi1POis6OkvxRXnblO0RZN55B1jDIc+EGnbBrNuMSYLkqOF+c0MjtAAVeIVwJ/i77nNNy6IfUzHJQ8g==","shasum":"de699ec575ce1dce516047c23c0fa2d78078fbdd","tarball":"https://registry.npmjs.org/@ddanshin/typed-query-state/-/typed-query-state-0.1.4.tgz","fileCount":5,"unpackedSize":7188,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ddanshin%2ftyped-query-state@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIA/TZpInxVvHnY0OuGZSEDrKb70xe1Xp28pV6+2w0a9hAiEA6nccuwX+4PXOX4bXgHjptOkIOgEaJPdIfdEBFraK5vc="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5e87d796-7c66-435f-87c8-951d630f59cf"}},"directories":{},"maintainers":[{"name":"ddanshin","email":"si1ver300594@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/typed-query-state_0.1.4_1786569417688_0.43845674752242014"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-12T20:46:18.768Z","modified":"2026-08-12T21:16:58.195Z","0.1.2":"2026-08-12T20:46:19.273Z","0.1.4":"2026-08-12T21:16:57.850Z"},"license":"MIT","description":"Type-safe URL query state for browser applications and React.","maintainers":[{"name":"ddanshin","email":"si1ver300594@gmail.com"}],"readme":"# `@ddanshin/typed-query-state`\n\nТипобезопасная синхронизация состояния интерфейса с URL query parameters без ручного `URLSearchParams`.\nПакет не имеет production runtime dependencies; React adapter подключается отдельным entrypoint.\n\n## Установка\n\n```bash\nnpm install @ddanshin/typed-query-state\n```\n\n## Быстрый старт\n\n```ts\nimport { numberCodec } from '@ddanshin/typed-query-state';\nimport { useQueryState } from '@ddanshin/typed-query-state/react';\n\nconst [page, setPage, resetPage] = useQueryState('page', numberCodec, {\n  defaultValue: 1,\n  history: 'replace',\n});\n\nsetPage((current) => (current ?? 1) + 1);\nresetPage();\n```\n\nДля framework-agnostic кода используйте `createMemoryQuerySource`, `createBrowserQuerySource` и\n`createQueryState`. `createBrowserQuerySource` вызывается только в browser runtime.\n\n## Codecs\n\n`stringCodec`, `numberCodec`, `booleanCodec`, `enumCodec` и `arrayCodec` определяют тип чтения и записи.\nMalformed values возвращают `undefined`, а `defaultValue` задаёт fallback. Ошибка не бросается во время render.\nДля диагностики передайте `onInvalid`, который получает `key`, исходные значения и категорию ошибки.\n\n## SSR\n\nCore не обращается к browser globals во время module evaluation. В React hooks можно передать `source` и\nстабильный `serverSnapshot`, например `createMemoryQuerySource('/products?page=1')`. Browser source создаётся\nлениво только внутри browser render.\n\n## История навигации\n\n`replace` используется по умолчанию, чтобы изменение фильтра не создавало лишнюю историю. `history: 'push'`\nявно добавляет запись в history. При reset параметр удаляется, если значение совпадает с `defaultValue`.\nАтомарное обновление нескольких ключей доступно через `useQueryStates` и `updateQueryStates`.\n\n## Диагностика\n\n`onEvent` получает structured-события `read`, `write`, `decode-fallback` и `navigation-mode`. Пакет не пишет\nquery values и URL в console по умолчанию. Скрипты проекта поддерживают `LOG_LEVEL=DEBUG|INFO`.\n\n## Ограничения\n\nПакет не содержит router adapters, Next.js-specific интеграции, async codecs, server-side URL mutation или\nавтоматическую публикацию. Для React integration требуется React 18 или 19.\n\nПодробный reference: [`docs/api.md`](docs/api.md).\n","readmeFilename":"README.md","homepage":"https://github.com/Si1ver01/typed-query-state#readme","repository":{"type":"git","url":"git+https://github.com/Si1ver01/typed-query-state.git"},"bugs":{"url":"https://github.com/Si1ver01/typed-query-state/issues"}}